/**
 * Allgemeine Javascript-Funktionen, die auf der gesamten Webseite
 * zur Verfuegung stehen sollen.
 */

// Funktion um den Drucken-Dialog des Browsers zu oeffnen.
function printWindow() {
	if (window.print) {
		window.print();
	} else {
		window.alert("Benutzen Sie bitte die Druckfunktion Ihres Browsers.")
	}
}



/**
 * ------------------------------------------------------------------------------
 * Funktionen, um die Formular-Validierung zu erweitern
 */

// Das JS Array-Objekt um die Methode "remove" erweitern
Array.prototype.remove=function(s){
	for(i=0;i<this.length;i++){
		if(s==this[i]) this.splice(i, 1);
	}
}

// Merkliste um alle Elemente zu sammeln die auf sichtbar geschaltet werden
var a_errorElemente = [];

// Funktion um die Error-Meldungen ein- und aus-zublenden
function onElementValidation (result, form) {
	if (result == false) {
		// errorContainer sichtbar schalten
		if ($('errorContainer')) {$('errorContainer').style.display='block';}
		if ($('validationContainer')) {$('validationContainer').style.display='block';}
		var label ='label_'+form.id;
		if ($(label) != undefined && $(label) != '') {
			// dem Element die Klasse error hinzufuegen
			$(label).className = 'error';
			// Element merken
			a_errorElemente.push(form.id);
		}
	}
	if (result == true) {
		var label ='label_'+form.id;
		if ($(label) != undefined && $(label) != '') {
			// dem Element die Klasse wieder wegnehmen (dabei werden auch z.Zt. alle anderen Klassen entfernt!)
			$(label).className = '';
			// Element aus Merkliste entfernen
			a_errorElemente.remove(form.id);
		}
	}
	if (a_errorElemente.length == 0) {
		// Wenn Merkliste leer ist, ganzen errorContainer wieder unsichtbar schalten
		if ($('errorContainer')) {$('errorContainer').style.display='none';}
		if ($('validationContainer')) {$('validationContainer').style.display='none';}
	}
}


/**
 * ------------------------------------------------------------------------------
 *
 */
var pxpvars = {
	templates:{},	// Templates f�r Ajax-Komponenten
	flags:{},		// Nur Boolean Flags
	objects:{},		// Komplexere Objekte, z.B. AutoCompletion-Objekt
	defaults:{		// Voreinstellungen
		modalzindex : 2345,
		overlayzindex : 1234,
		minimumBodyWidth : 998,
		minimumBodyHeight : 626
	},
	constants:{},	// Pseudo-Konstanten (JS unterst�tzt keine Konstanten)
	errors:{},		// Fehlermeldungen
	vars:{}			// Globale Variablen allgemein (none of the above)
}
pxpvars.objects.scrollLooper = false;
pxpvars.objects.sidescroller = false;
pxpvars.defaults.scrollLoopTimeOut = 0.2;

