/**
*  Klasse zur Formularueberpruefung  
*  Ralf Weber <ralf@weberr.de>
*  Version 1.1 (22.08.2002)
*
*  Ueberpruefung auf 
*     Leeres Feld
*     Zahlen
*     EMail
*     Checkboxen, Radioboxen
*     SelectListen
*     AlphaZeichen
*     innerhalb einer bestimmten Menge
*     eines regulaeren Ausdrucks
*
*  Werte werden ueberprueft, bei Fehler wird dem Array errors die Fehlermeldung hinzugefuegt,
*  dem Array felder die Feldnamen.
*  Liegt ein Fehler vor, werden alle Fehler in einem alert-Fenster ausgegeben
*
*  ZUSATZ:
*  Fehlerhaftes Feld bekommt Focus. Steht Text darin, wird es selektiert.
*
*  Anwendung:
   
   Pfad zur JS-Klasse
   <script language="JavaScript" src="formValidator.js" type="text/javascript"></script>
   
   <script language="JavaScript" type="text/javascript">
   function validate()
   {
      // neues Objekt        'formularName'
      v = new formValidator('reservierung');
     
      v.isEmpty('vorname', 'Bitte geben Sie Ihren Vornamen ein!');
      v.isText('vorname', 'Bitte geben Sie Buchstaben in Vornamen ein!');
      v.isEmpty('fax', 'Bitte FaxZahl!');
      v.isDigit('fax', 'Keine FaxZahl!');
      v.isDigit('plz', 'Keine PLZZahl!');
      v.isWithinRange('plz', '5 Stellen', 1, 5)
      v.isEmail('email', 'Bitte geben Sie eine gültige Email-Adresse ein!');
      v.isSelected('liste', 'Liste selektieren!');
      v.isChecked('radioBox', 'Bitte radio checken!');
      v.isChecked('box', 'Bitte mind. 1 box checken!');   
      v.isRegexTrue('reservierung_regex', /\d/, '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
*/ 
function formValidator(formName)
{
   this.formName = formName;

   //	methoden
   this.isEmpty = isEmpty;
   this.isError = isError;
   this.errorPrint = errorPrint;
   this.isDigit = isDigit;
   this.isEmail = isEmail;
   this.isChecked = isChecked;
   this.isSelected = isSelected;   
   this.isText = isText;
   this.isWithinRange = isWithinRange;
   this.isRegexTrue = isRegexTrue;
   
   //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,3})$/;   
   this.re_email = re_email;
   var re_text = /^[a-zA-Z]+$/;
   this.re_text = re_text;

}


/**
*  Ueberpruefung auf leeres Feld
*  @param feldName
*  @param text
*/
function isEmpty(feldName, text)
{
   if( eval("document." + this.formName + "." + feldName + ".value.length") < 1)
   {
      this.errors.push(text);
      this.felder.push(feldName);
      return false;
   }
}

/**
*  Ueberpruefung auf E-Mail
*  @param feldName
*  @param text
*/
function isEmail(feldName, text)
{
   if( this.re_email.test( eval("document." + this.formName + "." + feldName + ".value") ) == false )
   {
      this.errors.push(text);
      this.felder.push(feldName);
      return false;
   }

}

/**
*  Ueberpruefung anhand eines RegEx
*  @param feldName
*  @param RegEx
*  @param text
*/
function isRegexTrue(feldName, regex, text)
{
   if( regex.test( eval("document." + this.formName + "." + feldName + ".value") ) == false )
   {
      this.errors.push(text);
      this.felder.push(feldName);
      return false;
   }
}

/**
*  Ueberpruefung auf Checkbox
*  @param feldName
*  @param text
*/
function isChecked(feldName, text)
{
   var radios = new Array();
   
   for(i = 0; i < eval("document." + this.formName + "." + feldName + ".length"); i++)
   {
      if( eval("document." + this.formName + "." + feldName + "[i].checked") == true)
      {
         radios.push(i);
      }
   }
   
   if (radios.length < 1)
   {
      this.errors.push(text);
      return false;
   }
}


/**
*  Ueberpruefung auf Select-Liste
*  @param feldName
*  @param text
*/
function isSelected(feldName, text)
{
   if( eval("document." + this.formName + "." + feldName + ".selectedIndex") == 0)
   {
      this.errors.push(text);
      return false;
   }
}


/**
*  Ueberpruefung auf Zahl
*  @param feldName
*  @param text
*/
function isDigit(feldName, text)
{
   if (isNaN( eval("document." + this.formName + "." + feldName + ".value") ) == true )
   {
      this.errors.push(text);
      this.felder.push(feldName);
      return false;   
   }
}

/**
*  Ueberpruefung auf Text
*  @param feldName
*  @param text
*/
function isText(feldName, text)
{ 
   if( this.re_text.test( eval("document." + this.formName + "." + feldName + ".value") ) == false )
   {
      this.errors.push(text);
      this.felder.push(feldName);
      return false;
   }
}

/**
*  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 + "." + feldName + ".value.length") < von) || (eval("document." + this.formName + "." + feldName + ".value.length") > bis) )
   {
      this.errors.push(text);
      this.felder.push(feldName);
      return false;
   }
}


/**
*  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()") : "";
}
