// Menu functionality Script

// Invensys Menu Data

// Menu Data alter the following data to change the menu items.

// Replace ITEM1, ITEM2, etc. with the item names, and URL1, URL2, etc. with the location of the target page.
// arMenu1 - 5 refer to the five menus displayed.

// Any items that are empty strings mean that they are using default values as set in the script below.
// A list of argument values which may need to be changed are shown below:  

// arMenu[ref] = new Array("[width]","[x position]","[y position]","","","","","","","[item name][|number of lines(optional)]","[item url]",[0=has no submenu, 1=has sub menu], [add as many items as required] );

//To allow long menu items to wrap onto a new line with Internet Explorer 5: Use "|n" when defining the array.
//(Where | is used as a delimiter and n=number of lines required.)
//eg. arMenu1 = new Array(120,17,80,"","","","","","","Long Menu Item (this is a test of a very long item)|3","http://www.website.com/page.htm",0,"This is an even longer item with lots of text to demonstrate the height feature in the menu|5","http://www.website.com/page.htm",0)




// This variable controls the delay used to display the menus.
// The value is in milliseconds.
ShowDelay = 0;

// Menu display variables

// The menu system has been changed so that the static menu item "MENU1", "MENU2", etc., below are now hyperlinks to section pages
// rather than null links as before. So a menu item "Products" would link to a "Product Overview" page from which all the menu items
// in the Products menu are also linked. We strongly urge site owners to use this feature to ensure compatibility with all browsers
// and all search engine spiders (including the Invensys search engine).
// For an example of how this works visit: www.invensys.com and click on any of the top menu links (rather than a drop-down link).



// Inserisco displaymenu


// Null function to prevent href links
function nullLink(){
}

// Default menu settings

var BV=parseInt(navigator.appVersion);
var BN=window.navigator.appName;
var IsWin=(navigator.userAgent.indexOf('Windows')!=-1)?true:false;
var OP=(navigator.userAgent.indexOf('Opera')!=-1&&BV>=4)?true:false;
var NS4=(BN.indexOf('Netscape')!=-1&&(BV==4)&&!OP)?true:false;
var SM=(BN.indexOf('Netscape')!=-1&&(BV>=5)||OP)?true:false;
var IE4=(BN.indexOf('Explorer')!=-1&&(BV>=4)||SM)?true:false;
isMac = (navigator.appVersion.indexOf("Mac") != -1);
isMIE = (navigator.appName == "Microsoft Internet Explorer");
isMenu = (NS4 || (IE4 && !isMac));
ver4 = (NS4 || IE4);

//alert("BV:"+BV+"\n"+"BN:"+BN+"\n"+"IsWin:"+IsWin+"\nOP:"+OP+"\nNS4:"+NS4+"\nSM:"+SM+"\nIE4:"+IE4+"\nisMIE:"+isMIE+"\nisMenu:"+isMenu+"\nver4: "+ver4);


var pMenu4SM;

function displayMenu(){return};
function hideMenu(){return};

if(!ver4) event = null;

// code altered by Keith Harris on 28.9.00
// if brackets commented out to
// help fail-safe on Mac browsers

// if(isMenu) {
	menuVersion = 3;

	menuWidth = 90;
	childOverlap = 0;
	childOffset = 0;
	perCentOver = null;
	secondsVisible = .3;

	fntCol = "#ffffff";
	fntSiz = "7";
	fntBold = true;
	fntItal = false;
	fntFam = "verdana";

	backCol = "#929699"; //"#000000";
	overCol = "#c8110c"; //"#FF0000";
	overFnt = "#ffffff"; //"#000000";

	borWid = 0;
	borCol = "black";
	borSty = "solid";
	itemPad = 3;

	imgSrc = "images/a3.gif";
	imgSiz = 6;

	separator = 0;
	separatorCol = "#000000"; //"#999999";

	isFrames = false;
	navFrLoc = "left";

	keepHilite = true;
	NSfontOver = true;
	clickStart = false;
	clickKill = false;
// }

// Main code

loader = (isFrames)?((NS4)?parent:parent.document.body):window;
loader.onload = startIt;
if(NS4){
	origWidth = loader.innerWidth;
	origHeight = loader.innerHeight;
	loader.onresize = reDo;
}
isLoaded = false;
NSresized = false;

if(!window.menuVersion)
	clickKill = showVisited = NSfontOver = keepHilite = clickStart = false;

if(!window.imgHspace) imgHspace=0;

isWin = (navigator.appVersion.indexOf("Win") != -1)
if(!isWin && !isMac) NSfontOver = showVisited = false;

mSecsVis = secondsVisible*1000;
isRight = (window.navFrLoc && navFrLoc == "right");

imgSuf = (isRight)?">" :" ALIGN=RIGHT>";

