function documentRegister(tag,effect,func,ev,exclusive)

{

	document.toRegister[document.toRegister.length] = {

		tag:tag,

		effect:effect,

		func:func,

		event:ev,

		exclusive:exclusive

	};

}



function startTicker(n)

{

	if(!n) n = document;

	var t, y;

	var r = document.toRegister;

	for(var x=0; x<r.length; x++)

	{  

		t = n.getElementsByTagName(r[x].tag);

		if(r[x].tag=='*' && t.length==0) t = document.all;

		for(y=0; y<t.length; y++)

		{

			if(!r[x].effect || hasClassName(t[y],"Newsticker") || hasClassName(t[y],r[x].effect) || t[y].className.indexOf("Newsticker") > -1 || t[y].className.indexOf("Newsticker") > -1)

			{

				if(r[x].event == 'load')

				{

					t[y].load = r[x].func;

					t[y].load({ currentTarget:t[y] });

				}

				else

				{

					addEventHandler(t[y],r[x].event,r[x].func,r[x].exclusive);

				}

			}

		}

	}

}



function addEventHandler(el,ev,func,exclusive)

{

	if(exclusive)

	{

		if(eval("el.on"+ev+" = func;")) return true;

		else return false;

	}

	else

	{

		if(el.addEventListener)

		{

			el.addEventListener(ev,func,false);

			return true;

		}

		else if(el.attachEvent)

		{

			return el.attachEvent("on"+ev, func);

		}

		else return false;

	}

 

}





function hasClassName(el,searchClass)

{

	var ary = el.className.split(' ');

	var x = 0;

	while(x<ary.length && ary[x]!=searchClass && ary[x].substr(0,ary[x].search(":"))!=searchClass) x++;

	return (x<ary.length);

}



document.toRegister = new Array();

document.register = documentRegister;





var gTickers = new Array();

var gTickerDefaultDelay = 60;

var gTickerDefaultIncrement = 1;

var gTickerTimeouts = new Array();



function tickerLoad()

{

	var pos;

	if(window.getComputedStyle && (pos = window.getComputedStyle(this,null).position))

		if(pos!="absolute" && pos!="fixed") this.style.position = "relative";

	else if(this.currentStyle && (pos = this.currentStyle.position))

		if(pos!="absolute" && pos!="fixed") this.style.position = "relative";

	while(!this.id || gTickers[this.id]) this.id="a"+Math.floor(10000 * Math.random());

	gTickers[this.id] = this;

	this.scrollIncrement = this.className.match(/Ticker\.Increment:([0-9]+)/);

	if(this.scrollIncrement && this.scrollIncrement[1]) this.scrollIncrement = 1*this.scrollIncrement[1];

	else this.scrollIncrement = gTickerDefaultIncrement;

	this.scrollDelay = this.className.match(/Ticker\.Delay:([0-9]+)/);

	if(this.scrollDelay && this.scrollDelay[1]) this.scrollDelay = 1*this.scrollDelay[1];

	else this.scrollDelay = gTickerDefaultDelay;

	this.style.overflow = "hidden";

	this.firstChild.style.position = "absolute";

	this.scrollCurrent = Math.round(this.clientHeight * 0.9);

	this.pauseScroll = tickerOver;

	this.resumeScroll = tickerOut;

	this.firstChild.style.top = this.scrollCurrent + "px";

	moveTicker(this.id);

}



function moveTicker(id)

{

	var s;

	if(gTickers && (s = gTickers[id]))

	{

		s.scrollCurrent = s.scrollCurrent-s.scrollIncrement;

		if(s.scrollCurrent < (-1 * s.firstChild.clientHeight)) s.scrollCurrent = (s.clientHeight);

		s.firstChild.style.top = s.scrollCurrent + "px";

		setScrollTimeout(id);

	}

}



function tickerOver()

{

	if(this.id && gTickerTimeouts && gTickerTimeouts[this.id]) clearTimeout(gTickerTimeouts[this.id]);

}



function tickerOut()

{

	if(this.id && gTickers && gTickers[this.id])

		setScrollTimeout(this.id);

}



function setScrollTimeout(id)

{

	gTickerTimeouts[id] = setTimeout("clearTimeout(gTickerTimeouts['"+id+"']);moveTicker('"+id+"');",gTickers[id].scrollDelay);

}





document.register('div','Ticker',tickerLoad,'load',false);
document.register('div','Ticker',tickerOver,'mouseover',true);
document.register('div','Ticker',tickerOut,'mouseout',true);

