/*

 RRRRRRRRRRR       +       VVV     VVV      
 RRR     RRRR      +       VVV    VVV       
 RRR     RRRR      +       VVV   VVV        
 RRRRRRRRRR   +++++++++++  VVV  VVV         
 RRR    RRR        +       VVV VVV          
 RRR     RRR       +       VVVVVV           
 RRR      RRR      +       VVVVV            
 RRR       RRR             VVVV             
 RRR        RRR            VVV   

*/

// -------------------- Globales ----------------------------------------------

// -- Basis Variablen --
var finds = new Array('_ae','_oe','_ue','_Ae','_Oe','_Ue','_ss','VR_Rentenpolster','_');
var replaces = new Array('ä','ö','ü','Ä','Ö','Ü','ß','VR-Rentenpolster',' ');
var bEntryCorrect = true;	// Flag: Gab es Fehler?
var errorNode = document.getElementById("errorcontainer");

// -- Basis Fehlertexte --
var Einleitungstext="Bitte überprüfen Sie folgende Angaben:";

var sWrongInteger=" einen gültigen ganzzahligen Wert ein.\n";
var sWrongFloat=" eine Fliesskommazahl ein.\n";
var sFormelementIsMandatory = " eine Angabe.\n";
var sWrongDateFormat = 'Bitte geben Sie ein gültiges Datum im Format TT.MM.JJJJ ein.';
var sWrongDOT = 'Bitte geben Sie das Datum für den letzmaligen Termin nur in Monaten und Jahr an.<br>Benutzen Sie bitte das Format MM.JJJJ.';
var sWrongEmail = "Geben Sie bitte eine gültige E-Mail-Adresse ein.\n";
var sWrongZipCode = " eine gültige Postleitzahl ein.\n";
var sWrongBLZ = " eine gültige Bankleitzahl ein.\n";
var sWrongTime = " eine gültige Zeitangabe der Form HH:MM ein.\n";
var sWrongTelephoneNumber =" eine Telefonnummer in der Form (x) y oder x/y ein, wobei x die Vorwahl und y die Telefonnummer repräsentiert. Als erstes Zeichen der Vorwahl darf nur ein + oder die 0 eingegeben werden.";  
var sWrongCash = '';
var sChoiceIsMandatory = " eine Option.\n";
var sCheckboxIsMandatory = " einen Punkt an.\n";
var eingabeAuf = "Bitte geben Sie ";
var ankreuzAuf = "Bitte wählen Sie ";
var nichtleerAuf = "Bitte machen Sie im Feld ";





/* 
   +----------------------------------------------+
   |                Start dependency.js           |
   +----------------------------------------------+
*/

/* 

ANMERKUNG:
Die Funktionen sind noch auf Formularfeldnamen ausgelegt, nicht auf IDs !!!!!!!

Funktion:
Überprüft Abhängigkeiten zwischen Formularfeldern und benennt entsprechend
Formularfelder um, sodass der validator.js diese Abhängigkeiten korrekt
validiert.

Vorraussetzung:
1) Definition von JS-Arrays in der Formularseite
2) Aufruf der Funktion "checkDependency()" bei Submit, aber *vor* dem Aufruf
des Validators

Dependency-Arrays:
Die Namen Arrays sind fest und lauten:
- flagFieldArray
- mustArray
Im flagFieldArray werden die Felder definiert, die anzeigen, ob Abhängigkeiten
bestehen, also im Regelfall werden hier RadioButtons / Checkboxen angegeben,
die bei einem bestimmten Wert ein Textfeld zu einem Mussfeld werden lassen.

Im mustArray werden entsprechend die Felder definiert, die, falls ein  FlagField
gesetzt ist, zu einem Mussfeld werden (dies müssen Textfelder sein). Ein Eintrag
im mustArray ist *immer* wiederum ein Array. So können über ein flagField mehrere
abhängige textfelder zu Muss Feldern werden.

Beispiel:

Skript in der HTML-Seite:

	
	// abhängige Felder
	var depDate = new Array("datKDatum_ab","datKDatum_bis");
	var depVersicherung = new Array("novKSonstigeVersicherung");

	// Flag Felder, die abhängige Felder besitzen
	var flagFieldArray=new Array("optMAuswahlDatum[0]","optMAuswahlVersicherung[1]");
	
	// Sammlung der Abhängigen Felderarrays
	var mustArray=new Array(depDate,depVersicherung);


Diese Definition würde dazu führen, dass falls der RadioButton optMAuswahlDatum[0] 
ausgewählt ist, werden die Felder: datKDatum_ab und datKDatum_bis,
zu MUSS-Feldern.
Falls der Radio Button "optMAuswahlVersicherung[1]" ausgewählt ist,
wird das Textfeld "novKSonstigeVersicherung" zu einem MUSS-FELD. Entscheidend für die 
Zuordnung zwischen flagFieldArray-Element und mustArray-Element ist die Position im Array
(flagField[1] -> mustArray[1]) usw.)

**************************************************************************/

