(function($) {

  $.fn.slider = function(options) {

    var defaults = {
      "easing": "linear",
      "step": 250, 
      "animationDuration": 300,
      "autoplayDuration": 3000
    };

    var methods = {

      init : function($elt)
      {
        var settings = {
	    "self": $elt,
	    "slider": $elt.children("div.slider"),
	    "next": $elt.children("div.next"),
	    "prev": $elt.children("div.prev"),
	    "sliderContainer": $elt.children("div.slider").children("ul.slider-container"),
	    "options": $.extend(defaults, options),
	    "timer": null
        };
         
        methods.load(settings);  
      },
	
      load: function(settings) 
      {
	  methods.resize(settings);
	  settings.sliderContainer.css("left", "0px");
	 
	  settings.next.bind("click", function(event){
	      event.preventDefault();
	      methods.next(settings);
	  });

	  settings.prev.bind("click", function(event){
	      event.preventDefault();
	      methods.previous(settings);
	  });

	  methods.autoplay(settings);
      },

      autoplay: function(settings)
      {
	  settings.timer = setTimeout(function(){
	      methods.next(settings);
	      methods.autoplay(settings);
          }, settings.options.autoplayDuration);	  
      },

      resize: function(settings)
      {
	  var container_width = 0;
	  settings.sliderContainer.find("li").each(function(){
	      container_width += $(this).outerWidth(false);
	  });
	  
	  settings.sliderContainer.css("width", parseInt(container_width)+"px");
      },
  
      next: function(settings) 
      {
	  clearTimeout(settings.timer);
	  settings.sliderContainer.stop(true, true);

	  var pos = parseInt(settings.sliderContainer.css("left")) - 250;
	  
	  var right_container = parseInt(settings.sliderContainer.css("left").replace(/px$/, '')) + settings.sliderContainer.width();
	  var right_slider  = settings.slider.width() + 15;

	  if(right_container >  right_slider)
	      settings.sliderContainer.animate({"left": pos+"px"}, settings.options.animationDuration, settings.options.easing);
	  else
	      methods.scrollBegin(settings);

	  methods.autoplay(settings);
      },
	  
      previous: function(settings) 
      {
	  clearTimeout(settings.timer);
	  settings.sliderContainer.stop(true, true);

	  var pos = parseInt(settings.sliderContainer.css("left")) + 250;
	  
	  var left_container = parseInt(settings.sliderContainer.css("left"));
	  var left_slider  = 0;

	  if(left_slider > left_container)
	      settings.sliderContainer.animate({"left": pos+"px"}, settings.options.animationDuration, settings.options.easing);

	  methods.autoplay(settings);
      },

      scrollBegin : function(settings)
      {
	  settings.sliderContainer.animate({"left": "0px"}, settings.options.animationDuration, settings.options.easing);
      }
	  
    }; 

    return this.each(function(){
	methods.init($(this));	
    });
  }

})(jQuery);
