EasyAjax_Form=function(){var config={};config={errorMsgs:{required:'This is a required field.',email:'Please enter a valid email address.',phone:'Example: 111-222-3333.',lengthInput:'50 or fewer characters for this field.',lengthText:'5000 or fewer characters for this field.',ruHuman:'Incorrect single digit number',ajaxTimeout:'An error occurred when saving your request, please try again.'+'If this problem persists, please try again later.'},ruHuman:{answer:'4'},fades:{validation:200,ajax:500},ajaxTimers:{pause:2000,timeout:10000},valClasses:{requiredField:'REQUIRED',emailField:'EMAIL',phoneField:'PHONE',charLengthInput:'LENGTH_INPUT',charLengthText:'LENGTH_TEXT',optionalField:'OPTIONAL',ruHumanField:'RU_HUMAN'},formClasses:{validateOnly:'VALIDATE',ajaxOnly:'AJAX',disable:'DISABLE',choose:'CHOOSE'},cssSelectors:{validationPass:'PASS',validationFail:'FAIL',ajaxLoading:'#FORM_LOAD',ajaxTimeout:"AJAX_TIMEOUT",ajaxResponse:"AJAX_RESPONSE"},regExps:{email:/^\w+([\.\-]?\w+)*@\w+([\.\-]?\w+)*(\.\w{2,3})+$/,phone:/^\(?(\d{3})\)?[\.\-\/ ]?(\d{3})[\.\-\/ ]?(\d{4})$/},charLimit:{input:50,textArea:5000}};function appendSpan(allFields){$.each(allFields,function(i,field){$('<span></span>').insertAfter(this)})}function hasClassArray_maker(currentField,formLevel){var hasClassArray=[],Classes=config.valClasses,j=0;if(formLevel){Classes=config.formClasses}$.each(Classes,function(k,currentClass){if($(currentField).hasClass(currentClass)){hasClassArray[j]=currentClass;j=j+1}});return hasClassArray}function fieldProperty_maker(currentField){var valTypes=config.valClasses,fieldProperties={};$.each(valTypes,function(l,currentType){fieldProperties[l]=false});return fieldProperties}function calcFieldProperties(fieldProperties,hasClassArray){$.each(hasClassArray,function(m,currentClass){switch(currentClass){case config.valClasses.emailField:fieldProperties.emailField=true;break;case config.valClasses.requiredField:fieldProperties.requiredField=true;break;case config.valClasses.phoneField:fieldProperties.phoneField=true;break;case config.valClasses.charLengthInput:fieldProperties.charLengthInput=true;break;case config.valClasses.charLengthText:fieldProperties.charLengthText=true;break;case config.valClasses.ruHumanField:fieldProperties.ruHumanField=true;default:break}});return fieldProperties}function boolObjDecoder(boolObj,retFalseIf){var x=0;$.each(boolObj,function(p,currentBool){var booleanKeepGoing;if(currentBool===retFalseIf){x=1;booleanKeepGoing=false}});if(x===1){return false}return true}function ajaxError(daddy,thisForm){$(config.cssSelectors.ajaxLoading).fadeOut(config.fades.ajax/4,function(){$(this).remove()});$('<div id="Response">'+'<p class='+config.cssSelectors.ajaxTimeout+'>'+config.errorMsgs.ajaxTimeout+'</p>'+'</div>').hide().appendTo(daddy).fadeIn(config.fades.ajax);$('<div id="Refresh">'+'<p><a href ="#">Click here</a> to re-enter form information.</p>'+'</div>').hide().appendTo(daddy).fadeIn(config.fades.ajax);$('#Refresh').click(function(){$('#Response, #Refresh').fadeOut(config.fades.ajax/2,function(){$('#Response, #Refresh').remove();$(thisForm).fadeIn(config.fades.ajax/2)});return false});return true}function ajaxSuccess(serverResponse,daddy,thisForm){$(config.cssSelectors.ajaxLoading).fadeOut(config.fades.ajax/4,function(){$(this).remove()});$('<div id="Response">'+'<p class='+config.cssSelectors.ajaxResponse+'>'+serverResponse+'</p>'+'</div>').hide().appendTo(daddy).fadeIn(config.fades.ajax);$('<div id="Refresh">'+'<p><a href ="#">Click Here</a> to re-enter form information.</p>'+'</div>').hide().appendTo(daddy).fadeIn(config.fades.ajax);$('#Refresh').click(function(){$('#Response, #Refresh').fadeOut(config.fades.ajax/2,function(){$('#Response, #Refresh').remove();$(thisForm).fadeIn(config.fades.ajax/2)});return false});return true}function requiredValidator(currentField,input){var thisError=config.errorMsgs.required,hasReqErr=false;if(input===''){$(currentField).next().removeClass(config.cssSelectors.validationPass);$(currentField).next().hide().addClass(config.cssSelectors.validationFail).text(thisError).fadeIn(config.fades.validation);hasReqErr=true}return hasReqErr}function emailValidator(currentField,input){var thisError=config.errorMsgs.email,hasEmailErr=false,reEmail=config.regExps.email;if(!reEmail.test(input)){$(currentField).next().removeClass(config.cssSelectors.validationPass);$(currentField).next().hide().addClass(config.cssSelectors.validationFail).text(thisError).fadeIn(config.fades.validation);hasEmailErr=true}return hasEmailErr}function phoneValidator(currentField,input){var thisError=config.errorMsgs.phone,hasPhoneErr=false,rePhone=config.regExps.phone;if(!rePhone.test(input)){$(currentField).next().removeClass(config.cssSelectors.validationPass);$(currentField).next().hide().addClass(config.cssSelectors.validationFail).text(thisError).fadeIn(config.fades.validation);hasPhoneErr=true}return hasPhoneErr}function inputLengthValidator(currentField,input){var thisError=config.errorMsgs.lengthInput,hasInputLengthErr=false;if(input.length>config.charLimit.input){$(currentField).next().removeClass(config.cssSelectors.validationPass);$(currentField).next().hide().addClass(config.cssSelectors.validationFail).text(thisError).fadeIn(config.fades.validation);hasInputLengthErr=true}return hasInputLengthErr}function textLengthValidator(currentField,input){var thisError=config.errorMsgs.lengthText,hasTextLengthErr=false;if(input.length>config.charLimit.textArea){$(currentField).next().removeClass(config.cssSelectors.validationPass);$(currentField).next().hide().addClass(config.cssSelectors.validationFail).text(thisError).fadeIn(config.fades.validation);hasTextLengthErr=true}return hasTextLengthErr}function ruHumanValidator(currentField,input){var thisError=config.errorMsgs.ruHuman,hasRuHumanErr=false;if(input!==config.ruHuman.answer){$(currentField).next().removeClass(config.cssSelectors.validationPass);$(currentField).next().hide().addClass(config.cssSelectors.validationFail).text(thisError).fadeIn(config.fades.validation);hasRuHumanErr=true}return hasRuHumanErr}function fieldValidator(fieldProperties,input,currentField){var errorObject={};errorObject={requiredError:false,emailError:false,phoneError:false,inputLengthError:false,textLengthError:false,ruHumanError:false};if(fieldProperties.requiredField){errorObject.requiredError=requiredValidator(currentField,input);if(errorObject.requiredError){return errorObject}}if(fieldProperties.emailField){errorObject.emailError=emailValidator(currentField,input);if(errorObject.emailError){return errorObject}}if(fieldProperties.phoneField){errorObject.phoneError=phoneValidator(currentField,input);if(errorObject.phoneError){return errorObject}}if(fieldProperties.charLengthInput){errorObject.inputLengthError=inputLengthValidator(currentField,input);if(errorObject.inputLengthError){return errorObject}}if(fieldProperties.charLengthText){errorObject.textLengthError=textLengthValidator(currentField,input);if(errorObject.textLengthError){return errorObject}}if(fieldProperties.ruHumanField){errorObject.ruHumanError=ruHumanValidator(currentField,input);if(errorObject.ruHumanError){return errorObject}}return errorObject}function greenChecker(currentField){$(currentField).next().removeClass('FAIL');if($(currentField).next().hasClass("PASS")){return}$(currentField).next().hide().addClass("PASS").text('').fadeIn(config.fades.validation)}function validate_onBlur(formID,allInputs){$(allInputs).blur(function(){var allValClasses={},currentField=this,input=$(currentField).val(),blankOptInput=false,hasClassArray=[],fieldProperties={},validationTracker={},validationResults=true;allValClasses=config.valClasses;hasClassArray=hasClassArray_maker(currentField);fieldProperties=fieldProperty_maker(currentField);if(input===''&&$(currentField).hasClass(config.valClasses.optionalField)){blankOptInput=true}if(hasClassArray.length!==0){fieldProperties=calcFieldProperties(fieldProperties,hasClassArray);if(!blankOptInput){validationTracker=fieldValidator(fieldProperties,input,currentField)}validationResults=boolObjDecoder(validationTracker,true)}if(validationResults){greenChecker(currentField)}})}function validate_onSubmit(formID,allFields){$(""+formID+"").submit(function(){var allValClasses={},allGood=[],formValid=false;allValClasses=config.valClasses;$.each(allFields,function(r,currentField){var input=$(currentField).val(),blankOptInput=false,hasClassArray=[],fieldProperties={},validationTracker={},validationResults=true;allGood[r]=false;hasClassArray=hasClassArray_maker(currentField);fieldProperties=fieldProperty_maker(currentField);if(input===''&&$(currentField).hasClass(config.valClasses.optionalField)){blankOptInput=true}if(hasClassArray.length!==0){fieldProperties=calcFieldProperties(fieldProperties,hasClassArray);if(!blankOptInput){validationTracker=fieldValidator(fieldProperties,input,currentField)}validationResults=boolObjDecoder(validationTracker,true)}if(validationResults){allGood[r]=true;greenChecker(currentField)}});formValid=boolObjDecoder(allGood,false);if(formValid){return true}return false})}function ajaxOnly(formID,allFields){$(""+formID+"").submit(function(){var thisForm=this,toFile=this.action,daddy=$(this).parent(),dataString=$(this).serialize();$(thisForm).fadeOut(config.fades.ajax,function(){$("<div id='FORM_LOAD'/>").hide().appendTo(daddy).show()});$.ajax({type:"post",url:toFile,data:dataString,timeout:config.ajaxTimers.timeout,error:function(XMLHttpRequest,timeout){setTimeout(function(){ajaxError(daddy,thisForm)},config.fades.ajax+10)},success:function(serverResponse){setTimeout(function(){ajaxSuccess(serverResponse,daddy,thisForm)},config.fades.ajax+config.ajaxTimers.pause)}});return false})}function validatePlusAjax_onSubmit(formID,allFields){$(""+formID+"").submit(function(){var allValClasses={},allGood=[],formValid=false,thisForm=this,toFile=this.action,daddy=$(this).parent(),dataString=$(this).serialize();allValClasses=config.valClasses;$.each(allFields,function(r,currentField){var input=$(currentField).val(),blankOptInput=false,hasClassArray=[],fieldProperties={},validationTracker={},validationResults=true;allGood[r]=false;hasClassArray=hasClassArray_maker(currentField);fieldProperties=fieldProperty_maker(currentField);if(input===''&&$(currentField).hasClass(config.valClasses.optionalField)){blankOptInput=true}if(hasClassArray.length!==0){fieldProperties=calcFieldProperties(fieldProperties,hasClassArray);if(!blankOptInput){validationTracker=fieldValidator(fieldProperties,input,currentField)}validationResults=boolObjDecoder(validationTracker,true)}if(validationResults){allGood[r]=true;greenChecker(currentField)}});formValid=boolObjDecoder(allGood,false);if(formValid){$(thisForm).fadeOut(config.fades.ajax,function(){$("<div id='FORM_LOAD'/>").hide().appendTo(daddy).show()});$.ajax({type:"post",url:toFile,data:dataString,timeout:config.ajaxTimers.timeout,error:function(XMLHttpRequest,timeout){setTimeout(function(){ajaxError(daddy,thisForm)},config.fades.ajax+10)},success:function(serverResponse){setTimeout(function(){ajaxSuccess(serverResponse,daddy,thisForm)},config.fades.ajax+config.ajaxTimers.pause)}})}return false})}function chooseID(formID){var allFields;if(formID){formID='#'+formID}else{formID="form"}allFields=$(''+formID+' :input:not(:submit):not(:button):not(:image)');if($(formID).hasClass(config.formClasses.validateOnly)){validate_onBlur(formID,allFields);validate_onSubmit(formID,allFields);return}else if($(formID).hasClass(config.formClasses.ajaxOnly)){ajaxOnly(formID,allFields);return}else{validate_onBlur(formID,allFields);validatePlusAjax_onSubmit(formID,allFields);return}}function init(){var formID="form",allFields=$(''+formID+' :input:not(:submit):not(:button):not(:image)');appendSpan(allFields);if($(formID).hasClass(config.formClasses.disable)){return}else if($(formID).hasClass(config.formClasses.choose)){return}else if($(formID).hasClass(config.formClasses.validateOnly)){validate_onBlur(formID,allFields);validate_onSubmit(formID,allFields);return}else if($(formID).hasClass(config.formClasses.ajaxOnly)){ajaxOnly(formID,allFields);return}else{validate_onBlur(formID,allFields);validatePlusAjax_onSubmit(formID,allFields);return}}return{CustomMessages:config.errorMsgs,CustomFades:config.fades,CustomTimers:config.ajaxTimers,CustomCharLimits:config.charLimit,Go:init,ByID:chooseID}}();$(function(){EasyAjax_Form.Go()});