imgStr = "<IMG SRC='" + imgSrc + "' WIDTH=" + imgSiz + " HEIGHT=" + imgSiz +" VSPACE=2 HSPACE="+ imgHspace +" BORDER=0"+ imgSuf;

fullImgSize = (imgSiz+(imgHspace*2));

//NS 6 does not seem to like the <span> tag... NS bug #1,985,234 :)
if(IE4&&!SM) imgStr = "<SPAN STYLE='height:100%;width:"+ (fullImgSize-(isRight?3:0)) +";float:"+ (isRight?"left":"right") +";overflow:hidden'>"+ imgStr +"</SPAN>";

areCreated = false;
menuLoc = null;

function initVars() {
	if(areCreated) {
		for(i=1; i<topCount; i++) {
			cur = eval("Menu"+i);
			clearTimeout(cur.hideTimer);
			cur.hideTimer=null;
		}
		clearTimeout(allTimer);
	}
	topCount = 1;
	areCreated = false;
	beingCreated = false;
	isOverMenu = false;
	currentMenu = null;
	allTimer = null;
}

initVars();

function NSunloaded(){
	isLoaded = false;
}

function NSloaded(e){
	if(e.target.name == mainFrName) {
		initVars();
		startIt();
	}
}

function IEunloaded() {
	initVars();
	isLoaded = false;
	setTimeout("keepTrack()",50)
}

function keepTrack() {
	if(menuLoc.document.readyState == "complete") {
		initVars();
		startIt();
	}
	else {
		setTimeout("keepTrack()",50);
	}
}

function startIt() {
	isLoaded = true;
	if(isFrames) {
		menuLoc = eval("parent.frames." + mainFrName);
		if(NS4) {
			loader.captureEvents(Event.LOAD);
			loader.onload = NSloaded;
			menuLoc.onunload = NSunloaded;
		}
		if(IE4) {
			menuLoc.document.body.onunload = IEunloaded;
		}
	}
	else {
		menuLoc = window;
	}
	menuLoc.nav = nav = window;
	if(clickKill) {
		if(NS4) menuLoc.document.captureEvents(Event.MOUSEDOWN);
		menuLoc.document.onmousedown = clicked;
	}
	makeTop();	
}

function makeTop(){
	beingCreated = true;

	if(IE4) {
		topZ = 0;
		if(SM)			
			for(z=0;z<menuLoc.document.body.childNodes.length;z++){
				oldEl = menuLoc.document.body.childNodes.item(z);
				if(oldEl.style) topZ = Math.max(oldEl.style.zIndex,topZ)
			}
		else
			for(z=0;z<menuLoc.document.all.length;z++){
				oldEl = menuLoc.document.all(z);
				topZ = Math.max(oldEl.style.zIndex,topZ)
			}
	}
	while(eval("window.arMenu" + topCount)) {
		NS4?makeMenuNS(false,topCount):makeMenuIE(false,topCount);
		topCount++;
	}

	status = ""
	areCreated = true;
	beingCreated = false;
}

function makeMenuNS(isChild,menuCount,parMenu,parItem) {
	tempArray = eval("arMenu" + menuCount);
	
	if(!isChild) {
		tempWidth = tempArray[0]?tempArray[0]:menuWidth;
		menu = makeElement("Menu" + menuCount,tempWidth,null,null);
	} else {
		menu = makeElement("Menu" + menuCount,null,parMenu,null);
	}
	menu.array = tempArray;
	menu.setMenuTree = setMenuTree;
	menu.setMenuTree(isChild,parMenu);

	while(menu.itemCount < menu.maxItems) {
		menu.itemCount++;
		status = "";
		prevItem = (menu.itemCount > 1)?menu.item:null;
		itemName = "item" + menuCount + "_" + menu.itemCount;

		menu.item = makeElement(itemName,null,null,menu);

		menu.item.prevItem = prevItem;
		menu.item.setup = itemSetup;
		menu.item.setup(menu.itemCount,menu.array);
		if(menu.item.hasMore) {
			makeMenuNS(true,menuCount + "_" + menu.itemCount,menu,menu.item);
			menu = menu.parentMenu;
		}
	}

	menu.lastItem = menu.item;
	menu.setup(isChild,parMenu,parItem);
}

function findTree(men){
	foundTree = false;
	for(i=11;i<men.array.length;i+=3){
		if(men.array[i]) {
			foundTree = true;
			break;
		}
	}

	return foundTree;
}

