// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/

////////////////////////////////////////////////////////
// Erweitert für WebAgain - Content-Management-System //
// Copyright 2002-2010 NOTEVO (www.notevo.com)        //
////////////////////////////////////////////////////////

loaded = 0;
layersMoved = 0;
layerPoppedUp = '';

timeoutFlag = 0;
schliessen = 0;												//Vermerk 1
oeffnen = 1;
var alterScrollwert = 0;
var neuerScrollwert = 0;

if (Opera56 || IE4) {
	useTimeouts = 0;
}
if (NS4 || Opera56 || IE4) {
	shutdownOnClick = 1;
}

currentY = 0;
function grabMouse(e)	// for NS4
{
	currentY = e.pageY;
}
if (NS4) {
	document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE);
	document.onmousemove = grabMouse;
}

function seeThroughElements(show) 
{
	if (show) {
		foobar = 'visible';
	} else {
		foobar = 'hidden';
	}
	for (i = 0; i < toBeHidden.length; i++) {
		toBeHidden[i].style.visibility = foobar;
		nFrame.toBeHidden[i].style.visibility = foobar;
	}
}

function shutdown(){
	if (nFrame.schliessen){  								// Vermerk 2
		for (j = 0; j < numl; j++) {
			if (nFrame.offeneMenus[ listl[j] ]){
				LMPopUpL(listl[j], false);
			}
		}
		nFrame.layerPoppedUp = '';
		if (Konqueror || IE5) {
			seeThroughElements(true);
		}
	}
	if (shutdownOnClick) {
		if (NS4) {
			document.onmousedown = shutdown;
		} else {
			document.onclick = shutdown;
		}
	}
}

function setLMTO() 		// wird von jedem MenuPunkt bei OnMouseOut aufgerufen
{
	if (mFrame){
		loaded = mFrame.loaded;									// Vermerk 7
	}
	geladen = holeElementByID("input_loaded", mFrame);

	if(nFrame && geladen && loaded){
		nFrame.schliessen = 1;									// Vermerk 3
		clearTimeout (nFrame.timerMenuAuf);						// Vermerk 4

		if (useTimeouts) {
			nFrame.timeoutFlag = setTimeout('shutdown()', timeoutLength);
		}else{
			shutdown();
		}
	}
}

function clearLMTO(){	// wird von jedem MenuPunkt bei OnMouseOver aufgerufen
	if (mFrame){
			loaded = mFrame.loaded;									// Vermerk 7
	}
	geladen = holeElementByID("input_loaded", mFrame);
	if (geladen && loaded){
		nFrame.schliessen = 0;         						// Vermerk 5
		clearTimeout (nFrame.timeoutFlag); 					// Vermerk 6
	}
}

