var requiredFields = new Array("Sprache", "Anrede", "Name", "Vorname", "Firma", "Email", "Strasse", "PLZ", "Ort", "Telefon");
var formName = 'webform_mailing';
var emailField = 'Email';

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

function telValidation() {
  var Tel = document.getElementById('Tel');
  var Probefahrt = document.getElementById('Probefahrt');
  
  if(checkSelect(Probefahrt)) {
	checkTel(Tel);
  }
}

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 checkTel(el) {
  var value;
  if (el.value.length > 22 || el.value.length < 9) {
	el.className = "legal fieldError";
    return false;
  }
  for (var i = 0; i < el.value.length; i++) {
         if ((el.value.charAt(i) < "0" || el.value.charAt(i) > "9") &&
             el.value.charAt(i) != "-" && el.value.charAt(i) != "/" &&
             el.value.charAt(i) != "(" && el.value.charAt(i) != ")" &&
			 el.value.charAt(i) != "(" && el.value.charAt(i) != " " &&
             el.value.charAt(i) != "+") {
			 el.className = "legal fieldError";
             return false;
         }
  }
  return true;
}


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;
}
