validators = {
  notnull: { regExp: /^\d+$/ },
  notone: { func: function (value) { 
    return (value != 1) && (value != -1);
  }},
  havevalue: { func: function (value) { 
    return (value != '');
  }},
  number: { regExp: /^\d+$/ },
  digits: { regExp: /^\d+(,\d+)?$/ },
  email: {regExp: /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/ },
  alpha: {regExp: /^[a-zA-z,Ã¤,Ã¼,Ã¶,Ã?,Ã?,Ã?,Ã?, ]+$/},
  plz: {regExp: /^\d{5}$/},
  labelchecked: {
    func: function (value, elm) { 
      return elm.checked;
    },
    unvalid: function(value, elm) {
      var box = document.getElementsByName('label_' + elm.getAttribute('name'))[0];
      box.className += ' invalid';   
      elm.focus();
    }
  }
}

function trim(s){
  return rtrim(ltrim(s));
}

function ltrim(s){
  var l=0;
  while(l < s.length && s[l] == ' '){l++; }
  return s.substring(l, s.length);
}

function rtrim(s){
  var r=s.length -1;
  while(r > 0 && s[r] == ' '){	r-=1;	}
  return s.substring(0, r+1);
}


function removeInvalid(owner) {
  var arr = owner.className.split(' ');
  var newArr = [];
  for (var i=0;i<arr.length;i++) {
    if (arr[i].toLowerCase() != 'invalid')
      newArr.push(arr[i]);
  }
  owner.className = newArr.join(' ');
}

function checkForm(aForm) {
  var haveErrors = false;

  for (var i=0;i<aForm.elements.length;i++) {
    if ( 
         (aForm.elements[i].getAttribute('required') == 'true') ||
         ( (aForm.elements[i].getAttribute('checktype') != null) && ( aForm.elements[i].value != '') )
       ) {
      var checkType = aForm.elements[i].getAttribute('checktype');
      var valid = false;
      var thisRegExp = validators[checkType]['regExp']; 
      if (thisRegExp)
        valid = thisRegExp.test(aForm.elements[i].value);
      else
        valid = validators[checkType]['func'](trim(aForm.elements[i].value), aForm.elements[i]);

      if (!valid) {
        if (validators[checkType]['unvalid']) {
          validators[checkType]['unvalid'](trim(aForm.elements[i].value), aForm.elements[i]);
        } else {
          aForm.elements[i].className += ' invalid';
          aForm.elements[i].onchange = function(){removeInvalid(this)};
          aForm.elements[i].focus();
        }    
        haveErrors = true;
      }
    }
  }
  return !haveErrors;
}
