var menuaction = false;
var menusToHide = new Array();
var timeoutID = null;
var currentLevelMenus = [null, null, null, null, null];
var classNames = ["menu_over", "submenu_over", "submenu_over", "submenu_over", "submenu_over"];
var oldClassNames = new Array();
var menuIdsLoaded = new Array();
var menuIdCurrentLoading = 0;

//show sub menu for currentMenu
function showMenu(currentMenu, offsetHeight, level) {
	//some fancy dynamic menu loading :)
	var tmpID = currentMenu.id.substring(4);
	if(level < 4 && (tmpID > 0 || tmpID.indexOf('shop') != -1 || tmpID.indexOf('type') != -1)) {
		//fix to avoid more than one popup
		menuIdCurrentLoading = tmpID;
		if(!menuIdLoaded(tmpID)) {
			menuIdsLoaded.push(tmpID);
			$.post('/template/menu.php' , {menuId:tmpID}, 
				function (data, textStatus) {
					$("#menu" + tmpID).parent().append(data);
					if(menuIdCurrentLoading == tmpID) {
						if(level == 1) {
							hideAllMenu(0);
						}
						showMenu(currentMenu, offsetHeight, level);
					}
				}
			);
			return;
		}
	}
	
	
	if(currentLevelMenus[level-1]) {
		currentLevelMenus[level-1].className = oldClassNames[currentLevelMenus[level-1]];
	}
	oldClassNames[currentMenu] = currentMenu.className;
	currentMenu.className = classNames[level-1];
	currentLevelMenus[level-1] = currentMenu;
	
	
	menuaction = true;
	var subMenu = getNextSibling(currentMenu);
	while(subMenu) {
		subMenu.style.display = 'block';
		menusToHide.push([subMenu, level]);
		subMenu.style.top = offsetHeight + "px";
		offsetHeight += getFirstChild(subMenu).offsetHeight-3;
		subMenu = getNextSibling(subMenu);
	}
}

function menuIdLoaded(menuId) {
	for(var i=0; i<menuIdsLoaded.length; i++) {
		if(menuIdsLoaded[i] == menuId) {
			return true;
		}
	}
	return false;
}

//Set timer: remove all menu if no action in 1 sec.
function timedHideAllMenu(level) {
	menuaction = false;
	if(timeoutID) {
		window.clearTimeout(timeoutID);
	}
	timeoutID = window.setTimeout("hideAllMenu(0)", 1000);
}

//Hides menu if no action since last mouse out
//or removes all sub menues
function hideAllMenu(level) {
	if(level == 0 && !menuaction) {
		for(var i=0; i<5; i++) {
			if(currentLevelMenus[i]) {
				currentLevelMenus[i].className = oldClassNames[currentLevelMenus[i]];
			}
		}
		
		while(menusToHide.length>0) {
			var tmpMenu = menusToHide.pop();
			tmpMenu[0].style.display = 'none';
		}
		menuToHide = null;
		menuToHideLevel = 1;
	} else if(level > 0) {
		for(var i=level; i<5; i++) {
			if(currentLevelMenus[i]) {
				currentLevelMenus[i].className = oldClassNames[currentLevelMenus[i]];
			}
		}
		for(var i=0; i<menusToHide.length; i++) {
			if(menusToHide[i][1] > level) {
				menusToHide[i][0].style.display = 'none';
				
			}
		}
	}
}

//Firefox thinks whitespaces and text are DOM Elements
function getNextSibling(node) {
	var nextNode = node.nextSibling;
	
	while(nextNode && nextNode.nodeType == 3) {
		nextNode = nextNode.nextSibling;
	}
	
	return nextNode;
}

//Firefox thinks whitespaces and text are DOM Elements
function getFirstChild(node) {
	var index=0;
	
	while(index<node.childNodes.length && node.childNodes[index].nodeType == 3) {
		index++;
	}
	
	return node.childNodes[index];
}