Contact DSH Pressure Washing Fort Worth | Free Quote

Contact Us

Contact Us

(function() { 'use strict'; console.log('🔍 Address Autocomplete Script Loading...'); const GOOGLE_API_KEY = 'AIzaSyD347GlhDTwEY2ehrK5iVzZJF0iBeBO8mw'; function loadGooglePlacesAPI() { console.log('📍 Loading Google Places API...'); if (window.google && window.google.maps) { console.log('✅ Google Maps already loaded'); initAutocomplete(); return; } const script = document.createElement('script'); script.src = `https://maps.googleapis.com/maps/api/js?key=${GOOGLE_API_KEY}&libraries=places`; script.async = true; script.defer = true; script.onload = () => { console.log('✅ Google Places API loaded successfully'); initAutocomplete(); }; script.onerror = () => { console.error('❌ Failed to load Google Places API'); }; document.head.appendChild(script); console.log('📡 Google Places API script added to page'); } function initAutocomplete() { console.log('🔍 Looking for address input field...'); let attempts = 0; const checkForm = setInterval(() => { attempts++; console.log(`🔍 Attempt ${attempts}: Searching for address field...`); // Try multiple selectors const selectors = [ 'input[placeholder*="address" i]', 'input[name*="address" i]', 'input[placeholder*="Property Address"]', 'input[name*="Property Address"]', '.elementor-field-type-text input' ]; let addressInput = null; for (const selector of selectors) { addressInput = document.querySelector(selector); if (addressInput) { console.log(`✅ Found address field using selector: ${selector}`, addressInput); break; } } if (addressInput) { clearInterval(checkForm); console.log('✅ Address input found!', addressInput); setupAutocomplete(addressInput); } else if (attempts >= 20) { clearInterval(checkForm); console.error('❌ Could not find address input field after 20 attempts'); console.log('Available inputs:', document.querySelectorAll('input')); } }, 500); } function setupAutocomplete(input) { console.log('🎯 Setting up autocomplete on:', input); try { const options = { types: ['address'], componentRestrictions: { country: 'us' }, fields: ['address_components', 'formatted_address', 'geometry'] }; const autocomplete = new google.maps.places.Autocomplete(input, options); console.log('✅ Autocomplete instance created'); autocomplete.addListener('place_changed', () => { console.log('📍 Place changed event fired'); const place = autocomplete.getPlace(); console.log('Selected place:', place); if (!place.geometry) { console.log('⚠️ No geometry available for:', place.name); return; } const addressData = parseAddressComponents(place.address_components); console.log('Parsed address data:', addressData); input.value = `${addressData.streetNumber} ${addressData.street}, ${addressData.city} ${addressData.state}, ${addressData.zip}`; fillOtherFields(addressData); input.dispatchEvent(new Event('change', { bubbles: true })); console.log('✅ Address filled:', input.value); }); console.log('🎉 Google Places Autocomplete fully initialized!'); } catch (error) { console.error('❌ Error setting up autocomplete:', error); } } function parseAddressComponents(components) { const data = { streetNumber: '', street: '', city: '', state: '', zip: '' }; components.forEach(component => { const types = component.types; if (types.includes('street_number')) data.streetNumber = component.long_name; if (types.includes('route')) data.street = component.long_name; if (types.includes('locality')) data.city = component.long_name; if (types.includes('administrative_area_level_1')) data.state = component.short_name; if (types.includes('postal_code')) data.zip = component.long_name; }); return data; } function fillOtherFields(addressData) { const cityField = document.querySelector('select[name*="city" i], input[name*="city" i]'); if (cityField && addressData.city) { if (cityField.tagName === 'SELECT') { const cityFormatted = addressData.city.toLowerCase().replace(/\s+/g, '_'); const option = Array.from(cityField.options).find( opt => opt.value === cityFormatted || opt.text.toLowerCase() === addressData.city.toLowerCase() ); if (option) { cityField.value = option.value; cityField.dispatchEvent(new Event('change', { bubbles: true })); } } else { cityField.value = addressData.city; cityField.dispatchEvent(new Event('change', { bubbles: true })); } } } // Initialize immediately console.log('🚀 Starting initialization...'); if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', loadGooglePlacesAPI); console.log('⏳ Waiting for DOM to load...'); } else { console.log('✅ DOM already loaded, initializing now'); loadGooglePlacesAPI(); } // Also initialize when popup opens document.addEventListener('elementor/popup/show', () => { console.log('🎯 Elementor popup opened, re-initializing...'); setTimeout(loadGooglePlacesAPI, 500); }); })()