
schedule("window", menuInit); 




function menuInit()
{
	var menu = document.getElementById("menu");
	var ul = menu.getElementsByTagName("ul")[0];
	var listItems = getChildrenByTagName(ul, "li");

	for (var j = 0; j < listItems.length; j++)
	{
		var subMenu = listItems[j].getElementsByTagName("ul");

		if (subMenu.length > 0)
		{
			attachEventListener(listItems[j], "mouseover", mouseoverMenu, false);
			attachEventListener(listItems[j], "mouseout", mouseoutMenu, false);
		}
	}

	return true;
};




function mouseoverMenu()
{
	if (!this.className.match(/(^| )hover( |$)/))
	{
		resetMenu();
	
		if (this.className == "")
		{
			this.className = "hover";
		}
		else
		{
			this.className += " hover";
		}
		
		if (typeof document.all != "undefined")
		{
			if (this.getElementsByTagName("iframe").length <= 0)
			{
				var newIframe = document.createElement("iframe");
				newIframe.setAttribute("frameBorder", "0");
				newIframe.style.height = this.getElementsByTagName("ul")[0].clientHeight + "px";
				
				/* check if there is an offset for the last menu item. */				
				var isLast = this.getElementsByTagName("ul")[0].className == "last";
				
				if (isLast)
				{
					/* CNT-119: make the menu align on the RHS of the top level items. */
					newIframe.style.left =  "-58px";
				}
				
				this.appendChild(newIframe);
			}
		}
	}
	
	return true;
};




function mouseoutMenu(event)
{
	if (typeof event == "undefined")
	{
		event = window.event;
	}
	
	if (typeof event.relatedTarget != "undefined")
	{
		var related = event.relatedTarget;
	}
	else
	{
		var related = event.toElement;
	}
	
	if (isDescendantNode(related, this))
	{
		return true;
	}
	else
	{
		hideMenu(this);
	}
	
	return true;
};




function hideMenu(menuItem)
{
	menuItem.className = menuItem.className.replace(/(^| )hover( |$)/, "");
	
	var iframes = menuItem.getElementsByTagName("iframe");
	
	for (var i = 0; i < iframes.length; )
	{
		iframes[i].parentNode.removeChild(iframes[i]);
	}
	
	return true;
};




function resetMenu()
{
	var menu = document.getElementById("menu");
	var ul = menu.getElementsByTagName("ul")[0];
	var lis = getChildrenByTagName(ul, "li");
	
	for (var i = 0; i < lis.length; i++)
	{
		hideMenu(lis[i]);
	}

	return true;
};




function getChildrenByTagName(target, tagName)
{
	var children = target.childNodes;
	var matching = new Array();
	
	if (children != null)
	{
		for (var i = 0; i < children.length; i++)
		{
			if (children[i].nodeName.toLowerCase() == tagName)
			{
				matching[matching.length] = children[i];
			}
		}
	}
	
	return matching;
};




function isDescendantNode(descendant, ancestor)
{
	if (descendant != null)
	{
		while (descendant.parentNode != null && descendant.parentNode.nodeName.toLowerCase() != "#document")
		{	
			if (descendant.parentNode == ancestor)
			{
				return true;
			}
			else
			{
				descendant = descendant.parentNode;
			}
		}
	}
	return false;
};




function attachEventListener(target, eventType, functionRef, capture)
{
	if (typeof target.addEventListener != "undefined")
	{
		target.addEventListener(eventType, functionRef, capture);
	}
	else if (typeof target.attachEvent != "undefined")
	{
		var functionString = eventType + functionRef;
		target["e" + functionString] = functionRef;
        
		target[functionString] = function(event)
		{
			if(typeof event == "undefined")
			{
				event = window.event
			};

			target["e" + functionString](event);
        };
        
		target.attachEvent("on" + eventType, target[functionString]);
	}
	else
	{
		eventType = "on" + eventType;

		if (typeof target[eventType] == "function")
		{
			var oldListener = target[eventType];

			target[eventType] = function()
			{
				oldListener();

				return functionRef();
			}
		}
		else
		{
			target[eventType] = functionRef;
		}
	}

	return true;
};
