{"version":3,"file":"js/48071-f5e82737fa167523337f.js","mappings":"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","sources":["webpack://cms-web/./app/frontend/src/layout/header/reb/header.js","webpack://cms-web/./app/frontend/src/shared/cards/show_discounts.js","webpack://cms-web/./app/frontend/src/utils/generatePaxConfig.js","webpack://cms-web/./app/frontend/src/shared/fastbooking/ibh_fastbooking.js","webpack://cms-web/./app/frontend/src/utils/offset.js","webpack://cms-web/./app/frontend/src/shared/header_sticky_hotel/header_sticky_hotel.js","webpack://cms-web/./app/frontend/src/shared/header_sticky_hotel/header_sticky_hotel.analytics.js","webpack://cms-web/./app/frontend/src/utils/inViewport.js","webpack://cms-web/./app/frontend/src/utils/test_reb_header.js"],"sourcesContent":["// PY05355, Header REB - Ficha de hotel 2023, ?test_reb_header=true\nimport dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\n\nimport { FASTBOOKING_EVENTS } from '../../../shared/fastbooking/constants'\nimport fastbooking from '../../../shared/fastbooking/ibh_fastbooking'\nimport { currentPageType } from '../../../utils/page_type_detector'\nimport { initTestRebHeader } from '../../../utils/test_reb_header'\n\ndayjs.extend(customParseFormat)\n\nconst lang = document.documentElement.getAttribute('data-js-lang')\nconst format = 'YYYY-MM-DD'\n\n/**\n * Main selectors\n */\nconst mainRebHeader = document.querySelector('.js-reb-header')\nconst headerPanel = mainRebHeader?.querySelector('.js-reb-header-panel') // Panel\nconst mainHeader = document.querySelector('.js-main-header')\n\n/**\n * Selector for the menu toggle\n */\nconst menuToggle = document.querySelector('.js-vue-menu-toggle')\n\n/**\n * Navbar\n */\nconst navBar = mainRebHeader?.querySelector('.js-reb-header-content')\n/**\n * Placeholder to move fastbooking to the header\n */\nconst fastbookingInputFake = navBar?.querySelector('.js-fb-fake-input')\n\n// List of pages where the test has to be started but in a different way.\nexport const EXCEPTIONS_REB_TEST = ['destination', 'destination-index', 'offer', 'you do you']\n\nfunction moveFastBookingSticky() {\n const fastbooking = document.querySelector('.ibh-fastbooking')\n const fastbookingContainer = document.querySelector('.js-ibh-fastbooking-container')\n const fastbookingTabs = fastbookingContainer.querySelector('.js-ibh-fastbooking-tabs')\n const panelHeaderTabsContainer = headerPanel?.querySelector('.js-reb-header-tabs')\n const panelBody = headerPanel?.querySelector('.js-reb-header-panel-body')\n panelHeaderTabsContainer.appendChild(fastbookingTabs)\n panelBody.appendChild(fastbookingContainer)\n if (fastbookingContainer.classList.contains('is-hidden')) {\n fastbookingContainer.classList.remove('is-hidden')\n }\n if (!fastbooking.classList.contains('test-reb-header')) {\n fastbooking.classList.add('test-reb-header')\n }\n}\n\nfunction restoreFastBookingSticky() {\n const fastBookingtopLevelWrapper = document.querySelector('#ibh-fastbooking')\n const fastbookingWrapper = document.querySelector('.js-ibh-fastbooking-wrapper')\n const fastbookingContainer = document.querySelector('.js-ibh-fastbooking-container')\n const fastbooking = document.querySelector('.ibh-fastbooking')\n const panelHeaderTabsContainer = headerPanel?.querySelector('.js-reb-header-tabs')\n const fastbookingTabs = panelHeaderTabsContainer.querySelector('.js-ibh-fastbooking-tabs')\n fastbookingTabs && fastbookingWrapper?.appendChild(fastbookingTabs)\n fastBookingtopLevelWrapper?.appendChild(fastbookingContainer)\n if (fastbooking?.classList.contains('js-test-reb-header')) {\n fastbooking.classList.remove('js-test-reb-header')\n }\n}\n\nfunction openPanel() {\n headerPanel.classList.remove('is-hidden')\n mainRebHeader.querySelector('.js-reb-header-hotel-nav')?.classList.add('is-hidden')\n if (mainRebHeader.offsetWidth > 0 && mainRebHeader.offsetHeight > 0) {\n // If header is visible, move fastbooking to the header\n moveFastBookingSticky()\n }\n}\n\nfunction initClickOpenPanel() {\n const fakeInput = navBar?.querySelector('.js-reb-header-fake .js-fb-fake-input')\n const button = navBar?.querySelector('.js-reb-header-fake .js-fb-button')\n\n ;[button, fakeInput].forEach(item => {\n item.addEventListener('click', e => {\n e.preventDefault()\n openPanel()\n })\n })\n}\n\nfunction closePanel() {\n headerPanel.classList.add('is-hidden')\n mainRebHeader.querySelector('.js-reb-header-hotel-nav')?.classList.remove('is-hidden')\n restoreFastBookingSticky()\n}\n\nfunction initClickClosePanel() {\n const iconClosePanel = headerPanel?.querySelector('.close-panel')\n iconClosePanel.addEventListener('click', closePanel)\n}\n\nfunction placeholderLastSearch() {\n // Capture event\n document.addEventListener(FASTBOOKING_EVENTS.STATE_UPDATED, () => {\n if (fastbooking.state.place_to_go) {\n if (fastbooking.state.dates) {\n const checkIn = dayjs(fastbooking.state?.dates?.check_in, format).format('D MMM') // D-M numeric format\n // Check if there is no Check_out. If there is, add separator\n const checkOut = fastbooking.state.dates.check_out\n ? `- ${dayjs(fastbooking.state?.dates?.check_out, format).format('D MMM')}`\n : '' // D-M numeric format\n fastbookingInputFake.innerHTML = `${fastbooking.state.place_to_go.name} ${checkIn} ${checkOut}`\n } else {\n fastbookingInputFake.innerHTML = `${fastbooking.state.place_to_go.name}`\n }\n } else {\n fastbookingInputFake.textContent = fastbookingInputFake.getAttribute('data-initial-message')\n }\n })\n}\n\nfunction toggleMenu() {\n const menu = mainRebHeader?.querySelector('.js-reb-header-menu')\n const fakeInputHeader = navBar?.querySelector('.js-reb-header-fake')\n\n menuToggle.classList.toggle('close')\n menu.classList.toggle('is-hidden')\n fakeInputHeader.classList.toggle('is-hidden')\n ScrollLock.toggle()\n}\n\nfunction showContent() {\n moveFastBookingSticky()\n}\n\nfunction hideContent() {\n closePanel()\n}\n\nfunction copyInternalNav(internalNav) {\n const hotelNav = document.querySelector('.js-reb-header-hotel-nav')\n const fakeItems = hotelNav.querySelectorAll('.menu_item')\n\n internalNav.classList.add('internal-nav__hidden')\n\n internalNav.querySelector('.js-internal-nav-list').prepend(...fakeItems)\n fakeItems.forEach(item => {\n item.classList.remove('hidden')\n })\n\n hotelNav.append(internalNav)\n setTimeout(() => {\n internalNav.classList.remove('internal-nav__hidden')\n }, 100)\n}\n\nfunction showStickyHeader() {\n if (!mainRebHeader.classList.contains('sticky')) {\n mainRebHeader.classList.add('sticky')\n }\n}\n\nfunction hideStickyHeader() {\n if (mainRebHeader.classList.contains('sticky')) {\n mainRebHeader.classList.remove('sticky')\n }\n}\n\nconst lastScrollPosition = 0\n\nfunction scrollHome() {\n if (currentPageType.isHome()) {\n const header = document.querySelector('.home-megabanner-slider__slider')\n const headerBottomLimit = 0\n document.addEventListener('scroll', () => {\n // return if user scrolled less than 5px\n const currentScrollPosition = window.pageYOffset || document.documentElement.scrollTop\n const scrollDifference = Math.abs(currentScrollPosition - lastScrollPosition)\n\n if (scrollDifference <= 5) return\n\n const scroll = window.scrollY\n const headerHeight = header?.offsetHeight ?? 0\n const headerBottom = headerHeight - scroll\n if (headerBottom <= headerBottomLimit) {\n showStickyHeader()\n } else {\n hideStickyHeader()\n closePanel()\n }\n })\n }\n}\n\nfunction init() {\n if (!mainRebHeader) return\n\n if (initTestRebHeader) {\n mainRebHeader.classList.remove('hidden')\n mainHeader?.remove()\n\n import('../../../vue/main_nav/reb/vue_main_nav').then(mainNav => {\n mainNav.default.init()\n })\n\n scrollHome()\n\n initClickOpenPanel()\n initClickClosePanel()\n\n import(`dayjs/locale/${lang}.js`).then(() => {\n dayjs.locale(lang)\n placeholderLastSearch()\n })\n\n menuToggle.addEventListener('click', e => {\n e.preventDefault()\n toggleMenu()\n })\n\n // initOpenGalleryButton()\n // fastbookingInputFake.textContent =\n // fastbooking.state.place_to_go?.name ?? fastbookingInputFake.getAttribute('data-initial-message')\n } else {\n mainRebHeader?.remove()\n }\n}\n\nconst MainHeader = {\n init,\n showContent,\n hideContent,\n openPanel,\n copyInternalNav,\n}\n\nexport default MainHeader\n","import { getPrefix } from '../../core/utils/locale'\nimport { checkloadComponentStyles } from '../../lazy_wrappers/lazy_block_lightbox'\nimport { readCookie } from '../../utils/cookie_manager'\nimport on from '../../utils/events_delegation'\nimport { getLazyData } from '../../utils/get_lazy_data'\n\nfunction handlerShowDiscounts(e) {\n e.preventDefault()\n let resident = readCookie('resident')\n const showLegal = this.dataset.showLegal\n const offerStart = this.dataset.offerStart\n const offerEnd = this.dataset.offerEnd\n const showGeneralDatesOffer = this.dataset.showGeneralDatesOffer\n const offerEndVisualizationDate = this.dataset.offerEndVisualizationDate\n const showGeneralDatesDestination = this.dataset.showGeneralDatesDestination\n resident = resident === undefined ? '' : resident\n const url = `${getPrefix()}/ajax_contents/lightbox_discounts.js?resident=${resident}&showLegal=${showLegal}&offerStart=${offerStart}&offerEnd=${offerEnd}&showGeneralDatesOffer=${showGeneralDatesOffer}&offerEndVisualizationDate=${offerEndVisualizationDate}showGeneralDatesDestination=${showGeneralDatesDestination}`\n getLazyData(url, function (lightboxHtml) {\n $.fancybox.open(lightboxHtml)\n checkloadComponentStyles()\n })\n}\n\nexport function init() {\n on({ eventName: 'click', selector: '.js-discount-info', handler: handlerShowDiscounts })\n}\n\ninit()\n","/**\n * Generates a pax configuration string based on room data.\n *\n * @param {Object} rooms An object representing room data, where keys are room numbers and values are room objects.\n * Example:\n * ```\n * {\n * \"0\": {\n * \"adults_count\": 2,\n * \"children_count\": 1,\n * \"ages\": [5]\n * },\n * \"1\": {\n * \"adults_count\": 1,\n * \"children_count\": 2,\n * \"ages\": [3, 10]\n * }\n * }\n * ```\n * @param {number} rooms.adults_count The number of adults in the room.\n * @param {number} rooms.children_count The number of children in the room.\n * @param {number[]} rooms.ages An array of children's ages.\n * @returns {string} The pax configuration string in the format \"adultspchildren-ages\" separated by underscores for each room.\n */\nconst generatePaxConfig = rooms => {\n return Object.values(rooms)\n .map(room => {\n const adults = room.adults_count\n const children = room.children_count\n const ages = room.ages && Array.isArray(room.ages) ? room.ages.join('.') : ''\n\n return `${adults}p${children}${ages ? `-${ages}` : ''}`\n })\n .join('_')\n}\n\nexport default generatePaxConfig\n","import dayjs from 'dayjs'\n\nimport { currentDevice } from '../../core/utils/currentDevice'\nimport generatePaxConfig from '../../utils/generatePaxConfig'\nimport { loadDataLastSearches } from '../last_searches/last_searches'\n\nimport { FASTBOOKING_EVENTS, IBH_FASTBOOKING_EVENTS, STANDARD_DATE_FORMAT } from './constants'\n\nclass Fastbooking {\n constructor() {\n this.fastbooking = document.querySelector('#ibh-fastbooking')\n this.isInitialized = false\n this.isSticky = false\n this.state = {}\n this.stateUpdatedEvent = new Event(FASTBOOKING_EVENTS.STATE_UPDATED)\n this.dateFormat = document.documentElement.dataset?.dateFormat || 'DD/MM/YYYY'\n this.tab = 'hotel'\n }\n\n setAsInitialized() {\n this.isInitialized = true\n\n const setInitializedEvent = new CustomEvent(FASTBOOKING_EVENTS.FASTBOOKING_READY)\n document.dispatchEvent(setInitializedEvent)\n }\n\n /**\n * SETTERS\n */\n\n // Sets room code in fastbooking form input hidden to be sent to CRS on submit\n setRoomCode(roomCode) {\n this.fastbooking.querySelector('.js-fastbooking-room-code').value = roomCode\n }\n\n setDestination(destinationId, options) {\n if (!destinationId) return\n\n const setHotelEvent = new CustomEvent(FASTBOOKING_EVENTS.SET_DESTINATION, {\n detail: {\n destinationId,\n options,\n },\n })\n\n document.dispatchEvent(setHotelEvent)\n }\n\n setDates(checkIn, checkOut) {\n if (!checkIn || !checkOut) return\n\n const setDatesEvent = new CustomEvent(FASTBOOKING_EVENTS.SET_DATES, {\n detail: {\n dates: {\n checkIn,\n checkOut,\n },\n },\n })\n\n document.dispatchEvent(setDatesEvent)\n }\n\n setOccupancy(paxConfig) {\n if (!paxConfig) return\n\n const setOccupancyEvent = new CustomEvent(FASTBOOKING_EVENTS.SET_OCCUPANCY, {\n detail: {\n paxConfig,\n },\n })\n\n document.dispatchEvent(setOccupancyEvent)\n }\n\n setPromocode(code) {\n if (!code) return\n\n const setPromocodeEvent = new CustomEvent(FASTBOOKING_EVENTS.SET_PROMOCODE, {\n detail: {\n code,\n },\n })\n\n document.dispatchEvent(setPromocodeEvent)\n\n document.addEventListener(\n FASTBOOKING_EVENTS.PROMOCODE_IS_VALID,\n () => {\n const showBannerEvent = new CustomEvent(IBH_FASTBOOKING_EVENTS.SHOW_BANNER)\n\n document.dispatchEvent(showBannerEvent)\n },\n { once: true }\n )\n }\n\n /**\n * PANELS\n */\n\n openDates(startDate) {\n const openDatesEvent = new CustomEvent(FASTBOOKING_EVENTS.OPEN_DATES, {\n detail: startDate,\n })\n document.dispatchEvent(openDatesEvent)\n }\n\n openOccupancy() {\n const openOccupancyEvent = new CustomEvent(FASTBOOKING_EVENTS.OPEN_OCCUPANCY)\n document.dispatchEvent(openOccupancyEvent)\n }\n\n openPromocode() {\n const openPromocodeEvent = new CustomEvent(FASTBOOKING_EVENTS.OPEN_PROMOCODE)\n document.dispatchEvent(openPromocodeEvent)\n }\n\n closePanels() {\n const event = new CustomEvent(FASTBOOKING_EVENTS.CLOSE_PANELS)\n document.dispatchEvent(event)\n }\n\n /**\n * STICKY\n */\n\n setFastbookingSticky() {\n const event = new CustomEvent(IBH_FASTBOOKING_EVENTS.STICKY_FASTBOOKING)\n document.dispatchEvent(event)\n this.isSticky = true\n }\n\n unsetFastbookingSticky() {\n const event = new CustomEvent(IBH_FASTBOOKING_EVENTS.NO_STICKY_FASTBOOKING)\n document.dispatchEvent(event)\n this.hideOverlay()\n this.isSticky = false\n }\n\n openStickyFastbooking() {\n const event = new CustomEvent(IBH_FASTBOOKING_EVENTS.OPEN_STICKY_FASTBOOKING)\n document.dispatchEvent(event)\n this.showOverlay()\n this.isSticky = true\n }\n\n closeStickyFastbooking() {\n const event = new CustomEvent(IBH_FASTBOOKING_EVENTS.CLOSE_STICKY_FASTBOOKING)\n document.dispatchEvent(event)\n this.hideOverlay()\n this.isSticky = true\n }\n\n /**\n * OVERLAY\n */\n\n showOverlay() {\n if (currentDevice.isMobile) {\n const overlayEvent = new CustomEvent(FASTBOOKING_EVENTS.FASTBOOKING_ACTIVE, { detail: { isSticky: true } })\n document.dispatchEvent(overlayEvent)\n }\n }\n\n hideOverlay() {\n if (currentDevice.isMobile) {\n const overlayEvent = new CustomEvent(FASTBOOKING_EVENTS.FASTBOOKING_INACTIVE, { detail: { isSticky: true } })\n document.dispatchEvent(overlayEvent)\n }\n }\n\n /**\n * FASTBOOKING STATE\n */\n\n getFastbookingStateFromStorage() {\n const isValidDateFormat = dateString => /^\\d{4}-\\d{2}-\\d{2}$/.test(dateString)\n\n const item = localStorage.getItem('fastbooking_state')\n\n if (!item) return\n\n const state = JSON.parse(item)\n\n if (state.dates?.check_in && !isValidDateFormat(state.dates.check_in)) {\n state.dates = null\n }\n\n return state\n }\n\n // Gets fastbooking state and applies it in fastbooking selectors\n applyFastbookingState(source = 'state') {\n const state = source === 'storage' ? this.getFastbookingStateFromStorage() : this.state\n\n if (!state) return\n\n if (state.place_to_go?.id_and_type) {\n this.setDestination(state.place_to_go.id_and_type, { prevent_show_dates: true })\n }\n\n this.applyFastbookingStateDates(source)\n\n if (state.rooms_info) {\n const paxConfig = generatePaxConfig(state.rooms_info)\n this.setOccupancy(paxConfig)\n }\n\n if (state.promocode?.code) this.setPromocode(state.promocode.code)\n }\n\n // Given an id gets the matching last search and applies it in fastbooking selectors\n applyFastbookingStateFromLastSearch(destinationId) {\n if (!destinationId) return\n\n const search = this.getLastSearchById(destinationId, { prevent_show_dates: true })\n\n if (!search) return\n\n this.setDestination(search.id)\n\n if (search.check_in_date && search.check_out_date) {\n this.setDates(search.check_in_date, search.check_out_date)\n }\n\n if (search.pax_config) {\n this.setOccupancy(search.pax_config)\n }\n }\n\n // Gets fastbooking state dates and applies them in fastbooking date selector\n applyFastbookingStateDates(source = 'state') {\n const state = source === 'storage' ? this.getFastbookingStateFromStorage() : this.state\n\n if (!state) return\n\n if (state.dates?.check_in && state.dates?.check_out) {\n this.setDates(state.dates.check_in, state.dates.check_out)\n }\n }\n\n // Stores data in fastbooking state\n setFastbookingState(data) {\n if (!data) return\n\n this.state = { ...this.state, ...data }\n\n document.dispatchEvent(this.stateUpdatedEvent)\n }\n\n // Stores fastbooking state in local storage\n storeFastbookingStateInLocalStorage() {\n localStorage.setItem('fastbooking_state', JSON.stringify(this.state))\n\n document.dispatchEvent(this.stateUpdatedEvent)\n }\n\n /**\n * LAST SEARCHES\n */\n areSearchesDifferent(search1, search2) {\n const relevantFields = ['check_in_date', 'check_out_date', 'rooms', 'pc']\n for (const field of relevantFields) {\n if (search1[field] !== search2[field]) {\n return true\n }\n }\n return false\n }\n\n getLastSearchById(destinationId) {\n const lastSearches = JSON.parse(localStorage.getItem('last_searches')) || []\n\n return lastSearches.find(search => search.id === destinationId)\n }\n\n getDestinationFromFastbookingData(id, data) {\n const sections = ['destinations', 'hotels', 'specialties']\n\n for (const section of sections) {\n const items = data[section][1] // Accede al array correspondiente\n\n for (const item of items) {\n if (item.id === id) {\n return { item }\n }\n }\n }\n\n return {} // ID no encontrado\n }\n\n storeLastSearchInLocalStorage(search, fastbookingData) {\n const maxSearches = 3 //guardar las últimas 3 búsquedas\n\n const lastSearches = JSON.parse(localStorage.getItem('last_searches')) || []\n const item = this.getDestinationFromFastbookingData(search.destination, fastbookingData).item\n\n const lastSearch = {\n category: item.data.hotel_category,\n check_in_date: search.checkIn ? dayjs(search.checkIn, this.dateFormat).format(STANDARD_DATE_FORMAT) : null,\n check_out_date: search.checkOut ? dayjs(search.checkOut, this.dateFormat).format(STANDARD_DATE_FORMAT) : null,\n datesInfoKey: null,\n day: '',\n description: '',\n image_alt: '',\n image_desktop: '',\n image_mobile: '',\n image_tablet: '',\n image: '',\n locale: document.documentElement.getAttribute('data-js-lang'),\n next_opening: item.data.next_opening,\n path: '',\n pax_config: '',\n pc: search.promocode,\n place_title: '',\n place_to_go: item.id,\n rooms: search.occupancy,\n search_url: '',\n segmentations: item.data.segmentations,\n summary: '',\n title_normalize: item.title_normalize,\n title: item.title,\n title_en: item.title_en,\n type: item.type,\n }\n\n if (lastSearch) {\n const dataLastSearches = loadDataLastSearches(lastSearch)\n lastSearch.pax_config = dataLastSearches.pax_config\n lastSearch.search_url = dataLastSearches.search_url\n\n const existingItem = lastSearches.find(item => item.id === lastSearch.place_to_go)\n const existingItemIndex = lastSearches.findIndex(item => item.id === lastSearch.place_to_go)\n\n if (existingItem) {\n if (this.areSearchesDifferent(existingItem, lastSearch)) {\n lastSearches[existingItemIndex] = { ...lastSearch } // Reemplazar con la nueva búsqueda\n }\n } else {\n lastSearches.push({ ...lastSearch })\n }\n if (lastSearches.length > maxSearches) {\n lastSearches.shift() // Eliminar la búsqueda más antigua\n }\n }\n\n localStorage.setItem('last_searches', JSON.stringify(lastSearches))\n }\n\n getLastSearches(fastbookingData) {\n if (!fastbookingData) return\n const localStorageLastSearches = localStorage.getItem('last_searches')\n\n const ibhLastSearches = []\n\n if (localStorageLastSearches) {\n const lastSearches = JSON.parse(localStorageLastSearches)\n\n lastSearches.forEach(lastSearch => {\n const item = this.getDestinationFromFastbookingData(lastSearch.place_to_go, fastbookingData).item\n const checkIn = lastSearch.check_in_date ?? null\n const checkOut = lastSearch.check_out_date ?? null\n\n const ibhLastSearch = {\n destination: {\n id: item.id,\n label: item.title,\n },\n id: item.id,\n checkInDate: checkIn,\n checkOutDate: checkOut,\n data: {\n adults_only: item.data.adults_only,\n max_occupancy: item.data.max_occupancy,\n max_adults: item.data.max_adults,\n max_children: item.data.max_children,\n next_opening: item.data.next_opening,\n },\n promocode: lastSearch.pc,\n pax_config: lastSearch.pax_config ?? '',\n type: item.type,\n title: item.title,\n title_en: item.title_en,\n title_normalize: item.title_normalize,\n }\n ibhLastSearches.push(ibhLastSearch)\n })\n }\n return ibhLastSearches\n }\n\n /**\n * TABS\n */\n\n setTab(tab) {\n this.tab = tab\n }\n\n getTab() {\n return this.tab\n }\n}\n\nconst fastbooking = new Fastbooking()\nwindow.fb = fastbooking\n\nexport default fastbooking\n","const getOffset = selector => {\n let rect\n if (selector instanceof String) {\n rect = document.querySelector(selector).getBoundingClientRect()\n } else {\n rect = selector.getBoundingClientRect()\n }\n return {\n top: rect.top + window.scrollY,\n left: rect.left + window.scrollX,\n }\n}\n\nexport default getOffset\n","import '../../shared/cards/show_discounts'\n\nimport { currentDevice } from '../../core/utils/currentDevice'\nimport MainHeader from '../../layout/header/reb/header'\nimport Modal from '../../shared/modal/modal'\nimport inViewport from '../../utils/inViewport'\nimport getOffset from '../../utils/offset'\nimport { scrollToElement } from '../../utils/scroll_to_element'\nimport { initTestRebHeader } from '../../utils/test_reb_header'\nimport fastbooking from '../fastbooking/ibh_fastbooking'\n\nimport { initializeUtagEvents } from './header_sticky_hotel.analytics'\n\nconst HEADER_STICKY_SELECTOR = '.js-header-sticky-hotel'\n\nconst headerStickyHotel = document.querySelector(HEADER_STICKY_SELECTOR)\nconst header = document.querySelector(\n `.js-hotel-header, .js-hotel-reb-header, ${HEADER_STICKY_SELECTOR}, .hotel-header-inner, .js-results-header, .header-customized`\n)\n\nlet isSticky = false\n\n// PY05355, Header REB - Ficha de hotel 2023, ?test_reb_header=true\nconst mainHeader = document.querySelector('.js-reb-header')\n\nconst is_hotel_page = document.querySelector('body').classList.contains('hotel-one-landing-page')\n\nexport function hideHeaderStickyHotel() {\n headerStickyHotel?.classList.remove('sticky')\n}\nexport function showHeaderStickyHotel() {\n fastbooking.closePanels()\n headerStickyHotel?.classList.add('sticky')\n}\n\nfunction showHeaderSticky() {\n if (initTestRebHeader) {\n // PY05355, Header REB - Ficha de hotel 2023, ?test_reb_header=true\n if (!mainHeader.classList.contains('sticky')) {\n mainHeader.classList.add('sticky')\n }\n // END - PY05355, Header REB - Ficha de hotel 2023, ?test_reb_header=true\n } else {\n if (!isSticky) {\n fastbooking.setFastbookingSticky()\n fastbooking.closeStickyFastbooking()\n isSticky = true\n }\n\n if (currentDevice.isMobile) {\n fastbooking.closeStickyFastbooking()\n } else if (is_hotel_page) {\n showHeaderStickyHotel()\n fastbooking.closeStickyFastbooking()\n } else {\n fastbooking.openStickyFastbooking()\n }\n }\n}\n\nfunction hideHeaderSticky() {\n if (initTestRebHeader) {\n // PY05355, Header REB - Ficha de hotel 2023, ?test_reb_header=true\n mainHeader.classList.remove('sticky')\n // END - PY05355, Header REB - Ficha de hotel 2023, ?test_reb_header=true\n } else {\n if (currentDevice.isMobile) {\n fastbooking.setFastbookingSticky()\n } else {\n fastbooking.unsetFastbookingSticky()\n }\n if (isSticky) fastbooking.closeStickyFastbooking()\n\n if (is_hotel_page) {\n hideHeaderStickyHotel()\n }\n\n isSticky = false\n }\n}\n\n// Función para verificar si el ancla existe en la página\nfunction isAnchorValid(anchorId) {\n const anchor = document.getElementById(anchorId)\n return !!anchor\n}\n\nfunction cloneStickyMenu() {\n const hotelInfoWrapper = header.querySelector('.hotel-info-wrapper')?.cloneNode(true)\n if (hotelInfoWrapper) {\n headerStickyHotel.querySelector('.inner-header .wrapper').append(hotelInfoWrapper)\n }\n\n const internalNav = document.querySelector('.js-hotel-internal-nav')?.cloneNode(true)\n if (internalNav === null || internalNav === undefined) return\n // Añadimos clase al internal nav para que al clonar el elemento, no se lie al calcular la altura para hacerlo sticky.\n document.querySelectorAll('.js-hotel-internal-nav').forEach(nav => nav.classList.add('no-sticky'))\n\n // !! A estas líneas no les he encontrado explicación\n internalNav.querySelector('[data-show=true]')?.setAttribute('href', '#more-container-sticky')\n internalNav.querySelector('#more-container')?.setAttribute('id', 'more-container-sticky')\n\n // Hotel page only code\n if (is_hotel_page) {\n // PY05355, Header REB - Ficha de hotel 2023, ?test_reb_header=true\n if (initTestRebHeader) {\n MainHeader.copyInternalNav(internalNav)\n // END - PY05355, Header REB - Ficha de hotel 2023, ?test_reb_header=true\n } else {\n const clone_menu_nfh = document.createElement('div')\n clone_menu_nfh.classList.add('internal-nav-cnt-nfh')\n clone_menu_nfh.append(internalNav)\n headerStickyHotel.querySelector('.js-sticky-internal-nav .wrapper').append(clone_menu_nfh)\n }\n } else {\n headerStickyHotel.querySelector('.js-sticky-internal-nav .wrapper').append(internalNav)\n }\n}\n\nfunction handleStickyHeaderVisibility() {\n const windowScroll = window.scrollY\n const header_height = header.offsetHeight\n const breadcrumbPosition = getOffset(header).top + header_height\n if (windowScroll > breadcrumbPosition) {\n showHeaderSticky()\n } else {\n hideHeaderSticky()\n\n const containerSticky = document.querySelector('#more-container-sticky')\n if (containerSticky) {\n containerSticky.style.display = 'none'\n }\n\n document.querySelectorAll('.floating-action .active').forEach(elem => {\n elem.classList.remove('active')\n })\n }\n}\n\nexport function addSectionToMenuObserver(section) {\n if (!section) return\n\n inViewport(\n section,\n element => {\n if (element.isIntersecting) {\n const navs = document.querySelectorAll('.js-hotel-internal-nav')\n\n navs.forEach(nav => {\n // Remove all active classes from menu items\n const activeMenuItems = nav.querySelectorAll('.js-menu-item-in-bar.active')\n activeMenuItems.forEach(item => item.classList.remove('active'))\n\n // Add active class to current menu item\n const currentMenuItems = nav.querySelectorAll(`.js-menu-item-link[href=\"#${section.id}\"]`)\n currentMenuItems.forEach(item => item.closest('.js-menu-item-in-bar').classList.add('active'))\n\n const activeItem = nav.querySelector('.js-menu-item-in-bar.active')\n if (activeItem) {\n nav.scrollTo({\n top: 0,\n left: activeItem.offsetLeft,\n behavior: 'smooth',\n })\n }\n })\n }\n },\n {\n threshold: 0.5,\n }\n )\n}\n\nfunction initInternalNav() {\n initializeUtagEvents()\n\n const internalNavs = document.querySelectorAll('.js-hotel-internal-nav')\n\n // Recorrer cada bloque y obtener los elementos