
var menu = 
{
	menuId : null, /* element ID of the root UL */
	root   : null, /* cached reference to root UL */
	timer  : null, /* time-out handle */
	selectedClass : 'tree_page_item'
};

function initializeMenu(menuId)
{
	menu.menuId = menuId;
	menu.root = document.getElementById(menuId);
	var li = menu.root.getElementsByTagName('li'), i = li.length;
	while (i--) 
	{
		li[i].onmouseover = showMenu;
		li[i].onmouseout = unselectMenuItem;
	}
	menu.root.onmouseout = timeoutMenu;
	menu.root.onmouseover = cleartimerMenu;
	menu.timer = null;
}

function timeoutMenu()
{
	menu.timer = setTimeout('hideMenus(menu.root, null)', 1100);
}

function cleartimerMenu()
{
	if (menu.timer)
	{
		clearTimeout(menu.timer);
		menu.timer = null;
	}
}

function selectMenuTree(el)
{
	while(el.parentNode != menu.root
		  && el.parentNode.parentNode != menu.root)
	{
		if(el.tagName.toLowerCase() == 'li')
		{
			el.className += ' ' + menu.selectedClass;
		}
		el = el.parentNode;
	}
}

function unselectMenuItem()
{
	var RE = new RegExp(' ?' + menu.selectedClass, 'g');
	var li = menu.root.getElementsByTagName('li'), i = li.length;
	while(i--) li[i].className = li[i].className.replace(RE, '');
}

function showMenu()
{
	selectMenuTree(this);
	
	var ul = this.parentNode;
	while (ul)
	{
		if (ul.tagName.toLowerCase() == 'ul')
		{
			hideMenus(ul, this);
			break;
		}

		ul = ul.parentNode;
	}

	ul = this.firstChild;
	while (ul)
	{
		if (ul.nodeType == 1 && ul.tagName.toLowerCase() == 'ul')
		{
			ul.style.display = 'block';
			ul.style.visibility = ''; // necessary for IE
			break;
		}

		ul = ul.nextSibling;
	}
}

function hideMenus(level, skipli)
{
	var stack = [level], i = 0, li, j, el, tag;
	do
	{
		li = stack[i].childNodes, j = li.length;
		while (j--)
		{
			el = li[j];
			if (el.nodeType == 1 && el != skipli)
			{
				tag = el.tagName.toLowerCase();
				if (tag == 'li')
				{
					stack[i++] = el;
				}
				else if (tag == 'ul' && el.style.display == 'block')
				{
					stack[i++] = el;

					var pcn = el.parentNode.className;
					/* The 'group' lists (VVSA, News, Archive) are never hidden */
					if(el.parentNode.parentNode != menu.root
						&& (pcn.indexOf('current_page_item') == -1 && pcn.indexOf('current_page_ancestor') == -1))
					{
						el.style.display = 'none';
						el.style.visibility = 'hidden'; // necessary for IE
					}
				}
			}
		}
	}
	while (i--);
}


addLoadEvent(function()
{
	initializeMenu('navigation');
});

