// ticker registry
Ticker.Registry = [];

function Ticker(ul_element_id, config) {
	var ul_tag = document.getElementById(ul_element_id);
	if (ul_tag) {
		this.ul_tag = ul_tag;
		this.ul_tag.style.listStyle = "none";
		this.ul_tag_id = ul_element_id;
		this.name = "Ticker_" + this.ul_tag_id;

		this.fadeArray = new Array("#999", "#a4a4a4", "#b0b0b0", "#bbbbbb", "#c6c6c6", "#d2d2d2", "#dddddd", "#e8e8e8", "#f4f4f4", "#ffffff");


		this.ul_tag.onmouseover = function () {
			this.timr = clearInterval(this.timr);
		}

		// register the ticker
		Ticker.Registry[this.name] = this;

		// li, assign position=absolute; top=0;
		var li_tags = ul_tag.getElementsByTagName("li");

		if (config["display"] == "random") {
			this.onDisplay = Math.floor(Math.random()*li_tags.length);
		} else {
			this.onDisplay = 0;
		}

		if (li_tags) {
			for (var i=0; i<li_tags.length; i++) {
				li_tags[i].style.position = "absolute";

				// hide the other tags
				if (i != this.onDisplay) {
					li_tags[i].style.visibility = "hidden";
				} else {
					// set the first tag to position: relative;
					li_tags[i].style.position = "relative";
				}
			}
		}


		// keep track of LI's to fade in and out
		this.li_fadeOut = null;		
		this.li_fadeIn = null;

		// variables for the animation
		this.timr = null;
		this.timrCount = 0;

		// automatic start!
		setInterval("Ticker.next(\"" + this.name + "\")", 2500);

	} 
	/*
		alert(this.ul_tag);
	*/
}

Ticker.fadeOut = function (objname) {
	// li_tag.style.marginLeft = "10px";
	var obj = Ticker.Registry[objname];
	if (obj) {
		var li_tag = obj.li_fadeOut;

		// set tag to be faded out, to position absolute;
		li_tag.style.position = "absolute";
		// if there is animation then wait until the animation finishes
		var a_tags = li_tag.getElementsByTagName("a");
		if (a_tags) {
			var a_tag = a_tags[0];
			a_tag.style.color = obj.fadeArray[obj.timrCount];

			if (obj.timrCount != obj.fadeArray.length) {
				// alert("counting!");
				obj.timrCount ++;
				li_tag.style.marginTop = (obj.timrCount*2.3) + "px";
			} else {
				// alert("stopping");
				obj.timrCount = 0;
				li_tag.style.marginTop = (obj.timrCount) + "px";
				obj.timr = clearInterval(obj.timr);
				a_tag.style.color = obj.fadeArray[obj.timrCount];
				li_tag.style.visibility = "hidden";
			}
			// alert(obj.timr + " " + obj.timrCount);
			if (!obj.timr && obj.timrCount == 1) {
				obj.timrCount ++;
				obj.timr = setInterval("Ticker.fadeOut(\"" + objname + "\")", 50);
			}
		}
	}
}

Ticker.fadeIn = function (objname) {
	// li_tag.style.visibility = "visible";
	// li_tag.style.marginLeft = "0px";
	var obj = Ticker.Registry[objname];
	if (obj) {
		obj.li_fadeIn.style.position = "relative";
		obj.li_fadeIn.style.visibility = "visible";
	}
}

Ticker.switchIt = function (objname, first_li, second_li) {
	var obj = Ticker.Registry[objname];
	var ul_obj = obj.ul_tag;
	if (ul_obj) {
		var li_tags = ul_obj.getElementsByTagName("li");
		if (li_tags) {
			// hide the current
			obj.li_fadeOut = li_tags[first_li];
			Ticker.fadeOut(objname);

			// display the next
			obj.li_fadeIn = li_tags[second_li];
			Ticker.fadeIn(objname);
		}
	}
}

Ticker.next = function(obj_name) {
	var obj = Ticker.Registry[obj_name];
	if (obj) {	
		var next;
		// alert(obj.ul_tag.getElementsByTagName("li").length);
		if (obj.onDisplay == obj.ul_tag.getElementsByTagName("li").length-1) {
			next = 0;
		} else {
			next = obj.onDisplay + 1;
		}

		// alert(obj.onDisplay + " " + next);

		Ticker.switchIt(obj_name, obj.onDisplay, next);
		obj.onDisplay = next;
	}
}
