var timer=new Object;
//Cancels hiding of all menus
function cancel_hide()
{
	if (timer['linkbar'])
		clearTimeout(timer['linkbar']);
	timer['linkbar']=0;
}

//Hides all menus after a delay
function hmd()
{
	if (timer['linkbar'])
		clearTimeout(timer['linkbar']);
	
	timer['linkbar']=setTimeout(hide_menus, 500);
}

//Hides all menus
function hide_menus()
{
	timer['linkbar']=0;

	var menubar=document.getElementById('menu');

	var menus=menubar.getElementsByTagName('ul');

	for (var i=0; i < menus.length; i++)
		setMenuVisible(menus[i], false);
}

function cleanTextNodes(el)
{
	for (var i=0; i < el.childNodes.length; i++)
	{
		var c=el.childNodes[i];
		if (c.nodeType == 1)
		{
			cleanTextNodes(c);
		}
		else if (c.nodeType == 3)
		{
			var spaces= /^\s*$/
			if (spaces.test(c.nodeValue))
			{
				el.removeChild(c);
				i--;
			}
		}
	}
}

function setupEvents()
{
	if (document.getElementById)
	{
	        var menubar=document.getElementById('menu');
		menubar.className+=' slidingmenu';
		addEvent(menubar, 'mouseout', hmd, false);

		cleanTextNodes(menubar);

		var menuitems=menubar.getElementsByTagName('li');
		for (var i=0; i < menuitems.length; i++)
		{
			var c=menuitems[i];
			if (c.getElementsByTagName('ul').length > 0)
			{
				addEvent(c, 'mouseover', open_menu, false);
				addEvent(c, 'focus', open_menu, false);

				//Yes it's a hack but I can't see why IE's layout is chucking this space in
				//if (navigator.appName == 'Microsoft Internet Explorer' && navigator.appVersion.match(/MSIE [3-6]/))
				//	c.style.marginBottom="-1.3em";
			}
		}
	}
}

function dump_dom(el)
{
	if (el.nodeType == 1)
	{
		dump("&lt;"+el.nodeName+"&gt;<div style=\"padding-left: 20px\">");
		for(var i=0; i<el.childNodes.length; i++)
		{
			dump_dom(el.childNodes[i]);
		}
		dump("</div>&lt;/"+el.nodeName+"&gt;");
	}
	if (el.nodeType == 3)
		dump(el.nodeValue);
}

function open_menu(e)
{
	cancel_hide();

	var target=getEventSource(e);

	target=ascendDOM(target, 'li');
	while (target.getElementsByTagName('ul').length == 0)
		target=ascendDOM(target.parentNode, 'li');

	var submenu=getChildElementsByTagName(target, 'ul');
	
	if (submenu.length > 0)
		setMenuVisible(submenu[0], true);

	close_siblings(target);
}

function close_siblings(t)
{
	var sibs=t.parentNode.childNodes;

	for (var i=0; i < sibs.length; i++)
	{
		var c=sibs[i];
		if (c != t && c.nodeType == 1)
		{
			var submenus=c.getElementsByTagName('ul');
			for (var j=0; j < submenus.length; j++)
			{
				setMenuVisible(submenus[j], false);
			}
		}
	}
}

function setMenuVisible(el, vis)
{
	if (vis) {
		el.style.visibility='visible';
		var as=getChildElementsByTagName(el.parentNode, 'a');
		for (var i=0; i < as.length; i++)
			as[i].className='selected';
	} else {
		el.style.visibility='hidden';
		var as=getChildElementsByTagName(el.parentNode, 'a');
		for (var i=0; i < as.length; i++)
			as[i].className='';
	}
}

function dump(str)
{
	var content=document.getElementById('content');
	content.innerHTML=content.innerHTML+'<br />'+str;
}
registerOnLoadFunction(setupEvents);