function setMenuTree(isChild,parMenu) {
	if(!isChild) {
		this.menuWidth = this.array[0]?this.array[0]:menuWidth;
		this.menuLeft = this.array[1];
		this.menuTop = this.array[2];
		this.menuFontColor = this.array[3]?this.array[3]:fntCol;
		this.menuFontOver = this.array[4]?this.array[4]:overFnt;
		this.menuBGColor = this.array[5]?this.array[5]:backCol;
		this.menuBGOver = this.array[6]?this.array[6]:overCol;
		this.menuBorCol = this.array[7]?this.array[7]:borCol;
		this.menuSeparatorCol = this.array[8]?this.array[8]:separatorCol;
		this.treeParent = this;
		this.startChild = this;
		this.isTree = findTree(this);
	} else {
		this.menuWidth = parMenu.menuWidth;
		this.menuLeft = parMenu.menuLeft;
		this.menuTop = parMenu.menuTop;
		this.menuFontColor = parMenu.menuFontColor;
		this.menuFontOver = parMenu.menuFontOver;
		this.menuBGColor = parMenu.menuBGColor;
		this.menuBGOver = parMenu.menuBGOver;
		this.menuBorCol = parMenu.menuBorCol;
		this.menuSeparatorCol = parMenu.menuSeparatorCol;
		this.treeParent = parMenu.treeParent;
		this.isTree = parMenu.isTree;
	}

	this.maxItems = (isChild)?this.array.length/3:(this.array.length-9)/3;
	this.hasParent = isChild;
    this.setup = menuSetup;
	this.itemCount = 0;
}

function makeMenuIE(isChild,menuCount,parMenu) {

	menu = makeElement("Menu" + menuCount);
	menu.array = eval("arMenu" + menuCount);

	menu.setMenuTree = setMenuTree;
	menu.setMenuTree(isChild,parMenu);

	menu.itemStr = "";
	
	var cmdTop=0;
	while(menu.itemCount < menu.maxItems) {
		menu.itemCount++;
		status = "";
		itemName = "item" + menuCount + "_" + menu.itemCount;

		arrayPointer = isChild?(menu.itemCount-1)*3:((menu.itemCount-1)*3)+9;
		dispText = menu.array[arrayPointer];
		if(dispText.indexOf("|")>0) {     //---------------Additional functionality added to allow long menu items to wrap to new line. Provided by using "|x"(x=number of lines required) in defining array
			NumLines = dispText.split("|")[1];
			dispText = dispText.split("|")[0];
		} else
			NumLines = 1;
		
		hasMore = menu.array[arrayPointer + 2];
		htmStr = hasMore?imgStr + dispText:dispText;

		//Subitems render a bit smaller under NS6... NS6 bug #2,345,768
		menu.itemStr += "<SPAN ID=" + itemName + " STYLE=\"position: absolute; left:0; top:" + cmdTop + 
						"; width:" + (menu.menuWidth+(2*borWid) + ((SM&&hasMore)?imgSiz:0)) + 
						"px; cursor: hand;\">" + htmStr + "</SPAN><BR>";
		cmdTop += (6 + (12 * NumLines));  //---------------Additional functionality ends.
		
		if(hasMore) {
			makeMenuIE(true,menuCount + "_" + menu.itemCount,menu);
			menu = menu.parentMenu;
		}			
	}

	menu.innerHTML = menu.itemStr;
	if(SM) {
		var j=0;
		pMenu4SM = menu;
		itemColl = menu.childNodes;
		for(i=0; i<itemColl.length; i++) {
			if(itemColl.item(i).tagName=="SPAN") {
				it = itemColl.item(i);
				it.setup = itemSetup;
				it.setup((j++)+1,menu.array);
			}
		}
		menu.lastItem = itemColl.item(itemColl.length-1);
	} else {
		itemColl = menu.children.tags("SPAN");
		for(i=0; i<itemColl.length; i++) {
			it = itemColl(i);
			it.setup = itemSetup;
			it.setup(i+1,menu.array);
		}
		menu.lastItem = itemColl(itemColl.length-1);
	}	
	menu.setup(isChild,parMenu);
}

function makeElement(whichEl,whichWidth,whichParent,whichContainer) {
	if(NS4) {
		if(whichWidth) {
			elWidth = whichWidth;
		}
		else {
			elWidth = whichContainer?whichContainer.menuWidth:whichParent.menuWidth;
			if(whichContainer) elWidth = elWidth-(borWid*2)-(itemPad*2);
		}
		if(!whichContainer) whichContainer = menuLoc;
		eval(whichEl + "= new Layer(elWidth,whichContainer)");
	} else {
		if(SM) {
			newDiv = menuLoc.document.createElement("DIV");
			newDiv.id = whichEl;
			newDiv.setAttribute("STYLE", "position: absolute; left:0; top:0;");
			menuLoc.document.body.appendChild(newDiv);
			return menuLoc.document.getElementById(whichEl);
		} else {
			elStr = "<DIV ID=" + whichEl + " STYLE='position:absolute'></DIV>";
			menuLoc.document.body.insertAdjacentHTML("BeforeEnd",elStr);
		}
		if(isFrames) eval(whichEl + "= menuLoc." + whichEl);
	}
	
	return eval(whichEl);	
}

