
(function($){ev.frontEnd.constants.inputValidationClass="input-validation-error";var fixJqueryAutocompleterForValidation=function(){if($.Autocompleter){var _AutocompleterCache=$.Autocompleter.Cache;$.Autocompleter.Cache=function(options){ev.frontEnd.autocompleterCacheData=[];var cache=_AutocompleterCache(options);var _add=cache.add;cache.add=function(searchTerm,results){_add(searchTerm,results);$.each(results,function(i,result){ev.frontEnd.autocompleterCacheData.push(result.value);});};var _flush=cache.flush;cache.flush=function(){_flush();ev.frontEnd.autocompleterCacheData=[];};return cache;};}};fixJqueryAutocompleterForValidation();(function(){var standardEmailValidator=$.validator.methods.email;$.validator.methods.email=function(value,element){return standardEmailValidator.apply(this,[$.trim(value),element]);};})();$.validator.addMethod('validPhoneNumber',function(value,element){if(value.length===0){return true;}
return(/^\({0,1}((0|\+61)(2|4|3|7|8)){0,1}\){0,1}(\ |-){0,1}[0-9]{2}(\ |-){0,1}[0-9]{2}(\ |-){0,1}[0-9]{1}(\ |-){0,1}[0-9]{3}$/).test(value.replace(/\s+/g,''));},'Please enter a valid phone number');$.validator.addMethod("validLettersOnly",function(value,element){if(value.length===0){return true;}
return(/^[a-zA-Z ]+$/).test(value);},"Please enter only letters");$.validator.addMethod('validUnitNumber',function(value,element){if(value.length===0){return true;}
return(/^\s*[\-0-9A-Za-z ]+\s*$/).test(value);},'Please enter a valid unit number, using the separate box below to enter a street number');$.validator.addMethod('validStreetNumber',function(value,element){if(value.length===0){return true;}
return(/^\s*[\-0-9A-Za-z]+\s*$/).test(value);},'Please enter a valid street number, using the separate box above to enter a unit number');$.validator.addMethod("validSelectionRequiredIfEnabled",function(value,element){var select=$(element);if(value===""||typeof(value)===undefined){value=$(element).val();}
if(select.attr("disabled")||select.is(":hidden")||select.find("option").size()<=1){return true;}else{return value!==ev.frontEnd.constants.pleaseSelect&&value!=="";}},function(ruleValue,element){return element.attributes['errorMessage']?element.attributes['errorMessage'].value:"Please select a valid "+element.name.humanise();});$.validator.addMethod("validAutocompleteOptionSelected",function(value,element){var field=$(element);if(field.is(":hidden")){return true;}
if(field.val().length<3){return false;}
if(element.defaultValue===value){return true;}
return ev.frontEnd.autocompleterCacheData.contains(value);},function(ruleValue,element){return"Please enter a valid "+element.name.humanise();});$.validator.addMethod("validAutocompleteOptionSelectedForLocality",function(value,element){var field=$(element);if(field.is(":hidden")){return true;}
if(field.val().length<3){return false;}
if(field.val().split(' ').length<3){return false;}
if(element.defaultValue===value){return true;}
return ev.frontEnd.autocompleterCacheData.contains(value);},function(ruleValue,element){return"Please enter postcode/suburb";});var getOtherFieldNameFrom=function(element){var cssClass=$(element).attr("class");return cssClass.substring(cssClass.indexOf("with[")+5,cssClass.indexOf("]"));};var eitherOrMessageCreator=function(ruleValue,element){return"Please enter either "+element.name.humanise()+" OR "+getOtherFieldNameFrom(element).humanise();};var applyRuleToElementAndCompanion=function(element,rule){var field=$(element);var other=$("#"+getOtherFieldNameFrom(element));var res=(other.hasClass(ev.frontEnd.constants.inputValidationClass)||rule(field.val(),other.val()));return res;};$.validator.addMethod("mutuallyExclusive",function(value,element){var field=$(element);if(field.is(":hidden")){return true;}
var other=$("#"+getOtherFieldNameFrom(element));return(field.val()&&!other.val())||(!field.val()&&other.val());},eitherOrMessageCreator);$.validator.addMethod("notAllowedAlong",function(value,element){var field=$(element);if(field.is(":hidden")){return true;}
var other=$("#"+getOtherFieldNameFrom(element));return!(field.val()&&other.val());},eitherOrMessageCreator);$.validator.addMethod("mustHaveSameValue",function(value,element){return applyRuleToElementAndCompanion(element,function(field,other){return field===other;});},function(ruleValue,element){return"Please enter the same value as "+getOtherFieldNameFrom(element).humanise();});$.validator.addMethod("mustHaveSameValueCaseInsensitive",function(value,element){return applyRuleToElementAndCompanion(element,function(field,other){return field.toLowerCase()===other.toLowerCase();});},function(ruleValue,element){return"Please enter the same value as "+getOtherFieldNameFrom(element).humanise();});$.validator.addMethod("validCreditCardNumber",function(value,element){var number=value.replace(/\D/g,'');var number_length=number.length;var parity=number_length%2;var total=0;for(var i=0;i<number_length;i++){var digit=number.charAt(i);if(i%2===parity){digit=digit*2;if(digit>9){digit=digit-9;}}
total=total+parseInt(digit,0);}
if(total%10!==0){return false;}
var cardType=$("#creditCardType").val();if(cardType==="Visa"&&/^4/.test(value)&&(value.length===13||value.length===16)){return true;}
if(cardType==="DinersClub"&&value.length===14&&(/^30[0-5]/.test(value)||/^3[6,8]/.test(value))){return true;}
if(cardType==="AmericanExpress"&&value.length===15&&/^3[4,7]/.test(value)){return true;}
if(cardType==="MasterCard"&&value.length===16&&/^5[1-5]/.test(value)){return true;}
return false;},"Please enter a valid credit card number");$.validator.addMethod('validBSB1',function(value,element){if($(element).attr("disabled")){return true;}
return $('#BsbPart1').val().isDigits();},"Please enter a valid BSB");$.validator.addMethod('validBSB2',function(value,element){if($(element).attr("disabled")){return true;}
return $('#BsbPart2').val().isDigits();},"Please enter a valid BSB");$.validator.addMethod('requiredIgnoreDisabled',function(value,element){if($(element).attr("disabled")||!$(element).is(":visible")){return true;}
return $.validator.methods.required.apply(this,arguments);},$.validator.messages.required);$.validator.addMethod("validAccountNumber",function(value,element){if($(element).attr("disabled")){return true;}
if((value.length===0)||(value.length>9)||(value==="000000000")){return false;}
return(/^[0-9]*$/).test(value);},"Please enter a valid account number, with up to 9 numbers");$.validator.addMethod("validExpiryDate",function(value,element){if($(element).siblings("select").attr("disabled")){return true;}
var expiry=Date.parse(value);return expiry&&expiry.moveToLastDayOfMonth().compareTo(Date.today())>=0;},"The expiry date you have entered is not valid, please re-enter");$.validator.addMethod('printableCharactersOnly',function(value,element){var printableCharacters=/^[\x20-\x7E]*$/;var lessThanOrGreaterThan=/^[^<>]*$/;return(value===""||(printableCharacters.test(value)&&lessThanOrGreaterThan.test(value)));},'Please enter only letters from the English alphabet or numbers or ( ) & @ #');$.validator.addMethod("validBankAccountName",function(value,element){if($(element).attr("disabled")){return true;}
if(value.length===0){return false;}
return(/^[0-9a-zA-Z\-\+\(\)\.\*\$\|\?\/&!,%:_#@'"=`][0-9a-zA-Z \-\+\(\)\.\*\$\|\?\/&!,%:_#@'"=`]*$/).test(value);},"Please enter a valid account holder name");$.validator.addMethod('validCcvNumber',function(value,element){var numbersOnly=/^[0-9]*$/;return(value.length===3||value.length===4)&&numbersOnly.test(value);},'Please enter at least 3 digits');$.validator.addMethod('positive',function(value,element){return element.disabled?true:value>0.0;},'Please enter a positive value');$.validator.addMethod('validCouponCode',function(value,element){var couponFormat=/^[a-zA-Z0-9]{3,10}$/;return(value.length===0||couponFormat.test(value));},'Please enter a valid coupon code');$.validator.setDefaults({customErrorClass:ev.frontEnd.constants.inputValidationClass,highlight:function(element,errorClass){var jElement=$(element);if(!jElement.is("input[type=hidden]")&&!jElement.is(":radio")){jElement.addClass($.validator.defaults.customErrorClass);}
if(jElement.is("input[type=hidden]")){var dob=jElement.siblings("select.day, select.month, select.year");dob.addClass(ev.frontEnd.constants.inputValidationClass);}
jElement.addClass(errorClass);},unhighlight:function(element,errorClass){var jElement=$(element);if(!jElement.is("input[type=hidden]")&&!jElement.is(":radio")){jElement.removeClass($.validator.defaults.customErrorClass);}
if(jElement.is("input[type=hidden]")){var dob=jElement.siblings("select.day, select.month, select.year");dob.removeClass(ev.frontEnd.constants.inputValidationClass);}
jElement.removeClass(errorClass);},showErrors:function(errorMap,errorList){this.defaultShowErrors();$.each(errorList,function(index,element){if(element.message===""){$(element.element).next().addClass("invisibleUIError");}});}});})(jQuery);

(function($){$.validator.addMethod("validDate",function(value,element){if($(element).is(":disabled")){return true;}
return Date.parseExact(value,ev.frontEnd.isoDateFormat)!==null;},"Please select a valid date");$.validator.addMethod("notTooYoungDate",function(selectedDate,field,minAge){if($(field).is(":disabled")){return true;}
selectedDate=Date.parseExact(selectedDate,ev.frontEnd.isoDateFormat);var minDOB=Date.today().addYears(-minAge);return selectedDate&&selectedDate.compareTo(minDOB)<=0;},function(minAge){return"Must be at least "+minAge+" years of age";});$.validator.addMethod("notTooOldDate",function(selectedDate,field,maxAge){if($(field).is(":disabled")){return true;}
selectedDate=Date.parseExact(selectedDate,ev.frontEnd.isoDateFormat);var maxDOB=Date.today().addYears(-maxAge);return selectedDate&&selectedDate.compareTo(maxDOB)>0;},function(maxAge){return"Can not be more than "+maxAge+" years of age";});$.fn.dateOfBirth=function(minAge,maxAge){var field=this;var day=field.siblings("select.day");var month=field.siblings("select.month");var year=field.siblings("select.year");var dateChanged=function(){field.val(ev.frontEnd.isoDateFormat.replace("dd",day.val()).replace("MM",month.val()).replace("yyyy",year.val()));field.siblings(".error").hide();};var removeHighlight=function(){day.removeClass($.validator.defaults.customErrorClass);month.removeClass($.validator.defaults.customErrorClass);year.removeClass($.validator.defaults.customErrorClass);};field.rules("add",{validDate:true,notTooYoungDate:minAge,notTooOldDate:maxAge});$([day[0],month[0],year[0]]).change(dateChanged);$([day[0],month[0],year[0]]).click(removeHighlight);};})(jQuery);

(function($){var invalidVehicleBasedOnAge=false;var vehicleIsBasedOnAge=false;var pleaseSelect=ev.frontEnd.constants.pleaseSelect;var showVehicleDeclineModal=function(data,isAdditionalDriver){$(data===ev.frontEnd.vehicleDecline.yes?"#declinedMessage":"#declinedAgeMessage").modal({overlayId:'cardetailsmodal-overlay',containerId:'cardetailsmodal-container',position:[200],closeClass:"modalCloseImg",onShow:function(dialog){if(isAdditionalDriver){$("#declinedCarAge").hide();$("#declinedAdditionalDriver").show();}else{$("#declinedCarAge").show();$("#declinedAdditionalDriver").hide();}},onClose:function(dialog){if(data===ev.frontEnd.vehicleDecline.yes){bt.RestoreCarDetailsDependentFields();}
$.modal.close();}});};var isUnderMinimumAge=function(minAge,selectedDob){if(selectedDob===""){invalidVehicleBasedOnAge=false;return false;}
selectedDob=Date.parseExact(selectedDob,ev.frontEnd.isoDateFormat);var minDOB=Date.today().addYears(-minAge);if(selectedDob!==null){return selectedDob.compareTo(minDOB)>0;}
return false;};var getMyQuoteMyDetailParcel=function(){return $("#quoteStepTwo").getParcel();};var parseDateOfBirthValue=function(dateOfBirthSelector){var dob=Date.parseExact(dateOfBirthSelector.val(),ev.frontEnd.isoDateFormat);if(dob!==null){return dateOfBirthSelector.val();}
return"";};var getYoungestDriver=function(dateOfBirthSelector){var parcel=getMyQuoteMyDetailParcel();if(parcel){return parcel.youngestDriverDob();}
if(dateOfBirthSelector){return parseDateOfBirthValue(dateOfBirthSelector);}
return"";};var declineVehicleCallback=function(data,dateOfBirthSelector,isAdditionalDriver){vehicleIsBasedOnAge=(data===ev.frontEnd.vehicleDecline.basedOnAge);if(data===ev.frontEnd.vehicleDecline.basedOnAge&&isUnderMinimumAge(ev.frontEnd.vehicleDecline.policyHolder.minAge,getYoungestDriver(dateOfBirthSelector))){invalidVehicleBasedOnAge=true;showVehicleDeclineModal(data);}else if(data===ev.frontEnd.vehicleDecline.yes){showVehicleDeclineModal(data);}else{invalidVehicleBasedOnAge=false;}};var resetVehicleBasedOnAge=function(dateOfBirthSelector){if(invalidVehicleBasedOnAge){invalidVehicleBasedOnAge=isUnderMinimumAge(ev.frontEnd.vehicleDecline.policyHolder.minAge,getYoungestDriver(dateOfBirthSelector));}};ev.frontEnd.checkIfVehicleIsDeclined=function(declineUrl,params,dateOfBirthSelector,isAdditional){$.getJSON(declineUrl+"?callback=?",params,function(data){declineVehicleCallback(data,dateOfBirthSelector,isAdditional);});};ev.frontEnd.dependantSelects=function(firstSelect,checkDeclinedUrl,dateOfBirthSelector){var select=firstSelect;var valueChanged=false;var appendOption=function(select,value,selected){var option=$("<option>"+value.Item+"</option>");if(selected){option.attr("selected","selected");}
select.field.append(option);valueChanged=valueChanged||selected;};var resetDependantFields=function(select,ignoreAvoid){var nextAffected=select.affects;while(nextAffected!==undefined){if((!nextAffected.avoidReset||ignoreAvoid)||select.field.val()===pleaseSelect){nextAffected.field.attr("disabled",true).empty();appendOption(nextAffected,{Item:ev.frontEnd.constants.pleaseSelect,Value:pleaseSelect});nextAffected.field.val(pleaseSelect);}
nextAffected=nextAffected.affects;}};var removeAllValidationErrors=function(){var select=firstSelect;while(select!==undefined){select.field.removeClass("error");select.field.next("label.error").hide();select=select.affects;}};var updateValues=function(select,values,originalSelect){var previousValue=select.field.val();select.field.empty();valueChanged=false;$.each(values,function(){var isOptionSelected=(select.avoidReset&&this.Item===previousValue&&previousValue!==pleaseSelect)||(values.length===2&&values[0].Item===pleaseSelect&&this.Item===values[1].Item);appendOption(select,this,isOptionSelected);});if(valueChanged){select.field.change();}
if(values.length===1&&values[0].Item===pleaseSelect){select.field.change();}else{select.field.removeAttr("disabled");}
if(select.field.focus){select.field.focus();}};var getParameters=function(select){var params={};var dependency=select.dependsOn;while(dependency!==undefined){if(dependency.field.val()!==pleaseSelect){params[dependency.field.attr("name")]=dependency.field.val();}
dependency=dependency.dependsOn;}
return params;};var selectChanged=function(select){invalidVehicleBasedOnAge=false;resetDependantFields(select);removeAllValidationErrors();if(select.field.val()!==pleaseSelect||select.field.find("option").size()===1){var callback=function(data){updateValues(select.affects,data,select);};$.getJSON(select.affects.dataUrl+"?callback=?",getParameters(select.affects),callback);}};var changeCallbackClosure=function(select){return function(){selectChanged(select);};};var checkDeclined=function(select){if(select.field.val()!==pleaseSelect){var params=getParameters(select);if(select.field.val()!==pleaseSelect){params[select.field.attr("name")]=select.field.val();}
ev.frontEnd.checkIfVehicleIsDeclined(checkDeclinedUrl,params,dateOfBirthSelector,false);}};while(select.affects!==undefined){select.field.change(changeCallbackClosure(select));select.affects.dependsOn=select;if(select.affects.field.val()===pleaseSelect){select.affects.field.attr("disabled",true);}
select=select.affects;}
if(checkDeclinedUrl){select.field.change(function(){checkDeclined(select);});}};ev.frontEnd.declineVehicleBasedOnAge=function(carDetails,checkDeclinedUrl,dateOfBirthSelector){var getDate=function(){var day=dateOfBirthSelector.siblings("select.day");var month=dateOfBirthSelector.siblings("select.month");var year=dateOfBirthSelector.siblings("select.year");return ev.frontEnd.isoDateFormat.replace("dd",day.val()).replace("MM",month.val()).replace("yyyy",year.val());};var checkCarDetailsFilled=function(){return carDetails.engineSize.val()!==pleaseSelect&&Date.parseExact(getDate(),ev.frontEnd.isoDateFormat)!==null;};var getParameters=function(){var params={};params[carDetails.year.attr("name")]=carDetails.year.val();params[carDetails.make.attr("name")]=carDetails.make.val();params[carDetails.model.attr("name")]=carDetails.model.val();params[carDetails.variant.attr("name")]=carDetails.variant.val();params[carDetails.engineSize.attr("name")]=carDetails.engineSize.val();return params;};var checkDeclined=function(){var params=getParameters();dateOfBirthSelector.val(getDate());if(isUnderMinimumAge(ev.frontEnd.vehicleDecline.policyHolder.minAge,getYoungestDriver(dateOfBirthSelector))){var showModal=isUnderMinimumAge(ev.frontEnd.vehicleDecline.policyHolder.minAge,parseDateOfBirthValue(dateOfBirthSelector));invalidVehicleBasedOnAge=true;if(showModal){showVehicleDeclineModal(ev.frontEnd.vehicleDecline.basedOnAge,dateOfBirthSelector.attr("name").contains("Additional"));}}};$(dateOfBirthSelector).siblings("select").change(function(){invalidVehicleBasedOnAge=false;if(checkCarDetailsFilled()&&vehicleIsBasedOnAge){checkDeclined();}});};$.validator.addMethod('vehicleDateOfBirthDeclineBasedOnAge',function(value,field){resetVehicleBasedOnAge($(field));if(invalidVehicleBasedOnAge){var showModal=isUnderMinimumAge(ev.frontEnd.vehicleDecline.policyHolder.minAge,parseDateOfBirthValue($(field)));if(showModal){showVehicleDeclineModal(ev.frontEnd.vehicleDecline.basedOnAge,$(field).attr("name").contains("Additional"));}
return!showModal;}
return true;},"");$.validator.addMethod('vehicleDropDownDeclineBasedOnAge',function(value,field){if(invalidVehicleBasedOnAge){showVehicleDeclineModal(ev.frontEnd.vehicleDecline.basedOnAge,false);return false;}
return true;},"");})(jQuery);

