
// entfernt Leerzeichen von einem Strin am Anfang + Ende
String.prototype.trim=function(){
    return this.replace(/^\s*|\s*$/g,'');
}
// ist Zeichen letztes Zeichen? Bolean
String.prototype.endsWith = function(s){
	var reg = new RegExp(s + "$");
	return reg.test(this);
}

// sucht zu angegebenen Meta-Tag Namen den Wert
// Aufruf: string Meta-Tag Name (z.B. "main-nav" für "<meta name="main-nav" content="Gebit" />"
// Rückgabe: array Meta-Tag Wert(e) (z.B. "Gebit")
// ist der Name mehrfach vorhanden, werden die Werte als Array zurück gegeben
function get_meta_tag_value (meta_name) {
	// Browserweiche für DOM
	var metaElements = document.all ? document.all.tags('meta') : document.getElementsByTagName ? document.getElementsByTagName ('meta') : new Array();
	var metaKeywords = new Array();
	var i = 0;
	for (var m = 0; m < metaElements.length; m++) {
		if (metaElements[m].name == meta_name) 
		  metaKeywords[i++] = metaElements[m].content.trim(); // inkl. Entfernung von Leerzeichen 
	}
	return metaKeywords;
}


// setzt Eintrag der Sub-Navigation auf "current"
// ist Eintrag ein "ul-child", wird auch der "li-parent"-Eintrag auf current gesetzt
// es wird href im li-Link mit location.href verglichen, Übergeordnete Priorität hat Eintrag im Meta-Tag
// Eintrag im Meta-Tag "<meta name="sub-nav" content="n|href" />" als absolute Listennummer oder Link
function set_subnav_current() {
	// Variablen
	var meta_tag_current = "nav-sub"; 	// z.B. <meta name="nav-sub" content="" />
	var id_nav_ul = "nav_ul_parent"; // id der Hauptliste (parent)
	var current_classname = "current"; // css-klasse für "ich bin hier"
	var meta_tag_current_int = false; // meta-tag wert bei Int
	var meta_tag_current_href = false; // meta-tag wert bei Href
	var index_filename = "index.php"; // Indexname lt. Apache
	
	var meta_tag_unfold = "nav-sub-unfold"; 	// z.B. <meta name="nav-sub-unfold" content="" />
	subnav_unfold = typeof subnav_unfold == 'undefined' ? null : subnav_unfold;	// globale Variable für ein und ausgeklappt; NULL bei erstem Aufruf

	display_unfold = false;
	if (document.getElementById)
		if (document.getElementById("displayunfold")) display_unfold = document.getElementById("displayunfold"); // Anzeige der Faltung, globale Variable	
	
	var debug_out = ""; // Debug-Container für Return
	debug_out += "set_subnav_current:\n\n";
	
	// Prüfe Meta-Tag Current Value: nimm erstes Element => nicht vorhanden = false
	var meta_tag_current_value = get_meta_tag_value(meta_tag_current)[0] == "" ||  get_meta_tag_value(meta_tag_current)[0] == undefined ? false : get_meta_tag_value(meta_tag_current)[0];
	// Wandle Meta-Tag Value in Zahl um, wenn möglich
	if(meta_tag_current_value) { // Meta-Tag Value vorhanden?
		if (!isNaN(parseInt(meta_tag_current_value))) { // Meta-Tag Value eine Zahl?
			meta_tag_current_int = Number(meta_tag_current_value); // Ja
		} else {
			meta_tag_current_href = meta_tag_current_value; // nein, href
		}
	}
	debug_out += "meta_tag_current_value: "+meta_tag_current_value+"\n";
	
	// Prüfe Meta-Tag Unfold Value: nimm erstes Element => nicht vorhanden = false
	// Prüfung nur beim ertsten Scriptaufruf, wenn subnav_unfold == null
	if (subnav_unfold == null) {
		debug_out += "subnav_unfold: NULL\n";
		debug_out += "meta_tag_unfold: "+get_meta_tag_value(meta_tag_unfold)[0]+"\n"; 
		//var meta_tag_unfold_value = get_meta_tag_value(meta_tag_unfold)[0] == "" ||  get_meta_tag_value(meta_tag_unfold)[0] == undefined ? false : get_meta_tag_value(meta_tag_unfold)[0];
		subnav_unfold = (get_meta_tag_value(meta_tag_unfold)[0] == "" ||  get_meta_tag_value(meta_tag_unfold)[0] == undefined) ? false : true;

	}
	
	//debug_out += "meta_tag_unfold_value: "+meta_tag_unfold_value+"\n";
	debug_out += "subnav_unfold Ziel: "+subnav_unfold+"\n";		
	
	// DOM zur Liste und deren Elemente	
	var nav_ul_parent = document.getElementById('nav_ul_parent'); // oberste ul-Liste
	var nav_ul_items = nav_ul_parent.getElementsByTagName("li"); // alle Elemente der ul-Liste inkl. Elemente Unterliste

// Ausführen, wenn Zahl angegeben wurde (meta_tag_current_int)
	if (meta_tag_current_int) {
		debug_out += "meta_tag_current_int: "+meta_tag_current_int+"\n";
		var li_pos = meta_tag_current_int - 1; // an welcher Schleifenposition ist li für current
		
		for (var i = 0; i < nav_ul_items.length; i++) { // gehe durch alle Elemente ul-Liste (parent)
			// alle ul-child ausblenden
			if(nav_ul_items[i].getElementsByTagName("ul").length > 0) {
				if(!subnav_unfold) { // wenn subnav_unfold gesetzt (!=false) dann lass alle ausgefaltet ansonnsten einfalten
					var ul_parent_li = nav_ul_items[i].getElementsByTagName("ul")[0];
					ul_parent_li.style.display = 'none'
				}
			}
					
			if (i == li_pos) { // ist Linkposition erreicht?
				debug_out += "i: "+i+"\n";
				var nav_ul_a_items = nav_ul_items[i].getElementsByTagName("a"); // Array mit a-Tags
				nav_ul_a_items[0].className = current_classname; 								// ja, markiere Current ul-li-a (parent) oder ul-li-ul-li-a (child)
				if (nav_ul_items[i].getElementsByTagName("ul").length > 0) {		// nav_ul_a_items[0] ist Haupteintrag mit Unterliste? => ja
					debug_out += "Child-UL vorhanden\n";
					if(!subnav_unfold) { // wenn subnav_unfold gesetzt (!=false) dann lass alle ausgefaltet ansonnsten einfalten
						var ul_parent_li = nav_ul_items[i].getElementsByTagName("ul")[0];
						ul_parent_li.style.display = 'block'
					}
				}				
				if (nav_ul_items[i].parentNode.parentNode.tagName.toUpperCase() == 'LI') { // Parent vorhanden
					debug_out += "Parent-LI vorhanden\n";
					var nav_ul_parent_a_items = nav_ul_items[i].parentNode.parentNode.getElementsByTagName("a"); // Array mit a-Tags
					nav_ul_parent_a_items[0].className = current_classname; // ja, markiere Current ul-li-a
					// letztes child-ul wieder sichtbar machen
					if(!subnav_unfold) { // wenn subnav_unfold gesetzt (!=false) dann lass alle ausgefaltet ansonnsten einfalten
						ul_parent_li.style.display = 'block'
					}					
				}
			}
		} // end for
// Ausführen, wenn HREF angegeben wurde oder direkter Vergleich zu Link( HREF) in Liste		
	} else {  // end if meta_tag_current_int
		debug_out += "meta_tag_current_href: "+meta_tag_current_href+"\n";
		var href_compare; // Vergleichsstring für Suche in Links

		// to do: Port abfangen!
		if (meta_tag_current_href) {
			href_compare = "http://"+window.location.hostname+meta_tag_current_href;
			debug_out += "href aus Meta-Tag\n"
		} else {
			href_compare = document.location.href.endsWith('/') ? document.location.href+index_filename : document.location.href;
			debug_out += "href aus href\n"
		}
		debug_out += "href_compare: "+href_compare+"\n";

		for (var i = 0; i < nav_ul_items.length; i++) { // gehe durch alle Elemente ul-Liste (parent)
			// alle ul-child ausblenden
			if (nav_ul_items[i].getElementsByTagName("ul").length > 0) {
				if(!subnav_unfold) { // wenn subnav_unfold gesetzt (!=false) dann lass alle ausgefaltet ansonnsten einfalten
					var ul_parent_li = nav_ul_items[i].getElementsByTagName("ul")[0];
					ul_parent_li.style.display = 'none'
				}
			}

			var nav_ul_a_items = nav_ul_items[i].getElementsByTagName("a"); 				// Array mit a-Tags		
			if (nav_ul_a_items[0].href.toLowerCase() == href_compare.toLowerCase()) { // ist Linkposition erreicht?
				debug_out += "Linkposition i: "+i+"\n";
				nav_ul_a_items[0].className = current_classname; 												// ja, markiere Current ul-li-a (parent) oder ul-li-ul-li-a (child)
				if (nav_ul_items[i].getElementsByTagName("ul").length > 0) {						// nav_ul_a_items[0] ist Haupteintrag mit Unterliste? => ja
					debug_out += "Child-UL vorhanden\n";
					if(!subnav_unfold) { // wenn subnav_unfold gesetzt (!=false) dann lass alle ausgefaltet ansonnsten einfalten
						var ul_parent_li = nav_ul_items[i].getElementsByTagName("ul")[0];
						ul_parent_li.style.display = 'block'
					}
				}
				if (nav_ul_items[i].parentNode.parentNode.tagName.toUpperCase() == 'LI') { // Parent vorhanden? 
					debug_out += "Parent-LI vorhanden\n";
					var nav_ul_parent_a_items = nav_ul_items[i].parentNode.parentNode.getElementsByTagName("a"); // Array mit a-Tags
					nav_ul_parent_a_items[0].className = current_classname; // ja, markiere Current ul-li-a
					// letztes child-ul wieder sichtbar machen
					if(!subnav_unfold) { // wenn subnav_unfold gesetzt (!=false) dann lass alle ausgefaltet ansonnsten einfalten
						ul_parent_li.style.display = 'block'
					}		
				}
			}
		} // end for		
	} // end if else meta_tag_current_int
	
	// Aktueller Status
	// Anzeige für Wechsel
	if (display_unfold) display_unfold.innerHTML = subnav_unfold == false ? 'ausklappen [+]' : 'einklappen [-]'; // subnav_unfold = false dann ist eingeklappt dann ausklappen
	debug_out += "subnav_unfold Status: "+subnav_unfold+"\n";
		
	debug_out += "end: o.k.";
	return(debug_out);
	
}

