var contactForm = {
  id: "contact-form",
  domElement: null,
  fields: {
    'name': {
      'required': true
    },
    'email': {
      'required': true,
      'regexp': /^\s*(([!#\$%&\'*+\-\/=?^`{|}~\w]+)(?:\.([!#\$%&\'*+\-\/=?^`{|}~\w]+))*@[!#\$%&\'*+\-\/=?^`{|}~\w]+(?:\.[!#\$%&\'*+\-\/=?^`{|}~\w]+)*\.[a-zA-Z]{2,4})\s*$/i
    },
    'telephone': {
      'required': true
    }
  },
  preamble: "There were errors in submitting your details:",
  postamble: "Please check and try again.",
  messages: {
    "name": {
      "required": "Your name is required."
    },
    "email": {
      "required": "Your e-mail address is required.",
      "regexp": "Your e-mail address is not valid."
    },
    "telephone": {
      "required": "Your telephone number is required."
    }
  },
  load: function() {
    contactForm.domElement = document.getElementById(contactForm.id);
    
    if (contactForm.domElement.addEventListener) {
      contactForm.domElement.addEventListener('submit', contactForm.submitEvent, false);
      
    } else if (contactForm.domElement.attachEvent) {
      contactForm.domElement.attachEvent('onsubmit', contactForm.submitEvent);
      
    } // end if (...)
    
  },
  submitEvent: function(e) {
    if (!e) var e = window.event;
    
    try {
      contactForm.validate();
      
    } catch (s) {
      if (e.cancelBubble) e.cancelBubble = true;
      if (e.stopPropagation) e.stopPropagation();
      if (e.preventDefault) e.preventDefault();
      
      alert(contactForm.preamble + "\n\n" + s.join("\n") + "\n\n" + contactForm.postamble);
      
      return false;
      
    } // end try
    
    return true;
    
  },
  validate: function() {
    var message = [];
    
    for (var field in this.fields) {
      if (!this.domElement[field]) continue;
      
      if (this.fields[field].required && this.fields[field].required == true) {
        if (this.domElement[field].value.length == 0) {
          if (this.messages[field] && this.messages[field]["required"]) {
            message.push(this.messages[field]["required"]);
            continue;
            
          } // end if (this.messages[field] && this.messages[field]["required"])
          
        } // end if (this.domElement[field].value.length == 0)
        
      } // end if (this.fields[field].required && this.fields[field].required == true)
      
      if (this.fields[field]["regexp"]) {
        if (this.fields[field]["regexp"].test(this.domElement[field].value) == false) {
          if (this.messages[field] && this.messages[field]["regexp"]) {
            message.push(this.messages[field]["regexp"]);
            
          } // end if (this.messages[field] && this.messages[field]["regexp"])
          
        } // end if (this.fields[field]["regexp"].test(this.domElement[field].value) == false)
        
      } // end if (this.fields[field]["regexp"])
      
    } // end for (var field in this.fields)
    
    if (message.length > 0) throw message;
    
  }
};

if (document.getElementById) {
  if (window.addEventListener) {
    window.addEventListener('load', contactForm.load, false);
    
  } else if (window.attachEvent) {
    window.attachEvent('onload', contactForm.load);
    
  } // end if (...)
  
} // end if (document.getElementById)
