// -----------------------------------------------------------------------------

function Validate (iForm, iCheckArray) {

  var kMandatory    = 'Eintrag ist obligatorisch';
  var lErrorMessage = '';
  var lErrorElem    = null;
  var lLabel;
  var lElementName;
  var lElementType;
  var lMandatory;
  var i;
  var j;
  var lSelectedIndex;
  var lValue;
  var lRbutErrorElem;
  var lRbutChecked;

  for (i = 0 ; i < iCheckArray.length ; i++) {

    lLabel       = iCheckArray[i][0];
    lElementName = iCheckArray[i][1];
    lElementType = iCheckArray[i][2];
    lMandatory   = iCheckArray[i][3];
    lElement     = iForm.elements[lElementName];

    switch (lElementType) {
      case 'text':
      case 'mail':
      case 'date':
      case 'intg':
        lValue = lElement.value;
        if (lMandatory & (! lValue)) {
          lErrorMessage += '\n' + lLabel + ': ' + kMandatory;
          if (! lErrorElem) lErrorElem = lElement;
        };
        if (lValue) {
          // wert eingegeben, nun muss die Syntax noch stimmen
          if (lElementType == 'mail') {
            if (! lValue.match (/^[^@]+@[^@]+\.[^@]+$/)) {
              lErrorMessage += '\n' + lLabel + ': Ungueltige E-Mail-Adresse';
              if (! lErrorElem) lErrorElem = lElement;
            };
          };
          if (lElementType == 'date') {
            if (lDateArray = lValue.match (/[0-9]+/g)) {
              // in lDateArray befinden sich Tag, Monat, Jahr (reine Zahlen)
              // Tag ist immer vorhanden
              // fehlende Monat/Jahr-Werte werden durch die aktuellen Werte ersetzt
              var lDay   = new Number (lDateArray[0]);
              var lMonth = new Number (lDateArray[1]);
              var lYear  = new Number (lDateArray[2]);
              var lToday = new Date ();
              if (isNaN (lMonth)) lMonth = lToday.getMonth () + 1;  // zero-based...
              if (isNaN (lYear )) lYear  = lToday.getFullYear ();
              if (lYear < 100)    lYear += 2000;
              var lDate = new Date (lYear, lMonth - 1, lDay);
              if (isNaN (Number (lDate))) {
                lDate = null;
              } else {
                // our date is valid
                lElement.value = lDate.getDate () + '.' + (lDate.getMonth () + 1) + '.' + lDate.getFullYear ();
              };
            } else {
              lDate = null;
            };
            if (! lDate) {
              lErrorMessage += '\n' + lLabel + ': Ungueltiges Datum';
              if (! lErrorElem) lErrorElem = lElement;
            };
          };
          if (lElementType == 'intg') {
            if (lInteger = lValue.match (/^[0-9]+/)) {
              lElement.value = lInteger[0];
            } else {
              lErrorMessage += '\n' + lLabel + ': Ungueltige Zahl';
              if (! lErrorElem) lErrorElem = lElement;
            };
          };
        };
        break;
      case 'list':
        // in einer Liste muessen wir auf die ausgewaehlten Optionen testen
        lSelectedIndex = lElement.selectedIndex;
        if (lSelectedIndex == -1) {
          // wenn in einer Liste kein Eintrag ausgewaehlt ist
          lValue = null;
        } else {
          lValue = lElement.options[lSelectedIndex].value;
        };
        if (lMandatory & (! lValue)) {
          lErrorMessage += '\n' + lLabel + ': ' + kMandatory;
          if (! lErrorElem) lErrorElem = lElement;
        };
        break;
      case 'rbut':
      case 'cbox':
        if (lMandatory) {
          // alle elements mit dem Namen "lElementName" durchforsten
          lRbutChecked   = false;
          lRbutErrorElem = null;
          for (j = 0 ; j < iForm.elements.length ; j++) {
            with (iForm.elements[j]) {
              if (name == lElementName) {
                if (checked) {
                  // dieses Element ist ausgewaehlt, wir koennen aufhoeren.
                  lRbutChecked   = true;
                  lRbutErrorElem = null;
                  break;
                } else {
                  if (! lRbutErrorElem) lRbutErrorElem = iForm.elements[j];
                };
              };
            };
          };
          if (! lRbutChecked) {
            // kein Element ausgewaehlt
            lErrorMessage += '\n' + lLabel + ': ' + kMandatory;
            if (! lErrorElem) lErrorElem = lRbutErrorElem;
          };
        };
        break;
      default:
    };

  };

  if (lErrorMessage) {
    alert ('Bitte kontrolliere die folgenden Angaben:' + lErrorMessage);
    lErrorElem.focus ();
    return false;
  } else {
    return true;
  };

};  // Validate

// -----------------------------------------------------------------------------
