(function($) {

  $.fn.ULAScroll = function(o) {
    if (typeof o == 'string') {
      var instance = $(this).data('ULAScroll'), args = Array.prototype.slice.call(arguments, 1);
      
      return instance[o].apply(instance, args);
    } else
      return this.each(function() {
          $(this).data('ULAScroll', new $jc(this, o));
      });
  };
  
  var defaults = {
    auto: 1,
    initCallback: null
  };
  
  $.ULAScroll = function(elem, o) {
    this.options    = $.extend({}, defaults, o || {}); 
    
    this.list = $(elem);
    
    this.list.before($('#'+this.id+' li:last'));
  
    this.clip = this.list.parent();  
    
    if (this.options.initCallback != null){
      this.options.initCallback(this, 'init');
    }
    
    this.animate();
    
  };
  
  var $jc = $.ULAScroll;
  
  $jc.fn = $jc.prototype = {
    ULAScroll: '0.2.4'
  };
  
  $jc.fn.extend = $jc.extend = $.extend;
  
  $jc.fn.extend({
    animate: function() {
      var self = this;
      
      self.startAuto();
    },
    
    startAuto: function(s) {
      
      if (this.timer != null)
        return;
        
      
      var self = this;
                
      this.timer = setTimeout(function() { self.next(); }, this.options.auto * 1000);
    },
    
    next: function() {
      this.stopAuto();
      
      var item_width = $('#'+this.options.id+' li').outerWidth() + 10;
      var left_indent = parseInt($('#'+this.options.id).css('left')) - item_width;
      
      if(this.options.lineType == "linear"){
        $('#'+this.options.id+':not(:animated)').animate({'left' : left_indent},this.options.scrollTime, "linear",function(){    
          $('#'+this.id+' li:last').after($('#'+this.id+' li:first')); 
          $('#'+this.id).css({'left' : '0px'});
        });
      }
      else{
        $('#'+this.options.id+':not(:animated)').animate({'left' : left_indent},this.options.scrollTime,function(){    
          $('#'+this.id+' li:last').after($('#'+this.id+' li:first')); 
          $('#'+this.id).css({'left' : '0px'});
        });
      }
      
      this.animate();
    },
    
    stopAuto: function() {
      if (this.timer == null)
          return;

      clearTimeout(this.timer);
      this.timer = null;
    },
    
    stopAutoHover: function() {
      if (this.timer == null)
          return;

      clearTimeout(this.timer);
      this.timer = null;
    }
    
  });


})(jQuery);
