1var cookieConsentStatus; 2var isTouch = isTouchDevice(); 3function isTouchDevice() { 4 return 'ontouchstart' in document.documentElement; 5} 6var isMobileUserAgent = { 7 Android: function() { 8 return navigator.userAgent.match(/Android/i); 9 }, 10 BlackBerry: function() { 11 return navigator.userAgent.match(/BlackBerry/i); 12 }, 13 iOS: function() { 14 return navigator.userAgent.match(/iPhone|iPad|iPod/i); 15 }, 16 Opera: function() { 17 return navigator.userAgent.match(/Opera Mini/i); 18 }, 19 Windows: function() { 20 return navigator.userAgent.match(/IEMobile/i) || navigator.userAgent.match(/WPDesktop/i); 21 }, 22 any: function() { 23 return (isMobileUserAgent.Android() || isMobileUserAgent.BlackBerry() || isMobileUserAgent.iOS() || isMobileUserAgent.Opera() || isMobileUserAgent.Windows()); 24 } 25}; 26 27var isMobile = isMobileWidth(); 28function isMobileWidth() { 29 if (window.innerWidth <= 767) { 30 return true; 31 } else { 32 return false; 33 } 34} 35 36var isTablet = checkTablet(); 37function checkTablet() { 38 if (window.innerWidth > 767 && window.innerWidth < 992) { 39 return true; 40 } else { 41 return false; 42 } 43} 44 45//Detect IE 10 and IE 11 46var isIE = function(){ 47 return /Trident\/|MSIE/.test(window.navigator.userAgent); 48} 49 50function preventBodyScroll(eventType){ 51 if(eventType == 'enable'){ 52 jQuery('html, body').addClass('locked'); 53 } else if(eventType == 'disable') { 54 jQuery('html, body').removeClass('locked'); 55 } 56} 57 58function mobileMenu(){ 59 jQuery('#mobile-menu-button').on('click', function(e){ 60 var _this = jQuery(this); 61 e.preventDefault(); 62 63 if(_this.hasClass('open')){ 64 _this.removeClass('open'); 65 jQuery('#mobile-menu').removeClass('active'); 66 jQuery('header').removeClass("scrolled-up"); 67 jQuery('body').removeClass("mobile-overlay-open"); 68 preventBodyScroll('disable'); 69 } else { 70 _this.addClass('open'); 71 jQuery('body').addClass("mobile-overlay-open"); 72 jQuery('header').addClass("scrolled-up"); 73 jQuery('#mobile-menu').addClass('active'); 74 preventBodyScroll('enable'); 75 } 76 }); 77 78 jQuery("#mobile-menu li.has-submenu > i, #mobile-menu li.has-submenu > span, #mobile-menu li.menu-item-has-children > i, #mobile-menu li.menu-item-has-children > span").off().on('click', function(e){ 79 e.preventDefault(); 80 var _thisLink = jQuery(this); 81 var _parent = _thisLink.parent(); 82 var target = _parent.find('.sub-menu'); 83 if(target.length < 1){ 84 target = _parent.find('.fixed-sub-menu'); 85 } 86 87 if (target.hasClass('active')) { 88 target.removeClass('active'); 89 _thisLink.removeClass('active'); 90 } else { 91 target.addClass('active'); 92 _thisLink.addClass('active'); 93 } 94 95 }); 96} 97 98function stickyMenu(){ 99 if(!isIE()){ 100 const el = document.querySelector(".sticky"); 101 function handleIntersection(entries) { 102 entries.map(function(e){ 103 e.target.classList.toggle("is-pinned", e.intersectionRatio < 1); 104 }); 105 } 106 const observer = new IntersectionObserver(handleIntersection, {threshold: [1]}); 107 observer.observe(el); 108 } 109 110 var scrollPosition = jQuery(window).scrollTop(); 111 jQuery(window).scroll(function() { 112 var scroll = jQuery(window).scrollTop(); 113 //IF SCROLLING UP 114 if (scroll < scrollPosition) { 115 jQuery('header').addClass('scrolled-up'); 116 jQuery('#mobile-menu').addClass('scrolled-up'); 117 jQuery('body').addClass('nav_scrolled-up'); 118 } else { 119 jQuery('header').removeClass('scrolled-up'); 120 jQuery('#mobile-menu').removeClass('scrolled-up'); 121 jQuery('body').removeClass('nav_scrolled-up'); 122 } 123 scrollPosition = scroll; 124 }); 125 /* 126 jQuery(window).scroll(function() { 127 var scroll = jQuery(window).scrollTop(); 128 if (scroll > 40) { 129 jQuery('header').addClass('low-profile'); 130 jQuery('#mobile-menu').addClass('low-profile'); 131 //IF SCROLLING UP 132 if (scroll < scrollPosition) { 133 jQuery('header').removeClass('low-profile'); 134 jQuery('#mobile-menu').removeClass('low-profile'); 135 } else { 136 jQuery('header').addClass('low-profile'); 137 jQuery('#mobile-menu').addClass('low-profile'); 138 } 139 } else { 140 jQuery('header').removeClass('low-profile'); 141 jQuery('#mobile-menu').removeClass('low-profile'); 142 } 143 scrollPosition = scroll; 144 }); 145 */ 146} 147 148function lightboxGallery() { 149 document.querySelectorAll('.image-gallery').forEach((galleryEl, index) => { 150 // Assign the ID *before* running GLightbox 151 galleryEl.setAttribute('data-gallery-id', index); 152 153 // Now init GLightbox AFTER the attribute exists 154 GLightbox({ 155 selector: `.image-gallery[data-gallery-id="${index}"] a.lightbox-gallery`, 156 openEffect: 'zoom', 157 closeEffect: 'zoom', 158 touchNavigation: true, 159 loop: true, 160 width: '90vw', 161 height: '90vh', 162 onOpen: () => { 163 preventBodyScroll('enable'); 164 }, 165 onClose: () => { 166 preventBodyScroll('disable'); 167 }, 168 afterSlideChange: ({ slideIndex }) => { 169 const wrapper = document.querySelector('.gslide'); 170 wrapper?.classList.add('glightbox-image-loaded'); 171 } 172 }); 173 }); 174} 175 176function imageSlider(){ 177 document.querySelectorAll('.image-slider__swiper').forEach(function(sliderEl) { 178 if (sliderEl.imageSliderSwiper) { 179 return; 180 } 181 182 var slides = sliderEl.querySelectorAll('.swiper-slide'); 183 var resizeTimer; 184 185 function shouldLoop() { 186 return window.innerWidth < 768 && slides.length > 1; 187 } 188 189 function initSwiper() { 190 sliderEl.imageSliderLoop = shouldLoop(); 191 sliderEl.imageSliderSwiper = new Swiper(sliderEl, { 192 loop: sliderEl.imageSliderLoop, 193 speed: 600,
194 slidesPerView: 1, 195 autoplay: { 196 delay: 8000, 197 disableOnInteraction: false, 198 pauseOnMouseEnter: false 199 }, 200 navigation: { 201 nextEl: sliderEl.querySelector('.swiper-button-next'), 202 prevEl: sliderEl.querySelector('.swiper-button-prev') 203 }, 204 on: { 205 init: function() { 206 AOS.refresh(); 207 } 208 } 209 }); 210 } 211 212 initSwiper(); 213 214 window.addEventListener('resize', function() { 215 clearTimeout(resizeTimer); 216 resizeTimer = setTimeout(function() { 217 var loopSettingChanged = shouldLoop() !== sliderEl.imageSliderLoop; 218 if (!loopSettingChanged) { 219 return; 220 } 221 222 sliderEl.imageSliderSwiper.destroy(true, true); 223 initSwiper(); 224 }, 150); 225 }); 226 }); 227} 228 229function heroSlider(){ 230 document.querySelectorAll('.hero-slider .slider__swiper, .hero-slider .slick-slider').forEach(function(sliderEl) { 231 if (sliderEl.heroSliderSwiper) { 232 return; 233 } 234 235 sliderEl.classList.add('swiper'); 236 237 var wrapperEl; 238 Array.prototype.slice.call(sliderEl.children).forEach(function(childEl) { 239 if (childEl.classList.contains('swiper-wrapper')) { 240 wrapperEl = childEl; 241 } 242 }); 243 if (!wrapperEl) { 244 wrapperEl = document.createElement('div'); 245 wrapperEl.className = 'swiper-wrapper'; 246 Array.prototype.slice.call(sliderEl.children).forEach(function(childEl) { 247 if (!childEl.classList.contains('swiper-pagination')) { 248 wrapperEl.appendChild(childEl); 249 } 250 }); 251 sliderEl.appendChild(wrapperEl); 252 } 253 254 var slides = wrapperEl.querySelectorAll('.swiper-slide'); 255 var paginationEl = sliderEl.querySelector('.swiper-pagination'); 256 var resizeTimer; 257 258 function shouldLoop() { 259 return window.innerWidth < 768 && slides.length > 1; 260 } 261 262 function initSwiper() { 263 sliderEl.heroSliderLoop = shouldLoop(); 264 sliderEl.heroSliderSwiper = new Swiper(sliderEl, { 265 loop: sliderEl.heroSliderLoop, 266 speed: 600, 267 slidesPerView: 1, 268 autoplay: { 269 delay: 8000, 270 disableOnInteraction: false, 271 pauseOnMouseEnter: false 272 }, 273 pagination: { 274 el: paginationEl, 275 clickable: true 276 }, 277 on: { 278 init: function() { 279 AOS.refresh(); 280 } 281 } 282 }); 283 } 284 285 initSwiper(); 286 287 window.addEventListener('resize', function() { 288 clearTimeout(resizeTimer); 289 resizeTimer = setTimeout(function() { 290 var loopSettingChanged = shouldLoop() !== sliderEl.heroSliderLoop; 291 if (!loopSettingChanged) { 292 return; 293 } 294 295 sliderEl.heroSliderSwiper.destroy(true, true); 296 initSwiper(); 297 }, 150); 298 }); 299 }); 300} 301 302function testimonialSlider(){ 303 var testimonialSliderSwiper = new Swiper('.testimonial-slider__swiper', { 304 loop: true, 305 speed: 600, 306 slidesPerView: 1, 307 pagination: { 308 el: '.swiper-pagination', 309 clickable: true, 310 }, 311 navigation: { 312 nextEl: ".swiper-button-next", 313 prevEl: ".swiper-button-prev", 314 }, 315 // Optional breakpoints if needed: 316 breakpoints: { 317 768: { 318 // Customize settings for viewports >= 768px if necessary. 319 loop: true, 320 }, 321 480: { 322 // Customize settings for viewports >= 480px if necessary. 323 loop: true, 324 } 325 }, 326 on: { 327 init: function () { 328 AOS.refresh(); 329 } 330 } 331 }); 332} 333 334function awardsCarousel(){ 335 document.querySelectorAll('.awards-carousel').forEach(function(sliderEl) { 336 if (sliderEl.awardsCarouselSwiper) { 337 return; 338 } 339 340 sliderEl.classList.add('swiper'); 341 342 var wrapperEl; 343 Array.prototype.slice.call(sliderEl.children).forEach(function(childEl) { 344 if (childEl.classList.contains('swiper-wrapper')) { 345 wrapperEl = childEl; 346 } 347 }); 348 349 if (!wrapperEl) { 350 wrapperEl = document.createElement('div'); 351 wrapperEl.className = 'swiper-wrapper'; 352 Array.prototype.slice.call(sliderEl.children).forEach(function(childEl) { 353 wrapperEl.appendChild(childEl); 354 }); 355 sliderEl.appendChild(wrapperEl); 356 } 357 358 var slides = wrapperEl.querySelectorAll('.awards-carousel__award');
359 slides.forEach(function(slideEl) { 360 slideEl.classList.add('swiper-slide'); 361 }); 362 363 sliderEl.awardsCarouselSwiper = new Swiper(sliderEl, { 364 loop: slides.length > 1, 365 slidesPerView: 2, 366 slidesPerGroup: 1, 367 centeredSlides: true, 368 centerInsufficientSlides: true, 369 autoplay: { 370 delay: 3000, 371 disableOnInteraction: false 372 }, 373 breakpoints: { 374 768: { 375 slidesPerView: 4 376 } 377 }, 378 on: { 379 init: function() { 380 AOS.refresh(); 381 } 382 } 383 }); 384 }); 385} 386 387function inlineOverlay(){ 388 GLightbox({ 389 selector: 'a.inline-overlay', 390 openEffect: 'fade', 391 closeEffect: 'fade', 392 onOpen: () => { 393 preventBodyScroll('enable'); 394 }, 395 onClose: () => { 396 preventBodyScroll('disable'); 397 } 398 }); 399} 400 401function scrollToNextSection(object) { 402 // tolerate jQuery or DOM input 403 var el = object instanceof HTMLElement ? object : object[0]; 404 if (!el) return; 405 406 var currentSection = el.closest('section'); 407 if (!currentSection) return; 408 409 var targetSection = currentSection.nextElementSibling; 410 if (!targetSection || targetSection.tagName.toLowerCase() !== 'section') return; 411 412 var offset; 413 if (isTablet) { 414 offset = -140; 415 } else if (isMobile) { 416 offset = -120; 417 } else { 418 offset = -170; 419 } 420 421 var targetPosition = 422 targetSection.getBoundingClientRect().top + 423 window.pageYOffset + 424 offset; 425 426 window.scrollTo({ 427 top: targetPosition, 428 behavior: 'smooth' 429 }); 430} 431 432function handleCookieConsent(){ 433 document.addEventListener('cookiesjsrUserConsent', function(event) { 434 cookieConsentStatus = event.detail.services; 435 window.dataLayer = window.dataLayer || []; 436 window.dataLayer.push({ 437 'event': 'cookieConsentChanged', 438 'cookieConsentStatus': cookieConsentStatus 439 }); 440 }); 441} 442 443function subNav() { 444 const subNav = document.getElementById('sub-nav'); 445 if (!subNav) return; 446 447 subNav.addEventListener('change', function () { 448 const target = document.getElementById(this.value); 449 if (!target) return; 450 451 let offset = -238; 452 if (window.isTablet) offset = -140; 453 if (window.isMobile) offset = -120; 454 455 scrollWithAOSCorrection(target, offset); 456 }); 457} 458 459function scrollWithAOSCorrection(target, offset) { 460 // Perform the initial scroll 461 scrollToElement(target, offset); 462 463 // Now wait for layout to stabilise due to AOS animations 464 let lastTop = null; 465 let stableCount = 0; 466 467 const interval = setInterval(() => { 468 const currentTop = target.getBoundingClientRect().top; 469 470 if (currentTop === lastTop) { 471 stableCount++; 472 // After 3 consecutive matches, assume layout has stabilised 473 if (stableCount >= 3) { 474 clearInterval(interval); 475 scrollToElement(target, offset); 476 } 477 } else { 478 stableCount = 0; // Reset if movement is detected 479 } 480 481 lastTop = currentTop; 482 }, 50); 483} 484 485function scrollToElement(el, offset) { 486 const y = el.getBoundingClientRect().top + window.pageYOffset + offset; 487 window.scrollTo({ top: y, behavior: 'smooth' }); 488} 489 490 491 492 493function eventsLandingBlock(){ 494 if(jQuery(".events-no-results-true").length){ 495 jQuery(".events__no-events").addClass("enable-no-results"); 496 } 497} 498 499function instantBookBar(){ 500 jQuery('.main-menu .instant-book').on('click', function(e){ 501 var _this = jQuery(this); 502 e.preventDefault(); 503 504 if(_this.hasClass('open')){ 505 _this.removeClass('open'); 506 jQuery('.instant-book-bar').removeClass('active'); 507 jQuery('header').removeClass("scrolled-up"); 508 jQuery('body').removeClass("instant-book-bar-open"); 509 // preventBodyScroll('disable'); 510 } else { 511 _this.addClass('open'); 512 jQuery('body').addClass("instant-book-bar-open"); 513 jQuery('header').addClass("scrolled-up"); 514 jQuery('.instant-book-bar').addClass('active'); 515 // preventBodyScroll('enable'); 516 } 517 }); 518 jQuery(document).on('click', function(event) { 519 jQuery(document).on('click', function(event) { 520 if (!jQuery(event.target).closest('.top-bar, .main-bar, .instant-book-bar .instant-book__container').length) { 521 if (jQuery(window).width() >= 992) { 522 // console.log(true); 523 if (jQuery('.main-menu .instant-book').hasClass('open')) { 524 jQuery('.main-menu .instant-book').removeClass('open'); 525 jQuery('.instant-book-bar').removeClass('active'); 526 jQuery('header').removeClass("scrolled-up"); 527 jQuery('body').removeClass("instant-book-bar-open"); 528 // preventBodyScroll('disable'); 529 } 530 } 531 } 532 }); 533 }); 534 jQuery('.instant-book-close').on('click', function(e){ 535 // console.log(true); 536 if(jQuery('.main-menu .instant-book').hasClass('open')){ 537 jQuery('.main-menu .instant-book').removeClass('open'); 538 jQuery('.instant-book-bar').removeClass('active'); 539 jQuery('header').removeClass("scrolled-up"); 540 jQuery('body').removeClass("instant-book-bar-open"); 541 // preventBodyScroll('disable'); 542 } 543 }); 544} 545 546function instantBookOverlay(){ 547 548 var $body = jQuery('body');
549 var $overlay = jQuery('.instant-book-overlay'); 550 var $trigger = jQuery('a.instant-book'); 551 552 function openOverlay(){ 553 $overlay.addClass('active'); 554 $body.addClass('instant-book-overlay-open'); 555 // preventBodyScroll('enable'); 556 } 557 558 function closeOverlay(){ 559 $overlay.removeClass('active'); 560 $body.removeClass('instant-book-overlay-open'); 561 // preventBodyScroll('disable'); 562 } 563 564 // Open on button click (no state, no lies) 565 $trigger.on('click', function(e){ 566 e.preventDefault(); 567 openOverlay(); 568 }); 569 570 // Close button 571 jQuery('.instant-book-overlay .instant-book-close').on('click', function(e){ 572 e.preventDefault(); 573 closeOverlay(); 574 }); 575 576 // Click outside the box 577 $overlay.on('click', function(e){ 578 if (jQuery(e.target).is('.instant-book-overlay__background')) { 579 closeOverlay(); 580 } 581 }); 582 583 // Escape key 584 jQuery(document).on('keydown', function(e){ 585 if (e.key === 'Escape' && $overlay.hasClass('active')) { 586 closeOverlay(); 587 } 588 }); 589} 590 591 592function terrace(){ 593 if(jQuery(".terrace-brand").length){ 594 jQuery("body").addClass("terrace"); 595 } 596} 597 598jQuery(document).ready(function() { 599 handleCookieConsent(); 600 stickyMenu(); 601 mobileMenu(); 602 inlineOverlay(); 603 awardsCarousel(); 604 instantBookBar(); 605 606 jQuery('section a.next-section').on('click', function(e){ 607 e.preventDefault(); 608 scrollToNextSection(jQuery(this)); 609 }); 610 611 AOS.init({ 612 // Global settings: 613 disable: function() { 614 var maxWidth = 992; 615 return window.innerWidth < maxWidth; 616 }, 617 startEvent: 'DOMContentLoaded', // name of the event dispatched on the document, that AOS should initialize on 618 initClassName: 'aos-init', // class applied after initialization 619 animatedClassName: 'aos-animate', // class applied on animation 620 useClassNames: false, // if true, will add content of `data-aos` as classes on scroll 621 disableMutationObserver: false, // disables automatic mutations' detections (advanced) 622 debounceDelay: 50, // the delay on debounce used while resizing window (advanced) 623 throttleDelay: 99, // the delay on throttle used while scrolling the page (advanced) 624 625 // Settings that can be overridden on per-element basis, by `data-aos-*` attributes: 626 offset: 100, // offset (in px) from the original trigger point 627 delay: 0, // values from 0 to 3000, with step 50ms 628 duration: 600, // values from 0 to 3000, with step 50ms 629 easing: 'ease', // default easing for AOS animations 630 once: false, // whether animation should happen only once - while scrolling down 631 mirror: false, // whether elements should animate out while scrolling past them 632 anchorPlacement: 'top-bottom', // defines which position of the element regarding to window should trigger the animation 633 634 }); 635 636 637});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.