function checkDependency() {
if (!mustArray)
return;
  for(i=0; i<mustArray.length;i++) {
    flag=false;
    if(typeof(flagFieldArray[i]) == 'string') {  // Ein Flagfield
      temp = eval("document.getElementById('"+flagFieldArray[i]+"')");
      whatToDo=getFormType(temp);
      if(eval("temp." + whatToDo)) {flag=true;}
    }
    else {   // Ein Array von FlagFeldern
      k=0;
      while(flagFieldArray[i][k]) { 
          temp = eval("document.forms[0]."+flagFieldArray[i][k]);
          whatToDo=getFormType(temp);
          if(eval("temp." + whatToDo)) { flag=true; break; }
          k++;
      }      
    }
         
    for(j=0;j<mustArray[i].length;j++) {
      prefix = mustArray[i][j].substring(0,3);
      postfix = mustArray[i][j].substring(4,mustArray[i][j].length);
	  if ( eval("document.getElementById('" + mustArray[i][j] + "')")) {
	      if(flag) {

					var labels=document.getElementsByTagName("label");
					for(var k=0;k<labels.length;k++) 
					 if(labels[k].htmlFor == prefix+"K"+postfix)
					 labels[k].htmlFor = prefix+"M"+postfix



		  eval("document.getElementById('" + mustArray[i][j] + "').id='"+prefix+"M"+postfix+"'"); // alles zu Muss
		  }
	      else { 
		  eval("document.getElementById('" + mustArray[i][j] + "').id='"+prefix+"K"+postfix+"'"); // alles zu Kann
		  }
	  }
    }
 }   
}

function getFormType(temp) {
    switch(temp.type) {
      case "text":
        whatToDo = "value";
        break;
      default:
        whatToDo = "checked";
        break;
    }
  return whatToDo;
}

/* 
   +----------------------------------------------+
   |                Ende dependency.js            |
   +----------------------------------------------+
*/

function einsVonbeiden () {
	if (typeof(entwederOder)=="undefined")
	return;
	for (var k=0;k<entwederOder.length;k++) {
	var prefix = entwederOder[k].substring(0,3);
	var postfix = entwederOder[k].substring(4,entwederOder[k].length);
	if (document.getElementById(entwederOder[k])) {
		var labels=document.getElementsByTagName("label");
		for(var j=0;j<labels.length;j++)  
		if(labels[j].htmlFor == entwederOder[k])
		labels[j].htmlFor=prefix+"M"+postfix;// label anpassen
	eval("document.getElementById('" + entwederOder[k] + "').id='"+prefix+"M"+postfix+"'"); // alles zu Muss
	}
	eval("entwederOder[" + [k] + "]='"+prefix+"M"+postfix+"'"); // entwederOder-Array anpassen
	}

	for (var i=0;i<entwederOder.length;i++) {
		if(document.getElementById(entwederOder[i])) {
			if (document.getElementById(entwederOder[i]).value) {
				for (var k=0;k<entwederOder.length;k++) {
					var prefix = entwederOder[k].substring(0,3);
					var postfix = entwederOder[k].substring(4,entwederOder[k].length);
				if (document.getElementById(entwederOder[k])) {
					for(var j=0;j<labels.length;j++) 
					if(labels[j].htmlFor == entwederOder[k])
					labels[j].htmlFor=prefix+"K"+postfix;
				eval("document.getElementById('" + entwederOder[k] + "').id='"+prefix+"K"+postfix+"'"); // alles zu Kann
				eval("entwederOder[" + [k] + "]='"+prefix+"K"+postfix+"'"); // entwederOder-Array anpassen
				}
				}
			}
		}
	}
}

// ---------- Start Validierung -----------------------------------------------

// -- Einstieg --
function validate(oForm) {	
  checkDependency();
  einsVonbeiden ();
  return (checkFormelements(oForm));
}  

// -- Extrahiere Anzeige name aus id-Attribut --
function getDisplayName(formElementId) {
	var len = formElementId.length; 
	//if(!length || length<5) return;
	var i=0;
	var displayName = formElementId.substr(4,len);
	
	for(i=0;i<finds.length;i++)
		if(replaces[i]) 
			displayName = replaceSpecialChar(displayName,finds[i],replaces[i]);

	return displayName;
}

