/*topnav.js*/
/*
this will recursively attach event handlers to the children of a root element.
This is used to to make the nav element work even though it's only a complex unordered list
but it could be used for any element contained inside of other elements.
*/

function doNavEffects(rootElement,trigger,subContainer){
	var mouseOvers = new Array();
	var mouseOuts = new Array();
	var rootNode = document.getElementById(rootElement);

	if(!rootNode){
		return;
	}

	wireTriggerElements(rootNode,trigger);

	// wire nav handlers
	function wireTriggerElements(rn,te){
		var trigger = te;
		var currentNodeList = rn.getElementsByTagName(trigger);
		for (var i=0; i < currentNodeList.length; i++) {
			var currentNode = currentNodeList[i];
			if ( currentNode.childNodes.length > 0 ) // we've got submenus, recurse
				wireTriggerElements( currentNode,trigger );
			if ( currentNode.getElementsByTagName(subContainer)[0] ) // if it's a parent, show/hide
					createElementListeners(currentNode, 1);
			else
				createElementListeners(currentNode, 0); // or, just do color effects
		}
	}

	function createElementListeners(cNode, effect){
		if(effect){
			cNode.onmouseover=doSubNavOver;
			cNode.onmouseout=doSubNavOut;
		} else {
			cNode.onmouseover=doHighOver;
			cNode.onmouseout=doHighOut;
		}
	}

	// show/hide nav functions for first and second level elements
	function doSubNavOver(event){
		var sc = this.getElementsByTagName(subContainer)[0];
		sc.style.visibility="visible";
		// set colors on secondary LI elements
		//remember if this is "active" when changing className
		var activeIndex = this.className.indexOf("active");
		var oddIndex = this.className.indexOf("odd");
		var evenIndex = this.className.indexOf("even");
		this.className = ((oddIndex > -1) ? "odd " : "") + ((evenIndex > -1) ? "even " : "") + ((activeIndex > -1) ? "active " : "") + "doSubNavOver";
	}

	function doSubNavOut(event){
		var sc = this.getElementsByTagName(subContainer)[0];
		sc.style.visibility="hidden";
		var activeIndex = this.className.indexOf("active");
		var oddIndex = this.className.indexOf("odd");
		var evenIndex = this.className.indexOf("even");
		this.className = ((oddIndex > -1) ? "odd " : "") + ((evenIndex > -1) ? "even " : "") + ((activeIndex > -1) ? "active " : "") + "doSubNavOut";
	}

	//highlight handler functions for third (and higher) level LI elements
	function doHighOver(event){
		var activeIndex = this.className.indexOf("active");
		var oddIndex = this.className.indexOf("odd");
		var evenIndex = this.className.indexOf("even");
		this.className = ((oddIndex > -1) ? "odd " : "") + ((evenIndex > -1) ? "even " : "") + ((activeIndex > -1) ? "active " : "") + "doHighOver";
	}

	function doHighOut(event){
		var activeIndex = this.className.indexOf("active");
		var oddIndex = this.className.indexOf("odd");
		var evenIndex = this.className.indexOf("even");
		this.className = ((oddIndex > -1) ? "odd " : "") + ((evenIndex > -1) ? "even " : "") + ((activeIndex > -1) ? "active " : "") + "doHighOut";
	}

}