// ***********************************************************************
// *                                                                     *
// *  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                                  *
// *                                                                     *
// *  (c) 03.02.2005 Cynapsis Kommunikationsagentur / F. Legge           *
// *                                                                     *
// ***********************************************************************

// 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')
           {
              errors += '- ' + nam + newLine;
              windowHeight = windowHeight + lineHeight;
           }
           
           val = false;
        }
        else if (val.type=="checkbox")
        {
           // wenn Eingabefeld vom Typ einzelne Checkbox
           
           if (bez!="") { nam = bez; } else { nam = val[0].name; }
           check = val.checked;
           
           if (!check && test.charAt(0) == 'R')
           {
              errors += '- ' + nam + 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))
              {
                 errors += '- ' + nam + ' muss eine Email sein.' + newLine;
                 windowHeight = windowHeight + lineHeight;
              }
              else if (expression.exec(val)<1)
              {
                 errors += '- ' + nam + ' muss eine gültige Email sein.' + newLine;
                 windowHeight = windowHeight + lineHeight;
              }
           }
           else if (test!='R')
           {
              num = parseFloat(val);

              if (val!=''+num)
              {
                 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)
                 {
                    errors += '- ' + nam + ' muss eine Zahl zwischen ' + min + ' und ' + max + ' sein.' + newLine;
                    windowHeight = windowHeight + lineHeight;
                 }
              }
           }
        }
        else if (typeof(val)!='undefined' && val.length>=0 && test.charAt(0)=='R')
        {
            errors += '- ' + nam + 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 alert('Bitte überprüfen Sie Ihre Eingaben:' + newLine + errors);
  }
  document.returnValue = (errors == '');
}

