// JavaScript Document


/******************************** JavaScripts fuer Menues ********************************/
//Korrigiert Anzeigefehler in den einzelnen Browser

var currentEl = "";
var elLI;
var prevSibl = null; 
var nextSibl = null;	

//Fragt ab ob "class" oder "className" verwendet werden soll
function checkClassName() 
{
	if (document.getElementById("metanav").getAttribute("className") == null)
		N_class = "class";
	else
		N_class = "className";
	
	return N_class;
}

//Haengt Pfeil an letztem Element an, fuer die Browser die kein :last-Child kennen
function lastArrow(elLI) 
{
	var N_class = checkClassName();
	var elLast  = elLI[elLI.length - 1];
	elClass = elLast.getAttribute(N_class);
	if (elClass == null)
		elLast.setAttribute(N_class,"lastElement");
	else
		elLast.setAttribute(N_class, elClass + " lastElement");
}

//Überprüft ob der Classname: nohover vorhanden ist, und wenn ja, wird er gelöscht (bei ein- und mehreren Klassennamen)
function delClass(El, clname) 
{
	var N_class = checkClassName();
	if (El.getAttribute(N_class) != null && El.getAttribute(N_class).search(clname) != -1) 
	{
		if (El.getAttribute(N_class).search(clname) != 0) 
			ElClass = El.getAttribute(N_class).substr(0, El.getAttribute(N_class).search(clname) - 1);
		else 
			ElClass = El.getAttribute(N_class).substr(0, El.getAttribute(N_class).search(clname));
		
		El.setAttribute(N_class,ElClass);
	}
}

function checkNextSibling(El) 
{
	if (El != elLI[elLI.length-1]) // Abfrage für IE Explorer
	{
		if (El.nextSibling.nodeName == "LI")
			var nextSibl = El.nextSibling; //IE Explorer
		else
			var nextSibl = El.nextSibling.nextSibling;
	}
	return nextSibl;
}

function checkPrevSibling(El) 
{
	if (El != elLI[0]) // Abfrage für IE Explorer
	{
		if (El.previousSibling.nodeName == "LI")
			var prevSibl = El.previousSibling; //IE Explorer
		else
			var prevSibl = El.previousSibling.previousSibling;
	}
	return prevSibl;
}

function checkClass(El) 
{
	var N_class = checkClassName();
	var ElAttr  = El.parentNode.getAttribute(N_class);
		
	var nextSibl = checkNextSibling(El.parentNode);
	var prevSibl = checkPrevSibling(El.parentNode);
		
	
	//Wenn der nächste Knoten aktiv ist, rechter Knoten
	if (nextSibl != null && nextSibl.nodeName == "LI" && nextSibl.getAttribute(N_class) != null && nextSibl.getAttribute(N_class).search(/current_page_item/) != - 1)
	{
		if (nextSibl.getAttribute(N_class).search(/rihoveract/) != -1) 
		{
			delClass(El.parentNode, /nohover/);//Wenn vorhanden die "nohover" Klasse löschen
			
			ElClass = nextSibl.getAttribute(N_class).substr(0, nextSibl.getAttribute(N_class).search(/rihoveract/) - 1);
			nextSibl.setAttribute(N_class,ElClass);
		}
		
	}
	//Wenn der vorige Knoten aktiv ist, linker Knoten
	else if (prevSibl != null && prevSibl.nodeName == "LI" && prevSibl.getAttribute(N_class) != null && prevSibl.getAttribute(N_class).search(/current_page_item/) != - 1)
	{
		
		if (ElAttr.search(/lihoveract/) != -1) 
		{
			delClass(El.parentNode, /nohover/);//Wenn vorhanden die "nohover" Klasse löschen
			
			ElClass = ElAttr.substr(0, ElAttr.search(/lihoveract/));
			El.parentNode.setAttribute(N_class,ElClass);
		}
		
	}
	else
	{
		delClass(El.parentNode, /nohover/); //die Klasse "nohover" wird wieder gelöscht
	}
}

