var $elm = function(elm, tag){
	if(typeof tag !== "undefined"){
		var elm = document.getElementById(elm).getElementsByTagName(tag);
	}else{
		var elm = document.getElementById(elm);
	}
	return elm;
}
var menu = {
	restore : {
		elements : {},
		start : function(){
			if($elm(menu.config.menuID) !== null){
				$elm(menu.config.targetID).removeChild($elm(menu.config.menuID));
			}
			if($elm(menu.config.submenuID) !== null){
				$elm(menu.config.targetID).removeChild($elm(menu.config.submenuID));
			}
			if($elm(menu.config.subsubmenuID) !== null){
				$elm(menu.config.targetID).removeChild($elm(menu.config.subsubmenuID));
			}
			for(key in menu.restore.elements){
				$elm(menu.config.targetID).appendChild(menu.restore.elements[key]);
			}
			menu.init();
		}
	},
	init : function(){
		var MMLinks = $elm("main-menu", "A");
		for (var key in MMLinks){
			if(typeof MMLinks[key].rel !== "undefined" && MMLinks[key].rel.length > 0){
				if(typeof MMLinks[key].className !== "undefined" && MMLinks[key].className === "aktiv"){
					$elm(menu.config.submenuID).activeMenuItem = MMLinks[key];
				}
				MMLinks[key].onmouseover = menu.menuHandler.MouseOverHandler;
				MMLinks[key].onmouseout = menu.menuHandler.MouseOutHandler;
			}else{
				MMLinks[key].onmouseover = menu.hideAllButtons.MouseOverHandler;
				MMLinks[key].onmouseout = menu.hideAllButtons.MouseOutHandler;
			}
		}
		if($elm(menu.config.menuID) !== null){
			menu.restore.elements.menu = $elm(menu.config.menuID).cloneNode(true);
		}
		if($elm(menu.config.submenuID) !== null){
			menu.restore.elements.submenu = $elm(menu.config.submenuID).cloneNode(true);
			// Hier noch das Submenü Initialisieren
			var rel = $elm(menu.config.submenuID).title;
			for (var key in $elm(menu.config.submenuID, "A")){
				if(typeof $elm(menu.config.submenuID, "A")[key].nodeName !== "undefined"){
					$elm(menu.config.submenuID, "A")[key].rel = menu.config.links[rel][parseFloat(key)+parseInt(1)].text;
					
					if(typeof menu.config.links[rel][parseFloat(key)+parseInt(1)].submenu !== "undefined"){
						$elm(menu.config.submenuID, "A")[key].submenu = menu.config.links[rel][parseFloat(key)+parseInt(1)].submenu;
					}
					$elm(menu.config.submenuID, "A")[key].onmouseover = menu.subMenuHandler.MouseOverHandler;
					$elm(menu.config.submenuID, "A")[key].onmouseout = menu.subMenuHandler.MouseOutHandler;
					if(typeof $elm(menu.config.submenuID, "A")[key].className !== "undefined" && $elm(menu.config.submenuID, "A")[key].className === "aktiv"){
						$elm(menu.config.submenuID).activeElement = $elm(menu.config.submenuID, "A")[key];	
					}
				}
			}
			$elm(menu.config.submenuID).onmouseout = menu.subMenuHandler.MouseOutHandler;
		}
		if($elm(menu.config.subsubmenuID) !== null){
			menu.restore.elements.subsubmenu = $elm(menu.config.subsubmenuID).cloneNode(true);
		}
		$elm(menu.config.targetID).onmouseout = menu.targetHandler.MouseOutHandler;
	},
	targetHandler : {
		MouseOutHandler : function(e){
			if(typeof e !== "undefined"){
				var t = e.relatedTarget;
			}else{
				var t = event.toElement;
			}
			if(typeof t.id !== "undefined"){
				if(t.id !== menu.config.menuID && t.id !== menu.config.submenuID && t.id !== menu.config.subsubmenuID && t.nodeName !== "A" && t.id !== "banner"){
					menu.restore.start();
				}
			}
		}
	},
	hideAllButtons : {
		MouseOutHandler : function(){
			menu.restore.start();
		},
		MouseOverHandler : function(){
			if($elm(menu.config.submenuID).activeMenuItem != null){
				$elm(menu.config.submenuID).activeMenuItem.setAttribute("class", "pop");
				$elm(menu.config.submenuID).activeMenuItem.setAttribute("className", "pop");
			}
			var parent = $elm(menu.config.targetID)
			var target = $elm(menu.config.submenuID);
			if(target !== null){ parent.removeChild(target); }
			target = $elm(menu.config.subsubmenuID);
			if(target !== null) { parent.removeChild(target); }
		}
	},
	menuHandler : {
		MouseOutHandler : function(e){
			if(typeof e !== "undefined"){
				var t = e.relatedTarget;
			}else{
				var t = event.toElement;
			}
			var parent = $elm(menu.config.targetID);
			var target = $elm(menu.config.submenuID);
			if(t.id !== menu.config.submenuID && t.nodeName !== "A" && t.id !== menu.config.targetID && t.id !== menu.config.menuID){
				menu.restore.start();
			}else{
				target.activeMenuItem = this;
				this.setAttribute("className", "aktiv");
				this.setAttribute("class", "aktiv");
			}
		},
		MouseOverHandler : function (){
			var parent = $elm(menu.config.targetID);
			var target = $elm(menu.config.submenuID);
			if(target !== null && typeof target.activeMenuItem !== "undefined"){
				target.activeMenuItem.setAttribute("className", "pop");
				target.activeMenuItem.setAttribute("class", "pop");
				parent.removeChild(target);
				target = $elm(menu.config.submenuID);
			}
			if(target === null || this.rel != target.title){
				var fragment = document.createDocumentFragment();
				var container = document.createElement("DIV");
				container.setAttribute("id", menu.config.submenuID);
				container.setAttribute("title", this.rel);
				fragment.appendChild(container);
				for (var key in menu.config.links[this.rel]){
					if(key !== "url" && key !== "name"){
						var subLink = document.createElement("A");
						subText = document.createTextNode(menu.config.links[this.rel][key].text);
						subLink.appendChild(subText);
						subLink.setAttribute("href", menu.config.URL + menu.config.links[this.rel][key].url);
						subLink.setAttribute("rel", menu.config.links[this.rel][key].text);
						if(typeof menu.config.links[this.rel][key].submenu !== "undefined"){
							subLink.submenu = menu.config.links[this.rel][key].submenu;
						}
						subLink.onmouseover = menu.subMenuHandler.MouseOverHandler;
						container.appendChild(subLink);
					}
				}
				container.onmouseout = menu.subMenuHandler.MouseOutHandler;
				if(target !== null){
					parent.removeChild(target);
				}
				if($elm(menu.config.subsubmenuID) !== null){
					$elm(menu.config.targetID).removeChild($elm(menu.config.subsubmenuID));
				}
				parent.appendChild(fragment);
			}
		}
	},
	subMenuHandler : {
		MouseOutHandler : function(e){
			if(typeof e !== "undefined"){
				var t = e.relatedTarget;
			}else{
				var t = event.toElement;
			}
			if(t.id !== menu.config.submenuID && t.parentNode.id !== menu.config.submenuID && this.title != t.rel && t.id !== menu.config.subsubmenuID && t.nodeName !== "A" && t.id !== menu.config.targetID && t.id !== menu.config.menuID){
				menu.restore.start();
			}
		},
		MouseOverHandler : function(){
			if(typeof $elm(menu.config.submenuID).activeElement !== "undefined"){
				$elm(menu.config.submenuID).activeElement.setAttribute("class", "");
				$elm(menu.config.submenuID).activeElement.setAttribute("className", "");
			}
			if(typeof this.submenu !== "undefined"){
				this.setAttribute("class", "aktiv");
				this.setAttribute("className", "aktiv");
			}
			$elm(menu.config.submenuID).activeElement = this;
			var parent = $elm(menu.config.targetID);
			var target = $elm(menu.config.subsubmenuID);
			if(target !== null){
				parent.removeChild(target)
			}
			target = $elm(menu.config.subsubmenuID);
			if(target === null && typeof this.submenu !== "undefined"){
				var fragment = document.createDocumentFragment();
				var container = document.createElement("DIV");
				container.setAttribute("id", menu.config.subsubmenuID);
				container.setAttribute("title", this.rel);
				for (var key in this.submenu){
					var subLink = document.createElement("A");
					subText = document.createTextNode(this.submenu[key].text);
					subLink.appendChild(subText);
					subLink.setAttribute("href", menu.config.URL + this.submenu[key].url);
					container.appendChild(subLink);
				}
				container.onmouseout = menu.subSubMenuHandler.MouseOutHandler;
				if(target !== null){
					parent.removeChild(target);
				}
				parent.appendChild(container);
			}
		}
	},
	subSubMenuHandler : {
		MouseOutHandler : function(e){
			if(typeof e !== "undefined"){
				var t = e.relatedTarget;
			}else{
				var t = event.toElement;
			}
			if(t.nodeName !== "A" && t.id !== menu.config.subsubmenuID && t.id !== menu.config.submenuID && t.id !== menu.config.targetID){
				var parent = $elm(menu.config.targetID);
				var target = $elm(menu.config.subsubmenuID);
				parent.removeChild(target);
				if(typeof $elm(menu.config.submenuID).activeElement !== "undefined"){
					$elm(menu.config.submenuID).activeElement.setAttribute("class", "");
					$elm(menu.config.submenuID).activeElement.setAttribute("className", "");
				}
				if(t.id !== menu.config.submenuID){
					menu.restore.start();
				}
			}
		}
	}
}

