
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";
		}
	}
	
	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( |$)/, "");
	
	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)
{
	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;
};