//Verhindert das beim Ueberfahren der Listenpunkte (ohne A-Tag) eine Hoveraktion stattfindet
function M_dontchange(e) 
{
	var N_class = checkClassName();
	var ElClass = "";
	
	if (this.nodeName == "A") 
	{
		currentEl = "A";
		
		var nextSibl = checkNextSibling(this.parentNode);
		var prevSibl = checkPrevSibling(this.parentNode);
			
		//naechster, rechter Knoten
	
		if (nextSibl != null && nextSibl.getAttribute(N_class) != null && nextSibl.nodeName == "LI" && nextSibl.getAttribute(N_class).search(/current_page_item/) != - 1 && nextSibl.getAttribute(N_class).search(/hoveract/) == - 1)
		{	
			delClass(this.parentNode, /nohover/);//Wenn vorhanden die "nohover" Klasse loeschen
		
			ElClass += nextSibl.getAttribute(N_class) + " ";
			ElClass += "rihoveract";
			nextSibl.setAttribute(N_class,ElClass);
		}
		
		//letzter, linker Knoten
		else if (prevSibl != null && prevSibl.getAttribute(N_class) != null && prevSibl.nodeName == "LI" && prevSibl.getAttribute(N_class).search(/current_page_item/) != - 1)
		{
			delClass(this.parentNode, /nohover/);//Wenn vorhanden die "nohover" Klasse loeschen
			
			if (this.parentNode.getAttribute(N_class) == null)
			{
			  ElClass = "lihoveract";
			  this.parentNode.setAttribute(N_class,ElClass);
			}
			else if (this.parentNode.getAttribute(N_class) != null && this.parentNode.getAttribute(N_class).search(/hoveract/) == -1)
			{
			  ElClass += this.parentNode.getAttribute(N_class) + " ";
			  ElClass += "lihoveract";
			  this.parentNode.setAttribute(N_class,ElClass);
			}
		}
		else
			checkClass(this);
	}
	else if (this.nodeName == "LI")
	{	
		if (currentEl != "A")
		{		
			var nextSibl = checkNextSibling(this);
			var prevSibl = checkPrevSibling(this);
			
			if (this.getAttribute(N_class) != null && this.getAttribute(N_class).search(/nohover/) == -1)
			{
				ElClass += this.getAttribute(N_class) + " ";
				ElClass += "nohover";
				this.setAttribute(N_class,ElClass);
			}
			else if (this.getAttribute(N_class) == null)
			{	
				ElClass += "nohover";
				this.setAttribute(N_class,ElClass);
			}
			
		}
		currentEl = "";
	}
}

//Loescht die Klasse nohover beim Rausfahren aus dem Link
function M_changeback(e) 
{
	checkClass(this);
}

//1.Aufruf fuer Anzeigefehlerkorrekturen im Menue
function fMenu() 
{
	elLI = document.getElementById("mainnav").getElementsByTagName("li");
	
	lastArrow(elLI); //Letztes Element mit Pfeil und weissem Hintergrund versehen
	for (i=0; i<elLI.length; i++) {
		elLI[i].onmouseover = M_dontchange;//Listenelemente
		elLI[i].getElementsByTagName("a")[0].onmouseover = M_dontchange;
		elLI[i].getElementsByTagName("a")[0].onmouseout = M_changeback;
	}	
}

/******************************** Fonts ********************************/

//Ueberprueft den aktuell verwendeten Font
function getFontForElement(ele) { 
   if (ele.currentStyle) { // sort of, but not really, works in IE 
        return ele.currentStyle["fontFamily"]; 
    } else if (document.defaultView) { // works in Opera and FF 
        return document.defaultView.getComputedStyle(ele,null).getPropertyValue("font-family"); 
    } else { 
        return null; 
    }
}

