(function($){
  $.fn.slide = function(options){
    options = $.extend({
      speed: 600,
      easing: "swing",
      direction: "horizontal",
      items: 1,
      loop: true,
      transition: "slide"
    }, options);
    
    return this.each(function(){
      var $that = $(this),
          $slider = $that.children("ul"),
          blocks = Math.ceil( $slider.children("li").length / options.items ) - 1,
          page = 0;
          
      (options.direction.toLowerCase() === "horizontal") ?
      $slider.css({ left: -(page * options.width) }):
      $slider.css({ top: -(page * options.height) });
      
      // ========== BASIC SETUP ==========
      $that.css({
        overflow: "hidden",
        position: "relative",
        width: options.width,
        height: options.height
      });
      
      $slider.children("li").css({ float: "left" });
      
      var sWidth = (options.direction.toLowerCase() === "horizontal") ? (options.width * (blocks + 1)) : options.width,
          sHeight = (options.direction.toLowerCase() === "horizontal") ? options.height : (options.height * (blocks + 1));
          
      $slider.css({
        position: "absolute",
        top: 0,
        left: 0,
        listStyle: "none",
        padding: 0,
        margin: 0,
        width: sWidth,
        height: sHeight
      });
      
      if(page == 0 && options.loop === false){
        $(options.prev).animate({opacity:.5}).css({cursor:"default"});
      }else if(page == blocks && options.loop ===  false){
        $(options.next).animate({opacity:.5}).css({cursor:"default"});
      }
      
      // ========== INTERACTIONS ==========
      var anim = function(){
        if(options.transition.toLowerCase() === "slide"){
          (options.direction.toLowerCase() === "horizontal") ?
          $slider.stop(true).animate({ left: -(page * options.width) }, options.speed, options.easing):
          $slider.stop(true).animate({ top: -(page * options.height) }, options.speed, options.easing);
        }else if(options.transition.toLowerCase() === "fade"){
          if(options.direction.toLowerCase() === "horizontal"){
            $slider.stop(true).animate({ opacity:0 }, (options.speed * 0.5), options.easing, function(){ 
              $slider.css({ left: -(page * options.width) }).animate({opacity:1}, (options.speed * 0.5), options.easing);
            });
          }else{
            $slider.stop(true).animate({ opacity:0 }, (options.speed * 0.5), options.easing, function(){ 
              $slider.css({ top: -(page * options.height) }).animate({opacity:1}, (options.speed * 0.5), options.easing);
            });
          }
        }
      };
      
      var prevFn = function(){
        if(page > 0){ page--; }
        else if(options.loop === true){ page = blocks; }
        if(page < 1 && options.loop === false){ $(options.prev).animate({opacity:.5}).css({cursor:"default"}); }
        if(options.loop === false){ $(options.next).animate({opacity:1}).css({cursor:"pointer"}); }
        anim();
        return false;
      };
      
      var nextFn = function(){
        if(page < blocks){ page++; }
        else if(options.loop === true){ page = 0; }
        if(page >= blocks && options.loop === false){ $(options.next).animate({opacity:.5}).css({cursor:"default"}); }
        if(options.loop === false){ $(options.prev).animate({opacity:1}).css({cursor:"pointer"}); }
        anim();
        return false;
      };
      
      var bob = setInterval(nextFn,4000);
          
//      $(options.prev).unbind("click").bind("click", prevFn);
//      $(options.next).unbind("click").bind("click", nextFn);
    });
  };
})(jQuery);


