function createContactForm() { const companyNodes = document.querySelectorAll('.company-item'); const id1 = companyNodes[0]?.dataset.id || ''; const id2 = companyNodes[1]?.dataset.id || ''; const id3 = companyNodes[2]?.dataset.id || ''; if (!id1) { alert("Fant ingen leverandører. Gjør et søk først."); return; } const formId = 'contactForm'; closeForm( formId ); const body = document.body; const container = document.createElement('div'); container.id = formId; container.style = ` position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: white; padding: 25px; border: 1px solid #ccc; box-shadow: 0 4px 8px rgba(0,0,0,0.4); z-index: 1010; text-align: left; max-width: 520px; min-width: 320px; `; const form = document.createElement('form'); form.method = 'post'; form.action = 'https://covestor.no/TreBeste.aspx?Fn=NewRequest'; form.setAttribute('data-hs-ignore', 'true'); const storedName = getCookie('feedbackName'); const storedEmail = getCookie('feedbackEmail'); const storedAddress = getCookie('feedbackAddress'); const storedZip = getCookie('feedbackZip'); const storedCity = getCookie('feedbackCity'); const storedDesc = getCookie('feedbackDescription'); const storedSrcV = getCookie('_tbv_Src'); const storedFbclidV = getCookie('_tbv_fbclid'); const storedGclidV = getCookie('_tbv_gclid'); const storedSrcT = getCookie('_tbt_Src'); const storedFbclidT = getCookie('_tbt_fbclid'); const storedGclidT = getCookie('_tbt_gclid'); const query = document.getElementById('form-field-query')?.value || ''; const zip = document.getElementById('form-field-zipcode')?.value || storedZip || ''; form.innerHTML = ` Få tilbud
`; const sendBtn = document.createElement('button'); sendBtn.type = 'submit'; sendBtn.innerHTML = 'Send forespørsel'; sendBtn.style = 'padding: 10px 15px; background: #2E94D2; color: #FFFFFF; border: none; border-radius: 3px; cursor: pointer;'; const closeBtn = document.createElement('button'); closeBtn.type = 'button'; closeBtn.textContent = 'Lukk'; closeBtn.style = 'padding: 10px 15px; margin-left: 10px; background: #6C757D; color: #FFFFFF; border: none; border-radius: 3px; cursor: pointer;'; closeBtn.addEventListener('click', function () { closeForm( formId ); }); form.appendChild(sendBtn); form.appendChild(closeBtn); form.onsubmit = async function (e) { e.preventDefault(); const formData = new FormData(form); const name = formData.get('Name'); const email = formData.get('Email'); const desc = formData.get('Description'); const address = formData.get('Address1'); const zip = formData.get('Zip'); const city = formData.get('City'); const shouldRemember = document.getElementById('remember').checked; try { const response = await fetch(form.action, { method: 'POST', body: formData }); if (response.ok) { const data = await response.json(); if (data?.GUID) { setCookie('feedbackGUID', data.GUID, 180); } if (shouldRemember) { setCookie('feedbackName', name, 180); setCookie('feedbackEmail', email, 180); setCookie('feedbackAddress', address, 180); setCookie('feedbackZip', zip, 180); setCookie('feedbackCity', city, 180); setCookie('feedbackDescription', desc, 180); } else { ['feedbackName', 'feedbackEmail', 'feedbackAddress', 'feedbackZip', 'feedbackCity', 'feedbackDescription'].forEach(key => setCookie(key, '', 0)); } showResponseMessage('Takk! Vi har sendt din forespørsel til de tre beste.', 'success'); closeForm( formId ); } else { showResponseMessage('Det oppsto en feil ved sending av skjema.', 'error'); } } catch { showResponseMessage('Nettverksfeil. Prøv igjen senere.', 'error'); } const response = await fetch('https://io.trebeste.no/form', { method: 'POST', body: formData }); }; container.appendChild(form); body.appendChild(container); body.style.overflow = 'hidden'; // Autofill poststed if zip is valid setTimeout(() => { const zipField = document.getElementById('zipInput'); const cityField = document.getElementById('cityInput'); function updateCity() { const zip = zipField.value.trim(); if (/^\d{4}$/.test(zip)) { fetch(`https://io.trebeste.no/zipcode2place?zip=${zip}`) .then(res => { if (!res.ok) throw new Error('Ikke funnet'); return res.json(); }) .then(data => { const city = data?.place || ''; cityField.value = city; cityField.setAttribute('value', city); }) .catch(() => { cityField.value = ''; }); } else { cityField.value = ''; } } if (zipField && cityField) { zipField.addEventListener('input', updateCity); updateCity(); } }, 10); }