/**
 * 自由滚动插件
 * @author Scott
 * @date 2010-08-28
 *
 * 使用方法: ul {width:300px;height:50px;overflow:hidden;}
 * ul li{height:50px;line-height:50px;}
*/

(function(jQuery){
	jQuery.fn.freeScroll = function(options){
		var options = jQuery.extend({
			scrollElement : "li",
			scrollEleNum : 1,
			direction : "up",
			stoptime : 3000,
			speed : "slow"
		}, options);

		return this.each(function(){
			switch(options.direction){
				case "up":
					jQuery.fn.freeScrollUp( jQuery(this) , options );
				break;
				case "down":
					jQuery.fn.freeScrollDown( jQuery(this) , options );
				break;
				case "right":
					jQuery.fn.freeScrollRight( jQuery(this) , options );
				break;
				case "left":
					jQuery.fn.freeScrollLeft( jQuery(this) , options );
				break;
			}
		});
	};

	jQuery.fn.freeScrollUp = function(JQobj , options){
		JQobj.html(JQobj.html() + JQobj.html()) ;
		var stop = false;
		var elements = JQobj.find( options.scrollElement ).hover(function(){stop = true;},function(){stop = false;});
		var eleHeight = jQuery(elements[0]).height() 
		var scrollHeight = eleHeight * elements.length ;
		eleHeight = eleHeight * options.scrollEleNum;
		var set = setInterval(function(){
			if(stop)return;
			var scrTop = JQobj.scrollTop() + eleHeight;
			if( scrTop <= scrollHeight/2)
				JQobj.animate({scrollTop:scrTop+'px'} , options.speed );
			else{
				JQobj.scrollTop(0);
				JQobj.animate({scrollTop:eleHeight+'px'} , options.speed );
			}
		} , options.stoptime );
	};

	jQuery.fn.freeScrollDown = function(JQobj , options){
		JQobj.html(JQobj.html() + JQobj.html()) ;
		var stop = false;
		var elements = JQobj.find( options.scrollElement ).hover(function(){stop = true;},function(){stop = false;});
		var eleHeight = jQuery(elements[0]).height();
		var scrollHeight = eleHeight * elements.length ;
		eleHeight = eleHeight * options.scrollEleNum;
		var parentHeight = JQobj.parent().height();
		JQobj.scrollTop(scrollHeight);
		var set = setInterval(function(){
			if(stop)return;
			var scrTop = JQobj.scrollTop() + eleHeight*-1;
			if( scrTop >= scrollHeight/2- parentHeight)
				JQobj.animate({scrollTop:scrTop+'px'} , options.speed );
			else{
				JQobj.scrollTop(scrollHeight);
				JQobj.animate({scrollTop:JQobj.scrollTop()-eleHeight+'px'} , options.speed );
			}
		} , options.stoptime );
	};

	jQuery.fn.freeScrollRight = function(JQobj , options){
		JQobj.html(JQobj.html() + JQobj.html()) ;
		var stop = false;
		var elements = JQobj.find( options.scrollElement ).hover(function(){stop = true;},function(){stop = false;});
		var eleWidth = jQuery(elements[0]).width();
		var scrollWidth = eleWidth * elements.length ;
		var parent = JQobj.parent();
		var set = setInterval(function(){
			if(stop)return;
			var scrLeft = parent.scrollLeft() + eleWidth;
			if( scrLeft <= scrollWidth/2){
				parent.animate({scrollLeft:scrLeft+'px'} , options.speed );
			}else{
				parent.scrollLeft(0);
				parent.animate({scrollLeft:eleWidth+'px'} , options.speed );
			}
		} , options.stoptime );
	};

	jQuery.fn.freeScrollLeft = function(JQobj , options){
		JQobj.html(JQobj.html() + JQobj.html()) ;
		var stop = false;
		var elements = JQobj.find( options.scrollElement ).hover(function(){stop = true;},function(){stop = false;});
		var eleWidth = jQuery(elements[0]).width();
		var scrollWidth = eleWidth * elements.length ;
		var parent = JQobj.parent();
		parent.scrollLeft(scrollWidth/2);
		var set = setInterval(function(){
			if(stop)return;
			var scrLeft = parent.scrollLeft() - eleWidth;
			if( scrLeft >= 0){
				parent.animate({scrollLeft:scrLeft+'px'} , options.speed );
			}else{
				parent.scrollLeft(scrollWidth/2);
				parent.animate({scrollLeft:scrollWidth/2-eleWidth+'px'} , options.speed );
			}
		} , options.stoptime );
	};

})(jQuery);