// -- Erzeuge/Füge ein HTML für einen Fehlereintrag --
function setError(text,id) {
	bEntryCorrect = false;
//	setLabelClassName(id,"labelbox")
	var errIdLI = document.createElement("li");
	var errLink = document.createElement("a");
	errLink.setAttribute("href","javascript:linkError('" + id + "')");
	errLink.appendChild(document.createTextNode(getDisplayName(id)));
	errIdLI.appendChild(errLink);
	errIdLI.appendChild(document.createTextNode(": "+text));
	document.getElementById("errorelements").appendChild(errIdLI);
	
	var errTextUL = document.createElement("ul");
	var errTextLI = document.createElement("li");
	errTextUL.setAttribute("id","ul_" + id);
	errTextUL.setAttribute("class","ErrorBeschreibung");

	errTextLI.appendChild(document.createTextNode(text));
//	errTextLI.appendChild(document.createTextNode(text));
//	document.getElementById("errorelements").appendChild(errTextUL);
//	document.getElementById("errorelements").appendChild(errIdLI);
//	alert(errTextLI);
//	setLabelColor(id,"#ff6600");
//	setLabelClassName(id,"FieldsetError");
//	alert(id);
	setLabelClassName(id,"labelbox_error");
	
}

// -- Suche Label für ein Formularfeld --
function setLabelClassName(id,Klasse) {
	var labels=document.getElementsByTagName("label");
	for(var j=0;j<labels.length;j++) 
		if(id==""){
//		labels[j].style.color=color;
		if (labels[j].parentNode.className=="labelbox_error")
		labels[j].parentNode.className=Klasse;
		}
		else {
		 if(labels[j].htmlFor == id) {
//		 labels[j].style.color=color;
			if (labels[j].parentNode.parentNode.className != "formfieldbox")
			labels[j].parentNode.className=Klasse;
		 }
		}
}

// -- Schalte Fehleranzeige Layer auf sichtbar --
function showError() {
	if(!bEntryCorrect) {
		document.getElementById("errorcontainer").style.display='block';
		document.location.href="#inhalt";
	}
}

// -- Fokussiere fehlerhaftes Feld --
function linkError(id) {
	if(document.getElementById(id).focus())
		document.getElementById(id).focus();
}


function removeChildNodes(parent) {
	if(!parent.hasChildNodes()) return;
	parent.nodeValue="";
	var i;
	var nSibling = parent.firstChild;
	while(nSibling!=null) {
		sibling 	= nSibling;
		nSibling = nSibling.nextSibling;
		parent.removeChild(sibling);
	}
}


// --------------- Pflichtfeldvalidierung --------------------------------------------------

function checkFormelements( formId ) {
	
	if (document.getElementById("errorcontainer")){
	removeChildNodes(document.getElementById("errorcontainer")); // Alte Fehlerliste löschen
	eval(objCont("errorcontainer",''));
	document.getElementById("errorcontainer").style.display="block";
	}

	// Errorbox malen Anfang :-)
	var RahmenFuerErrorBox = document.createElement("fieldset");
	RahmenFuerErrorBox.setAttribute("id","ErrorFieldSet");
	
	var DivFuerErrorBox = document.createElement("div");
	DivFuerErrorBox.setAttribute("id","errorinf");
	
	var ULFuerErrorBox = document.createElement("ul");
	ULFuerErrorBox.setAttribute("class","listnone");
	ULFuerErrorBox.setAttribute("id","errorelements");
	
	document.getElementById("errorcontainer").style.marginLeft="10px";
	document.getElementById("errorcontainer").style.marginBottom="10px";
	document.getElementById("errorcontainer").style.display="none";
	
	document.getElementById("errorcontainer").appendChild(RahmenFuerErrorBox);
	document.getElementById("ErrorFieldSet").appendChild(DivFuerErrorBox);
	document.getElementById("errorinf").appendChild(document.createTextNode(Einleitungstext));
	
	document.getElementById("ErrorFieldSet").appendChild(ULFuerErrorBox);
	// Errorbox malen Ende



   var objForm = document.getElementById(formId);	// Formfeld Objekt
	var i,j; 													// Zähler
	var fid;  													// formfeld id-Attribut
	var bMust;													// Flag: Ist Feld Mussfeld (=> 4.Stelle='M')
	var oldRadio;												// Speichert letztes Radiofeld
	var test = "";
	
	//  -- Initialisierung --
	
	bEntryCorrect = true; 													// neuer Validierungsvorgang => setze Flags/Text zurück	
//	removeChildNodes(document.getElementById("errorelements")); // Alte Fehlerliste löschen
	setLabelClassName("","labelbox");												// Farbmarkierungen zurücksetzen
	
	
	//  -- Validierung nach Kann-Muss Flag --
 
  	for (i=0; i < objForm.elements.length; i++) {	
		var formElem = objForm.elements[i];
		//test += "id: " + formElem.id + " - Name: " + formElem.name + "\n";
		fid = formElem.id;
		if(fid && fid!="") {
		
			displayName = getDisplayName(fid);
			bMust			= (fid.substr(3,1) == 'M');

			switch (fid.substr(0,3)) {
				
				case "cmb":
					if (bMust && formElem.options[0].selected) setError("Bitte treffen Sie eine Auswahl.",fid);
					break;  
				
				case "chk":
					if (bMust && !formElem.checked) setError("Dieses Feld muss aktiviert sein.",fid);
					break;
				
				case "ind":
					/*if (document.forms[oForm].elements[i].name.substr(3,1) == 'M') {
					  wrongText += openTag + name_form + closeFont + nichtleerAuf + name_form + sFormelementIsMandatory+ closeTag;
					  bEntryCorrect = false;
					} 
				 break;*/
				
				 case "opt":
				 
				 	if(bMust && formElem.getAttribute("type")=="radio") {
						var optName = formElem.getAttribute("name");
						if(oldRadio!=optName) {
							if(!isChecked(formElem,optName))
								setError("Bitte treffen Sie eine Auswahl",fid);
							oldRadio = optName;
						}
					}
				 
				 default:
					if (bMust) {
					  if (isEmpty(formElem)) 
					  		setError("Bitte machen Sie eine Angabe.",fid); 
					  else
						validateFormelement(formElem, formId);
					} 
					else {
					  if (!isEmpty(formElem)) 
						  validateFormelement(formElem,formId);
					}
			}
  		}
  	}
	showError();
	return bEntryCorrect;
}


