/** * 2010-2023 Webkul. * * NOTICE OF LICENSE * * All right is reserved, * Please go through this link for complete license : https://store.webkul.com/license.html * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade this module to newer * versions in the future. If you wish to customize this module for your * needs please refer to https://store.webkul.com/customisation-guidelines/ for more information. * * @author Webkul IN * @copyright 2010-2023 Webkul IN * @license https://store.webkul.com/license.html */ $(document).ready(function(){ $(document).on('click', '.booking_occupancy_wrapper .remove-room-link', function(e) { e.preventDefault(); booking_occupancy_inner = $(this).closest('.booking_occupancy_inner'); var booking_occupancy_wrapper = $(this).closest('.booking_occupancy_wrapper'); $(this).closest('.occupancy_info_block').hide('fast', function(){ $(this).remove() $(booking_occupancy_inner).find('.room_num_wrapper').each(function(key, val) { $(this).text(room_txt + ' - '+ (key+1) ); }); var countRooms = parseInt($(booking_occupancy_wrapper).find('.occupancy_info_block').length); if (countRooms < $(booking_occupancy_wrapper).find('.max_avail_type_qty').val()) { $(booking_occupancy_wrapper).find('.add_new_occupancy_btn').show(); } setRoomTypeGuestOccupancy($(booking_occupancy_inner).closest('.booking_occupancy_wrapper')); }); }); $(document).on('click', '.booking_occupancy_wrapper .occupancy_quantity_up', function(e) { e.preventDefault(); // set input field value let max_guests_in_room = $(this).closest(".booking_occupancy_wrapper").find('.max_guests').val(); let element = $(this).closest('.occupancy_count_block').find('.num_occupancy'); let elementVal = parseInt(element.val()); let current_room_occupancy = 0; $(this).closest('.occupancy_info_block').find('.num_occupancy').each(function(){ current_room_occupancy += parseInt($(this).val()); }); let max_allowed_for_current = (max_guests_in_room - current_room_occupancy) + elementVal; let childElement = $(this).closest('.occupancy_count_block').find('.num_children').length; if (childElement) { let max_child_in_room; if ($(this).closest(".booking_occupancy_wrapper").find('.max_children').val()) { max_child_in_room = $(this).closest(".booking_occupancy_wrapper").find('.max_children').val(); } else { max_child_in_room = window.max_child_in_room; } if (elementVal < max_child_in_room && elementVal < max_allowed_for_current) { element.val(elementVal + 1); $(this).closest('.occupancy_info_block').find('.children_age_info_block').show(); let roomBlockIndex = parseInt($(this).closest('.occupancy_info_block').attr('occ_block_index')); let childAgeSelect = '
'; childAgeSelect += ''; childAgeSelect += '
'; $(this).closest('.occupancy_info_block').find('.children_ages').append(childAgeSelect); // set input field value $(this).closest('.occupancy_count_block').find('.occupancy_count > span').text(elementVal + 1); } } else { let max_adults_in_room; if ($(this).closest(".booking_occupancy_wrapper").find('.max_adults').val()) { max_adults_in_room = $(this).closest(".booking_occupancy_wrapper").find('.max_adults').val(); } if (elementVal < max_adults_in_room && elementVal < max_allowed_for_current) { element.val(elementVal + 1); $(this).closest('.occupancy_count_block').find('.occupancy_count > span').text(elementVal + 1); } } setRoomTypeGuestOccupancy($(this).closest('.booking_occupancy_wrapper')); }); $(document).on('click', '.booking_occupancy_wrapper .occupancy_quantity_down', function(e) { e.preventDefault(); // set input field value var element = $(this).closest('.occupancy_count_block').find('.num_occupancy'); var elementVal = parseInt(element.val()) - 1; var childElement = $(this).closest('.occupancy_count_block').find('.num_children').length; if (childElement) { if (elementVal < 0) { elementVal = 0; } else { $(this).closest('.occupancy_info_block').find('.children_ages select').last().closest('div').remove(); if (elementVal <= 0) { $(this).closest('.occupancy_info_block').find('.children_age_info_block').hide(); } } } else { if (elementVal == 0) { elementVal = 1; } } element.val(elementVal); // set input field value $(this).closest('.occupancy_count_block').find('.occupancy_count > span').text(elementVal); setRoomTypeGuestOccupancy($(this).closest('.booking_occupancy_wrapper')); }); $(document).on('click', '.booking_guest_occupancy', function(e) { if ($(this).parent().hasClass('open')) { $('.booking_guest_occupancy_conatiner .dropdown').removeClass('open'); } else { $('.booking_guest_occupancy_conatiner .dropdown').removeClass('open'); $(this).parent().toggleClass('open'); } }); $(document).on('click', function(e) { if ($('.booking_occupancy_wrapper:visible').length) { var occupancy_wrapper = $('.booking_occupancy_wrapper:visible'); $(occupancy_wrapper).find(".occupancy_info_block").addClass('selected'); setRoomTypeGuestOccupancy(occupancy_wrapper); if (!($(e.target).closest(".booking_occupancy_wrapper").length || $(e.target).closest(".booking_guest_occupancy").length || $(e.target).closest(".remove-room-link").length )) { let hasErrors = 0; let adults = $(occupancy_wrapper).find(".num_adults").map(function(){return $(this).val();}).get(); let children = $(occupancy_wrapper).find(".num_children").map(function(){return $(this).val();}).get(); let child_ages = $(occupancy_wrapper).find(".guest_child_age").map(function(){return $(this).val();}).get(); // start validating above values if (!adults.length || (adults.length != children.length)) { hasErrors = 1; showErrorMessage(invalid_occupancy_txt); } else { $(occupancy_wrapper).find('.occupancy_count').removeClass('error_border'); // validate values of adults and children adults.forEach(function (item, index) { if (isNaN(item) || parseInt(item) < 1) { hasErrors = 1; $(occupancy_wrapper).find(".num_adults").eq(index).closest('.occupancy_count_block').find('.occupancy_count').addClass('error_border'); } if (isNaN(children[index])) { hasErrors = 1; $(occupancy_wrapper).find(".num_children").eq(index).closest('.occupancy_count_block').find('.occupancy_count').addClass('error_border'); } }); // validate values of selected child ages $(occupancy_wrapper).find('.guest_child_age').removeClass('error_border'); child_ages.forEach(function (age, index) { age = parseInt(age); if (isNaN(age) || (age < 0) || (age >= parseInt(max_child_age))) { hasErrors = 1; $(occupancy_wrapper).find(".guest_child_age").eq(index).addClass('error_border'); } }); } if (hasErrors == 0) { if (!($(e.target).closest(".ajax_add_to_cart_button").length || $(e.target).closest(".exclusive.book_now_submit").length )) { $(occupancy_wrapper).parent().removeClass('open'); $(occupancy_wrapper).siblings(".booking_guest_occupancy").removeClass('error_border'); $(document).trigger( "QloApps:updateRoomOccupancy", [occupancy_wrapper]); } } else { $(occupancy_wrapper).siblings(".booking_guest_occupancy").addClass('error_border'); } } } }); $(document).on('click', '.booking_occupancy_wrapper .add_new_occupancy_btn', function(e) { e.preventDefault(); var booking_occupancy_wrapper = $(this).closest('.booking_occupancy_wrapper'); var occupancy_block = ''; var roomBlockIndex = parseInt($(booking_occupancy_wrapper).find(".occupancy_info_block").last().attr('occ_block_index')); roomBlockIndex += 1; var countRooms = parseInt($(booking_occupancy_wrapper).find('.occupancy_info_block').length); countRooms += 1 if ($(booking_occupancy_wrapper).find('.max_avail_type_qty').val() > 0 && countRooms <= $(booking_occupancy_wrapper).find('.max_avail_type_qty').val() ) { occupancy_block += ''; $(booking_occupancy_wrapper).find('.booking_occupancy_inner').append(occupancy_block).find('[occ_block_index="'+roomBlockIndex+'"]').show('fast'); // scroll to the latest added room // var objDiv = document.getElementById("booking_occupancy_wrapper"); // objDiv.scrollTop = objDiv.scrollHeight; $(booking_occupancy_wrapper).animate({ scrollTop: $(booking_occupancy_wrapper).prop('scrollHeight') }, "slow"); if (countRooms >= $(booking_occupancy_wrapper).find('.max_avail_type_qty').val()) { $(this).hide(); } } setRoomTypeGuestOccupancy(booking_occupancy_wrapper); }); // The button to increment the product value $(document).on('click', '.rm_quantity_up', function(e){ e.preventDefault(); var element = $(this).closest('.rm_qty_cont').find('.quantity_wanted'); var elementVal = parseInt(element.val()) + 1; let quantityAvailableT = $(this).closest('.rm_qty_cont').find(".max_avail_type_qty").val(); if (isNaN(elementVal) || elementVal > quantityAvailableT) { elementVal = quantityAvailableT; } element.val(elementVal); $(this).closest('.rm_qty_cont').find('.qty_count > span').text(elementVal); $(document).trigger( "QloApps:updateRoomQuantity", [element]); }); // The button to decrement the product value $(document).on('click', '.rm_quantity_down', function(e){ e.preventDefault(); var element = $(this).closest('.rm_qty_cont').find('.quantity_wanted'); var elementVal = parseInt(element.val()) - 1; if (isNaN(elementVal) || elementVal < 1) { elementVal = 1; } element.val(elementVal); $(this).closest('.rm_qty_cont').find('.qty_count > span').text(elementVal); $(document).trigger( "QloApps:updateRoomQuantity", [element]); }); }); function setRoomTypeGuestOccupancy(booking_occupancy_wrapper) { var adults = 0; var children = 0; var rooms = $(booking_occupancy_wrapper).find('.occupancy_info_block').length; $(booking_occupancy_wrapper).find(".num_adults" ).each(function(key, val) { adults += parseInt($(this).val()); }); $(booking_occupancy_wrapper).find(".num_children" ).each(function(key, val) { children += parseInt($(this).val()); }); guestButtonVal = getRoomTypeGuestOccupancyFormated(adults, children, rooms); $(booking_occupancy_wrapper).siblings('.booking_guest_occupancy').find('span').text(guestButtonVal); } function getRoomTypeGuestOccupancyFormated(adults, children, rooms) { var guestButtonVal = parseInt(adults) + ' '; if (parseInt(adults) > 1) { guestButtonVal += adults_txt; } else { guestButtonVal += adult_txt; } if (parseInt(children) > 0) { if (parseInt(children) > 1) { guestButtonVal += ', ' + parseInt(children) + ' ' + children_txt; } else { guestButtonVal += ', ' + parseInt(children) + ' ' + child_txt; } } if (parseInt(rooms) > 1) { guestButtonVal += ', ' + parseInt(rooms) + ' ' + rooms_txt; } else { guestButtonVal += ', ' + parseInt(rooms) + ' ' + room_txt; } return guestButtonVal; } function resetOccupancyField(booking_occupancy_wrapper) { $(booking_occupancy_wrapper).siblings('.booking_guest_occupancy').find('span').text(select_occupancy_txt); $(booking_occupancy_wrapper).find('.booking_occupancy_inner > div').each(function(index, element){ let num_adults = $(booking_occupancy_wrapper).find('.base_adult').val(); if (index == 0) { $(this).removeClass('selected'); $(this).find('.num_adults').val(num_adults).siblings('.occupancy_count').find('span').text(num_adults); $(this).find('.num_children').val(0).siblings('.occupancy_count').find('span').text(0); $(this).find('.children_ages > div').remove(); } else { $(element).remove(); } }); }