File: /mnt/data/dreamsrent-wp-demo/wp-content/themes/dreamsrent/assets/js/booking.js
/*** Booking Form Functions****/
jQuery(document).ready(function ($) {
var hourFormat = window.hourFormat;
var timeFormat = (hourFormat === '12') ? 'hh:mm A' : 'HH:mm';
var minuteStepping = (hourFormat === '12') ? 10 : 60;
/**Start Date */
// Initialize date picker
$('#startdatePicker').datetimepicker({
format: 'DD-MM-YYYY',
});
$('#startdatePickerhome').datetimepicker({
format: 'DD-MM-YYYY',
});
// Initialize time picker
$('#starttimePicker').datetimepicker({
format: timeFormat,
stepping: minuteStepping,
});
// Combine date and time and set the result to the output input
$('#startdatePicker, #starttimePicker').on('dp.change', function () {
var datestart = $('#startdatePicker').val();
var timestart = $('#starttimePicker').val();
var combinedDateTime_start = datestart + ' ' + timestart;
$('#outputDateTime_start').val(combinedDateTime_start);
// Set the end time picker value to be the same as the start time picker value
var startTime = $('#starttimePicker').val();
if ($('input[name="time-option"]:checked').val() === 'day') {
$('#endtimePicker').val(startTime);
// $('#endtimePicker').val($(this).val());
}
// $('#endtimePicker').val(startTime);
hiddenEndTime.value = startTime;
});
/**End Date */
$('#enddatePicker').datetimepicker({
format: 'DD-MM-YYYY',
});
// Initialize time picker
$('#endtimePicker').datetimepicker({
format: timeFormat,
});
if ($('input[name="time-option"]:checked').val() === 'day') {
$('#starttimePicker').on('dp.change', function () {
var dateend = $('#enddatePicker').val();
var timeend = $('#starttimePicker').val();
var combinedDateTime_end = dateend + ' ' + timeend;
$('#outputDateTime_end').val(combinedDateTime_end);
});
}
else if ($('input[name="time-option"]:checked').val() === 'hour'){
// Combine date and time and set the result to the output input
$('#enddatePicker, #endtimePicker').on('dp.change', function () {
var dateend = $('#enddatePicker').val();
var timeend = $('#endtimePicker').val();
var combinedDateTime_end = dateend + ' ' + timeend;
$('#outputDateTime_end').val(combinedDateTime_end);
});
}
if ($('#startdatePicker').length > 0) {
$('#startdatePicker').datetimepicker({
format: 'DD-MM-YYYY',
icons: {
up: "fas fa-angle-up",
down: "fas fa-angle-down",
next: 'fas fa-angle-right',
previous: 'fas fa-angle-left'
},
minDate: new Date()
});
// Update end date placeholder with start date
// $('#enddatePicker').on('dp.change', function (e) {
// $('#enddatePicker').data("DateTimePicker").minDate(e.date);
// $('#enddatePicker').val(e.date.format('DD-MM-YYYY'));
// });
$('#enddatePicker').on('dp.show', function(e) {
var startDate = $('#startdatePicker').val();
$(this).data("DateTimePicker").minDate(startDate);
});
$('#starttimePicker').datetimepicker({
timeFormat: timeFormat,
interval: 30,
stepping: minuteStepping,
change: function(time) {
// Update hidden input with selected time
$('#hiddenStartTime').val($(this).val());
}
});
$('#endtimePicker').datetimepicker({
timeFormat: timeFormat,
interval: 30,
stepping: minuteStepping,
change: function(time) {
// Update hidden input with selected time
$('#hiddenEndTime').val($(this).val());
}
});
// Trigger change event on page load to set hidden inputs if there are default values
$('#starttimePicker').trigger('change');
$('#endtimePicker').trigger('change');
// Disable the end time picker so that the user cannot modify its value
// $('#endtimePicker').prop('disabled', true);
}
if ($('#enddatePicker').length > 0) {
$('#enddatePicker').datetimepicker({
format: 'DD-MM-YYYY',
icons: {
up: "fas fa-angle-up",
down: "fas fa-angle-down",
next: 'fas fa-angle-right',
previous: 'fas fa-angle-left'
},
});
}
});
/*** Booking Form Functions****/
jQuery(document).ready(function($) {
// $('.dsrent_pickup_loc').on('change', function() {
// var selectedLocation = $(this).val();
// $('#dsrent_pickup_loc_hidden').val(selectedLocation);
// });
$(document).ready(function () {
// Check if the location is selected from the session and set the hidden input value
var selectedLocation = $('.dsrent_pickup_loc').val();
var selectedOption = $('.dsrent_pickup_loc option:selected');
// Check if selectedOption has a value and set the hidden field
if (selectedOption.length > 0 && selectedOption.is(':selected')) {
$('#dsrent_pickup_loc_hidden').val(selectedOption.val());
} else {
$('#dsrent_pickup_loc_hidden').val(selectedLocation);
}
// On change event for the location select input
$('.dsrent_pickup_loc').on('change', function () {
var selectedLocation = $(this).val();
$('#dsrent_pickup_loc_hidden').val(selectedLocation);
});
});
$(document).ready(function () {
// Check if the location is selected from the session and set the hidden input value
var selectedLocation = $('.dsrent_pickoff_loc').val();
var selectedOption = $('.dsrent_pickoff_loc option:selected');
// Check if selectedOption has a value and set the hidden field
if (selectedOption.length > 0 && selectedOption.is(':selected')) {
$('#dsrent_pickoff_loc_hidden').val(selectedOption.val());
} else {
$('#dsrent_pickoff_loc_hidden').val(selectedLocation);
}
// On change event for the location select input
$('.dsrent_pickoff_loc').on('change', function () {
var selectedLocation = $(this).val();
$('#dsrent_pickoff_loc_hidden').val(selectedLocation);
});
});
$(document).ready(function () {
// Add click event to the search button
$('.search-button').on('click', function (e) {
e.preventDefault(); // Prevent default form submission
const pickupDate = $('#startdatePickerhome').val();
const returnDate = $('#enddatePickerHome').val();
if (pickupDate && returnDate) {
// Convert DD-MM-YYYY to YYYY-MM-DD for valid date comparison
const pickupDateParts = pickupDate.split('-');
const returnDateParts = returnDate.split('-');
const pickupDateFormatted = new Date(`${pickupDateParts[2]}-${pickupDateParts[1]}-${pickupDateParts[0]}`);
const returnDateFormatted = new Date(`${returnDateParts[2]}-${returnDateParts[1]}-${returnDateParts[0]}`);
if (returnDateFormatted <= pickupDateFormatted) {
alert('Return Date must be greater than Pickup Date.');
return; // Stop form submission
}
} else {
// alert('Error: Both Pickup Date and Return Date are required.');
// return; // Stop form submission
}
// If validation passes, submit the form
$(this).closest('form').submit();
});
});
// $('.dsrent_pickoff_loc').on('change', function() {
// var selectedLocation2 = $(this).val();
// $('#dsrent_pickoff_loc_hidden').val(selectedLocation2);
// });
jQuery(document).ready(function($) {
$('input[name="time-option"]').on('change', function() {
$('#startdatePicker').val('');
$('#enddatePicker').val('');
$('#starttimePicker').val('');
$('#endtimePicker').val('');
});
});
});
/*** Booking form validation ***/
function validateForm() {
// Reset error messages
document.getElementById("pickup_loc_error").innerHTML = "";
document.getElementById("dropoff_loc_error").innerHTML = "";
document.getElementById("pickup_date_error").innerHTML = "";
document.getElementById("pickup_time_error").innerHTML = "";
document.getElementById("pickoff_date_error").innerHTML = "";
document.getElementById("pickoff_time_error").innerHTML = "";
document.getElementById("min_oneday").innerHTML = "";
document.getElementById("time_error").innerHTML = "";
// Get selected values
const pickupLoc = document.getElementById("dsrent_pickup_loc").value;
const dropoffLoc = document.getElementById("dsrent_pickoff_loc").value;
const pickupDate = document.getElementById("startdatePicker").value;
const dropoffDate = document.getElementById("enddatePicker").value;
const pickupTimeInput = document.getElementById("starttimePicker");
const dropoffTimeInput = document.getElementById("endtimePicker");
var timeOption = document.querySelector('input[name="time-option"]:checked').value;
const pickupTime = pickupTimeInput.value || pickupTimeInput._flatpickr?.selectedDates[0];
const dropoffTime = dropoffTimeInput.value || dropoffTimeInput._flatpickr?.selectedDates[0];
var isValid = true;
// if (pickupTime >= dropoffTime) {
// isValid = false;
// }
// if (pickupLoc === "") {
// document.getElementById("pickup_loc_error").innerHTML = "Please select a pickup location.";
// isValid = false;
// }
if (pickupLoc === "") {
document.getElementById("pickup_loc_error").innerHTML = bookingTranslations.pickup_location_error;
isValid = false;
}
if (dropoffLoc === "") {
document.getElementById("dropoff_loc_error").innerHTML = bookingTranslations.dropoff_location_error;
isValid = false;
}
if (pickupDate === "") {
document.getElementById("pickup_date_error").innerHTML = bookingTranslations.pickup_date_error;
isValid = false;
}
if (dropoffDate === "") {
document.getElementById("pickoff_date_error").innerHTML = bookingTranslations.dropoff_date_error;
isValid = false;
}
if (pickupTime === "") {
document.getElementById("pickup_time_error").innerHTML = bookingTranslations.pickup_time_error;
isValid = false;
}
if (dropoffTime === "") {
document.getElementById("pickoff_time_error").innerHTML =bookingTranslations.dropoff_time_error;
isValid = false;
}
// if (pickupDate == dropoffDate) {
// isValid = false;
// }
function parseDateTime(dateStr, timeStr) {
// First ensure we have valid strings
if (typeof dateStr !== 'string' || typeof timeStr !== 'string') {
console.error('Invalid date/time input:', { dateStr, timeStr });
return null;
}
// Split the date string into day, month, year
const dateParts = dateStr.split('-');
if (dateParts.length !== 3) {
console.error('Invalid date format (expected DD-MM-YYYY):', dateStr);
return null;
}
const [day, month, year] = dateParts.map(Number);
// Parse the time string with proper validation
let hours = 0, minutes = 0;
if (typeof timeStr === 'string') {
const timeParts = timeStr.split(':');
if (timeParts.length >= 2) {
hours = parseInt(timeParts[0]) || 0;
minutes = parseInt(timeParts[1]) || 0;
// Handle 12-hour format if PM/AM is present
if (timeStr.toLowerCase().includes('pm') && hours < 12) {
hours += 12;
}
if (timeStr.toLowerCase().includes('am') && hours === 12) {
hours = 0;
}
}
}
// Create a Date object (months are 0-indexed in JavaScript)
const dateObj = new Date(year, month - 1, day, hours, minutes);
// Validate the date object
if (isNaN(dateObj.getTime())) {
console.error('Invalid date created from:', { day, month, year, hours, minutes });
return null;
}
return dateObj;
}
const pickupDateTime = parseDateTime(pickupDate, pickupTime);
const dropoffDateTime = parseDateTime(dropoffDate, dropoffTime);
// Calculate difference in milliseconds
const timeDifference = dropoffDateTime - pickupDateTime;
const hoursDifference = timeDifference / (1000 * 60 * 60);
if (timeOption === 'day') {
// Check if rental is less than 24 hours
console.log(pickupDate, pickupTime,pickupDateTime,dropoffDateTime,pickupDateTime,hoursDifference);
if (hoursDifference < 24) {
document.getElementById("min_oneday").innerHTML = bookingTranslations.min_oneday_error;
isValid = false;
}
// Check if same day (regardless of time)
if (pickupDate === dropoffDate) {
document.getElementById("pickup_date_error").innerHTML = bookingTranslations.pickup_date_error2;
isValid = false;
}
} else if (timeOption === 'hour') {
if(pickupDate === dropoffDate){
if(pickupTime >= dropoffTime) {
// document.getElementById('pickup_date_error').textContent = 'Pickup and Dropoff dates must be the same for hour rental.';
document.getElementById("time_error").innerHTML = bookingTranslations.time_error_error2;
isValid = false;
} else if (pickupDate !== dropoffDate){
isValid = true;
}
}
} else {
document.getElementById('pickup_date_error').textContent = '';
}
if (isValid) {
return true;
} else {
return false;
}
}
// for radio button
function handlePaymentType(type) {
// Update the hidden field value based on the selected type
document.getElementById('dsr_type_deposit_hidden').value = type;
}
// Enquiry Us
// document.addEventListener('DOMContentLoaded', function() {
// const starttimePicker = document.getElementById('starttimePicker');
// const endtimePicker = document.getElementById('endtimePicker');
// const hiddenStartTime = document.getElementById('hiddenStartTime');
// const hiddenEndTime = document.getElementById('hiddenEndTime');
// starttimePicker.addEventListener('change', function() {
// hiddenStartTime.value = starttimePicker.value;
// });
// endtimePicker.addEventListener('change', function() {
// hiddenEndTime.value = endtimePicker.value;
// });
// });
document.addEventListener('DOMContentLoaded', function() {
const starttimePicker = document.getElementById('starttimePicker');
const endtimePicker = document.getElementById('endtimePicker');
const hiddenStartTime = document.getElementById('hiddenStartTime');
const hiddenEndTime = document.getElementById('hiddenEndTime');
// console.log(starttimePicker, endtimePicker, hiddenStartTime, hiddenEndTime);
if (starttimePicker && endtimePicker && hiddenStartTime && hiddenEndTime) {
starttimePicker.addEventListener('change', function() {
hiddenStartTime.value = starttimePicker.value;
});
endtimePicker.addEventListener('change', function() {
hiddenEndTime.value = endtimePicker.value;
});
}
});
function updateFormActionAndSubmit(form) {
const startTime = document.getElementById('hiddenStartTime').value;
const endTime = document.getElementById('hiddenEndTime').value;
form.action = form.action.split('?')[0] + '?start_time=' + encodeURIComponent(startTime) + '&end_time=' + encodeURIComponent(endTime);
return true; // Allow form submission
}
jQuery(document).ready(function($) {
// $('#endtimePicker').prop('disabled', true);
$('input[name="time-option"]').on('change', function() {
if ($(this).val() === 'day') {
// $('#endtimePicker').prop('disabled', true);
} else if ($(this).val() === 'hour') {
$('#endtimePicker').prop('disabled', false);
}
});
$('#starttimePicker').on('change', function() {
if ($('input[name="time-option"]:checked').val() === 'day') {
// $('#endtimePicker').val($(this).val());
}
});
});
jQuery(document).ready(function ($) {
const timeMonth = $("#time-month");
const pickupDateInput = $("#startdatePicker");
const pickupTimeInput = $("#starttimePicker");
const dropoffDateInput = $("#enddatePicker");
const dropoffTimeInput = $("#endtimePicker");
const TimeWeek = $("#time-week");
// Initialize Bootstrap DateTimePicker with DD-MM-YYYY format
pickupDateInput.datetimepicker({
format: "DD-MM-YYYY",
useCurrent: false
});
pickupTimeInput.datetimepicker({
format: "HH:mm",
useCurrent: false
});
dropoffDateInput.datetimepicker({
format: "DD-MM-YYYY",
useCurrent: false
});
dropoffTimeInput.datetimepicker({
format: "HH:mm",
useCurrent: false
});
// Function to update Drop-off Date & Time
function updateDropoffDateTime() {
if (timeMonth.is(":checked")) {
let selectedDate = pickupDateInput.data("DateTimePicker").date();
let selectedTime = pickupTimeInput.data("DateTimePicker").date();
if (!selectedDate || !selectedTime) return;
// Combine Date & Time
let selectedDateTime = selectedDate.clone().hour(selectedTime.hour()).minute(selectedTime.minute());
// Add 30 Days
let newDateTime = selectedDateTime.clone().add(30, "days");
// Update Drop-off Date & Time
dropoffDateInput.data("DateTimePicker").date(newDateTime);
dropoffTimeInput.data("DateTimePicker").date(newDateTime);
// Disable Drop-off Date & Time fields
dropoffDateInput.attr("readonly", true);
dropoffTimeInput.attr("readonly", true);
} else if (TimeWeek.is(":checked")) {
let selectedDate = pickupDateInput.data("DateTimePicker").date();
let selectedTime = pickupTimeInput.data("DateTimePicker").date();
if (!selectedDate || !selectedTime) return;
// Combine Date & Time
let selectedDateTime = selectedDate.clone().hour(selectedTime.hour()).minute(selectedTime.minute());
// Add 7 Days
let newDateTime = selectedDateTime.clone().add(7, "days");
// Update Drop-off Date & Time
dropoffDateInput.data("DateTimePicker").date(newDateTime);
dropoffTimeInput.data("DateTimePicker").date(newDateTime);
// Disable Drop-off Date & Time fields
dropoffDateInput.attr("readonly", true);
dropoffTimeInput.attr("readonly", true);
} else {
// Enable Drop-off Date & Time fields for other rental types
dropoffDateInput.attr("readonly", false);
dropoffTimeInput.attr("readonly", false);
}
}
// Event listener for Pickup Date or Time change
$("#startdatePicker, #starttimePicker").on("dp.change", function () {
updateDropoffDateTime();
});
// Event listener for changing Rental Type
$("input[name='time-option']").on("change", function () {
updateDropoffDateTime();
});
});
// var startTime = $('#starttimePicker').val();
// $('#endtimePicker').val(startTime);
// hiddenEndTime.value = startTime;
// document.addEventListener('DOMContentLoaded', function() {
// const insuranceRadios = document.querySelectorAll('.dsrent_insurance_radio');
// const bookingNotesDiv = document.getElementById('tpl_booking_notes');
// insuranceRadios.forEach(function(radio) {
// radio.addEventListener('click', function() {
// // Hide the booking notes div by default
// bookingNotesDiv.style.display = 'none';
// // Check if the clicked radio button's name matches "TPL"
// if (this.checked && this.dataset.name === 'TPL') {
// bookingNotesDiv.style.display = 'block'; // Show if it matches "TPL"
// }
// });
// });
// });