function itemSetup(whichItem,whichArray) {
	
	this.onmouseover = itemOver;
	this.onmouseout = itemOut;
	this.container = NS4?this.parentLayer:(SM?pMenu4SM:this.offsetParent);

	arrayPointer = (this.container.hasParent)?(whichItem-1)*3:((whichItem-1)*3)+9;

	this.dispText = whichArray[arrayPointer];
	this.linkText = whichArray[arrayPointer + 1];
	this.hasMore = whichArray[arrayPointer + 2];
	
	if(IE4 && this.hasMore) {
		if(SM)
			this.child = document.getElementById("Menu" + this.id.substr(4));
		else
			this.child = eval("Menu" + this.id.substr(4));
		this.child.parentMenu = this.container;
		this.child.parentItem = this;
	}

	if(this.linkText) {
		if(NS4) {
			this.captureEvents(Event.MOUSEUP)
			this.onmouseup = linkIt;
		}
		else {
			this.onclick = linkIt;
			this.style.cursor = SM?"default":"hand";
		}
	}

	if(NS4) {
		htmStr = this.dispText;
		if(htmStr.indexOf("|")>0)
			htmStr = htmStr.split("|")[0];
		if(fntBold) htmStr = htmStr.bold();
		if(fntItal) htmStr = htmStr.italics();

		htmStr = "<FONT FACE='" + fntFam + "' POINT-SIZE=" + fntSiz + ">" + htmStr+ "</FONT>";

		this.htmStrOver = htmStr.fontcolor(this.container.menuFontOver);
		this.htmStr = htmStr.fontcolor(this.container.menuFontColor);

		if(this.hasMore) {
			this.document.write(imgStr);
			this.document.close();
		}

		this.visibility = "inherit";
		this.bgColor = this.container.menuBGColor;

		if(whichItem == 1) {
			this.top = borWid + itemPad;
		} else {
			this.top = this.prevItem.top + this.prevItem.clip.height + separator;
		}
		this.left = borWid + itemPad;
		this.clip.top = this.clip.left = -itemPad;
		this.clip.right = this.container.menuWidth-(borWid*2)-itemPad;

		maxTxtWidth = this.container.menuWidth-(borWid*2)-(itemPad*2);
		if(this.container.isTree) maxTxtWidth-=(fullImgSize); 

		this.txtLyr = new Layer(maxTxtWidth,this);

		if(isRight && this.container.isTree) this.txtLyr.left = fullImgSize;

		this.txtLyr.document.write(this.htmStr);
		this.txtLyr.document.close();
		this.txtLyr.visibility = "inherit";
		this.clip.bottom = this.txtLyr.document.height+itemPad;

		this.dummyLyr = new Layer(100,this);
		this.dummyLyr.left = this.dummyLyr.top = -itemPad;
		this.dummyLyr.clip.width = this.clip.width;
		this.dummyLyr.clip.height = this.clip.height;
		this.dummyLyr.visibility = "inherit";
	} else {
		with(this.style) {
			padding = itemPad;
			
			if(this.container.isTree && !this.hasMore) {
				if(isRight) paddingLeft = itemPad+fullImgSize;
				else paddingRight = itemPad+fullImgSize;
			}
			color = this.container.menuFontColor;
			fontSize = fntSiz + "pt";
			fontWeight = fntBold?"bold":"normal";
			fontStyle =	fntItal?"italic":"normal";
			fontFamily = fntFam;
		
			borderBottomWidth = separator + "px";
			borderBottomColor = this.container.menuSeparatorCol;
			borderBottomStyle = "solid";
			backgroundColor = this.container.menuBGColor;
		}
	}
}

function menuSetup(hasParent,openCont,openItem) {
	this.onmouseover = menuOver;
	this.onmouseout = menuOut;
	
	this.showIt = showIt;
	this.keepInWindow = keepInWindow;
	this.hideTree = hideTree
	this.hideParents = hideParents;
	this.hideChildren = hideChildren;
	this.hideTop = hideTop;
	this.hasChildVisible = false;
	this.isOn = false;
	this.hideTimer = null;

	this.childOverlap = (perCentOver != null)?((perCentOver/100) * this.menuWidth):childOverlap;
	this.currentItem = null;
	this.hideSelf = hideSelf;
		
	if(hasParent) {
		this.hasParent = true;
		this.parentMenu = openCont;
		if(NS4) {
			this.parentItem = openItem;
			this.parentItem.child = this;
		}
	} else
		this.hasParent = false;

	if(NS4) {
		this.bgColor = this.menuBorCol;
		this.fullHeight = this.lastItem.top + this.lastItem.clip.bottom + borWid;
		this.clip.right = this.menuWidth;
		this.clip.bottom = this.fullHeight;
	} else {
		with(this.style) {
			width = this.menuWidth;
			borderWidth = borWid;
			borderColor = this.menuBorCol;
			borderStyle = borSty;
			zIndex = topZ;
		}

		this.lastItem.style.border="";
		this.fullHeight = this.scrollHeight;
		this.showIt(false);
		this.onselectstart = cancelSelect;
		this.moveTo = moveTo;
		this.moveTo(0,0);
	}
}