//Ueberprueft den Browsertyp, die Version und setzt die Schrift falls @face-font nicht moeglich auf 1.3 zurueck
function checkFontfamily() 
{
	var nav_AppName    = navigator.appName;
	var nav_AppVersion = navigator.appVersion;
	var nav_Plattform6 = navigator.appVersion;
	var nav_UserAgent  = navigator.userAgent;
	var Browser = "";
	var BrowserVersionFirefox = 0;
	var check = true;
	var Version;
	
	if (nav_UserAgent.search(/Opera/) != -1) 
	{
		Browser = "Opera";
		Version = nav_AppVersion.split(".");
		if (parseInt(Version[0]) < 10) 
			check = true;
		else 
			check = false;
	}
		
	if (nav_UserAgent.search(/Firefox/) != -1) 
	{
		Browser = "Firefox";
		
		var ArrayBrowser = nav_UserAgent.split("/");
		Version = ArrayBrowser[ArrayBrowser.length-1].split(".");
		if (parseInt(Version[0]) < 3 || (parseInt(Version[0] == 3) && parseInt(Version[1]) < 5))
			check = true;	
		else 
			check = false;
	}
	
	if (nav_UserAgent.search(/Chrome/) != -1)
	{
		Browser = "Chrome";
		check = true;
	}
		
	if (nav_UserAgent.search(/Safari/) != -1 && nav_UserAgent.search(/Chrome/) == -1) 
	{
		Browser = "Safari";
		check = true;
	}
		
	if (nav_AppName == "Microsoft Internet Explorer" && Browser == "") 
	{
		var Browser = "MSI";
		check = false;
	}
	
	if (check == true) 
	{
		var elLI 		 = document.getElementById("mainnav").getElementsByTagName("li");
		var checkFontDiv = document.getElementById("checkFont");
		
		if (Browser == "Opera") //fuer Operabrowser vor V10
		{
			for (i=0; i<elLI.length; i++) {
				elLI[i].getElementsByTagName("a")[0].style.fontSize = "1.3em";
			}
		}
		else
		{
			var ElFontFamily = getFontForElement(checkFontDiv); //fuer Netscape, Safari
	
			if (ElFontFamily.search(/NimbusSanNovD-Lig/) == -1)
			{
				for (i=0; i<elLI.length; i++) {
					elLI[i].getElementsByTagName("a")[0].style.fontSize = "1.3em";
				}
			}
			else
			{	 
				if (Browser == "Firefox") //fuer Firefoxbrowser vor V3.5
				{
					for (i=0; i<elLI.length; i++) {
						elLI[i].getElementsByTagName("a")[0].style.fontSize = "1.3em";
					}
				}
			}
		}
	}
}

/******************************** JavaScripts Formularüberprüfung ********************************/
/*function checkClassName() 
{
	if (document.getElementById("container").getAttribute("className") == null)
		N_class = "class";
	else
		N_class = "className";
		
	return N_class;
}*/


function checkSpan(formEl, action) 
{
	checkClassName();
	var errorSpan = formEl.parentNode.getElementsByTagName("span");
	for (var i=0; i<errorSpan.length; i++) {
		ClassName = errorSpan[i].getAttribute(N_class);
		if (ClassName != null && ClassName != "" && ClassName.search(/errortext/) != -1) 
		{
			if (action == "delete")
				formEl.parentNode.removeChild(errorSpan[i]);//Spantag loeschen
			else 
				return true;
		}
	}
}

