
function dw_scroller(id,w,h,num,axis,bMouse)
{
	this.id = id;
	this.el = document.getElementById?document.getElementById(id):null;
	if(!this.el)
		return;
	this.css=this.el.style;
	this.css.left = this.x=0;
	this.css.top = this.y=0;
	this.w = w;
	this.h = h;
	this.num=num;
	this.axis=axis||"v";
	this.ctr=0;
	this.pause=5000;
	this.speed=60;
	if(bMouse)
		dw_scrollers.setMouseEvents(this.el);
	this.lastTime=new Date().getTime();
	this.check=0;
	this.index=dw_scrollers.ar.length;
	dw_scrollers.ar[this.index]=this;
	this.active=true;};
	dw_scroller.prototype.setTiming=function(speed,pause)
	{
		this.speed=speed;
		this.pause=pause;
	};
	dw_scroller.prototype.controlScroll=function()
	{
		if (this.ctr>this.num-1)
		{
			this.shiftTo(0,0);
			this.ctr=1;
		}
		else
		{
			switch(this.axis)
			{
				case "v":
					if(this.y>-this.h*this.ctr)
					{
						var ny=this.y+-1*this.elapsed/1000*this.speed;
						ny=Math.max(ny,-this.h*this.ctr);
						this.shiftTo(0,ny);
					}
					else
						this.doPause();
					break;
				case "h":
					if(this.x>-this.w*this.ctr)
					{
						var nx=this.x+-1*this.elapsed/1000*this.speed;
						nx=Math.max(nx,-this.w*this.ctr);
						this.shiftTo(nx,0);
					}
					else
						this.doPause();
					break;
			}
		}
	};
	dw_scroller.prototype.doPause=function()
	{
		this.check+=this.elapsed;
		if(this.check>=this.pause)
		{
			this.ctr++;
			this.check=0;
		}
	};
	dw_scroller.prototype.shiftTo=function(x,y){
		this.css.left=(this.x=x)+"px";
		this.css.top=(this.y=y)+"px";
	};
	dw_scrollers={};
	dw_scrollers.ar=[];
	dw_scrollers.setMouseEvents=function(obj)
	{
		obj.onmouseover=dw_scrollers.halt;
		obj.onmouseout=dw_scrollers.resume;
	};
	dw_scrollers.halt=function()
	{
		var curObj;
		for(var i=0;curObj=dw_scrollers.ar[i];i++)
			if(curObj.id==this.id)
			{
				curObj.active=false;return;
			}
	};
	dw_scrollers.resume=function(e)
	{
		var curObj;
		for(var i=0;curObj=dw_scrollers.ar[i];i++)
		{
			if(curObj.id==this.id)
			{
				e=e?e:window.event;
				var toEl=e.relatedTarget?e.relatedTarget:e.toElement;
				if(this!=toEl&&!dw_contained(toEl,this))
				{
					var now=new Date().getTime();
					curObj.elapsed=now-curObj.lastTime;
					curObj.lastTime=now;
					curObj.active=true;
					return;
				}
			}
		}
	};
	dw_scrollers.timer=window.setInterval("dw_scrollers.control()",10);
	dw_scrollers.control=function()
	{
		var curObj;
		for(var i=0;curObj=dw_scrollers.ar[i];i++)
		{
			if (curObj.active&&dw_scrollers.ready)
			{
				var now=new Date().getTime();
				curObj.elapsed=now-curObj.lastTime;
				curObj.lastTime=now;curObj.controlScroll();
			}
		}
	};
	dw_scrollers.GeckoTableFix=function()
	{
		var ua=navigator.userAgent;
		if(ua.indexOf("Gecko")>-1&&ua.indexOf("Firefox")==-1&&ua.toLowerCase().indexOf("like gecko")==-1)
		{
			dw_scrollers.hold=[];
			for(var i=0;arguments[i];i++)
			{
				var wndo=document.getElementById(arguments[i]);
				var holderId=wndo.parentNode.id;
				var holder=document.getElementById(holderId);
				document.body.appendChild(holder.removeChild(wndo));
				wndo.style.zIndex=1000;
				var pos=getPageOffsets(holder);
				wndo.style.left=pos.x+"px";
				wndo.style.top=pos.y+"px";
				dw_scrollers.hold[i]=[arguments[i],holderId];
			}
			window.addEventListener("resize",dw_scrollers.rePosition,true);
		}
	};
	dw_scrollers.rePosition=function()
	{
		if(dw_scrollers.hold)
		{
			for(var i=0;dw_scrollers.hold[i];i++)
			{
				var wndo=document.getElementById(dw_scrollers.hold[i][0]);
				var holder=document.getElementById(dw_scrollers.hold[i][1]);
				var pos=getPageOffsets(holder);
				wndo.style.left=pos.x+"px";wndo.style.top=pos.y+"px";
			}
		}
	};
	dw_scrollers.ready=true;
	function getPageOffsets(el)
	{
		var left=el.offsetLeft;
		var top=el.offsetTop;
		if (el.offsetParent&&el.offsetParent.clientLeft||el.offsetParent.clientTop)
		{
			left+=el.offsetParent.clientLeft;top+=el.offsetParent.clientTop;
		}
		while(el=el.offsetParent)
		{
			left+=el.offsetLeft;top+=el.offsetTop;
		}
		return {x:left,y:top};
	};
	function dw_contained(oNode,oCont)
	{
		if(!oNode)
			return;
		while(oNode=oNode.parentNode)
			if(oNode==oCont)
				return true;
		return false;
	};
	dw_scrollers.unHook=function()
	{
		var i,curObj;
		for(i=0;curObj=dw_scrollers.ar[i];i++)
		{
			if(curObj.el)
			{
				curObj.el.onmouseover=null;
				curObj.el.onmouseout=null;
				curObj.el=null;
			}
		}
	};
	if(window.addEventListener)
		window.addEventListener("unload",dw_scrollers.unHook,true);
	else if(window.attachEvent)
		window.attachEvent("onunload",dw_scrollers.unHook);

