var hideMenuTimeout = null;

ua = navigator.userAgent.toLowerCase();
isOpera = (ua.indexOf('opera') > -1);
isSafari = (ua.indexOf('safari') > -1);
isGecko = (!isOpera && !isSafari && ua.indexOf('gecko') > -1);
isIE = (!isOpera && ua.indexOf('msie') > -1);

function addEventListener(target, type, listener) {
  if (target == null) {
    return;
  }
  if(target.addEventListener)   { // DOM-kompatibel
    target.addEventListener(type, listener, false);
  } else if(target.attachEvent) { // MSIE
    target.attachEvent("on"+type, listener);
  } else                         { // Andere, z.B. Opera
    target["on"+type] = listener;
  }
}

function getViewportWidth() {
	var width = self.innerWidth;  // Safari
	var mode = document.compatMode;

	if (mode || isIE) { // IE, Gecko, Opera
		width = (mode == 'CSS1Compat') ?
			document.documentElement.clientWidth : // Standards
			document.body.clientWidth; // Quirks
	}

	return width;
}
        

function setHideMenuTimeout(menuId) {
	if (hideMenuTimeout == null) {
		hideMenuTimeout = window.setTimeout("hideAllMenus('" + menuId + "')", 500);
	}
}

function clearHideMenuTimeout() {
	if (hideMenuTimeout != null) {
		window.clearTimeout(hideMenuTimeout);
		hideMenuTimeout = null;
	}
}

function hideAllMenus(menuId) {
	var ulList = document.getElementById(menuId).getElementsByTagName("ul");
	for (var i = 0; i < ulList.length; i++) {
		if (ulList[i].className.indexOf("hiddenmenu") != -1) {
			ulList[i].style.visibility = "hidden";
		}
	}
}

function showNextMenu(event) {

	if (event.target) {
		element = event.target;
	} else {
		element = event.srcElement;
	}

	clearHideMenuTimeout();
	hideMenus(element);
	var submenu  = element.parentNode.getElementsByTagName("ul")[0];
	if (submenu != null) {
	        if (isIE) {
			//submenu.style.width = getViewportWidth();
		} else {
			//submenu.style.width = getViewportWidth() - 30;
		}
		submenu.style.visibility = "visible";
	}
}

function hideMenus(element) {

	clearHideMenuTimeout();

	var activeParent = element.parentNode.parentNode.parentNode;
	var ul = activeParent.getElementsByTagName("ul")[0];
	var activeRowChildren = ul.childNodes;
	for (var j = 0; j < activeRowChildren.length; j++) {
		if (activeRowChildren[j].nodeName == "LI") {
			var link  = activeRowChildren[j].getElementsByTagName("a")[0];
			var submenu  = activeRowChildren[j].getElementsByTagName("ul")[0];
			if (submenu != null) {
				submenu.style.visibility = "hidden";
			}
		}
	}
}


function addMenuEvents(menuId) {

	addEventListener(document.getElementById(menuId), "mouseout", function(event) { try {setHideMenuTimeout(menuId);} catch(e) {} });

	var activeElement = null;
	var parentElement = null;
	var lastPathElement = null;

	var liList = document.getElementById(menuId).getElementsByTagName("li");
	for (var i = 0; i < liList.length; i++) {
		// aktives Elemente suchen
		if (liList[i].className.indexOf("active") != -1) {
			lastPathElement = liList[i];
			break;
		} else if (liList[i].className.indexOf("parent") != -1) {
			lastPathElement = liList[i];
		} else if (liList[i].className.indexOf("path") != -1) {
			lastPathElement = liList[i];
		}
	}

	var ulList = lastPathElement.getElementsByTagName("ul");
	if (ulList.length > 0) {
		var activeRowChildren = ulList[0].childNodes;
		for (var j = 0; j < activeRowChildren.length; j++) {
			if (activeRowChildren[j].nodeName == "LI") {
				var link  = activeRowChildren[j].getElementsByTagName("a")[0];
				var submenu  = activeRowChildren[j].getElementsByTagName("ul")[0];
				if (submenu != null) {
					var active = submenu.parentNode.parentNode.parentNode;
					submenu.className = submenu.className + " hiddenmenu";
					addEventListener(submenu, "mouseover", function(event) { try {clearHideMenuTimeout();} catch(e) {} });
				}
				addEventListener(link, "mouseover", function(event) { try {showNextMenu(event);} catch (e) {} });
			}
		}
	}
	document.getElementById(menuId).style.visibility = "visible";
}