function checkForm(el)
{
	/*
	Folgende Classen muessen in das Stylesheet kopiert werden:
	.errortext {
	}
	.emptyfield {
	}
	Folgende Funktionen werden zusätzlich benötigt:
	checkClassName() 
	deleteSpan() 
	*/
	
	var ImpFields = new Array();
	var error	  = new Array();
	var N_class   = checkClassName();
	
	ImpFields[0] 		 = new Object();
	ImpFields[0]['Name'] = "order_adress.UName";
	ImpFields[0]['Typ']  = "Text";
	ImpFields[0]['Text']  = "";
	ImpFields[1] 		 = new Object();
	ImpFields[1]['Name'] = "order_adress.Firma";
	ImpFields[1]['Typ']  = "Text";
	ImpFields[1]['Text']  = "";
	ImpFields[2] 		 = new Object();
	ImpFields[2]['Name'] = "order_adress.Email";
	ImpFields[2]['Typ']  = "Email";
	if (lang == "de") ImpFields[2]['Text']  = "Ung%FCltige Emailadresse!"; else ImpFields[2]['Text']  = "invalid email address!";
	ImpFields[3] 		 = new Object();
	ImpFields[3]['Name'] = "order_adress.Tel_Landvorwahl";
	ImpFields[3]['Typ']  = "Number";
	if (lang == "de") ImpFields[3]['Text']  = "Ung%FCltige Landesvorwahl!"; else ImpFields[3]['Text']  = "invalid international dialling code!";
	ImpFields[4] 		 = new Object();
	ImpFields[4]['Name'] = "order_adress.Tel_Ortvorwahl";
	ImpFields[4]['Typ']  = "Number";
	if (lang == "de") ImpFields[4]['Text']  = "Ung%FCltige Ortsvorwahl!"; else ImpFields[4]['Text']  = "invalid area code!";
	ImpFields[5] 		 = new Object();
	ImpFields[5]['Name'] = "order_adress.Telefon";
	ImpFields[5]['Typ']  = "Telefon";
	if (lang == "de") ImpFields[5]['Text']  = "Ung%FCltige Telefonnummer!"; else ImpFields[5]['Text']  = "invalid phone number!";
	ImpFields[6] 		 = new Object();
	ImpFields[6]['Name'] = "order_adress.Rechnungsadresse";
	ImpFields[6]['Typ']  = "Text";
	ImpFields[6]['Text']  = "";
	ImpFields[7] 		 = new Object();
	ImpFields[7]['Name'] = "kontakt.UName";
	ImpFields[7]['Typ']  = "Text";
	ImpFields[7]['Text']  = "";
	ImpFields[8] 		 = new Object();
	ImpFields[8]['Name'] = "kontakt.Firma";
	ImpFields[8]['Typ']  = "Text";
	ImpFields[8]['Text']  = "";
	ImpFields[9] 		 = new Object();
	ImpFields[9]['Name'] = "kontakt.Email";
	ImpFields[9]['Typ']  = "Email";
	if (lang == "de") ImpFields[9]['Text']  = "Ung%FCltige Emailadresse!"; else ImpFields[9]['Text']  = "invalid email address!";
	ImpFields[10] 		 = new Object();
	ImpFields[10]['Name'] = "kontakt.Tel_Landvorwahl";
	ImpFields[10]['Typ']  = "Number";
	if (lang == "de") ImpFields[10]['Text']  = "Ung%FCltige Landesvorwahl!"; else ImpFields[10]['Text']  = "invalid international dialling code!";
	ImpFields[11] 		 = new Object();
	ImpFields[11]['Name'] = "kontakt.Tel_Ortvorwahl";
	ImpFields[11]['Typ']  = "Number";
	if (lang == "de") ImpFields[11]['Text']  = "Ung%FCltige Ortsvorwahl!"; else ImpFields[11]['Text']  = "invalid area code!";
	ImpFields[12] 		 = new Object();
	ImpFields[12]['Name'] = "kontakt.Telefon";
	ImpFields[12]['Typ']  = "Telefon";
	if (lang == "de") ImpFields[12]['Text']  = "Ung%FCltige Telefonnummer!"; else ImpFields[12]['Text']  = "invalid phone number!";
	ImpFields[13] 		 = new Object();
	ImpFields[13]['Name'] = "kontakt.Anfrage";
	ImpFields[13]['Typ']  = "Text";
	ImpFields[13]['Text']  = "";
	
	//Abfrage ob alle Felder ausgefüllt wurden:
	for (var i=0; i<ImpFields.length; i++) {
		
		if (ImpFields[i]['Name'].split(".")[0] == el.name) 
		{
			formEl = eval("document." + ImpFields[i]['Name']);
		
			if (formEl.value == "") //Fehler
				error.push({"Name" : formEl.name, "Typ" : "empty", "Text": ImpFields[i]['Text']});
			else //Kein Fehler
			{
				//Roter HIntergrund wieder wegloeschen, weil mittlerweile gefuellt
				ClassName = formEl.getAttribute(N_class);
				if (ClassName != null && ClassName != "" && ClassName.search(/emptyfield/) != -1)
				{
					if (ClassName.length > 10)
						deleteClass = ClassName.substr(0, ClassName.length-11);
					else 
						deleteClass = ClassName.substr(0, ClassName.length-10);
					
					formEl.setAttribute(N_class, deleteClass);
				}
			
			}
		
			//Email auf Gueltigkeit ueberpruefen
			if (ImpFields[i]['Typ'] == "Email" && formEl.value != "") 
			{
			
				if (formEl.value.search(/@/) == -1 || formEl.value.search(/\./) == -1) //Fehler
				{
					if (checkSpan(formEl, "check") != true)
						error.push({"Name" : formEl.name, "Typ" : "message", "Text": ImpFields[i]['Text']});
				}
				else //Kein Fehler
					checkSpan(formEl, "delete");
			}
		
			//Telefonnummern
			if (ImpFields[i]['Typ'] == "Telefon" && formEl.value != "") 
			{
				if (formEl.value.search(/[a-zA-Z]/) != -1)
				{
					if (checkSpan(formEl, "check") != true)
						error.push({"Name" : formEl.name, "Typ" : "message", "Text": ImpFields[i]['Text']});
				}
				else //Kein Fehler
					checkSpan(formEl, "delete");
			}
		
			//Reine Nummern
			if (ImpFields[i]['Typ'] == "Number" && formEl.value != "") 
			{
				if (isNaN(formEl.value))
				{
					if (checkSpan(formEl, "check") != true)
						error.push({"Name" : formEl.name, "Typ" : "message", "Text": ImpFields[i]['Text']});
				}
				else //Kein Fehler
					checkSpan(formEl, "delete");
			}
		}
	}
	if (error.length>0)
	{
		for (var k=0; k<error.length; k++) {
		
			if (error[k]["Typ"] == "empty") 
			{
				classString = "";
				errorEl = document.getElementsByName(error[k]["Name"])[0];
				var currentClass = errorEl.getAttribute(N_class);
				if (currentClass != "" && currentClass != null)
					classString += currentClass + " ";
				errorEl.setAttribute(N_class, classString + "emptyfield");
			}
			else if (error[k]["Typ"] == "message") 
			{
				errorEl = document.getElementsByName(error[k]["Name"])[0].parentNode;
				_span = document.createElement("span");
				_span.setAttribute(N_class, "errortext");
				errorEl.appendChild(_span);
			
				_text = document.createTextNode(unescape(error[k]["Text"]));
				_span.appendChild(_text);
			}
		}
		return false;
	}
	else
		return true;
}