function displayMenu(e,menuName){
	if(isMac && isMIE) return;
	if(NS4 && NSresized) startIt();
	if(!isLoaded) return;
	linkEl = (NS4||SM)?e.target:event.srcElement;
	if(clickStart) linkEl.onclick = popMenu;
	if(!beingCreated && !areCreated) startIt();
	linkEl.menuName = menuName;
	if(!clickStart) popMenu(e);
}

// Stuff used to handle the new
// ShowDelay feature.
// All these global vars are used to avoid having to pass objects through the
// setTimeout function. Is much easier this way.
var ee;
var eevent;
var sEvent = 0;
var linkEl;
function popMenu(e){
	
	if(!isLoaded || !areCreated) return true;

	eType = (NS4||SM)?e.type:event.type;
	if(clickStart && eType != "click") return true;
	
	linkEl = (NS4||SM)?e.target:event.srcElement;
	if(NS4||SM)
		ee = e;
	else
		eevent = event;
	ClearSEvent();
	sEvent = window.setTimeout("popMenu2(0)", ShowDelay);
}

function popMenu2(IsSubmenu){
	ClearSEvent();
	
	if(!IsSubmenu) {
		hideAll();
	
		if(SM)
			currentMenu = menuLoc.document.getElementById(linkEl.menuName);
		else
			currentMenu = eval(linkEl.menuName);
		currentMenu.hasParent = false;
		currentMenu.treeParent.startChild = currentMenu;
		
		if(IE4) menuLocBod = menuLoc.document.body;
		if(!isFrames) {
			xPos = (currentMenu.menuLeft)?currentMenu.menuLeft:(NS4||SM)?ee.pageX:(eevent.clientX + menuLocBod.scrollLeft);
			yPos = (currentMenu.menuTop)?currentMenu.menuTop:(NS4||SM)?ee.pageY:(eevent.clientY + menuLocBod.scrollTop);
		} else {
			switch(navFrLoc) {
				case "left":
					xPos = (currentMenu.menuLeft)?currentMenu.menuLeft:(NS4||SM)?menuLoc.pageXOffset:menuLocBod.scrollLeft;
					yPos = (currentMenu.menuTop)?currentMenu.menuTop:(NS4||SM)?(ee.pageY-pageYOffset)+menuLoc.pageYOffset:eevent.clientY + menuLocBod.scrollTop;
					break;
				case "top":
					xPos = (currentMenu.menuLeft)?currentMenu.menuLeft:(NS4||SM)?(ee.pageX-pageXOffset)+menuLoc.pageXOffset:eevent.clientX + menuLocBod.scrollLeft;
					yPos = (currentMenu.menuTop)?currentMenu.menuTop:(NS4||SM)?menuLoc.pageYOffset:menuLocBod.scrollTop;
					break;
				case "bottom":
					xPos = (currentMenu.menuLeft)?currentMenu.menuLeft:(NS4||SM)?(ee.pageX-pageXOffset)+menuLoc.pageXOffset:eevent.clientX + menuLocBod.scrollLeft;
					yPos = (currentMenu.menuTop)?currentMenu.menuTop:(NS4||SM)?menuLoc.pageYOffset+menuLoc.innerHeight:menuLocBod.scrollTop + menuLocBod.clientHeight;
					break;
				case "right":
					xPos = (currentMenu.menuLeft)?currentMenu.menuLeft:(NS4||SM)?menuLoc.pageXOffset+menuLoc.innerWidth:menuLocBod.scrollLeft+menuLocBod.clientWidth;
					yPos = (currentMenu.menuTop)?currentMenu.menuTop:(NS4||SM)?(ee.pageY-pageYOffset)+menuLoc.pageYOffset:eevent.clientY + menuLocBod.scrollTop;
					break;
			}
		}
		currentMenu.moveTo(xPos,yPos);
		currentMenu.keepInWindow()
		currentMenu.isOn = true;
	} else
		currentMenu = linkEl;
	
	currentMenu.showIt(true);

	return false;
}

