GET IN TOUCH

Contact GL Hunt Foundation Repair Of Kirby

GL Hunt Foundation Repair Of Kirby has proudly served the Kirby, TX area since 2008. As a family-owned business, we focus on delivering reliable, high-quality foundation repairs with integrity and professionalism. Our commitment to excellence has helped us build lasting relationships with homeowners and businesses alike, ensuring that every property is safe, stable, and secure. We offer free estimates for all our clients, whether residential or commercial, and back our services with a lifetime transferable warranty for added peace of mind.

We are proud members of the Better Business Bureau and the Chamber of Commerce, adding credibility to our dedication to high standards. Our strong community involvement includes offering discounts for law enforcement, military personnel, senior citizens, retired teachers, and nurses, recognizing the importance of giving back.

Our Services

GET IN TOUCH

.elementor-form .elementor-message-danger, .elementor-form .elementor-message-danger:before, .elementor-form .elementor-message, .elementor-form .elementor-error, .elementor-form .elementor-field-error { display: none !important; } (function () { var VALIDATION_WORKER_URL = window.FORM_VALIDATION_WORKER_URL || 'https://form-validation-worker.michael-215.workers.dev/'; function removeElementorErrors(form) { form.querySelectorAll( '.elementor-message-danger,' + '.elementor-message,' + '.elementor-error,' + '.elementor-field-error' ).forEach(function (el) { el.remove(); }); } function finishSubmission(form, submitBtn, originalText) { removeElementorErrors(form); // Static site: CallRail captures the lead if (window.CallTrk && typeof CallTrk.captureForm === 'function') { CallTrk.captureForm(form); alert('Thank you! Your request has been submitted successfully.'); form.reset(); submitBtn.disabled = false; submitBtn.textContent = originalText; return; } // Live WordPress: pass through to Elementor AJAX after validation form.dataset.validationPassed = 'true'; submitBtn.disabled = false; submitBtn.textContent = originalText; alert('Thank you! Your request has been submitted successfully.'); setTimeout(function () { submitBtn.click(); }, 300); } function initFormValidation(form) { if (form.dataset.validationInitialized === 'true') return; var submitBtn = form.querySelector('button[type="submit"]'); var firstName = form.querySelector('[name="form_fields[ct_fName]"]'); var lastName = form.querySelector('[name="form_fields[ct_lName]"]'); var phoneField = form.querySelector('[name="form_fields[ct_pNumber]"]'); var emailField = form.querySelector('[name="form_fields[ct_email]"]'); var zipField = form.querySelector('[name="form_fields[ct_zCode]"]'); if (!submitBtn || !firstName || !lastName || !phoneField || !emailField || !zipField) { return; } form.dataset.validationInitialized = 'true'; form.setAttribute('novalidate', 'novalidate'); phoneField.setAttribute('type', 'text'); emailField.setAttribute('type', 'text'); var observer = new MutationObserver(function () { removeElementorErrors(form); }); observer.observe(form, { childList: true, subtree: true }); submitBtn.addEventListener( 'click', async function (e) { if (form.dataset.validationPassed === 'true') { form.dataset.validationPassed = ''; return; } e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); removeElementorErrors(form); var fName = firstName.value.trim(); var lName = lastName.value.trim(); var phone = phoneField.value.trim(); var email = emailField.value.trim(); var zip = zipField.value.trim(); var cleanPhone = phone.replace(/D/g, ''); var nameRegex = /^[A-Za-zs'-]{2,30}$/; var emailRegex = /^S+@S+.S+$/; var zipRegex = /^d{5}(-d{4})?$/; if (!nameRegex.test(fName)) { alert('Enter a valid first name.'); firstName.focus(); return; } if (!nameRegex.test(lName)) { alert('Enter a valid last name.'); lastName.focus(); return; } if (cleanPhone.length !== 10) { alert('Enter a valid 10-digit phone number.'); phoneField.focus(); return; } if (!emailRegex.test(email)) { alert('Enter a valid email address.'); emailField.focus(); return; } if (!zipRegex.test(zip)) { alert('Enter a valid ZIP code.'); zipField.focus(); return; } submitBtn.disabled = true; var originalText = submitBtn.textContent; submitBtn.textContent = 'Submitting...'; try { var 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 }) }); var data = await response.json(); if (!data.success) { alert(data.message || 'Submission blocked. Please check your details.'); submitBtn.disabled = false; submitBtn.textContent = originalText; return; } finishSubmission(form, submitBtn, originalText); } catch (error) { console.error('Worker validation failed:', error); alert('Something went wrong. Please try again.'); submitBtn.disabled = false; submitBtn.textContent = originalText; } }, true ); removeElementorErrors(form); console.log('Form validation ready:', form.getAttribute('name') || 'elementor-form'); } function boot() { document.querySelectorAll('.elementor-form').forEach(initFormValidation); } document.addEventListener('DOMContentLoaded', function () { boot(); setTimeout(boot, 500); setTimeout(boot, 2000); if (typeof MutationObserver !== 'undefined') { var mo = new MutationObserver(boot); mo.observe(document.body, { childList: true, subtree: true }); } }); })();