
jQuery(function($){
  
  $('#newsletter_id').parents('form').validate({
    rules: {
        
        'newsletter[id]': {
                              
        },  
        'newsletter[account_number]': {
                      digits: true, required: true        
        },  
        'newsletter[firstname]': {
                      required: true, maxlength: 100        
        },  
        'newsletter[lastname]': {
                      required: true, maxlength: 100        
        },  
        'newsletter[salon_spa_name]': {
                      maxlength: 100        
        },  
        'newsletter[email_address]': {
                      email: true, required: true        
        },  
        'newsletter[website_url]': {
                      maxlength: 100        
        },  
        'newsletter[address_1]': {
                      required: true, maxlength: 100        
        },  
        'newsletter[address_2]': {
                      maxlength: 100        
        },  
        'newsletter[city]': {
                      required: true, maxlength: 100        
        },  
        'newsletter[state_code]': {
                              
        },  
        'newsletter[zipcode]': {
                      required: true, maxlength: 20        
        },  
        'newsletter[country_code]': {
                              
        },  
        'newsletter[telephone_number]': {
                      required: true, maxlength: 100        
        },  
        'newsletter[fax_number]': {
                      maxlength: 100        
        },  
        'newsletter[position_id]': {
                      required: true        
        },  
        'newsletter[comments]': {
                      maxlength: 1000        
        }    },    
    messages: {
              'newsletter[id]': {
                              
        },        
        'newsletter[account_number]': {
                      required: "This field is required.", digits: function(a, elem){ return "\"" + $(elem).val() + "\" is not an integer."; }        
        },        
        'newsletter[firstname]': {
                      required: "This field is required.", maxlength: function(a, elem){ return "\"" + $(elem).val() + "\" is too long (100 characters max)."; }        
        },        
        'newsletter[lastname]': {
                      required: "This field is required.", maxlength: function(a, elem){ return "\"" + $(elem).val() + "\" is too long (100 characters max)."; }        
        },        
        'newsletter[salon_spa_name]': {
                      maxlength: function(a, elem){ return "\"" + $(elem).val() + "\" is too long (100 characters max)."; }        
        },        
        'newsletter[email_address]': {
                      required: "This field is required."        
        },        
        'newsletter[website_url]': {
                      maxlength: function(a, elem){ return "\"" + $(elem).val() + "\" is too long (100 characters max)."; }        
        },        
        'newsletter[address_1]': {
                      required: "This field is required.", maxlength: function(a, elem){ return "\"" + $(elem).val() + "\" is too long (100 characters max)."; }        
        },        
        'newsletter[address_2]': {
                      maxlength: function(a, elem){ return "\"" + $(elem).val() + "\" is too long (100 characters max)."; }        
        },        
        'newsletter[city]': {
                      required: "This field is required.", maxlength: function(a, elem){ return "\"" + $(elem).val() + "\" is too long (100 characters max)."; }        
        },        
        'newsletter[state_code]': {
                              
        },        
        'newsletter[zipcode]': {
                      required: "This field is required.", maxlength: function(a, elem){ return "\"" + $(elem).val() + "\" is too long (20 characters max)."; }        
        },        
        'newsletter[country_code]': {
                              
        },        
        'newsletter[telephone_number]': {
                      required: "This field is required.", maxlength: function(a, elem){ return "\"" + $(elem).val() + "\" is too long (100 characters max)."; }        
        },        
        'newsletter[fax_number]': {
                      maxlength: function(a, elem){ return "\"" + $(elem).val() + "\" is too long (100 characters max)."; }        
        },        
        'newsletter[position_id]': {
                      required: "This field is required."        
        },        
        'newsletter[comments]': {
                      maxlength: function(a, elem){ return "\"" + $(elem).val() + "\" is too long (1000 characters max)."; }        
        }        
    },
    wrapper: 'ul class=error_list',
    errorElement: 'li',
    errorPlacement: function(error, element) 
    {
     if(element.parents('.radio_list').is('*') || element.parents('.checkbox_list').is('*'))
     {
       error.prependTo( element.parent().parent().parent() );
     }
     else
     {
       error.prependTo( element.parent() );
     }
   }
  
  });
  
  
});

/* for some reason the jQuery Validate plugin does not incluce a generic regex method */
jQuery.validator.addMethod(
  "regex",
  function(value, element, regexp) {
      if (regexp.constructor != RegExp)
          regexp = new RegExp(regexp);
      else if (regexp.global)
          regexp.lastIndex = 0;
      return this.optional(element) || regexp.test(value);
  },
  "Invalid."
);