// --------------- Inhaltliche Feldvalidierung --------------------------------



function validateFormelement (formElem, formId) {
	
	var fid = formElem.id;
 
  switch (fid.substr(0,3)) {
  
	case "tex":
	 if(isPureText(formElem.value)) return;
	 else setError("Bitte machen Sie eine nur aus Buchstaben bestehende Eingabe.",fid); 
	 break;
  case "eml":
	 if (isEmail(formElem)) return;
	 else setError(sWrongEmail,fid);
	 break;
  case "plz":
	 if (isZipCode(formElem)) return;
	 else setError("Bitte geben Sie eine gültige Postleitzahl ein.",fid);
	 break;	 
  case "sth":
	 if(!isInteger(formElem)) return;
	 else setError("Bitte geben Sie einen Straßennamen an.",fid);
	 break;
  case "dat":
	 if (isDateFormatCorrect(formElem)) return;
	 else setError(sWrongDateFormat,fid);
	 break;
	 
	 
/*
  case "tel":
	 if(isCorrectTelephoneNumber(objFormelement)) {
		return;
	 }
	 else {
		wrongText += openTag + name_form + closeFont + eingabeAuf + sWrongTelephoneNumber + closeTag;
		bEntryCorrect = false;
	 }
	 break;
  case "uhr":
	 if(isCorrectTime(objFormelement))
		return;
	 else {
		wrongText += openTag + name_form + closeFont + eingabeAuf + sWrongTime + closeTag;
		bEntryCorrect = false;
	 } 
	 break;		
  case "vsn":
	 if(isCorrectInsuranceNumber(objFormelement))  
		return;
	 else {
		wrongText += openTag + name_form + closeFont + 'Die eingebene Versicherungsnummer hat ein ungewöhnliches Format. Bitte benutzen Sie das gültige Format: 123/12/123456789. Bitte beachten Sie, da&szlig; in den Eingabefeldern nur numerische Eingaben zulässig sind.'  + closeTag;
		bEntryCorrect = false;
	 } 
	 break;
  case "epl":  //-- Erweiterte Postleitzahl min 3 Stellen
	 if (isSpecialLength(objFormelement,3,5) && isNumber(objFormelement.value))
		return;
	 else{
		wrongText += openTag + name_form + closeFont + eingabeAuf + sWrongZipCode + '<br>Die Postleitzahl (PLZ) darf minimal 3 und maximal 5 Stellen besitzen' +closeTag;
		bEntryCorrect = false;
	 } 
  break;
  case "tvw":  //-- Telefonvorwahl min 3 Stellen
	 if (isSpecialLength(objFormelement,3,5) && isNumber(objFormelement.value))
		return;
	 else{
		wrongText += openTag + name_form + closeFont +  'Die Telefonvorwahl muss minimal 3 bzw. maximal 10 Stellen besitzen' +closeTag;
		bEntryCorrect = false;
	 } 
  break;
  case "mi3":  //-- Min 3 Stellen
		 if (isMinimumLength(objFormelement,3))
			return;
		 else{
			wrongText += openTag + name_form + closeFont + eingabeAuf +  'mindestens 3 Zeichen ein.' +closeTag;
			bEntryCorrect = false;
		 } 
	  break;
	case "blz":
	 if (isSpecialLength(objFormelement,8,8) && isNumber(objFormelement.value))
		return;
	 else{
		wrongText += openTag + name_form + closeFont + eingabeAuf + sWrongBLZ + '<br>Eine BLZ besteht immer aus 8 Ziffern und darf keine Leer- oder Sonderzeichen enthalten.' +closeTag;
		bEntryCorrect = false;
	 } 
	 break;
  case "int":
	 if (isInteger(objFormelement)) {
		return;
	 } else {
		wrongText += openTag + name_form + closeFont + eingabeAuf + name_form + sWrongInteger + closeTag;
		 bEntryCorrect = false;
	 }
	 break;


  
  case "knt":
	 if (isSpecialLength(objFormelement,1,10) && isNumber(objFormelement.value))
		return;
	 else{
		wrongText += openTag + name_form + closeFont + 'Die Kontonummer kann aus 1 - 10 Ziffern bestehen und darf keine Leer- oder Sonderzeichen haben.' + closeTag;
		bEntryCorrect = false;
	 } 
	 break;  
// ---------------------------------------------------------------------------------------------------------------
// Anfang KFZ-Versicherung 

  case "i_4":
	 if ( isNumber(objFormelement.value) && isSpecialLength(objFormelement,4,4) )
		return;
	 else{
		wrongText += openTag + name_form + closeFont + 'Die eingegebene Nummer ist ungewöhnlich. Bitte benutzen Sie das gültige Format: 1234 (genau vier Zahlen)' + closeTag;
		bEntryCorrect = false;
	 } 
  break;
  case "i_3":
	 if ( isNumber(objFormelement.value) && isSpecialLength(objFormelement,3,3) )
		return;
	 else{
		wrongText += openTag + name_form + closeFont + 'Die eingegebene Nummer ist ungewöhnlich. Bitte benutzen Sie das gültige Format: 123 (genau drei Zahlen)' + closeTag;
		bEntryCorrect = false;
	 } 
  break;
  case "cka":
		wrongText += openTag + name_form + closeFont + 'Bitte markieren Sie mindestens eine Checkbox im '+ name_form + closeTag;
		bEntryCorrect = false;
	break;
  
	case "hft":
		wrongText += openTag + name_form + closeFont + 'Bitte beachten Sie, dass eine der folgenden Versicherungsarten ausgewählt werden mu&szlig;: KFZ-Haftpflicht, Vollkasko, Teilkasko, Insassen-Unfallversicherung oder Verkehrsrechtsschutz'+ closeTag;
		bEntryCorrect = false;
	break;
	case "vtv":
		wrongText += openTag + name_form + closeFont + 'Bitte wählen Sie entweder eine Option in der Auswahlbox Vollkasko oder eine Option in der Auswahlbox Teilkasko. Beides ist nicht möglich.'+ closeTag;
		bEntryCorrect = false;
	break;
	
	case "zul":
		wrongText += openTag + name_form + closeFont + 'Das Datum der Erstzulassung muss zeitlich vor dem Datum der Zulassung durch den Halter liegen bzw. mit diesem Datum zusammenfallen.'+ closeTag;
		bEntryCorrect = false;
	break; 

	case "bfe":
		wrongText += openTag + name_form + closeFont + 'Das Datum des Versicherungsbeginns darf nicht in der Vergangenheit liegen.'+ closeTag;
		bEntryCorrect = false;
	break; 
	
// Ende KFZ-Versicherung 
// --------------------------------------------------------------------------------------------------------------- 
// Beginn Aenderung Bankverbindung, Adresse, Schadenauskunft und Schadenmeldung 
 
  case "sth":
	 if(!isInteger(objFormelement)) {
		return;
	 } else {
		wrongText += openTag + name_form + closeFont + eingabeAuf + "im Feld "+ name_form + " einen Stra&szlig;ennamen an."+ closeTag;
		bEntryCorrect = false;
	 }
	 break;
	case "scf":
		wrongText += openTag + name_form + closeFont + 'Das Datum des Schadens darf nicht in der Zukunft liegen.'+ closeTag;
		bEntryCorrect = false;
	break;
	case "izv":
		wrongText += openTag + name_form + closeFont + 'Bitte wählen Sie unter Telefonnummer 1 mindestens einen Zeitraum aus, in dem wir Sie telefonisch unter der angegebenen Telefonnummer erreichen können.'+ closeTag;
		bEntryCorrect = false;
	break;
	case "ada":
		wrongText += openTag + name_form + closeFont + 'Das Datum der Adressänderung darf nicht in der Vergangenheit liegen.'+ closeTag;
		bEntryCorrect = false;
	break;	
	case "abv":
		wrongText += openTag + name_form + closeFont + 'Das Datum der änderung der Bankverbindung darf nicht in der Vergangenheit liegen.'+ closeTag;
		bEntryCorrect = false;
	break;	
	case "flt":
	 if (isFloat(objFormelement)) {
		return;
	 } else {
		 wrongText += openTag + name_form + closeFont + eingabeAuf + name_form + sWrongFloat + closeTag;
		 bEntryCorrect = false;
		return;
	 } 
	break;
	case "dot":
	 if (isDOT(objFormelement)) {
		return;
	 } else {
		wrongText += openTag + name_form + closeFont + sWrongDOT + closeTag;
		bEntryCorrect = false;
	 }
	 break;
	case "bet":
	 if ((proofNumberKommaNumber(objFormelement,6,2))||((isNumber(objFormelement.value))&&(isSpecialLength(objFormelement,1,6))))
		return;
	 else{
		wrongText += openTag + name_form + closeFont + 'Der eingegebene Betrag ist ungewöhnlich. Bitte benutzen Sie das gültige Format: 123456,12 (Bis sechs Stellen vor und genau 2 Stellen nach dem Komma) oder ohne Komma einfach bis zu 6 Ziffern. Bitte vermeiden Sie Tausenderpunkte, Leer- und Sonderzeichen.' + closeTag;
		bEntryCorrect = false;
	 }
	 break;
	case "jhr":
	  if (isValidYear(objFormelement.value)){			  
		  return;
	  }
	  else {
	  wrongText += openTag + name_form + closeFont + 'Ihre angegebene Jahreszahl ist leider nicht überprüfbar. Bitte geben Sie das Jahr im Format JJJJ ein.' + closeTag;
	  bEntryCorrect = false;
	}
	break;
	case "mon":
	  if (isMonth(objFormelement.value)){			  
		  return;
	  }
	  else {
	  wrongText += openTag + name_form + closeFont + 'Ihr angegebener Monat ist leider nicht überprüfbar. Bitte geben Sie eine gültige Monatszahl im Format MM ein.' + closeTag;
	  bEntryCorrect = false;
	}
	break;	
  */
  default:
	 // seiten spezifische Validierung / Funktion analog dieser Funktion: "validateFormelement" / 05.08.2003
	 if(typeof specificValidation == "function") return specificValidation (formElem, formId);
	 return;
  }
  return;
}



