var mails = true;
var textfields = true;
var zips = true;
var dropdowns = true;
var numbers = true;
var phoneNumbers = true;
var creditCards = true;
var dollarAmounts = true;

function checkMails() {
  var inputs = document.getElementsByTagName('input');
  var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  for (var i=0; i<inputs.length; i++) {
    var input = inputs[i];
    if (input.className.indexOf("input_email")!=-1) {
      if (filter.test(input.value)) { input.className = "input_email"; mails = true; }
        else { input.className += " error"; mails = false; }
    }
  }
}

function checkTextfields() {
  var inputs = document.getElementsByTagName('input');
  for (var i=0; i<inputs.length; i++) {
    var input = inputs[i];
    if (input.className.indexOf("input_textfield")!=-1) {
      if (input.value) { input.className = "input_textfield"; textfields = true; }
        else { input.className += " error"; textfields = false; }
    }
  }
}

function checkZips() {
  var inputs = document.getElementsByTagName('input');
  var filter = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
  for (var i=0; i<inputs.length; i++) {
    var input = inputs[i];
    if (input.className.indexOf("input_zipcode")!=-1) {
      if (filter.test(input.value)) { input.className = "input_zipcode"; zips = true; }
        else { input.className += " error"; zips = false; }
    }
  }
}

function checkDropdowns() {
  var selects = document.getElementsByTagName('select');
  for (var i=0; i<selects.length; i++) {
    var select = selects[i];
    select.className.indexOf("input_select")
    if (select.className.indexOf("input_select")!=-1) {
      if (select.selectedIndex!=0) { select.className = "input_select"; dropdowns = true; }
        else { select.className += " error"; dropdowns = false; }
    }
  }
}

function checkNumbers() {
  var inputs = document.getElementsByTagName('input');
  var filter  = /^[-+]?[1-9]\d*\.?[0]*$/;
  for (var i=0; i<inputs.length; i++) {
    var input = inputs[i];
    if (input.className.indexOf("input_number")!=-1) {
      if (filter.test(input.value)) { input.className = "input_number"; numbers = true; }
        else { input.className += " error"; numbers = false; }
    }
  }
}

function checkPhoneNumbers() {
  var inputs = document.getElementsByTagName('input');
  var filter  = /^(\d{3}-\d{3}-\d{4})*$/;
  for (var i=0; i<inputs.length; i++) {
    var input = inputs[i];
    if (input.className.indexOf("input_phoneNumber")!=-1) {
      if ((filter.test(input.value)) && (input.value != "")) { input.className = "input_phoneNumber"; phoneNumbers = true; }
        else { input.className += " error"; phoneNumbers = false; }
    }
  }
}

function checkCreditCards() {
  var inputs = document.getElementsByTagName('input');
  var filter  = /^(\d{4}-){3}\d{4}$|^(\d{4} ){3}\d{4}$|^\d{16}$/;
  for (var i=0; i<inputs.length; i++) {
    var input = inputs[i];
    if (input.className.indexOf("input_creditCard")!=-1) {
      if ((filter.test(input.value)) && (input.value != "")) { input.className = "input_creditCard"; creditCards = true; }
        else { input.className += " error"; creditCards = false; }
    }
  }
}

function checkDollarAmounts() {
  var inputs = document.getElementsByTagName('input');
  var filter = /^((\d*\.{1}\d{2}){1})$/;
  for (var i=0; i<inputs.length; i++) {
    var input = inputs[i];
    if (input.className.indexOf("input_dollarAmount")!=-1) {
      if ((filter.test(input.value)) && (input.value != "")) { input.className = "input_dollarAmount"; dollarAmounts = true; }
        else { input.className += " error"; dollarAmounts = false; }
    }
  }
}

function validate() {
  checkTextfields();
  checkMails();
  checkZips();
  checkDropdowns();
  checkNumbers();
  checkPhoneNumbers();
  checkCreditCards();
  checkDollarAmounts();
  if(mails && textfields && zips && dropdowns && numbers && phoneNumbers && creditCards && dollarAmounts) return true;
    else return false;
}

function initValidatinator() {
  if (!document.getElementsByTagName){ return; }
    var inputs = document.getElementsByTagName('input');
    for (var i=0; i<inputs.length; i++) {
      var input = inputs[i];
      if (input.className.indexOf("validatinator")!=-1){
        input.onclick = function () { 
          if(validate()) { return true; }
            else {
              alert("Invalid information has been outlined in red."); 
              return false; }
          }
      }
	}
}  


window.onload = function() {
  initValidatinator();
};