/* tabNav1 funktion zum wechseln zwischen zwei tabs*/

	function toggleTabNav1(tab) {

		if (tab == 'tab1') {
			$('tabNav1_div2').style.display='block';
			$('tabNav1_div1').style.display='none';
			$('tabNav1_tab1').className='current';
			$('tabNav1_tab2').className='';

		 }
		if (tab == 'tab2'){
			$('tabNav1_div1').style.display='block';
			$('tabNav1_div2').style.display='none';
			$('tabNav1_tab1').className='';
			$('tabNav1_tab2').className='current';

		}

		//new Effect.toggle(divid, 'appear');
	}

	// fuer weitere Sprachen in "Mein Profil"
	function toggleWeitereSprachen() {
		var status = $('weitereSprachenDiv').style.display;
		if (status == 'none') {
			$('weitereSprachenDiv').style.display = 'block';
			$('weitereSprachenButton').style.backgroundPosition = '180px -193px';
		} else {
			$('weitereSprachenDiv').style.display = 'none';
			$('weitereSprachenButton').style.backgroundPosition = '180px 7px';
		}
	}

	// fuer weitere Uebrerschriften in "Haendlerfahrzeugverwaltung add1"
	function toggleWeitereUeberschriften() {
		var status = $('weitereUeberschriftenDiv').style.display;
		if (status == 'none') {
			$('weitereUeberschriftenDiv').style.display = 'block';
			$('weitereUeberschriftenButton').style.backgroundPosition = '0 -193px';
		} else {
			$('weitereUeberschriftenDiv').style.display = 'none';
			$('weitereUeberschriftenButton').style.backgroundPosition = '0 7px';
		}
	}


	// fuer weitere Schaeden in "Haendlerfahrzeugverwaltung add1"
	function toggleWeitereSchaeden() {
		var status = $('weitereSchaedenDiv').style.display;
		if (status == 'none') {
			$('weitereSchaedenDiv').style.display = 'block';
			$('weitereSchaedenButton').style.backgroundPosition = '0 -193px';
		} else {
			$('weitereSchaedenDiv').style.display = 'none';
			$('weitereSchaedenButton').style.backgroundPosition = '0 7px';
		}
	}

	// fuer weitere Freitexte in "Haendlerfahrzeugverwaltung add1"
	function toggleWeitereFreitexte() {
		var status = $('weitereFreitexteDiv').style.display;
		if (status == 'none') {
			$('weitereFreitexteDiv').style.display = 'block';
			$('weitereFreitexteButton').style.backgroundPosition = '0 -193px';
		} else {
			$('weitereFreitexteDiv').style.display = 'none';
			$('weitereFreitexteButton').style.backgroundPosition = '0 7px';
		}
	}


	function toggleFzIdList(button,id) {
		new Effect.toggle($(id), 'appear',{duration:0.1});
		if ($(button).hasClassName('btn_showHide')){
			$(button).toggleClassName('btn_hideShow');
		}
		else {
			$(button).toggleClassName('btn_showHide');
		}		
	}


	/* funktion zum wechseln der detailimages*/

		function toggleDetailImage(thisThumb,currentImage) {
			if($('detailImage0')) {$('detailImage0').style.display ='none';};
			if($('detailImage1')) {$('detailImage1').style.display ='none';};
			if($('detailImage2')) {$('detailImage2').style.display ='none';};
			if($('detailImage3')) {$('detailImage3').style.display ='none';};
			if($('detailImage4')) {$('detailImage4').style.display ='none';};
			if($('detailImage5')) {$('detailImage5').style.display ='none';};
			$(currentImage).style.display ='block';
		  	document.getElementsByClassName('dImageThumbLink current').each(function(link){
		    $(link).className='dImageThumbLink';
		   });
		   $(thisThumb).className ='dImageThumbLink current';

		}


