<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Dynamic Booking System</title> <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> <script> $(document).ready(function() { initializeForm(); $("#voyageSelection").change(handleVoyageChange); $("#startDate, #endDate, #people, input[name='cabinType']").change(calculatePrice); }); function initializeForm() { // Initialize date pickers $("#startDate, #endDate").datepicker({ minDate: 0, onSelect: calculatePrice }); handleVoyageChange(); // Initial form state update } function handleVoyageChange() { var voyage = $("#voyageSelection").val(); $(".dynamic").hide(); // Hide all dynamic elements if (voyage === "4") { $("#cabinOptions").show(); $("#dateRangeSelection").hide(); // Hide date range for fixed-date retreat $("#peopleSelection").show(); } else if (voyage === "5" || voyage === "6") { $("#dateRangeSelection, #peopleSelection").show(); $("#cabinOptions").hide(); // Hide cabin options for private hires } calculatePrice(); } function calculatePrice() { let voyage = $("#voyageSelection").val(); let startDate = $("#startDate").datepicker("getDate"); let endDate = $("#endDate").datepicker("getDate"); let days = 0; if (startDate && endDate) { days = Math.ceil((endDate - startDate) / (1000 * 60 * 60 * 24)); } let people = parseInt($("#people").val() || "1", 10); let cabinType = $("input[name='cabinType']:checked").val(); let price = 0; switch (voyage) { case "1": price = 2700; break; case "2": price = 9000; break; case "3": price = 5590; break; case "4": if (cabinType === "owners") price = 4000; else if (cabinType === "sharedOwners") price = 2500 * people; else price = 2000 * people; // Assume shared starboard or port break; case "5": case "6": let basePricePerDay = voyage === "5" ? 1000 : 1300; price = basePricePerDay * days * people; break; } $("#totalPrice").text("Total Price: " + price + "€"); } </script> </head> <body> <form> <label for="voyageSelection">Select Your Voyage:</label> <select id="voyageSelection"> <option value="1">Executive Seascape - Archipelago Explorer</option> <option value="2">Executive Seascape - Strategic Leadership Challenge 3 Days</option> <option value="3">Executive Seascape - 1 Day Charter</option> <option value="4">Yoga & Sailing Retreat - 1 Week</option> <option value="5">Private Hire without Skipper</option> <option value="6">Private Hire with Skipper</option> </select><br><br> <div id="dateRangeSelection" class="dynamic"> <label for="startDate">Start Date:</label> <input type="text" id="startDate"><br><br> <label for="endDate">End Date:</label> <input type="text" id="endDate"><br><br> </div> <div id="peopleSelection" class="dynamic"> <label for="people">Amount of People:</label> <input type="number" id="people" min="1" max="6"><br><br> </div> <div id="cabinOptions" class="dynamic"> <fieldset> <legend>Cabin Type:</legend> <input type="radio" id="owners" name="cabinType" value="owners"> <label for="owners">Owners Cabin (Private)</label><br> <input type="radio" id="sharedOwners" name="cabinType" value="sharedOwners"> <label for="sharedOwners">Owners Cabin (Shared)</label><br> <input type="radio" id="starboard" name="cabinType" value="starboard" checked> <label for="starboard">Starboard/Portside Cabin (Private)</label><br> <input type="radio" id="shared" name="cabinType" value="shared"> <label for="shared">Starboard/Portside Cabin (Shared)</label><br> </fieldset><br> </div> <span id="totalPrice">Total Price: 0€</span> </form> </body> </html>