// ----------- Validierungsfunktionen -----------------------------------------


function isChecked(optFormNode, objFormName){
  var flag = false;
  var optForm = optFormNode.form;
  oFElength = eval('optForm.'+objFormName+'.length');
  for(i=0;i<oFElength;i++){
	 flag = eval('optForm.'+objFormName+'['+i+'].checked');
	 if (flag) break;
  }
  return flag;
}



//--

function isEmpty (objFormelement) {
  return (objFormelement.value == null || objFormelement.value.length == 0);
}

function isInteger (objFormelement) {
  var sNumber = objFormelement.value;
  var i;
  if (sNumber.charAt(0) == "-") i = 1;
  else i = 0;
  for (; i < sNumber.length; i++) {
		var c = sNumber.charAt(i);
		if (!((c >= "0") && (c <= "9")))
		  return false;
  }
  return true;
}

function isFloat (objFormelement) {
  return true;
  var i;
  var seenDecimalPoint = false;
  var decimalPointDelimiter = ",";
  var sNumber = objFormelement.value;
  if (sNumber.charAt(0) == "-")
	 i = 1;
  else
	 i = 0;
  if (sNumber == decimalPointDelimiter) {
	 return false;
  }
  for (; i < sNumber.length; i++) {
		var c = sNumber.charAt(i);
		if ((c == decimalPointDelimiter) && !seenDecimalPoint)
		  seenDecimalPoint = true;
		else if (!((c >= "0") && (c <= "9")))
  return false;
  }
  return true;
}

