prefix = "";

data = {
	title:"-",
	entrys: [
			{	
				title:"Home", width:37, href:prefix+"/index.htm"
			},
			 {
			title:"Produkte", width:57, href:prefix+"/wasseraufbereitung.htm",
			entrys: [
				{title: "Chlor",width: 35, href:prefix+"/wasseraufbereitung/chlor.htm"},
				{title: "SB-Chemikalien",width: 84, href:prefix+"/wasseraufbereitung/sb_chemikalien.htm"},
				{title: "Flockungsmittel",width: 84, href:prefix+"/wasseraufbereitung/flockungsmittel.htm"},
				{title: "Filtermaterial",width: 80, href:prefix+"/wasseraufbereitung/filtermaterialien.htm"},
				{title: "Aktivkohle",width: 62, href:prefix+"/wasseraufbereitung/aktivkohle.htm"},
				{title: "Reinigungsmittel", width:90, href:prefix+"/reinigungsmittel.htm"}
			]
		},
		{
			title:"Chlor-Notfallausrüstung", width:140, href:prefix+"/notfallausruestung.htm",
			entrys: [
				{title: "Chlor mit Sicherheit",width: 140, href:prefix+"/media/pdf/sbf_chlor_mit_sicherheit.pdf"},
				{title: "Bergungsbehälter",width: 110, href:prefix+"/media/pdf/sbf_bergungsbehaelter.pdf"},
				{title: "Leckage 50kg",width: 90, href:prefix+"/media/pdf/sbf_leckage_ventilbereich_50kg.pdf"},
				{title: "Leckage 65kg",width: 90, href:prefix+"/media/pdf/sbf_leckage_ventilbereich_65kg.pdf"},
				{title: "Leckage Behälterwand",width: 130, href:prefix+"/media/pdf/sbf_leckage_behaelterwand.pdf"}
			]
		},
		{
			title:"SBF Service", width:70, href:prefix+"/service.htm",
			entrys: [
				{title: "Ansprechpartner",width: 90, href:prefix+"/service/ansprechpartner.htm"},
				{title: "SBF Infoservice",width: 90, href:prefix+"/service/infoservice.htm"},
				{title: "Richtlinien & Kennzeichnungen",width: 160, href:prefix+"/service/richtlinien.htm"},
				{title: "Fortbildungsveranstaltungen",width: 155, href:prefix+"/service/fortbildung.htm"},
				{title: "Presse",width: 35, href:prefix+"/service/presse.htm"}
			]
		},
		{title:"Links", width:36, href:prefix+"/links.htm"},
		{title:"Kontakt", width:50, href:prefix+"/kontakt.htm"}
	]
}



function Menu(rootNode, data) {
	// Count the active submenues
	this.subMenueActive = 0;
	this.defaultsub = null;

	/* 
	 * Build the root menu
	 */
	var menu = this.entrys(data, 0, this);
	rootNode.appendChild(menu);


	// IE Visibility Bugfix
	defaultsubClone = this.defaultsub;
	setTimeout(
		function() {
			if(defaultsubClone) {
				defaultsubClone.show(-1);
				defaultsubClone.show(1);
				defaultsubClone.showHide();
			}
		}, 1
	);

}

Menu.prototype.subMenueShown = function() {
	this.subMenueActive++;
	if(this.subMenueActive == 1 && this.defaultsub) {
		this.defaultsub.show(-1);
	}
}

Menu.prototype.subMenueHidden = function() {
	this.subMenueActive--;
	if(this.subMenueActive == 0 && this.defaultsub) {
		this.defaultsub.show(1);
	}
}

Menu.prototype.registerDefaultSubMenue = function(div) {
	this.defaultsub = div;
	this.defaultsub.show(1);
}


