/*
 * nötige Events binden, wenn DOM ready
 ***************************************/
var over_me2 = false; // TODO: Check, ob die Maus gerade auf einen Hauptmenupunkt (me2) zeigt, dann nicht ausblenden
var over_me3 = false;
var over_me4 = false;
jQuery(document).ready(function() {
	
	// Mausover über alle Hauptmenupunkte (Ebene2) registrieren
	
	jQuery(".topBox a.mainnavLink").bind("mouseover",function(e){
		over_me2 = true;
		// alle möglichen Menuboxen zu Ebene3/4 ausblenden
		jQuery("div[id^='me3_']").hide();
		jQuery("div[id^='me4_']").hide();
		// herausfinden, welcher Hauptmenulink gehovert wurde (via ID)
		var e2id = jQuery(this).attr("id");
		var e2pos = jQuery(this).attr("id").replace(/e2_/g, "");
		// String mit Links zu Ebene 3 erzeugen 
		if ((typeof(menu[e2pos].Childs) == undefined) || (menu[e2pos].Childs.length <= 0)) {
			return false;
		}
		var ebene3 = '<ul>';
		for (e3pos in menu[e2pos].Childs){
			if (typeof(menu[e2pos].Childs[e3pos].Childs) != undefined){
				if (menu[e2pos].Childs[e3pos].Childs.length > 0)
					ebene3 += '<li><a id="me3_'+e2pos+'_me4_'+e3pos+'" class="hasChilds" href="./'+menu[e2pos].Childs[e3pos].URL+'">'+menu[e2pos].Childs[e3pos].Title+'</a></li>';
				else
					ebene3 += '<li><a id="me3_'+e2pos+'_me4_'+e3pos+'" href="./'+menu[e2pos].Childs[e3pos].URL+'">'+menu[e2pos].Childs[e3pos].Title+'</a></li>';
			}
			else
				ebene3 += '<li><a id="me3_'+e2pos+'_me4_'+e3pos+'" href="./'+menu[e2pos].Childs[e3pos].URL+'">'+menu[e2pos].Childs[e3pos].Title+'</a></li>';
		}
		ebene3 +='</ul>';
		// me3 mit Linkstring füllen und anzeigen
		jQuery("#me3_"+e2pos).remove();
		jQuery("body").append('<div id="me3_'+e2pos+'" class="hidden me3"></div>');
		jQuery("#me3_"+e2pos).html(ebene3);
		
		// jeden Eintrag in der Menubox um 20px breiter machen, damit es keine Stylingprobleme mit dem Pfeil gibt
		//alert(jQuery("div[id^='me3_._me4_.']").width());
		 document.getElementById('me3_'+e2pos).style.width = jQuery("#me3_"+e2pos).width()+20+'px';

		// Position der Menubox setzen
		if (jQuery.browser.msie)
			jQuery("#me3_"+e2pos).css({'top' : jQuery("#"+e2id).offset().top+24, 'left' : jQuery(".topBox .mainnavLink:eq("+e2pos+")").offset().left});
		else
			jQuery("#me3_"+e2pos).css({'top' : jQuery("#"+e2id).offset().top+21, 'left' : jQuery(".topBox .mainnavLink:eq("+e2pos+")").offset().left});
		
    
		// Menubox dieser Ebene letztendlich einblenden
		jQuery("#me3_"+e2pos).show();
		
		
		// Hier nun Callbacks auf Sublinks in der gerade generierten Menubox erstellen
		jQuery(".me3 ul li a").bind("mouseover",function(e){
			// herausfinden, welcher Submenulink gehovert wurde (via ID)
			var e3pos = jQuery(this).attr("id").replace(/me3_._me4_/g, "");
			
			var show = true;
			var ebene4 = '<ul>';
			if(typeof (menu[e2pos].Childs[e3pos].Childs) != undefined){ // kommen überhaupt Unterseiten vor?
				// String mit Links zu Ebene 4 erzeugen 
				for (var e4pos in menu[e2pos].Childs[e3pos].Childs)
					ebene4 += '<li><a href="./'+menu[e2pos].Childs[e3pos].Childs[e4pos].URL+'">'+menu[e2pos].Childs[e3pos].Childs[e4pos].Title+'</a></li>';
			}
			else
				show = false;
			ebene4 +='</ul>';
			
			if (show == true){
				jQuery("div[id^='me4_']").remove();
				
				jQuery("body").append('<div id="me4_'+e3pos+'" class="hidden me4"></div>');
				jQuery("#me4_"+e3pos).html(ebene4);
				
				
				// Position der Menubox setzen
				e2top = document.getElementById("me3_"+e2pos).offsetTop; // sel. hauptmenupunkt abstand nach oben
				e3top = document.getElementById("me3_"+e2pos+"_me4_"+e3pos).offsetTop // sel. submenupunkt abstand nach oben
				e4topPos = e2top + e3top; // Y-Position für die neue Subsubmenu Box 
				
				e2left = document.getElementById("me3_"+e2pos).offsetLeft; // Abstand der Box des Submenus zum linken Screenrand
				e2width = jQuery("#me3_"+e2pos).width(); // Breite des Submenus
				e4leftPos = e2left + e2width +1; // X-Position für die neue Subsubmenu Box
				
				jQuery("#me4_"+e3pos).css({'top' : e4topPos+'px', 'left' : e4leftPos});
				// anzeigen
				jQuery("#me4_"+e3pos).show();
				
				// Hover Eigenschaften | aus- / einblenden je nach Mauscursorstatus
				// TODO: Verbessern: Wenn die Maus schnell hin und herwechselt, funktioniert das noch nicht immer... evtl. bessere Lösung als setTimeout finden
				over_me2 = false;
				over_me3 = true;
				over_me4 = false;
				
				/*jQuery(".topBox a").mouseenter(function(e){
					over_me2 = true;
					over_me3 = false;
					over_me4 = false;
				});*/
				
				jQuery("div[id^='me3_']").mouseenter(function(e){
					over_me2 = false;
					over_me3 = true;
					over_me4 = false;
				});
				
				jQuery("div[id^='me4_']").mouseenter(function(e){
					over_me2 = false;
					over_me3 = false;
					over_me4 = true;
				});
				
				jQuery(".topBox a").mouseleave(function(e){
					over_me2 = false;
					// hier nach 1 Sekunde das nachfolgende checken:
					setTimeout("if(over_me3 == false && over_me4 == false){ if(over_me2 == false && over_me3 == false && over_me4 == false){jQuery(\"div[id^='me3_']\").hide(); jQuery(\"div[id^='me4_']\").hide();}};",1000);	
				});

				
				jQuery("div[id^='me3_']").mouseleave(function(e){
					over_me3 = false;
					// hier nach 1 Sekunde das nachfolgende checken:
					setTimeout("if(over_me4 == false){ if(over_me2 == false && over_me3 == false && over_me4 == false){jQuery(\"div[id^='me3_']\").hide(); jQuery(\"div[id^='me4_']\").hide();}};",1000);	
				});
				
				jQuery("div[id^='me4_']").mouseleave(function(e){
					over_me4 = false;
					// hier nach 1 Sekunde das nachfolgende checken:
					setTimeout("if(over_me3 == false){ if(over_me2 == false && over_me3 == false && over_me4 == false){ jQuery(\"div[id^='me3_']\").hide(); jQuery(\"div[id^='me4_']\").hide();}};",1000);	
				});
				// Ende Hover Eigenschaften
				
			}
		});
						
	});
	
	// Evtl. bei Ebene 4 noch eine Mindestbreite setzen
	
	// Falls Maus .iecenterWrapper verlässt und auf keiner Box mehr selbst sitzt, Boxen ausblenden
	/*jQuery(".iecenterWrapper").click(function(){
		jQuery("div[id^='me3_']").hide();
		jQuery("div[id^='me4_']").hide();
		//TODO: Evtl. weitere Fälle ergänzen, wann ausgeblendet werden soll 
		// Timeout wäre praktisch (2s)
	});*/
	
});

