(function($){
$.fn.extend({
	simpleScroller : function(options){ 
		options = $.extend({}, $.SimpleScroller.defaults, {}, options);
		
		//	Iterate over the current set of matched elements	
		return this.each(function(){
			new $.SimpleScroller(this, options);
		});
	}
});



$.SimpleScroller = function(container, options){
	// Create $ object for container element
	var $container = $(container);
	var $itemsHolder = $container.find('.tradingproduct_holder');
	var $items = $itemsHolder.find('.item');
	var numItems = $items.length;
	var leftButton = $container.find('.left_nav');
	var rightButton = $container.find('.right_nav');
	//	make sure all items are on one line
	var holderWidth = (numItems+1) * options.itemWidth;
	var isScrolling = false;
	var isAutoScrolling = false;
	//	Check for hidden objects
	if((options.width / options.itemWidth) > numItems){
		return;
	}
	reorder();
	$itemsHolder.css('width', holderWidth);
	
	$container.bind('scrollComplete', function(){
		$container.timeout = setTimeout(function(){
			AutoScroll('right');
		}, options.autoDelay);
	});
	$container.trigger('scrollComplete');
	
	leftButton.click(function(){ 
		clearTimeout($container.timeout);
		$container.unbind('scrollComplete');
		if(true === isAutoScrolling){
			$container.trigger('abortScroll', [options, 'left']);
		}
		if(true === isScrolling){
			return;
		}
		Scroll('left', options);
	});
	
	rightButton.click(function(){
		clearTimeout($container.timeout);
		$container.unbind('scrollComplete');
		if(true === isAutoScrolling){
			$container.trigger('abortScroll', [options, 'right']);
		}
		if(true === isScrolling){
			return;
		}
		Scroll('right', options);
	});
	
	function Scroll(direction, options){
		isScrolling = true;
		var distance = 0;
		var $items = $itemsHolder.find('.item');
		var numItems = $items.length;
		
		$container.bind('abortScroll', {}, function(event, options, button){
			abortAutoScroll(options, button);
		});
		
		switch(direction)
		{
			case 'left': 
				distance = 0;
                options.beforeClone($items[numItems-1]);
				
                
                if(options.itemMove) {
                    for(i = 1; i <= options.itemMove;i++) {
                         var clone = $($items[numItems-i]).clone(true);
                         $itemsHolder.prepend(clone);
                    }
                }
                    
                
				$itemsHolder.css({left : -options.itemWidth + 'px', width: holderWidth + 'px'});
				break;
			case 'right':
				distance = -(options.itemWidth);
				$itemsHolder.css({left : '0px', width: holderWidth + 'px'});
                options.beforeClone($items[0]);
				if(options.itemMove) {
                    for(i = 0; i < options.itemMove;i++) {
                         var clone = $($items[i]).clone(true);
                         $itemsHolder.append(clone);
                    }
                }
				
				break;
		}

        options.afterAppend(clone);
		
		$itemsHolder.animate({left: distance + 'px'}, options.speed, options.easing, function(){
			$items = $itemsHolder.find('.item');
			numItems = $items.length;
			switch(direction)
			{
				case 'left':
					distance = options.itemWidth;
					$($items[numItems-1]).remove();
                    for(i = 1; i <= options.itemMove;i++) {
                         $($items[numItems-i]).remove();
                     }
					break;
				case 'right':
					distance = -(options.itemWidth);
					 for(i = 0; i < options.itemMove;i++) {
                         $($items[i]).remove();
                     }
                   	break;
			}
			$itemsHolder.css({left: '0px', width: holderWidth + 'px'});
			isScrolling = false;
			$container.unbind('abortScroll');
			$container.trigger('scrollComplete', [direction]);
		});
	};
	
	function AutoScroll(direction){
		isAutoScrolling = true;
		var autoOptions = $.extend({}, options, {
			speed : options.autoSpeed
			,easing : options.autoEasing
		});
		
		Scroll('right', autoOptions);
	}
	
	function abortAutoScroll(options, button){
		clearTimeout($container.timeout);
		isAutoScrolling = false;
		$itemsHolder.stop();
		//var leftPosition = new Number(parseFloat($itemsHolder.css('left')));
		var $items = $itemsHolder.find('.item');
		var numItems = $items.length;
		
		switch(button)
		{
			case 'left':
				distance = 0;
				var $removeItem = $($items[numItems-1]);
				break;
			case 'right':
				distance = -options.itemWidth;
				var $removeItem = $($items[0]);
				break;
		}
		
		$itemsHolder.animate({left : distance + 'px'}, 50, options.easing, function(){
			$removeItem.remove();
			$itemsHolder.css({left: '0px', width: holderWidth + 'px'});
			isScrolling = false;
		});
	}
    
    function reorder() {
        var position = options.start;
        var newlist = new Array();
        var list = $(".tradingproduct_holder").children();
        var numbers = new Array();
        for (var i = position; i < numItems; i++) {
            var length = numbers.push(i);
        }
        for (var i = 0; i < position; i++) {
            var length =  numbers.push(i);
        }
        for (var i = 0; i < numItems; i++) {
            newlist[i] = list[numbers[i]];
        }
        $(list).remove();
        $(".tradingproduct_holder").append($(newlist));
        options.afterAppend(newlist);
        
        
   }
};

$.SimpleScroller.defaults = {
	width: 500
	,itemWidth : 125
	,speed : 500
	,easing : 'swing'
	,autoSpeed : 8000
	,autoEasing : 'linear'
	,autoScroll : false
	,autoDelay : 0
	,direction : 'right'
    ,itemMove: 1
    ,start :0
    ,beforeClone : function(target) {}
    ,afterAppend : function(target) {}
};
})(jQuery);
