// JScript source code

/* Top Nav Variables */
var flyOutLayers = new Array()
var noActiveLayers = 0;

var flyOutClicked = false;
var openedULLayers = new Array();

var isOnHoverATag = false;
var objHoverATag = null;

var hasFlyOutLeft = false;
var hasFOTimeOutSet = false;

var mouseOutEventFiredTN = false;
var mouseOverEventFiredTN = false;

var objTNSetTime = null;

var iFrameLayers = new Array()

//specify in miliseconds
var delay = 500;

function recurseTopNavList(navRoot, level)
{
	var i = 0;
	
	navRoot.className += " level" + level;
	
	for (i=0; i<navRoot.childNodes.length; i++) 
	{
		node = navRoot.childNodes[i];
				
		if (node.nodeName=="LI") 
		{
			
			var objAnchor = null;
		
			assignTopNavEvents(node, level);
		
			for (j=0; j<node.childNodes.length; j++)
			{
				if(node.childNodes[j].nodeName=="UL")
				{
					node.className += " __UL";
					
					//continue only if UL has child LIs
					if(GetChildCount(node.childNodes[j], "LI")>0)
					{
						//check if there is an anchor object, add a hover class to it
						if(objAnchor!=null)
							objAnchor.className = "overUL " + objAnchor.className;
					
						recurseTopNavList(node.childNodes[j], level+1);
					}
				}
				else if(node.childNodes[j].nodeName=="A")
				{
					node.className += " __A";
					
					//storing the nachor object to be used if there is an UL to follow
					objAnchor = node.childNodes[j];
				}
				else
				{
					node.className += " __LI";
				}
			}
		}
	}	
}

function assignTopNavEvents(navNode, level)
{
	if(navNode.onclick==null)
	{
		navNode.onclick =function()
		{
			TopNavClikcked(navNode, level);
		}
	}
	
	navNode.onmouseover=function() 
	{
		OnTopNavMouseOver(navNode, level);
	}
	
	navNode.onmouseout=function() 
	{
		OnTopNavMouseOut(navNode, level);
	}
}

function ShowActiveNavImage(navNode, level)
{
	var imgObj = document.getElementById('activeNavImg');
	if(imgObj!=null)
	{
		if(!IsLayerShown(imgObj)&&level==0)
		{
			//imgObj.style.visibility = "visible";
			GetObjectPosition(navNode);			
			imgObj.style.left = "0px";
			imgObj.style.top = "0px";
		}
	}
}

function OnTopNavMouseOver(navNode, level)
{
	//put active current image on top of menu
	//ShowActiveNavImage(navNode, level);
	
	if(!mouseOverEventFiredTN)
	{
		
		mouseOverEventFiredTN = true;
		
		hasFlyOutLeft = false;
		
		//hide previous layers if shown
		HidePreviousFlyOutLayer(navNode, level);
				
		/*//remove previous if highlighted
		if(flyOutLayers[noActiveLayers]!=null)
		{
			flyOutLayers[noActiveLayers].className = flyOutLayers[noActiveLayers].className.replace(" overUL", "");
			flyOutLayers[noActiveLayers].className = flyOutLayers[noActiveLayers].className.replace(" over", "");
		}*/
				
		ShowFlyOutLayer(navNode, level);
			
	}
	
	if(level==0)
	{		
		if(hasFOTimeOutSet)
		{	//clear time out if set
			hasFOTimeOutSet = false;
			window.clearTimeout(objTNSetTime);
		}
		
		mouseOverEventFiredTN = false;
	}
}

function OnTopNavMouseOut(navNode, level)
{
	if(!mouseOutEventFiredTN)
	{
		mouseOutEventFiredTN = true;
		hasFlyOutLeft = true;
		/*//remove the underline from anchor tag if applicable
		if(isOnHoverATag)
		{
			//objHoverATag.style.textDecoration = "none"
			isOnHoverATag = false;
		}*/
			
	}
	
	if(level==0)
	{
		//for first level, if there is fly out, then give a delay, else change hover effect immediately
		if(navNode.className.indexOf("__UL")!=-1)
			objTNSetTime = window.setTimeout("TimeOutForFlyOut(0)", delay);
		else
			objTNSetTime = window.setTimeout("TimeOutForFlyOut(0)", 0);
		
		hasFOTimeOutSet = true;
		mouseOutEventFiredTN = false;
	}
}

function TimeOutForFlyOut(level)
{
	objTNSetTime = null;	
	if(hasFlyOutLeft)
		HideFlyOutLayersTill(level);
}

function HidePreviousFlyOutLayer(navNode, level)
{
	if(level <= noActiveLayers)
		HideFlyOutLayersTill(level);
}