/*
This is the original popMenu function
function popMenu(e){
	if(!isLoaded || !areCreated) return true;

	eType = (NS4||SM)?e.type:event.type;
	if(clickStart && eType != "click") return true;
	hideAll();

	linkEl = (NS4||SM)?e.target:event.srcElement;
	
	if(SM)
		currentMenu = menuLoc.document.getElementById(linkEl.menuName);
	else
		currentMenu = eval(linkEl.menuName);
	currentMenu.hasParent = false;
	currentMenu.treeParent.startChild = currentMenu;
	
	if(IE4) menuLocBod = menuLoc.document.body;
	if(!isFrames) {
		xPos = (currentMenu.menuLeft)?currentMenu.menuLeft:(NS4||SM)?e.pageX:(event.clientX + menuLocBod.scrollLeft);
		yPos = (currentMenu.menuTop)?currentMenu.menuTop:(NS4||SM)?e.pageY:(event.clientY + menuLocBod.scrollTop);
	} else {
		switch(navFrLoc) {
			case "left":
				xPos = (currentMenu.menuLeft)?currentMenu.menuLeft:(NS4||SM)?menuLoc.pageXOffset:menuLocBod.scrollLeft;
				yPos = (currentMenu.menuTop)?currentMenu.menuTop:(NS4||SM)?(e.pageY-pageYOffset)+menuLoc.pageYOffset:event.clientY + menuLocBod.scrollTop;
				break;
			case "top":
				xPos = (currentMenu.menuLeft)?currentMenu.menuLeft:(NS4||SM)?(e.pageX-pageXOffset)+menuLoc.pageXOffset:event.clientX + menuLocBod.scrollLeft;
				yPos = (currentMenu.menuTop)?currentMenu.menuTop:(NS4||SM)?menuLoc.pageYOffset:menuLocBod.scrollTop;
				break;
			case "bottom":
				xPos = (currentMenu.menuLeft)?currentMenu.menuLeft:(NS4||SM)?(e.pageX-pageXOffset)+menuLoc.pageXOffset:event.clientX + menuLocBod.scrollLeft;
				yPos = (currentMenu.menuTop)?currentMenu.menuTop:(NS4||SM)?menuLoc.pageYOffset+menuLoc.innerHeight:menuLocBod.scrollTop + menuLocBod.clientHeight;
				break;
			case "right":
				xPos = (currentMenu.menuLeft)?currentMenu.menuLeft:(NS4||SM)?menuLoc.pageXOffset+menuLoc.innerWidth:menuLocBod.scrollLeft+menuLocBod.clientWidth;
				yPos = (currentMenu.menuTop)?currentMenu.menuTop:(NS4||SM)?(e.pageY-pageYOffset)+menuLoc.pageYOffset:event.clientY + menuLocBod.scrollTop;
				break;
		}
	}
	currentMenu.moveTo(xPos,yPos);
	currentMenu.keepInWindow()
	currentMenu.isOn = true;
	currentMenu.showIt(true);

	return false;
}
*/

function menuOver(e) {
	this.isOn = true;
	isOverMenu = true;
	currentMenu = this;
	if(this.hideTimer) clearTimeout(this.hideTimer);
}

function menuOut() {
	if(IE4&&!SM) {
		theEvent = menuLoc.event;
		if(theEvent.srcElement.contains(theEvent.toElement)) return;
	}
	this.isOn = false;
	isOverMenu = false;

	menuLoc.status = "";
	if(!clickKill) allTimer = setTimeout("currentMenu.hideTree()",10);  
}

function itemOver(e) {
	if(keepHilite) {
		if(this.container.currentItem && this.container.currentItem != this) {
			if(NS4) {
				this.container.currentItem.bgColor = this.container.menuBGColor;
				if(NSfontOver)
					with(this.container.currentItem.txtLyr.document) {
						write(this.container.currentItem.htmStr)
						close();
					}
			} else
				with(this.container.currentItem.style) {
					backgroundColor = this.container.menuBGColor;
					color = this.container.menuFontColor;
				}
		}
	}

	if(IE4) {
		theEvent=SM?e:menuLoc.event;
		theEventTarget = SM?theEvent.target.tagName:theEvent.srcElement.tagName;
		if(theEventTarget == "IMG") return;
		this.style.backgroundColor = this.container.menuBGOver;
		this.style.color = this.container.menuFontOver;
		if(SM) this.style.cursor = "default";
	} else {
		this.bgColor = this.container.menuBGOver;
		if(NSfontOver) {
			this.txtLyr.document.write(this.htmStrOver);
			this.txtLyr.document.close();
		}
	}

	menuLoc.status = this.linkText;

	this.container.currentItem = this;

	// Added: && (lastVisible != this.id)
	// Original: if(this.container.hasChildVisible) {
	// Weird uh? Well, this is because freaking NS6 generates multiple events on a single onmouseover causing the
	// submenus to dissapear and reapear when you move from the command that triggers the submenu to the submenu.
	// hmmm... let's call this one: bug #3,456,234
	if(this.container.hasChildVisible && (lastVisible != this.id)) {
		this.container.hideChildren(this);
		lastVisible = this.id;
	}
	
	ClearSEvent();

	if(this.hasMore) {
		horOffset = (isRight)?(this.container.childOverlap - this.container.menuWidth):(this.container.menuWidth - this.container.childOverlap);

		if(NS4) {
			this.childX = this.container.left + horOffset;
			this.childY = (this.pageY+this.clip.top) + childOffset;
		} else {
			this.childX = parseInt(this.container.style.left) + horOffset;
			//NS6 calculates the offsetTop quite differently than IE... a bug? a feature?
			c_offsetTop = SM?this.offsetTop-parseInt(this.container.style.top):this.offsetTop;
			this.childY = c_offsetTop + parseInt(this.container.style.top) + childOffset + borWid;
		}
		
		this.child.moveTo(this.childX,this.childY);
		this.child.keepInWindow();
		this.container.hasChildVisible = true;
		this.container.visibleChild = this.child;
		//this.child.showIt(true);
		// ^^^^ no longer used. Now we use the same fucntion to display menus and submenus
		// ...this is the way the ShowDelay implementation works.

		if(lastVisible == this.child.id) {
			popMenu2(1)
		} else {
			linkEl = this.child;
			sEvent = window.setTimeout("popMenu2(1)", ShowDelay);
		}
	}
}
var lastVisible = "";

