/*
 * jQuery JavaScript Library Marquee Plus 1.0
 * http://mzoe.com/
 *
 * Copyright (c) 2009 MZOE
 * Dual licensed under the MIT and GPL licenses.
 *
 * Date: 2009-05-13 18:54:21
 */
(function($) {
	$.fn.marquee = function(o) {
		//获取滚动内容内各元素相关信息
		o = $.extend({
			speed:		parseInt($(this).attr('speed')) || 30, // 滚动速度
			step:		parseInt($(this).attr('step')) || 1, // 滚动步长
			direction:	$(this).attr('direction') || 'left', // 滚动方向
			pause:		parseInt($(this).attr('pause')) || 0, // 停顿时长
			dwidth:      parseInt($(this).attr('width')) || 500,
			dheight:    parseInt($(this).attr('height')) || 110,
			wspace:    parseInt($(this).attr('wspace')) ||0,
			first: 1,
			currScroll:0,
			clientScroll:0,
			scrollDistance:0
		}, o || {});

	
		var mid;
		var tmid;
		var div 		= $(this); // 容器对象
		div.width(o.dwidth+'px');
		div.height(o.dheight+'px');

		div.css('overflow','hidden');
		var divWidth 	= o.dwidth;//div.innerWidth(); // 容器宽
		var divHeight 	= o.dheight;//div.innerHeight(); // 容器高
		if(o.direction == 'up'|| o.direction == 'down'){
				//if(div[0].scrollHeight==divHeight)return;
					o.clientScroll=160;
					div.html('<table border=0 cellspacing="0" cellpadding="0" nowrap style="display:inline;"><tr style="height:'+divHeight+'px"><td>'+div.html()+'</td></tr><tr style="height:'+divHeight+'px"><td>'+div.html()+'</td></tr><tr style="height:'+divHeight+'px"s><td>'+div.html()+'</td></tr></table>');
					o.scrollDistance=o.dheight*3;
					div.scrollTop(0);
					if(o.direction == 'down')div.scrollTop(o.scrollDistance/3);
		}else if(o.direction =="left" ||o.direction == "right"){
					//if(div[0].scrollWidth==divWidth)return;
					o.clientScroll = divWidth;
					div.html('<table border=0 cellspacing="0" cellpadding="0" nowrap style="display:inline;"><tr><td style="width:'+o.dwidth+'px" nowrap>'+div.html()+'</td><td style="width:'+o.dwidth+'px" nowrap>'+div.html()+'</td></tr></table>');		
					o.scrollDistance = div[0].scrollWidth;
					div.scrollLeft (0);
			
		}

			//div.scrollTop(220);
			mid = setInterval(_marquee, o.speed);
			div.hover(
				function(){
				
					clearInterval(mid);
					mid=null;
					if(tmid != null){
						clearTimeout(tmid);
						tmid=null;
					}
				},
				function(){
					if(mid==null){
		
						mid = setInterval(_marquee, o.speed);
					}
				}

			);
			
		function goon(){
			if(tmid != null){
				clearTimeout(tmid);
				tmid=null;
			}
			if(mid==null)
			mid = setInterval(_marquee, o.speed);
		}
		

		function _marquee() {
			// 滚动
		if(o.currScroll >= o.clientScroll){
			//alert(o.clientScroll+":"+div.scrollTop()+":"+o.scrollDistance+":"+(o.scrollDistance/3+div.scrollLeft()));			
			switch (o.direction)
			{
			case 'left':
				if(o.scrollDistance - o.clientScroll <= div.scrollLeft()){
					div.scrollLeft (o.scrollDistance/2 - o.clientScroll);
					}
				break;
			case 'right':
				if(o.clientScroll >div.scrollLeft()){
					div.scrollLeft(o.scrollDistance/2+div.scrollLeft());
				}
				break;
			case 'up':
				if(o.scrollDistance - o.clientScroll <= div.scrollTop()){
					div.scrollTop(o.scrollDistance/3 - 2*o.clientScroll);
				}
				break;
			case 'down':
				if(o.clientScroll >div.scrollTop()){
					div.scrollTop(o.scrollDistance/3+div.scrollTop());
				}			
				break;
			}
			o.currScroll = o.currScroll-o.clientScroll;
			if(o.pause==0) return;
			if(mid != null){
				clearInterval(mid);
				mid = null;
			}
			tmid = setTimeout(goon, o.pause);
		}else{
			
			switch (o.direction)
			{
			case 'left':
				div.scrollLeft (div.scrollLeft ()+o.step);
				var after=div.scrollLeft();
				if(after==o.scrollDistance-o.clientScroll){
					div.scrollLeft(o.scrollDistance-o.clientScroll-o.scrollDistance/2);
				}
				break;
			case 'right':
				div.scrollLeft(div.scrollLeft()-o.step);
				break;
			case 'up':
			div.scrollTop(div.scrollTop()+o.step);
			var after=div.scrollTop();
			if(after==o.scrollDistance-o.clientScroll)o.currScroll=o.clientScroll-o.step;
				break;
			case 'down':
//				alert(div.scrollTop());
			div.scrollTop(div.scrollTop()-o.step);
			var after=div.scrollTop();
			if(after==o.scrollDistance-o.clientScroll){div.scrollTop(o.scrollDistance-o.clientScroll-o.scrollDistance/3)};
				break;
			}
			o.currScroll += o.step;
		}
	   }
	};
})(jQuery);
$(document).ready(function(){
	$(".marquee").each(function() {
		$(this).marquee();
	});
});
