var navOver = new Array();
var hidenavinterval;
var timeout_period = 500;
var initialized = false;

// This function initializes all of the nav arrays.
// It also moves the nav layers to the correct position relative to 'navtop'.
function init() {
	var topnav = getAbsYPos('navtop') +14;

	for (var i = 0; i < navLayers.length; i++) {
		navOver[navLayers[i]] = false;
		sY(gE(navLayers[i]), topnav + gY(gE(navLayers[i])));
	}
	for (var i = 0; i < subnavLayers.length; i++) {
		sY(gE(subnavLayers[i]), topnav + gY(gE(subnavLayers[i])));
	}
	for (var i = 0; i < subsubnavLayers.length; i++) {
		sY(gE(subsubnavLayers[i]), topnav + gY(gE(subsubnavLayers[i])));
	}
	
	initialized = true;
}

// Shows the nav menu referenced by 'nav'. It also hides all subnavs and subsubnavs.
function showNav(nav) {
	if (!initialized) return;
	
	clearTimeout(hidenavinterval);

	resetNavBg();

	hideNavExcept(nav);
	hideSubNavExcept('');
	hideSubSubNavExcept('');
	showSelectBoxes();

	sE(gE(nav));
	resetNavCheck(nav);
}

// Shows the subnav menu referenced by 'subnav'. It also hides all subsubnavs.
function showSubnav(subnav) {
	clearTimeout(hidenavinterval);
	
	resetSubNavBg();

	hideSubNavExcept(subnav);
	hideSubSubNavExcept('');

	sE(gE(subnav));
	showSelectBoxes();
	hideSelectBoxes(gE(subnav));
}

// Shows the subsubnav menu referenced by 'subsubnav'
function showSubSubnav(subsubnav) {
	clearTimeout(hidenavinterval);
	
	resetSubSubNavBg();

	hideSubSubNavExcept(subsubnav);
	
	sE(gE(subsubnav));
}

// Hides the nav menu referenced by 'nav' and hides all subnavs and subsubnavs
function hideNav(nav) {
	hE(gE(nav));

	rolloverOff(nav+'img');
}

// Hides all navs, subnavs and subsubnavs
function hideAll() {
	if (!initialized) return;

	hideNavExcept('');
	hideSubNavExcept('');
	hideSubSubNavExcept('');
	showSelectBoxes();
}

// Calls hideNav or all navs except the one referenced by 'nav'. If nav == '' it hides all navs.
function hideNavExcept(nav) {
	for (i = 0; i < navLayers.length; i++) {
		if (nav != navLayers[i]) {
			hideNav(navLayers[i]);
		}
	}
}

// Hides all subnavs except the one referenced by 'subnav'. If subnav == '' it hides all subnavs.
function hideSubNavExcept(subnav) {
	for (j = 0; j < subnavLayers.length; j++) {
		if (subnav != subnavLayers[j]) {
			hE(gE(subnavLayers[j]));
		}
	}
}

// Hides all subsubnavs except the one referenced by 'subsubnav'. If subsubnav == '' it hides all subsubnavs.
function hideSubSubNavExcept(subsubnav) {
	for (k = 0; k < subsubnavLayers.length; k++) {
		if (subsubnav != subsubnavLayers[k]) {
			hE(gE(subsubnavLayers[k]));
		}
	}
}

// Sets the timeout to check whether to close the nav or not
function startHideNav(nav) {
	navOver[nav] = false;
	hidenavinterval = setTimeout('checkNav(\"'+nav+'\")', timeout_period);
}

// Resets the variable used to check whether or not to close the nav
function resetNavCheck(nav) {
	clearTimeout(hidenavinterval);
	navOver[nav] = true;
}

// Checks whether it should close the nav. If the navOver[nav] still equals false, then it closes the nav.
function checkNav(nav) {
	if (navOver[nav] == false) {
		hideNav(nav);
		hideSubNavExcept('');
		hideSubSubNavExcept('');
		showSelectBoxes();
	}
}


