/*
  Checkform - Validate forms
  Automatic applies to all forms on page when javascript is loaded.

  Usage:
  <script type="text/javascript" src="/checkform.js"></script>
  Set class "required" || "requiredemail" on input tag.
  Set class "required" on select tag, first <option> can not be selected, need to be "Select in list"

  <span> with id = inputtagID_label for labeltext that will be in error message, if not set, it will fall back and display id instead

  Changelog:
  070410 - rj - Rewrite, added support for select-one
  070226 - rj - Added to codelib

  Todo:
  Add support for minimum characters / field
*/
function validateForm(currentForm) {
  var blnvalidate = true;
  var elementsInputs;
  var error = "";

  for(var intCounter = 0; intCounter < currentForm.length; intCounter++) {
    if(currentForm.elements[intCounter].className != "") {
      var classes = currentForm.elements[intCounter].className.split(" ");
      for(var classCounter = 0; classCounter < classes.length; classCounter++) {
        if(classes[classCounter] == "required") {
          if(currentForm.elements[intCounter].getAttribute("type") == "text") {
            if(validateText(currentForm.elements, intCounter)) {
              blnvalidate = false;
              var label = currentForm.elements[intCounter].getAttribute("id")+'_label';
              if(document.getElementById(label)) {
                error += document.getElementById(label).innerHTML + ' saknas\n';
              } else {
                error += currentForm.elements[intCounter].getAttribute("id") + ' saknas\n';
              }
            }
          } else if(currentForm.elements[intCounter].getAttribute("type") == "checkbox") {
            if(validateCheckbox(currentForm.elements, intCounter)) {
              blnvalidate = false;
              var label = currentForm.elements[intCounter].getAttribute("id")+'_label';
              if(document.getElementById(label)) {
                error += document.getElementById(label).innerHTML + ' är ej ikryssad\n';
              } else {
                error += currentForm.elements[intCounter].getAttribute("id") + ' är ej ikryssad\n';
              }
            }
          } else if(currentForm.elements[intCounter].type == "select-one") {
            if(validateSelectOne(currentForm.elements, intCounter)) {
              blnvalidate = false;
              var label = currentForm.elements[intCounter].getAttribute("id")+'_label';
              if(document.getElementById(label)) {
                error += document.getElementById(label).innerHTML + ' är ej vald\n';
              } else {
                error += currentForm.elements[intCounter].getAttribute("id") + ' är ej vald\n';
              }
            }
          }
        } else if(classes[classCounter] == "requiredemail") {
          if(!validateText(currentForm.elements, intCounter)) {
            if(validateEmail(currentForm.elements, intCounter)) {
              blnvalidate = false;
              var label = currentForm.elements[intCounter].getAttribute("id")+'_label';
              if(document.getElementById(label)) {
                error += document.getElementById(label).innerHTML + ' är felaktig\n';
              } else {
                error += currentForm.elements[intCounter].getAttribute("id") + ' är felaktig\n';
              }
            }
          } else {
            blnvalidate = false;
            var label = currentForm.elements[intCounter].getAttribute("id")+'_label';
            if(document.getElementById(label)) {
              error += document.getElementById(label).innerHTML + ' saknas\n';
            } else {
              error += currentForm.elements[intCounter].getAttribute("id") + ' saknas\n';
            }
          }
        }
      }
    }
  }

  if(error != "") {
    alert("Följande fel uppstod när du fylde i formuläret\n\n"+error);
  }

  return blnvalidate;
}

function validateEmail(elementsInputs, intCounter) {
  var emailFilter=/^.+@.+\..{2,3}$/;
  if(!emailFilter.test(elementsInputs[intCounter].value)) {
    return true;
  }
}

function validateText(elementsInputs, intCounter) {
  if(elementsInputs[intCounter].value == "") {
    return true;
  }
}

function validateCheckbox(elementsInputs, intCounter) {
  if(elementsInputs[intCounter].checked == false) {
    return true;
  }
}

function validateSelectOne(elementsInputs, intCounter) {
  if(elementsInputs[intCounter].selectedIndex == 0) {
    return true;
  }
}


function applyOnSubmitToForms() {
  elementsForms = document.getElementsByTagName("form");
  for(var intCounter = 0; intCounter < elementsForms.length; intCounter++)	{
    elementsForms[intCounter].onsubmit = function () {
      if(!validateForm(this)) {
        return false;
      }
    }
  }
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if(typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

addLoadEvent(applyOnSubmitToForms);
