;(function($) {
  'use strict';

  var pluginName = 'SlideIt',
      pluginVersion = '0.1';

  var defaults = {
    downKey: 40,
    upKey: 38,
    current_class: "slide--current",
    slide_class: "slide",
    transition_time: 600,
    default_display_time: 0, // for when it isn't a data attr
    offset: 0
  };

  $.slideIt = function(options) {
    var settings = $.extend(defaults, options);
    // set the class selectors
    settings = $.extend(settings, {
      current_selector: "." + settings.current_class,
      slide_selector: "." + settings.slide_class
    });

    var $slides = $(settings.slide_selector);

    var init = function() {
      //make sure first visible slide is the active one
      setInitialSlide();

      // watch out for keypress
      $(window).on('keydown', function(e) {
        keyNavigation(e);
      });
    };

    var setInitialSlide = function() {
      // does one exist?
      var $currentSlide = $(settings.current_selector);
      if($currentSlide != undefined || $currentSlide > 1) {
        // no? just go for the first slide
        updateActiveSlide($slides[0]);
      }
      // is there one set in the URL
    };

    var updateActiveSlide = function(el) {
      $(el)
        .addClass(settings.current_class)
        .siblings()
          .removeClass(settings.current_class);
    };

    //sets up keyboard navigation behavior
    var keyNavigation = function (e) {
      var key = e.which;

      // QUESTION: does this check whether currently animating?
      if($('html,body').is(':animated') && (key == settings.upKey || key == settings.downKey)) {
        console.log("already scrolling");
        return false;
      }
      e.preventDefault();
      if(key == settings.upKey) {
        moveUp();
        return false;
      } else if(key == settings.downKey) {
        moveDown();
        return false;
      }
      return true;
    };

    var doScroll = function(el) {
      performMovement(el);
      //element.addClass(ACTIVE).siblings().removeClass(ACTIVE);
    };

    var performMovement = function(el){
      // animate with css3 ??

      // animate with jquery
      var targetTop = $(el).offset().top + settings.offset;
      $('html,body').animate({
        scrollTop: targetTop,
        easing: settings.easing
      }, settings.transition_time)
        .promise().done(
          function () { //only one single callback in case of animating  `html, body`
            console.log("scroll complete");
            //afterSectionLoads(v);
            updateActiveSlide(el);
          });
    };

    var moveUp = function() {
      var prev = $(settings.current_selector).prev(settings.slide_selector);

      // looping to the bottom if there's no more sections above
      if(!prev.length) {}

      if(prev.length) {
        doScroll(prev);
      }
    };

    var moveDown = function() {
      var next = $(settings.current_selector).next(settings.slide_selector);

      // looping to the top if there's no more sections below
      if(!next.length) {}

      if(next.length) {
        doScroll(next);
      }
    };

    init();

  };

}(jQuery));

@@ -2754,32 +2754,86 @@
 (!prev.length) %7B
+%0A        doScroll($slides%5B$slides.length - 1%5D);%0A      
 %7D%0A%0A      if(prev
@@ -3079,16 +3079,53 @@
 ength) %7B
+%0A        doScroll($slides%5B0%5D);%0A      
 %7D%0A%0A     

add basic looping through slides