// assumes there exists 2 spans - for error text and check results.
var ERROR_PREFIX = "Error";
var CHECK_PREFIX = "Check";

var ERROR_CLASS_NAME = "errorBox";
var DEFAULT_CLASS_NAME = "forms";

var exclamationImage = "<img src='/images/exclamation.jpg' width='14' height='14' />";

var error = false;

function getErrorBox(elementName) {
  return document.getElementById(elementName + ERROR_PREFIX);
}

function getCheckBox(elementName) {
  return document.getElementById(elementName + CHECK_PREFIX);
}

function setErrorMessage(element, messageHandler, message) {
  if (message != undefined && message != "") {
    error = true;
    messageHandler.innerHTML = "<span class='error'>" + message + "&nbsp;</span>"; 
    if (element.type !='checkbox') {
      element.className = ERROR_CLASS_NAME;
    }
  }
  else {
    messageHandler.innerHTML = "&nbsp;";
    if (element.type !='checkbox') {
      element.className = DEFAULT_CLASS_NAME;
    }
  }
}

function setSuccessMessage(messageHandler, message) {
  if (message != undefined && message != "") {
    messageHandler.innerHTML = "<span class='success'>" + message + "</span>"; 
  }
  else {
    messageHandler.innerHTML = "&nbsp;";
  }
}

function isSet(variable) {
  if (variable == undefined) {  
    return false;
  }
  if (variable.length != undefined ){
    return variable.length > 0;
  }
  return (variable != "" || variable != 0);
}

function validateEmailField(fieldName) {
  var field = document.getElementById(fieldName);
  var fieldError = getErrorBox(fieldName);
  var fieldCheck= getCheckBox(fieldName);
  return validateEmail(field, fieldError, fieldCheck);
}

function checkText(elementName, isRequired, maxLength, minWords, maxWords, separator){
  var elementToCheck = document.getElementById(elementName);
  
  var errorBox = getErrorBox(elementName);
  var checkBox = getCheckBox(elementName);
  
  var textToCheck = elementToCheck.value;
  
  if(textToCheck == undefined && isRequired) {
    setErrorMessage(elementToCheck, errorBox, "Cannot be empty.");
    checkBox.innerHTML = exclamationImage;
    return false;
  }
  var textLength = textToCheck.length;
  
  if (isRequired || textLength > 0){
    if (isSet(maxLength) && textLength > maxLength){
      setErrorMessage(elementToCheck, errorBox, "Text is too long. Please, make it shorter.");
      checkBox.innerHTML = exclamationImage;
      return false;
    }
    if (isSet(separator)) {
      var words = textToCheck.split(separator);
      if (isSet(maxWords) && words.length > maxWords) {
        setErrorMessage(elementToCheck, errorBox, "You have entered more than " + maxWords + " words.");
        checkBox.innerHTML = exclamationImage;
        return false;
      }
      if (isSet(minWords) && words.length < minWords) {
        setErrorMessage(elementToCheck, errorBox, "You have entered less than " + minWords + " words.");
        checkBox.innerHTML = exclamationImage;
        return false;
      }
    }
    if (isRequired && textLength == 0) {
      setErrorMessage(elementToCheck, errorBox, "Cannot be empty.");
      checkBox.innerHTML = exclamationImage;
      return false;
    }
    setErrorMessage(elementToCheck, errorBox, "");
    setSuccessMessage(checkBox, "OK");
    return true;
  }
  else {
  
  }
  return false;
}

function checkIsOptionSelected(fieldName, message) {
  var field = document.getElementById(fieldName);
  var errorBox = getErrorBox(fieldName);
  var checkBox = getCheckBox(fieldName);
  if (field.type == 'select-one') {
    var value = field.options[field.selectedIndex].value;
    if (isSet(value)){
      setErrorMessage(field, errorBox, "");
      setSuccessMessage(checkBox, "OK");
    }
    else{
      setErrorMessage(field, errorBox, message);
      checkBox.innerHTML = exclamationImage;
    }
  }
  return true;
}

function checkRequired(fieldName, message) {
  var field = document.getElementById(fieldName);
  var errorBox = getErrorBox(fieldName);
  var checkBox = getCheckBox(fieldName);
  if (field.type == 'checkbox' && field.disabled == false) {
      if(field.checked){
        setErrorMessage(field, errorBox, "");
        setSuccessMessage(checkBox, "OK");
        return true;
      }
      else {
        setErrorMessage(field, errorBox, message);
        setSuccessMessage(checkBox, "");
        return false;
      }
  }
  setErrorMessage(field, errorBox, "");
  setSuccessMessage(checkBox, "OK");
  return true;
}

function validateBeforeSubmit(form) {
  error = false;
  for( var i = 0; i < form.elements.length; i++) {
    if (typeof form.elements[i].onblur == "function") {
      form.elements[i].onblur();
    }
  }
  return !error;
}
