{"version":3,"file":"js_utils_analytics_js-js_utils_ha-searcbar-functions_js.chunk.js","mappings":"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","sources":["webpack:///./js/utils/analytics.js","webpack:///./js/utils/ha-searcbar-functions.js","webpack:///./js/utils/ha-search-results-functions.js"],"sourcesContent":["//import { type } from 'jquery';\r\nimport * as gl from 'Utils/global';\r\nimport { PriceValueType, FilterPricingMode, ConceptCode } from 'KM/common-models';\r\nimport moment from 'moment';\r\nimport CryptoJS from 'crypto-js';\r\n//import sjcl from 'sjcl';\r\n\r\n\r\nlet ItemCategoryType = {\r\n\r\n // AnalyticsBookingItem\r\n Hotel: \"HOTEL\",\r\n Flight: \"FLIGHT\",\r\n Car: \"CAR\",\r\n Transfer: \"TRANSFER\",\r\n CancellationProtection: \"CXL\",\r\n\r\n //Hideaways analytics implementation\r\n HotelOnly: \"HOTEL ONLY\",\r\n HotelWithFlight: \"HOTEL+FLIGHT\"\r\n\r\n};\r\n\r\n// ***********************************************\r\nfunction getPageItemListId() {\r\n if (!AppData.GoogleAnalytics) return undefined;\r\n if (!AppData.GoogleAnalytics.Tracking) return undefined;\r\n if (!AppData.GoogleAnalytics.Tracking.item_list_id) return undefined;\r\n return AppData.GoogleAnalytics.Tracking.item_list_id;\r\n};\r\nfunction getPageItemListName() {\r\n if (!AppData.GoogleAnalytics) return undefined;\r\n if (!AppData.GoogleAnalytics.Tracking) return undefined;\r\n if (!AppData.GoogleAnalytics.Tracking.item_list_name) return undefined;\r\n return AppData.GoogleAnalytics.Tracking.item_list_name;\r\n};\r\n\r\nfunction getItemlistFromQueryString() {\r\n let item_list_id = gl.getParameterByName('dl_ili');\r\n let item_list_name = gl.getParameterByName('dl_iln');\r\n \r\n return {\r\n item_list_id: item_list_id,\r\n item_list_name: item_list_name,\r\n };\r\n};\r\n\r\nfunction getItemList() {\r\n let item_list_id = gl.getCookieItemListId();\r\n let item_list_name = gl.getCookieItemListName();\r\n\r\n if (!item_list_id || item_list_id == '') {\r\n item_list_id = getPageItemListId();\r\n }\r\n\r\n if (!item_list_name || item_list_name == '') {\r\n item_list_name = getPageItemListName();\r\n }\r\n\r\n let itemList = getItemlistFromQueryString();\r\n if (itemList) {\r\n if (itemList.item_list_id && itemList.item_list_id != '') {\r\n item_list_id = itemList.item_list_id;\r\n }\r\n\r\n if (itemList.item_list_name && itemList.item_list_name != '') {\r\n item_list_name = itemList.item_list_name;\r\n }\r\n }\r\n\r\n return {\r\n item_list_id: item_list_id,\r\n item_list_name: item_list_name,\r\n };\r\n};\r\nfunction setItemList(obj) {\r\n let item_list_id = undefined;\r\n let item_list_name = undefined;\r\n\r\n if (obj) {\r\n item_list_id = obj.item_list_id;\r\n item_list_name = obj.item_list_name;\r\n }\r\n\r\n gl.setCookieItemListId(item_list_id);\r\n gl.setCookieItemListName(item_list_name);\r\n};\r\n\r\nfunction updateItemListFromAppData() {\r\n setItemList({\r\n item_list_id: getPageItemListId(),\r\n item_list_name: getPageItemListName(),\r\n });\r\n};\r\n// ***********************************************\r\n\r\nfunction hash(string) {\r\n if (!string || string == '') return '';\r\n /*\r\n // Ups this return Promise. The KO is not ready to use Promise's (or async/await) chains\r\n const utf8 = new TextEncoder().encode(string);\r\n return crypto.subtle.digest('SHA-256', utf8).then((hashBuffer) => {\r\n const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n const hashHex = hashArray\r\n .map((bytes) => bytes.toString(16).padStart(2, '0'))\r\n .join('');\r\n return hashHex;\r\n });\r\n */\r\n\r\n // Compute the SHA-256 hash of a string\r\n let hashValue = CryptoJS.SHA256(string);\r\n // Get the hexadecimal hash value\r\n let hashHex = hashValue.toString(CryptoJS.enc.Hex);\r\n\r\n\r\n //// Compute the SHA-256 hash of a string\r\n //let hashValue1 = sjcl.hash.sha256.hash(string);\r\n //// Get the hexadecimal hash value\r\n //let hashHex1 = sjcl.codec.hex.fromBits(hashValue1);\r\n\r\n //console.log('>>> hash result:', {\r\n // text: string,\r\n // hash_CryptoJS: hashHex,\r\n // hash_sjcl: hashHex1\r\n //});\r\n\r\n\r\n return hashHex;\r\n};\r\n\r\nfunction checkDataLayer() {\r\n if (!global.dataLayer) {\r\n global.dataLayer = [];\r\n }\r\n};\r\n\r\nfunction getPriceModel(hotel, isDirectFlight) {\r\n let priceTotal = ko.unwrap(hotel.PriceTotal);\r\n let price = priceTotal ? ko.unwrap(priceTotal.Value) : 0;\r\n let currency = priceTotal ? ko.unwrap(priceTotal.Currency) : '';\r\n\r\n if (isDirectFlight && typeof hotel.PriceTotalByType == 'function') {\r\n priceTotal = hotel.PriceTotalByType(PriceValueType.withDirectFlight);\r\n if (priceTotal) {\r\n price = ko.unwrap(priceTotal.Value);\r\n } else {\r\n price = 0;\r\n }\r\n }\r\n \r\n if ((!currency || currency == '') && AppData.Currency) {\r\n currency = AppData.Currency.Code\r\n }\r\n\r\n return {\r\n value: price,\r\n currency: currency\r\n };\r\n};\r\n\r\nfunction createHotelItem(hotel, itemList) {\r\n let concept = ko.unwrap(hotel.Concept);\r\n let conceptName = (concept && ConceptCode.Hideaways == ko.unwrap(concept.Code)) ? ko.unwrap(concept.Name) : '';\r\n\r\n let price = getPriceModel(hotel, ko.unwrap(itemList.IsDirectFlight)).value;\r\n\r\n let hotelOnly = ko.unwrap(itemList.HotelOnly);\r\n let category = ItemCategoryType.Hotel;\r\n if (!hotelOnly) {\r\n category = ItemCategoryType.HotelWithFlight;\r\n }\r\n\r\n let txtArrivalDate = '';\r\n let arrivalDate = ko.unwrap(hotel.ArrivalDate);\r\n if (arrivalDate) {\r\n txtArrivalDate = moment(arrivalDate).format(\"MMMM YYYY\");\r\n }\r\n \r\n let destinationName = ko.unwrap(itemList.DestinationName);\r\n if (!destinationName || destinationName == '') {\r\n destinationName = ko.unwrap(hotel.DestinationName);\r\n }\r\n\r\n let item = {\r\n item_id: ko.unwrap(hotel.Id),\r\n item_name: ko.unwrap(hotel.Name),\r\n //affiliation: \"Google Merchandise Store\",\r\n //coupon: \"SUMMER_FUN\",\r\n //discount: 2.22,\r\n //index: 0,\r\n item_brand: conceptName,\r\n item_category: category, //same as purchase\r\n item_category2: ko.unwrap(itemList.DepartureAirportCode),\r\n item_category3: txtArrivalDate,\r\n item_category4: destinationName,\r\n item_category5: ko.unwrap(itemList.TotalPersons),\r\n item_list_id: ko.unwrap(itemList.id),\r\n item_list_name: ko.unwrap(itemList.name),\r\n //item_variant: \"green\",\r\n //location_id: \"ChIJIQBpAG2ahYAR_6128GcTUEo\",\r\n price: price,\r\n quantity: 1\r\n };\r\n return item;\r\n};\r\n\r\nfunction createProductItem(product, itemList) {\r\n let id = ko.unwrap(product.Id);\r\n let code = ko.unwrap(product.Code);\r\n if (typeof id == \"undefined\" && typeof code != \"undefined\") {\r\n id = code;\r\n }\r\n let price = ko.unwrap(product.PriceTotal).Value;\r\n let item = {\r\n item_id: id,\r\n item_name: ko.unwrap(product.Name),\r\n //affiliation: \"Google Merchandise Store\",\r\n //coupon: \"SUMMER_FUN\",\r\n //discount: 2.22,\r\n //index: 0,\r\n //item_brand: conceptName,\r\n item_category: ko.unwrap(product.Category), //same as purchase\r\n item_list_id: ko.unwrap(itemList.id),\r\n item_list_name: ko.unwrap(itemList.name),\r\n //item_variant: \"green\",\r\n //location_id: \"ChIJIQBpAG2ahYAR_6128GcTUEo\",\r\n price: price,\r\n quantity: 1\r\n };\r\n return item;\r\n};\r\n\r\nfunction createProductItems(products, itemList) {\r\n let items = products.map(function (product, index) {\r\n let category = ko.unwrap(product.Category);\r\n let arr = [\r\n ItemCategoryType.Hotel,\r\n ItemCategoryType.HotelOnly,\r\n ItemCategoryType.HotelWithFlight\r\n ];\r\n let is_hotel = arr.includes(category);\r\n let item = is_hotel ? createHotelItem(product, itemList) : createProductItem(product, itemList);\r\n if (is_hotel) {\r\n item.index = index;\r\n }\r\n return item;\r\n });\r\n return items;\r\n};\r\n\r\nfunction trackViewItemList(hotelResults, itemList) {\r\n checkDataLayer();\r\n\r\n let items = hotelResults.map(function (hotel, index) {\r\n let item = createHotelItem(hotel, itemList);\r\n item.index = index;\r\n return item;\r\n });\r\n\r\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\r\n dataLayer.push({\r\n event: \"view_item_list\",\r\n ecommerce: {\r\n item_list_id: ko.unwrap(itemList.id),\r\n item_list_name: ko.unwrap(itemList.name),\r\n items: items\r\n }\r\n });\r\n\r\n};\r\n\r\nfunction trackViewItem(hotelResult, itemList) {\r\n checkDataLayer();\r\n\r\n let item = createHotelItem(hotelResult, itemList);\r\n item.index = 0;\r\n //item.price = ko.unwrap(itemList.TotalPrice);\r\n\r\n let base_price = getPriceModel(hotelResult, ko.unwrap(itemList.IsDirectFlight));\r\n\r\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\r\n dataLayer.push({\r\n event: \"view_item\",\r\n ecommerce: {\r\n currency: base_price.currency,\r\n value: base_price.value,\r\n items: [ item ]\r\n }\r\n });\r\n\r\n};\r\n\r\nfunction trackViewCart(products, itemList) {\r\n checkDataLayer();\r\n\r\n let items = createProductItems(products, itemList);\r\n\r\n let currency = AppData.Currency.Code;\r\n let totalPrice = ko.unwrap(itemList.TotalPrice);\r\n\r\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\r\n dataLayer.push({\r\n event: \"view_cart\",\r\n ecommerce: {\r\n currency: currency,\r\n value: totalPrice,\r\n items: items\r\n }\r\n });\r\n\r\n};\r\n\r\nfunction trackAddToCart(products, itemList) {\r\n checkDataLayer();\r\n\r\n let items = createProductItems(products, itemList);\r\n\r\n let currency = AppData.Currency.Code;\r\n let totalPrice = ko.unwrap(itemList.TotalPrice);\r\n\r\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\r\n dataLayer.push({\r\n event: \"add_to_cart\",\r\n ecommerce: {\r\n currency: currency,\r\n value: totalPrice,\r\n //coupon: \"SUMMER_FUN\",\r\n items: items\r\n }\r\n });\r\n\r\n};\r\n\r\nfunction trackRemoveFromCart(products, itemList) {\r\n checkDataLayer();\r\n\r\n let items = createProductItems(products, itemList);\r\n\r\n let currency = AppData.Currency.Code;\r\n let totalPrice = ko.unwrap(itemList.TotalPrice);\r\n\r\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\r\n dataLayer.push({\r\n event: \"remove_from_cart\",\r\n ecommerce: {\r\n currency: currency,\r\n value: totalPrice,\r\n //coupon: \"SUMMER_FUN\",\r\n items: items\r\n }\r\n });\r\n\r\n};\r\n\r\nfunction trackBeginCheckout(products, itemList) {\r\n checkDataLayer();\r\n\r\n let items = createProductItems(products, itemList);\r\n\r\n let currency = AppData.Currency.Code;\r\n let totalPrice = ko.unwrap(itemList.TotalPrice);\r\n\r\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\r\n dataLayer.push({\r\n event: \"begin_checkout\",\r\n ecommerce: {\r\n currency: currency,\r\n value: totalPrice,\r\n //coupon: \"SUMMER_FUN\",\r\n items: items\r\n }\r\n });\r\n\r\n};\r\n\r\nfunction trackAddShippingInfo(products, itemList) {\r\n checkDataLayer();\r\n\r\n let items = createProductItems(products, itemList);\r\n\r\n let currency = AppData.Currency.Code;\r\n let totalPrice = ko.unwrap(itemList.TotalPrice);\r\n let user_data = ko.unwrap(itemList.user_data);\r\n\r\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\r\n dataLayer.push({\r\n event: \"add_shipping_info\",\r\n ecommerce: {\r\n currency: currency,\r\n value: totalPrice,\r\n //coupon: \"SUMMER_FUN\",\r\n //shipping_tier: \"Ground\",\r\n items: items,\r\n },\r\n user_data: user_data\r\n });\r\n\r\n};\r\n\r\nfunction trackAddPaymentInfo(products, itemList) {\r\n checkDataLayer();\r\n\r\n let items = createProductItems(products, itemList);\r\n\r\n let currency = AppData.Currency.Code;\r\n let totalPrice = ko.unwrap(itemList.TotalPrice);\r\n let user_data = ko.unwrap(itemList.user_data);\r\n\r\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\r\n dataLayer.push({\r\n event: \"add_payment_info\",\r\n ecommerce: {\r\n currency: currency,\r\n value: totalPrice,\r\n //coupon: \"SUMMER_FUN\",\r\n payment_type: \"Credit Card\",\r\n items: items\r\n },\r\n user_data: user_data\r\n });\r\n\r\n};\r\n\r\n\r\nfunction trackNewsletterSignup() {\r\n checkDataLayer();\r\n\r\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\r\n dataLayer.push({\r\n event: \"newsletter_signup\",\r\n });\r\n\r\n};\r\n\r\nexport {\r\n ItemCategoryType,\r\n getItemList, setItemList, updateItemListFromAppData,\r\n hash,\r\n trackViewItemList, trackViewItem,\r\n trackViewCart, trackAddToCart, trackRemoveFromCart,\r\n trackBeginCheckout,\r\n trackAddShippingInfo,\r\n trackAddPaymentInfo,\r\n trackNewsletterSignup\r\n}","import 'qtip2/dist/basic/jquery.qtip';\r\nimport { GetBreakpointWidth } from 'Utils/globals-bp';\r\nimport { updateQueryStringWithoutHistory } from 'Utils/global';\r\nimport { /*showSection,*/ hideSection } from 'Utils/section';\r\nimport { scrollToSearchResults } from 'Utils/ha-search-results-functions';\r\nimport { scrollToHotelPrices } from 'Utils/ha-search-single-result-functions';\r\nimport { ScrollToSearchBarForDropDown } from 'Vendors/groupedSelect/groupedSelect-functions.js';\r\n\r\n\r\nexport function InitScript_searchbar() {\r\n $('.searchbutton, .view-all-hotels').click(function (event) {\r\n //var result = true;\r\n //var a = searchViewModel.Rooms();\r\n //$.each(searchViewModel.Rooms(), function (i, r) {\r\n // if (r.Children().length > 0) {\r\n // var arr = $.grep(r.Children(), function (c) { return c.Age() === \"\" });\r\n // result &= arr.length == 0;\r\n // }\r\n //});\r\n //if (!result) {\r\n // //not valid\r\n // alert(AppData.Translations[\"set_children_ages\"]);\r\n // event.preventDefault();\r\n // event.stopPropagation();\r\n // return;\r\n //}\r\n if (!searchViewModel.ValidateSearchConditions_Rooms(true)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n var flgHotel = false;\r\n if (searchViewModel.IsHotel()) {\r\n // Make sure dates are filled\r\n if (searchViewModel.DepartureDate() == null || searchViewModel.ReturnDate() == null) {\r\n $('.hotel-search-box .validate').show();\r\n } else {\r\n $('.hotel-search-box .validate').hide();\r\n }\r\n flgHotel = searchViewModel.IsCurrentPageId();\r\n }\r\n /* // 2018-01-15 Use CurrentPageId to show HotelName in SearchBar.DestinationID \r\n updateQueryStringWithoutHistory();\r\n searchViewModel.RequestSearch(true);\r\n } else { */\r\n //if (searchViewModel.PageID() == \"\") {\r\n // alert(AppData.Translations[\"choose_country_or_destination\"]);\r\n // event.preventDefault();\r\n // event.stopPropagation();\r\n // return;\r\n //}\r\n if (!searchViewModel.ValidateSearchConditions_PageID(true)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n if (!searchViewModel.ValidateSearchConditions_DepartureAirportCode(true)) {\r\n //FIXME 2019-10-15 :EA: disabled search because \"Flight+Hotel\" (hotelonly == false) is default and DepartureAirportCode is empty\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n\r\n /*\r\n // 2018-01-15 Use CurrentPageId to show HotelName in SearchBar.DestinationID \r\n var hasViewForResults = document.getElementById('search-results') || document.getElementById('prices');\r\n \r\n // TODO 2017-12-28 ST Temporary back to version without redirecttion to '/search'\r\n if (!hasViewForResults || searchViewModel.PageID() != AppData.CurrentPageId) {\r\n\r\n var slug = \"\";\r\n if (searchViewModel.DestinationSelector())\r\n {\r\n var page = searchViewModel.DestinationSelector().GetDestinationById(searchViewModel.PageID());\r\n if (page) {\r\n slug = page.DataSlug();\r\n }\r\n }\r\n\r\n // We cannot show search results on this page. Send user to the selected destination and do the search there.\r\n window.location = \"/\" + slug + searchViewModel.GetCurrentQuery() + \"#search-results\";\r\n } else {\r\n if (!searchViewModel.IsHotel()) {\r\n scrollToSearchResults();\r\n };\r\n updateQueryStringWithoutHistory();\r\n searchViewModel.RequestSearch(false);\r\n }\r\n */\r\n\r\n var flgRedirect = !searchViewModel.IsSearch();\r\n if (flgHotel) {\r\n // Don't redirect to Search page \r\n // when selected DestinationID is CurrentHotelPage on HotelPage \r\n flgRedirect = false;\r\n }\r\n //var hasViewForResults = document.getElementById('search-results') || document.getElementById('prices');\r\n //if (hasViewForResults && searchViewModel.PageID() == AppData.CurrentPageId) {\r\n // // Don't redirect to Search page \r\n // // when selected DestinationID is CurrentPage and this page has search-results view \r\n // flgRedirect = false;\r\n //}\r\n //// ST flow: don't redirect if it's pressed 'in section'\r\n //var flgInSection = $(this).hasClass('searchbutton-in-section');\r\n //if (!flgHotel && !flgInSection && !searchViewModel.IsFrontPage() && !searchViewModel.IsSearch()) {\r\n // // Redirect to Search page in new tab\r\n // // when searchbutton-in-header was clicked\r\n // flgRedirect = true;\r\n //}\r\n //\r\n //// HW flow: don't redirect if same page\r\n //if ($(this).closest('.searchbar-sticky').length > 0 && !searchViewModel.IsSearch()) {\r\n // flgRedirect = searchViewModel.PageID() != AppData.CurrentPageId;\r\n //}\r\n\r\n\r\n if (flgRedirect) {\r\n //window.location = \"/search\" + searchViewModel.GetCurrentQuery() /*+ \"#search-results\"*/;\r\n\r\n window.location = searchViewModel.GetSearchUrl();\r\n\r\n /* //2018-02-07 \"Open in same tab\" with SearchPage\r\n var url = \"\";\r\n // On FrontPage try open country/destination page\r\n if (searchViewModel.IsFrontPage() && searchViewModel.DestinationSelector()) {\r\n var page = searchViewModel.DestinationSelector().GetDestinationById(searchViewModel.PageID());\r\n if (page && page.DataSlug() && page.DataSlug() != \"\") {\r\n // We cannot show search results on this page. Send user to the selected destination and do the search there.\r\n url = \"/\" + page.DataSlug() + searchViewModel.GetCurrentQuery(true, true) + \"#search-results\";\r\n }\r\n }\r\n // In all other cases we send user to search page\r\n // even if could not get DataSlug on prev.condition\r\n if (!url || url == \"\") {\r\n url = \"/search\" + searchViewModel.GetCurrentQuery() /-*+ \"#search-results\"*-/;\r\n }\r\n window.location = url;\r\n */\r\n\r\n /* //2018-02-07 \"Open in new tab\"\r\n //var url = window.location.protocol + \"//\" + window.location.host + \"/search\" + searchViewModel.GetCurrentQuery() /-*+ \"#search-results\"*-/;\r\n var url = $(this).attr('href');\r\n \r\n //On Front page \"Open in same tab\"\r\n //On other pages \"Open in new tab\"\r\n if (searchViewModel.IsFrontPage()) {\r\n //event.preventDefault();\r\n //event.stopPropagation();\r\n //window.location = url;\r\n } else {\r\n // There is a possibility that a user will have his or her browser security settings such that all pop-ups, \r\n // which includes windows opened with window.open(), will be blocked even if the action is initiated by the user.\r\n // If the window opens, the expression evaluates as, and returns, false.\r\n // If it fails to open, the expression evaluates as, and returns, true -- meaning that the link opens normally (but in the same window).\r\n return !window.open(url, '_blank');\r\n }\r\n */\r\n // ... \"Open in new tab\" as simple link ...\r\n // exclude FrontPage --> \"Open in same tab\"\r\n } else {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (!searchViewModel.IsHotel() && AppData.ScrollSettings.SearchResults) {\r\n scrollToSearchResults(true);\r\n };\r\n if (searchViewModel.IsHotel() && AppData.ScrollSettings.SearchResults) {\r\n // uses rAF (requestAnimationFrame) \r\n // for catching correct postion of scrollTop in 2nd 'animation'\r\n // after 1st 'animation' where there are hide-show sections\r\n if (typeof setVisibleSearchCriteria != \"undefined\") {\r\n AppLoader.raf(function () {\r\n setVisibleSearchCriteria(true);\r\n });\r\n }\r\n AppLoader.raf(function () {\r\n scrollToHotelPrices(0, 500);\r\n }, 64);\r\n };\r\n updateQueryStringWithoutHistory();\r\n searchViewModel.RequestSearch(false);\r\n }\r\n\r\n /*} // 2018-01-15 Use CurrentPageId to show HotelName in SearchBar.DestinationID */\r\n });\r\n\r\n $(document).on('click', '.show-rooms-selector-label', function () {\r\n var $label = $(this);\r\n var $roomSelector = $label.parent().find('.show-rooms-selector');\r\n if (!$label.hasClass('open')) {\r\n $roomSelector.trigger('click');\r\n }\r\n });\r\n\r\n $(document).on('click', '.show-rooms-selector', function () {\r\n $(\".input-wrapper\").removeClass('open');\r\n var $roomSelector = $(this);\r\n var parent = $(this).parents('.rooms-persons');\r\n var $input_wrapper = $roomSelector.parents(\".input-wrapper\");\r\n $input_wrapper.addClass('open');\r\n var $labelRoomSelector = parent.find('.show-rooms-selector-label');\r\n\r\n // qtip classes with '.faded'\r\n var classes = 'rooms-selector';\r\n var $header = $roomSelector.parents('.header');\r\n if ($header.length > 0) {\r\n if (!$header.hasClass('searchpage')) {\r\n classes += \" faded\";\r\n }\r\n }\r\n classes += \" vh-max-height\";\r\n if ($roomSelector.hasClass('is-sticky-parent')) {\r\n classes += \" is-sticky-parent\";\r\n }\r\n\r\n var posMy = 'top center';\r\n var posAt = 'bottom center';\r\n var pLeft = 0;\r\n var $addon = $(this).prev('.addon');\r\n if ($addon.length > 0) {\r\n posMy = 'top left';\r\n posAt = 'bottom left';\r\n pLeft = $addon.outerWidth() * -1;\r\n }\r\n\r\n var qtip = $roomSelector.qtip('api');\r\n if (qtip && $roomSelector.hasClass('open')) {\r\n qtip.hide();\r\n return;\r\n }\r\n\r\n function fixQtipAdjust($roomSelector, $roomSelectorContainerQtip) {\r\n //$roomSelector\r\n var api = $roomSelector.qtip('api');\r\n\r\n if (!$roomSelectorContainerQtip) {\r\n $roomSelectorContainerQtip = api.elements.tooltip;\r\n }\r\n var isModalMode = $roomSelectorContainerQtip.hasClass(\"modal\");\r\n if (isModalMode) {\r\n api.set('position.adjust.x', 0);\r\n $roomSelectorContainerQtip.css({ \"width\": '' });\r\n $roomSelectorContainerQtip.css({ \"maxWidth\": '' });\r\n } else {\r\n var $form = $roomSelector.parents(\".search .searchbar-body\"); // use 'fieldset'\r\n var leftForm = $form.offset().left;\r\n var leftTarget = $roomSelector.offset().left;\r\n var currLeft = leftForm - leftTarget;\r\n\r\n var rightForm = leftForm + $form.outerWidth(); // without margin (on HW form is centered by margin)\r\n var rightTarget = leftTarget + $roomSelector.outerWidth(true);\r\n var currRight = rightForm - rightTarget;\r\n\r\n var newWidth = $form.outerWidth(true);\r\n var bp_Width = GetBreakpointWidth();\r\n\r\n\r\n api.set('position.my', 'top left');\r\n api.set('position.at', 'bottom left');\r\n api.set('position.adjust.x', currLeft);\r\n\r\n //if (bp_Width < 1024) {\r\n // //options for bp2 and down\r\n // //Note: HW version is temporarily solution while we have date-pickers with HW-style\r\n // if ($roomSelector.hasClass('qtip-left')) {\r\n // //HW version uses extra class \"qtip-left\"\r\n // if (bp_Width >= 768) {\r\n // api.set('position.my', 'top right');\r\n // api.set('position.at', 'bottom right');\r\n // api.set('position.adjust.x', currRight);\r\n // //for not-small screen use half of width\r\n // newWidth = newWidth / 2;\r\n // } else {\r\n // api.set('position.my', 'top left');\r\n // api.set('position.at', 'bottom left');\r\n // api.set('position.adjust.x', currLeft);\r\n // }\r\n // } else {\r\n // //ST version\r\n // api.set('position.my', 'top left');\r\n // api.set('position.at', 'bottom left');\r\n // api.set('position.adjust.x', currLeft);\r\n\r\n // if (bp_Width >= 768) {\r\n // //options for bp2\r\n // //for not-small screen use width of parent\r\n // newWidth = $roomSelector.parents(\".input-wrapper\").outerWidth(true);\r\n // } else {\r\n // //for small screen use full width\r\n // //newWidth = newWidth / 2;\r\n // }\r\n // }\r\n //} else {\r\n // //options for bp3 and up\r\n // //Note: HW version is temporarily solution while we have date-pickers with HW-style\r\n // //Check if use HW version\r\n // var flgHWversion = $roomSelector.hasClass('qtip-left') && ((rightForm - leftTarget) >= 360);\r\n // if (flgHWversion) {\r\n // //HW version uses extra class \"qtip-left\"\r\n // api.set('position.my', 'top left');\r\n // api.set('position.at', 'bottom left');\r\n // api.set('position.adjust.x', 0);\r\n // //for not-small screen use space between leftTarget and rightForm\r\n // newWidth = rightForm - leftTarget;\r\n // } else {\r\n // //ST version\r\n // api.set('position.my', 'top right');\r\n // api.set('position.at', 'bottom right');\r\n // api.set('position.adjust.x', currRight);\r\n // //for not-small screen use half of width\r\n // newWidth = newWidth / 2;\r\n // }\r\n //}\r\n\r\n $roomSelectorContainerQtip.css({ \"width\": newWidth });\r\n $roomSelectorContainerQtip.css({ \"maxWidth\": newWidth });\r\n }\r\n\r\n }\r\n\r\n function fixQtipScrollTop(api) {\r\n if (!api)\r\n return;\r\n\r\n var holder = api.target;\r\n var windowHeight = $(window).height();\r\n var offset = windowHeight / 2;\r\n\r\n if (holder.outerHeight() >= offset) {\r\n // no sence to scroll\r\n return;\r\n }\r\n\r\n var currentTop = $(window).scrollTop();\r\n var minTop = currentTop + offset;\r\n var holderTop = holder.offset().top;\r\n\r\n if (minTop > holderTop) {\r\n // don't scroll if holder is located near top of screen\r\n return;\r\n }\r\n\r\n // height of dropdown's inner-view: 70vh;\r\n // padding-bottom of dropdown: 16px;\r\n //var maxHeightOfDropdown = api.tooltip.outerHeight();\r\n var maxHeightOfDropdown = windowHeight * 0.7 + 16;\r\n\r\n // space between control and dropdown: ~29-30px\r\n var marginTop = parseInt(api.tooltip.css(\"margin-top\"));\r\n //var marginTop = 30;\r\n\r\n // chat's space at window's bottom: 40px (height 30px + 10px bottom)\r\n var maxHeight = holder.outerHeight() + marginTop + maxHeightOfDropdown + 40;\r\n var maxOffset = windowHeight - maxHeight;\r\n\r\n var halfOffset = offset / 2;\r\n if (halfOffset > maxOffset) {\r\n offset = maxOffset;\r\n } else {\r\n offset = halfOffset;\r\n }\r\n\r\n $('html, body').stop().animate({\r\n scrollTop: holder.offset().top - offset\r\n }, 300);\r\n }\r\n\r\n function updateQtipModalMode(useModalMode, api, $dropdownContainerQtip) {\r\n if (useModalMode) {\r\n $('.qtip.rooms-selector').addClass(\"modal\");\r\n $('html').addClass(\"noscroll\");\r\n\r\n $('.qtip.rooms-selector .close').off('click');\r\n $('.qtip.rooms-selector .modal-close').on('click', function (e) {\r\n if (api) {\r\n api.hide();\r\n }\r\n });\r\n } else {\r\n $('html').removeClass(\"noscroll\");\r\n $('.qtip.rooms-selector').removeClass(\"modal\");\r\n\r\n $('.qtip.rooms-selector .modal-close').off('click');\r\n $('.qtip.rooms-selector .close').on('click', function (e) {\r\n if (api) {\r\n api.hide();\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n function fixModalHeadHeight() {\r\n var $contentHead = $('.qtip.rooms-selector .modal-head');\r\n var $stickyWrapper = $contentHead.parent('.sticky-wrapper');\r\n if ($stickyWrapper.length == 0) {\r\n var wrapper = $('
')\r\n .addClass('sticky-wrapper');\r\n \r\n $contentHead.wrapAll(wrapper)\r\n $stickyWrapper = $contentHead.parent('.sticky-wrapper');\r\n }\r\n $stickyWrapper.css('height', $contentHead.outerHeight(true));\r\n };\r\n fixModalHeadHeight();\r\n\r\n function resizer() {\r\n let qtip = $roomSelector.qtip('api');\r\n if (qtip && qtip.isShowing) {\r\n\r\n var $dropdownContainerQtip = $('.qtip.rooms-selector');\r\n var isModalMode = $dropdownContainerQtip.hasClass(\"modal\");\r\n var useModalMode = GetBreakpointWidth() < 768;\r\n\r\n if (useModalMode != isModalMode) {\r\n updateQtipModalMode(useModalMode, qtip, $dropdownContainerQtip);\r\n }\r\n\r\n fixModalHeadHeight();\r\n fixQtipAdjust($roomSelector);\r\n }\r\n };\r\n\r\n $(this).qtip({\r\n show: {\r\n event: 'click',\r\n ready: true,\r\n solo: true,\r\n },\r\n overwrite: 'false',\r\n hide: 'unfocus',\r\n content: {\r\n text: $('#rooms-selector-temp').html() //text: $('.rooms-selector').html()\r\n },\r\n position: {\r\n target: $(this), //$('.rooms-persons'),\r\n my: posMy, //my: 'top center',\r\n at: posAt, //at: 'bottom center',\r\n tooltip: 'topMiddle',\r\n //viewport: $(window),\r\n //viewport:true,\r\n adjust: {\r\n x: pLeft,\r\n y: 0\r\n },\r\n //effect: false //no-animation\r\n effect: function (api, pos) {\r\n //The default animation callback\r\n //$(this).animate(pos, { duration: 200, queue: FALSE });\r\n\r\n //fix animation when searchbar becomes sticky => no-sticky\r\n if (api.elements.target.hasClass('is-sticky-parent')) {\r\n var window_top = $(window).scrollTop();\r\n pos.top = window_top + 51;\r\n }\r\n $(this).animate(pos, { duration: 0, queue: false });\r\n }\r\n },\r\n style: {\r\n classes: classes,\r\n def: false,\r\n },\r\n events: {\r\n hide: function (event, api) {\r\n $('.qtip.rooms-selector .modal-close').off('click');\r\n $('.qtip.rooms-selector .close').off('click');\r\n $('.qtip.rooms-selector').remove();\r\n $roomSelector.removeClass('open');\r\n $input_wrapper.removeClass('open');\r\n $('html').removeClass(\"noscroll\");\r\n setTimeout(function () {\r\n $labelRoomSelector.removeClass('open');\r\n }, 300);\r\n //$('.qtip.rooms-selector .modal-head').unstick();\r\n $(window).off(\"resize\", resizer);\r\n if (api) api.isShowing = false;\r\n },\r\n render: function (event, api) {\r\n ko.applyBindings(searchViewModel, api.elements.tooltip[0]);\r\n //ko.applyBindings(searchViewModel, $('.rooms-selector')[0]);\r\n $roomSelector.addClass('open');\r\n $labelRoomSelector.addClass('open');\r\n //$('.qtip.rooms-selector .modal-head').sticky({ topSpacing: 0, zIndex: 5, widthFromWrapper: false });\r\n api.tooltip.bind('remove', function () {\r\n //console.log('unstick ' + $('.qtip.rooms-selector .modal-head').length + ' items');\r\n //$('.qtip.rooms-selector .modal-head').unstick();\r\n });\r\n },\r\n show: function (event, api) {\r\n //event.preventDefault(); // Stop it!\r\n if (api) api.isShowing = true;\r\n var $dropdownContainerQtip = $('.qtip.rooms-selector');\r\n var useModalMode = GetBreakpointWidth() < 768;\r\n updateQtipModalMode(useModalMode, api, $dropdownContainerQtip);\r\n\r\n if (useModalMode) {\r\n setTimeout(function () {\r\n fixModalHeadHeight();\r\n }, 100);\r\n\r\n /* On some mobile browser when the overlay was previously\r\n opened and scrolled, if you open it again it doesn't \r\n reset its scrollTop property */\r\n //$dropdownContainerQtip.scrollTop = 0;\r\n } else {\r\n fixQtipScrollTop(api);\r\n }\r\n fixQtipAdjust($roomSelector, $dropdownContainerQtip);\r\n $(window).resize(resizer);\r\n }\r\n }\r\n });\r\n });\r\n\r\n $(document).on('click', '.additional-options-selector', function () {\r\n if (GetBreakpointWidth() < 768 && searchViewModel.IsSearch()) {\r\n $('#sidebarSearchResults .item-filter').click();\r\n } else {\r\n $(\".input-wrapper\").removeClass('open');\r\n var $additionalOptionsSelector = $(this);\r\n var parent = $(this).parents('.additional-search-options');\r\n var $input_wrapper = $additionalOptionsSelector.parents(\".input-wrapper\");\r\n $input_wrapper.addClass('open');\r\n var $labelRoomSelector = parent.find('.show-additional-options-qtip-label');\r\n\r\n // qtip classes with '.faded'\r\n var classes = 'additional-options-qtip';\r\n var $header = $additionalOptionsSelector.parents('.header');\r\n if ($header.length > 0) {\r\n if (!$header.hasClass('searchpage')) {\r\n classes += \" faded\";\r\n }\r\n }\r\n classes += \" vh-max-height\";\r\n if ($additionalOptionsSelector.hasClass('is-sticky-parent')) {\r\n classes += \" is-sticky-parent\";\r\n }\r\n\r\n var posMy = 'top center';\r\n var posAt = 'bottom center';\r\n var pLeft = 0;\r\n var $addon = $(this).prev('.addon');\r\n if ($addon.length > 0) {\r\n posMy = 'top left';\r\n posAt = 'bottom left';\r\n pLeft = $addon.outerWidth() * -1;\r\n }\r\n\r\n var qtip = $additionalOptionsSelector.qtip('api');\r\n if (qtip && $additionalOptionsSelector.hasClass('open')) {\r\n qtip.hide();\r\n return;\r\n }\r\n\r\n function fixQtipAdjust($additionalOptionsSelector, $additionalOptionsSelectorContainerQtip) {\r\n //$additionalOptionsSelector\r\n var api = $additionalOptionsSelector.qtip('api');\r\n\r\n if (!$additionalOptionsSelectorContainerQtip) {\r\n $additionalOptionsSelectorContainerQtip = api.elements.tooltip;\r\n }\r\n var isModalMode = $additionalOptionsSelectorContainerQtip.hasClass(\"modal\");\r\n if (isModalMode) {\r\n api.set('position.adjust.x', 0);\r\n $additionalOptionsSelectorContainerQtip.css({ \"width\": '' });\r\n $additionalOptionsSelectorContainerQtip.css({ \"maxWidth\": '' });\r\n } else {\r\n var $form = $additionalOptionsSelector.parents(\".search .searchbar-body\"); // use 'fieldset'\r\n var leftForm = $form.offset().left;\r\n var leftTarget = $additionalOptionsSelector.offset().left;\r\n var currLeft = leftForm - leftTarget;\r\n\r\n var rightForm = leftForm + $form.outerWidth(); // without margin (on HW form is centered by margin)\r\n var rightTarget = leftTarget + $additionalOptionsSelector.outerWidth(true);\r\n var currRight = rightForm - rightTarget;\r\n\r\n var newWidth = $form.outerWidth(true);\r\n var bp_Width = GetBreakpointWidth();\r\n\r\n\r\n api.set('position.my', 'top left');\r\n api.set('position.at', 'bottom left');\r\n api.set('position.adjust.x', currLeft);\r\n\r\n $additionalOptionsSelectorContainerQtip.css({ \"width\": newWidth });\r\n $additionalOptionsSelectorContainerQtip.css({ \"maxWidth\": newWidth });\r\n }\r\n\r\n }\r\n\r\n function fixQtipScrollTop(api) {\r\n if (!api)\r\n return;\r\n\r\n var holder = api.target;\r\n var windowHeight = $(window).height();\r\n var offset = windowHeight / 2;\r\n\r\n if (holder.outerHeight() >= offset) {\r\n // no sence to scroll\r\n return;\r\n }\r\n\r\n var currentTop = $(window).scrollTop();\r\n var minTop = currentTop + offset;\r\n var holderTop = holder.offset().top;\r\n\r\n if (minTop > holderTop) {\r\n // don't scroll if holder is located near top of screen\r\n return;\r\n }\r\n\r\n var maxHeightOfDropdown = windowHeight * 0.7 + 16;\r\n\r\n // space between control and dropdown: ~29-30px\r\n var marginTop = parseInt(api.tooltip.css(\"margin-top\"));\r\n //var marginTop = 30;\r\n\r\n // chat's space at window's bottom: 40px (height 30px + 10px bottom)\r\n var maxHeight = holder.outerHeight() + marginTop + maxHeightOfDropdown + 40;\r\n var maxOffset = windowHeight - maxHeight;\r\n\r\n var halfOffset = offset / 2;\r\n if (halfOffset > maxOffset) {\r\n offset = maxOffset;\r\n } else {\r\n offset = halfOffset;\r\n }\r\n\r\n $('html, body').stop().animate({\r\n scrollTop: holder.offset().top - offset\r\n }, 300);\r\n }\r\n\r\n function updateQtipModalMode(useModalMode, api, $dropdownContainerQtip) {\r\n if (useModalMode) {\r\n $('.qtip.additional-options-qtip').addClass(\"modal\");\r\n $('html').addClass(\"noscroll\");\r\n\r\n $('.qtip.additional-options-qtip .close-qtip').off('click');\r\n $('.qtip.additional-options-qtip .modal-close').on('click', function (e) {\r\n if (api) {\r\n api.hide();\r\n }\r\n });\r\n } else {\r\n $('html').removeClass(\"noscroll\");\r\n $('.qtip.additional-options-qtip').removeClass(\"modal\");\r\n\r\n $('.qtip.additional-options-qtip .modal-close').off('click');\r\n $('.qtip.additional-options-qtip .close-qtip').on('click', function (e) {\r\n if (api) {\r\n api.hide();\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n function fixModalHeadHeight() {\r\n var $contentHead = $('.qtip.additional-options-qtip .modal-head');\r\n $contentHead.parent('.sticky-wrapper').css('height', $contentHead.outerHeight(true));\r\n };\r\n fixModalHeadHeight();\r\n\r\n function resizer() {\r\n let qtip = $additionalOptionsSelector.qtip('api');\r\n if (qtip && qtip.isShowing) {\r\n\r\n var $dropdownContainerQtip = $('.additional-filtering-container .filter-container');\r\n var isModalMode = $dropdownContainerQtip.hasClass(\"modal\");\r\n\r\n fixModalHeadHeight();\r\n fixQtipAdjust($additionalOptionsSelector);\r\n }\r\n };\r\n\r\n $(this).qtip({\r\n show: {\r\n event: 'click',\r\n ready: true,\r\n solo: true,\r\n },\r\n overwrite: 'false',\r\n hide: 'unfocus',\r\n content: {\r\n text: $('#additional-search-options-selector').html()\r\n },\r\n position: {\r\n target: $(this),\r\n my: posMy, //my: 'top center',\r\n at: posAt, //at: 'bottom center',\r\n tooltip: 'topMiddle',\r\n adjust: {\r\n x: pLeft,\r\n y: 0\r\n },\r\n //effect: false //no-animation\r\n effect: function (api, pos) {\r\n //The default animation callback\r\n\r\n //fix animation when searchbar becomes sticky => no-sticky\r\n if (api.elements.target.hasClass('is-sticky-parent')) {\r\n var window_top = $(window).scrollTop();\r\n pos.top = window_top + 51;\r\n }\r\n $(this).animate(pos, { duration: 0, queue: false });\r\n }\r\n },\r\n style: {\r\n classes: classes,\r\n def: false,\r\n },\r\n events: {\r\n hide: function (event, api) {\r\n $('.additional-filtering-container .filter-container .modal-close').off('click');\r\n $('.additional-filtering-container .filter-container .close').off('click');\r\n $('.additional-filtering-container .filter-container').remove();\r\n $additionalOptionsSelector.removeClass('open');\r\n $input_wrapper.removeClass('open');\r\n $('html').removeClass(\"noscroll\");\r\n setTimeout(function () {\r\n $labelRoomSelector.removeClass('open');\r\n }, 300);\r\n $(window).off(\"resize\", resizer);\r\n if (api) api.isShowing = false;\r\n },\r\n render: function (event, api) {\r\n ko.applyBindings(searchViewModel, api.elements.tooltip[0]);\r\n $additionalOptionsSelector.addClass('open');\r\n $labelRoomSelector.addClass('open');\r\n //$('.additional-filtering-container .filter-container .modal-head').sticky({ topSpacing: 0, zIndex: 5, widthFromWrapper: false });\r\n api.tooltip.bind('remove', function () {\r\n //$('.qtip.additional-options-qtip .modal-head').unstick();\r\n });\r\n },\r\n show: function (event, api) {\r\n //event.preventDefault(); // Stop it!\r\n if (api) api.isShowing = true;\r\n var $dropdownContainerQtip = $('.additional-filtering-container .filter-container');\r\n var useModalMode = GetBreakpointWidth() < 768;\r\n updateQtipModalMode(useModalMode, api, $dropdownContainerQtip);\r\n\r\n if (useModalMode) {\r\n setTimeout(function () {\r\n fixModalHeadHeight();\r\n }, 100);\r\n\r\n /* On some mobile browser when the overlay was previously\r\n opened and scrolled, if you open it again it doesn't \r\n reset its scrollTop property */\r\n //$dropdownContainerQtip.scrollTop = 0;\r\n } else {\r\n fixQtipScrollTop(api);\r\n }\r\n fixQtipAdjust($additionalOptionsSelector);\r\n $(window).resize(resizer);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n $(document).on('click', '.open-departure-airports-selector', function (e) {\r\n e.preventDefault();\r\n var $this = $(this);\r\n\r\n if (!searchViewModel || !searchViewModel.DepartureAirportSelector())\r\n return;\r\n\r\n var departureAirportCode = $this.attr(\"data-departureAirportCode\");\r\n if (departureAirportCode && departureAirportCode != '') {\r\n searchViewModel.SetDefaultDepartureAirportCode(departureAirportCode);\r\n }\r\n\r\n var searchbarOutside = $this.attr(\"data-searchbar-outside\");\r\n var $searchbar = $(e.target).closest('.search');\r\n if ($searchbar.length < 1 && searchbarOutside && searchbarOutside != '' && searchbarOutside != 'false')\r\n {\r\n if(searchbarOutside == 'true' || searchbarOutside == 'first')\r\n $searchbar = $('.search:first');\r\n else if (searchbarOutside == 'last')\r\n $searchbar = $('.search:last');\r\n else \r\n $searchbar = $(searchbarOutside);\r\n }\r\n \r\n if ($searchbar.length < 1)\r\n return;\r\n\r\n var $dropdown = $searchbar.find('.grouped-select.departure-airport-select');\r\n if ($dropdown.length < 1)\r\n return;\r\n\r\n\r\n var onlyOnce = $this.attr(\"data-only-once\");\r\n var autosearchOnce = $this.attr(\"data-autosearch-once\");\r\n if (this.hasAttribute(\"data-only-once\") && onlyOnce !== 0 && onlyOnce.toLowerCase() !== \"false\") {\r\n //onlyOnce = parseInt($this.attr(\"data-open-once\"));\r\n //if (isNaN(onlyOnce))\r\n // onlyOnce = 0;\r\n //if (onlyOnce > 0) {\r\n // return;\r\n //} else {\r\n // $this.attr(\"data-open-once\", onlyOnce+1);\r\n //}\r\n if (searchbarLastDepartureAirportClicked && searchbarLastDepartureAirportClicked !== \"\") {\r\n return;\r\n }\r\n }\r\n\r\n var hideValidation = $this.attr(\"data-hide-validation\");\r\n if (this.hasAttribute(\"data-hide-validation\") && hideValidation !== 0 && hideValidation.toLowerCase() !== \"false\") {\r\n var holder = $('.departureAirportCode-validation');\r\n hideSection(holder, true);\r\n }\r\n\r\n var openDepartureAirportselector = function () {\r\n if (!$dropdown.hasClass('open')) {\r\n e.stopPropagation();\r\n $dropdown.trigger('click');\r\n }\r\n\r\n if ($this[0].hasAttribute(\"data-autosearch-once\") && autosearchOnce !== 0 && autosearchOnce.toLowerCase() !== \"false\") {\r\n var subscription = searchViewModel.DepartureAirportSelector().Visible.subscribeChanged(function (newValue, oldValue) {\r\n if (subscription.isDisposed) {\r\n return;\r\n }\r\n if (oldValue === true && newValue === false) {\r\n // unsubscribe current event, because 'autosearch-once'\r\n subscription.dispose();\r\n // start search, give some time for animation\r\n var startAutoSearch = function () {\r\n $('.searchbutton').trigger('click');\r\n };\r\n setTimeout(startAutoSearch, 300);\r\n }\r\n });\r\n }\r\n };\r\n\r\n if (typeof ScrollToSearchBarForDropDown != \"undefined\") {\r\n ScrollToSearchBarForDropDown($dropdown, true, openDepartureAirportselector);\r\n } else {\r\n openDepartureAirportselector();\r\n }\r\n\r\n });\r\n\r\n $(document).on('click', '.open-date-range-selector', function (e) {\r\n e.preventDefault();\r\n var $this = $(this);\r\n\r\n if (!searchViewModel)\r\n return;\r\n\r\n var searchbarOutside = $this.attr(\"data-searchbar-outside\");\r\n var $searchbar = $(e.target).closest('.search');\r\n if ($searchbar.length < 1 && searchbarOutside && searchbarOutside != '' && searchbarOutside != 'false')\r\n {\r\n if(searchbarOutside == 'true' || searchbarOutside == 'first')\r\n $searchbar = $('.search:first');\r\n else if (searchbarOutside == 'last')\r\n $searchbar = $('.search:last');\r\n else \r\n $searchbar = $(searchbarOutside);\r\n }\r\n\r\n if ($searchbar.length < 1)\r\n return;\r\n\r\n // $(\".input-wrapper\").removeClass('open');\r\n\r\n var $dropdown = $searchbar.find('.grouped-select.date-range-selector');\r\n if ($dropdown.length < 1)\r\n return;\r\n\r\n var onlyOnce = $this.attr(\"data-only-once\");\r\n var autosearchOnce = $this.attr(\"data-autosearch-once\");\r\n if (this.hasAttribute(\"data-only-once\") && onlyOnce !== 0 && onlyOnce.toLowerCase() !== \"false\") {\r\n //onlyOnce = parseInt($this.attr(\"data-open-once\"));\r\n //if (isNaN(onlyOnce))\r\n // onlyOnce = 0;\r\n //if (onlyOnce > 0) {\r\n // return;\r\n //} else {\r\n // $this.attr(\"data-open-once\", onlyOnce+1);\r\n //}\r\n }\r\n\r\n //var hideValidation = $this.attr(\"data-hide-validation\");\r\n //if (this.hasAttribute(\"data-hide-validation\") && hideValidation !== 0 && hideValidation.toLowerCase() !== \"false\") {\r\n // var holder = $('.dateRange-validation');\r\n // hideSection(holder, true);\r\n //}\r\n\r\n var openDateRangeSelector = function () {\r\n //if (!$dropdown.hasClass('open')) {\r\n // e.stopPropagation();\r\n // $dropdown.trigger('click');\r\n //}\r\n var drp = $dropdown.data('daterangepicker');\r\n if (drp) {\r\n var isShowing = drp.isShowing || drp.container.is(\":visible\") || drp.container.css(\"display\") != 'none';\r\n if (isShowing) {\r\n // $this.parents(\".input-wrapper\").addClass('open');\r\n } else {\r\n e.stopPropagation();\r\n //$dropdown.trigger('click');\r\n //drp.showCalendars();\r\n drp.show();\r\n }\r\n }\r\n\r\n if ($this[0].hasAttribute(\"data-autosearch-once\") && autosearchOnce !== 0 && autosearchOnce.toLowerCase() !== \"false\") {\r\n\r\n var cbApplyDateRangePicker = function (event, picker) {\r\n // unsubscribe current event, because 'autosearch-once'\r\n $dropdown.off('apply.daterangepicker', cbApplyDateRangePicker);\r\n\r\n // start search, give some time for animation\r\n var startAutoSearch = function () {\r\n $('.searchbutton').trigger('click');\r\n };\r\n setTimeout(startAutoSearch, 300);\r\n };\r\n\r\n $dropdown.on('apply.daterangepicker', cbApplyDateRangePicker);\r\n }\r\n };\r\n\r\n if (typeof ScrollToSearchBarForDropDown != \"undefined\") {\r\n ScrollToSearchBarForDropDown($dropdown, true, openDateRangeSelector);\r\n } else {\r\n openDateRangeSelector();\r\n }\r\n\r\n });\r\n\r\n\r\n\r\n};\r\n\r\nexport function searchbarFixedHeight() {\r\n var h = 0;\r\n //var holder = $(\".searchbar-fixed\");\r\n //if (holder && (holder.is(':visible') || $(window).width() > 1024)) {\r\n // h = h + holder.outerHeight(true);\r\n //}\r\n\r\n var maxWidth = GetBreakpointWidth();\r\n var $searchbar = $(\".searchbar-sticky\");\r\n if ($searchbar.length > 0 && ($searchbar.css('position') == 'fixed' || maxWidth >= 1280)) {\r\n //h = h + $searchbar.outerHeight();\r\n // FIXME: after 'searchbar' re-styling may be other values\r\n // height of searchbar-sticky:\r\n // standard mode: 125px;\r\n // sticky mode: 80px;\r\n h = 90 + 12;\r\n }\r\n\r\n return h;\r\n};\r\n\r\nexport function OpenSearchBarDestinationSelector(callbackOpened) {\r\n var $dropdown = $('.search .grouped-select.destination-select');\r\n if ($dropdown.length < 1)\r\n return;\r\n\r\n var openDestinationSelector = function () {\r\n if (!$dropdown.hasClass('open')) {\r\n //e.stopPropagation();\r\n $dropdown.first().trigger('click');\r\n }\r\n if (typeof callbackOpened === \"function\") {\r\n callbackOpened($dropdown);\r\n }\r\n }\r\n\r\n if (typeof ScrollToSearchBarForDropDown != \"undefined\") {\r\n ScrollToSearchBarForDropDown($dropdown.first(), true, openDestinationSelector);\r\n } else {\r\n openDestinationSelector();\r\n }\r\n};\r\n\r\nexport function OpenSearchBarDepartureAirportSelector(callbackOpened) {\r\n var $dropdown = $('.search .grouped-select.departure-airport-select');\r\n if ($dropdown.length < 1)\r\n return;\r\n\r\n var openDepartureAirportSelector = function () {\r\n if (!$dropdown.hasClass('open')) {\r\n //e.stopPropagation();\r\n $dropdown.first().trigger('click');\r\n }\r\n if (typeof callbackOpened === \"function\") {\r\n callbackOpened($dropdown);\r\n }\r\n }\r\n\r\n if (typeof ScrollToSearchBarForDropDown != \"undefined\") {\r\n ScrollToSearchBarForDropDown($dropdown.first(), true, openDepartureAirportSelector);\r\n } else {\r\n openDepartureAirportSelector();\r\n }\r\n};\r\n\r\nexport function OpenSearchBarRoomSelector(callbackOpened) {\r\n var $dropdown = $('.search .show-rooms-selector');\r\n if ($dropdown.length < 1)\r\n return;\r\n\r\n var openRoomSelector = function () {\r\n if (!$dropdown.hasClass('open')) {\r\n //e.stopPropagation();\r\n $dropdown.first().trigger('click');\r\n }\r\n if (typeof callbackOpened === \"function\") {\r\n callbackOpened($dropdown);\r\n }\r\n }\r\n\r\n if (typeof ScrollToSearchBarForDropDown != \"undefined\") {\r\n ScrollToSearchBarForDropDown($dropdown.first(), true, openRoomSelector);\r\n } else {\r\n openRoomSelector();\r\n }\r\n};\r\n\r\nexport function AfterUpdateSearchBarDepartureAirportSelector(sender) {\r\n let $select = $(this);\r\n let $dropdown = $(sender);\r\n\r\n let hotelOnly = searchViewModel.HotelOnly();\r\n if (hotelOnly) {\r\n $dropdown.addClass('has-hotelonly');\r\n } else {\r\n $dropdown.removeClass('has-hotelonly');\r\n }\r\n};\r\n","import 'Vendors/jquery.inview';\r\nimport { GetBreakpointWidth } from 'Utils/globals-bp';\r\n//import { searchbarFixedHeight } from 'Utils/ha-searcbar-functions';\r\n\r\nexport function InitScript_searchResults() {\r\n if (!searchViewModel.isMultipleResults())\r\n return;\r\n\r\n $(document).on('click', '.do-search', function (e) {\r\n e.preventDefault();\r\n\r\n if (!searchViewModel)\r\n return;\r\n\r\n if (searchViewModel.SearchInProgress())\r\n return;\r\n\r\n var $searchbar = $('.search');\r\n if ($searchbar.length < 1)\r\n return;\r\n\r\n e.stopPropagation();\r\n\r\n var $this = $(this);\r\n var onlyOnce = $this.attr(\"data-only-once\");\r\n if (this.hasAttribute(\"data-only-once\") && onlyOnce !== 0 && onlyOnce.toLowerCase() !== \"false\") {\r\n onlyOnce = parseInt($this.attr(\"data-search-once\"));\r\n if (isNaN(onlyOnce))\r\n onlyOnce = 0;\r\n if (onlyOnce > 0) {\r\n return;\r\n } else {\r\n $this.attr(\"data-search-once\", onlyOnce + 1);\r\n }\r\n }\r\n\r\n // start search, give some time for animation\r\n var startAutoSearch = function () {\r\n $('.searchbutton').trigger('click');\r\n scrollToSearchResults(true);\r\n };\r\n setTimeout(startAutoSearch, 300);\r\n });\r\n\r\n if (searchViewModel.isMultipleResults() && searchViewModel.UseAutoLoad()) {\r\n // Automatic load more hotels in search result on scrolling\r\n $(document).on('inview', '.autoload-more-container > .show-more-hotel-results', function (e) {\r\n if (GetBreakpointWidth() >= 768) {\r\n //e.preventDefault();\r\n var $this = $(this);\r\n //console.log(\">>>> $this.data('running') = \" + $this.data('running') + \" *** $this.data('inview') = \" + $this.data('inview') + ' <>');\r\n if ($this.data('inview') && !$this.data('running') && !searchViewModel.FilterInProgress()) {\r\n $this.data('running', true);\r\n function autoloadMoreHotels() {\r\n //console.log(\">>>> >>> autoloadMoreHotels \");\r\n $this.trigger('click'); //$this.click();\r\n //if (typeof UpdateSidebarSearchFilter != \"undefined\") {\r\n // UpdateSidebarSearchFilter(true);\r\n //}\r\n $this.data('running', false);\r\n }\r\n //setTimeout(autoloadMoreHotels, 500);\r\n autoloadMoreHotels();\r\n }\r\n if (!$this.data('inview') && !$this.data('running')) {\r\n //console.log(\">>>> >>> UpdateSidebarSearchFilter \");\r\n //alert(\"$this.data('running') = \" + $this.data('running') + \" \\n$this.data('inview') = \" + $this.data('inview'));\r\n if (typeof UpdateSidebarSearchFilter != \"undefined\") {\r\n UpdateSidebarSearchFilter(true);\r\n //setTimeout(UpdateSidebarSearchFilter, 250, true);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n //if (searchViewModel.isMultipleResults() && typeof UpdateSearchMap != \"undefined\") {\r\n // UpdateSearchMap(false);\r\n //}\r\n\r\n};\r\n\r\nexport function ScrollToTarget(target) {\r\n if (!target || target.length == 0) return;\r\n if (!target.match(\"^#\")) {\r\n if (!target.match(\"^\\.\")) {\r\n target = \".\" + target;\r\n }\r\n if (!target.match(\":first$\")) {\r\n target += \":first\";\r\n }\r\n }\r\n\r\n var holder = $(target);\r\n if (holder && holder.length > 0) {\r\n var topMenu = $(\".page-nav\");\r\n var offset = 0;\r\n if (topMenu.length > 0) {\r\n offset = topMenu.outerHeight() - 1;\r\n }\r\n else {\r\n var searchResults = $(\"#search-results\");\r\n if (searchResults.length <= 0) {\r\n searchResults = $(\".search-results\");\r\n }\r\n if (searchResults.length <= 0) {\r\n searchResults = $(\"#search-results-container\");\r\n }\r\n\r\n var flgWithSearchBar = searchResults.length > 0 && searchResults.hasClass('anchor') && searchResults.hasClass('with-searchbar');\r\n if (flgWithSearchBar)\r\n offset = 90;\r\n else\r\n offset = 0;\r\n }\r\n\r\n $('html, body').stop().animate({\r\n scrollTop: holder.offset().top - offset\r\n }, 300);\r\n }\r\n};\r\n\r\nexport function scrollToSearchResults(forceScrolling) {\r\n if (!searchViewModel.RetrievingDataReady()) {\r\n //console.log(\"scrollToSearchResults: RetrievingDataReady is false.\");\r\n if (!forceScrolling) return;\r\n }\r\n if (!searchViewModel.UseScrollingToResults()) {\r\n //console.log(\"scrollToSearchResults: UseScrollingToResults is false.\");\r\n if (!forceScrolling) return;\r\n }\r\n var searchResults = $(\"#search-results\");\r\n if (searchResults.length <= 0) {\r\n searchResults = $(\".search-results\");\r\n }\r\n if (searchResults.length <= 0) {\r\n searchResults = $(\"#search-results-container\");\r\n }\r\n if (searchResults.length > 0) {\r\n //console.log(\"scrollToSearchResults: searchResults.offset().top = \" + searchResults.offset().top + \" searchbarFixedHeight() = \" + searchbarFixedHeight());\r\n\r\n var topMenu = $(\".page-nav\");\r\n var topMenuHeight = 0;\r\n if (topMenu.length > 0) {\r\n topMenuHeight = topMenu.outerHeight() - 1;\r\n }\r\n else {\r\n var flgWithSearchBar = searchResults.hasClass('anchor') && searchResults.hasClass('with-searchbar');\r\n if (flgWithSearchBar)\r\n topMenuHeight = 0;\r\n else\r\n topMenuHeight = 80;\r\n }\r\n\r\n $('html, body').stop().animate({\r\n //scrollTop: searchResults.offset().top - searchbarFixedHeight() - 16\r\n //scrollTop: searchResults.offset().top /*Used CSS Padding/Marging for anchor position*/\r\n scrollTop: searchResults.offset().top - topMenuHeight/* - 80*/ // disabled -80px for all versions\r\n }, 300);\r\n }\r\n else {\r\n //console.log(\"scrollToSearchResults: '#search-results' no found.\");\r\n }\r\n};\r\n\r\nexport function scrollToSearchResultByPageId(id) {\r\n let $el = $('#hotel-page-id-' + id);\r\n if ($el.length > 0) {\r\n let $scrollContainer = $el.closest('#sidebarMapResult');\r\n\r\n let pos = $el.offset().top - $scrollContainer.offset().top + $scrollContainer.scrollTop();\r\n\r\n $scrollContainer.stop().animate({\r\n scrollTop: pos\r\n }, 1000);\r\n }\r\n};\r\n\r\n\r\n\r\nexport function clampHotelDescription() {\r\n //var elements = document.getElementsByClassName(\"clamp-roomdesc\");\r\n ////var readMore = '' + '
Read more
';\r\n //\r\n //Array.prototype.forEach.call(elements, function (element, index, array) {\r\n // var link = $(element).next();\r\n // var text = link.text();\r\n // var readMore = \"... \"+link.outerHTML();\r\n // link.hide();\r\n //\r\n // element.innerHTML = text + element.innerHTML;\r\n //\r\n // var clamping = $clamp(element, { clamp: 2, useNativeClamp: false, splitOnChars: ['.', ',', ' ']/*, truncationChar: '_', truncationHTML: readMore */});\r\n // $(element).find('.clamp-link').show();\r\n // var txt1 = clamping.originalText;\r\n // var txt2 = clamping.clampedText;\r\n //});\r\n};\r\n\r\nexport function AfterRenderSearchResults() {\r\n //console.log('AfterRenderSearchResults');\r\n /*if (GetBreakpointWidth() >= 1024) {\r\n if (typeof UpdateSidebarSearchFilter != \"undefined\") {\r\n UpdateSidebarSearchFilter(true);\r\n //setTimeout(UpdateSidebarSearchFilter, 16, true);\r\n }\r\n }*/\r\n};\r\n\r\nexport function AfterForeachSearchResults(hotelResults) {\r\n //console.log('AfterForeachSearchResults >> ' + (hotelResults != null ? hotelResults.length : -1) + ' <>');\r\n\r\n\r\n\r\n if (GetBreakpointWidth() >= 1024 && !searchViewModel.FilterInProgress()) {\r\n if (typeof UpdateSidebarSearchFilter != \"undefined\") {\r\n UpdateSidebarSearchFilter(true);\r\n //setTimeout(UpdateSidebarSearchFilter, 16, true);\r\n }\r\n }\r\n\r\n};\r\n\r\nexport function AfterForeachSearchResultsMap(hotelResults) {\r\n var selectedMarkerPageId = searchViewModel.SelectedMarkerPageId();\r\n if (selectedMarkerPageId) {\r\n setTimeout(function () {\r\n scrollToSearchResultByPageId(selectedMarkerPageId);\r\n }, 300);\r\n }\r\n\r\n};\r\n"],"names":["ItemCategoryType","Hotel","Flight","Car","Transfer","CancellationProtection","HotelOnly","HotelWithFlight","getPageItemListId","AppData","GoogleAnalytics","Tracking","item_list_id","getPageItemListName","item_list_name","getItemList","gl","itemList","hash","string","CryptoJS","toString","Hex","checkDataLayer","global","dataLayer","getPriceModel","hotel","isDirectFlight","priceTotal","ko","unwrap","PriceTotal","price","Value","currency","Currency","PriceTotalByType","PriceValueType","withDirectFlight","Code","value","createHotelItem","concept","Concept","conceptName","ConceptCode","Hideaways","Name","IsDirectFlight","hotelOnly","category","txtArrivalDate","arrivalDate","ArrivalDate","moment","format","destinationName","DestinationName","item_id","Id","item_name","item_brand","item_category","item_category2","DepartureAirportCode","item_category3","item_category4","item_category5","TotalPersons","id","name","quantity","createProductItems","products","items","_mapInstanceProperty","call","product","index","Category","arr","is_hotel","_includesInstanceProperty","item","code","createProductItem","trackViewItemList","hotelResults","push","ecommerce","event","trackViewItem","hotelResult","base_price","trackViewCart","totalPrice","TotalPrice","trackAddToCart","trackRemoveFromCart","trackBeginCheckout","trackAddShippingInfo","user_data","trackAddPaymentInfo","payment_type","trackNewsletterSignup","InitScript_searchbar","$","click","searchViewModel","ValidateSearchConditions_Rooms","preventDefault","stopPropagation","flgHotel","IsHotel","DepartureDate","ReturnDate","show","hide","IsCurrentPageId","ValidateSearchConditions_PageID","ValidateSearchConditions_DepartureAirportCode","flgRedirect","IsSearch","window","location","GetSearchUrl","ScrollSettings","SearchResults","scrollToSearchResults","setVisibleSearchCriteria","AppLoader","raf","scrollToHotelPrices","updateQueryStringWithoutHistory","RequestSearch","document","on","_context","$label","this","$roomSelector","_findInstanceProperty","parent","hasClass","trigger","removeClass","parents","$input_wrapper","addClass","$labelRoomSelector","classes","$header","length","posMy","posAt","pLeft","$addon","prev","outerWidth","qtip","fixQtipAdjust","$roomSelectorContainerQtip","api","elements","tooltip","set","css","$form","leftForm","offset","left","leftTarget","currLeft","newWidth","GetBreakpointWidth","updateQtipModalMode","useModalMode","$dropdownContainerQtip","off","e","fixModalHeadHeight","$contentHead","$stickyWrapper","wrapper","wrapAll","outerHeight","resizer","isShowing","isModalMode","ready","solo","overwrite","content","text","html","position","target","my","at","adjust","x","y","effect","pos","window_top","scrollTop","top","animate","duration","queue","style","def","events","remove","_setTimeout","render","_context2","applyBindings","_bindInstanceProperty","holder","windowHeight","height","maxHeightOfDropdown","marginTop","_parseInt","maxOffset","halfOffset","stop","fixQtipScrollTop","resize","$additionalOptionsSelector","$additionalOptionsSelectorContainerQtip","_context3","$this","DepartureAirportSelector","departureAirportCode","attr","SetDefaultDepartureAirportCode","searchbarOutside","$searchbar","closest","$dropdown","onlyOnce","autosearchOnce","hasAttribute","toLowerCase","searchbarLastDepartureAirportClicked","hideValidation","hideSection","openDepartureAirportselector","subscription","Visible","subscribeChanged","newValue","oldValue","isDisposed","dispose","ScrollToSearchBarForDropDown","openDateRangeSelector","drp","data","container","is","cbApplyDateRangePicker","picker","searchbarFixedHeight","h","maxWidth","OpenSearchBarDestinationSelector","callbackOpened","openDestinationSelector","first","OpenSearchBarDepartureAirportSelector","openDepartureAirportSelector","OpenSearchBarRoomSelector","openRoomSelector","AfterUpdateSearchBarDepartureAirportSelector","sender","InitScript_searchResults","isMultipleResults","SearchInProgress","isNaN","UseAutoLoad","FilterInProgress","UpdateSidebarSearchFilter","ScrollToTarget","match","topMenu","searchResults","forceScrolling","RetrievingDataReady","UseScrollingToResults","topMenuHeight","AfterRenderSearchResults","AfterForeachSearchResults","AfterForeachSearchResultsMap","selectedMarkerPageId","SelectedMarkerPageId","$el","$scrollContainer","scrollToSearchResultByPageId"],"sourceRoot":""}