//author    ：  jin
//function  ：  gapSlide-v1.0
//first time：  2009-7-26
//last time ：  2009-7-26
(function($) {
	$.fn.UE_GapSlide=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.UE_GapSlide.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(){
			main($(this),settings,dom);
		});
    };
    //autoplay
	var main=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);


//author    ：  jin
//function  ：  tip-v2.0
//first time：  2009-09-09
//last time ：  2009-10-10
(function($){
	var fadTimeID;
	$.fn.setAlpha=function(alpha){
		$(this).css({"opacity":alpha/100,"filter":"alpha(opacity="+alpha+")"});
	};
	$.fn._fade=function(opt){
		//settings
		var settings=jQuery.extend(
			{
				fadModel:"hide",
				fadTimer:20,
				fadTimerAdd:10,
				fadStopAlpha:0,
				fadStar:function($this){},
				fadFinish:function($this){}
			},
			opt
		);
		var fadModel=settings.fadModel,
			fadTimer=settings.fadTimer,
			fadTimerAdd=settings.fadTimerAdd,
			fadStopAlpha=settings.fadStopAlpha,
			fadStar=settings.fadStar,
			fadFinish=settings.fadFinish;
		clearInterval(fadTimeID);
		var $this=$(this);
		var alpha=$this.css("opacity")*100;
		if(fadModel=="hide"){
			fadStar($this);
			fadTimeID=setInterval(function(){
				alpha=alpha-fadTimerAdd;
				$this.setAlpha(alpha);
				if(alpha<=fadStopAlpha){
					$this.setAlpha(fadStopAlpha);
					clearInterval(fadTimeID);
					fadFinish($this);
				}
			},fadTimer);
		}else if(fadModel=="show"){
			fadStar($this);
			fadTimeID=setInterval(function(){
				alpha=alpha+fadTimerAdd;
				$this.setAlpha(alpha);
				if(alpha>=fadStopAlpha){
					$this.setAlpha(fadStopAlpha);
					clearInterval(fadTimeID);
					fadFinish($this);
				}
			},fadTimer);
		}
	};
	$.fn.fadeOut=function(opt){
		var settings=jQuery.extend(
			{
				fadModel:"hide",
				fadTimer:20,
				fadTimerAdd:10,
				fadStopAlpha:0,
				fadFinish:function($this){$this.hide();}
			},
			opt
		);
		$(this)._fade(settings);
	}
	$.fn.fadeIn=function(opt){
		var settings=jQuery.extend(
			{
				fadModel:"show",
				fadTimer:20,
				fadTimerAdd:10,
				fadStopAlpha:100,
				fadStar:function($this){$this.show();}
			},
			opt
		);
		$(this)._fade(settings);
	}
	$.fn.UE_Tip=function(opt){
		//settings
		var settings=jQuery.extend(
			{
				tipBoxId:"jTipBox",//动态创建的提示层id，正常情况下只要不冲突无需更改
				tipBoxClass:"jTipBox",//动态创建的提示层class
				tipGetContent:".jTipContent",//tip内容
				tipAlpha:95,//tip透明度
				tipXAdd:0,//tip相对鼠标原点x轴偏移量
				tipYAdd:20,//tip相对鼠标原点y轴偏移量
				//是否效果
				tipFadeFalse:false,//禁用淡入淡出效果
				//ajax
				tipAttrForAjaxSrc:"jTipSrc"//ajax地址属性名
			},
			$.fn.UE_Tip.defaults,
			opt
		);
		main($(this),settings);
    };
    //main
	var main=function($this,settings){
		var tipBoxId=settings.tipBoxId,
			tipBoxClass=settings.tipBoxClass,
			tipGetContent=settings.tipGetContent,
			tipAlpha=settings.tipAlpha,
			tipXAdd=settings.tipXAdd,
			tipYAdd=settings.tipYAdd,
			tipFadeFalse=settings.tipFadeFalse,
			tipAttrForAjaxSrc=settings.tipAttrForAjaxSrc;
		$(window).load(function(){
			var position=function(e){
				var cx=e.pageX;
					cy=e.pageY;
				//正常情况
				var nx=cx+tipXAdd,
					ny=cy+tipYAdd;
				//越界处理
				//##############################################
				//width check--star
				var tipThisX=cx+tipXAdd;
				var tipWidth=$("#"+tipBoxId).width();
				var tipLastX=tipThisX+tipWidth;
				var bodyWidth=$(window).width();
				//over right
				if(tipLastX>bodyWidth){
					//跳转方向，已取消
					var tipOverX=tipLastX-bodyWidth;
					var tipNowX=cx+tipXAdd-tipOverX;
					nx=tipNowX;
				//over left
				}else if(tipThisX<0){
					nx=0;
				}
				$("#"+tipBoxId).css({left:nx,top:ny});
			};
			if(tipFadeFalse){
				$("body").append("<div id='"+tipBoxId+"' class='"+tipBoxClass+"' style='position:absolute;display:none;'></div>");
			}else{
				$("body").append("<div id='"+tipBoxId+"' class='"+tipBoxClass+"' style='position:absolute;display:none;filter:alpha(opacity=0);opacity:0;'></div>");
			}
			var $tip=$("#"+tipBoxId);
			$this.each(function(){
				$(this).hover(
					function(e){
						cx=e.pageX;
						cy=e.pageY;
						$tip.html("loading...");
						$(document).bind("mousemove",position);
						if(tipFadeFalse){
							$tip.show();
						}else{
							$tip.fadeIn({fadStopAlpha:tipAlpha});
						}
						if($(this).attr(tipAttrForAjaxSrc)==undefined){
							$tip.html($(this).find(tipGetContent).html());
						}else{
							$tip.load($(this).attr(tipAttrForAjaxSrc));
						}
					},
					function(e){
						if(tipFadeFalse){
							$tip.hide();
						}else{
							$tip.fadeOut({fadFinish:function($this){$this.hide();$(document).unbind("mousemove",position);}});
						}
					}
				);
			});
		});
		return false;
	};
})(jQuery);