function ShowFlyOutLayer(navNode, level)
{
	//on hovering any option, "over" class is added
	navNode.className = "over " + navNode.className;
	
	//on hovering any option which has a suboption, "overUL" class is added
	if(navNode.className.indexOf("__UL")!=-1)
		navNode.className = "overUL " + navNode.className;
	
	//on hovering on first option, "overFirstLI" class is added
	if(level==0)
		navNode.className = "overFirstLI " + navNode.className;
	
	//store the current hovered LI in the layers array
	flyOutLayers[noActiveLayers] = navNode;
	
	if(SetNextFlyOut(navNode, level))
	{
		// If execution comes here, LI has a child UL or A
	}
	else
	{
		/* If execution comes here, means LI does not have a child UL nor an Anchor tag. */		
	}	
}

function TopNavClikcked(navNode, level)
{
	if(navNode.className.indexOf("__UL")!=-1)
	{
		flyOutClicked = true;
		return;
	}
	else if(navNode.className.indexOf("__A")!=-1)
	{	//it has anchor tag below. go to the link
		for(i=0; i<navNode.childNodes.length; i++)
		{
			if(navNode.childNodes[i].nodeName=="A")
			{
				document.location = navNode.childNodes[i];
			}
		}
	}
	else
	{	//last LI which does not have another UL nor an anchor link. write code here to execute Leaf LI click functionality
	}
	HideFlyOutLayersTill(0);
}

function HideFlyOutLayersTill(layer)
{
	if(!flyOutClicked)
	{
		for(;noActiveLayers>layer;noActiveLayers--)
		{
			if(openedULLayers[noActiveLayers-1]!=null)
				openedULLayers[noActiveLayers-1].style.visibility = "hidden";
			if(iFrameLayers[noActiveLayers-1]!=null)
				iFrameLayers[noActiveLayers-1].style.visibility = "hidden";
			if(flyOutLayers[noActiveLayers]!=null)
			{
				flyOutLayers[noActiveLayers].className = flyOutLayers[noActiveLayers].className.replace("overUL", "");
				flyOutLayers[noActiveLayers].className = flyOutLayers[noActiveLayers].className.replace("over", "");				
			}
		}
		if(flyOutLayers[noActiveLayers]!=null)
		{
			flyOutLayers[noActiveLayers].className = flyOutLayers[noActiveLayers].className.replace("overUL", "");
			flyOutLayers[noActiveLayers].className = flyOutLayers[noActiveLayers].className.replace("over", "");
			if(layer==0)
			{
				/*document.getElementById('activeNavImg').style.visibility = "hidden";
				document.getElementById('activeNavImg').style.top = "0px";
				document.getElementById('activeNavImg').style.left = "0px";*/
			}
		}		
	}
	else
		flyOutClicked = false;
}

function SetNextFlyOut(objLi, level)
{
	var i = 0;
	var isChildULPresent = false;
	var objIframe = null;
	
	for (i=0; i<objLi.childNodes.length; i++) 
	{
		node = objLi.childNodes[i];
		
		if (node.nodeName=="IFRAME")
		{
			//if Iframe exist, store Iframe object
			objIframe = node;			
		}
		
		else if (node.nodeName=="UL")
		{
			isChildULPresent = true;
		
			/* Show the UL */
			ShowFlyOutMenuUL(objLi, node, level, objIframe);
			
			break;
		}
		else if(node.nodeName=="A")
		{					
		}
	}
	return isChildULPresent;
}

function ShowFlyOutMenuUL(objLi, node, level, objIframe)
{
	if(GetChildCount(node, "LI")>0)
	{
		/* Show the layer */
		node.style.visibility = "visible";
		
		/* Add UL object to UL Array */
		openedULLayers[noActiveLayers] = node;
		
		/** Position the layer if not positioned */
		if(node.style.left=="")
		{
			var parentNode = node.parentNode;
			if(level!=0)
			{
				//set the UL position here with respect to parent LI
				node.style.left = parentNode.clientWidth + "px";			
			}
		}
		
		if(objIframe!=null&&(browserSniffer( 1, 6.0)||browserSniffer( 1, 5.5)))
		{
			
			/* Show the Iframe layer */
			objIframe.style.visibility = "visible";
			
			/* Add IFrame object to IFrame Array */
			iFrameLayers[noActiveLayers] = objIframe;
		
			/** Position the layer if not positioned */	
			if(objIframe.style.left=="")
			{
				objIframe.style.left = node.style.left;
				//set iframe height & width
				objIframe.style.width = node.clientWidth + 2;
				objIframe.style.height = node.clientHeight + 2;
			}
		}
		
		/* Increment the no. of active layers by 1 */
		noActiveLayers++;
	}	
	return;
}

