Warning: No message defined for "+b.name+""),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return void 0===a?"":a.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()&&0===this.pendingRequest?(a(this.currentForm).trigger("submit"),this.submitButton&&a("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return c="string"==typeof c&&c||"remote",a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur").find(".validate-lessThan-blur").off(".validate-lessThan").removeClass("validate-lessThan-blur").find(".validate-lessThanEqual-blur").off(".validate-lessThanEqual").removeClass("validate-lessThanEqual-blur").find(".validate-greaterThanEqual-blur").off(".validate-greaterThanEqual").removeClass("validate-greaterThanEqual-blur").find(".validate-greaterThan-blur").off(".validate-greaterThan").removeClass("validate-greaterThan-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a["date"===b?"dateISO":c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),""===d&&(d=!0),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(a,d){b[a]="function"==typeof d&&"normalizer"!==a?d(c):d}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var a;b[this]&&(Array.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(a=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(a[0]),Number(a[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:void 0!==b&&null!==b&&b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:(?:[^\]\[?\/<~#`!@$^&*()+=}|:";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\]\[?\/<~#`!@$^&*()+=}|:";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(a)},date:function(){var a=!1;return function(b,c){return a||(a=!0,this.settings.debug&&window.console&&console.warn("The `date` method is deprecated and will be removed in version '2.0.0'.\nPlease don't use it, since it relies on the Date constructor, which\nbehaves very differently across browsers and locales. Use `dateISO`\ninstead or one of the locale specific methods in `localizations/`\nand `additional-methods.js`.")),this.optional(c)||!/Invalid|NaN/.test(new Date(b).toString())}}(),dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(a,b,c){var d=Array.isArray(a)?a.length:this.getLength(a,b);return this.optional(b)||d>=c},maxlength:function(a,b,c){var d=Array.isArray(a)?a.length:this.getLength(a,b);return this.optional(b)||d<=c},rangelength:function(a,b,c){var d=Array.isArray(a)?a.length:this.getLength(a,b);return this.optional(b)||d>=c[0]&&d<=c[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr("type"),g="Step attribute on input type "+f+" is not supported.",h=["text","number","range"],i=new RegExp("\\b"+f+"\\b"),j=f&&!i.test(h.join()),k=function(a){var b=(""+a).match(/(?:\.(\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var c,d={};return a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,c){var e=a.port;"abort"===a.mode&&(d[e]&&d[e].abort(),d[e]=c)}):(c=a.ajax,a.ajax=function(b){var e=("mode"in b?b:a.ajaxSettings).mode,f=("port"in b?b:a.ajaxSettings).port;return"abort"===e?(d[f]&&d[f].abort(),d[f]=c.apply(this,arguments),d[f]):c.apply(this,arguments)}),a});;
(function( $ ) {
'use strict';
jQuery(document).ready(function($) {
if (
document.getElementsByClassName("captcha-field").length > 0 &&
ccf_settings &&
ccf_settings.captcha_key
) {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://www.google.com/recaptcha/api.js";
document.body.appendChild(script);
var captchaInt = setInterval(() => {
if (window.grecaptcha && window.grecaptcha.render) {
var captchaFields = document.getElementsByClassName("captcha-field");
for (var i = 0; i < captchaFields.length; i++) {
grecaptcha.render(captchaFields[i], {
sitekey: ccf_settings.captcha_key,
});
}
clearInterval(captchaInt);
}
}, 500);
}
// Check if address field exists and API key is available
if (
document.querySelector(".field-wrap.address1 input[type='text']") &&
ccf_settings &&
ccf_settings.map_api_key
) {
// Load Google Maps API
var script = document.createElement("script");
script.src = "https://maps.googleapis.com/maps/api/js?key=" + ccf_settings.map_api_key + "&libraries=places&loading=async";
script.async = true;
script.defer = true;
document.body.appendChild(script);
// Check for API readiness
var mapApiInt = setInterval(function() {
if (window.google && google.maps && google.maps.places) {
initAddressAutocomplete();
initMailingAddressAutocomplete();
clearInterval(mapApiInt);
}
}, 500);
function initAddressAutocomplete() {
var addressInput = document.querySelector('.field-wrap.address1 input[type="text"]');
if (addressInput) {
var autocomplete = new google.maps.places.Autocomplete(
addressInput,
{
types: ['geocode'],
fields: ['address_components', 'geometry'],
componentRestrictions: {country: 'us'}
}
);
autocomplete.addListener('place_changed', function() {
var place = autocomplete.getPlace();
if (!place.geometry) {
return;
}
// Fill address components
fillAddressComponents(place, '');
});
}
}
function initMailingAddressAutocomplete() {
var mailingAddressInput = document.querySelector('.field-wrap.mailing_address1 input[type="text"]');
if (mailingAddressInput) {
var autocomplete = new google.maps.places.Autocomplete(
mailingAddressInput,
{
types: ['geocode'],
fields: ['address_components', 'geometry'],
componentRestrictions: {country: 'us'}
}
);
autocomplete.addListener('place_changed', function() {
var place = autocomplete.getPlace();
if (!place.geometry) {
return;
}
// Fill mailing address components
fillAddressComponents(place, 'mailing_');
});
}
}
function fillAddressComponents(place, prefix) {
// Helper function to get address component by type
function getComponent(place, type) {
for (var i = 0; i < place.address_components.length; i++) {
var component = place.address_components[i];
if (component.types.includes(type)) {
return component;
}
}
return null;
}
// Get components
var streetNumber = getComponent(place, 'street_number')?.long_name || '';
var route = getComponent(place, 'route')?.long_name || '';
var subpremise = getComponent(place, 'subpremise')?.long_name || ''; // Address 2
var city = getComponent(place, 'locality')?.long_name || '';
var stateComponent = getComponent(place, 'administrative_area_level_1');
var stateShort = stateComponent?.short_name || '';
var county = getComponent(place, 'administrative_area_level_2')?.long_name || '';
var zip = getComponent(place, 'postal_code')?.long_name || '';
var country = getComponent(place, 'country')?.long_name || '';
var fullAddress = [streetNumber, route].filter(Boolean).join(' ');
// Update form fields
var streetAddressField = document.querySelector(`.field-wrap.${prefix}address1 input[type="text"]`);
if (streetAddressField) streetAddressField.value = fullAddress;
var address2Field = document.querySelector(`.field-wrap.${prefix}address2 input[type="text"]`);
if (address2Field && subpremise) address2Field.value = subpremise;
var cityField = document.querySelector(`.field-wrap.${prefix}city input[type="text"]`);
if (cityField) cityField.value = city;
var countyField = document.querySelector(`.field-wrap.${prefix}county input[type="text"]`);
if (countyField) countyField.value = county;
var stateSelect = document.querySelector(`.field-wrap.${prefix}state select`);
if (stateSelect && stateShort) {
stateSelect.value = stateShort;
stateSelect.dispatchEvent(new Event('change'));
}
var zipField = document.querySelector(`.field-wrap.${prefix}zipcode input[type="text"]`);
if (zipField) zipField.value = zip;
var countryField = document.querySelector(`.field-wrap.${prefix}country input[type="text"]`);
if (countryField) countryField.value = country;
}
}
if (jQuery(".wp-block-contact-form .datepicker").length > 0) {
jQuery(".datepicker").datepicker({
yearRange: "c-100:c+10",
dateFormat: "mm/dd/yy", // Set the date format as needed
changeMonth: true, // Allow the month to be changed directly
changeYear: true, // Allow the year to be changed directly
});
jQuery("#tour_date").datepicker("setDate", "today");
jQuery("#Date_Requested, #tour_date").datepicker("option", "minDate", 0); // Enable only future dates
if (jQuery("#gf_end_date").length > 0) {
var minDate = new Date();
minDate.setDate(minDate.getDate() + 60); // Set the start of the range to 60 days from now
var maxDate = new Date(minDate);
maxDate.setFullYear(maxDate.getFullYear() + 1); // Set the end of the range to 12 months from the minDate
jQuery("#gf_end_date").datepicker("option", "minDate", minDate);
jQuery("#gf_end_date").datepicker("option", "maxDate", maxDate);
jQuery("#gf_end_date").datepicker("setDate", minDate);
jQuery(".datepicker").each(function () {
var $this = jQuery(this);
if ($.datepicker._getInst($this[0])) {
$this.keydown(function (e) {
return false; // Prevent keydown events
});
}
});
}
}
$('.field-container .us-mobile').on('input', function() {
var $this = $(this);
var val = $this.val().replace(/\D/g, ''); // Remove all non-digit characters
var newVal = '';
if (val.length > 0) {
newVal = '(' + val.substring(0, 3);
}
if (val.length > 3) {
newVal += ') ' + val.substring(3, 6);
}
if (val.length > 6) {
newVal += '-' + val.substring(6, 10);
}
$this.val(newVal);
});
// Add a custom validation method for mobile number
$.validator.addMethod("validMobile", function (value, element) {
// This checks if the value matches the pattern of 10 or more digits
return this.optional(element) || /^[0-9]{10,}$/.test(value);
}, "Please enter a valid mobile number (10 or more digits).");
$.validator.addMethod("validUSMobile", function (value, element) {
// This checks if the value matches the pattern (###) ###-####
return this.optional(element) || /^\(\d{3}\) \d{3}-\d{4}$/.test(value);
}, "Please enter a valid US mobile number in the format (###) ###-####.");
if ($(".gdi-custom-form-block .contact-form").length) {
// Loop through each contact form
$(".gdi-custom-form-block .contact-form").each(function () {
var $form = $(this);
var rules = {};
var messages = {};
// Loop through each field-wrap to build the rules and messages
$form.find(".field-wrap.required").each(function () {
var $fieldWrap = $(this);
var $input = $fieldWrap.find("input, select, textarea"); // Include textarea
var fieldName = $input.attr("name");
var fieldLabel = $fieldWrap
.find(".field-label")
.text()
.replace("*", "")
.trim();
// Add a required rule for this field
rules[fieldName] = {
required: true,
};
// Add a dynamic error message based on the label text
messages[fieldName] = {
required: `${fieldLabel} field is required.`,
};
// Handle specific input types
if ($input.attr("type") === "email") {
// Add custom email validation
$.validator.addMethod("strictEmail", function(value, element) {
return this.optional(element) || /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
}, "Please enter a valid email address.");
rules[fieldName].strictEmail = true;
messages[fieldName].strictEmail = "Please enter a valid email address.";
} else if ($input.attr("type") === "tel") {
if ($input.hasClass("us-mobile")) {
// Use the custom method for US mobile number validation
rules[fieldName].validUSMobile = true;
messages[fieldName].validUSMobile = "Please enter a valid US mobile number in the format (###) ###-####.";
} else {
// Use the regular mobile number validation
rules[fieldName].validMobile = true;
messages[fieldName].validMobile = "Please enter a valid mobile number.";
}
} else if ($input.attr("type") === "checkbox") {
// Custom rule for checkbox (ensure at least one checkbox is checked)
var checkboxGroupName = fieldName; // Use the name attribute for grouping
var $checkboxes = $fieldWrap.find("input[type='checkbox']");
// Check if there's only one checkbox
if ($checkboxes.length === 1) {
// If there's only one checkbox, no need for the "at least one" message
rules[checkboxGroupName] = {
required: true,
};
messages[checkboxGroupName] = {
required: `Please select the ${fieldLabel.toLowerCase()}.`,
};
} else {
// If there are multiple checkboxes, keep the "at least one" message
rules[checkboxGroupName] = {
required: true,
};
messages[checkboxGroupName] = {
required: `Please select at least one ${fieldLabel.toLowerCase()}.`,
};
}
} else if ($input.is("textarea")) {
// Additional validation for textareas can go here if needed
} else if ($input.attr("type") === "file") {
// Custom file validation
rules[fieldName] = {
required: true,
extension: "pdf,doc,png,xlsx,pptx,jpg", // Specify allowed file types
};
messages[fieldName] = {
required: `${fieldLabel} field is required.`,
extension: `Please upload a valid file type (pdf, doc, png, xlsx, pptx, jpg).`,
};
} else if ($input.attr("type") === "text" && $input.attr("class") && $input.attr("class").includes("zip-code")) {
// Zip code validation (5 digits)
rules[fieldName] = {
required: true,
digits: true,
minlength: 5,
maxlength: 5
};
messages[fieldName] = {
required: `${fieldLabel} field is required.`,
digits: "Please enter only numbers for zip code.",
minlength: "Zip code must be exactly 5 digits.",
maxlength: "Zip code must be exactly 5 digits."
};
}
});
// Initialize validation for the current form
$form.validate({
rules: rules,
messages: messages,
errorElement: "div",
errorPlacement: function (error, element) {
error.addClass("error-message");
error.insertAfter(element.closest(".field-container"));
},
submitHandler: function (form) {
var $currentContactForm = $(form);
var $currentFormContainer = $currentContactForm.closest(".wp-block-contact-form"); // Parent container for the form
var $contactloader;
// Check if loader is inside or outside the form container
if ($currentFormContainer.find(".contact-form-loader").length > 0) {
// Loader is inside the form container
$contactloader = $currentFormContainer.find(".contact-form-loader");
} else if ($currentFormContainer.prev(".contact-form-loader").length > 0) {
// Loader is outside the form container (directly above)
$contactloader = $currentFormContainer.prev(".contact-form-loader");
}
if ($contactloader) {
$contactloader.show(); // Show the loader
}
// Clear any previous messages
$form.closest(".wp-block-contact-form").find(".contact-form-message").html("");
// Prepare data object for AJAX request
let requestData = new FormData();
requestData.append("action", "gdi_validate_form_submission");
requestData.append("formData", $form.serialize());
$form.find('input[type="file"]').each(function () {
const input = this;
const fieldName = $(input).attr("name").replace(/\[\]$/, ""); // Remove trailing [] if present
if (input.files.length > 0) {
for (let i = 0; i < input.files.length; i++) {
requestData.append(`${fieldName}[${i}]`, input.files[i]);
}
}
});
// Check if "rep" parameter exists in the URL
const repParam = getQueryParam("rep");
if (repParam) {
requestData.append("rep", repParam);
}
// Perform an AJAX call on form submission
$.ajax({
url: ccf_settings.ajaxUrl,
dataType: "json",
type: "POST",
data: requestData,
processData: false,
contentType: false,
success: function (response) {
if (response.submitted) {
// Check if there's a redirect URL
if (response.redirect_url) {
// Redirect to the updated URL
window.location.href = response.redirect_url;
} else {
if (response.success_msg) {
$form
.closest(".wp-block-contact-form")
.find(".contact-form-message")
.html(
'' +
response.success_msg +
"
"
);
}
$form.hide();
$form[0].reset(); // Reset the form fields
$contactloader.hide(); // Hide the loader
}
} else {
let errorData = response.error_data;
// Check if errorData exists and if it contains an err_msg property
if (errorData && errorData.err_msg) {
const $errorContainer = $form
.closest(".wp-block-contact-form")
.find(".contact-form-message");
const alertDiv = document.createElement("div");
alertDiv.classList.add("alert", "alert-danger");
alertDiv.textContent = errorData.err_msg; // Using textContent prevents HTML injection
$errorContainer.html(''); // Clear existing messages
$errorContainer.append(alertDiv); // Safely append the new message
}
else {
// Optional: Handle the case where there is no error message, if needed
$form
.closest(".wp-block-contact-form")
.find(".contact-form-message")
.html('An unexpected error occurred. Please try again.
');
}
$form[0].reset(); // This resets the form fields to their initial values
$contactloader.hide(); // Hide the loader
}
},
error: function (jqXHR, textStatus, errorThrown) {
$contactloader.hide(); // Hide the loader
},
});
},
});
});
}
// Function to get query parameters from the URL
function getQueryParam(name) {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get(name);
}
$(document).on('change', '.gdi-custom-form-block #mailing-checkbox0', function() {
var $this = $(this);
var addressOne = $('#address_one').val() || '';
var addressTwo = $('#address_two').val() || '';
var city = $('#city').val() || '';
var county = $('#county').val() || '';
var state = $('#state').val() || '';
var zipcode = $('#zipcode').val() || '';
var mailingAddressOne = $('#mailing_address_one');
var mailingAddressTwo = $('#mailing_address_two');
var mailingCity = $('#mailing_city');
var mailingCounty = $('#mailing_county');
var mailingState = $('#mailing_state');
var mailingZipcode = $('#mailing_zipcode');
if ($this.is(':checked')) {
mailingAddressOne.val(addressOne);
mailingAddressTwo.val(addressTwo);
mailingCity.val(city);
mailingCounty.val(county);
mailingState.val(state);
mailingZipcode.val(zipcode);
} else {
mailingAddressOne.val('');
mailingAddressTwo.val('');
mailingCity.val('');
mailingCounty.val('');
mailingState.val('');
mailingZipcode.val('');
}
});
});
})( jQuery );
if (
jQuery("select[multiple]").length > 0 &&
ccf_settings &&
ccf_settings.select2_css &&
ccf_settings.select2_js
) {
// Load Select2 CSS
var link = document.createElement("link");
link.rel = "stylesheet";
link.type = "text/css";
link.href = ccf_settings.select2_css;
document.head.appendChild(link);
// Load Select2 JS
jQuery.getScript(ccf_settings.select2_js, function () {
// Load select2Sortable JS after Select2 JS is loaded
jQuery("select[multiple]").each(function () {
var placeholder = jQuery(this).siblings("label").text(); // Get the text of the associated label
placeholder = placeholder.replace("*", ""); // Remove the asterisk
jQuery(this)
.select2({
placeholder: placeholder, // Set the placeholder
})
.on("select2:select", function (evt) {
var id = evt.params.data.id;
var element = jQuery(this).children("option[value=" + id + "]");
moveElementToEndOfParent(element);
jQuery(this).trigger("change");
});
});
});
moveElementToEndOfParent = function (element) {
var parent = element.parent();
element.detach();
parent.append(element);
};
}
var $ = jQuery;
function Handlechange(fileinput) {
var textinput = $('#' + fileinput).parents('.file-upload-wrap').find('.filename').attr('id');
var textinputDom = document.getElementById(textinput);
var fileinputDom = document.getElementById(fileinput);
var allowedFileType = $('#' + fileinput).attr('allowed-file-type');
var exts = allowedFileType.split(", ");
var enFileTypeArr = [];
// Updated file type mapping for new requirements
for (var e = 0; e < exts.length; e++) {
if ('jpg' === exts[e]) {
enFileTypeArr.push('.jpg');
} else if ('jpeg' === exts[e]) {
enFileTypeArr.push('.jpeg');
} else if ('gif' === exts[e]) {
enFileTypeArr.push('.gif');
} else if ('png' === exts[e]) {
enFileTypeArr.push('.png');
} else if ('mov' === exts[e]) {
enFileTypeArr.push('.mov');
} else if ('mp4' === exts[e]) {
enFileTypeArr.push('.mp4');
} else if ('m4v' === exts[e]) {
enFileTypeArr.push('.m4v');
}
}
// Add related file extensions
if (-1 < $.inArray('jpg', exts)) {
exts.push('jpeg');
}
if (-1 < $.inArray('jpeg', exts)) {
exts.push('jpg');
}
var validateMessage = '';
var fileUploadMessage = '';
var fileFieldNotValidationMessage = '';
if (0 < enFileTypeArr.length) {
fileUploadMessage = 'The type of file you are uploading is not permitted. Please try a different filetype.';
}
validateMessage = 'OK';
fileFieldNotValidationMessage = 'Please upload the required file.';
$('#' + fileinput).parents('.field-container').find('.field-label .not-validate').remove();
$('#' + fileinput).parents('.field-container').find('.field-label .validate').remove();
if (fileinputDom) {
if (0 < fileinputDom.files.length) {
// Check maximum number of files (5)
if (fileinputDom.files.length > 5) {
$('#' + fileinput).parents('.field-wrap').removeClass('valid').addClass('invalid');
$('#' + fileinput).parents('.field-container').find('.field-label').append('Maximum 5 files allowed. Please select fewer files.');
textinputDom.value = '';
return;
}
var fileArr = [];
var uploadfileError = 0;
for (var i = 0; i < fileinputDom.files.length; i++) {
// Updated file size limit to 20MB (20 * 1024 * 1024 = 20971520 bytes)
if (20971520 < fileinputDom.files[i]['size']) {
uploadfileError++;
fileUploadMessage = 'A maximum file size of 20MB is allowed. Please try uploading a smaller file.';
}
var file = fileinputDom.files[i]['name'];
if (file) {
var get_ext = file.split('.');
get_ext = get_ext.reverse();
if (-1 >= $.inArray(get_ext[0].toLowerCase(), exts)) {
uploadfileError++;
fileUploadMessage = 'The type of file you are uploading is not permitted. Please try a different filetype.';
}
}
fileArr.push(fileinputDom.files[i]['name']);
}
var files = fileArr.join(", ");
if (0 === uploadfileError) {
$('#' + fileinput).parents('.field-wrap').removeClass('invalid').addClass('valid');
$('#' + fileinput).parents('.field-container').find('.field-label').append('' + validateMessage + '');
textinputDom.value = files;
} else {
$('#' + fileinput).parents('.field-wrap').removeClass('valid').addClass('invalid');
$('#' + fileinput).parents('.field-container').find('.field-label').append('' + fileUploadMessage + '');
textinputDom.value = '';
}
} else {
if ($('#' + fileinput).parents('.field-wrap').hasClass('required')) {
$('#' + fileinput).parents('.field-wrap').removeClass('valid').addClass('invalid');
$('#' + fileinput).parents('.field-container').find('.field-label').append('' + fileFieldNotValidationMessage + '');
textinputDom.value = '';
}
}
}
};
(()=>{function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(){var e,n,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.toStringTag||"@@toStringTag";function u(t,o,i,a){var u=o&&o.prototype instanceof f?o:f,s=Object.create(u.prototype);return r(s,"_invoke",function(t,r,o){var i,a,u,f=0,s=o||[],l=!1,v={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,r){return i=t,a=0,u=e,v.n=r,c}};function p(t,r){for(a=t,u=r,n=0;!l&&f&&!o&&n3?(o=y===r)&&(u=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=e):i[0]<=p&&((o=t<2&&pr||r>y)&&(i[4]=t,i[5]=r,v.n=y,a=0))}if(o||t>1)return c;throw l=!0,r}return function(o,s,y){if(f>1)throw TypeError("Generator is already running");for(l&&1===s&&p(s,y),a=s,u=y;(n=a<2?e:u)||!l;){i||(a?a<3?(a>1&&(v.n=-1),p(a,u)):v.n=u:v.v=u);try{if(f=2,i){if(a||(o="next"),n=i[o]){if(!(n=n.call(i,u)))throw TypeError("iterator result is not an object");if(!n.done)return n;u=n.value,a<2&&(a=0)}else 1===a&&(n=i.return)&&n.call(i),a<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),a=1);i=e}else if((n=(l=v.n<0)?u:t.call(r,v))!==c)break}catch(t){i=e,a=1,u=t}finally{f=1}}return{value:n,done:l}}}(t,i,a),!0),s}var c={};function f(){}function s(){}function l(){}n=Object.getPrototypeOf;var v=[][i]?n(n([][i]())):(r(n={},i,function(){return this}),n),p=l.prototype=f.prototype=Object.create(v);function y(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,r(e,a,"GeneratorFunction")),e.prototype=Object.create(p),e}return s.prototype=l,r(p,"constructor",l),r(l,"constructor",s),s.displayName="GeneratorFunction",r(l,a,"GeneratorFunction"),r(p),r(p,a,"Generator"),r(p,i,function(){return this}),r(p,"toString",function(){return"[object Generator]"}),(t=function(){return{w:u,m:y}})()}function r(e,t,n,o){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}r=function(e,t,n,o){function a(t,n){r(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!o,configurable:!o,writable:!o}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},r(e,t,n,o)}function n(e,t,r,n,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void r(e)}u.done?t(c):Promise.resolve(c).then(n,o)}function o(e,t){for(var r=0;r=400)){e.n=3;break}return console.error("Server log error:",{status:o.status,message:o.message,response:o.response}),e.a(2);case 3:console.debug("Server log activity recorded:",o),e.n=5;break;case 4:e.p=4,i=e.v,console.error("Error logging activity:",{error:i.message,details:i});case 5:return e.a(2)}},e,null,[[0,4]])}),a=function(){var e=this,t=arguments;return new Promise(function(r,o){var a=i.apply(e,t);function u(e){n(a,r,o,u,c,"next",e)}function c(e){n(a,r,o,u,c,"throw",e)}u(void 0)})},function(_x){return a.apply(this,arguments)})}],r&&o(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,i,a}())})();;