Do you have layout ideas or plans?
Yes
No
Are you ready to get started within three months?
Yes
No
{
const answer = (calculatorData.answers || {})[question.id];
if (answer === undefined || answer === null || answer === '') return;
if (question.type === 'yes_no') {
questionsObject[question.identifier] = String(answer).toLowerCase();
} else if (question.type === 'dropdown') {
const selectedOption = (question.options || []).find(o => String(o.id) === String(answer));
questionsObject[question.identifier] = selectedOption ? selectedOption.option_text : String(answer);
}
});
} else {
// ── Legacy V1 format: map by question text ──
const calculatorFormElement = document.querySelector('.calculatorForm');
let sections = [];
if (calculatorFormElement && window.Alpine) {
const alpineData = Alpine.$data(calculatorFormElement);
if (alpineData && alpineData.sections) sections = alpineData.sections;
}
const questionMapping = {
'Is demolition required before starting the project?': 'demolitionRequired',
'Would you like to include a wet bar or kitchenette?': 'kitchenExist',
'Would you like to have a bathroom?': 'bathroomExist',
'Would you like to have play area for': 'playArea',
'Is your basement currently unfinishe': 'currentlyUnfinish',
'Would you like to have a legal bedr': 'legalBedroom',
'Do you already have a design or layout for your basement?': 'designOrLayout',
'Do you plan to start within the next': 'startWithin3month',
'Would you like us to reach out with': 'OkToRichOut'
};
sections.forEach(section => {
section.questions.forEach(question => {
const answer = (calculatorData.answers || {})[question.id];
if (!answer) return;
const cleanText = question.text.replace(/\n/g, ' ').trim();
let fieldName = null;
for (const [mappedQ, mappedF] of Object.entries(questionMapping)) {
if (cleanText.startsWith(mappedQ)) { fieldName = mappedF; break; }
}
questionsObject[fieldName || cleanText] = answer.toLowerCase();
});
});
}
const dataToSend = {
firstName: $refs.first.value,
lastName : $refs.last.value,
email: $refs.email.value,
phone: $refs.phone.value,
square: calculatorData.squareFeet,
zipCode: ($refs.zipCode && $refs.zipCode.value) ? $refs.zipCode.value.trim() : (calculatorData.zipCode || ''),
howFound: ($refs.howFound && $refs.howFound.value) ? $refs.howFound.value.trim() : (calculatorData.howFound || ''),
additionalComments: ($refs.additionalComments && $refs.additionalComments.value) ? $refs.additionalComments.value.trim() : (calculatorData.additionalComments || ''),
priceRangeMin: calculatorData.priceRange ? calculatorData.priceRange.min : null,
priceRangeMax: calculatorData.priceRange ? calculatorData.priceRange.max : null,
...questionsObject,
...(calculatorData.version === 'v2' ? {
designOrLayout: ($refs.designOrLayout && $refs.designOrLayout.value) ? $refs.designOrLayout.value : '',
startWithin3month: ($refs.startWithin3month && $refs.startWithin3month.value) ? $refs.startWithin3month.value : '',
legalBedroom: 'NA',
playArea: 'NA',
OkToRichOut: 'YES'
} : {}),
utm_source: sessionStorage.getItem('utm_source') || null,
utm_campaign: sessionStorage.getItem('utm_campaign') || null,
gclid: sessionStorage.getItem('gclid') || null,
CSS : sessionStorage.getItem(`referrer`) || 'direct',
CSP: sessionStorage.getItem('conversion_session_page') || '',
FSS: localStorage.getItem('first_session_source') || '',
FSP: localStorage.getItem('first_session_page') || '',
FSD: localStorage.getItem('first_session_date') || '',
CS_medium: sessionStorage.getItem('CS_medium') || null,
CS_campaign: sessionStorage.getItem('CS_campaign') || null,
CS_content: sessionStorage.getItem('CS_content') || null,
CS_term: sessionStorage.getItem('CS_term') || null,
FS_medium: localStorage.getItem('FS_medium') || null,
FS_campaign: localStorage.getItem('FS_campaign') || null,
FS_content: localStorage.getItem('FS_content') || null,
FS_term: localStorage.getItem('FS_term') || null
};
fetch('/api/forms/quote',{
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(dataToSend)
}).then(response => response.json())
.then(data => {
if (data.status === 1) {
formStarted = false;
sessionStorage.removeItem('calculatorData');
const cookieExpires = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toUTCString();
document.cookie = `form_email=${$refs.email.value.trim()}; expires=${cookieExpires}; path=/`;
if ($refs.phone.value) {
document.cookie = `form_phone=${$refs.phone.value.trim()}; expires=${cookieExpires}; path=/`;
}
const conversionSessionPage = sessionStorage.getItem('conversion_session_page');
if (conversionSessionPage) {
document.cookie = `conversion_session_page=${conversionSessionPage}; expires=${cookieExpires}; path=/`;
}
window.location.href = '/thank-you?trigger=calculator';
} else {
show = 'yes';
const errorMsg = typeof data.error === 'object' ? JSON.stringify(data.error) : data.error;
console.error('Error submitting form:', data.error);
alert('Error submitting form: ' + (errorMsg || 'Unknown error'));
}
}).catch(error => {
show = 'yes';
console.error('Error:', error);
const errorMsg = error.message || 'Please try again';
alert('Error submitting form. ' + errorMsg);
});
">
EMAIL ME MY QUOTE