/******************************** JavaScripts Variablen übertragen ********************************/
function sendVars(el, url) 
{
	//var elValue = ordernr.value;
	document.getElementById(el).setAttribute("href","#");
	document.orderdetails.setAttribute("action", url);
	document.orderdetails.submit();
}

/******************************** Cookies verarbeiten ********************************/
function setCookie(name, wert, domain, expires, path, secure)
{
	var cook = name + "=" + unescape(wert);
	cook += (domain) ? "; domain=" + domain : " ";
	cook += (expires) ? "; expires=" + expires : " ";
	cook += (path) ? "; path=" + path : " ";
	cook += (secure) ? "; secure=" + secure : " ";
	document.cookie = cook;
}
function eraseCookie(name, domain, path)
{
	var cook = name + "=empty";
	cook += (domain) ? "; domain=" + domain : " ";
	cook += "; expires=Thu, 01-Jan-70 00:00:01 GMT";
	cook += (path) ? "; path=" + path : " ";
	document.cookie = cook;
}
function getCookie(name)
{
	var i=0;
	var suche = name + "=";
	
	while (i<document.cookie.length) {
		if (document.cookie.substring(i, i + suche.length) == suche)
		{
			var ende = document.cookie.indexOf(";", i + suche.length);
			ende = (ende > -1) ? ende : document.cookie.length;
			var cook = document.cookie.substring(i + suche.length, ende);
			return unescape(cook);
		}
		i++;
	}
	return "";
}
function checkSaveButton() {
	if (document.order_adress.saveData.checked == true && document.order_adress.deleteData.checked == true) 
		document.order_adress.saveData.checked = false;
}
function checkDeleteButton() {
	if (document.order_adress.saveData.checked == true && document.order_adress.deleteData.checked == true) 
		document.order_adress.deleteData.checked = false;
}
