/*
Javascript drop down menu for Origin CMS
Matt Bondi 2007
*/


schedule("window", menuInit); 
//setStylesheet("vertical", false, false)

function menuInit(){
	var uls = document.getElementsByTagName("ul");
	
	for (var i = 0; i < uls.length; i++){
		if (uls[i].className == "menuclass"){
			//var listItems = getChildrenByTagName(uls[i], "li");
			//rendersublevels(listItems);
			var listItems = uls[i].getElementsByTagName("li");
			for(j=0;j<listItems.length;j++){
				attachEventListener(listItems[j], "mouseover", mouseoverMenu, false);
				attachEventListener(listItems[j], "mouseout", mouseoutMenu, false);
				attachEventListener(listItems[j].getElementsByTagName("a")[0], "focus", focusMenu, false);
				attachEventListener(listItems[j].getElementsByTagName("a")[0], "blur", blurMenu, false);
				var childrenUls = listItems[j].getElementsByTagName("ul");
				if(childrenUls.length > 0){
					hassubitems(listItems[j].getElementsByTagName("a")[0]);
				}
			}
		}
	}

	return true;
};


function rendersublevels(listItems){ //array of li's
	for (var j = 0; j < listItems.length; j++){
	
		var subMenu = listItems[j].getElementsByTagName("ul"); //Check for ul's within the li
		
		if (subMenu.length > 0){ // there are ul's within the li, attach event to li and recurse
			attachEventListener(listItems[j], "mouseover", mouseoverMenu, false);
			attachEventListener(listItems[j], "mouseout", mouseoutMenu, false);
			attachEventListener(listItems[j].getElementsByTagName("a")[0], "focus", focusMenu, false);
			attachEventListener(listItems[j].getElementsByTagName("a")[0], "blur", blurMenu, false);
			//has sub itmes so add subitem indicator
			hassubitems(listItems[j].getElementsByTagName("a")[0]);
			//find any li's with the ul
			for(var x = 0; x < subMenu.length; x++){
				var sublistItems = getChildrenByTagName(subMenu[x], "li");
				rendersublevels(sublistItems);
			}
		}
	}
}


function hassubitems(obj){
	if(!obj.innerHTML.match(/(^| )+( |$)/)){
		obj.innerHTML += '<span> +</span>';
	}
}

function mouseoverMenu(){
	var subList = this.getElementsByTagName("ul")[0];
	if (!this.className.match(/(^| )hover( |$)/))
	{
		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 focusMenu(event){
	
	var parentItem = this.parentNode;
	var count = 0;
	
	while(!parentItem.className.match(/(^| )menuclass( |$)/)){
		if(parentItem.nodeName == "LI"){
			if (!parentItem.className.match(/(^| )hover( |$)/))
			{
				if (parentItem.className == "")
				{
					parentItem.className = "hover";
				}
				else
				{
					parentItem.className += " hover";
				}
			}
		}
		parentItem = parentItem.parentNode;
	}
	return true;
};




function blurMenu(event){
	
	resetMenu(this);
	
	return true;
};



function hideMenu(menuItem){
	menuItem.className = menuItem.className.replace(/(^| )hover( |$)/, "$1");
	menuItem.className = menuItem.className.replace(/ $/, "");
	
	return true;
};



function resetMenu(menuItem){
	var menu = menuItem;
	
	while (!menu.className.match(/(^| )menuclass( |$)/))
	{
		menu = menu.parentNode;
	}
	
	var listItems = menu.getElementsByTagName("li");
	
	for (var i = 0; i < listItems.length; i++)
	{
		listItems[i].className = listItems[i].className.replace(/(^| )hover( |$)/, "$1");
		listItems[i].className = listItems[i].className.replace(/ $/, "");
	}
	
	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;
};
