NS4 = (document.layers);
IE4 = (document.all);

var changedMenuFirsLevel = new Array();
var changedMenuSecondLevel = new Array();
var selectedParentClassName = 'selectedParent';

function showEbene(ebene, parentObject) {
//alert("in showEbene, ebene="+ebene+", parentObject="+parentObject);
	isOver=true;
  	var currentDivElement, backElement, back2Element;
	currentDivElement = document.getElementById(ebene);
	backElement = document.getElementById('back');
   	back2Element = document.getElementById('back2');
//alert("in showEbene, currentDivElement.style="+currentDivElement.style+", parentObject="+parentObject+", typeof(parentObject)="+typeof(parentObject));		
	if (parentObject) {
		var parentObjectPosition = getObjectPosition(parentObject);
//alert("in showEbene, parentObjectPosition="+parentObjectPosition);			
		if (parentObjectPosition) {
			if (currentDivElement && currentDivElement != null) {
				currentDivElement.style.left = parentObjectPosition.x;
				currentDivElement.style.top = parentObjectPosition.y;
			}
			if (parentObject.className == '') {
				parentObject.className = selectedParentClassName;
				changedMenuSecondLevel[changedMenuSecondLevel.length] = parentObject;
			}
		}
	}
	if (currentDivElement && currentDivElement != null)
		currentDivElement.style.visibility="visible";
  	if (backElement && backElement != null)
		backElement.style.visibility="visible";
  	if (back2Element && back2Element != null)
		back2Element.style.visibility="visible";

	return true;
}

function hideEbene(ebene, isForSubMenu){
	resetChangedMenu(isForSubMenu);	
	if (document.getElementById(ebene) && document.getElementById('back') && document.getElementById('back2')) {
		document.getElementById(ebene).style.visibility="hidden";
		document.getElementById('back').style.visibility="hidden";
		document.getElementById('back2').style.visibility="hidden";
	}
	return true;
}

function resetChangedMenu(isForSubMenu) {
	// reset second level
	for (i=0; i < changedMenuSecondLevel.length; i++) {
    	var currentElement = changedMenuSecondLevel[i];
    	if (currentElement && currentElement != null && currentElement.className == selectedParentClassName) 
    		currentElement.className = '';
  	}
  	changedMenuSecondLevel = new Array();
	if (!(isForSubMenu && isForSubMenu == "true")) { 
		// reset all levels
		for (i=0; i < changedMenuFirsLevel.length; i++) {
	    	var currentElement = changedMenuFirsLevel[i];
	    	if (currentElement && currentElement != null && currentElement.className == selectedParentClassName) 
	    		currentElement.className = '';
	  	}
	  	changedMenuFirsLevel = new Array();
	}

}

var old;
var oldmem;
var oldsub;
var isOver=false;

function showMenu(ebene, Nr, tf, parentObject) {
//alert("in showMenu, ebene="+ebene+", Nr="+Nr+", tf="+tf+", parentObject="+parentObject);
		if(oldsub){
//alert("in showMenu, ebene="+ebene+", oldsub");		
			hideEbene(oldsub);
			oldsub="";
		}

		if (old) {
//alert("in showMenu, ebene="+ebene+", old");			
			hideEbene(old)
			old="";
		}

		if (ebene) {
			isOver=true;
			if (parentObject && parentObject.className == '') {
				parentObject.className = selectedParentClassName;
				changedMenuFirsLevel[changedMenuFirsLevel.length] = parentObject;
			}
			showEbene(ebene, parentObject);
			old=ebene;
		}
}

function showSubmenu(ebene, parentObject) {
//alert("in showSubmenu, ebene="+ebene+", parentObject="+parentObject);
	if(oldsub){
//alert("in showSubmenu, ebene="+ebene+", parentObject="+parentObject+", oldsub");	
		hideEbene(oldsub, "true");
		oldsub="";
	}

	if (ebene == "none"){	
		showEbene(old);
		return true;
	}

	if(ebene) {
		if (parentObject) {
			showEbene(ebene, parentObject);
		} else {
			showEbene(ebene);
		}
		oldsub=ebene;
	}
}


function hideallMenu() {
	resetChangedMenu();
	showMenu();
	showSubmenu();	
	if (document.getElementById('back') && document.getElementById('back2')) {
		document.getElementById('back').style.visibility="hidden";
		document.getElementById('back2').style.visibility="hidden";
	}
	return true;
}

function hideobj(){	
	if (!isOver) 
		hideallMenu();
}



function mobject(){
	this.ebene = "";
	this.hideobj = hideobj;
}



menuobject = new mobject();


function tohide(timeout){
	isOver=false;
	menuobject.ebene = null;
	if (timeout)
		window.setTimeout("menuobject.hideobj()",timeout);
	else
		window.setTimeout("menuobject.hideobj()",400);
}



function getObjectPosition(element)
/* der Aufruf dieser Funktion ermittelt die absoluten Koordinaten
   des Objekts element */
{
//alert("in getObjectPosition, element="+element+", typeof(elem)="+typeof(elem));
  var elem=element,tagname="",x=0,y=0,width=0;
  
/* solange elem ein Objekt ist und die Eigenschaft offsetTop enthaelt
   wird diese Schleife fuer das Element und all seine Offset-Eltern ausgefuehrt */
  while ((elem) && (elem != null) && (typeof(elem)=="object")&&(typeof(elem.tagName)!="undefined")) {
    y+=elem.offsetTop;     /* Offset des jeweiligen Elements addieren */
    x+=elem.offsetLeft;    /* Offset des jeweiligen Elements addieren */
    tagname=elem.tagName.toUpperCase(); /* tag-Name ermitteln, Grossbuchstaben */

/* wenn beim Body-tag angekommen elem fuer Abbruch auf 0 setzen */
    if (tagname=="BODY")
      elem=0;

/* wenn elem ein Objekt ist und offsetParent enthaelt
   Offset-Elternelement ermitteln */
    if (typeof(elem)=="object")
      if (typeof(elem.offsetParent)=="object")
        elem=elem.offsetParent;
  }
//alert("in getObjectPosition, element="+element+", x="+x+", y="+y);
/* Objekt mit x und y zurueckgeben */
  position=new Object();
  position.x=x+element.offsetWidth+"px";
  position.y=y+"px";
  return position;
}

function alertObjectPosition(element)
/* gibt eine Meldung mit x und y des zu elementId gehoerenden Elements aus */
{
  var a,element;

/* Position bestimmen und melden */
  a=getObjectPosition(element);
  window.alert("Position "+element+": ("+a.x+","+a.y+")");
}

