/**

   <script language="JavaScript" src="formValidator.js" type="text/javascript"></script>
   
   <script language="JavaScript" type="text/javascript">
   function validate()
   {
      // neues Objekt        'formularName'
      v = new formValidator('formularName' [bgTrueColor, bgFalseColor]);
     
   v.isEmpty('form[vorname]', 'Bitte geben Sie Ihren Vornamen ein!');
   v.isText('form[vorname]', 'Bitte geben Sie Buchstaben im Vornamen ein!');
   v.isEmpty('reservierung_fax', 'Bitte FaxZahl!');
   v.isDigit('reservierung_fax', 'Keine FaxZahl!');
   v.isDigit('reservierung_plz', 'Keine PLZZahl!');
   v.isWithinRange('reservierung_plz', '5 Stellen', 1, 5)
   v.isEmail('reservierung_email', 'Bitte geben Sie eine gültige Email-Adresse ein!');
   v.isSelected('fomr[liste]', 'Liste selektieren!');
   v.isChecked('form[radioBox]', 'Bitte radio checken!');
   v.isChecked('box', 'Bitte mind. 1 box checken!');   
   v.isRegexTrue('reservierung_regex', /[a-z]/, 'Falsche Regex'); 

      if (v.isError() )
      {
         v.errorPrint();
         return false;
      }
     
   }
   </script>
   
   Formular mit EventHandler onSubmit, der die Funktion aufruft.
   <form action="" method="post" name="reservierung"  onSubmit="return validate();">
*/

/**
*  Konstruktor
*  @param formName
*  @param bgTrueColor
*  @param bgFalseColor
*/ 
function formValidator(formName, bgTrueColor, bgFalseColor)
{
   this.formName = formName;
   
   //	methoden
   this.isEmpty = isEmpty;
   this.isError = isError;
   this.errorPrint = errorPrint;
   this.isDigit = isDigit;
   this.isEmail = isEmail;
   this.isPhone = isPhone;
   this.isChecked = isChecked;
   this.isSelected = isSelected;   
   this.isText = isText;
   this.isWithinRange = isWithinRange;
   this.isRegexTrue = isRegexTrue;
   this.setColor = setColor;

   //vars
   var errors = new Array();
   this.errors = errors;
   var felder = new Array();
   this.felder = felder;
   var re_email = /^([_a-zA-Z0-9-]+)(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-\.]+\.([a-zA-Z]{2,4})$/;   
   this.re_email = re_email;
   var re_text = /^[a-zA-Z]+$/;
   this.re_text = re_text;
   this.bgTrueColor = (typeof(bgTrueColor) == "undefined") ? "white" : bgTrueColor;
   this.bgFalseColor = (typeof(bgFalseColor) == "undefined") ? "red" : bgFalseColor;

}


function isEmpty(feldName, text)
{
   if( eval("document." + this.formName + ".elements['" + feldName + "'].value.length") < 1)
   {
   	this.setColor(eval("document." + this.formName+ ".elements['" + feldName+ "']"), this.bgFalseColor);
	  this.errors.push(text);
    this.felder.push("elements['" + feldName+ "']");
	return false;
   }
   else
   {
      this.setColor(eval("document." + this.formName+ ".elements['" + feldName + "']"), this.bgTrueColor);
   }
}

function isEmail(feldName, text)
{
   if( this.re_email.test( eval("document." + this.formName + ".elements['" + feldName + "'].value") ) == false )
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgFalseColor);
      this.errors.push(text);
      this.felder.push("elements['" + feldName+ "']");
      return false;
   }
   else
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgTrueColor);
   }
}

function isPhone(feldName, text) 
{
   var verifPoneFr = /^(01|02|03|04|05|06|08|09)[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/;
   var verifPhoneInt = /^(\(\+[0-9]{2}\))[ \.\-]?[0-9][ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/;
   var verifPhone = /^[0-9+() .-]{14}$/;
  
   if (( verifPoneFr.test( eval("document." + this.formName + ".elements['" + feldName + "'].value") ) == false ) &&
       ( verifPhoneInt.test( eval("document." + this.formName + ".elements['" + feldName + "'].value") ) == false ) &&
       ( verifPhone.test( eval("document." + this.formName + ".elements['" + feldName + "'].value") ) == false ))
   
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgFalseColor);
      this.errors.push(text);
      this.felder.push("elements['" + feldName+ "']");
      return false;
   }
   else
   {
      this.setColor(eval("document." + this.formName+ ".elements['" + feldName+ "']"), this.bgTrueColor);
   }
}      
/**
*  Ueberpruefung anhand eines RegEx
*  @param feldName
*  @param RegEx
*  @param text
*/
function isRegexTrue(feldName, regex, text)
{
   if( regex.test( eval("document." + this.formName + ".elements['" + feldName + "'].value") ) == false )
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgFalseColor);
      this.errors.push(text);
      this.felder.push("elements['" + feldName+ "']");
      return false;
   }
   else
   {
      this.setColor(eval("document." + this.formName+ ".elements['" + feldName+ "']"), this.bgTrueColor);
   }
}