function itemOut(e) {
	if(IE4) {
		theEvent = SM?e:menuLoc.event;
		theEventTarget = SM?theEvent.target:theEvent.srcElement;
		if(!SM) {
			//This code is not portable to SeaMonkey's DOM
    		if(theEvent.srcElement.contains(theEvent.toElement) || (theEvent.fromElement.tagName=="IMG" && theEvent.toElement.contains(theEvent.fromElement)))
        		return;
        }
		if(!keepHilite) {
			this.style.backgroundColor = this.container.menuBGColor;
			this.style.color = this.container.menuFontColor;
		}
	} else {
		if(!keepHilite) {
			this.bgColor = this.container.menuBGColor;
			if(NSfontOver) {
				with(this.txtLyr.document) {
					write(this.htmStr);
					close();
				}
			}
	
		}
		if(!isOverMenu && !clickKill) {
			allTimer = setTimeout("currentMenu.hideTree()",10); 
		}
	}
}

function moveTo(xPos,yPos) {
	if(SM) {
		this.style.left = xPos;
		this.style.top = yPos;
	} else {
		this.style.pixelLeft = xPos;
		this.style.pixelTop = yPos;
	}
}

function showIt(on) {
	if(NS4) {
		this.visibility = on?"show":"hide";
		if(keepHilite && this.currentItem) {
			this.currentItem.bgColor = this.menuBGColor;
			if(NSfontOver) {
				with(this.currentItem.txtLyr.document) {
					write(this.currentItem.htmStr);
					close();
				}
			}
		}
	}
	else {
		this.style.visibility = on?"visible":"hidden";
		if(keepHilite && this.currentItem) {
			with(this.currentItem.style) {
				backgroundColor = this.menuBGColor;
				color = this.menuFontColor;
			}
		}
	}
	this.currentItem = null;
}

function keepInWindow() {
	scrBars = 20;
	botScrBar = (isFrames && navFrLoc=="bottom")?(borWid*2):scrBars;
	rtScrBar = (isFrames && navFrLoc=="right")?(borWid*2):scrBars;
	if(NS4) {
		winRight = (menuLoc.pageXOffset + menuLoc.innerWidth) - rtScrBar;
		rightPos = this.left + this.menuWidth;
   
		if(rightPos > winRight) {
			if(this.hasParent) {
				parentLeft = this.parentMenu.left;
				newLeft = ((parentLeft-this.menuWidth) + this.childOverlap);
				this.left = newLeft;
			}
			else {
				dif = rightPos - winRight;
				this.left -= dif;
			}
		}

		winBot = (menuLoc.pageYOffset + menuLoc.innerHeight) - botScrBar ;
		botPos = this.top + this.fullHeight;

		if(botPos > winBot) {
			dif = botPos - winBot;
			this.top -= dif;
		}
		
		winLeft = menuLoc.pageXOffset;
		leftPos = this.left;

		if(leftPos < winLeft) {
			if(this.hasParent) {
				parentLeft = this.parentMenu.left;
				newLeft = ((parentLeft+this.menuWidth) - this.childOverlap);
				this.left = newLeft;
			}
			else {
				this.left = 5;
			}
		}
	} else {
		if(SM)
			winRight = (menuLoc.pageXOffset + menuLoc.innerWidth) - rtScrBar;
		else
    		winRight = (menuLoc.document.body.scrollLeft + menuLoc.document.body.clientWidth) - rtScrBar;
		rightPos = this.style.pixelLeft + this.menuWidth;
	
		if(rightPos > winRight) {
			if(this.hasParent) {
				parentLeft = this.parentMenu.style.pixelLeft;
				newLeft = ((parentLeft - this.menuWidth) + this.childOverlap);
				this.style.pixelLeft = newLeft;
			}
			else {
				dif = rightPos - winRight;
				this.style.pixelLeft -= dif;
			}
		}
		
		if(SM)
			winBot = (menuLoc.pageYOffset + menuLoc.innerHeight) - botScrBar ;
		else
    		winBot = (menuLoc.document.body.scrollTop + menuLoc.document.body.clientHeight) - botScrBar;
		botPos = this.style.pixelTop + this.fullHeight;

//		if(botPos > winBot) {
//			dif = botPos - winBot;
//			this.style.pixelTop -= dif;
//		}
		
		if(SM)
			winLeft = menuLoc.pageXOffset;
		else
			winLeft = menuLoc.document.body.scrollLeft;
		leftPos = this.style.pixelLeft;

		if(leftPos < winLeft) {
			if(this.hasParent) {
				parentLeft = this.parentMenu.style.pixelLeft;
				newLeft = ((parentLeft+this.menuWidth) - this.childOverlap);
				this.style.pixelLeft = newLeft;
			}
			else {
				this.style.pixelLeft = 5;
			}
		}
	}
}