function isDOT(objFormelement){
  sDOT = objFormelement.value;
  sDOTarray = sDOT.split('.');
  if(sDOTarray.length == 2){
	 if(sDOTarray[0].length == 2 && sDOTarray[1].length == 4 && isNumber(sDOTarray[0]) && isNumber(sDOTarray[1]))
		return true;
  }
  else
	 return false;
}

function isDateFormatCorrect (objFormelement) {
  var i;
  var seenDecimalPoints = 0;
  var decimalPointDelimiter = ".";
  var iDayDigitCounter = 0;
  var iMonthDigitCounter = 0;
  var iYearDigitCounter = 0;
  var iDay, iMonth, iYear;
  var sDate = objFormelement.value;
  var returnDate;
  if ((sDate == null) || (sDate.length == 0)) {
	 return false;
  }
  if (sDate == decimalPointDelimiter) {
	 return false;
  }
  for (i = 0; i < sDate.length; i++) {
	 var c = sDate.charAt(i);
	 if ((c == decimalPointDelimiter) && (seenDecimalPoints != 2))
		seenDecimalPoints++;
	 else if (!((c >= "0") && (c <= "9")))
		return false;
	 else {
		switch (seenDecimalPoints) {
		  case 0:
			 iDayDigitCounter++;
			 break;
		  case 1:
			 iMonthDigitCounter++;
			 break;
		  case 2:
			 iYearDigitCounter++;
			 break;
		}
	 }
  }

  if ((seenDecimalPoints == 2)
		&& ((iDayDigitCounter > 0) && (iDayDigitCounter < 3))
		&& ((iMonthDigitCounter > 0) && (iMonthDigitCounter < 3))
		&& (iYearDigitCounter == 4))
  {} else {
	 return false;
  }
  
  iDay = sDate.slice(0, iDayDigitCounter);
  iMonth = sDate.slice(iDayDigitCounter+1, iDayDigitCounter+iMonthDigitCounter+1);
  iYear = sDate.slice(iDayDigitCounter+iMonthDigitCounter+2, sDate.length);
  
  if (isDateValid(iYear, iMonth, iDay)){
	 return true;
  }
  else return false;
  return true;
}
function isDateValid (year, month, day) {
  var daysInMonth = new Array(13);//makeArray(12);
  daysInMonth[1] = 31;
  daysInMonth[2] = 29;
  daysInMonth[3] = 31;
  daysInMonth[4] = 30;
  daysInMonth[5] = 31;
  daysInMonth[6] = 30;
  daysInMonth[7] = 31;
  daysInMonth[8] = 31;
  daysInMonth[9] = 30;
  daysInMonth[10] = 31;
  daysInMonth[11] = 30;
  daysInMonth[12] = 31;
  if (! (isMonth(month) && isDay(day) && isValidYear(year))) return false;
	var intYear = parseInt(year);
	var intMonth = parseInt(month);
	var intDay = parseInt(day);
	if (intDay > daysInMonth[intMonth]) return false;
	if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
	return true;
}
function isMonth (sMonth) {
	if (sMonth > 0 && sMonth < 13)
	 return true;
  else
	 return false;
}
function isValidYear(sYear) { return (sYear > 1899 && sYear < 2101); }
function isDay (sDay){ return (sDay > 0 && sDay < 32); }
function daysInFebruary (iYear){	return (  ((iYear % 4 == 0) && ( (!(iYear % 100 == 0)) || (iYear % 400 == 0) ) ) ? 29 : 28 ); }
function makeArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 0
	}
	return this
}
function isEmail (objFormelement){
  var i = 1;
  var sEmail = objFormelement.value;
  var sLength = sEmail.length;
  
  while ((i < sLength) && (sEmail.charAt(i) != "@"))
	 i++;
  if ((i >= sLength) || (sEmail.charAt(i) != "@"))
	 return false;
  else
	 i += 2;
  while ((i < sLength) && (sEmail.charAt(i) != "."))
	 i++;
  if ((i >= sLength - 1) || (sEmail.charAt(i) != ".") || (sEmail.indexOf(" ")!=-1))
	 return false;
  else  
	 return true
}
function isZipCode (objFormelement)
{
  var sZipCode = objFormelement.value;
  if (sZipCode.length != 5)
	 return false;
  for (i=0; i < sZipCode.length; i++) {
		var c = sZipCode.charAt(i);
		if (!((c >= "0") && (c <= "9")))
		  return false;
  }
  return true;
}
function isNumber(strFormelement){
  strFormelement2 = String(strFormelement);
  for (i=0; i < strFormelement2.length; i++) {
	 var c = strFormelement2.charAt(i);
	 if (!((c >= '0') && (c <= '9')))
		return false;
  }
  return true;
}
function isPureText(strFormelement){
	 strFormelement2 = String(strFormelement);
	 for (i=0; i < strFormelement2.length; i++) {
		var c = strFormelement2.charAt(i);
		if(!isNaN(c)) return false;
	 }
	 return true;
}
function replaceSpecialChar(strFormelement,findChar,replaceChar){
  return (eval('strFormelement.replace(/'+findChar+'/g,"'+replaceChar+'")'));
}
function deleteSpecialChar(strFormelement,specialChar){
	 eval('strFormelement.replace(/'+specialChar+'/g,"")');
	 return strFormelement;
}
function isSpecialLength(objFormelement,minLength,maxLength){
  var isSpecialLengthStr = objFormelement.value;
  
  if(isSpecialLengthStr.length < minLength || isSpecialLengthStr.length > maxLength)
	 return false;
  else
	 return true;
}
function isMinimumLength(objFormelement,minLength){
  var isMinimumLengthStr = objFormelement.value;
  
  if(isMinimumLengthStr.length < (minLength))
	 return false;
  else
	 return true;
}
function isSpecialLengthValue(isSpecialLengthStr,minLength,maxLength){
  if(isSpecialLengthStr.length < minLength || isSpecialLengthStr.length > maxLength)
	 return false;
  else
	 return true;
}
function proofCash(stringBG){
  var sWrongCash = '';
  stringBGnew = stringBG.split(',');
  if(stringBGnew.length!=1){
	 if(stringBGnew.length>2 || isNumber(stringBGnew[0])==false || isNumber(stringBGnew[1])==false || stringBGnew[1].search(/\./)!=-1 || stringBGnew[1]<0)
		sWrongCash += 'Bitte überprüfen Sie Ihren eingegebenen Geldbetrag.<br>Ein gültiger Geldbetrag besteht aus 9 Ziffern ohne Tausenderpunkte und  mit einem Komma getrennt der Pfennigbetrag (z.B. 123456789,00).';
		
	 else if(stringBGnew[1].length>2)
		sWrongCash += 'Sie können nur zweistellige Pfennigbeträge angeben.<br>';
  }
  else if(isNumber(stringBG)==false)
	 sWrongCash += 'überprüfen Sie bitte Ihren eingegebenen Geldbetrag.<br>Ein gültiger Geldbetrag besteht aus 9 Ziffern ohne Tausenderpunkte und  mit einem Komma getrennt der Pfennigbetrag (z.B. 123456789,00).<br>';
  
  if(stringBGnew[0].search(/\./)!=-1)
	 sWrongCash += 'Bitte vermeiden Sie Tausenderpunkte, d.h. aus 10.000 wird 10000.<br>';
	 
  if(stringBGnew[0]>999999999)
	 sWrongCash += 'Ihr eingegebener Geldbetrag ist zu hoch. Sie können maximal 999.999.999,99 EUR eingeben.<br>';
  
  if(stringBGnew[0]<0)
	 sWrongCash += 'Ihr eingegebener Geldbetrag ist zu klein.<br>';
  return sWrongCash;
}
function proofNumberKommaNumber(objectNKN,before,after){
  stringNKN = objectNKN.value;
  
  stringNKNnew = stringNKN.split(',');
  
  if(stringNKNnew.length>2)
	 return false;
  else if(stringNKNnew.length==1){
	 if(isNumber(stringNKNnew)==false || stringNKNnew[0].length>before)
		return false;
  }
  else if(stringNKNnew.length==2){
	 if(stringNKNnew[0].length>before || stringNKNnew[1].length>after || isNumber(stringNKNnew[0])==false || isNumber(stringNKNnew[1])==false)
		return false;
  }
  return true;
}
function isCorrectInsuranceNumber(objFormelement) {
  value=objFormelement.value;
  if(value.length==16) {
		valueArray=value.split("/");
		if(valueArray.length!=3) return false;
		if(isSpecialLengthValue(valueArray[0],3,3) && isNumber(valueArray[0]) && isSpecialLengthValue(valueArray[1],2,2) && isNumber(valueArray[1]) && isSpecialLengthValue(valueArray[2],9,9) && isNumber(valueArray[2]))
		  return true;
		return false;
  }
  else return false; 
}
function isCorrectTime(objFormelement) {
  parts=(objFormelement.value).split(":");
  if(parts.length!=2) return false;
  if((isCorrectHour(parts[0]))&&(isCorrectMinute(parts[1]))) return true;
  return false;
}
function isCorrectHour(hour) {
	if((isNumber(hour))&&(hour>=0)&&(hour<=23)) return true;
	return false;
}
function isCorrectMinute(minute) {
	if((isNumber(minute))&&(minute>=0)&&(minute<=59)) return true;
	return false;
}
function isCorrectTelephoneNumber( objFormelement ) {
/* nervt! */
return true;
  value=objFormelement.value;
  if(value.lastIndexOf(" ")==-1) {
	  if(value.indexOf("/")==-1) return false; // wenn nicht " " dann "/" Pflicht
	  else {
		  parts=(objFormelement.value).split("/"); // xx/xx 
		  if(parts.length!=2) return false;	
		  return ((isCorrectPrechoice(parts[0])) && (isNumber(parts[1])));
	  }	  
  }
  else {
	 parts=(objFormelement.value).split(" ");  
	 if(parts.length!=2) return false; 
	 if((parts[0].substr(0,1)!="(")||(parts[0].substr(value.lastIndexOf(" ")-1,1)!=")")) return false;
	 return ((isCorrectPrechoice(parts[0].substr(1,parts[0].indexOf(")")-1))) && (isNumber(parts[1])));	  
  }
  return false;
}

function isCorrectPrechoice(vorwahl) {
  prefixSign=vorwahl.substr(0,1);
  if(prefixSign=="+") vorwahl=vorwahl.substring(1);
  else {
	 if(vorwahl.substr(0,1)!="0") return false;
  }  
  return isNumber(vorwahl);
}

function focusOn(formularName, fieldName)
{
  eval("document.forms['" + formularName + "']." + fieldName + ".focus()");
}

var nn = (document.layers) ? true : false;
/*function openWin(newURL,params){
  newWin = window.open(newURL,'floater',params);
  if (!document.all || document.getElementById) {
	 newWin.focus(); 
  }
}*/
var mustArray=new Array();