function moveLayerX(menuName)
{
	if (mFrame){
		loaded = mFrame.loaded;									// Vermerk 7
	}
	geladen = holeElementByID("input_loaded", mFrame);
	if (!geladen || !loaded || (isVisible(menuName) && menuName != nFrame.layerPoppedUp)) {
		return;
	}
	if (father[menuName] != '') {
		onLeft = 0;
		onRight = 0;
		if (!Opera5 && !IE4) {
			width0 = nFrame.lwidth[father[menuName]];
			width1 = nFrame.lwidth[menuName];
		} else if (Opera5) {
			//Vermerk 8
			width0 = abscissaStep;
			width1 = abscissaStep;
		} else if (IE4) {
			width0 = getOffsetWidth(father[menuName]);
			width1 = getOffsetWidth(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 (!mit_Frames){									//Vermerk 9
			windowXOffset = 0;
		}
		if (back[menuName]) {
			nFrame.xKoordinaten[menuName] = onLeft-windowXOffset;	//Speichert Werte
			setLeft(menuName, onLeft-windowXOffset);
		} else {
			nFrame.xKoordinaten[menuName] = onRight-windowXOffset;	//Speichert Werte
			setLeft(menuName, onRight-windowXOffset);
		}
	}
	moveLayerY(menuName);									// Vermerk 10
}

function moveLayerY(menuName, oberstes) 								// Vermerk 11
{
	if (oberstes){
		abstandV = abstandVertical;
	}
	else{
		abstandV = 0;
	}
	if (mFrame){
		loaded = mFrame.loaded;
	}
	geladen = holeElementByID("input_loaded", mFrame);
	if (!geladen || !loaded || (isVisible(menuName) && menuName != nFrame.layerPoppedUp)) {
		return;
	}
	if (!mFrame.layersMoved) {
		moveLayers();
		mFrame.layersMoved = 1;
	}
	if (!NS4) {
		newY = getOffsetTop('ref' + menuName);
	} else {
		newY = currentY;
	}
	newY += (menuTopShift - abstandOben - 1 + abstandV);
	layerHeight = getOffsetHeight(menuName);
	windowHeight = getWindowHeight();
	windowYOffset = getWindowYOffset();
	if (newY + layerHeight > windowHeight + windowYOffset) {
		if (layerHeight > windowHeight) {
//			newY = windowYOffset;							// Vermerk 12
		} else {
			newY = windowHeight + windowYOffset - layerHeight;
		}
	}
	if (Math.abs(getOffsetTop(menuName) - newY) > thresholdY) {
		nFrame.yKoordinaten[menuName] = newY - getWindowYOffset();
		if (mit_Frames){
			newY -= getWindowYOffset();						// Vermerk 13
		}
		setTop(menuName, newY );
	}
}

function moveLayerX1(menuName, father) 						// Vermerk 14
{
	if (mit_Frames && (navFrame != menuFrame)){
		neuerScrollwert = getWindowYOffset();
	}
	if ( alterScrollwert != neuerScrollwert && mFrame){				// Vermerk 15
		mFrame.layersMoved = 0;
		alterScrollwert = neuerScrollwert;
	}
	if (!lwidthDetected) {
		return;
	}
	if (!Opera5 && !IE4) {
		if(nFrame){
			width1 = nFrame.lwidth[menuName];
		}
	} else if (Opera5) {
		// Vermerk 16
		width1 = abscissaStep;
	}
	foobar = null;
	foobar = getOffsetLeft(father + menuName) + korrekturL;
	if (foobar){
		if (!IE4) {
			windowWidth = getWindowWidth();
			windowXOffset = getWindowXOffset();
			if (mit_Frames){
				windowXOffset = 0;
			}
			if (foobar + width1 - korrekturR > windowWidth + windowXOffset) {
				foobar = windowWidth + windowXOffset - width1 + korrekturR;
			}
			if (foobar < windowXOffset) {
				//foobar = windowXOffset;			// Vermerk 17
			}
		}
	
		if (!mit_Frames){							// Vermerk 18
			windowXOffset = 0;
		}
		if (nFrame){
			nFrame.xKoordinaten[menuName] = foobar;		// Vermerk 19
		}
		setLeft(menuName, foobar);
	}
}

function layersOverlap(layer, i)
{
	if (Konqueror22) {
		return true;
	}
	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 (k = 0; k < toBeHidden.length; k++) {
		if (layersOverlap(menuName, k)) {
			if (on) {
				mFrame.toBeHidden[k].style.visibility = 'hidden';
			} else {
				mFrame.toBeHidden[k].style.visibility = 'visible';
			}
		}
	}
}

function LMPopUpL(menuName, on, istHaupt){
	if (mFrame){
		loaded = mFrame.loaded;
	}
	geladen = holeElementByID("input_loaded", mFrame);
	if (!geladen || !loaded) {
		return;
	}
	if (!mFrame.layersMoved) {
		moveLayers();
		mFrame.layersMoved = 1;
	}
	
	if (menuName)
		setVisibility(menuName, on, istHaupt);	
}

function LMPopUp(menuName, isCurrent, istHaupt){
	if (mFrame){
		loaded = mFrame.loaded;
	}
	geladen = holeElementByID("input_loaded", mFrame);
	
	
	if (!geladen || !loaded)
	{
		return;
	}

	if (isVisible(menuName) && !isCurrent) 
	{
		return;
	}
	
	if (menuName == nFrame.layerPoppedUp) 
	{
		if (isVisible(menuName))
			return;
		else
			nFrame.layerPoppedUp = "";
	}



	
	if (menuName == father[nFrame.layerPoppedUp]) {			// Vermerk 20
		LMPopUpL(nFrame.layerPoppedUp, false, istHaupt);
		seeThroughWorkaround(menuName, false);
	} else if (father[menuName] == nFrame.layerPoppedUp) { 	// Vermerk 21
		LMPopUpL(menuName, true, istHaupt);
		seeThroughWorkaround(menuName, true);
	} else {
		shutdown();
		foobar = menuName;
		grenze = 0;
		do {
			LMPopUpL(foobar, true, istHaupt);
			seeThroughWorkaround(foobar, true);
			foobar = father[foobar];
			grenze++;
		} while (foobar != '' && grenze < numl)
	}
	nFrame.layerPoppedUp = menuName;
}

function resizeHandler()								// Vermerk 22
{
	if (NS4) {
		window.location.reload();
	}
//	shutdown();											// Vermerk 23
	if (mit_Frames){
		for (l = 0; l < numl; l++) {
			newY = 0;
			newX = 0;
			if (IE){
				if (nFrame.yKoordinaten[listl[l]]){
					newY = nFrame.yKoordinaten[listl[l]];
				}
				if (nFrame.xKoordinaten[listl[l]]){
					newX = nFrame.xKoordinaten[listl[l]];			
				}
				element = holeElementByID(listl[l], mFrame);
				if (element){
					if (getWindowWidth() < element.offsetWidth + newX){	//wenn fenster zu klein, dann korrigieren
						newX = getWindowWidth() - element.offsetWidth + 16;
					}
				}
			}
			setTop (listl[l], newY);
			setLeft(listl[l], newX);
		}
	}
	if (toBeHidden != null && toBeHidden.length > 0) {
		seeThroughCoordinatesDetection();
	}
//	mFrame.layersMoved = 0;
}

function scrollHandler()								// Vermerk 22
{
	if (NS4) {
		window.location.reload();
	}
//	shutdown();											// Vermerk 23
	if (mit_Frames){
		for (l = 0; l < numl; l++){
			newY = 0;
			newX = 0;
			if (nFrame.yKoordinaten[listl[l]]){
				newY = nFrame.yKoordinaten[listl[l]];
			}
			if (nFrame.xKoordinaten[listl[l]]){
				newX = nFrame.xKoordinaten[listl[l]];			
				element = holeElementByID(listl[l], mFrame);
				if (element){
					if (getWindowWidth() < element.offsetWidth + newX){
						newX = getWindowWidth() - element.offsetWidth + 16;
					}
				}
			}
			setTop (listl[l], newY);
			setLeft(listl[l], newX);
			if (IE && nFrame.layerPoppedUp != ''){		// Vermerk 24
				mFrame.testeElemente(listl[l], 1, 1)
			}
		}
	}
	if (toBeHidden != null && toBeHidden.length > 0) {
		seeThroughCoordinatesDetection();
	}
}

function gibTiefe(menuName){
	if (!father[menuName]){
		return 0;
	}
	else{
		return 1 + gibTiefe(father[menuName]);
	}
}

function speichereTiefen(){								// Vermerk 25
	n = 0;
	for (m = 0; m < numl; m++){
		tiefen[listl[m]] = gibTiefe(listl[m]);
		if (tiefen[listl[m]] == 0){						// Vermerk 26
			hMenus[listl[m]] = menuCell + (n+1);
			hLinks[listl[m]] = linkCell + (n+1);
			n++;
		}
	}
	anzMenus = n;
}

window.onresize = resizeHandler;
window.onscroll = scrollHandler;				

function yaresizeHandler(){
	if (window.innerWidth != origWidth || window.innerHeight != origHeight) {
		if (Konqueror22 || Opera5) {
			window.location.reload();					// Vermerk 27
		}
		origWidth  = window.innerWidth;
		origHeight = window.innerHeight;
		resizeHandler();
	}
	setTimeout('yaresizeHandler()', 500);
}

function loadHandler(){
	speichereTiefen();									// Vermerk 28
	farbenSetzen();										// Vermerk 29
	if (Konqueror22 || Opera56) {
		origWidth  = window.innerWidth;
		origHeight = window.innerHeight;
		yaresizeHandler();
	}
}

window.onload = loadHandler;
window.onunload = closeMenu;

function closeMenu()
{
if (!document.all)
	shutdown();
}

function fixieflm(menuName){
	if (DOM) {
		setWidth(menuName, '100%');
	} else {
		document.write('</div>');
		document.write('<div id="IE4' + menuName + '" style="position: relative; width: 100%; visibility: visible;">');
	}
}