/* Adaptive Image JS/CSS navigation menu */
/* Note: must be used with _CMS_nav_menu.htm */

//==== FUNCS =====================================================================================================================

//globals
var aiHideMenuTimer = null;
var aiMenuObj;
var ulTagObj;

//timing
function AI_MenuStartTimeout(hideTimeout) {
	aiHideMenuTimer = setTimeout("AI_HideMenu()", hideTimeout);	
}
function AI_MenuResetTimeout() {
	if (aiHideMenuTimer) clearTimeout(aiHideMenuTimer);
	aiHideMenuTimer = null;
}
//rollover
function AI_ShowMenu(node) {
	AI_HideMenu();
	AI_MenuResetTimeout();
	//navigate DOM to find first list object
	var e = node.nextSibling;
	if (e.nodeName.toLowerCase() != "ul") e = e.nextSibling; //#text or #comment node - so goto next
	if (e.nodeName.toLowerCase() != "ul") e = e.nextSibling; //#text or #comment node - so goto next
	if (e.nodeName.toLowerCase() != "ul") e = e.nextSibling; //#text or #comment node - so goto next
	if (e.nodeName.toLowerCase() != "ul") return(false); //give up - we're lost!
	ulTagObj = e;
	e = e.firstChild;
	if (e.nodeName.toLowerCase() != "li") e = e.nextSibling; //#comment or #text node - so goto next
	if (e.childNodes.length > 0 && e.childNodes.item(0).nodeName.toLowerCase() == "a") {
		ulTagObj.style.display = "block";
		aiMenuObj = ulTagObj;
	}
}
//rolloff
function AI_HideMenu(aiThisMenu) {
	AI_MenuResetTimeout();
	if (aiMenuObj) {
		var e = aiMenuObj;
		e.style.display = "none";
	}
}

function GetTargetElement(evt) {
var targetElement;
	if (!evt) var evt = window.event; //IE - assign last event if e undefined
	if (evt.target) targetElement = evt.target; //w3c & gecko - get target element of e
	else if (evt.srcElement) targetElement = evt.srcElement; //IE - get target element of e
	if(targetElement.nodeName.toLowerCase() != "a") return(false); //trap spurious event calls (re: IE6/7)
return targetElement;
}


//==== EVENTS =====================================================================================================================

//menu title mouseover event
function MenuTitleMouseOver(e) {
var targetElement ;
	targetElement = GetTargetElement(e); //get object element
	if(targetElement) AI_ShowMenu(targetElement); //show the menu
return;
}
//menu title mouseout event
function MenuTitleMouseOut(e) {
var targetElement ;
	targetElement = GetTargetElement(e); //get object element
	if(targetElement) AI_MenuStartTimeout(300); //hide the menu with delay
return;
}

//menu list mouseover event
function MenuListMouseOver(e) {
	AI_MenuResetTimeout(); //reset delay
return;
}
//menu list mouseout event
function MenuListMouseOut(e) {
	AI_MenuStartTimeout(300); //hide the menu with delay
return;
}

//add onmouseover, onmouseout, and onkeydown (for no mouse) events to menu titles
function AppendMenuTitleEvents() {
	menuTitles = document.getElementById('nav_menu').getElementsByTagName('a'); //collection of menu title elements (works in IE as lower case)
	for (var i=0; i<menuTitles.length; i++) { //each title (JW AUDIT not very efficient)
		if (menuTitles[i].className == "menu_title") { //menu title
			var alink = menuTitles[i];
			//append mouseover and onkeydown events to <a> element
			if (alink.addEventListener) { alink.addEventListener ("mouseover",MenuTitleMouseOver,false); alink.addEventListener ("keydown",MenuTitleMouseOver,false);} //Gecko
			else if (alink.attachEvent) { alink.attachEvent ("onmouseover",MenuTitleMouseOver); alink.attachEvent ("onkeydown",MenuTitleMouseOver); } //IE5&6
			else { alink.onmouseover = MenuTitleMouseOver; alink.onkeydown = MenuTitleMouseOver; } //overwrite if exists
			//append mouseout events to <a> element
			if (alink.addEventListener) { alink.addEventListener ("mouseout",MenuTitleMouseOut,false); } //Gecko
			else if (alink.attachEvent) { alink.attachEvent ("onmouseout",MenuTitleMouseOut); } //IE5&6
			else { alink.onmouseout = MenuTitleMouseOut; } //overwrite if exists
		}
	}
return;
}

//add onmouseover and onmouseout events to menu lists
function AppendMenuListEvents() {
	menuTitles = document.getElementById('nav_menu').getElementsByTagName('a'); //collection of menu title elements (works in IE as lower case)
	for (var i=0; i<menuTitles.length; i++) { //each title (JW AUDIT not very efficient)
		if (menuTitles[i].className == "menu_title") { //menu title
			//navigate DOM to find first list object
			var lo = menuTitles[i].nextSibling;
			if (lo.nodeName.toLowerCase() != "ul") lo = lo.nextSibling; //#text or #comment node - so goto next
			if (lo.nodeName.toLowerCase() != "ul") lo = lo.nextSibling; //#text or #comment node - so goto next
			if (lo.nodeName.toLowerCase() != "ul") lo = lo.nextSibling; //#text or #comment node - so goto next
			if (lo.nodeName.toLowerCase() != "ul") return; //give up!
			//append mouseover events
			if (lo.addEventListener) { lo.addEventListener ("mouseover",MenuListMouseOver,false); } //Gecko
			else if (lo.attachEvent) { lo.attachEvent ("onmouseover",MenuListMouseOver); } //IE5&6
			else { lo.onmouseover = MenuListMouseOver; } //overwrite if exists
			//append mouseout events
			if (lo.addEventListener) { lo.addEventListener ("mouseout",MenuListMouseOut,false); } //Gecko
			else if (lo.attachEvent) { lo.attachEvent ("onmouseout",MenuListMouseOut); } //IE5&6
			else { lo.onmouseout = MenuListMouseOut; } //overwrite if exists
		}
	}
return;
}


//initialise nav menu events
function InitMenu() {
	AppendMenuTitleEvents();
	AppendMenuListEvents();
return;
}
