function validate(sender, checkArr, errorHd)
{
  var errorMsg = !errorHd
               ? new Array('Folgende Fehler sind aufgetreten:\n')
               : new Array(errorHd + '\n');
  var error    = false;
  var i, k, h, field, regExp, regExpObj, newValue;

  for (i = 0; i < checkArr.length; i++)
  {
    field = document.forms[sender.name].elements[checkArr[i][0]];

    /* Block 1 überprüft Felder, die ausgefüllt sein müssen */
    if (checkArr[i][1].indexOf('e') > -1)
    {
      if (field.length > 0)
      {
        k = 0;
        for(h = 0; h < field.length; h++)
        {
          if (field[h].checked)
          {
            k++;
          }
        }
        if(k == 0)
        {
          error = true;
          errorMsg.push(checkArr[i][2]);
        }
      }
      else if(field.type == "checkbox")
      {
        if (!field.checked)
        {
          error = true;
          errorMsg.push(checkArr[i][2]);
        }
      }
      else
      {
        if (!field.value)
        {
          error = true;
          errorMsg.push(checkArr[i][2]);
        }
      }
    }

    /* Block 2 überprüft, ob die Emailadresse formal richtig ist */
    else if (checkArr[i][1].indexOf('m') > -1)
    {
      if (field.value)
      {
        var mailUser   = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
        var mailDomain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
            regExp     = "^" + mailUser + "\@" + mailDomain + "$";
            regExpObj  = new RegExp(regExp);
        if (!regExpObj.test(field.value))
        {
          error = true;
          errorMsg.push(field.value + " " + checkArr[i][2]);
        }
      }
    }

    /* Block 3 überprüft Felder, deren Wert eine Zahl sein muss */
    else if (checkArr[i][1].indexOf('n') >- 1)
    {
      if(field.value)
      {
        regExp    = /^-?[0-9]+(,[0-9]+|.[0-9]+)?$/gi;
        regExpObj = new RegExp(regExp);

        if (!regExpObj.test(field.value))
        {
          error = true;
          errorMsg.push(checkArr[i][2]);
        }
      }
    }

    /* Block 4 überprüft Wert anhand eines regulären Audrucks auf bestimmte Muster */
    else if (checkArr[i][1].indexOf('r')>-1)
    {
      regExp = checkArr[i][3];
      if (field.value)
      {
        if (!regExp.test(field.value))
        {
          error = true;
          errorMsg.push(checkArr[i][2]);
        }
      }
    }

    /* Block 5 überprüft Felder, die als Preis formatiert sein müssen, ändert die Formatierung eventuell */
    else if (checkArr[i][1].indexOf('p')>-1)
    {
      var nanTest = field.value.replace(/,-{1,}|\.-{1,}/, "");
      var num     = nanTest.match(/[^0-9,\.]/gi)
      var sep     = checkArr[i][1].substr(1,1)
                  ? checkArr[i][1].substr(1,1)
                  : ',';
      if (field.value)
      {
        newValue = field.value.replace(/\./,',');
        if (newValue.indexOf(',') == -1)
        {
          field.value = newValue + sep + '00';
        }
        else if (newValue.indexOf(",--") > -1)
        {
          field.value = newValue.replace(/,--/,sep + '00');
        }
        else if (newValue.indexOf(",-") > -1)
        {
          field.value = newValue.replace(/,-/,sep + '00');
        }
        else if (!newValue.substring(newValue.indexOf(',') + 2))
        {
          error = true;
          errorMsg.push(checkArr[i][2]);
        }
        else if (newValue.substring(newValue.indexOf(',') + 3) != '')
        {
          error = true;
          errorMsg.push(checkArr[i][2]);
        }
        else if (num!=null)
        {
          error = true;
          errorMsg.push(checkArr[i][2]);
        }
      }
    }

    /* Block 6 überprüft Namensfelder, und korrigiert evtl. die Groß-/Kleinschreibung */
    else if (checkArr[i][1].indexOf('c') > -1)
    {
      var nobleArr  = new Array("de", "von", "van", "der", "d", "la", "da", "of");
      var newValue  = '';
      var valueArr  = field.value.split(/\b/);
      for (k = 0; k < valueArr.length; k++)
      {
        newValue += valueArr[k].substr(0,1).toUpperCase() + valueArr[k].substring(1);
      }
      for(k = 0; k < nobleArr.length; k++)
      {
        regExpObj  = new RegExp ("\\b" + nobleArr[k] + "\\b","gi");
        newValue   = newValue.replace(regExpObj, nobleArr[k]);
      }
      field.value = newValue;
    }
  }

  /* im Fehlerfall werden hier die gesammelten Fehlermeldungen verarbeitet und angezeigt.
   Wenn dasFormular ohne Beanstandung ist, wird es übertragen */
  if (error)
  {
    errorMsg = errorMsg.join('\n\xB7 ');
    alert(errorMsg);
    return false;
  }
  else
  {
    return true;
  }
}