
<!--
/*MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类) Ver 2.0* 

　制作时间:2006-08-29 (Ver 0.5) 
　发布时间:2006-08-31 (Ver 0.8) 
　更新时间:2011-04-01 (Ver 2.0) 
　更新说明: + 加入功能 * 修正、完善 
	2.0.110401 
	+ 缓动功能(将Step设置成小于1的数字(缓动系数)即可开启缓动功能,如0.1,数值越大,滚动越快) 
	+ 鼠标拖动(对于连续滚动可以用鼠标左键进行拖动操作) 
	+ 跳过等待时间功能(针对间歇滚动,在停止状态下可跳过当次延迟时间(DelayTime)) 
	+ 默认停止功能(针对间歇滚动,将WaitTime设置成60000(1分钟)后DelayTime仍起作用，设置成100000后DelayTime不起作用) 
	+ 交替滚动功能(即滚动至尽头后自动返向滚动,Direction=-1上下交替,Direction=4左右交替) 
	+ 边界状态判断功能(针对交替滚动触发OnBound、UnBound事件,使用者可对实际应用情况做相应事件处理,请参照应用实例) 
	* 程序优化 
	+ Slide功能(即幻灯片功能)及MARQUEE标签自动处理功能(It's A Joke,Please Wait …) 
	……
	Version History:1.65.071228、1.6.070131、1.4.061211、1.2.060922、1.0.060901、0.8.060829 
	版本说明请查看http://www.popub.net/script/MSClass.html

　演示说明:http://www.popub.net/script/MSClass.html 
　下载地址:http://www.popub.net/script/MSClass.js 

　应用说明:页面包含<script type="text/javascript" src="MSClass.js" charset="gb2312"></script> 
　
　创建实例 
　　//参数直接赋值法 
　　new Marquee("marquee") 
　　new Marquee("marquee","top") 
　　...... 
　　new Marquee("marquee",0,1,760,52) 
　　new Marquee("marquee","top",1,760,52,50,5000) 
　　...... 
　　new Marquee("marquee",0,1,760,104,50,5000,3000,52) 
　　new Marquee("marquee",null,null,760,104,null,5000,null,-1) 

　　//参数动态赋值法 
　　var Marquee1 = new Marquee("marquee")　*此参数必选 
　　Marquee1.Direction = "top";　或者　Marquee1.Direction = 0; 
　　Marquee1.Step = 1; 
　　Marquee1.Width = 760; 
　　Marquee1.Height = 52; 
　　Marquee1.Timer = 50; 
　　Marquee1.DelayTime = 5000; 
　　Marquee1.WaitTime = 3000; 
　　Marquee1.ScrollStep = 52; 
　　Marquee1.Start(); 

　参数说明 
　　ID		"marquee"	容器ID			(必选) 
　　Direction	(0)		滚动方向		(可选,默认为0向上滚动) 值:-1,0,1,2,3,4(0上 1下 2左 3右 -1上下交替 4左右交替) 
　　Step	(1)		滚动的步长		(可选,默认值为2,数值越大,滚动越快) 
　　Width	(760)		容器可视宽度		(可选,默认值为容器初始设置的宽度) 
　　Height	(52)		容器可视高度		(可选,默认值为容器初始设置的高度) 
　　Timer	(50)		定时器			(可选,默认值为30,数值越小,滚动的速度越快,1000=1秒,建议不小于20) 
　　DelayTime	(5000)		间歇停顿延迟时间	(可选,默认为0不停顿,1000=1秒) 
　　WaitTime	(3000)		开始时的等待时间	(可选,默认或0为不等待,1000=1秒) 
　　ScrollStep	(52)		间歇滚动间距		(可选,默认为翻屏宽/高度,该数值与延迟均为0则为鼠标悬停控制,-1禁止鼠标控制) 

***程序制作/版权所有:崔永祥(333) E-Mail:zhadan007@21cn.com 网址:http://www.popub.net***/
function Marquee() {
	this.CopyRight = "Class Of Marquee Scroll\u901a\u7528\u4e0d\u95f4\u65ad\u6eda\u52a8JS\u5c01\u88c5\u7c7b\r\nMSClass Ver 2.0.110401 \u7a0b\u5e8f/\u7248\u6743 \u5d14\u6c38\u7965(333)\r\nContact:zhadan007@21cn.com http://www.popub.net";
	var a = this;
	a.ID = document.getElementById(arguments[0]);
	if (!a.ID) {
		//alert("\u60a8\u8981\u8bbe\u7f6e\u7684\"" + arguments[0] + "\"\u521d\u59cb\u5316\u9519\u8bef\r\n\u8bf7\u68c0\u67e5\u6807\u7b7eID\u8bbe\u7f6e\u662f\u5426\u6b63\u786e!");
		return a.ID = -1;
	}
	a.BakStep = a.Bound = a.Direction = a.Width = a.Height = a.DelayTime = a.WaitTime = 0;
	a.a = a.b = a.c = a.d = a.e = a.f = a.g = a.h = a.i = a.j = a.m = 0;
	a.Timer = 30;
	a.Step = a.k = 1;
	a.n = {altertop:-1, alterup:-1, top:0, up:0, bottom:1, down:1, left:2, right:3, alterleft:4, slide:5};
	if (typeof arguments[1] == "number" || typeof arguments[1] == "string") {
		a.Direction = arguments[1];
	}
	if (typeof arguments[2] == "number") {
		a.Step = arguments[2];
	}
	if (typeof arguments[3] == "number") {
		a.Width = arguments[3];
	}
	if (typeof arguments[4] == "number") {
		a.Height = arguments[4];
	}
	if (typeof arguments[5] == "number") {
		a.Timer = arguments[5];
	}
	if (typeof arguments[6] == "number") {
		a.DelayTime = arguments[6];
	}
	if (typeof arguments[7] == "number") {
		a.WaitTime = arguments[7];
	}
	if (typeof arguments[8] == "number") {
		a.ScrollStep = arguments[8];
	}
	a.ID.style.overflow = a.ID.style.overflowX = a.ID.style.overflowY = "hidden";
	a.ID.noWrap = true;
	a.IsNotOpera = (navigator.userAgent.toLowerCase().indexOf("opera") == -1);
	a.IsIE = (document.all) ? 1 : 0;
	if (arguments.length >= 7) {
		a.Start();
	}
}
Marquee.prototype.Start = function () {
	if (this.ID == -1) {
		return;
	}
	var d = this;
	if (d.WaitTime < 800) {
		d.WaitTime = 800;
	}
	if (d.Timer < 20) {
		d.Timer = 20;
	}
	if (d.Width == 0) {
		d.Width = parseInt(d.ID.style.width);
	}
	if (d.Height == 0) {
		d.Height = parseInt(d.ID.style.height);
	}
	d.b = Math.round(d.Width / 2);
	d.c = Math.round(d.Height / 2);
	d.BakStep = d.Step;
	d.ID.style.width = d.Width + "px";
	d.ID.style.height = d.Height + "px";
	if (typeof d.Direction == "string") {
		d.Direction = d.n[d.Direction.toString().toLowerCase()];
	}
	if (typeof d.ScrollStep != "number") {
		d.ScrollStep = d.Direction > 1 ? d.Width : d.Height;
	}
	var c = d.Direction > 1 ? "<table cellspacing='0' cellpadding='0' style='border-collapse:collapse;display:inline;'><tr><td noWrap=true style='white-space: nowrap;word-break:keep-all;'>MSCLASS_TEMP_HTML</td><td noWrap=true style='white-space: nowrap;word-break:keep-all;'>MSCLASS_TEMP_HTML</td></tr></table>" : "<table cellspacing='0' cellpadding='0' style='border-collapse:collapse;'><tr><td>MSCLASS_TEMP_HTML</td></tr><tr><td>MSCLASS_TEMP_HTML</td></tr></table>";
	d.tempHTML = d.ID.innerHTML;
	if (d.Direction == 0 || d.Direction == 1) {
		d.ID.innerHTML = c.replace(/MSCLASS_TEMP_HTML/g, d.ID.innerHTML);
	} else {
		if (d.Direction == 2 || d.Direction == 3) {
			(d.ScrollStep == 0 && d.DelayTime == 0) ? d.ID.innerHTML += d.ID.innerHTML : d.ID.innerHTML = c.replace(/MSCLASS_TEMP_HTML/g, d.ID.innerHTML);
		}
	}
	if (d.Step < 1) {
		d.k = d.Step;
		d.Step = 1;
	}
	d.d = d.Direction > 1 ? "scrollLeft" : "scrollTop";
	var b = d.Direction > 1 ? d.Width : d.Height;
	var a = d.Direction > 1 ? "scrollWidth" : "scrollHeight";
	if (d.Direction == 4 || d.Direction == -1) {
		d.Direction = d.Direction > 1 ? 2 : 0;
		d.e = 1;
	}
	d.h = function () {
		d.k < 1 ? d.Step = Math.ceil((d.ScrollStep - d.g) * d.k) : 0;
		d.Scroll();
	};
	d.Continue = function () {
		if (d.j == 1) {
			d.f = setTimeout(d.Continue, d.DelayTime);
		} else {
			clearInterval(d.m);
			d.g = d.i = 0;
			d.m = setInterval(d.h, d.Timer);
		}
		d.Bound = 0;
		if (d.e == 1) {
			d.UnBound();
		}
	};
	d.Run = function (e) {
		if (d.i == 1) {
			if (arguments[0]) {
				d.Direction = arguments[0];
			}
			if (typeof arguments[0] == "string") {
				d.Direction = d.n[arguments[0].toString().toLowerCase()];
			}
			if (d.Direction < 0 || d.Direction > 3) {
				alert("\u53c2\u6570\u8bbe\u7f6e\u9519\u8bef!");
				return false;
			}
			clearTimeout(d.f);
			d.f = setTimeout(d.Continue, 0);
		}
	};
	d.OnBound = d.UnBound = d.Terminate = function () {
	};
	d.Pause = function () {
		d.i = 1;
		clearInterval(d.m);
		if (d.e == 1) {
			if (d.ID[d.d] == 0 || d.ID[d.d] >= d.ID[a] - b) {
				d.Bound = 1;
				d.OnBound();
				d.Direction > 1 ? d.Direction = d.Direction == 2 ? 3 : 2 : d.Direction = 1 - d.Direction;
			}
		}
		d.f = setTimeout(d.Continue, d.DelayTime);
	};
	d.Begin = function () {
		d.ClientScroll = d.ID[a] / 2;
		if (d.ID[a] <= b + d.Step) {
			d.ID.innerHTML = d.tempHTML;
			delete (d.tempHTML);
			return;
		}
		delete (d.tempHTML);
		if (d.WaitTime >= 60000) {
			d.i = 1;
			if (d.WaitTime == 100000) {
				d.DelayTime = 3600000;
			}
			return;
		}
		setTimeout(function () {
			if (d.ScrollStep >= 0 && d.l) {
				d.l();
			}
			d.m = setInterval(d.h, d.Timer);
		}, d.WaitTime);
	};
	setTimeout(d.Begin, 800);
	d.Scroll = function () {
		d.g += d.Step;
		if (d.g >= d.ScrollStep && d.DelayTime > 0) {
			d.Direction % 2 ? d.ID[d.d] -= d.ScrollStep + d.Step - d.g : d.ID[d.d] += d.ScrollStep + d.Step - d.g;
			d.Pause();
			return;
		}
		switch (d.Direction) {
		  case 0:
		  case 2:
			if (d.ID[d.d] >= d.ClientScroll && d.e == 0) {
				d.ID[d.d] -= d.ClientScroll;
			}
			d.ID[d.d] += d.Step;
			break;
		  case 1:
		  case 3:
			if (d.ID[d.d] <= 0 && d.e == 0) {
				d.ID[d.d] += d.ClientScroll;
			}
			d.ID[d.d] -= d.Step;
			break;
		}
	};
};
Marquee.prototype.l = function () {
	var f = this;
	var b = OC = null;
	var a = EventXY = OldXY = NewXY = 0;
	function c(g) {
		var g = g || window.event;
		if (f.DelayTime != 0 || (g.which && g.which != 1) || (g.button && g.button != 1)) {
			return false;
		}
		if (a == 0) {
			f.i = a = 1;
			clearInterval(f.m);
			g.stopPropagation ? g.stopPropagation() : g.cancelBuble = true;
			g.preventDefault ? g.preventDefault() : g.returnValue = false;
			OldXY = f.ID[f.d];
			EventXY = f.Direction > 1 ? window.event ? g.clientX : g.pageX : window.event ? g.clientY : g.pageY;
			b = g.srcElement || g.target;
			OC = b.style.cursor;
			b.style.cursor = "move";
			if (f.IsIE) {
				b.setCapture();
				document.attachEvent("onmousemove", d);
				document.attachEvent("onmouseup", e);
			} else {
				document.addEventListener("mousemove", d, false);
				document.addEventListener("mouseup", e, false);
			}
		}
	}
	function d(h) {
		var h = h || window.event;
		NewXY = f.Direction > 1 ? window.event ? h.clientX : h.pageX : window.event ? h.clientY : h.pageY;
		var g = EventXY - NewXY + OldXY;
		if (g <= 0 || g >= f.ClientScroll) {
			g <= 0 ? f.ID[f.d] += f.ClientScroll : f.ID[f.d] = f.ClientScroll - g;
			EventXY = f.Direction > 1 ? window.event ? h.clientX : h.pageX : window.event ? h.clientY : h.pageY;
			OldXY = f.ID[f.d];
			g = EventXY - NewXY + OldXY;
		}
		f.ID[f.d] = g;
	}
	function e(g) {
		if (f.IsIE) {
			b.releaseCapture();
			document.detachEvent("onmousemove", d);
			document.detachEvent("onmouseup", e);
		} else {
			document.removeEventListener("mousemove", d, false);
			document.removeEventListener("mouseup", e, false);
		}
		f.Continue();
		a = f.j = 0;
		b.style.cursor = OC;
		if (f.j == 0 || f.ScrollStep == 0) {
			clearInterval(f.m);
			f.m = setInterval(f.h, f.Timer);
		}
	}
	if (f.e == 0) {
		f.IsIE ? f.ID.attachEvent("onmousedown", c) : f.ID.addEventListener("mousedown", c, false);
	}
	if (f.ScrollStep == 0) {
		f.ID.onmousemove = function (g) {
			if (f.Direction > 1) {
				var g = g || window.event;
				if (window.event) {
					if (f.IsNotOpera) {
						f.a = g.srcElement.id == f.ID.id ? g.offsetX - f.ID[f.d] : g.srcElement.offsetLeft - f.ID[f.d] + g.offsetX;
					} else {
						f.ScrollStep = null;
						return;
					}
				} else {
					f.a = g.layerX - f.ID[f.d];
				}
				f.Direction = f.a > f.b ? 3 : 2;
				f.AbsCenter = Math.abs(f.b - f.a);
				f.Step = Math.round(f.AbsCenter * (f.BakStep * 2) / f.b);
			}
		};
		f.ID.onmouseout = function () {
			if (f.Step == 0) {
				f.Step = 1;
			}
		};
	} else {
		f.ID.onmouseover = function () {
			f.j = 1;
			clearInterval(f.m);
		};
		f.ID.onmouseout = function () {
			f.j = 0;
			if (f.i == 0) {
				clearInterval(f.m);
				f.m = setInterval(f.h, f.Timer);
			}
		};
	}
};
//-->


