// ****************************************
// *                                      *
// *  Validierung von Formular-Eingaben:  *
// *  ----------------------------------  *
// *                                      *
// *  Aufruf der Funktion "validateForm"  *
// *  durch "onSubmit" im <form>-Tag.     *
// *                                      *
// *  3 Uebergabeparameter pro Feld:      *
// *  ------------------------------      *
// *  Parameter 1 =Name des Feldes       *
// *  Parameter 2 =Bez. Eingabefeld      *
// *  Parameter 3 =R für Required        *
// *                isEmail für Email     *
// *                inRange für Bereich   *
// *                                      *
// ****************************************
// validateForm('name','Name','R','vorname','Vorname','R','email','E-Mail','RisEmail','zahl','Anzahl','RinRange1:20');
// return document.returnValue
function findObj(n, doc)
{
  var pos, i, obj;
  if (!doc) doc =document;
  if ((pos=n.indexOf("?"))>0 && parent.frames.length)
  {
     doc =parent.frames[n.substring(pos+1)].document;
     n =n.substring(0,pos);
  }
  if (!(obj=doc[n]) && doc.all) obj =doc.all[n];
  for (i=0; !obj&&i<doc.forms.length; i++)
  {
     obj =doc.forms[i][n];
  }
  for (i=0; !obj&&doc.layers&&i<doc.layers.length; i++)
  {
     obj =findObj(n,doc.layers[i].document);
  }
  return obj;
}
function validateForm()
{
  var i, p, q, nam, test, num, min, max, errors='', args =validateForm.arguments;
  var newLine         ="\n";            // Zeichencode fuer Zeilenumbruch (\n oder <br>)
  var blnPopUp        =false;           // TRUE =Fehlermeldung im PopUp, FALSE =Ausgabe mit "alert")
  var errorPage       ="errorpage.cfm"  // Dateiname des PopUp-Fensters
  var windowHeight    =112;             // Fensterhoehe (wenn Fehlermeldung im PopUp)
  var minWindowHeight =160;             // minimale Fensterhoehe (wenn Fehlermeldung im PopUp)
  var lineHeight      =12;              // Zeilenhoehe (wenn Fehlermeldung im PopUp)
  for (i=0; i<(args.length-1); i+=3)
  {
     val   =findObj(args[i]);
     bez   =args[i+1];
     test  =args[i+2];
     if (val)
     {
        if (bez!="") { nam =bez; } else { nam =val.name; }
        if (val.length && (val[0].type=="checkbox" || val[0].type=="radio"))
        {
           // wenn Eingabefeld vom Typ Checkbox oder Radiobutton
           check =false;
           if (bez!="") { nam =bez; } else { nam =val[0].name; }
           for (j=0;j<val.length;j++)
           {
              if(!check) check =val[j].checked;
           }
           if (!check && test.charAt(0) =='R')
           {
              if (document.language=="en")
                 errors +='- '+nam+' is needed.' + newLine;
              else
                 errors +='- '+nam+' wird benötigt.' + newLine;
              windowHeight =windowHeight + lineHeight;
           }
           val =false;
        }
        else if (val.type=="select-one")
        {
           val=val.options[val.selectedIndex].value;
        }
        else val =val.value;
        if (val && val!="")
        {
           if (test.indexOf('isEmail')!=-1)
           {
              p =val.indexOf('@');   //auf @-Zeichen pruefen
              expression =/^[_\.0-9A-Za-z-]+@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{2,4}$/;
              if (p<1 || p==(val.length-1))
              {
                 if (document.language=="en")
                    errors +='- ' + nam + ' must be an Email.' + newLine;
                 else
                    errors +='- ' + nam + ' muss eine Email sein.' + newLine;
                 windowHeight =windowHeight + lineHeight;
              }
              else if (expression.exec(val)<1)
              {
                 if (document.language=="en")
                    errors +='- ' + nam + ' must be a valid Email.' + newLine;
                 else
                    errors +='- ' + nam + ' muss eine gültige Email sein.' + newLine;
                 windowHeight =windowHeight + lineHeight;
              }
           }
           else if (test!='R')
           {
              num =parseFloat(val);
              if (val!=''+num)
              {
                 if (document.language=="en")
                    errors +='- ' + nam + ' must be a number.' + newLine;
                 else
                    errors +='- ' + nam + ' muss eine Zahl sein.' + newLine;
                 windowHeight =windowHeight + lineHeight;
              }
              if (test.indexOf('inRange') !=-1)
              {
                 p   =test.indexOf(':');
                 min =test.substring(8,p);
                 max =test.substring(p+1);
                 if (num<min || max<num)
                 {
                    if (document.language=="en")
                       errors +='- ' + nam + ' must be a number between ' + min + ' and ' + max + '.' + newLine;
                    else
                       errors +='- ' + nam + ' muss eine Zahl zwischen ' + min + ' und ' + max + ' sein.' + newLine;
                    windowHeight =windowHeight + lineHeight;
                 }
              }
           }
        }
        else if (val.length>=0 && test.charAt(0) =='R')
        {
            if (document.language=="en")
               errors +='- '+nam+' is needed.' + newLine;   //Pflichtfeld
            else
               errors +='- '+nam+' wird benötigt.' + newLine;   //Pflichtfeld
            windowHeight =windowHeight + lineHeight;
        }
     }
  }
  if (errors)
  {
     if (windowHeight < minWindowHeight) windowHeight =minWindowHeight;
     if (blnPopUp) window.open(errorPage+'?error='+escape(errors),'mailresponse','width=280,height='+windowHeight);
     else
     {
        if (document.language=="en")
           alert('The following Error occured:' + newLine + errors);
        else
           alert('Der folgende Fehler ist aufgetreten:' + newLine + errors);
     }
  }
  document.returnValue =(errors =='');
}

