function toggleHide(id)
{
	var display = document.getElementById(id).style.display;
	if(display == '' || display == 'none') {
		show(id);
	} else {
		hide(id);
	}
}

function hide(id)
{
	document.getElementById(id).style.display = 'none';
}

function show(id)
{
	document.getElementById(id).style.display = 'block';
}

function hideMenu(id)
{
	var menu = document.getElementById(id);
	menu.getElementsByTagName("ul")[0].style.display = 'none';
}

function showMenu(id)
{
	var menu = document.getElementById(id);
	menu.getElementsByTagName("ul")[0].style.display = 'block';
}

openMenus = new Array();
newDepth = 0; // Depth when timeout expires
newID = null;
timeout = null;

function enterMenu(id, depth)
{
	if(openMenus[depth] != id) {
		newID = id;
		newDepth = depth;
		if(openMenus[depth] == null) {
			applyNewMenu();
		} else {
			clearTimeout(timeout);
			timeout = setTimeout("applyNewMenu()", 500); // delay [ms]
		}
		return;
	} else if(newDepth < depth) {
		newDepth = depth;
		newID = null;
	}
}

function leaveMenu(id)
{
	var index = indexOf(openMenus, id); 
	if(index != null) {
		newDepth = index-1;
		newID = null;
		clearTimeout(timeout);
		timeout = setTimeout("applyNewMenu()", 500); // delay [ms]
	}
}

function applyNewMenu()
{
	if(newID == null) {
		closeMenu(newDepth+1);
	} else {
		closeMenu(newDepth);
		openMenus[newDepth] = newID;
		showMenu(newID);
		newID = null;
	}
}

function closeMenu(depth)
{
	for(var i=openMenus.length; i>=depth; i--) {
		if(openMenus[i] != null) {
			hideMenu(openMenus[i]);
			openMenus[i] = null;
		}
	}
}

function indexOf(array, value)
{
	// Because IE doesn't support inbuilt one
	for(var i=0; i<array.length; i++) {
		if(array[i] == value) {
			return i;
		}
	}
	return null;
}
