
var requiredFields = new Array("Name", "Vorname", "Adresse", "PLZ", "Ort", "Email");
var formName = 'hws_kontakt';
var emailField = 'Email';

function customValidation() {
  var legal = document.getElementById('legal');
  var txt = document.getElementById('legalText');
  if (legal && legal.checked == false) {
    markError(txt);
    txt.className = "legal fieldError";
    return false;
  } else {
    markValidated(txt);  
    txt.className = "legal";
    return true;
  }
}

function validateForm() {
  var i, el, n;
  form = document.getElementById(formName)
  var validated = true;
  //if (customValidation) {
    //validated = customValidation(form);
  //}

  for (i=0; i<requiredFields.length; ++i) {
    n = requiredFields[i];
    el = document.getElementById(n);
    if (!el) {
      alert("FORM ELEMENT NOT FOUND: "+n);
      continue;
    }
    
    hasError = checkField(el);

    if (hasError) {
      validated = false;
    }
  }
  return validated;
}

function checkField(el) {
  if (emailField && el.id == emailField) 
    hasError = checkEmail(el);
  else
  if (el.tagName == 'SELECT')
    hasError = checkSelect(el);
  else 
    hasError = checkInput(el);
 
  if (hasError) 
    markError(el);
  else 
    markValidated(el);

  el.onchange = changedField;
  return hasError;
}

function changedField() {
  checkField(this);
}

function checkInput(el) {
  return (el.value ? false : true); 
}

function checkSelect(el) {
  return (el.selectedIndex > 0 ? false : true); 
}

function checkEmail(el) {
  var value, at, dot;
  value = el.value;
  at = value.indexOf('@');
  dot = value.indexOf('.', at);
  return (at < 0 || dot < 0);
}

function markError(el) {
  var label = findLabelFor(el);
  label.className = "fieldError"; 
}

function markValidated(el) {
  var label = findLabelFor(el);
  label.className = "fieldValidated";
}

var _labels = false;
function findLabelFor(el) {
  var i, label
  if (!_labels)
    _labels = document.getElementsByTagName('LABEL');
  
  for (i=0; i < _labels.length; ++i) {
    label = _labels[i];
    if (label.htmlFor == el.id) {
      return label;
    }
  }
  // try previous element for this input field as label
  label = el.previousSibling;
  return label;
}