function set_subnav_foldinout() {
	var debug_out = ""; // Debug-Container für Return
	debug_out += "set_subnav_foldinout:\n\n";
	
	debug_out += "subnav_unfold Status: "+subnav_unfold+"\n";
	
	if (subnav_unfold == false) {   // false => alles ist eingefaltet => alles ausfalten
		debug_out += "alles ausfalten...: \n";
		subnav_unfold = true;
		debug_out += "subnav_unfold Ziel: "+subnav_unfold+"\n";		
		// DOM zur Liste und deren Elemente	
		var nav_ul_parent = document.getElementById('nav_ul_parent'); // oberste ul-Liste
		var nav_ul_items = nav_ul_parent.getElementsByTagName("li"); // alle Elemente der ul-Liste inkl. Elemente Unterliste
	  for(var i=0; i < nav_ul_items.length; i++){
	    if(nav_ul_items[i].getElementsByTagName("ul").length > 0) {
				var ul_parent_li = nav_ul_items[i].getElementsByTagName("ul")[0];
				ul_parent_li.style.display = 'block'
			}
		} // end for	
	// Anzeige für Wechsel	
	if (display_unfold) display_unfold.innerHTML = 'einklappen [-]'; // subnav_unfold = false dann ist eingeklappt dann ausklappen
			
	} else { // true => alles ist ausgefaltet => alles einfalten
		debug_out += "alles einfalten...: \n";
		subnav_unfold = false;
		debug_out += "subnav_unfold Ziel: "+subnav_unfold+"\n";				
		debug_out += "set_subnav_current() aufrufen: \n";		
		set_subnav_current();
	}
	
	debug_out += "end: o.k.";
	return(debug_out);
}