if (typeof jQuery != "undefined") {
    
    $ = jQuery;
    
}
function format_time(hour, minute) {
    var h = hour > 9 ? "" + hour: "0" + hour;
    var m = minute > 9 ? "" + minute: "0" + minute;
    return h+":"+m;
}
var paratyBookingWidgetLanguage = (document.documentElement.getAttribute("lang")
               || document.documentElement.getAttribute("xml:lang"))
               .replace(/[-_].*/, "");
var bookingWidgetController = function () {
    return {
        config: {
            language: paratyBookingWidgetLanguage,
            base_url: "//dwo-hotels-dot-checkin-hoteles.appspot.com",
            widget_url: "//dwo-hotels-dot-checkin-hoteles.appspot.com/checkinwidget/",
            widget_url_params:"",
            flight_hotel_tab_preselected: false,
            only_adults: "",
            local: false,
            dependcencies_added: typeof(bookingWidgetController) == "undefined" ? false : bookingWidgetController.config.dependcencies_added,
            datepicker_added: false,
            dependencies: [
                'jquery-ui',
                'main_web_skeleton',
                'selectric',
                'jquery-i18n',
                
            ],
            css_list : [
                "https://cdn.paraty.es/static_files/common/plugins/dates-selector/css/datepicker_ext_inf.css?v=1.21",
                "//dwo-hotels-dot-checkin-hoteles.appspot.com/static_1/css/checkin_injection/booking_widget_checkin_injection.css?v=1.21",
                "//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css",
                "https://cdn.paraty.es/static_files/common/plugins/pricescalendar/styles.css?v=1.21",
                "https://cdn.paraty.es/static_files/common/css/datepicker.redmond/jquery-ui-1.8.16.custom.min.css?v=1.21"
            ],
            /*Special configs*/
            avoid_guest_autoclose_click: false
        },
        init: function () {
            this.prepare_dependencies();
        },
        _getScript: function (url) {
            if (this.config.local) {
                url = url.replace("https://cdn.paraty.es", "http://localhost:8090");
                url = url.replace("/static_files/common/", "/static_1/");
            }
            return $.getScript(url);
        },
        prepare_dependencies: function () {
            var base_url = bookingWidgetController.config.base_url,
                lang = bookingWidgetController.config.language;
            if (!bookingWidgetController.config.dependcencies_added) {
                let dependenciesToLoad = [];
                for (let dependency of bookingWidgetController.config.dependencies) {
                    switch (dependency) {
                        case 'jquery-ui':
                            dependenciesToLoad.push(bookingWidgetController._getScript("https://cdn.paraty.es/static_files/common/lib/jquery-ui-1.10.1.custom.min.modified.js?v=1.21"));
                            break;
                        case 'main_web_skeleton':
                            dependenciesToLoad.push(bookingWidgetController._getScript("https://cdn.paraty.es/static_files/common/js/mainWebSkeletonAux_injection.js?v=1.21"));
                            break;
                        case 'selectric':
                            dependenciesToLoad.push(bookingWidgetController._getScript("https://cdn.paraty.es/static_files/common/lib/selectric/jquery.selectric.1.8.js?v=1.21"));
                            break;
                        case 'jquery-i18n':
                            dependenciesToLoad.push(bookingWidgetController._getScript("https://cdn.paraty.es/static_files/common/lib/jquery-i18n-1.1.1/jquery.i18n.js?v=1.21").then(function () {
                                return bookingWidgetController._getScript("https://cdn.paraty.es/static_files/common/i18n/messages_" + lang + ".js?v=1.21").then(function () {
                                    $.i18n.load(messages);
                                });
                            }));
                            break;
                        case 'flight_hotel_controller':
                            if (typeof FlightHotelWidgetController != "undefined") {
                                console.log("[Paraty Injection] FlightHotelWidgetController already loaded");
                                break;
                            }
                            dependenciesToLoad.push(bookingWidgetController._getScript("https://cdn.paraty.es/static_files/common/js/flight_hotel/flight_hotel_controller.js?v=1.21"));
                            break;
                        default:
                            console.debug(`[Paraty Injection] Unknown dependency: ${dependency}`);
                            break;
                    }
                }
                $.when(...dependenciesToLoad).done(function () {
                   bookingWidgetController.get_booking_widget_html();
                   bookingWidgetController.config.dependcencies_added = true;
                });
            }
        },
        get_booking_widget_html: function () {
            bookingWidgetController.load_css();
            const language_widget = bookingWidgetController.config.language;
            $("html").attr("lang", language_widget);
            let widgetUrl = `${bookingWidgetController.config.widget_url}${language_widget}`;
            if (bookingWidgetController.config.widget_url_params) {
                widgetUrl += `?${bookingWidgetController.config.widget_url_params}`;
            }
            $.get(widgetUrl, function (e) {
                bookingWidgetController.config.widget_html = $("
").html(e);
            }).done(function () {
                bookingWidgetController.add_widget_html();
                bookingWidgetController.add_button_mobile_version_html();
                bookingWidgetController.adding_tags_to_config();
                bookingWidgetController.load_datepicker();
                bookingWidgetController.open_widget();
                bookingWidgetController.close_widget();
                bookingWidgetController.click_listeners();
                if (typeof FlightHotelWidgetController != "undefined") {
                    FlightHotelWidgetController.config.baseUrl = '//dwo-hotels-dot-checkin-hoteles.appspot.com';
                    FlightHotelWidgetController.config.flightHotelConfig = JSON.parse(``);
                    FlightHotelWidgetController.init();
                }
                if ($("#add_analytics_campaings_tracking") && $("#add_analytics_campaings_tracking").length > 0) {
                    try {
                        bookingWidgetController._getScript("https://cdn.paraty.es/static_files/common/scripts/booking_process/analytics/booking_utm_controller.js?v=1.21")
                    } catch (e) {
                        console.error("Error loading booking_utm_controller.js", e);
                    }
                }
            });
        },
        load_css: function () {
            var list_css = bookingWidgetController.config.css_list;
            for (var i = 0; i < list_css.length; i++) {
                $('head').append($('').attr('href', list_css[i]));
            }
        },
        add_widget_html: function() {
        },
        add_button_mobile_version_html: function() {
            let target_container = $("#widget_paraty").length ? $("#widget_paraty") : $("#widget-paraty");
            target_container.append($("").html($.i18n._("reserva_ahora")));
            target_container.find("#full_wrapper_booking").append($(""));
        },
        load_datepicker: function () {
            var lang = bookingWidgetController.config.language,
                base_url = bookingWidgetController.config.base_url;
            // Refactor in a external function
            if (!bookingWidgetController.config.datepicker_added) {
                const callback = function () {
                    
                    bookingWidgetController.after_load_booking_script();
                    bookingWidgetController.custom_functions();
                    bookingWidgetController.config.datepicker_added = true;
                }
                if (bookingWidgetController.config.dependencies.includes('jquery-ui')) {
                    bookingWidgetController._getScript("https://cdn.paraty.es/static_files/common/plugins/pricescalendar/calendar.plugin.js?v=1.21");
                    bookingWidgetController._getScript("https://cdn.paraty.es/static_files/common/js/datepicker/jquery.ui.datepicker-" + lang + ".js?v=1.21").done(function () {
                        bookingWidgetController._getScript("https://cdn.paraty.es/static_files/common/plugins/dates-selector/datepicker_v1.js").done(function () {
                            _set_datepicker_regional($);
                            bookingWidgetController.datepicker_configuration();
                            bookingWidgetController._getScript("https://cdn.paraty.es/static_files/common/scripts/booking_7.js?v=1.21").done(callback);
                        });
                    });
                } else {
                    callback();
                }
            }
        },
        after_load_booking_script: function() {
            if (bookingWidgetController.config.dependencies.includes('jquery-ui')) {
                _set_datepicker_regional($);
                DP_extend_info.init();
                bookingWidgetController.update_date_by_timezone();
            }
            if (bookingWidgetController.config.dependencies.includes('selectric')) {
                $(".room_selector").selectric({disableOnMobile: false});
                $(".rooms_number").selectric({disableOnMobile: false});
            }
            bookingWidgetController.prepare_guest_selector();
            bookingWidgetController.adding_room_tag_selector();
            bookingWidgetController.set_occupancy_number();
        },
        update_date_by_timezone: function() {
            if ($("#timeLimit").length>0) {
                var _limit = $("#timeLimit").val();
                var _now = new Date();
                var _hour = format_time(_now.getHours(), _now.getMinutes());
                if (_hour > _limit) {
                    _now.setUTCDate(_now.getUTCDate() + 1);
                }
                var datepicker_sd = $('.' + DP_extend_info.config.class_datepicker_sd);
                datepicker_sd.datepicker('option', 'minDate', new Date(_now.getFullYear(),_now.getMonth(),_now.getDate()));
                var datestart = _now.getDate()+"/"+(_now.getMonth()+1)+"/"+_now.getFullYear();
                updateDates(datestart);
                $("input[name='startDate']").val(datestart);
                _set_start_date(datestart);
                _now.setUTCDate(_now.getUTCDate() + 1);
                datepicker_departure_date = $.datepicker.formatDate("dd-mm-yy", _now);
                datepicker_departure_date = datepicker_departure_date.replace(new RegExp("-", "g"), '/');
                $("input[name='endDate']").val(datepicker_departure_date);
                _set_end_date(datepicker_departure_date);
                $('.departure_datepicker').datepicker('option', 'minDate', _now);
            }
        },
        datepicker_configuration: function() {
            DP_extend_info.config.booking_version = '5';
            DP_extend_info.config.hotel_path_endpoint = bookingWidgetController.config.base_url;
            bookingWidgetController.separate_entry_departure_datepicker();
            DP_extend_info.config.custom_format_day_month = bookingWidgetController.custom_format_date;
        },
        separate_entry_departure_datepicker: function() {
            DP_extend_info.config.start_date_selector = ".entry_date_wrapper";
            DP_extend_info.config.end_date_selector = ".departure_date_wrapper";
            DP_extend_info.config.start_datepicker_span = ".entry_date_wrapper .date_day";
            DP_extend_info.config.end_datepicker_span = ".departure_date_wrapper .date_day";
        },
        custom_format_date: function(dateComponents) {
            dateComponents = dateComponents.split("/");
            var month_names = $.datepicker._defaults.monthNames,
                html_date = "%d
 %m
 %y
",
                month = (parseInt(dateComponents[1]) - 1);
            return html_date.replace("%d", dateComponents[0]).replace("%m", month_names[month]).replace("%y", dateComponents[2]);
        },
        prepare_guest_selector: function () {
            $("select.room_selector").unbind("change");
            $("select.room_selector, select.rooms_number").change(function () {
                bookingWidgetController.set_occupancy_number();
            });
        },
        adding_room_tag_selector: function () {
            $("select.rooms_number option").each(function (index, element) {
                var room_tag = parseInt($(element).val()) === 1 ? bookingWidgetController.config.room_tag : bookingWidgetController.config.rooms_tag;
                $(element).text($(element).text() + " " + room_tag);
            });
            if (bookingWidgetController.config.dependencies.includes('selectric')) {
                $("select.rooms_number").selectric("refresh");
            }
        },
        set_occupancy_number: function () {
            var number_of_rooms = $("select[name='numRooms']").val(),
                adults_number = 0,
                kids_number = 0,
                babies_number = 0;
            if (number_of_rooms) {
                for (var room_loop = 1; room_loop <= number_of_rooms; room_loop++) {
                    var actual_select_adults = $("select[name='adultsRoom" + room_loop + "']").val(),
                        actual_select_kids = $("select[name='childrenRoom" + room_loop + "']").val(),
                        actual_select_baby = $("select[name='babiesRoom" + room_loop + "']").val();
                    adults_number += parseInt(actual_select_adults);
                    kids_number += parseInt(actual_select_kids);
                    babies_number += parseInt(actual_select_baby);
                }
            }
            var target_placeholder = $(".guest_selector .placeholder_text"),
                placeholder_string = bookingWidgetController.occupancy_format_html();
            var room_tag = number_of_rooms === 1 ?
                bookingWidgetController.config.room_tag : bookingWidgetController.config.rooms_tag;
            var adult_tag = adults_number === 1 ?
                bookingWidgetController.config.adult_text : bookingWidgetController.config.adults_text;
            var kid_tag = kids_number === 1 ?
                bookingWidgetController.config.kid_text : bookingWidgetController.config.kids_text;
            var baby_tag = babies_number === 1 ?
                bookingWidgetController.config.baby_text : bookingWidgetController.config.babies_text;
            placeholder_string = placeholder_string.replace("@@N_R@@", number_of_rooms).replace("@@T_R@@", room_tag)
                .replace("@@N_A@@", adults_number).replace("@@T_A@@", adult_tag)
                .replace("@@N_C@@", kids_number).replace("@@T_C@@", kid_tag)
                .replace("@@N_B@@", babies_number).replace("@@T_B@@", baby_tag);
            target_placeholder.html(placeholder_string);
        },
        occupancy_format_html: function() {
            var occupancy_string = '';
            if (this.config.only_adults) {
                occupancy_string = "@@N_A@@ @@T_A@@";
            } else {
                occupancy_string = "@@N_A@@ @@T_A@@ / @@N_C@@ @@T_C@@";
            }
            return occupancy_string;
        },
        open_widget: function () {
            $("#floating_button").click(function () {
                $("#full_wrapper_booking").fadeIn();
            });
        },
        close_widget: function () {
            $("i.fa-times.close_widget").click(function () {
                $("#full_wrapper_booking").fadeOut();
            });
        },
        click_listeners: function () {
            if (!this.config.avoid_guest_autoclose_click) {
                $("html").click(function (event) {
                    var event_target = $(event.target);
                    if (!event_target.closest(".room_list_wrapper").length && !event_target.closest(".guest_selector").length) {
                        $(".room_list_wrapper").slideUp();
                    }
                });
            }
        },
        adding_tags_to_config: function () {
            bookingWidgetController.config.adults_text = $("#adults_tag").val();
            bookingWidgetController.config.adult_text = $("#adult_tag").val();
            bookingWidgetController.config.kids_text = $("#kids_tag").val();
            bookingWidgetController.config.kid_text = $("#kid_tag").val();
            bookingWidgetController.config.babies_text = $("#babies_tag").val();
            bookingWidgetController.config.baby_text = $("#baby_tag").val();
            bookingWidgetController.config.room_tag = $("#room_tag").val();
            bookingWidgetController.config.rooms_tag = $("#rooms_tag").val();
        },
        force_start_date: function (forcedStartDateInput) {
            function parseDate(dateString) {
                const [day, month, year] = dateString.split("/").map(Number);
                return new Date(year, month - 1, day);
            }
            function formatDate(date) {
                return date.toLocaleDateString('en-GB'); // Formats as DD/MM/YYYY
            }
            const inputDateString = forcedStartDateInput.val();
            if (!inputDateString) {
                console.error("Invalid input date.");
                return;
            }
            const startDate = parseDate(inputDateString);
            if (isNaN(startDate.getTime())) {
                console.error("Unable to parse the start date.");
                return;
            }
            const endDate = new Date(startDate);
            endDate.setDate(endDate.getDate() + 1);
            const formattedStartDate = formatDate(startDate);
            const formattedEndDate = formatDate(endDate);
            const startDateInput = $("input[name='startDate']");
            const endDateInput = $("input[name='endDate']");
            const previosStartDate = parseDate(startDateInput.val());
            const previousCalelendarMonth = previosStartDate.getMonth();
            const previousCalelendarYear = previosStartDate.getFullYear();
            startDateInput.val(formattedStartDate).trigger("change");
            endDateInput.val(formattedEndDate).trigger("change");
            window.updateDates(formattedStartDate);
            const monthToSearch = startDate.getMonth();
            const yearToSearch = startDate.getFullYear();
            const price_calendar_v2 = $("#price_calendar_v2") && $("#price_calendar_v2").length;
            const calendarChange = previousCalelendarMonth !== monthToSearch || previousCalelendarYear !== yearToSearch;
            if (price_calendar_v2 && calendarChange) {
                document.dispatchEvent(new CustomEvent('updateMonth.price_calendar_v2', {
                    detail: { month: monthToSearch, year: yearToSearch }
                }));
            }
        },
        custom_functions: function(){
        }
    };
}();
bookingWidgetController.config.avoid_guest_autoclose_click = true;
bookingWidgetController.add_widget_html = function () {
  var paraty_widget = bookingWidgetController.config.widget_html;
  if (!$("#widget_paraty").length) {
    $("body").append($(""));
    $("#widget_paraty").addClass('auto-position');
  }
  $("#widget_paraty").html(paraty_widget);
  let namespaceClass = $("#widget_paraty input#extra_widget_class").length ? $("#widget_paraty input#extra_widget_class").val() : ""
  if (namespaceClass) {
       $("#widget_paraty").addClass(namespaceClass);
       $("body").addClass(namespaceClass)
  }
  if ($("#widget_paraty .destination_wrapper").length) {
    $("#widget_paraty").addClass('has-hotel-selector');
  }
  $("#widget_paraty .booking_steps").detach().appendTo($('body'));
  $("#widget_paraty").before($(""))
};
bookingWidgetController.add_button_mobile_version_html = function () {
  if (!$("#floating_button_paraty").length) {
    $("body").append($("").html($.i18n._("reserva_ahora")));
    $("#floating_button_paraty").addClass('auto-position');
    if ($("#widget_paraty input#extra_widget_class").length)
      $("#floating_button_paraty").addClass($("#widget_paraty input#extra_widget_class").val());
  }
  $("#widget_paraty #full_wrapper_booking").append($(""));
}
bookingWidgetController.custom_format_date = function (dateComponents) {
  dateComponents = dateComponents.split("/");
  var html_date = "%d %m";
  let date = new Date();
  date.setMonth(dateComponents[1] - 1);
  let month = date.toLocaleString([], {
    month: 'short',
  });
  month = month.charAt(0).toUpperCase() + month.slice(1);
  return html_date.replace("%d", dateComponents[0]).replace("%m", month);
};
bookingWidgetController.adding_room_tag_selector = function () {
  $("select.rooms_number option").each(function (index, element) {
    $(element).text($(element).text());
  });
  $("select.rooms_number").selectric("refresh");
};
bookingWidgetController.open_widget = function () {
  $("#floating_button_paraty").click(function (e) {
    e.preventDefault();
    $("#widget_paraty").fadeToggle();
  });
};
bookingWidgetController.close_widget = function () {
  $("i.fa-times.close_widget").click(function () {
    $("#widget_paraty").fadeOut();
    $(".booking_steps").hide();
    $("body").removeClass("widget_paraty_open");
  });
};
bookingWidgetController.custom_functions = function () {
  bookingWidgetController.config.languages = {
    "es": "SPANISH",
    "en": "ENGLISH"
  };
  //Get fontawesome 6
  var script_fa_tag = document.createElement('script');
  script_fa_tag.src = 'https://kit.fontawesome.com/d8b9925505.js';
  script_fa_tag.setAttribute("defer", "");
  document.head.appendChild(script_fa_tag);
  booking_engine_controller();
  prepare_guests_selector();
  set_occupancy_number();
  room_selector_dates();
  init_calendar();
  hotel_selector_tabs();
  hotel_filter_by_input();
  changeAgeKids();
  hotel_preselected();
  $("#full_wrapper_booking .children_selector select.room_selector").change(function () {
    check_kids_ages($(this));
  });
  if ($("#booking").length) {
    $("#full_wrapper_booking .kidAgesSelect").selectric();
  }
  let hotel_preselection = $("#widget_paraty").attr("data-hotel-namespace");
  let destiny_preselection = $("#widget_paraty").attr("data-destino");
  if (hotel_preselection) {
    selectHotel(hotel_preselection);
  } else if (destiny_preselection) {
    let destiny = $(".booking_0_destiny").filter(function () {
      return (
          $(this).attr("hotel_name").toLowerCase() == destiny_preselection.toLowerCase()
      );
    });
    destiny.click();
    $("#full-booking-engine-html-7 .calendar_root_wrapper").css(
        "display",
        "none"
    );
  }
  let destination_placeholder = $.i18n._('T_establecimiento') + ' - ' + $.i18n._('T_destino');
  $('#widget_paraty .destination_wrapper .destination_fieldo .destination').attr('placeholder', destination_placeholder);
  $('#widget_paraty .widget_contact_selected').on('click', function () {
    $(this).toggleClass('active');
    $(this).siblings('.widget_contact_desc').slideToggle('fast');
  })
  let ol_map_library_url = 'https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.2.1/build/ol.js'
  $.getScript(ol_map_library_url, function () {
    ol_map();
  });
  //control for booking-steps class
  $("#widget_paraty .hotel_selector .hotel_selector_filter .destiny_filter.load_map").click(function () {
    $('.hotel_selector').addClass('no_gradient');
  })
  $("#widget_paraty .hotel_selector .hotel_selector_filter .destiny_filter.hotels").click(function () {
    $('.hotel_selector').removeClass('no_gradient');
  })
};
function hotel_selector_tabs() {
  //show hotels list or map
  let hotel_selector_tabs = $('#widget_paraty .hotel_selector_filter .destiny_filter');
  let hotel_selector_tab_element = $('#widget_paraty .hotel_selector .tab_element');
  hotel_selector_tabs.each(function () {
    let tab_filter = $(this);
    let tab_filter_data = tab_filter.data('filter')
    tab_filter.on('click', function () {
      $(this).addClass('active');
      $(this).siblings('.destiny_filter').removeClass('active');
      hotel_selector_tab_element.each(function () {
        let tab_element_data = $(this).data('item');
        if (tab_filter_data === tab_element_data) {
          $(this).show().css('z-index', '2');
          $(this).siblings('.tab_element').fadeOut();
        } else {
          $(this).hide().css('z-index', '1');
          $(this).siblings('.tab_element').fadeIn();
        }
      })
    })
  })
}
function init_calendar() {
  window.calendar_data.change_date_callback = function (date, isStartDateSelection) {
    function format(inputDate) {
      let date, month, year;
      date = inputDate.getDate();
      month = inputDate.getMonth() + 1;
      year = inputDate.getFullYear();
      date = date.toString().padStart(2, '0');
      month = month.toString().padStart(2, '0');
      return `${date}/${month}/${year}`;
    }
    let widget_form_wrapper = $('#full_wrapper_booking .paraty-booking-form');
    let date_formated = format(date);
    let day_month_format = $.datepicker.formatDate('dd M', date);
    let year_format = $.datepicker.formatDate('yy', date);
    if (isStartDateSelection) {
      widget_form_wrapper.find('input[name=startDate]').val(date_formated);
      widget_form_wrapper.find('.entry_date .date_day').html(day_month_format);
      widget_form_wrapper.find('.entry_date .date_year').html(year_format);
    } else {
      widget_form_wrapper.find('input[name=endDate]').val(date_formated);
      widget_form_wrapper.find('.departure_date .date_day').html(day_month_format);
      widget_form_wrapper.find('.departure_date .date_year').html(year_format);
      $(".booking_steps .step_3").trigger('click');
      $('.booking_steps .step_2').addClass('done');
    }
    load_new_room_dates();
  };
}
function prepare_guests_selector() {
  $("select.room_selector").unbind("change");
  $(".room_selector").selectric('destroy');
  $(".room_selector").selectric({disableOnMobile: false});
  $("select.room_selector, select.rooms_number").change(function () {
    set_occupancy_number();
  });
  $(".remove_room_element").click(function () {
    var actual_room_numbers = $("select.rooms_number").val();
    if (actual_room_numbers > 1) {
      var target_room_number = parseInt(actual_room_numbers) - 1;
      $("select.rooms_number option").removeAttr('selected');
      $("select.rooms_number option[value='" + target_room_number + "']").attr('selected', 'selected');
      $(".room" + actual_room_numbers).hide();
      $("select.rooms_number").val(target_room_number);
      $("select.rooms_number").selectric("refresh");
    }
    set_occupancy_number()
  });
  var add_room_html = "" + $.i18n._('T_add_another_room') + "
",
      remove_room_html = "" + $.i18n._('T_eliminar') + ' ' + $.i18n._('T_habitacion') + "
",
      close_btn = "",
      close_calendar_btn = "",
      booking_btn = "";
  $(".room_list_wrapper").append(close_btn);
  $(".calendar_root_wrapper").append(close_calendar_btn);
  $(".room_list_wrapper .room_list .room").each(function () {
    $(this).append(add_room_html);
  });
  $(".room_list_wrapper .room_list .room2").append(remove_room_html);
  $(".room_list_wrapper .room_list .room3").append(remove_room_html);
  $(".add_room").click(add_room);
  $(".remove_room").click(remove_room);
  $(".room_list_wrapper .room_list").append(booking_btn);
  const motorPromocodeInput = $(".wrapper_booking_button .promocode_wrapper input.promocode_input");
  const popupPromocodeInput = $(".wrapper_booking_button_guest #popup_promocode");
  popupPromocodeInput.change(function () {
    motorPromocodeInput.val($(this).val());
  });
  motorPromocodeInput.change(function () {
    popupPromocodeInput.val($(this).val());
  });
  $(".wrapper_booking_button_guest .submit_button").click(function () {
    $(".wrapper_booking_button .submit_button").click();
  });
  $(document).on("click", ".close_guest_selector, .close_calendar_app", function () {
    $(".booking_steps .step_1, .booking_steps .step_2, .booking_steps .step_3").removeClass("current_step");
    $(".hotel_selector").slideUp();
    $(".calendar_root_wrapper").slideUp();
    $(".room_list_wrapper").slideUp();
    $("#full_wrapper_booking").removeClass("fixed");
    $("#widget_paraty").removeClass("open");
    $('.booking_steps').hide();
    $("body").removeClass("widget_paraty_open");
  });
  $(".adults_selector .selectric-room_selector .label").click(function () {
    change_selectric_rooms($(this), ".selectric-room_selector", "select.room_selector", 8, 0, 1);
  });
  $(".adults_selector .selectric-room_selector .button").click(function () {
    change_selectric_rooms($(this), ".selectric-room_selector", "select.room_selector", 9, 1, -1);
  });
  $(".children_selector .selectric-room_selector .label").click(function () {
    change_selectric_rooms($(this), ".selectric-room_selector", "select.room_selector", 4, -1, 1);
    check_kids_ages($(this).closest(".selectric-room_selector").find("select.room_selector"));
  });
  $(".children_selector .selectric-room_selector .button").click(function () {
    change_selectric_rooms($(this), ".selectric-room_selector", "select.room_selector", 5, 0, -1);
    check_kids_ages($(this).closest(".selectric-room_selector").find("select.room_selector"));
  });
  $(".babies_selector .selectric-room_selector .label").click(function () {
      change_selectric_rooms($(this), ".selectric-room_selector", "select.room_selector", 2, -1, 1);
  });
  $(".babies_selector .selectric-room_selector .button").click(function () {
      change_selectric_rooms($(this), ".selectric-room_selector", "select.room_selector", 3, 0, -1);
  });
}
function change_selectric_rooms(element, parent_class, select, max, min, operator) {
  var selectric_element = element.closest(parent_class).find(select),
      label_for = element.closest(".range_label_enabled");
  if (parseInt(selectric_element.val()) > min &&
      parseInt(selectric_element.val()) < max) {
    var new_select_val = parseInt(selectric_element.val()) + operator;
    selectric_element.val(new_select_val);
    selectric_element.selectric('refresh');
    set_occupancy_number();
  }
}
function add_room() {
  var number_rooms = parseInt($("select.rooms_number").val());
  if (number_rooms < 3) {
    $($(".selectric-rooms_number .selectricItems li").get(number_rooms)).trigger("click");
    set_occupancy_number();
  }
  if (number_rooms == 1) {
    $(".room1 .add_room").hide();
    $(".room1 .add_room").addClass('hidden');
  }
  if (number_rooms == 2) {
    $(".add_room").hide();
    $(".add_room").addClass('hidden');
    $(".room2 .remove_room").hide();
    $(".room2 .remove_room").addClass('hidden');
  }
}
function remove_room(event) {
  const target_element = $(event.target);
  const ages_selector = target_element.parent().next();
  if (ages_selector.length && ages_selector.hasClass('showed')) {
    ages_selector.slideUp(function () {
      $(this).css("overflow", "inherit");
      $(this).removeClass('showed');
    });
  }
  var number_rooms = parseInt($("select.rooms_number").val());
  if (number_rooms > 1) {
    $($(".selectric-rooms_number .selectricItems li").get(number_rooms - 2)).trigger("click");
    set_occupancy_number();
  }
  if (number_rooms == 2) {
    $(".room1 .remove_room").show();
    $(".room1 .remove_room").removeClass('hidden');
    $(".room1 .add_room").show();
    $(".room1 .add_room").removeClass('hidden');
  }
  if (number_rooms == 3) {
    $(".room2 .remove_room").show();
    $(".room2 .add_room").show();
    $(".room2 .remove_room").removeClass('hidden');
    $(".room2 .add_room").removeClass('hidden');
  }
  $("select.rooms_number").change(function (event) {
    var number = $(this).val(),
        _room1 = $(".room1"),
        _room2 = $(".room2"),
        _room3 = $(".room3"),
        _room_age1 = $(".room_ages_1"),
        _room_age2 = $(".room_ages_2"),
        _room_age3 = $(".room_ages_3");
    if (number == 1) {
      _room2.hide().promise().done(function () {
        _room2.css("overflow", "initial");
      });
      _room_age2.removeClass("show")
      _room_age3.removeClass("show")
      _room3.hide().promise().done(function () {
        _room3.css("overflow", "initial");
      });
      $(".horizontal_engine").css("height", "379px");
    } else if (number == 2) {
      _room2.show("fast").promise().done(function () {
        _room2.css("overflow", "initial");
      });
      _room_age3.removeClass("show")
      _room3.hide().promise().done(function () {
        _room3.css("overflow", "initial");
      });
      $(".horizontal_engine").css("height", "449px");
    } else {
      _room2.show("fast").promise().done(function () {
        _room2.css("overflow", "initial");
      });
      _room3.show().promise().done(function () {
        _room3.css("overflow", "initial");
      });
      $(".horizontal_engine").css("height", "518px");
    }
  });
}
function toggle_guest_selector() {
  var target_room_wrapper = $(".room_list_wrapper");
  if (!target_room_wrapper.hasClass('active')) {
    target_room_wrapper.addClass('active');
    target_room_wrapper.show();
  } else {
    target_room_wrapper.removeClass('active');
    target_room_wrapper.hide();
  }
  set_occupancy_number();
}
function set_occupancy_number() {
    var number_of_rooms = parseInt($("select[name='numRooms']").val()),
       adults_number = 0,
       kids_number = 0,
       babies_number = 0;
    let hotel_selected = $(".hotel_selector_option.selected");
    let adults_only = hotel_selected.attr('data-adults-only'),
        include_babies = hotel_selected.attr('data-show-babies');
   if (number_of_rooms){
      for (let room_loop = 1;room_loop <= number_of_rooms;room_loop++){
         let actual_select_adults = $("select[name='adultsRoom" + room_loop + "']").val(),
             actual_select_kids = 0,
             actual_select_babies = 0;
         /* Update kids value */
         if(adults_only){
           $("select[name='childrenRoom" + room_loop + "']").val(0);
         } else{
          actual_select_kids = $("select[name='childrenRoom" + room_loop + "']").val();
         }
         /* Update babies value */
         if(include_babies){
           actual_select_babies = $("select[name='babiesRoom" + room_loop + "']").val();
         } else{
           $("select[name='babiesRoom" + room_loop + "']").val(0);
         }
         if(actual_select_adults || actual_select_kids || actual_select_babies){
            adults_number += parseInt(actual_select_adults);
            kids_number += parseInt(actual_select_kids);
            babies_number += parseInt(actual_select_babies);
         }
      }
   }
    var target_placeholder = $(".guest_selector .placeholder_text");
     adults_number = parseInt(adults_number);
     kids_number = parseInt(kids_number);
     babies_number = parseInt(babies_number);
     let placeholder_string = "" + adults_number + " " + $.i18n._('T_adultos') + "";
    if (hotel_selected.length) {
      if (!adults_only) {
        placeholder_string += " + " + kids_number + " " + $.i18n._('T_ninos') + "";
      }
      if (include_babies) {
        placeholder_string += " + " + babies_number + " " + $.i18n._('T_bebes') + "";
      }
    }else {
      placeholder_string += " + " + kids_number + " " + $.i18n._('T_ninos') + " + " + babies_number + " " + $.i18n._('T_bebes') + "";
      $('.room_list_wrapper').addClass('show_babies');
    }
     target_placeholder.html(placeholder_string);
}
bookingWidgetController.after_load_booking_script = function () {
  _set_datepicker_regional($);
  $(".room_selector").selectric({disableOnMobile: false});
  $(".rooms_number").selectric({disableOnMobile: false});
  bookingWidgetController.prepare_guest_selector();
  bookingWidgetController.adding_room_tag_selector();
  bookingWidgetController.set_occupancy_number();
  bookingWidgetController.update_date_by_timezone();
};
bookingWidgetController.datepicker_configuration = function () {
  let is_mobile = ($(window).width() <= 1140);
  DP_extend_info.config.booking_version = '5';
  DP_extend_info.config.hotel_path_endpoint = bookingWidgetController.config.base_url;
  DP_extend_info.config.months_show = (is_mobile) ? 1 : 2;
  DP_extend_info.config.months_show_highlight = true;
  DP_extend_info.config.force_hightlight = true;
  DP_extend_info.config.custom_format_day_month = function (dateComponents) {
    dateComponents = dateComponents.split("/");
    var month_short = $.datepicker._defaults['monthNamesShort'][parseInt(dateComponents[1], 10) - 1];
    return "" + dateComponents[0] + "" + month_short + "";
  };
  DP_extend_info.init();
};
function room_selector_dates() {
  var room_list_wrapper = $('.room_list_wrapper .room_list'),
      dates_wrapper = $('');
  if (room_list_wrapper.length) {
    room_list_wrapper.prepend(dates_wrapper);
  }
  $('.dates_wrapper, .stay_selection').on('click', function () {
    $(".booking_steps .step_2").trigger('click');
  });
}
function check_kids_ages(select_element) {
  var parent_list = select_element.closest("li"),
      selected_value = select_element.val(),
      target_age_selector = parent_list.next(".full_ages_wrapper"),
      childs_elements = target_age_selector.find(".kid_age_element_wrapper"),
      target_childs_elements = childs_elements.slice(0, parseInt(selected_value));
  if (parseInt(selected_value)) {
    childs_elements.css('display', 'none');
    target_childs_elements.css('display', 'block');
    target_age_selector.slideDown(function () {
      $(this).css("overflow", "inherit");
      $(this).addClass('showed');
    });
  } else {
    childs_elements.css('display', 'none');
    target_age_selector.slideUp(function () {
      $(this).css("overflow", "inherit");
      $(this).removeClass('showed');
    });
  }
}
function load_new_room_dates() {
  if ($('.dates_wrapper').length) {
    var start_date = $.datepicker.parseDate("dd/mm/yy", $("input[name=startDate]").val()),
        start_date_format = $.datepicker.formatDate("dd MM", start_date),
        end_date = $.datepicker.parseDate("dd/mm/yy", $("input[name=endDate]").val()),
        end_date_format = $.datepicker.formatDate("dd MM", end_date);
    $(".room_info_wrapper .dates_wrapper").html(decodeEntities($.i18n._("T_habitaciones_y_ocuapcion")));
  }
}
function hotel_preselected() {
  const uri = window.location.pathname;
  let hotel_equivalencies = $(".hotel_selector .hotel_selector_option");
    hotel_equivalencies.each(function() {
        let preselectedHotel = $(this).attr("data-hotel-preselected");
        if (preselectedHotel && uri.endsWith(preselectedHotel)) {
            selectHotel($(this).attr("id"));
            $(this).toggleClass('selected');
        }
    });
      $(document).ready(function () {
        let widget = $("#widget_paraty");
        let selectedOption = widget.find(".hotels_group .hotel_selector_option.selected");
        if (selectedOption.length) {
            let originalKidsAgesRange = getKidsAgesRange();
            let kidsAgesRange = selectedOption.attr('data-individual-kids-age-range');
            let kidsAgesRangeArray = kidsAgesRange
                ? kidsAgesRange.split('-').map(Number)
                : originalKidsAgesRange;
            setKidsAgesRange(kidsAgesRangeArray[0], kidsAgesRangeArray[1]);
        }
    });
}
function getKidsAgesRange() {
  let kidsAgesRange = [];
  $('.kids_age_selection .kidAgesSelect').first().each(function () {
    kidsAgesRange.push(parseInt($(this).find('option').first().val()));
    kidsAgesRange.push(parseInt($(this).find('option').last().val()));
  });
  return kidsAgesRange;
}
function setKidsAgesRange(min, max) {
  $('.kids_age_selection .kidAgesSelect').empty().each(function () {
    for (let i = min; i <= max; i++) {
      $(this).append($('