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);
}