var FormValidation =
{
  init: function()
  {
    var forms = document.getElementsByTagName("form");
    
    for (var i = 0; i < forms.length; i++)
    {
      Core.addEventListener(forms[i], "submit", FormValidation.submitListener);
    }
  },

  rules:
  {
    requiredname: /./,
    requiredonename: /./,
    requiredaddy: /./,
    requiredcity: /./,
    requiredNotWhitespace: /\S/,
    requiredzip: /^\d*[1-9\-]\d*$/,
    positiveInteger: /^\d*[1-9]\d*$/,
    positiveOrZeroInteger: /^\d+$/,
    integer: /^-?\d+$/,
    decimal: /^-?\d+(\.\d+)?$/,
    requiredemail: /^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/,
    requiredphone: /^(\+\d+)?( |\-)?(\(?\d+\)?)?( |\-)?(\d+( |\-)?)*\d+$/
  },

  errors:
  {
    requiredname: "Please fill in both name fields.",
    requiredonename: "Please share your first name with us. This is completely private.",
    requiredaddy: "Please fill in the required address field.",
    requiredcity: "Please fill in the required city field.",
    requiredNotWhitespace: "Please fill in this required field.",
    requiredzip: "Please fill in the required zipcode field.",
    positiveInteger: "This field may only contain a positive whole number.",
    positiveOrZeroInteger: "This field may only contain a non-negative whole number.",
    integer: "This field may only contain a whole number.",
    decimal: "This field may only contain a number.",
    requiredemail: "Please enter a valid email address. Your information is safe with us.",
    requiredphone: "Please enter a valid telephone number in the Main Phone field. Your information is safe with us."
  },
  
  submitListener: function(event)
  {
    var fields = this.elements;
    
    for (var i = 0; i < fields.length; i++)
    {
      var className = fields[i].className;
      var classRegExp = /(^| )(\S+)\b/g;
      var classResult;
      
      while (classResult = classRegExp.exec(className))
      {
        var oneClass = classResult[2];
        var rule = FormValidation.rules[oneClass];
        if (typeof rule != "undefined")
        {
          if (!rule.test(fields[i].value))
          {
            fields[i].focus();
            alert(FormValidation.errors[oneClass]);
            Core.preventDefault(event);
            return;
          }
        }
      }
    }
  }
};

Core.start(FormValidation);