// Hides any select boxes that are under the nav item referenced by navmenu
function hideSelectBoxes(navmenu)
{
	if (browser.isIE5up) {
	
		for (var i=0; i < document.all.tags("SELECT").length; i++) {
			obj = document.all.tags("SELECT")[i];

			if (! obj || ! obj.offsetParent) continue;
	
			objx = obj.offsetLeft;
			objy = obj.offsetTop;
			objParent = obj.offsetParent;

			while (objParent != null) {
				objx += objParent.offsetLeft;
				objy += objParent.offsetTop;
				objParent = objParent.offsetParent;
			}

			if (!((gX(navmenu) > (objx + obj.offsetWidth) || objx > (gX(navmenu) + navmenu.offsetWidth))||(objy > gY(navmenu) + navmenu.offsetHeight))) {
				obj.style.visibility = "hidden";
			}
		}
	}
}

// Shows any hidden select boxes
function showSelectBoxes() {
	if (browser.isIE5up) {
		for (i = 0; i < document.all.tags("SELECT").length; i++) {
			obj = document.all.tags("SELECT")[i];
			if (obj && obj.style.visibility=="hidden") obj.style.visibility = "";
		}
	}
}




///BG ROLLOVERS///

// BG rollover colours for the main nav and the secondary nav
var mainnavonColor = "#999977";
var mainnavoffColor = "#666666";
var mainaltnavonColor = "#999977";
var mainaltnavoffColor = "#7D7D7D";
var subnavonColor = "#999977";
var subnavoffColor = "#444444";
var subsubnavonColor = "#999977";
var subsubnavoffColor = "#222222";
var secnavonColor = "#666655";
var secnavoffColor = "#444444";

var lastanch = "";
var lastsec = "";
var lastsubanch = "";
var lastsubsec = "";
var lastsubsubanch = "";
var lastsubsubsec = "";

// Calls the function to change the bg color and stores the last nav rolled over
function bgrolloverOnNav(anch,sec) {
	bgrolloverOn(anch,sec);
	if (anch != lastanch) {
		resetNavBg();
		lastanch = anch;
		lastsec = sec;
	}
}

// Calls the function to change the bg color and stores the last subnav rolled over
function bgrolloverOnSubNav(anch,sec) {
	bgrolloverOn(anch,sec);
	if (anch != lastsubanch) {
		resetSubNavBg();
		lastsubanch = anch;
		lastsubsec = sec;
	}
}

// Calls the function to change the bg color and stores the last subsubnav rolled over
function bgrolloverOnSubSubNav(anch,sec) {
	bgrolloverOn(anch,sec);
	if (anch != lastsubsubanch) {
		resetSubSubNavBg();
		lastsubsubanch = anch;
		lastsubsubsec = sec;
	}
}

// Changes the bg color of the table cell holding the anchor 'anch'
function bgrolloverOn(anch,sec) {
	if ((browser.isIE)||(browser.isMOZ1up)||(browser.isNS6up)) anch.style.backgroundColor =  eval(sec+"onColor");
}

// Changes the bg color of the table cell holding the anchor 'anch'
function bgrolloverOff(anch, sec) {
	if ((browser.isIE)||(browser.isMOZ1up)||(browser.isNS6up)) anch.style.backgroundColor =  eval(sec+"offColor");
}

// Resets the last nav anchor rolled over
function resetNavBg() {
	if (lastanch != "") {
		bgrolloverOff(lastanch, lastsec);
		lastanch = "";
		lastsec = "";
	}
}

// Resets the last subnav anchor rolled over
function resetSubNavBg() {
	if (lastsubanch != "") {
		bgrolloverOff(lastsubanch, lastsubsec);
		lastsubanch = "";
		lastsubsec = "";
	}
}

// Resets the last subsubnav anchor rolled over
function resetSubSubNavBg() {
	if (lastsubsubanch != "") {
		bgrolloverOff(lastsubsubanch, lastsubsubsec);
		lastsubsubanch = "";
		lastsubsubsec = "";
	}
}