function linkIt() {
	// Original: if(this.linkText.indexOf("javascript:")!=-1) eval(this.linkText)
	// The new version works when using vbscript: and javascript:
	// We could have used "this.linkText.indexOf("script:")!=-1" but its too risky
	if((this.linkText.indexOf("javascript:")!=-1) || (this.linkText.indexOf("vbscript:")!=-1)) eval(this.linkText)
	else menuLoc.location.href = this.linkText;
}

function hideMenu(menuName){
	if(!isLoaded || !areCreated) return;
	if(SM)
		whichEl = menuLoc.document.getElementById(menuName);
	else
		whichEl = eval(menuName);
	whichEl.isOn = false;
	
	ClearSEvent();
	
	if(!clickKill) whichEl.hideTop();
}

// This function clears any pending
// timer to display a menu
function ClearSEvent() {
	if(sEvent) {
		clearTimeout(sEvent);
		sEvent = 0;
	}
}

function hideAll() {
	for(i=1; i<topCount; i++) {
		if(SM) {
			m = menuLoc.document.getElementById("Menu" + i);
			temp = m.startChild;
		} else
			temp = eval("Menu" + i + ".startChild");
		temp.isOn = false;
		if(temp.hasChildVisible) temp.hideChildren();
		temp.showIt(false);
	}	
}

function hideTree() { 
	allTimer = null;
	if(isOverMenu) return;
	if(this.hasChildVisible) {
		this.hideChildren();
	}
	this.hideParents();
}

function hideTop() {
	whichTop = this;
	(clickKill)?whichTop.hideSelf():(this.hideTimer = setTimeout("if(whichTop.hideSelf)whichTop.hideSelf()",mSecsVis));
}

function hideSelf() {
	this.hideTimer = null;
	if(!this.isOn && !isOverMenu) { 
		this.showIt(false);
	}
}

function hideParents() {
	tempMenu = this;
	while(tempMenu.hasParent) {
		tempMenu.showIt(false);
		tempMenu.parentMenu.isOn = false;		
		tempMenu = tempMenu.parentMenu;
	}
	tempMenu.hideTop();
}

function hideChildren(item) {
	tempMenu = this.visibleChild;
	while(tempMenu.hasChildVisible) {
		tempMenu.visibleChild.showIt(false);
		tempMenu.hasChildVisible = false;
		tempMenu = tempMenu.visibleChild;
	}

	if(!this.isOn || !item.hasMore || this.visibleChild != this.child) {
		this.visibleChild.showIt(false);
		this.hasChildVisible = false;
	}
}

function cancelSelect(){return false}

function reDo(){
	if(loader.innerWidth==origWidth && loader.innerHeight==origHeight) return;
	initVars();
	NSresized=true;
	menuLoc.location.reload();
}

function clicked() {
	if(!isOverMenu && currentMenu!=null && !currentMenu.isOn) {
		whichEl = currentMenu;
		whichEl.hideTree();
	}
}

if(!SM)
	window.onerror = handleErr;

function handleErr(){
	arAccessErrors = ["permission","access"];
	mess = arguments[0].toLowerCase();
	found = false;
	for(i=0;i<arAccessErrors.length;i++) {
		errStr = arAccessErrors[i];
		if(mess.indexOf(errStr)!=-1) found = true;
	}
	return found;
}

function goSite(v){
	var destination=eval('document.forms[0].' + v + '.options[document.forms[0].' + v + '.selectedIndex].value');
	if(destination!=""){
	location=destination;
	}
}

function search(v){
	if(eval('document.forms[0].' + v + '.value')==""){
		alert ("Please complete the search field.");
		return;
	}
	document.forms[0].submit();
}

