
var menuHideTimeout = 50;

$(function() {
	
	$("#menu > ul").not(".database-submenu")
		.each(function() {
			setMenuZOrder(this, 1);
		});
	
	var menuLiId = 1;
	$("#menu li").each(function() {
		this.databaseSubmenu = null;
		this.hideTimeout = null;
		this.id = "li-menu-item-" + menuLiId;
		menuLiId++;
	});
	 
	$("#menu li.has-database-submenu").each(function() {
		var submenuClass = this.className.toString().match(/has\-database\-submenu\-[a-zA-Z_]+/).toString().replace('has-database-submenu-', '').toString();
		this.databaseSubmenu = $("#menu > ul.database-submenu." + submenuClass).get(0);
		this.databaseSubmenu.parentMenuItem = this;
	});
	
	$("#menu ul.database-submenu").hover(
		function() {
			cancelHidingMenu(this.parentMenuItem);
			$(this).addClass("hover");
		},
		function() {
			$("#menu li.hover").not(".database-submenu li").each(function() {
				this.hideTimeout = setTimeout("hideMenu('" + this.id + "');", menuHideTimeout);
			});
			$(this).removeClass("hover");
		}
	);
	
	$("#menu li").hover(
		function() {
			if (this.hideTimeout != null)
				cancelHidingMenu(this);
			$(this).children("ul").stop(true, true).slideDown("fast");
//			$(this).children("ul").show();
			if (this.databaseSubmenu != null)
				$(this.databaseSubmenu).stop(true, true).slideDown("fast");
//				$(this.databaseSubmenu).show();
			$(this).addClass("hover");
		},
		function() {
			this.hideTimeout = setTimeout("hideMenu('" + this.id + "');", menuHideTimeout);
		}
	);
	 
});

function hideMenu(nodeId) {
	node = document.getElementById(nodeId);
	if (node == null)
		return;
	node.hideTimeout = null;
	$(node).children("ul").slideUp("fast");
//	$(node).children("ul").hide();
	if (node.databaseSubmenu != null)
		$(node.databaseSubmenu).slideUp("fast");
//		$(node.databaseSubmenu).hide();
	$(node).removeClass("hover");
}

function cancelHidingMenu(node) {
	if (node.hideTimeout == null)
		return;
	clearTimeout(node.hideTimeout);
	cancelHidingMenu(node.parentNode.parentNode);
}

function setMenuZOrder(element, zOrder) {
	$(element)
		.css("z-index", zOrder.toString())
		.children()
			.filter("a,div")
				.each(function() {
					zOrder--;
					setMenuZOrder(this, zOrder + 50);
				})
			.end()
			.filter("ul,li")
				.each(function() {
					zOrder--;
					setMenuZOrder(this, zOrder + 250);
				})
}

