var newsTicker = {};

// obj, step, speed, delay, actual, timer
newsTicker.ticker = [];

newsTicker.init = function(obj, step, speed, delay) {
	if (isNaN(step)) step = 2;
	if (isNaN(speed)) speed = 25;
	if (isNaN(delay)) delay = 1000;
	var i; // Int iterator
	if (obj && (obj.tagName.toLowerCase() == "ul") && document.getElementsByTagName) {
		obj.style.padding = "0";
//		obj.style.margin = "0";
		obj.style.listStyle = "none";
		obj.style.position = "relative";
		obj.style.overflow = "hidden";

		var message = obj.getElementsByTagName("li");
		for (i = 0; i < message.length; i++) {
			message[i].style.display = "block";
			message[i].style.margin = "0";
			message[i].style.position = "absolute";
			message[i].style.whiteSpace = "nowrap";
			message[i].style.left = 0 - message[i].offsetWidth + "px";
		};
		
		var tickerID = newsTicker.ticker.length;
		newsTicker.ticker[tickerID] = [obj, step, speed, delay, message.length-1];
		
		obj.newsTickerID = tickerID;
		obj.onmouseover = newsTicker.stop;
		obj.onmouseout = newsTicker.start;

		newsTicker.roll(tickerID);
		
		return true;
	}
	return false;
}

newsTicker.roll = function(id) {
	if (!isNaN(id) && newsTicker.ticker[id]) {
		
		var ticker = newsTicker.ticker[id];
		var message = ticker[0].getElementsByTagName("li");
		var actualMessage = message[ticker[4]];
		
		if (parseInt(actualMessage.style.left) <= 0 - actualMessage.offsetWidth) {
			ticker[4] = (ticker[4]+1 == message.length) ? 0 : ticker[4] + 1;
			actualMessage = message[ticker[4]];
			actualMessage.style.left = ticker[0].offsetWidth + (ticker[0].offsetWidth % ticker[1]) + "px";
		}
		
		actualMessage.style.left = parseInt(actualMessage.style.left) - ticker[1] + "px";
		
		ticker[5] = setTimeout("newsTicker.roll(" + id + ")", (parseInt(actualMessage.style.left) == 0) ? ticker[3] : ticker[2]);
		
		return true;
	}
	return false;
}

newsTicker.stop = function(e) {
	id = newsTicker.getId(e);
	if (id) {
		clearTimeout(newsTicker.ticker[id][5]);
		return true;
	}
	return false;
}

newsTicker.start = function(e) {
	id = newsTicker.getId(e);
	if (id) {
		newsTicker.roll(id);
		return true;
	}
	return false;
}

newsTicker.getId = function(e) {
	if (!e && window.event) e = window.event;
	if (!e.target) e.target = e.srcElement;
	var obj = (e.currentTarget) ? e.currentTarget : e.target;
	while (obj.tagName.toLowerCase() != "ul") {
		obj = obj.parentNode;
		if (obj.tagName.toLowerCase() == "body") {
			return false;
		}
	}
	return obj.newsTickerID;
}
