var intFrameRate = 10; 			// This is msecs/frame, not frames/sec
var intScrollSpeed = 3; 		// This is pixels/frame

function initTicker(id, scrolls, contentsPresent, moduleID, moduleType) {
	var div = document.getElementById(id);
	if(!contentsPresent) {
		var fun = function(doc) {
			div.innerHTML = doc;
			if(scrolls) {
				setUpScrolling(div, id);
			}
		};
		loadXMLDocAndCall('/Modules/FrontPage/NewsTicker/XMLForTicker.aspx?mid=' + moduleID + '&mt=' + moduleType, fun);
	}
	else if(scrolls) {
		setUpScrolling(div, id);
	}
}

function setUpScrolling(div, id) {
	div.onmouseover = tickerMouseOver;
	div.onmouseout = tickerMouseOut;
	var table = eltn("TABLE", div)[0];
	table.style.position = "relative";
	table.style.top = 0;
	cueItemScrolling(id, 0);
}

function getItemYPos(id, item_num, table) {
	var y = 0;
	
	var TDs = table.getElementsByTagName("TD");
	if(item_num > TDs.length) {
		alert("Index out of range: ticker '" + id + "' doesn't have an item at zero-based index " + item_num + " - it has a total of " + TDs.length + " items.");
		return 0;
	}
	for(var i = 0; i < item_num; i++) {
		var elem = TDs[i];
		y += elem.offsetHeight;
	}
	return y;
}

function cueItemScrolling(id, to_index) {
	var div = document.getElementById(id);
	var table = eltn("TABLE", div)[0];

	if(getStatus(id) != "paused")
		setTimeout("doTickerTick('" + id + "', " + getItemYPos(id, to_index, table) + ")", intFrameRate);

	if(to_index < table.getElementsByTagName("TD").length) {
		if(getStatus(id) == "paused")
			setTimeout("cueItemScrolling('"+id+"', "+to_index+")", intTimeBetweenScrolls[id]);
		else
			setTimeout("cueItemScrolling('"+id+"', "+(to_index+1)+")", intTimeBetweenScrolls[id]);
	}
}
			
function doTickerTick(id, stopAt) {
	var div = document.getElementById(id);
	var table = eltn("TABLE", div)[0];
	table.style.top = parseInt(table.style.top) - intScrollSpeed;
	
	if(parseInt(table.style.top) <= -1 * stopAt) {
		table.style.top = -1 * stopAt;
		
		// Finished?
		if(stopAt >= parseInt(table.offsetHeight)) {
			// Restart...
			table.style.top = document.getElementById(id).offsetHeight;
			cueItemScrolling(id, 0);
		}
	} else
		setTimeout("doTickerTick('" + id + "', " + stopAt + ")", intFrameRate);
}

function getStatus(id) {
	return document.getElementById(id + "_TickerStatus").value;
}

function setStatus(id, value) {
	document.getElementById(id + "_TickerStatus").value = value;
}

function tickerMouseOver(event) {
	setStatus(mapEventToTicker(event).id, "paused");
}

function mapEventToTicker(event) {
	if(event == null)
		if(window.event)
			event = window.event;
	var target;
	if(event.target)
		target = event.target;
	else
		target = event.srcElement;
	return findTickerParent(target);
}

function findTickerParent(elem) {
	while(elem) {
		if(elem.tagName == "DIV")
			if(elem.id != "")
				if(elem.id.indexOf("divNews") >= 0)
					return elem;
		elem = elem.parentNode;
	}
	return null;
}

function tickerMouseOut(event) {
	setStatus(mapEventToTicker(event).id, "");
}	