/**
*  Ueberpruefung auf Checkbox
*  Unterscheidung auf eine oder mehrere Checkboxen
*  @param feldName
*  @param text
*/
function isChecked(feldName, text)
{
   var nichtMarkiert = true;
   
   if( eval("document." + this.formName + ".elements['" + feldName + "'].length") )
   {
      for (i = 0; i < eval("document." + this.formName + ".elements['" + feldName + "'].length"); i++)
      {
         //alert(eval("document." + this.formName + "." + feldName + ".checked"));
         if( eval("document." + this.formName + ".elements['" + feldName + "'][i].checked") == true) 
         {
            nichtMarkiert = false;
         }
        
      }   
   
      if (!nichtMarkiert)
      {
          for (i = 0; i < eval("document." + this.formName + ".elements['" + feldName + "'].length"); i++)
         {
            this.setColor(eval("document." + this.formName+ ".elements['" + feldName+ "'][i]"), this.bgTrueColor);
         }
      }
      else
      {
         for (i = 0; i < eval("document." + this.formName + ".elements['" + feldName + "'].length"); i++)
         {
            this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "'][i]"), this.bgFalseColor);
            this.errors.push(text);
         }
      return false; 
      }
   }
   else
   {
      if( eval("document." + this.formName + ".elements['" + feldName + "'].checked") == false) 
      {
            this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgFalseColor);
            this.errors.push(text);      
            return false; 
      }
   }
}


/**
*  Ueberpruefung auf Select-Liste
*  @param feldName
*  @param text
*/
function isSelected(feldName, text)
{
   if( eval("document." + this.formName + ".elements['" + feldName + "'].selectedIndex") == 0)
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgFalseColor);
      this.errors.push(text);
      return false;
   }
   else
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgTrueColor);
   }
}


/**
*  Ueberpruefung auf Zahl
*  @param feldName
*  @param text
*/
function isDigit(feldName, text)
{
   if( eval("document." + this.formName + ".elements['" + feldName + "'].value.length") < 1)
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgFalseColor);
      this.errors.push(text);
      this.felder.push("elements['" + feldName+ "']");
      return false;   
   }
   
   if (isNaN( eval("document." + this.formName + ".elements['" + feldName + "'].value") ) == true )
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgFalseColor);
      this.errors.push(text);
      this.felder.push("elements['" + feldName+ "']");
      return false;   
   }
   else
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgTrueColor);
   }
}

/**
*  Ueberpruefung auf Text
*  @param feldName
*  @param text
*/
function isText(feldName, text)
{ 
   if( this.re_text.test( eval("document." + this.formName + ".elements['" + feldName + "'].value") ) == false )
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgFalseColor);
	this.errors["elements['" + feldName+ "']"] = text;
      this.felder.push("elements['" + feldName+ "']");
      return false;
   }
   else
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgTrueColor);
   }
}

/**
*  Ueberpruefung auf Text innerhalb eines gewissen Bereichs
*  @param feldName
*  @param text
*  @param von
*  @param bis
*/
function isWithinRange(feldName, text, von, bis)
{
   if( (eval("document." + this.formName + ".elements['" + feldName + "'].value.length") < von) || (eval("document." + this.formName + ".elements['" + feldName + "'].value.length") > bis) )
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgFalseColor);
      this.errors.push(text);
      this.felder.push("elements['" + feldName+ "']");
      return false;
   }
   else
   {
      this.setColor(eval("document." + this.formName + ".elements['" + feldName+ "']"), this.bgTrueColor);
   }
}


/**
*  Ueberpruefung ob Fehler vorliegen
*  @return bool
*/
function isError()
{
   if (this.errors.length > 0)
   {
      return true;
   }
   else
   {
      return false;
   }
}

/**
*  Ausgabe aller Fehler in einem alert-Fenster
*/
function errorPrint()
{
   alleFehler = this.errors.join("\n");
   alert(alleFehler);
	
   (this.felder.length > 0 ) ? eval("document." + this.formName + "." + this.felder[0] + ".focus()") : "";
   (this.felder.length > 0 ) ? eval("document." + this.formName + "." + this.felder[0] + ".select()") : "";
}


/**
*  Fehlerhafte Felder werden farblich gekennzeichnet
*  entweder durch Farben aus Konstruktor oder
*  durch rot/weiss
*
*  @param el Elementname
*  @param bgColor Farbe des Elements
*/
function setColor(el, bgColor) 
{
  if (el.style) el.style.backgroundColor = bgColor;
}

