function Menu() {
	this.nTimeout = 300;   /* Zeit für Timeout zum Schliessen des Menues beim verlassen */
	this.oTimeout = null;  /* Timeout-Objekt */
	this.cMenuID = 'menu1'; /* ID der Node des Menues */
	
}

var oMenu = new Menu();

/* 
   Ermittelt die Node des Hauptmenüs. NodeID wird über Membervariable cMenuID definiert.
*/
Menu.prototype.getRoot = function() { 
	if (window.document.getElementById) return (window.document.getElementById(this.cMenuID));
	
}

/* static function 
   Fügt einer Node eine CSS-Klasse hinzu.
*/
Menu.prototype.addNodeClass = function (oNode, cAddClassName) {
	var cClass = oNode.className;
	oNode.className = cClass + (cClass == '' ? '' : ' ') + cAddClassName;
	//alert("test: " + oNode.className);
}

/* 
   Schliesst das Menue.
*/
Menu.prototype.close = function() {
	//alert("close");
	var oRoot = this.getRoot();
	var aItems = oRoot.getItems();
	for (var i=0; i<aItems.length; i++) aItems[i].close(1);
}

/* 
   Initialisiert rekursiv alle Nodes des Menues. 
	 Fuegt CSS-Klassen 'hasChildren' oder 'last' hinzu.
	 Fuegt mouseover- / mouseout-Funktionalität hinzu.
*/
Menu.prototype.init = function() {
	oRoot = this.getRoot();
	
	/*
		Liefert die Node in dem sich die Untermenuepunkte dieser Node befinden.
	*/
	oRoot.getItemContainer = function() {
		for (var j=0; j<this.childNodes.length; j++) {
			//alert("test: " + this.childNodes[j].nodeName);
			if (this.childNodes[j].nodeName == 'UL') return (this.childNodes[j]);
		}
	}

	/*
		Liefert die Nodes der Untermenuepunkte dieser Node.
	*/
	oRoot.getItems = function() {
		var aItems = new Array();
		var oContainer = this.getItemContainer();
		
		if (oContainer) for (var i=0; i < oContainer.childNodes.length; i++) {
			//alert("Container");
			var oChildNode = oContainer.childNodes[i];
			if (oChildNode.nodeName == 'LI') aItems[aItems.length] = oChildNode;
		}
		return (aItems);
	}
	
	/*
		Initialisiert die Node (und rekursiv die Nodes ihrer Untermenuepunkte).
	*/
	oRoot.init = function () {
		var aItems = this.getItems();
		/* Der letzte Menuepunkt (einer jeden Ebene) erhaelt die CSS-Klasse 'last'. */
		if (aItems.length > 0) oMenu.addNodeClass (aItems[aItems.length-1], 'last');

		if (this != oMenu.getRoot()) {
			
			if (aItems.length > 0) {
			
				/*
					Hat ein Menuepunkt ein Untermenu wird die CSS-Klasse 'hasChildren' hinzugefuegt;
					bei existierender CSS-Klasse 'current' (Menuepunkt auf Pfad zur aktuellen Seite) wird
					die Klasse in 'currentHasChildren' geaendert.
				*/
				if (this.className.match ('current'))
					this.className = this.className.replace ('current', 'currentHasChildren');
				else
					oMenu.addNodeClass (this, 'hasChildren');
			}
			
			/*
				Bei Mouseover werden die Siblings geschlossen und die CSS-Klasse 'over' hinzugefügt.
			*/
			this.onmouseover = function() {
				window.clearTimeout (oMenu.oTimeout);
												
				if (!this.className.match (/\s?over/)) {
					for (var j=0; j<this.parentNode.childNodes.length; j++) {
						var oSibling = this.parentNode.childNodes[j];
						if (oSibling.nodeName=='LI') {
							//alert("Close Sibling " + oSibling.childNodes[0].childNodes[0].childNodes[0].nodeValue);
							oSibling.close();
						}
					}
					oMenu.addNodeClass (this, 'over');
					//this.style.display = "block";
				}
			}
			
			/*
				CSS-Klasse 'over' wird entfernt, aller Untermenuepunkte werden ebenfalls geschlossen.
			*/
			this.close = function(nDeepth) {
				nDeepth++;
				this.className = this.className.replace(/\over/, '');
				//this.childNodes[0].childNodes[0].childNodes[0].nodeValue = "-closed-";
				var aItems = this.getItems();
				for (var i=0; i<aItems.length; i++){
					aItems[i].close(nDeepth);
				}
				if (nDeepth>2){
					//alert(this.childNodes[0].childNodes[0].childNodes[0].nodeValue);
					//this.childNodes[0].style.display = "none";
				}
			}
			
			if (this.parentNode.parentNode == oMenu.getRoot()) {
				/*
					Nur fuer die obersten Menuepunkte (indem sich auch alle aufgeklappten Untermenues befinden) 
					wird bei MouseOut der Timer zum Schliessen des Menues gestartet.
				*/
				this.onmouseout=function() {
					oMenu.oTimeout = window.setTimeout ('oMenu.close()', oMenu.nTimeout);
				}
			}
		}

		/* Nodes der Untermenuepunkte mit Methoden versehen und initialisieren; 
		   dabei andere Implementierung für getItemContainer. */
		
		for (var i=0; i<aItems.length; i++) {
			
			oItem = aItems[i];
			oItem.getItemContainer = function() {
				for (var j=0; j < this.childNodes.length; j++) {
					oChildNode = this.childNodes[j];
					if (oChildNode.nodeName == 'UL' || oChildNode.nodeName == 'OL') return (oChildNode);
				}
			}
			oItem.getItems = this.getItems;
			oItem.init = this.init;
			oItem.init();
		}
	}
	
	oRoot.init();

	// Statische Liste der Unterseiten ausblenden
	//var oSubpages = window.document.getElementById('subpages');
	//oSubpages.className = 'pageNav';
}


window.onload = function() {
	oMenu.cMenuID = 'menu1';
	if (window.document.getElementById && !(document.all && navigator.platform.match (/Mac/))) {
		oMenu.init();	
	}
	
}

