/* ////////////////////////////////////////////////////////////////                            
                               By i4m                              
///////////////////////////////////////////////////////////////////

Struktur:
<ul>
	<li><a>TXT</a>
		<ul>
			<li><a>TXT</a>
		</ul>
	</li>
</ul>

<ul>
	<span><a>TXT</a>
		<div>
			<span><a>TXT</a></span>
		</div>
	</span>
</ul>
*/
function DrMenu(menuid){
	var self = this;
	this.menuid = menuid;
	this.active_items = new Array();  // Array für aktive Elemente
	this.html_menu = document.getElementById(this.menuid);  // Referenz auf die UL des Menus
	this.menu_event = "over"; // over oder click möglich
	this.show_parent_active = true; // wenn der/die Parent(s) aktiv bleiben sollen wird über die .hover classe gesteuert
	this.linkOut = true;  // ob beim überfahren einens anderen Menüpunktes das aktive Submenu verschwinden soll.
	this.needIeSelectBoxBugFix = ((navigator.appVersion.indexOf("MSIE 5") != -1 || navigator.appVersion.indexOf("MSIE 6") != -1) && navigator.userAgent.indexOf("Opera")==-1); // ob der IeSelectBoxBug gefixt werden muss
	this.init = function(){
		this.html_menu.obref = this;  // Referenz auf das DrMenu-Object
		this.html_menu.innerHTML = this.html_menu.innerHTML.replace(/<UL([^>]*)>/gi, '<div$1>').replace(/<\/UL>/gi, "</div>").replace(/<LI([^>]*)>/gi, '<span$1>').replace(/<\/LI>/gi, "</span>");  // ul wird durch div ersetzt und li durch span
		for(i=0; i<this.html_menu.getElementsByTagName("a").length; i++){  // Ereignissfunktionen werden gesetzt
			if(this.menu_event=="over" && this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div").length>0){  // Wenn der Link ein Submenü beinhaltet
				this.html_menu.getElementsByTagName("a")[i].onmouseover = this.itemOver;
				this.html_menu.getElementsByTagName("a")[i].onmouseout = this.itemOut;
				this.html_menu.getElementsByTagName("a")[i].className += " nextlevel";
				this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div")[0].onmouseover = this.drOver;
				this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div")[0].onmouseout = this.drOut;
				this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div")[0].style.display = "block";  // Das Submenü wird sichtbar gemacht (für die Breitenfeststellung nötig)
				this.setClassWidth(this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div")[0]);  // Breitenfeststellung und Setzung
			}
			else if(this.menu_event=="over" && this.linkOut){  // Wenn der Link kein Submenü beinhaltet
				this.html_menu.getElementsByTagName("a")[i].onmouseover = this.lwsmItemOver;
			}
			else if(this.menu_event=="click" && this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div").length>0){
				this.html_menu.getElementsByTagName("a")[i].onclick = this.itemOver;
				this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div")[0].style.display = "block";  // Das Submenü wird sichtbar gemacht (für die Breitenfeststellung nötig)
				this.setClassWidth(this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div")[0]);  // Breitenfeststellung und Setzung
			}
		}
		for(i=this.html_menu.getElementsByTagName("a").length-1; i>=0; i--){
			if(this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div").length>0){
				this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div")[0].style.display = "none";
				this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div")[0].style.width = this.html_menu.getElementsByTagName("a")[i].parentNode.getElementsByTagName("div")[0].zw_width
			}
		}
	}
	this.lwsmItemOver = function(){
		for(i=0; i<this.parentNode.parentNode.getElementsByTagName("div").length; i++){
			if(this.parentNode.parentNode.getElementsByTagName("div")[i].style.display == "block"){
				self.itemOutTime(this.parentNode.parentNode.getElementsByTagName("div")[i].parentNode.getElementsByTagName("a")[0]);
			}
		}
	}
	this.itemOver = function(){
		zw = true;
		for(i=0; i<this.parentNode.getElementsByTagName("div").length; i++){
			if(this.parentNode.getElementsByTagName("div")[i].style.display == "block"){
				zw=false;
				break;
			}
		}
		if(zw){		
			for(i=0; i<	self.active_items.length; i++){
				self.itemOutTime(self.active_items[i]);
			}
			old_items = self.active_items;
			self.active_items = new Array();
			for(zw=this;zw; zw=zw.parentNode.parentNode.parentNode.getElementsByTagName("a")[0]){
				if(!zw.parentNode.getElementsByTagName("div")[0]){
					zw=false;
					break;
				}
				zw.parentNode.getElementsByTagName("div")[0].style.display = "block";
				self.active_items[self.active_items.length] = zw;
				if(zw.parentNode.parentNode.id == self.menuid){
					zw=false;
					break;
				}
			}
		}
		this.parentNode.getElementsByTagName("div")[0].style.display = "block";
		if(self.show_parent_active){
			this.className = this.className + " hover";
		}
		if(old_items){
			for(i=0; i<old_items.length; i++){
				zw=false;
				for(j=0; j<self.active_items.length; j++){
					if(old_items[i].parentNode.innerHTML == self.active_items[j].parentNode.innerHTML){
						zw=true;
						break;
					}
				}
				if(!zw){
					self.itemOutTime(old_items[i]);
				}
			}
			old_items = false;
		}
		if(this.timeout){
			clearTimeout(this.timeout);
		}
	}
	this.drOver = function(){
		this.parentNode.getElementsByTagName("a")[0].onmouseover();
	}
	this.drOut = function(){
		this.parentNode.getElementsByTagName("a")[0].onmouseout();
	}
	this.itemOut = function(){
		this.timeout = setTimeout(function(a,b) { return function() { b.itemOutTime(a); } } (this,self), 300);
	}
	this.itemOutTime = function(object){
		object.parentNode.getElementsByTagName("div")[0].style.display = "none";
		object.className = object.className.replace(/hover/g, "");
	}
	this.setClassWidth = function(object){
		maxwidth = 0;
		for(j=0; j<object.childNodes.length; j++){
			if(object.childNodes[j].getElementsByTagName){
				if(object.childNodes[j].getElementsByTagName("a")[0].offsetWidth>maxwidth){
					maxwidth = object.childNodes[j].getElementsByTagName("a")[0].offsetWidth;
				}
			}
		}
		for(j=0; j<object.childNodes.length; j++){
			if(object.childNodes[j].getElementsByTagName){
				object.childNodes[j].getElementsByTagName("a")[0].style.width = (maxwidth - getCurrentStyle(object.childNodes[j].getElementsByTagName("a")[0], 'padding-left').replace(/px/, "") - getCurrentStyle(object.childNodes[j].getElementsByTagName("a")[0], 'padding-right').replace(/px/, "")) + "px";
				if(navigator.appVersion.indexOf("MSIE 5.5") != -1 || navigator.appVersion.indexOf("MSIE 5.0") != -1){
					object.childNodes[j].getElementsByTagName("a")[0].style.width = maxwidth;
				}
				if(object.childNodes[j].getElementsByTagName("div").length>0){
					object.childNodes[j].getElementsByTagName("div")[0].style.left = maxwidth + "px";
				}
			}
		}
		object.zw_width = maxwidth + "px";
		if(self.needIeSelectBoxBugFix){  // Nur für IE 5 bis 6
			zw_iframe = document.createElement("iframe");
			object.insertBefore(zw_iframe, object.firstChild);
			zw_iframe.style.position = "absolute";
			zw_iframe.style.filter = 'alpha(opacity=0)';
			zw_iframe.style.left = (getCurrentStyle(object, "border-left-width").replace(/px/g, "")*(-1)) + (getCurrentStyle(object, "padding-left").replace(/px/g, "")*(-1)) + "px";
			zw_iframe.style.top = (getCurrentStyle(object, "border-top-width").replace(/px/g, "")*(-1)) + (getCurrentStyle(object, "padding-top").replace(/px/g, "")*(-1)) + "px";
			zw_iframe.style.width = (object.zw_width.replace(/px/g, "")*1) + (getCurrentStyle(object, "border-left-width").replace(/px/g, "")*1) + (getCurrentStyle(object, "border-right-width").replace(/px/g, "")*1) + (getCurrentStyle(object, "padding-left").replace(/px/g, "")*1) + (getCurrentStyle(object, "padding-right").replace(/px/g, "")*1) + "px";
			zw_iframe.style.height = (object.offsetHeight*1) + (getCurrentStyle(object, "border-top-width").replace(/px/g, "")*1) + (getCurrentStyle(object, "border-bottom-width").replace(/px/g, "")*1) + (getCurrentStyle(object, "padding-top").replace(/px/g, "")*1) + (getCurrentStyle(object, "padding-bottom").replace(/px/g, "")*1) + "px";
		}
	}
}
function getCurrentStyle(obj, prop){  // Gibt den Wert des abgefragten CSS-Wertes zurück
	if(obj.currentStyle){
		if(obj.currentStyle.getAttribute(prop.replace(/\-/g, ""))){
			return obj.currentStyle.getAttribute(prop.replace(/\-/g, ""));
		}
		return "";
	}
	else if(document.defaultView && document.defaultView.getComputedStyle){
		if(document.defaultView.getComputedStyle(obj,"").getPropertyValue(prop)){
			return document.defaultView.getComputedStyle(obj,"").getPropertyValue(prop);
		}
		return "";
	}
	else if(window.getComputedStyle){
		if(window.getComputedStyle(obj,"").getPropertyValue(prop)){
			return window.getComputedStyle(obj,"").getPropertyValue(prop);
		}
		return "";
	}
	else{
		if(obj.style.getAttribute(prop.replace(/\-/g, ""))){
			return obj.style.getAttribute(prop.replace(/\-/g, ""));
		}
		return "";
	}
}