// JavaScript Document
window.onload =  initMenu;

var previousSubmenu = null;

function isInCurrentPath(previous, current)
{
	var found = false;
	
	if ((previous != null) && (current != null))
	{
		if (current.className != "menu")
		{
			if (current == previous)
			{
				found = true;
			}
			else
			{
				found = isInCurrentPath(previous, current.parentNode.parentNode);
			}
		}
	}
	
	return found;
}

function removeClass(classNameSet, className)
{
	var newClassName = "";

	if ((classNameSet != null) && (className != null))
	{
		var splittedClassName = classNameSet.split(" " + className);
		var i;
		for(i=0;i<splittedClassName.length;i++)
		{
			newClassName += splittedClassName[i];
		}
	}
	
	return newClassName;
}

function isSibling(previous, current)
{
	var found = false;
	var i;
	for(i=0;i<previous.parentNode.childNodes.length;i++)
	{
		var subnode = previous.parentNode.childNodes[i];
		if (subnode == current)
		{
			found = true;
		}		
	}
				
	return found;
}

function isTop(node)
{
	return (node.parentNode.parentNode.className == "menu");
}

function closeSubmenu(previous, current)
{
	if (previous != null)
	{
		var i;

		var newClassName = removeClass(previous.className, "selected_menu");
		newClassName = removeClass(newClassName, "normal_menu");
		newClassName += " normal_menu";
		previous.className = newClassName;

		for(i=0;i<previous.childNodes.length;i++)
		{
			var subnode = previous.childNodes[i];
			if (subnode.nodeName == "UL")
			{
				var newClassName = removeClass(subnode.className, "visible_menu");
				newClassName = removeClass(newClassName, "hidden_menu");
				newClassName += " hidden_menu";
				subnode.className = newClassName;
			}
		}

		if ( (!isTop(previous)) && (!isSibling(previous, current)) )
		{
			closeSubmenu(previous.parentNode.parentNode, current);
		}
	}
}

function showSubmenu(node)
{
	if (node != null)
	{
		var i;

		var newClassName = removeClass(node.className, "normal_menu");
		newClassName = removeClass(newClassName, "selected_menu");
		newClassName += " selected_menu";
		node.className = newClassName;

		for(i=0;i<node.childNodes.length;i++)
		{
			var subnode = node.childNodes[i];
			if (subnode.nodeName == "UL")
			{
				newClassName = removeClass(subnode.className, "hidden_menu");
				newClassName = removeClass(newClassName, "visible_menu");
				newClassName += " visible_menu";
				subnode.className = newClassName;
			}
		}
	}
}

function prepareMenu()
{
	var submenus = document.getElementsByTagName("ul");
	
	var i;
	for(i=0;i<submenus.length;i++)
	{
		var submenu = submenus[i];
		if (submenu.className.indexOf("submenu") != -1)
		{
			if (submenu.parentNode.className != "menu")
			{
				submenu.className += " hidden_menu";
			}
			
			var j;
			for(j=0;j<submenu.childNodes.length;j++)
			{
				var node = submenu.childNodes[j];
				if (node.nodeName == "LI") 
				{
					var k;
					for(k=0;k<node.childNodes.length;k++)
					{
						var a = node.childNodes[k];
						if (a.nodeName == "A")
						{
								a.onfocus = function() {
									this.blur();
								}
								
								a.onclick = function() {									
								if (previousSubmenu != null)
								{
									if (!isInCurrentPath(previousSubmenu, this.parentNode))
									{
										closeSubmenu(previousSubmenu, this.parentNode);
									}										
								}
								previousSubmenu = this.parentNode;

								showSubmenu(this.parentNode);
							}
						}
					}
				}
			}
		}
	}
}

function getDepth(node)
{
	var depth = 0;
	if (node.className != "menu")
	{
		depth = getDepth(node.parentNode) + 1;
	}
	
	return depth;
}

function showSelected()
{
	var submenus = document.getElementsByTagName("li");
	var maxDepth = -1;
	var current = null;
	
	var i;
	for(i=0;i<submenus.length;i++)
	{
		if (submenus[i].className.indexOf("option") != -1)
		{
			if (submenus[i].className.indexOf("selected_menu") != -1)
			{
				if (getDepth(submenus[i]) > maxDepth)
				{
					current = submenus[i];
				}
				showSubmenu(submenus[i]);
			}
		}		
	}
	previousSubmenu = current;
}

function initMenu()
{
	if (document.getElementById) 
	{
		prepareMenu();
		showSelected();
	}
}