var nConstantSubNav = 0;
var nActiveSubNav = 0;
var nTimeout;
var aNavItemObjects = [];

function onMenuBarItemMouseOut(p_sType, p_aArguments, p_oMenuItem) {
	navMouseOut();
}

function onMenuBarItemMouseOver(p_sType, p_aArguments, p_oMenuItem) {
	clearTimeout(nTimeout);
	if (this.element.className != 'on') {
	
		// Set active sub nav
		for (var i = 1; i < aNavItemObjects.length; i++) {
			document.getElementById('navitem-'+i).className = '';
			if (aNavItemObjects[i].name.toLowerCase() == this.element.firstChild.innerHTML.toLowerCase()) {
				nActiveSubNav = aNavItemObjects[i].pos;
				document.getElementById('navitem-'+i).className = 'on';
			}
		}
		
		fadeSubNav(false);
		setTimeout(function() {
			updateSubNav();
			fadeSubNav(true);
		}, 250);
	}
}

function updateSubNav() {
	for (var i = 0; i < aNavItemObjects.length; i++) document.getElementById('nav-sub-'+i).style.display = 'none';
	document.getElementById('nav-sub-'+nActiveSubNav).style.display = 'block';
}

function fadeSubNav(visible) {
	var oAttributes = (visible) ? {opacity:{to:1}} : {opacity:{to:0}};
	var oAnim = new YAHOO.util.Anim('nav-sub', oAttributes, .25, YAHOO.util.Easing.easeNone);
	oAnim.animate();
}

function onWindowLoad() {
	var aNavItems = document.getElementById('nav').childNodes;
	var nNavPos = 0;
	
	// Add invisible (index) nav item	
	var oEmptyLi = document.createElement('li');
	oEmptyLi.style.display = 'none';
	oEmptyLi.innerHTML = 'Represents Index. This will never render.';
	document.getElementById('nav').insertBefore(oEmptyLi, document.getElementById('nav').firstChild);
	
	// Add invisible (index) subnav item	
	var oEmptySubNav = document.createElement('ul');
	oEmptySubNav.setAttribute('id', 'nav-sub-0');
	oEmptySubNav.style.visibility = 'hidden';
	document.getElementById('nav-sub').insertBefore(oEmptySubNav, document.getElementById('nav-sub').firstChild);
	var oEmptySubNavLi = document.createElement('li');
	oEmptySubNavLi.innerHTML = 'Represents Index. This will never render.';
	document.getElementById('nav-sub-0').appendChild(oEmptySubNavLi);

	// Setup navigation
	var oMenuBar = new YAHOO.widget.MenuBar('nav-bg');
	var i = oMenuBar.getItemGroups()[0].length - 1, oMenuItem;
	var aMenuBarItems = oMenuBar.getItemGroups()[0], i = aMenuBarItems.length - 1;
	do {
		aMenuBarItems[i].mouseOverEvent.subscribe(onMenuBarItemMouseOver, this);
		aMenuBarItems[i].mouseOutEvent.subscribe(onMenuBarItemMouseOut, this);
	} while (i--);

	for (var i = 0; i < aNavItems.length; i++) {
		if (aNavItems[i].tagName == 'LI') {

			// Add each nav item to an array for reference later
			aNavItemObjects[nNavPos] = {
				name: aNavItems[i].firstChild.innerHTML,
				pos: nNavPos
			};
			
			// Give the LI an ID so that we can access it directly later
			aNavItems[i].id = 'navitem-'+aNavItemObjects[nNavPos].pos;
			
			// The site's path will be using '-' instead of spaces and 'and' instead of '&'
			var sNavInner = aNavItems[i].firstChild.innerHTML.toLowerCase().split(' ').join('-');
			sNavInner = sNavInner.split('&amp;').join('and');

			// Determine which area of the site we're in, highlight that nav item, and show its subnav
			if (window.location.toString().indexOf(sNavInner) != -1) {
				aNavItems[i].className = 'on';
				nConstantSubNav = nActiveSubNav = nNavPos;
				updateSubNav();
				fadeSubNav(true);
				var aSubNavItems = document.getElementById('nav-sub-'+nNavPos).childNodes;
				for (var j = 0; j < aSubNavItems.length; j++) {
					if (aSubNavItems[j].tagName == 'LI' && aSubNavItems[j].childNodes.length > 0) {						
						var sInnerHTML = aSubNavItems[j].firstChild.innerHTML.toLowerCase().split(' ').join('-');
						sInnerHTML = sInnerHTML.split('&amp;').join('and');						
						if (sInnerHTML != '') {
							if (window.location.toString().indexOf(sInnerHTML) != -1) {
								aSubNavItems[j].className = 'on';
							}
						}
					}
				}
			}

			// Assign events to subnav links
			if (nNavPos > 0) {
				var aNodes = document.getElementById('nav-sub-'+nNavPos).childNodes;
				for (var j = 0; j < aNodes.length; j++) {
					if (aNodes[j].tagName == 'LI') {
						aNodes[j].firstChild.onmouseout = function() { navMouseOut(); };
						aNodes[j].firstChild.onmouseover = function() { clearTimeout(nTimeout); };
					}
				}
			}

			// Add spacer LIs
			for (var k = 1; k < aNavItemObjects.length-1; k++) {
				var oSpacerLi = document.createElement('li');
				oSpacerLi.style.fontSize = '12px';
				oSpacerLi.style.padding = '0 15px';
				oSpacerLi.style.fontWeight = 'bold';
				oSpacerLi.style.visibility = 'hidden';
				oSpacerLi.innerHTML = aNavItemObjects[k].name;
				document.getElementById('nav-sub-'+nNavPos).insertBefore(oSpacerLi, document.getElementById('nav-sub-'+nNavPos).firstChild);
			}

			nNavPos++;
			bFoundFirstSubNavItem = false;
		}
	}
	if (nConstantSubNav == 0) document.getElementById('nav-sub-0').style.display = 'block';
}

function navMouseOut() {
	if (nActiveSubNav != nConstantSubNav) {
		nTimeout = setTimeout(function() {
			if (nConstantSubNav != 0) document.getElementById('navitem-'+nConstantSubNav).className = 'on';
			document.getElementById('navitem-'+nActiveSubNav).className = '';
			fadeSubNav(false);
			setTimeout(function() {
				nActiveSubNav = nConstantSubNav;
				updateSubNav();
				fadeSubNav(true);
			}, 250);		
		}, 1000);
	}
}

YAHOO.util.Event.addListener(window, 'load', onWindowLoad);
