(function(){const VALIDATION_WORKER_URL=window.FORM_VALIDATION_WORKER_URL||'https://form-validation-worker.michael-215.workers.dev/';const NAME_RE=/^[A-Za-z\s'-]{2,30}$/;const EMAIL_RE=/^\S+@\S+\.\S+$/;const ZIP_RE=/^\d{5}(-\d{4})?$/;function captureWithCallRail(form){form.dataset.fvPass='true';try{if(typeof window.submitToCallRail==='function'){window.submitToCallRail(form);return true;} if(window.CallTrk&&typeof CallTrk.captureForm==='function'){CallTrk.captureForm(form);return true;} form.dispatchEvent(new Event('submit',{bubbles:true,cancelable:true}));return false;}finally{delete form.dataset.fvPass;}} function fieldsOf(form){if(!form||!form.querySelector)return null;const submitBtn=form.querySelector('button[type="submit"]');const firstName=form.querySelector('[name="form_fields[ct_fName]"]');const lastName=form.querySelector('[name="form_fields[ct_lName]"]');const phoneField=form.querySelector('[name="form_fields[ct_pNumber]"]');const emailField=form.querySelector('[name="form_fields[ct_email]"]');const zipField=form.querySelector('[name="form_fields[ct_zCode]"]');if(!submitBtn||!firstName||!lastName||!phoneField||!emailField||!zipField){return null;} return{submitBtn,firstName,lastName,phoneField,emailField,zipField};} function prepareForm(form){const f=fieldsOf(form);if(!f)return null;form.setAttribute('novalidate','novalidate');f.phoneField.setAttribute('type','text');f.emailField.setAttribute('type','text');return f;} function removeElementorErrors(form){form.querySelectorAll('.elementor-message-danger,'+'.elementor-message,'+'.elementor-error,'+'.elementor-field-error').forEach(function(el){el.remove();});} async function validateAndSend(form,e){if(form.dataset.fvPass==='true')return;const f=prepareForm(form);if(!f)return;if(e){e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();} removeElementorErrors(form);const fName=f.firstName.value.trim();const lName=f.lastName.value.trim();const phone=f.phoneField.value.trim();const email=f.emailField.value.trim();const zip=f.zipField.value.trim();const cleanPhone=phone.replace(/\D/g,'');if(!NAME_RE.test(fName)){alert('Enter a valid first name.');f.firstName.focus();return;} if(!NAME_RE.test(lName)){alert('Enter a valid last name.');f.lastName.focus();return;} if(cleanPhone.length!==10){alert('Enter a valid 10-digit phone number.');f.phoneField.focus();return;} if(!EMAIL_RE.test(email)){alert('Enter a valid email address.');f.emailField.focus();return;} if(!ZIP_RE.test(zip)){alert('Enter a valid ZIP code.');f.zipField.focus();return;} f.submitBtn.disabled=true;const originalText=f.submitBtn.textContent;f.submitBtn.textContent='Submitting...';var data=null;try{const response=await fetch(VALIDATION_WORKER_URL,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({firstName:fName,lastName:lName,phone:cleanPhone,email:email,zip:zip})});if(response.status>=500){throw new Error('validation worker returned '+response.status);} data=await response.json();}catch(workerError){console.error('Worker unreachable, capturing lead without validation:',workerError);removeElementorErrors(form);captureWithCallRail(form);alert('Thank you! Your request has been submitted successfully.');form.reset();f.submitBtn.disabled=false;f.submitBtn.textContent=originalText;return;} try{if(!data||!data.success){alert((data&&data.message)||'Submission blocked. Please check your details.');f.submitBtn.disabled=false;f.submitBtn.textContent=originalText;return;} removeElementorErrors(form);captureWithCallRail(form);alert('Thank you! Your request has been submitted successfully.');form.reset();f.submitBtn.disabled=false;f.submitBtn.textContent=originalText;}catch(error){console.error('Worker validation failed:',error);alert('Something went wrong. Please try again.');f.submitBtn.disabled=false;f.submitBtn.textContent=originalText;}} function boot(){document.querySelectorAll('.elementor-form').forEach(prepareForm);} function start(){if(!window.__ctFvDelegate){window.__ctFvDelegate=true;document.addEventListener('click',function(e){const btn=e.target.closest&&e.target.closest('.elementor-form button[type="submit"]');if(!btn)return;const form=btn.closest('.elementor-form');if(!fieldsOf(form))return;validateAndSend(form,e);},true);document.addEventListener('submit',function(e){const form=e.target;if(!form||!form.classList||!form.classList.contains('elementor-form'))return;if(!fieldsOf(form))return;validateAndSend(form,e);},true);} boot();setTimeout(boot,500);setTimeout(boot,2000);if(typeof MutationObserver!=='undefined'&&document.body){new MutationObserver(boot).observe(document.body,{childList:true,subtree:true});}} if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',start);}else{start();}})();