Menu.prototype.entrys= function(data, level, controller) {
	// each level has diffrent css classes
	var cssClassPrefix = "L"+level;

	var leveldiv = document.createElement("div");

	// Count how many items want us to be visible
	leveldiv.locks = 0;
	if(level==0) {
		// The root should be visible by default
		leveldiv.locks++;
	} 
	
	
	/*
	 * store where to notify if this div is shown/hidden
	 * root does not notify anyone cause its shown all the time
	 */
	if(level != 0) {
		leveldiv.controller = controller;
	}
	
	
	leveldiv.show = function(posneg) {
		this.locks += posneg;
		if(this.locks == 1) {
			if(this.controller && (this.controller.defaultsub != this)) {
				this.controller.subMenueShown();
			}
		}
		if(this.locks == 0) {
			if(this.controller && (this.controller.defaultsub != this)) {
				this.controller.subMenueHidden();
			};
		}
		this.showHide();
	}
	
	
	leveldiv.showHide = function() {
		// Check how many items want us to be shown
		if(this.locks > 0) {
			// set visible
			this.style.visibility = "visible";
			if(this.dummy) this.dummy.style.visibility = "visible";
		} else {
			this.style.visibility = "hidden";
			if(this.dummy) this.dummy.style.visibility = "hidden";
		}
	}


	// left border (
	leftBorder = document.createElement("div");
	leftBorder.className = cssClassPrefix +"BorderLeft";
	leveldiv.appendChild(leftBorder);
	leftBorder.parent = leveldiv;
	leftBorder.onmouseover = function() {this.parent.show(+1)};
	leftBorder.onmouseout = function() {this.parent.show(-1)};
	var left = 5;

	// the entrys
	for(var i=0; i<data.entrys.length; i++) {
		var entry = data.entrys[i];
		
		// Text
		var innerdiv = document.createElement("div");
		var text = document.createTextNode(entry.title);
		innerdiv.appendChild(text);
		innerdiv.className = cssClassPrefix +"EntryText";

		// Entrys div
		var div = document.createElement("div");
		div.style.width = entry.width+"px";
		div.appendChild(innerdiv);
		div.className = cssClassPrefix +"Entry";
		leveldiv.appendChild(div);
				
		// The eventhanlders
		div.parent = leveldiv;
		div.onmouseover = function() {
			// show our submenue if we got one
			if(this.submenu) {
				this.submenu.show(1); 
			}
			// we want our parent to be shown
			this.parent.show(1); 
		};
		div.onmouseout = function() {
			if(this.submenu) {
				this.submenu.show(-1); 
			}
			this.parent.show(-1);
		};	
		if(entry.href) {
			div.href = entry.href;
			div.onclick = function() {
				document.location = this.href;
			}
		}


		// Build the submenu if we got one
		if(entry.entrys) {
			var submenu = this.entrys(entry, level+1, controller);
			submenu.className = "subMenuDiv";

			// align it
			if(entry.right) {
				submenu.style.right = entry.right +"px";
			} else {
				submenu.style.left = 0 +"px";
			}
			leveldiv.appendChild(submenu);
			
			// build the dummy
			var dummy = document.createElement("div");
			dummy.style.width = entry.width+1 +"px";
			dummy.style.left = left -1 +"px";
			dummy.className = "dummy";
			dummy.parent = submenu;
			dummy.onmouseover = function() {
				// dummy wants submenue to be shown
				this.parent.show(1);
			}
			dummy.onmouseout = function() {
				this.parent.show(-1);
			}

			
			leveldiv.appendChild(dummy);
			submenu.dummy = dummy;			
			div.submenu = submenu;
			submenu.showHide();
		}
		left += entry.width;


		if(document.location.pathname == entry.href) {
			if(div.submenu) {
				controller.registerDefaultSubMenue(div.submenu);
			} else {
				controller.registerDefaultSubMenue(leveldiv);
			}
			
			innerdiv.className = cssClassPrefix +"EntryTextActive";
		}

		
		/*
		 * The | between 2 entries
		 */
		if(i < data.entrys.length-1) {
			var seperator = document.createElement("div");
			seperator.className = cssClassPrefix +"Seperator";
			leveldiv.appendChild(seperator);
			left += 2;
			seperator.parent = leveldiv;
			seperator.onmouseover = function() {this.parent.show(+1)};
			seperator.onmouseout = function() {this.parent.show(-1)};
		}
	};
	
	
	/* 
	 * right border
	 */
	var rightBorder = document.createElement("div");
	rightBorder.className = cssClassPrefix +"BorderRight";
	rightBorder.parent = leveldiv;
	rightBorder.onmouseover = function() {this.parent.show(+1)};
	rightBorder.onmouseout = function() {this.parent.show(-1)};


	leveldiv.appendChild(rightBorder);
	left += 7;

	leveldiv.style.width = left;	
	leveldiv.showHide();
	return leveldiv;
}
