(function ($) { "use strict"; let SearchForm = { $body: $("body"), isValidated: {}, init: function () { let base = this; var advFacilities = []; base._dropdownselect(); base._typeSelect(); base._categorySelect(); base._destinationSelect(); base._destinationSelectCarTransfer(); base._scrollFormSearch(); base._dropdownselectDate(); base._addNextPreInput(); base._rangeSliderPrice(); base._chooseTaxonomy(advFacilities); base._chooseTaxonomyChecked(advFacilities); base._initSearchLocation(); base._initSearchLocationCarTransfer(); base._loadMore(); base._listingView(); }, _initSearchLocation() { var base = this; var input = $('.st-banner-search-form.style_2 [name="location_name"]'); var timer = null; input.on("keydown", function () { clearTimeout(timer); timer = setTimeout(doStuff, 200); }); function doStuff() { let parent = input.closest(".destination-search"), ulEl = $(".dropdown-menu ul", parent), loader = $(".dropdown-menu .loader-wrapper", parent); loader.show(); $.post( st_params.ajax_url, { action: "st_get_list_location", _s: input.val(), post_type: input.data("post-type") }, function (respon) { if (typeof respon === "object") { ulEl.find(".item").remove(); if (respon.options !== "") { $(respon.options).insertAfter($(".location-heading", ulEl)); $(".location-heading", ulEl).hide(); ulEl.removeClass("no-data"); } else { $(".location-heading", ulEl).text(input.data("text-no")).show(); ulEl.addClass("no-data"); } } else { console.log("Can not get data"); } $("#dropdown-destination").dropdown("show"); base._destinationSelect(); loader.hide(); }, "json" ); } }, _loadMore() { $("button.loadmore").on("click", function (e) { e.preventDefault(); var base = this; var form = $("form.sidebarSearchBar"); var data = $("form#sidebarSearchBar").serializeArray(); $(base).find("i.fa-spin").removeClass("d-none"); data.push({ name: 'module_type', value: $(base).data('type') }); data.push({ name: 'page', value: $(base).attr('data-page') }); data.push({ name: 'view', value: $('.toolbar-action .layout .layout-item.active').attr('data-value') }); $.ajax({ url: st_params.ajax_url + '/loadmore', method: "post", dataType: "json", data: data, beforeSend: function () { // $("div.message-wrapper").html(""); }, success: function (res) { $(base).find("i.fa-spin").addClass("d-none"); if (res) { if (res.html != '') { $(".listing-content").append(res.html); $(base).attr('data-page', res.page); }else{ $(base).prop('disabled', true); $(base).text('No More Data'); } } }, error: function (err) { $("div.message-wrapper").html(""); $(loadingSubmit).find("i.fa-spin").addClass("d-block"); }, }); }); }, _listingView() { $(".layout-item").on("click", function () { var base = this; $('.layout-item').removeClass('active'); $(base).addClass('active') var form = $("form.sidebarSearchBar"); var data = $("form#sidebarSearchBar").serializeArray(); $(base).find("i.fa-spin").removeClass("d-none"); data.push({ name: 'module_type', value: $(base).data('type') }); data.push({ name: 'page', value: $(base).attr('data-page') }); data.push({ name: 'view', value: $('.toolbar-action .layout .layout-item.active').attr('data-value') }); $.ajax({ url: st_params.ajax_url + '/loadmore', method: "post", dataType: "json", data: data, beforeSend: function () { // $("div.message-wrapper").html(""); }, success: function (res) { $(base).find("i.fa-spin").addClass("d-none"); if (res) { if (res.html != '') { $(".listing-content").html(res.html); $(base).attr('data-page', 1); }else{ // $(base).prop('disabled', true); // $(base).text('No More Data'); } } }, error: function (err) { $("div.message-wrapper").html(""); // $(loadingSubmit).find("i.fa-spin").addClass("d-block"); }, }); }); }, _initSearchLocationCarTransfer() { var base = this; var input_to = $('.st-banner-search-form.style_2 [name="location_name_to"]'); var timer = null; input_to.on("keydown", function () { clearTimeout(timer); timer = setTimeout(doStuff, 200); }); function doStuff() { let parent = input.closest(".destination-search"), ulEl = $(".dropdown-menu ul", parent), loader = $(".dropdown-menu .loader-wrapper", parent); loader.show(); $.post( st_params.ajax_url, { action: "st_get_list_location", _s: input.val(), post_type: input.data("post-type") }, function (respon) { if (typeof respon === "object") { ulEl.find(".item").remove(); if (respon.options !== "") { $(respon.options).insertAfter($(".location-heading", ulEl)); $(".location-heading", ulEl).hide(); ulEl.removeClass("no-data"); } else { $(".location-heading", ulEl).text(input.data("text-no")).show(); ulEl.addClass("no-data"); } } else { console.log("Can not get data"); } $("#dropdown-destination-to").dropdown("show"); base._destinationSelectCarTransfer(); loader.hide(); }, "json" ); } }, _chooseTaxonomyChecked: function (advFacilities) { $('.advance-item.facilities input[type="checkbox"]').each(function () { var t = $(this); if (t.is(":checked")) { advFacilities.push(t.val()); } }); }, _chooseTaxonomy: function (advFacilities) { $('.advance-item.facilities input[type="checkbox"]').on("change", function () { var t = $(this); if (t.is(":checked")) { advFacilities.push(t.val()); } else { var index = advFacilities.indexOf(t.val()); if (index > -1) { advFacilities.splice(index, 1); } } t.closest(".facilities").find(".data_taxonomy").val(advFacilities.join(",")); }); }, scrollToBottom(id, name_item) { $(id).on("click", function (event) { console.log(); var target = $(id); if (target.length) { event.preventDefault(); $("html, body").animate({ scrollTop: target.offset().top - 30 }, 300, function () {}); } }); }, _scrollFormSearch: function () { $(".search-form-v2 .field-detination").each(function () { SearchForm.scrollToBottom(this, ".field-detination"); }); $(".search-form-v2 .form-date-search").each(function () { SearchForm.scrollToBottom(this, ".form-date-search"); }); $(".search-form-v2 .field-guest").each(function () { SearchForm.scrollToBottom(this, ".field-guest"); }); }, _destinationSelect: function () { $(".field-detination").each(function () { var t = $(this), parent = $(this).closest(".border-right"), dropdown_menu = $(".dropdown-menu", parent); if (parent.length < 1) { parent = $(this).closest(".destination-search"); dropdown_menu = $(".dropdown-menu", parent); } $("li", dropdown_menu).on("click", function () { console.log(this); var target = $(this).closest(".dropdown-menu").attr("aria-labelledby"); var focus = parent.find("#" + target); $(".destination", focus).text($(this).find("span").text()); $('input[name="location_name"]', focus).val($(this).find("span").text()); $("input.location_name", focus).val($(this).find("span").text()); $('input[name="location_id"]', focus).val(attach_class+'_'+$(this).data("value")); $("input.location_id", focus).val(attach_class+'_'+$(this).data("value")); t.dropdown("hide"); }); }); }, _categorySelect: function () { $(".field-categories").each(function () { var t = $(this), parent = $(this).closest(".border-right"), dropdown_menu = $(".dropdown-menu", parent); if (parent.length < 1) { parent = $(this).closest(".categories-search"); dropdown_menu = $(".dropdown-menu", parent); } $("li", dropdown_menu).on("click", function () { console.log(this); var target = $(this).closest(".dropdown-menu").attr("aria-labelledby"); var focus = parent.find("#" + target); $(".destination", focus).text($(this).find("span").text()); $('input[name="category_name"]', focus).val($(this).find("span").text()); $("input.category_name", focus).val($(this).find("span").text()); $('input[name="category_id"]', focus).val($(this).data("value")); $("input.category_id", focus).val($(this).data("value")); t.dropdown("hide"); }); }); }, _typeSelect: function () { $(".field-types").each(function () { var t = $(this), parent = $(this).closest(".border-right"), dropdown_menu = $(".dropdown-menu", parent); if (parent.length < 1) { parent = $(this).closest(".types-search"); dropdown_menu = $(".dropdown-menu", parent); } $("li", dropdown_menu).on("click", function () { console.log(this); var target = $(this).closest(".dropdown-menu").attr("aria-labelledby"); var focus = parent.find("#" + target); $(".destination", focus).text($(this).find("span").text()); $('input[name="type"]', focus).val($(this).find("span").text()); $("input.type", focus).val($(this).find("span").text()); t.dropdown("hide"); if($(this).find("span").text() == 'International'){ $('.itemCountry').removeClass('d-none'); }else if($(this).find("span").text() == 'Local'){ $('.itemCountry').addClass('d-none'); $('.country_'+$(this).data('country')).removeClass('d-none'); } }); }); }, _destinationSelectCarTransfer: function () { $(".field-detination-from").each(function () { var t = $(this), parent = $(this).closest(".border-right"), dropdown_menu = $(".dropdown-menu", parent); if (parent.length < 1) { parent = $(this).closest(".destination-search"); dropdown_menu = $(".dropdown-menu", parent); } $("li", dropdown_menu).on("click", function () { console.log(this); var target = $(this).closest(".dropdown-menu").attr("aria-labelledby"); var focus = parent.find("#" + target); $(".destination", focus).text($(this).find("span").text()); $('input[name="transfer_from_name"]', focus).val($(this).find("span").text()); $("input.transfer_from_name", focus).val($(this).find("span").text()); $('input[name="transfer_from"]', focus).val($(this).data("value")); t.dropdown("hide"); }); }); $(".field-detination-to").each(function () { var t = $(this), parent = $(this).closest(".border-right"), dropdown_menu = $(".dropdown-menu", parent); if (parent.length < 1) { parent = $(this).closest(".destination-search"); dropdown_menu = $(".dropdown-menu", parent); } $("li", dropdown_menu).on("click", function () { console.log(this); var target = $(this).closest(".dropdown-menu").attr("aria-labelledby"); var focus = parent.find("#" + target); $(".destination", focus).text($(this).find("span").text()); $('input[name="transfer_to_name"]', focus).val($(this).find("span").text()); $("input.transfer_to_name", focus).val($(this).find("span").text()); $('input[name="transfer_to"]', focus).val($(this).data("value")); t.dropdown("hide"); }); }); }, _rangeSliderPrice: function () { function format_money($money) { $money = st_number_format($money, st_params.booking_currency_precision, st_params.decimal_separator, st_params.thousand_separator); var $symbol = st_params.currency_symbol; var $money_string = ""; switch (st_params.currency_position) { case "right": $money_string = $money + $symbol; break; case "left_space": $money_string = $symbol + " " + $money; break; case "right_space": $money_string = $money + " " + $symbol; break; case "left": default: $money_string = $symbol + $money; break; } return $money_string; } function st_number_format(number, decimals, dec_point, thousands_sep) { number = (number + "").replace(/[^0-9+\-Ee.]/g, ""); var n = !isFinite(+number) ? 0 : +number, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = typeof thousands_sep === "undefined" ? "," : thousands_sep, dec = typeof dec_point === "undefined" ? "." : dec_point, s = "", toFixedFix = function (n, prec) { var k = Math.pow(10, prec); return "" + (Math.round(n * k) / k).toFixed(prec); }; s = (prec ? toFixedFix(n, prec) : "" + Math.round(n)).split("."); if (s[0].length > 3) { s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); } if ((s[1] || "").length < prec) { s[1] = s[1] || ""; s[1] += new Array(prec - s[1].length + 1).join("0"); } return s.join(dec); } $(".price_range").each(function () { var t = $(this); var min = $(this).data("min"); var max = $(this).data("max"); var step = $(this).data("step"); var value = $(this).val(); var from = value.split(";"); var prefix_symbol = $(this).data("symbol"); var to = from[1]; from = from[0]; $(this).ionRangeSlider({ min: min, max: max, type: "double", prefix: prefix_symbol, prettify: false, step: step, onFinish: function (data) { t.trigger("st_ranger_price_change"); set_price_range_val(data, $('input[name="price_range"]')); format_price_price_ranger(data); }, from: from, to: to, force_edges: true, }); }); var rangeContainer = $(".sidebar-item.range-slider"); function format_price_price_ranger(data) { var min = rangeContainer.find(".price_range").data("min"); var max = rangeContainer.find(".price_range").data("max"); var convert_price_min = format_money(data.from); var convert_price_max = format_money(data.to); rangeContainer.find(".irs-from").text(convert_price_min); rangeContainer.find(".irs-to").text(convert_price_max); } function set_price_range_val(data, element) { var exchange = 1; var from = Math.round(parseInt(data.from) / exchange); var to = Math.round(parseInt(data.to) / exchange); var text = from + ";" + to; element.val(text); } }, _addNextPreInput: function () { $(".st-number-wrapper").each(function () { var timeOut = 0; var t = $(this); var input = t.find(".st-input-number"); input.before( '\n' + " \n" + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + " \n" + " \n" + " \n" + " \n" + " \n" + "" ); input.after( '\n' + " \n" + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + " \n" + " \n" + " \n" + " \n" + " \n" + "" ); var min = input.data("min"); var max = input.data("max"); t.find("span").on("click", function () { var $button = $(this); numberButtonFunc($button); }); t.find("span") .on("touchstart", function (e) { $(this).trigger("click"); e.preventDefault(); var $button = $(this); timeOut = setInterval(function () {}, 150); }) .on("mouseup mouseleave touchend", function () { clearInterval(timeOut); }); function numberButtonFunc($button) { var oldValue = $button.parent().find("input").val(); var container = $button.closest(".form-guest-search"); var total = 0; $('input[type="text"]', container).each(function () { total += parseInt($(this).val()); }); var newVal = oldValue; if ($button.hasClass("next")) { if (total < max) { if (oldValue < max) { newVal = parseFloat(oldValue) + 1; } else { newVal = max; } } } else { if (oldValue > min) { newVal = parseFloat(oldValue) - 1; } else { newVal = min; } } $button.parent().find("input").val(newVal); $('input[name="' + $button.parent().find("input").attr("name") + '"]', ".search-form").trigger("change"); $('input[name="' + $button.parent().find("input").attr("name") + '"]', ".form-check-availability-hotel").trigger("change"); $('input[name="' + $button.parent().find("input").attr("name") + '"]', ".single-room-form").trigger("change"); $('input[name="' + $button.parent().find("input").attr("name") + '"]', ".activity-booking-form").trigger("change"); if (window.matchMedia("(max-width: 767px)").matches) { $("#dropdown-1 label", $button.closest(".field-guest")).hide(); $("#dropdown-1 .render", $button.closest(".field-guest")).show(); } } }); }, _dropdownselectDate: function () { if ( !$("body").hasClass("single-hotel_room") && !$("body").hasClass("single-st_hotel") && !$("body").hasClass("single-st_activity") && !$("body").hasClass("single-st_tours") && !$("body").hasClass("single-st_cars") && !$("body").hasClass("single-st_rental") ) { $(".form-date-search", "body").each(function () { var parent = $(this), date_wrapper = $(".date-wrapper", parent), check_in_input = $(".check-in-input", parent), check_out_input = $(".check-out-input", parent), check_in_out = $(".check-in-out", parent), check_in_render = $(".check-in-render", parent), check_out_render = $(".check-out-render", parent); var timepicker = parent.data("timepicker"); if (typeof timepicker == "undefined" || timepicker == "") { timepicker = false; } else { timepicker = true; } var options = { singleDatePicker: false, sameDate: false, autoApply: true, minDate: new Date(), dateFormat: "DD/MM/YYYY", customClass: "", widthSingle: 500, onlyShowCurrentMonth: true, timePicker: timepicker, timePicker24Hour: st_params.time_format == "12h" ? false : true, }; if (typeof locale_daterangepicker == "object") { options.locale = locale_daterangepicker; } console.log(options); check_in_out.daterangepicker(options, function (start, end, label) { check_in_input.val(start.format(parent.data("format"))).trigger("change"); $("#tp_hotel .form-date-search .check-in-input").val(start.format("YYYY-MM-DD")).trigger("change"); check_in_render.html(start.format(parent.data("format"))).trigger("change"); check_out_input.val(end.format(parent.data("format"))).trigger("change"); $("#tp_hotel .form-date-search .check-out-input").val(end.format("YYYY-MM-DD")).trigger("change"); check_out_render.html(end.format(parent.data("format"))).trigger("change"); if (timepicker) { check_in_input.val(start.format(parent.data("date-format"))).trigger("change"); $(".check-in-input-time", parent) .val(start.format(parent.data("time-format"))) .trigger("change"); check_out_input.val(end.format(parent.data("date-format"))).trigger("change"); $(".check-out-input-time", parent) .val(end.format(parent.data("time-format"))) .trigger("change"); $(".check-out-input-time", parent) .val(end.format(parent.data("time-format"))) .trigger("change"); } check_in_out.trigger("daterangepicker_change", [start, end]); if (window.matchMedia("(max-width: 767px)").matches) { $("label", parent).hide(); $(".render", parent).show(); $(".check-in-wrapper span", parent).show(); } }); date_wrapper.on("click", function (e) { check_in_out.trigger("click"); }); }); } }, _dropdownselect: function () { $(".form-extra-field").each(function () { var parent = $(this).parent(".form-group"); parent.on("click", function (e) { $(this).find(".arrow").toggleClass("fa-angle-down fa-angle-up"); }); $(".arrow", parent).on("click", function (e) { var drop_down = $(this).closest(".dropdown"); var dropdown_menu = $('[aria-labelledby="' + drop_down.find(".dropdown-toggle").attr("id") + '"]', parent); $(".form-extra-field").find(".dropdown-menu").not(dropdown_menu).slideUp(50); dropdown_menu.slideToggle(50); $(this).toggleClass("fa-angle-down fa-angle-up"); }); $('input[name="adult_number"]', parent).on("change", function () { var adults = parseInt($(this).val()); var html = adults; if (typeof adults == "number") { if (adults < 2) { html = adults + " " + $(".render .adult", parent).data("text"); } else { html = adults + " " + $(".render .adult", parent).data("text-multi"); } } $(".render .adult", parent).html(html); }); $('input[name="child_number"]', parent).on("change", function () { var children = parseInt($(this).val()); var html = children; if (typeof children == "number") { if (children < 2) { html = children + " " + $(".render .children", parent).data("text"); } else { html = children + " " + $(".render .children", parent).data("text-multi"); } } $(".render .children", parent).html(html); }); }); }, }; SearchForm.init(); })(jQuery);