function FormValidator (name) {

  this.formID = name;
  this.errorMessageID = 'errorMessageOutput';

  this.errorMessageID_mailingList = 'errorMessageMailingList';
  this.errorMessageID_catalogue = 'errorMessageCatalogue';
  this.errorMessageID_login = 'errorMessageLogin';

  this.errorMessage = '<table cellspacing="0" cellpadding="0" border="0"><tr><td valign="bottom" style="height:28px;"><font style="color: #f7941d; font-weight:bold;">Please make sure highlighted fields below are filled in</font></td></tr></table>';
  this.errorMessage_findUs = '<p style="color: #f7941d; font-weight:bold;">Please make sure highlighted fields below are filled in</p>';
  
  this.emailAddressError = function() {
    $G.processErrors(new Array('emailAddress'), this.errorMessageEmail, this.errorMessageID);
    $('#emailAddress').select();
  }
  
  this.resetErrors = function(fields) {
    if (undefined == fields || null == fields) {
      fields = this.getFields();
    }
    $G.resetErrors(fields, this.errorMessageID);
  }
   
  this.check = function(blurObj, f, e, blogPostID) {
    if (undefined != blurObj) {
      $('#'+blurObj).blur();
    } else {
      $('#mailingList').blur();
    }
    if (this.formID == 'joinMailingListForm') {
      var fields = this.getFields();
      this.errorMessageID = this.errorMessageID_mailingList;
      this.errorMessage = this.errorMessage_findUs;
    } else if (this.formID == 'requestCatalogueForm') {
   	  var fields = this.getFieldsCatalogue();
   	  this.errorMessageID = this.errorMessageID_catalogue;
   	  this.errorMessage = this.errorMessage_findUs;
    } else if (this.formID == 'requestLoginForm') {
      var fields = this.getFieldsLogin();
      this.errorMessageID = this.errorMessageID_login;
      this.errorMessage = this.errorMessage_findUs;
    } else if (this.formID == 'blogPost') {
      var fields = this.getFieldsBlog();
    } else {
      var fields = this.getFields();
    }

    if (undefined != f) {
      fields = f;
	  var comment = $('#' + f[0]).val();
	  var author = $('#' + f[1]).val();
	  $('#comment').val(comment);
	  $('#author').val(author);
    }

    if (undefined != e) {
      this.errorMessageID = e
    }

    if (undefined != blogPostID) {
      $('#blogPostID').val(blogPostID);
    }
    
    var defaults = this.getDefaults();
    if (this.formID == 'blogPost') {
      defaults = this.getDefaultsBlog();
    }
    
    this.resetErrors(fields);
    var errorArray = $G.validateFieldsWithDefaults(fields, defaults);

    if (errorArray.length == 0) {
       //alert('Submit');
      $G.submit(this.formID);
    } else {
       //alert('Error')
      $G.processErrors(errorArray, this.errorMessage, this.errorMessageID);
    }
  }
  
  this.getFields = function() {  // array of mandatory fields
    var fields = new Array('firstName', 'lastName', 'emailAddress', 'company', 'postcode');
    return fields;
  }
  
  this.getFieldsCatalogue = function() {  // array of mandatory fields
    var fields = new Array('catalogue_firstName', 'catalogue_lastName', 'catalogue_emailAddress', 'catalogue_company', 'catalogue_postcode', 'catalogue_contactNumber');
    return fields;
  }
  
  this.getFieldsLogin = function() {  // array of mandatory fields
    var fields = new Array('login_firstName', 'login_lastName', 'login_emailAddress', 'login_company', 'login_postcode', 'login_contactNumber');
    return fields;
  }

  this.getFieldsBlog = function() {  // array of mandatory fields
    var fields = new Array('comment', 'author');
    return fields;
  }

  this.getDefaultsBlog = function() {  // array of mandatory fields
    var defaults = new Array('...', 'YOUR NAME');
    return defaults;
  }

  this.getDefaults = function() {  // array of mandatory fields
    var defaults = new Array('FIRST NAME', 'LAST NAME', 'EMAIL', 'COMPANY', 'POST CODE', 'PHONE NUMBER');
    return defaults;
  }
}
