//Enables multilevel tab navigation.
//Michael Barnathan, 2/11/09

toplist = document.getElementById('TopLevelNav');
topParent = toplist.parentNode;

backarrow = null;
lastcategory = null;
fadetime = 250;	//Fade out / in time in ms.

addTabBehavior(toplist);
createBackArrow(null);

function addTabBehavior(parentlist) {
	var sublists = parentlist.getElementsByTagName('UL');
	for (var listidx = 0; listidx < sublists.length; listidx++) {
		var control_link = sublists[listidx].previousSibling;	//previousElementSibling doesn't work in IE.
		while (control_link != null && control_link.nodeName.toUpperCase() != 'A')
			control_link = control_link.previousSibling;
		
		if (control_link != null)
			control_link.onclick = nextNavLevel;
	}
}

function createBackArrow(linkParent) {
	if (backarrow == null) {
		backarrow = document.createElement("li");
		backarrow.id = "BackArrow";
	
		var backlink = document.createElement("a");
		backlink.href = '#';
		backlink.onclick = restoreTop;
	
		var backimg = document.createElement("img");
		backimg.src = '/images/nav/backarrow.png';
		backimg.alt = 'Back';

		backlink.appendChild(backimg);
		backarrow.appendChild(backlink);
	}
	
	//Insert the back arrow as the first element in the list we're about to display.
	if (linkParent != null)	//If it is null, we're just preloading.
		linkParent.insertBefore(backarrow, linkParent.firstChild);
}

function nextNavLevel() {
	lastcategory = this;
	var navlist = this.nextSibling;
	while (navlist != null && navlist.nodeName.toUpperCase() != 'UL')
			navlist = navlist.nextSibling;

	fadeInOut(navlist, toplist);
	return false;	//Prevent a click from registering, since this is on a link.
}

function restoreTop() {
	fadeInOut(toplist, this.parentNode.parentNode);
	return false;
}

function fadeInOut(fadeinobj, fadeoutobj) {
	fadeobj = fadeinobj;
	for (var fadeamount = 1.0; fadeamount >= 0.0; fadeamount -= 0.1)
	{
		 setTimeout("fadeIn("+fadeamount+", '" + fadeoutobj.id + "')",fadetime*(1-fadeamount));
	}

	setTimeout("hideList('" + fadeoutobj.id + "')", fadetime);
	setTimeout("showList('" + fadeinobj.id + "')", fadetime+1);

	for (var fadeamount = 0.0; fadeamount <= 1.0; fadeamount += 0.1)
	{
		 setTimeout("fadeIn("+fadeamount+", '" + fadeinobj.id + "')",fadetime*(fadeamount+1));
	}		
}

function fadeIn(fadeamount, objid) {
	obj = document.getElementById(objid);
	if (!obj)
		obj = fadeobj;
		
	obj.style.opacity = parseFloat(fadeamount).toFixed(1);
//	obj.style.filter = 'alpha(opacity=' + Math.round(fadeamount * 100) + ')';		//IE still can't blend transparent PNGs properly.
}

function hideList(objid) {
	obj = document.getElementById(objid);
	if (!obj)
		obj = fadeobj;
		
	obj.style.visibility = 'hidden';
	obj.style.display = 'none';
			
	if (obj != toplist && lastcategory != null)
		lastcategory.parentNode.appendChild(obj);
}


function showList(objid) {
	obj = document.getElementById(objid);
	if (!obj)
		obj = fadeobj;
		
	obj.style.visibility = 'visible';
	obj.style.display = 'block';
	obj.className = 'TopLevelNav';
	
	if (obj != toplist)
		createBackArrow(obj);
		
	topParent.appendChild(obj);
}
