$(document).ready(function() {
if ($('form#example-form').length == 0) return;
Form($('form#example-form'));
});
Form = function(form) {
var self = this;
var errors = new Array();
var submitButtonHTML = $('#submit-button').html();
self.validate = function (){
// Clear out old errors
self.clearErrors();
// Validate the fields
self.checkNotEmpty('response.firstName', "Please enter your first name");
self.checkNotEmpty('response.lastName', "Please enter your last name");
self.validateEmail();
self.checkNotEmpty('response.primaryPhNum', "Please enter your phone number");
self.validateAge();
self.checkNotEmpty('response.streetAddress', "Please enter your street address");
self.checkNotEmpty('response.city', "Please enter your city");
self.validateState();
self.checkNotEmpty('response.zip', "Please enter your zip code");
self.validateMessage();
// If we've got errors, render them and bounce
if (errors.length > 0) {
self.renderErrors();
return false;
}
return true;
}
self.submit = function() {
$.ajax({
type: 'POST',
url: form.attr('action'),
data: self.getSubmitPost(),
success: self.submitSuccess,
error: self.submitError
});
return false;
}
self.getSubmitPost = function() {
var post = new Array;
form.find('input').each(function(){
post.push($(this).attr('name') + '=' + $(this).val());
});
post.push('response.stateId=' + self.getFieldValue('response.stateId', 'select'));
post.push('response.messageBody=' + self.getFieldValue('response.messageBody', 'textarea'));
return post.join('&');
}
self.submitSuccess = function(data) {
window.location.href = Drupal.settings.plugger.thankyou_page;
}
self.submitError = function(data) {
errors = new Array();
errors.push("Due to an unusually high volume of submissions, we were unable to
receive your story. We aplogize for the inconvenience. Please try again later!");
self.renderErrors();
$('#submit-button').html(submitButtonHTML);
}
self.getFieldValue = function(name, type) {
if (type == 'select') {
var field = form.find('select[@name=' + name + '] option[@selected]');
} else if (type == 'textarea') {
var field = form.find('textarea[@name=' + name + ']');
} else {
var field = form.find('input[@name=' + name + ']');
}
return field.val();
}
self.checkNotEmpty = function(name, error) {
var input = form.find('input[@name=' + name + ']');
if (input.val() == '') {
input.addClass('error');
errors.push(error);
return false;
}
return true;
}
self.validateEmail = function() {
var email = form.find('input[@name=respondent.emailAddress]');
var emailRegEx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (email.val() == '') {
email.addClass('error');
errors.push("Please enter your email address");
return false;
} else if (!email.val().match(emailRegEx)) {
email.addClass('error');
errors.push("Please enter a valid email address in the form me@doctoroz.com");
return false;
}
return true;
}
self.validateAge = function() {
var age = form.find('input[@name=response.age]');
if (age.val() == '') {
age.addClass('error');
errors.push("Please enter your age");
return false;
} else if (parseInt(age.val()) < 13 ) {
createCookie('under_age', 1, 1);
window.location.href = Drupal.settings.plugger.sorry_page;
}
return true;
}
self.validateState = function() {
var state = form.find('select[@name=response.stateId]');
var selectedState = state.find('option[@selected]');
if (selectedState.val() == '') {
state.addClass('error');
errors.push("Please enter your state");
return false;
}
return true;
}
self.validateMessage = function() {
var msg = form.find('textarea[@name=response.messageBody]');
if (msg.val() == '') {
msg.addClass('error');
errors.push("Please tell us your story");
return false;
}
return true;
}
self.clearErrors = function() {
form.find('.messages').remove();
form.find('input.error').removeClass('error');
form.find('select.error').removeClass('error');
errors = new Array();
}
self.renderErrors = function() {
var out = '<div class="messages error">';
if (errors.length > 1) {
out += "<ul>";
for (idx in errors) {
out += "<li>" + errors[idx] + "</li>";
}
out += "</ul>";
} else {
out += errors.pop();
}
out += '</div>';
form.find('.errors').prepend(out);
}
form.submit(function(){
$('#submit-button').html('Submitting...');
if (self.validate()) {
return self.submit();
}
$('#submit-button').html(submitButtonHTML);
return false;
});
}