//layer showing and hiding functions

//set Y offset based on browser, also set layer ref variables
if (document.layers)
{
	//netscape 4+
	layerRef = "document.layers['";
	endLayerRef = "']";
	styleRef = "";
	offsetY = 36;
	offsetX = 0;
}
else if (document.all)
{
	//non dom ie
	layerRef = "document.all['";
	endLayerRef = "']";
	styleRef = ".style";

	if(navigator.userAgent.toLowerCase().indexOf('mac') != -1)
	{
		offsetY = 52;
		offsetX = 10;
	}
	else
	{
		offsetY = 20;
		offsetX = 0;
	}
}
else
{
	//dom compliant browser
	layerRef = "document.getElementById('";
	endLayerRef = "')";
	styleRef = ".style";

	if (navigator.userAgent.toLowerCase().indexOf('mac') != -1)
	{
		offsetY = 15;
		offsetX = 0;
	}
	else
	{
		offsetY = 19;
		offsetX = 0;
	}
}

//functions to get positioning
function DL_GetElementLeft(eElement)
{
	if (!eElement && this)							// if argument is invalid
	{												// (not specified, is null or is 0)
		eElement = this;							// and function is a method
	}												// identify the element as the method owner
	
	if (eElement.offsetParent)
	{
		var nLeftPos = eElement.offsetLeft;          // initialize var to store calculations
		var eParElement = eElement.offsetParent;     // identify first offset parent element  
		while (eParElement != null)
		{                                            // move up through element hierarchy
			nLeftPos += eParElement.offsetLeft;      // appending left offset of each parent
			eParElement = eParElement.offsetParent;  // until no more offset parents exist
		}
	}else if (eElement.x){
		nLeftPos += eElement.x;
	}
	return nLeftPos + offsetX;                       // return the number calculated
}


function DL_GetElementTop(eElement)
{
	if (!eElement && this)
	{
		eElement = this;
	}

	if (eElement.offsetParent)
	{
		var nTopPos = eElement.offsetTop;
		var eParElement = eElement.offsetParent;
		while (eParElement != null)
		{
			nTopPos += eParElement.offsetTop;
			eParElement = eParElement.offsetParent;
		}
	}else if (eElement.y){
		nTopPos += eElement.y;
	}
	return nTopPos + offsetY;
}

//show / hide layers and timer on / off functions
ActiveMenu = 0 //Stores current active menu
ActivesubMenu = 0 //Stores current active menu
timeMenu = 0	//Stores timeout (initialised to check if present)
subtimeMenu = 0	//Stores timeout (initialised to check if present) for SUBMENUS

function popMenuOn(menName,eventObj,collapsePrev){	//MENU ON - menName is layer reference, eventObj was about stopping bubbling - not sure it's necessary

	//positionMenus();	
	
	if(timeMenu != 0){ //Check if timeout in effect, if so cancel
		clearTimeout(timeMenu);
	}

	if(subtimeMenu != 0){ //Check if SUB timeout in effect, if so cancel
		clearTimeout(subtimeMenu);
	}

	if(ActiveMenu != 0 && collapsePrev == 1){ //Hide any visible drop downs
		eval(layerRef + ActiveMenu + endLayerRef + styleRef + ".visibility = 'hidden'");
	}
	
	ActiveMenu = menName; //Set new active menu
	eventObj.cancelBubble = true; //Cancel event bubbling up through document, might not be necessary
	eval(layerRef + menName + endLayerRef + styleRef + ".visibility = 'visible'"); //Set visibility of menName to visible
}

function offTime(){	//Set short time out when rolling off menus - graceful
	timeMenu = setTimeout('popMenuOff()',300)
}
	

function popMenuOff(){ //MENU OFF

	if(ActiveMenu != 0){ //If there is a menu open
		eval(layerRef + ActiveMenu + endLayerRef + styleRef + ".visibility = 'hidden'"); //Set it 's visibility to hidden
	}

}

function positionMenus(){ //Position layers relative to nav - called on page load and resize
	if (arrMenu.length){
		for(i=0; i<arrMenu.length; i++){
			eval(layerRef + arrMenu[i] + endLayerRef + styleRef + ".left = DL_GetElementLeft(" + layerRef + arrParent[i] + endLayerRef + ") + 'px'");
			eval(layerRef + arrMenu[i] + endLayerRef + styleRef + ".top = DL_GetElementTop(" + layerRef + arrParent[i] + endLayerRef + ") + 'px'");
		}
	}
}
