	
	// @codingStandardsIgnoreFile
	
	/**
	* Funktionen zum auf- und zuklappen des hauptmenüs
	* 
	* @package   Homepage
	* @name      js/mainmenu.js
	* @author    Raphael Horber
	* @version   06.10.2010
	* @copyright PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
	*/
	
	
	// browser-detection
	DOM = (document.getElementById) ? 1 : 0;
	IE  = (navigator.userAgent.indexOf('MSIE') > -1) ? 1 : 0;
	
	loaded        = 0;
	layersMoved   = 0;
	layerPoppedUp = '';
	timeoutFlag   = 0;
	
	
	function seeThroughElements(show)
	{
		if(show)
		{
			foobar = 'visible';
		}
		else
		{
			foobar = 'hidden';
		}
		for(i = 0; i < toBeHidden.length; i++)
		{
			toBeHidden[i].style.visibility = foobar;
		}
	}
	
	function shutdown()
	{
		for(i = 0; i < numl; i++)
		{
			LMPopUpL(listl[i], false);
		}
		layerPoppedUp = '';
	}
	
	function setLMTO()
	{
		timeoutFlag = setTimeout('shutdown()', 1000);
	}
	
	function clearLMTO()
	{
		clearTimeout(timeoutFlag);
	}
	
	function moveLayerX(menuName)
	{
		if(!loaded || (isVisible(menuName) && menuName != layerPoppedUp))
		{
			return;
		}
		if(father[menuName] != '')
		{
			width0 = lwidth[father[menuName]];
			width1 = lwidth[menuName];
			
			onLeft = getOffsetLeft(father[menuName]) - width1 + menuLeftShift;
			onRight = getOffsetLeft(father[menuName]) + width0 - menuRightShift;
			windowWidth = getWindowWidth();
			windowXOffset = getWindowXOffset();
			if(onLeft < windowXOffset && onRight + width1 > windowWidth + windowXOffset)
			{
				if(onRight + width1 - windowWidth - windowXOffset > windowXOffset - onLeft)
				{
					onLeft = windowXOffset;
				}
				else
				{
					onRight = windowWidth + windowXOffset - width1;
				}
			}
			if(back[father[menuName]])
			{
				if(onLeft < windowXOffset)
				{
					back[menuName] = 0;
				}
				else
				{
					back[menuName] = 1;
				}
			}
			else
			{
				if(onRight + width1 > windowWidth + windowXOffset)
				{
					back[menuName] = 1;
				}
				else
				{
					back[menuName] = 0;
				}
			}
			if(back[menuName])
			{
				setLeft(menuName, onLeft);
			}
			else
			{
				setLeft(menuName, onRight);
			}
		}
		// workaround needed for Mozilla < 1.4 for MS Windows
		moveLayerY(menuName);
	}
	
	function moveLayerY(menuName)
	{
		if(!loaded || (isVisible(menuName) && menuName != layerPoppedUp))
		{
			return;
		}
		if(!layersMoved)
		{
			moveLayers();
			layersMoved = 1;
		}
		
		newY = getOffsetTop('ref' + menuName);
		newY += menuTopShift;
		layerHeight = getOffsetHeight(menuName);
		windowHeight = getWindowHeight();
		windowYOffset = getWindowYOffset();
		if(newY + layerHeight > windowHeight + windowYOffset)
		{
			if(layerHeight > windowHeight)
			{
				newY = windowYOffset;
			}
			else
			{
				newY = windowHeight + windowYOffset - layerHeight;
			}
		}
		if(Math.abs(getOffsetTop(menuName) - newY) > thresholdY)
		{
			setTop(menuName, newY);
		}
	}
	
	function moveLayerX1(menuName, father)
	{
		if(!lwidthDetected)
		{
			return;
		}
		
		width1 = lwidth[menuName];
		foobar = getOffsetLeft(father + menuName);
		
		windowWidth = getWindowWidth();
		windowXOffset = getWindowXOffset();
		if(foobar + width1 > windowWidth + windowXOffset)
		{
			foobar = windowWidth + windowXOffset - width1;
		}
		if(foobar < windowXOffset)
		{
			foobar = windowXOffset;
		}
		setLeft(menuName, foobar);
	}
	
	function layersOverlap(layer, i)
	{
		xa1 = layerLeft[layer];
		xa2 = xa1 + getOffsetWidth(layer);
		ya1 = layerTop[layer];
		ya2 = ya1 + getOffsetHeight(layer);
		
		xb1 = toBeHiddenLeft[i];
		xb2 = xb1 + toBeHidden[i].offsetWidth;
		yb1 = toBeHiddenTop[i];
		yb2 = yb1 + toBeHidden[i].offsetHeight;
		
		if(xb1>xa1) xa1=xb1; if(xb2<xa2) xa2=xb2;
		if(yb1>ya1) ya1=yb1; if(yb2<ya2) ya2=yb2;
		
		return (xa2>xa1 && ya2>ya1);
	}
	
	function seeThroughWorkaround(menuName, on)
	{
		for(i = 0; i < toBeHidden.length; i++)
		{
			if(layersOverlap(menuName, i))
			{
				if(on)
				{
					toBeHidden[i].style.visibility = 'hidden';
				}
				else
				{
					toBeHidden[i].style.visibility = 'visible';
				}
			}
		}
	}
	
	function LMPopUpL(menuName, on)
	{
		if(!loaded)
		{
			return;
		}
		if(!layersMoved)
		{
			moveLayers();
			layersMoved = 1;
		}
		setVisibility(menuName, on);
	}
	
	function LMPopUp(menuName, isCurrent)
	{
		if(!loaded || menuName == layerPoppedUp || (isVisible(menuName) && !isCurrent))
		{
			return;
		}
		if(menuName == father[layerPoppedUp])
		{
			LMPopUpL(layerPoppedUp, false);
		}
		else if(father[menuName] == layerPoppedUp)
		{
			LMPopUpL(menuName, true);
			seeThroughWorkaround(menuName, true);
		}
		else
		{
			shutdown();
			foobar = menuName;
			do
			{
				LMPopUpL(foobar, true);
				seeThroughWorkaround(foobar, true);
				foobar = father[foobar];
			} while(foobar != '')
		}
		layerPoppedUp = menuName;
	}
	
	function resizeHandler()
	{
		shutdown();
		for(i = 0; i < numl; i++)
		{
			setLeft(listl[i], 0);
			setTop(listl[i], 0);
		}
		if(toBeHidden != null && toBeHidden.length > 0)
		{
			seeThroughCoordinatesDetection();
		}
		layersMoved = 0;
	}
	window.onresize = resizeHandler;
	
	function yaresizeHandler()
	{
		if(window.innerWidth != origWidth || window.innerHeight != origHeight)
		{
			origWidth  = window.innerWidth;
			origHeight = window.innerHeight;
			resizeHandler();
		}
		setTimeout('yaresizeHandler()', 500);
	}
	
	function fixieflm(menuName)
	{
		setWidth(menuName, '100%');
	}
	
	
	layerLeft = new Array();
	layerTop = new Array();
	
	function setVisibility(layer, on)
	{
		if(on)
		{
			document.getElementById(layer).style.visibility = 'visible';
		}
		else
		{
			document.getElementById(layer).style.visibility = 'hidden';
		}
	}
	
	function isVisible(layer)
	{
		return (document.getElementById(layer).style.visibility == 'visible');
	}
	
	function setLeft(layer, x)
	{
		layerLeft[layer] = x;
		document.getElementById(layer).style.left = x + 'px';
	}
	
	function getOffsetLeft(layer)
	{
		var value = 0;
		
		object = document.getElementById(layer);
		value = object.offsetLeft;
		
		while(object.tagName != 'BODY' && object.offsetParent)
		{
			object = object.offsetParent;
			value += object.offsetLeft;
		}
		
		return (value);
	}
	
	function setTop(layer, y)
	{
		layerTop[layer] = y;
		document.getElementById(layer).style.top = y + 'px';
	}
	
	function getOffsetTop(layer)
	{
		var value = 0;
		
		object = document.getElementById(layer);
		value = object.offsetTop;
		
		while(object.tagName != 'BODY' && object.offsetParent)
		{
			object = object.offsetParent;
			value += object.offsetTop;
		}
		
		return (value);
	}
	
	function setWidth(layer, w)
	{
		document.getElementById(layer).style.width = w;
	}
	
	function getOffsetWidth(layer)
	{
		var value = 0;
		value = document.getElementById(layer).offsetWidth;
		return (value);
	}
	
	// unused, not tested
	function setHeight(layer, h)
	{
		document.getElementById(layer).style.height = h;
	}
	
	function getOffsetHeight(layer)
	{
		var value = 0;
		value = document.getElementById(layer).offsetHeight;
		return (value);
	}
	
	function getWindowWidth()
	{
		var value = 0;
		
		if(!IE)
		{
			value = window.innerWidth;
		}
		else
		{
			value = document.documentElement.clientWidth;
		}
		if(isNaN(value))
		{
			value = window.innerWidth;
		}
		
		return (value);
	}
	
	function getWindowXOffset()
	{
		var value = 0;
		
		if(!IE)
		{
			value = window.pageXOffset;
		}
		else
		{
			value = document.documentElement.scrollLeft;
		}
		
		return (value);
	}
	
	function getWindowHeight()
	{
		var value = 0;
		
		if(!IE)
		{
			value = window.innerHeight;
		}
		else
		{
			value = document.documentElement.clientHeight;
		}
		if(isNaN(value))
		{
			value = window.innerHeight;
		}
		return (value);
	}
	
	function getWindowYOffset()
	{
		var value = 0;
		
		if(!IE)
		{
			value = window.pageYOffset;
		}
		else
		{
			value = document.documentElement.scrollTop;
		}
		
		return (value);
	}
	