/* funktion zum einblenden der Tooltips 
 *	sucht nach suchwort und ergaenzt das um Tooltip mit der Erklaerung
*/
function generateTooltips (element, a_erklaerungen)	{
	
	//alert("s_suchwort: " + s_suchwort + " s_erklaerung: "+ s_erklaerung);

	for (var i = 0; i < element.childNodes.length; i++) {

		var aktKnoten = element.childNodes.item(i);
		
		// ist es ein textknoten?
	  	if (aktKnoten.nodeType == 3) {
				
			// Knoten die beruecksichtigt werden soll (ergaenzen)
			if (
					aktKnoten.parentNode.nodeName == "DIV"
					||
				   aktKnoten.parentNode.nodeName == "TD"
				   ||
				   aktKnoten.parentNode.nodeName == "P"
				   ||
				   aktKnoten.parentNode.nodeName == "LABEL"
				) {
			
				//document.write ("AUFRUF mit "+element+"<br>");
				
				// Schleife ueber alle Suchworte
				for (var j = 0; j < a_erklaerungen.length; j++) {
					
					// existiert der Parentnode? Wenn nicht gibt es sonst eine Fehlermeldung
					if (aktKnoten.parentNode != null) {
						
						var teilstring = aktKnoten.nodeValue;
						var s_suchwort 	= a_erklaerungen[j][0];
						var s_erklaerung 	= a_erklaerungen[j][1];
						
						// solange machen, bis string von aktKnoten zuende
						while (teilstring.indexOf(s_suchwort) != -1 ) {
							
							var posInTeilstring = teilstring.indexOf(s_suchwort);
							
							// die globale Position im ganzen Knoten ist die Position des Suchwoertes im Teilstring + die Anzahl zeichen, die der gesamte String laenger ist
							var pos = posInTeilstring + aktKnoten.nodeValue.length - teilstring.length;
							
							//var aktString 	= aktKnoten.data;
							var charDavor 	= teilstring.charAt(posInTeilstring - 1);
							var charDanach = teilstring.charAt(posInTeilstring + s_suchwort.length);						
							
							// DEBUG
							//if (pos > -1 ) {
							//	alert ("'"+charDavor+"' "+ s_suchwort+" '"+ charDanach + "'\n aktstring: "+teilstring);
							//}
																		
							// wenn das suchWort gefunden wurde und davor und danach ein blank ist
							if (charDavor.search(/[a-zA-ZäöüÄÖÜ\-_]/) == -1 && charDanach.search(/[a-zA-ZäöüÄÖÜ\-_]/) == -1) {
							//if (pos > -1 && charDavor.search(/[a-zA-ZäöüÄÖÜ]/) == -1 && charDanach.search(/[a-zA-ZäöüÄÖÜ]/) == -1) {
							//if (pos > -1 && charDavor.search(/\w/) == -1 && charDanach.search(/\w/) == -1) {
								
								var stringDavor 	=  aktKnoten.nodeValue.substring(0, pos);
								var stringDanach 	=  aktKnoten.nodeValue.substr(pos + s_suchwort.length);
				
							 	//alert('[' + stringDavor + '] [' + s_suchwort + '] [' + stringDanach + ']');
				
								// Rekursion unterbrechen?
								if (teilstring == s_suchwort && aktKnoten.parentNode.getAttribute('class') == 'info')  return;
				
								var nodeDavor 			= document.createTextNode(stringDavor);
								var nodeDanach 		= document.createTextNode(stringDanach);
								var nodeSuchwort 		= document.createTextNode(s_suchwort);
				
								// <span> erzeugen
								var nodeSpan			= document.createElement("span");
				
								// Klasse fuer <span> setzen
								var spanClass 			= document.createAttribute("class");
								spanClass.nodeValue	= "info";
				
								// Title fuer <span> setzen
								var spanTitle 			= document.createAttribute("title");
								spanTitle.nodeValue	= s_erklaerung;
				
								// Klasse und Title dem <span> zuweisen
								nodeSpan.setAttributeNode(spanClass);
								nodeSpan.setAttributeNode(spanTitle);
				
								// jetzt alles aneinander haengen
								if (aktKnoten.parentNode != null) {
									nodeSpan.appendChild(nodeSuchwort);
									aktKnoten.parentNode.replaceChild(nodeDanach, aktKnoten);
									nodeDanach.parentNode.insertBefore(nodeDavor, nodeDanach);
									nodeDanach.parentNode.insertBefore(nodeSpan, nodeDanach);
								}
							} // end if davor und danach ein blank
						
							teilstring = teilstring.slice(posInTeilstring + s_suchwort.length);
							
						} // end while
				
					} // end if parentNode existiert
						
				} // end for ueber alle Suchwort
				
			} // end if nicht h1-h3

		} else if (aktKnoten.nodeType == 1) {
			// es ist ein Elementknoten - starte rekursion mit dem aktuellen knoten
			generateTooltips(aktKnoten, a_erklaerungen);

		} // end if

	} // end for

} // end function


	/* MwSt Berrechnung */

	function calcBrutto(Netto, Prozent) {
			var Brutto = eval(Netto) * (eval(Prozent) + 100)/100;
			return Brutto;
	}

	function calcNetto(Brutto, Prozent) {
			var netto = eval(Brutto) * 100 / (100 + eval(Prozent));
			return netto;
	}
	function calcProzent(Netto, Brutto) {
			var prozent = (eval(Brutto) * 100 / eval(Netto))- 100;
			return prozent;
	}


	/* Zahlen Filter */
	
	function getNumber(n) {
		var s = "" + n;
		var m = "";
		var ziffern = "0123456789"
		if (s.charAt(0)=="-")  s = s.substring(1, s.length);
		if (s=="0")return 0;
		for (var i=0; i<s.length; i++) {
			if((ziffern.indexOf(s.charAt(i)))==-1){
				break;	
			}
			else{
				m = m+(ziffern.indexOf(s.charAt(i)));
			}
		}
		if ( m.length == 0) m = 0;
		return Math.round(m);
	}


	function replaceChars(entry) {
	  out = ","; // replace this
	  add = "."; // with this
	  temp = "" + entry; // temporary holder

	  while (temp.indexOf(out)>-1) {
	    pos = temp.indexOf(out);
	    temp = "" + (temp.substring(0, pos) + add +
	    temp.substring((pos + out.length), temp.length));
	  }
	  return temp;
	}
	
	
 	function wait() {}

	/* Mwst Initialisierung */
	function mwstInit() { 
		var id_nomwst = "f_mwstAusweisbar";
		var id_mwst = "f_mwst";
		var id_mwst_fake = "f_mwst_fake";
		
			
		if ($(id_nomwst).type == 'hidden'){
			if(($(id_nomwst).nextSibling.checked) == false){
				Form.Element.disable(id_mwst);
				$(id_mwst).addClassName('inputTextDisabled');
				$(id_mwst).insert( {after:'<input type="hidden" name="f_mwst" id="f_mwst_fake" value="" />' } ); 
			}
		} 
		else {
			if (!($(id_nomwst).checked)) {
				Form.Element.disable(id_mwst);
				$(id_mwst).addClassName('inputTextDisabled');
				$(id_mwst).insert( {after:'<input type="hidden" name="f_mwst" id="f_mwst_fake" value="" />' } ); 
			}
		}
	} 

	// Globale Variable fuer das zuletzt veraenderte Feld bei der mwst Berechnung
	var fuehrendesFeld = "";
	
	/* onBlur Mwst Darstellung */
	function mwstRefresh(e) {
	
		// welches ist das zuletzt geaenderte Feld - danach richtet sich, welches Feld bei einer
		// mwst Anpassung geaendert wird
		if (e == "2") {
			fuehrendesFeld = "f_preisBrutto";
		} else if (e == "1") {
			fuehrendesFeld = "f_preisNetto";
		} 
		//alert("fuehrendes Feld: "+fuehrendesFeld);
	
		var id_netto = "f_preisNetto";
		var id_brutto = "f_preisBrutto";
		var id_mwst = "f_mwst";
		var id_mwst_fake = "f_mwst_fake";
		var id_nomwst = "f_mwstAusweisbar";
		var netto 	= 0;
		var brutto  = 0;
		var mwst 	= 0;
		var ie = false;
		
		if ($(id_nomwst).type == 'hidden'){
			var ie = true;
			var mwstAusweisbarIsChecked = $(id_nomwst).nextSibling.checked;
			var checkValue = $(id_nomwst).nextSibling.value;
		
		} else {
			var mwstAusweisbarIsChecked = $(id_nomwst).checked;
			var checkValue = $(id_nomwst).value;
		}		
			
		if (e == 4) {	
			// *************************
			// f_mwstAusweisbar
			// *************************			
			setTimeout('wait()',500);
			
			if (!mwstAusweisbarIsChecked) {
				// ******************************
				// mwstAusweisbar ist NICHT aktiviert
				// ******************************	
				Form.Element.disable(id_mwst);
				$(id_mwst).addClassName('inputTextDisabled');
				$(id_mwst).insert( {after:'<input type="hidden" name="f_mwst" id="f_mwst_fake" value="" />' } ); 
				
				// workaraound fuer IE		
				if (ie) { 
					$(id_nomwst).nextSibling.value ="0"; 
				} else {
					$(id_nomwst).value ="0";
				}		
				
				$(id_mwst).value='';

				if (Form.Element.present(id_netto)) {
					var netto = getNumber( $F(id_netto));
					
					if (netto == 0) {
						$(id_netto).value = '';
					} else {
						$(id_netto).value = netto;
					}
					
					$(id_brutto).value = netto;						
				
				} else if (Form.Element.present(id_brutto)) {
					var brutto = getNumber( $F(id_brutto));
					
					if (brutto == 0) {
						$(id_brutto).value = '';
					} else {
						$(id_brutto).value = brutto;
					}
					
					$(id_netto).value= brutto;	
				}
			
			} else if (mwstAusweisbarIsChecked) {
				// ******************************
				// mwstAusweisbar ist aktiviert
				// ******************************				
				if($(id_mwst_fake)) {$(id_mwst_fake).remove();} 
					Form.Element.enable(id_mwst);
					$(id_mwst).removeClassName('inputTextDisabled');
					
					
					// workaraound fuer IE
					if (ie) { 
						$(id_nomwst).nextSibling.value ="1"; 
					} else {
						$(id_nomwst).value ="1";
					}
			}				
		} // end if f_mwst


		if ((e == 1)||(e == 2)||(e == 3)) {
			// ******************************
			// f_preisNetto || f_preisBrutto || f_mwst
			// ******************************
			if (!mwstAusweisbarIsChecked){
				if (Form.Element.present(id_netto)) {
					var netto = getNumber( $F(id_netto));
				}

				if (Form.Element.present(id_brutto)) {
					var brutto = getNumber( $F(id_brutto));
				}

				// Netto Feld 
				if (e == 1) { 
					brutto = netto; 
				}

				// Brutto Feld
				if (e == 2) { 
					netto = brutto; 
				}

				if (netto == 0) {
					$(id_netto).value='';
				} else {
					$(id_netto).value=netto;
				}
				
				if (brutto == 0) {
					$(id_brutto).value='';
				} else {
					$(id_brutto).value=brutto;
				}
				
				$(id_mwst).value="";
			}

			/* Mwst Ausweisbar */			
			if (checkValue == "1") {
				if (Form.Element.present(id_netto)) {
					var netto = getNumber( $F(id_netto));
				}
				if (Form.Element.present(id_brutto)) {
					var brutto = getNumber( $F(id_brutto));
				}
				if (Form.Element.present(id_mwst)) {
					//var mwst = getNumber( $F(id_mwst));
					var mwst = replaceChars($F(id_mwst));
				}

				// Netto Feld veraendert
				if ( (e == 1) && (mwst != 0)) {
					brutto = calcBrutto(netto, mwst);
				}

				// Brutto Feld veraendert
				if ( (e == 2) && (mwst != 0)) {
					netto = calcNetto(brutto, mwst);
				}

				// MwSt Feld veraendert
				if (e == 3) {
	
					if (netto != 0) {
						if (fuehrendesFeld == "f_preisBrutto") {
							netto = calcNetto(brutto, mwst);
						} else {
							brutto = calcBrutto(netto, mwst);
						}
					}
					
					if (brutto != 0) {
						if (fuehrendesFeld == "f_preisBrutto") {
							netto = calcNetto(brutto, mwst);
						} else {
							brutto = calcBrutto(netto, mwst);
						}						
					}
	
				} // end if MwSt Feld veraendert
				
				// Setzen der Ausgabewerte 
				if (netto == 0) {
					$(id_netto).value= ''; 
				} else {
					$(id_netto).value= Math.round(netto);
				}
				
				if (brutto == 0) {
					$(id_brutto).value='';
				} else {
					$(id_brutto).value=Math.round(brutto);
				}
				
				//(mwst		== 0) ? $(id_mwst).value= '' : $(id_mwst).value= Math.round(mwst);

				if (e == 3) { 
					// *************************
					// f_mwst
					// *************************
					
					if (mwst == 0) {
						$(id_mwst).value= '';
							
						// workaround fuer IE	
						if (ie) { 
							$(id_nomwst).nextSibling.value = "0"; 
							$(id_nomwst).nextSibling.checked = "";
						} else {
							$(id_nomwst).value = "0";
							$(id_nomwst).checked = "";
						}
												
						Form.Element.disable(id_mwst);
						$(id_mwst).addClassName('inputTextDisabled');
						$(id_mwst).insert( {after:'<input type="hidden" name="f_mwst" id="f_mwst_fake" value="" />' } ); 
					} // end if mwst == 0
					
				} // end if f_mwst
			}
		} // end if e != 4
	} // end function




	// Funktion om die Tooltips zu formatiern
	function formatTooltips() {
		$A(document.getElementsByClassName('info')).each(function(link){
			var text= $(link).title;
			$(link).title = ''; // nach dem auslesen des title-attributes dieses leeren.
			new Control.Modal(link,{
				hover: true,
				containerClassName: 'infoModal',
				position: 'relative',
				offsetTop: 14,
				offsetLeft: 4,
				contents: text
			});
		});
	}

 // Funktion um Dropdowns zu vergrößern
 	function observeDropdowns(ids) {
 		var dropdown = ids;
	
	//if (window.navigator.userAgent.indexOf("MSIE ") > -1 && parseFloat(navigator.appVersion) >= 4) {	
		for (var i=0;i<dropdown.length;i++)
			{
 		 		var ID = dropdown[i];
 	 			$(ID).observe('mouseover', respondToFocus);
	 			$(ID).observe('blur', respondToChange);
	 			$(ID).observe('change', respondToChange);		 		
			}

 		//}
 
 	 		function respondToChange(event) {
	 			var element = event.element();
	 			element.removeClassName('flyDropdown');
	 			element.blur(this);
			} 
 
 			function respondToFocus(event) {
	 			var element = event.element();
	 			element.addClassName('flyDropdown');
	 			//setTimeout('wait()',1000);
	 			//element.removeClassName('flyDropdown');
	
			} 

 	}


function disableEnterKey(e){
     var key;
     if(window.event)
          key = window.event.keyCode;     //IE
     else
          key = e.which;     //firefox
     if(key == 13)
          return false;
     else
          return true;
}    
