//author    ：  陈进福/cjinfu/梦乐标本
//function  ：  间隔滚动轮播
//first time：  9:43 2009-7-26
//last time ：  9:43 2009-7-26
(function($) {
	$.fn.TM_UE_SlideGapScllor=function(opt){
		//init
		var d1=$(this),
			d2=d1.children(),
			d3=d1.children().children();
		//
		var d1Height=d1.outerHeight(),
			d3Height=d3.outerHeight(),
			d1Width=d1.outerWidth(),
			d3Width=d3.outerWidth(),
			d3Size=d3.size();
		var d2Height=d3Height*d3Size,
			d2Width=d3Width*d3Size;
		//封装公共数据
		var dom={
				d1:d1,
				d2:d2,
				d3:d3,
				d1Height:d1Height,
				d3Height:d3Height,
				d1Width:d1Width,
				d3Width:d3Width,
				d3Size:d3Size,
				d2Height:d2Height,
				d2Width:d2Width
			};
		//setting
		var settings=$.extend(
			{
				speed:"normal",
				timer:3000,
				gapmultiple:1,//间隔高度几倍d3Height，此处为单倍。
				orientation:"down"/*,
				btnupid:"demoup",
				btndownid:"demodown",
				btnleftid:"demoleft",
				btndownid:"demoright"
				*/
			},
			$.fn.TM_UE_SlideGapScllor.defaults,
			opt
		);
		var gapmultiple=settings.gapmultiple,
			orientation=settings.orientation;
		//填充数据clone
		for(var i=0;i<d3Size;i++){
			d3.eq(i).clone().appendTo(d2);
			d3.eq(d3Size-1-i).clone().prependTo(d2);
		}
		//溢出判断
		switch(orientation)
		{
			case "up":
			case "down":
				//数据项不足
				if(d3Size*d3Height<d1Height)return;
				if(gapmultiple*d3Height>d1Height){
					gapmultiple=d1Height/d3Height;
				}
				//position reset
				d2.height(d2Height*3);
				d1.scrollTop(d2Height);
				break;
			case "left":
			case "right":
				//数据项不足
				if(d3Size*d3Width<d1Width)return;
				if(gapmultiple*d3Width>d1Width){
					gapmultiple=d1Width/d3Width;
				}
				//position reset
				//{
					//填充数据后，如果遇到浮动，克隆数据将被挤到第二行去，横向滑行将会边滑动边从地下跳上来
					//该宽度赋值请必须写在scrollleft之前，否则scrollleft由于无滚动出现赋值将会失败
					d2.width(d2Width*3);
				//}
				d1.scrollLeft(d2Width);
				break;
		}
		//each play
		return $(this).each(function(){
			AutoPlay($(this),settings,dom);
		});
    };
    //autoplay
	var AutoPlay=function($this,settings,dom){
		//init
		var d1=dom.d1,
			d2=dom.d2,
			d3=dom.d3;
		//
		var d1Height=dom.d1Height,
			d3Height=dom.d3Height,
			d1Width=dom.d1Width,
			d3Width=dom.d3Width,
			d3Size=dom.d3Size;
		var d2Height=dom.d2Height,
			d2Width=dom.d2Width;
		//
		var speed=settings.speed,
			timer=settings.timer,
			gapmultiple=settings.gapmultiple,
			orientation=settings.orientation,
			btnupid=$("#"+settings.btnupid),
			btndownid=$("#"+settings.btndownid),
			btnleftid=$("#"+settings.btnleftid),
			btnrightid=$("#"+settings.btnrightid);
		//up
		var Up=function(){
			btnupid.unbind("click");
			d1.animate({scrollTop:d2Height+(gapmultiple*d3Height)},speed,function(){
				for(i=1;i<=gapmultiple;i++){
					d2.children().eq(0).appendTo(d2);
				}
				d1.scrollTop(d2Height);
				btnupid.bind("click",Up);
			});
			return false;
		};
		//down
		var Down=function(){
			btndownid.unbind("click");
			d1.animate({scrollTop:d2Height-(gapmultiple*d3Height)},speed,function(){
				for(i=1;i<=gapmultiple;i++){
					d2.children().eq(d2.children().size()-1).prependTo(d2);
				}
				d1.scrollTop(d2Height);
				btndownid.bind("click",Down);
			});
			return false;
		};
		//left
		var Left=function(){
			btnleftid.unbind("click");
			d1.animate({scrollLeft:d2Width+(gapmultiple*d3Width)},speed,function(){
				for(i=1;i<=gapmultiple;i++){
					d2.children().eq(0).appendTo(d2);
				}
				d1.scrollLeft(d2Width);
				btnleftid.bind("click",Left);
			});
			return false;
		};
		//right
		var Right=function(){
			btnrightid.unbind("click");
			d1.animate({scrollLeft:d2Width-(gapmultiple*d3Width)},speed,function(){
				for(i=1;i<=gapmultiple;i++){
					d2.children().eq(d2.children().size()-1).prependTo(d2);
				}
				d1.scrollLeft(d2Width);
				btnrightid.bind("click",Right);
			});
			return false;
		};
		//timer
		var timerID;
		var autoPlay=function(){
			switch(orientation)
			{
				case "up": timerID = window.setInterval(Up,timer);break;
				case "down": timerID = window.setInterval(Down,timer);break;
				case "left": timerID = window.setInterval(Left,timer);break;
				case "right": timerID = window.setInterval(Right,timer);break;
			}
			return false;
		};
		var autoStop = function(){
			window.clearInterval(timerID);
			return false;
		};
		//autoplay
		$(document).ready(autoPlay);
		//hover
		$this.hover(autoStop,autoPlay);
		//btn
		if(btnupid){
			btnupid.click(Up);
			btnupid.hover(autoStop,autoPlay);
		}
		if(btndownid){
			btndownid.click(Down);
			btndownid.hover(autoStop,autoPlay);
		}
		if(btnleftid){
			btnleftid.click(Left);
			btnleftid.hover(autoStop,autoPlay);
		}
		if(btnrightid){
			btnrightid.click(Right);
			btnrightid.hover(autoStop,autoPlay);
		}
		return false;
	};
})(jQuery);
