$w.onReady(function () {
// Default values
$w('#milesInput').value = 30;
$w('#laborHoursInput').value = 0;
// Optional: calculate on page load
calculateEstimate();
// Recalculate when button is clicked
$w('#estimateButton').onClick(() => {
calculateEstimate();
});
// Optional: live recalculation as values change
$w('#milesInput').onInput(() => calculateEstimate());
$w('#disassemblyCheckbox').onChange(() => calculateEstimate());
$w('#packingCheckbox').onChange(() => calculateEstimate());
$w('#laborHoursInput').onInput(() => calculateEstimate());
});
function calculateEstimate() {
const BASE_RATE = 125;
const INCLUDED_MILES = 30;
const EXTRA_MILE_RATE = 1;
const DISASSEMBLY_RATE = 40;
const PACKING_RATE = 25;
const EXTRA_LABOR_RATE = 60;
let miles = Number($w('#milesInput').value) || 0;
let extraLaborHours = Number($w('#laborHoursInput').value) || 0;
let disassemblySelected = $w('#disassemblyCheckbox').checked;
let packingSelected = $w('#packingCheckbox').checked;
// Clean up negatives
if (miles < 0) miles = 0;
if (extraLaborHours < 0) extraLaborHours = 0;
// Mileage charge
let extraMiles = Math.max(0, miles - INCLUDED_MILES);
let mileageCharge = extraMiles * EXTRA_MILE_RATE;
// Add-ons
let addonsCharge = 0;
if (disassemblySelected) {
addonsCharge += DISASSEMBLY_RATE;
}
if (packingSelected) {
addonsCharge += PACKING_RATE;
}
addonsCharge += extraLaborHours * EXTRA_LABOR_RATE;
// Total
let totalEstimate = BASE_RATE + mileageCharge + addonsCharge;
// Output text
$w('#mileageChargeText').text = `Mileage Charge: $${mileageCharge.toFixed(2)}`;
$w('#addonsChargeText').text = `Add-Ons Charge: $${addonsCharge.toFixed(2)}`;
$w('#totalEstimateText').text = `Estimated Total: $${totalEstimate.toFixed(2)}`;
// Friendly service note
let note = `Flat rate includes up to ${INCLUDED_MILES} miles. Furniture must be assembled and ready to move for flat-rate service.`;
if (disassemblySelected) {
note += ` Disassembly/Reassembly has been added.`;
}
$w('#serviceNoteText').text = note;
}
top of page
bottom of page