PageSourceSearch

https://baystatept.com/wp-content/themes/baystatecore/assets/js/main.js?ver=1.0.1

js baystatept.com collected 2026-09-28 10:21:36 UTC 32,415 bytes, 846 lines download raw bytes

1"use strict";
2(globalThis["webpackChunkwpnest"] = globalThis["webpackChunkwpnest"] || []).push([["main"],{
3
4/***/ "./sources/js/common/deviceMenu.js":
5/*!*****************************************!*\
6  !*** ./sources/js/common/deviceMenu.js ***!
7  \*****************************************/
8/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
9
10__webpack_require__.r(__webpack_exports__);
11/* harmony export */ __webpack_require__.d(__webpack_exports__, {
12/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
13/* harmony export */ });
14const DeviceMenu = () => {
15  var _document$querySelect;
16  /* Responsive Navigation */
17  const hamBurger = document.querySelector('.hamburger');
18  const overlay = document.querySelector('.mbnav__backdrop');
19  const mbnav = document.querySelector('.mbnav');
20  const menuWrap = document.querySelector('.mbnav .menu-wrap');
21  const menuClose = () => {
22    hamBurger.classList.remove('is-clicked');
23    hamBurger.setAttribute('aria-hidden', 'false');
24    document.body.classList.remove('scroll-fixed');
25    mbnav.classList.remove('is-open');
26    if (menuWrap) {
27      const menuItems = menuWrap.querySelectorAll('li');
28      menuItems.forEach(item => item.classList.remove('is-open'));
29      document.querySelector('.mbnav__inner > .menu-wrap').style.setProperty('--leftSlide', '0');
30    }
31  };
32  if (!hamBurger || !overlay || !mbnav) {
33    return;
34  }
35
36  /* Mobile overlay click */
37  overlay.addEventListener('click', () => {
38    menuClose();
39  });
40  hamBurger.addEventListener('click', function () {
41    const isOpen = hamBurger.classList.contains('is-clicked');
42    if (isOpen) {
43      menuClose();
44      hamBurger.setAttribute('aria-expanded', 'false');
45      mbnav.setAttribute('aria-hidden', 'true');
46    } else {
47      var _mbnav$querySelector;
48      hamBurger.classList.add('is-clicked');
49      mbnav.classList.add('is-open');
50      document.body.classList.add('scroll-fixed');
51      hamBurger.setAttribute('aria-expanded', 'true');
52      mbnav.setAttribute('aria-hidden', 'false');
53      (_mbnav$querySelector = mbnav.querySelector('a, button, input')) === null || _mbnav$querySelector === void 0 || _mbnav$querySelector.focus();
54    }
55  });
56  const clickable = (_document$querySelect = document.querySelector('.mbnav__state')) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.getAttribute('data-clickable');
57  const listItemsWithSubMenu = document.querySelectorAll('.mbnav li:has(ul)');
58  listItemsWithSubMenu.forEach(item => item.classList.add('has-sub'));
59  const subMenus = document.querySelectorAll('.mbnav li > ul');
60  subMenus.forEach(subMenu => subMenu.classList.add('sub-menu'));
61  const hasSubLinks = document.querySelectorAll('.mbnav .has-sub > a');
62  hasSubLinks.forEach(link => {
63    const caret = document.createElement('em');
64    caret.classList.add('mbnav__caret');
65    link.after(caret);
66  });
67  const subMenuItems = document.querySelectorAll('.mbnav ul > li:has(ul.sub-menu)');
68  subMenuItems.forEach(item => {
69    const subMenu = item.querySelector(':scope > ul');
70    const parentLink = item.querySelector(':scope > a');
71    if (subMenu && parentLink) {
72      const backClick = document.createElement('li');
73      backClick.classList.add('back-click');
74      backClick.textContent = parentLink.textContent.trim();
75      subMenu.prepend(backClick);
76    }
77  });
78  if (clickable === 'true') {
79    const caretElements = document.querySelectorAll('.mbnav .has-sub > .mbnav__caret');
80    caretElements.forEach(caret => caret.classList.add('mbnav__caret'));
81  } else {
82    const nonClickableLinks = document.querySelectorAll('.mbnav .has-sub > a');
83    nonClickableLinks.forEach(link => {
84      link.classList.add('mbnav__caret');
85      link.setAttribute('href', 'javascript:;');
86    });
87  }
88
89  // === First part: wrapAll ===
90  const menuInner = document.querySelector('.mbnav__inner');
91  const children = Array.from(menuInner.children);
92  const outerWrap = document.createElement('div');
93  outerWrap.classList.add('menu-wrap');
94  const innerWrap = document.createElement('div');
95  innerWrap.classList.add('menu-inner');
96  children.forEach(child => innerWrap.appendChild(child));
97  outerWrap.appendChild(innerWrap);
98  menuInner.appendChild(outerWrap);
99  const submenuElements = document.querySelectorAll('.mbnav__inner ul li.has-sub ul');
100  submenuElements.forEach(subMenu => {
101    const menuWrap = document.createElement('div');
102    menuWrap.classList.add('menu-wrap');
103    const innerWrap = document.createElement('div');
104    innerWrap.classList.add('menu-inner');
105    subMenu.parentNode.replaceChild(menuWrap, subMenu);
106    innerWrap.appendChild(subMenu);
107    menuWrap.appendChild(innerWrap);
108  });
109
110  // Open menu on caret click
111  const caretTriggers = document.querySelectorAll('.mbnav .has-sub > .mbnav__caret');
112  caretTriggers.forEach(trigger => {
113    trigger.addEventListener('click', function () {
114      const element = this.parentElement;
115      element.classList.add('is-open');
116      document.body.classList.add('scroll-fixed');
117      const menuLeftMove = document.querySelector('.mbnav__inner > .menu-wrap');
118      const backMove = parseInt(window.getComputedStyle(menuLeftMove).getPropertyValue('--leftSlide'), 10) || 0;
119      menuLeftMove.style.setProperty('--leftSlide', `${backMove + 100}%`);
120    });
121  });
122
123  // Handle back click
124  const backClicks = document.querySelectorAll('.mbnav__inner .back-click');
125  backClicks.forEach(backClick => {
126    backClick.addEventListener('click', function () {
127      const menuItem = this.closest('.menu-item');
128      if (menuItem) {
129        menuItem.classList.remove('is-open');
130      }
131      const menuLeftMove = document.querySelector('.mbnav__inner > .menu-wrap');
132      const backMove = parseInt(window.getComputedStyle(menuLeftMove).getPropertyValue('--leftSlide'), 10) || 0;
133      menuLeftMove.style.setProperty('--leftSlide', `${backMove - 100}%`);
134    });
135  });
136
137  // Set padding from header height
138  const header = document.querySelector('header.main-header');
139  if (header) {
140    const headerHeight = header.offsetHeight;
141    const menuInners = document.querySelectorAll('.mbnav .menu-wrap .menu-inner');
142    menuInners.forEach(inner => {
143      inner.style.paddingTop = `${headerHeight}px`;
144    });
145  }
146};
147/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DeviceMenu);
148
149/***/ }),
150
151/***/ "./sources/js/script.js":
152/*!******************************!*\
153  !*** ./sources/js/script.js ***!
154  \******************************/
155/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
156
157__webpack_require__.r(__webpack_exports__);
158/* harmony import */ var aos__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aos */ "./node_modules/aos/dist/aos.js");
159/* harmony import */ var aos_dist_aos_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! aos/dist/aos.css */ "./node_modules/aos/dist/aos.css");
160/* harmony import */ var _js_common_deviceMenu_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @js/common/deviceMenu.js */ "./sources/js/common/deviceMenu.js");
161// Device menu is global, so keep it eager
162
163
164
165(0,_js_common_deviceMenu_js__WEBPACK_IMPORTED_MODULE_2__["default"])();
166
167/** Scroll Reveal Animations */
168window.addEventListener('load', () => {
169  aos__WEBPACK_IMPORTED_MODULE_0__.init({
170    once: true,
171    offset: -500,
172    duration: 1000,
173    easing: 'ease-out-cubic',
174    disableMutationObserver: true,
175    mirror: false
176  });
177  aos__WEBPACK_IMPORTED_MODULE_0__.refreshHard();
178});
179
180/* global requestAnimationFrame */
181window.reInitAOS = function (scope = document) {
182  if (!window.AOS) {
183    return;
184  }
185
186  // Reset AOS state on newly injected elements
187  scope.querySelectorAll('[data-aos]').forEach(el => {
188    el.classList.remove('aos-init', 'aos-animate');
189  });
190
191  // Wait for DOM + layout + paint
192  requestAnimationFrame(() => {
193    requestAnimationFrame(() => {
194      aos__WEBPACK_IMPORTED_MODULE_0__.refreshHard();
195    });
196  });
197};
198window.AOS = aos__WEBPACK_IMPORTED_MODULE_0__;
199
200/** Homepage - Homepage Slider */
201if (document.querySelector('.home-slider')) {
202  Promise.all(/*! import() */[__webpack_require__.e("library/common"), __webpack_require__.e("library/swiper"), __webpack_require__.e("sources_js_common_swiperInit_js")]).then(__webpack_require__.bind(__webpack_require__, /*! @js/common/swiperInit.js */ "./sources/js/common/swiperInit.js")).then(({
203    initHomeSlider
204  }) => {
205    initHomeSlider();
206  });
207}
208
209/** Homepage - Conditions & Services Slider */
210if (document.querySelector('.cs-slider')) {
211  Promise.all(/*! import() */[__webpack_require__.e("library/common"), __webpack_require__.e("library/swiper"), __webpack_require__.e("sources_js_common_swiperInit_js")]).then(__webpack_require__.bind(__webpack_require__, /*! @js/common/swiperInit.js */ "./sources/js/common/swiperInit.js")).then(({
212    initServicesTabsSwiper
213  }) => {
214    initServicesTabsSwiper();
215  });
216}
217
218/** Homepage - Team Slider */
219if (document.querySelector('.team-slider')) {
220  Promise.all(/*! import() */[__webpack_require__.e("library/common"), __webpack_require__.e("library/swiper"), __webpack_require__.e("sources_js_common_swiperInit_js")]).then(__webpack_require__.bind(__webpack_require__, /*! @js/common/swiperInit.js */ "./sources/js/common/swiperInit.js")).then(({
221    initteamSlider
222  }) => {
223    initteamSlider();
224  });
225}
226
227/** Homepage - Insurances Slider */
228if (document.querySelector('.insurances-slider')) {
229  Promise.all(/*! import() */[__webpack_require__.e("library/common"), __webpack_require__.e("library/swiper"), __webpack_require__.e("sources_js_common_swiperInit_js")]).then(__webpack_require__.bind(__webpack_require__, /*! @js/common/swiperInit.js */ "./sources/js/common/swiperInit.js")).then(({
230    initinsurancesSlider
231  }) => {
232    initinsurancesSlider();
233  });
234}
235
236/** Homepage - Community Slider */
237if (document.querySelector('.community-slider')) {
238  Promise.all(/*! import() */[__webpack_require__.e("library/common"), __webpack_require__.e("library/swiper"), __webpack_require__.e("sources_js_common_swiperInit_js")]).then(__webpack_require__.bind(__webpack_require__, /*! @js/common/swiperInit.js */ "./sources/js/common/swiperInit.js")).then(({
239    initcommunitySlider
240  }) => {
241    initcommunitySlider();
242  });
243}
244
245/** Homepage - Testimonial Slider */
246if (document.querySelector('.testimonial-slider')) {
247  Promise.all(/*! import() */[__webpack_require__.e("library/common"), __webpack_require__.e("library/swiper"), __webpack_require__.e("sources_js_common_swiperInit_js")]).then(__webpack_require__.bind(__webpack_require__, /*! @js/common/swiperInit.js */ "./sources/js/common/swiperInit.js")).then(({
248    initTestimonialSlider
249  }) => {
250    initTestimonialSlider();
251  });
252}
253
254/** Inner Page - Testimonial Sliders */
255if (document.querySelector('.testimonial-sliders')) {
256  Promise.all(/*! import() */[__webpack_require__.e("library/common"), __webpack_require__.e("library/swiper"), __webpack_require__.e("sources_js_common_swiperInit_js")]).then(__webpack_require__.bind(__webpack_require__, /*! @js/common/swiperInit.js */ "./sources/js/common/swiperInit.js")).then(({
257    initTestimonialSliders
258  }) => {
259    initTestimonialSliders();
260  });
261}
262
263/** Virtual Clinic Slider */
264if (document.querySelector('.clinics-swiper')) {
265  Promise.all(/*! import() */[__webpack_require__.e("library/common"), __webpack_require__.e("library/swiper"), __webpack_require__.e("sources_js_common_swiperInit_js")]).then(__webpack_require__.bind(__webpack_require__, /*! @js/common/swiperInit.js */ "./sources/js/common/swiperInit.js")).then(({
266    initVirtualClinicSlider
267  }) => {
268    initVirtualClinicSlider();
269  });
270}
271
272// Load Fancybox only if gallery/trigger elements exist
273if (document.querySelector('[data-fancybox]')) {
274  Promise.all(/*! import() */[__webpack_require__.e("library/common"), __webpack_require__.e("library/fancyapps"), __webpack_require__.e("sources_js_common_fancybox_js")]).then(__webpack_require__.bind(__webpack_require__, /*! @js/common/fancybox */ "./sources/js/common/fancybox.js")).then(({
275    initFancybox
276  }) => {
277    initFancybox();
278  });
279}
280
281/** Sticky Header */
282window.addEventListener('scroll', () => {
283  document.body.classList.toggle('scrolled', window.scrollY > 10);
284});
285/** End Sticky Header */
286
287/** Address Bar Close */
288document.addEventListener('DOMContentLoaded', () => {
289  const addressBar = document.getElementById('address-bar');
290  if (addressBar) {
291    const closeBtn = addressBar.querySelector('.address-close');
292    if (closeBtn) {
293      closeBtn.addEventListener('click', () => {
294        addressBar.classList.add('is-closed');
295      });
296    }
297  }
298});
299document.addEventListener('DOMContentLoaded', function () {
300  if (window.innerWidth < 768) {
301    var _document$querySelect;
302    (_document$querySelect = document.querySelector('header .header-buttons')) === null || _document$querySelect === void 0 || _document$querySelect.addEventListener('click', function (e) {
303      var _document$querySelect2, _trigger$nextElementS;
304      const trigger = e.target.closest('.call-tracking');
305      if (!trigger) {
306        return;
307      }
308      e.preventDefault();
309      (_document$querySelect2 = document.querySelector('.wrapper')) === null || _document$querySelect2 === void 0 || _document$querySelect2.classList.toggle('active');
310      (_trigger$nextElementS = trigger.nextElementSibling) === null || _trigger$nextElementS === void 0 || _trigger$nextElementS.classList.add('active');
311    });
312    document.querySelectorAll('.advance-call-tracking .close-btn').forEach(function (button) {
313      button.addEventListener('click', function () {
314        var _document$querySelect3;
315        (_document$querySelect3 = document.querySelector('.wrapper')) === null || _document$querySelect3 === void 0 || _document$querySelect3.classList.remove('active');
316        document.querySelectorAll('.advance-call-tracking').forEach(function (popup) {
317          popup.classList.remove('active');
318        });
319      });
320    });
321  }
322});
323
324/** Main Navigation */
325document.querySelectorAll('.menu-item-has-children').forEach(item => {
326  const link = item.querySelector('a');
327  link.setAttribute('aria-haspopup', 'true');
328  link.setAttribute('aria-expanded', 'false');
329
330  // keyboard support
331  link.addEventListener('focus', () => {
332    item.classList.add('open');
333    link.setAttribute('aria-expanded', 'true');
334  });
335  link.addEventListener('blur', () => {
336    item.classList.remove('open');
337    link.setAttribute('aria-expanded', 'false');
338  });
339});
340
341/** Virtual Video Section */
342window.baystateVirtualTourLoaded = window.baystateVirtualTourLoaded || false;
343if (!window.baystateVirtualTourLoaded) {
344  window.baystateVirtualTourLoaded = true;
345  document.addEventListener('click', function (event) {
346    const trigger = event.target.closest('.virtual-tour-section__trigger');
347    if (!trigger || trigger.classList.contains('is-loaded')) {
348      return;
349    }
350    trigger.classList.add('is-loaded');
351  });
352  document.addEventListener('keydown', function (event) {
353    if (event.key === 'Enter' || event.key === ' ') {
354      const trigger = event.target.closest('.virtual-tour-section__trigger');
355      if (trigger && !trigger.classList.contains('is-loaded')) {
356        event.preventDefault();
357        trigger.classList.add('is-loaded');
358      }
359    }
360  });
361}
362/** Main Search Model  */
363/** setTimeout */
364document.addEventListener('DOMContentLoaded', function () {
365  const openBtns = document.querySelectorAll('.open-search');
366  const panel = document.querySelector('.search-modal-panel');
367  const closeBtn = panel ? panel.querySelector('.search-modal-close') : null;
368  const input = panel ? panel.querySelector('.search-field') : null;
369  const suggestions = document.querySelector('.search-suggestions');
370  if (!openBtns.length || !panel || !closeBtn) {
371    return;
372  }
373  const openPanel = () => {
374    panel.classList.add('is-open');
375    panel.setAttribute('aria-hidden', 'false');
376    openBtns.forEach(btn => btn.setAttribute('aria-expanded', 'true'));
377    window.setTimeout(() => {
378      if (input) {
379        input.focus();
380      }
381    }, 550);
382  };
383  const closePanel = () => {
384    panel.classList.remove('is-open');
385    panel.setAttribute('aria-hidden', 'true');
386    openBtns.forEach(btn => btn.setAttribute('aria-expanded', 'false'));
387    openBtns.focus();
388    if (input) {
389      input.value = '';
390      input.setAttribute('aria-expanded', 'false');
391    }
392    if (suggestions) {
393      suggestions.innerHTML = '';
394      suggestions.classList.remove('has-results');
395    }
396  };
397  openBtns.forEach(btn => {
398    btn.addEventListener('click', openPanel);
399  });
400  closeBtn.addEventListener('click', closePanel);
401  document.addEventListener('keydown', e => {
402    if (e.key === 'Escape' && panel.classList.contains('is-open')) {
403      closePanel();
404    }
405  });
406});
407
408/** Location Zip Code Search - Start */
409document.addEventListener('DOMContentLoaded', () => {
410  const forms = document.querySelectorAll('form#zip-search-form');
411  if (!forms.length) {
412    return;
413  }
414  forms.forEach(form => {
415    const input = form.querySelector('input[name="zip"]');
416    const errorEl = document.createElement('span');
417    errorEl.className = 'zip-error-message';
418    errorEl.setAttribute('id', 'zip-error');
419    errorEl.setAttribute('aria-live', 'polite');
420    errorEl.style.display = 'none';
421    form.appendChild(errorEl);
422
423    // 🔹 ALLOW letters, numbers, and spaces
424    input.addEventListener('input', () => {
425      input.value = input.value.replace(/[^a-zA-Z0-9\s,]/g, '');
426      if (errorEl.style.display !== 'none') {
427        errorEl.textContent = '';
428        errorEl.style.display = 'none';
429        input.removeAttribute('aria-invalid');
430      }
431    });
432
433    // 🔹 VALIDATE ON SUBMIT
434    form.addEventListener('submit', e => {
435      e.preventDefault();
436      const keyword = input.value.trim();
437      if (!keyword) {
438        errorEl.textContent = 'Please enter a ZIP code or city name.';
439        errorEl.style.display = 'block';
440        input.setAttribute('aria-invalid', 'true');
441        input.focus();
442        return;
443      }
444
445      // 🔹 If input is numeric → validate ZIP
446      if (/^\d+$/.test(keyword) && !/^\d{5}$/.test(keyword)) {
447        errorEl.textContent = 'Please enter a valid 5-digit ZIP code.';
448        errorEl.style.display = 'block';
449        input.setAttribute('aria-invalid', 'true');
450        input.focus();
451        return;
452      }
453      errorEl.textContent = '';
454      errorEl.style.display = 'none';
455      input.removeAttribute('aria-invalid');
456      const host = window.location.hostname.replace(/^www\./, '');
457      const searchURL = `https://locations.${host}/search?q=${encodeURIComponent(keyword)}&qp=${encodeURIComponent(keyword)}&l=en`;
458      //`https://locations.mvpt-physicaltherapy.com/search?q=${encodeURIComponent(keyword)}&qp=${encodeURIComponent(keyword)}&l=en`;
459
460      window.open(searchURL, '_self', 'noopener,noreferrer');
461    });
462  });
463});
464document.addEventListener('DOMContentLoaded', () => {
465  const inputs = document.querySelectorAll('.search-location-input');
466  inputs.forEach(input => {
467    const defaultText = 'Find A Location Near You';
468    const activeText = 'Search City & State or Zip Code*';
469    input.placeholder = defaultText;
470    input.addEventListener('focus', () => {
471      input.placeholder = activeText;
472    });
473    input.addEventListener('blur', () => {
474      if (input.value.trim() === '') {
475        input.placeholder = defaultText;
476      }
477    });
478  });
479});
480
481/** Location Zip Code Search - End */
482
483/** Result Counter Starts*/
484/* eslint-disable no-undef */
485(() => {
486  const animateNumber = (el, target) => {
487    const duration = 2000;
488    const startTime = performance.now();
489    const suffix = el.getAttribute('data-suffix') || '';
490    const update = time => {
491      const progress = Math.min((time - startTime) / duration, 1);
492      const value = Math.floor(progress * target);
493      let output = '';
494      if (suffix) {
495        // 🔹 Custom suffix (ex: +%, +)
496        output = `${value}${suffix}`;
497      } else if (target >= 10000) {
498        // 🔹 14000 → 14K+
499        output = `${Math.floor(value / 1000)}K+`;
500      } else if (target <= 100) {
501        // 🔹 Default percentage
502        output = `${value}%`;
503      } else {
504        // 🔹 Default count
505        output = `${value}+`;
506      }
507      el.querySelector('.count').textContent = output;
508      if (progress < 1) {
509        requestAnimationFrame(update);
510      }
511    };
512    requestAnimationFrame(update);
513  };
514  const initCounters = () => {
515    const counters = document.querySelectorAll('.count-number');
516    if (!('IntersectionObserver' in window) || !counters.length) {
517      return;
518    }
519    const observer = new IntersectionObserver((entries, obs) => {
520      entries.forEach(entry => {
521        if (entry.isIntersecting) {
522          const el = entry.target;
523          const number = parseInt(el.getAttribute('data-number'), 10) || 0;
524          animateNumber(el, number);
525          obs.unobserve(el);
526        }
527      });
528    }, {
529      threshold: 0.4
530    }); // Trigger when ~40% visible
531
532    counters.forEach(el => observer.observe(el));
533  };
534  if (document.readyState === 'loading') {
535    document.addEventListener('DOMContentLoaded', initCounters);
536  } else {
537    initCounters();
538  }
539})();
540/* eslint-enable no-undef */
541/** Result Counter Ends */
542
543/** Category Filter - JS */
544document.addEventListener('DOMContentLoaded', function () {
545  const dropdown = document.getElementById('postscategory');
546  if (!dropdown) {
547    return;
548  }
549  dropdown.addEventListener('change', function () {
550    if (this.value) {
551      window.location.href = this.value;
552    }
553  });
554});
555
556/** FAQ Accordion - Start */
557document.addEventListener('DOMContentLoaded', () => {
558  const items = document.querySelectorAll('.accordion-item');
559  items.forEach(item => {
560    const btn = item.querySelector('.accordion-toggle');
561    const panel = item.querySelector('.accordion-content');
562    btn.addEventListener('click', () => {
563      const isOpen = item.classList.contains('active');
564      items.forEach(i => {
565        i.classList.remove('active');
566        i.querySelector('.accordion-toggle').setAttribute('aria-expanded', 'false');
567        i.querySelector('.accordion-content').style.maxHeight = '0px';
568      });
569      if (!isOpen) {
570        item.classList.add('active');
571        btn.setAttribute('aria-expanded', 'true');
572        panel.style.maxHeight = panel.scrollHeight + 'px';
573      }
574    });
575  });
576  window.addEventListener('resize', () => {
577    items.forEach(item => {
578      if (item.classList.contains('active')) {
579        const panel = item.querySelector('.accordion-content');
580        panel.style.maxHeight = panel.scrollHeight + 'px';
581      }
582    });
583  });
584});
585/** FAQ Accordion - End */
586
587/** Main menu - navigation dropdown caret */
588document.addEventListener('DOMContentLoaded', () => {
589  const menu = document.getElementById('menu-main-menu-navigation');
590  if (!menu) {
591    return;
592  }
593  const nestedParents = menu.querySelectorAll('.sub-menu > li.menu-item-has-children');
594  nestedParents.forEach(li => {
595    const link = li.querySelector(':scope > a');
596    const submenu = li.querySelector(':scope > .sub-menu');
597    if (!link || !submenu) {
598      return;
599    }
600    const caret = document.createElement('span');
601    caret.className = 'mbnav__caret';
602    link.appendChild(caret);
603  });
604});
605
606/* eslint-disable no-console */
607/* global navigator, console, setTimeout */
608document.addEventListener('click', function (e) {
609  const btn = e.target.closest('.copy-link');
610  if (!btn) {
611    return;
612  }
613  e.preventDefault();
614  const url = btn.getAttribute('href'); // or use data-url if href is not reliable
615  const title = document.title; // or btn.getAttribute('data-title')
616
617  console.log('Share button clicked', {
618    url,
619    title
620  });
621  if (navigator.share) {
622    console.log('navigator.share is available');
623    navigator.share({
624      title,
625      url
626    }).then(() => console.log('Share successful')).catch(err => console.error('Share failed:', err.name, err.message));
627  } else {
628    console.log('navigator.share NOT available → falling back to copy');
629    const input = document.createElement('input');
630    input.value = url;
631    document.body.appendChild(input);
632    input.select();
633    document.execCommand('copy');
634    document.body.removeChild(input);
635    showCopied(btn);
636  }
637  function showCopied(el) {
638    el.classList.add('copied');
639    setTimeout(() => el.classList.remove('copied'), 1500);
640  }
641});
642
643/** Gravity Date of Birth - Field */
644/** global URL */
645document.addEventListener('DOMContentLoaded', function () {
646  const url = new window.URL(window.location.href);
647  if (url.searchParams.has('source_page')) {
648    url.searchParams.delete('source_page');
649    window.history.replaceState({}, document.title, url.pathname + url.search + url.hash);
650  }
651});
652(function () {
653  function formatDOB(input) {
654    const v = input.value.replace(/\D/g, '').slice(0, 8);
655    let out = v;
656    if (v.length > 4) {
657      out = v.slice(0, 2) + '/' + v.slice(2, 4) + '/' + v.slice(4);
658    } else if (v.length > 2) {
659      out = v.slice(0, 2) + '/' + v.slice(2);
660    }
661    input.value = out;
662  }
663  function bindDOBMask(context) {
664    context.querySelectorAll('.dob-mask input.gform-datepicker').forEach(input => {
665      if (input.dataset.dobBound === 'true') {
666        return;
667      }
668      input.dataset.dobBound = 'true';
669      input.setAttribute('inputmode', 'numeric');
670      input.setAttribute('maxlength', '10');
671      input.setAttribute('placeholder', 'DATE OF BIRTH: MM/DD/YYYY *');
672      let isDeleting = false;
673      input.addEventListener('keydown', e => {
674        isDeleting = e.key === 'Backspace' || e.key === 'Delete';
675        if (e.key === 'Backspace') {
676          const pos = input.selectionStart;
677          if (input.selectionStart === input.selectionEnd && input.value[pos - 1] === '/') {
678            e.preventDefault();
679            input.value = input.value.slice(0, pos - 2) + input.value.slice(pos);
680            input.selectionStart = input.selectionEnd = pos - 2;
681          }
682        }
683      });
684      input.addEventListener('input', () => {
685        if (isDeleting) {
686          isDeleting = false;
687          return;
688        }
689        const rawPos = input.selectionStart;
690        const digitsBefore = input.value.slice(0, rawPos).replace(/\D/g, '').length;
691        formatDOB(input);
692        let count = 0,
693          newPos = 0;
694        for (let i = 0; i < input.value.length; i++) {
695          if (/\d/.test(input.value[i])) {
696            count++;
697          }
698          if (count === digitsBefore) {
699            newPos = i + 1;
700            break;
701          }
702        }
703        if (input.value[newPos] === '/') {
704          newPos++;
705        }
706        input.selectionStart = input.selectionEnd = newPos;
707      });
708      input.addEventListener('paste', () => {
709        setTimeout(() => formatDOB(input), 0);
710      });
711      input.addEventListener('blur', () => formatDOB(input));
712      if (input.value) {
713        formatDOB(input);
714      }
715    });
716  }
717
718  // Initial load
719  document.addEventListener('DOMContentLoaded', function () {
720    bindDOBMask(document);
721  });
722
723  // ✅ FIX: Proper GF AJAX hook with form container
724  document.addEventListener('gform/post_render', function (event) {
725    const form = document.querySelector(`#gform_${event.detail.formId}`);
726    if (form) {
727      bindDOBMask(form);
728    }
729  });
730})();
731// (function() {
732
733//     function formatDOB( input ) {
734//         const v = input.value.replace( /\D/g, '' ).slice( 0, 8 );
735//         let out = v;
736//         if      ( v.length > 4 ) {out = v.slice(0,2) + '/' + v.slice(2,4) + '/' + v.slice(4);}
737//         else if ( v.length > 2 ) {out = v.slice(0,2) + '/' + v.slice(2);}
738//         input.value = out;
739//     }
740
741//     function bindDOBMask( context = document ) {
742//         context
743//             .querySelectorAll( '.dob-mask input.gform-datepicker' )
744//             .forEach( input => {
745
746//                 if ( input.dataset.dobBound ) {return;}
747//                 input.dataset.dobBound = 'true';
748
749//                 input.setAttribute( 'inputmode', 'numeric' );
750//                 input.setAttribute( 'placeholder', 'DATE OF BIRTH: MM/DD/YYYY *' );
751//                 input.setAttribute( 'maxlength', '10' );
752
753//                 // Detach jQuery UI datepicker so it doesn't fight the mask
754//                 if ( typeof $ !== 'undefined' && $( input ).datepicker ) {
755//                     $( input ).datepicker( 'destroy' );
756//                 }
757
758//                 let isDeleting = false;
759
760//                 // Step 1 — catch Backspace BEFORE the value changes
761//                 input.addEventListener( 'keydown', e => {
762//                     isDeleting = ( e.key === 'Backspace' || e.key === 'Delete' );
763
764//                     // If cursor sits right after a slash, eat slash + digit together
765//                     if ( e.key === 'Backspace' ) {
766//                         const pos = input.selectionStart;
767//                         if ( input.selectionStart === input.selectionEnd &&
768//                  input.value[ pos - 1 ] === '/' ) {
769//                             e.preventDefault();
770//                             input.value = input.value.slice( 0, pos - 2 )
771//                           + input.value.slice( pos );
772//                             input.selectionStart = input.selectionEnd = pos - 2;
773//                         }
774//                     }
775//                 });
776
777//                 // Step 2 — reformat on typing, preserve cursor position
778//                 input.addEventListener( 'input', () => {
779//                     // During deletions don't reformat — let the user freely erase
780//                     if ( isDeleting ) { isDeleting = false; return; }
781
782//                     // Count digits before cursor so we can restore position after reformat
783//                     const rawPos    = input.selectionStart;
784//                     const digitsBefore = input.value
785//                         .slice( 0, rawPos )
786//                         .replace( /\D/g, '' ).length;
787
788//                     formatDOB( input );
789
790//                     // Walk the new value to find where those same digits end up
791//                     let count = 0, newPos = 0;
792//                     for ( let i = 0; i < input.value.length; i++ ) {
793//                         if ( /\d/.test( input.value[ i ] ) ) {count++;}
794//                         if ( count === digitsBefore ) { newPos = i + 1; break; }
795//                     }
796//                     // If cursor is now sitting on a slash, skip over it
797//                     if ( input.value[ newPos ] === '/' ) {newPos++;}
798//                     input.selectionStart = input.selectionEnd = newPos;
799//                 });
800
801//                 input.addEventListener( 'paste', () => {
802//                     setTimeout( () => formatDOB( input ), 0 );
803//                 });
804
805//                 input.addEventListener( 'blur', () => formatDOB( input ) );
806
807//                 if ( input.value ) {formatDOB( input );}
808//             });
809//     }
810
811//     document.addEventListener( 'DOMContentLoaded', () => bindDOBMask() );
812
813//     // e.target is `document` here — pass no argument, default handles it
814//     document.addEventListener( 'gform_post_render', () => bindDOBMask() );
815
816// })();
817/** Gravity Date of Birth - Field */
818/** Locations Domain target change */
819document.addEventListener('DOMContentLoaded', function () {
820  document.querySelectorAll('a[href^="https://locations."]').forEach(function (link) {
821    link.setAttribute('target', '_self');
822  });
823});
824
825/***/ }),
826
827/***/ "./sources/scss/style.scss":
828/*!*********************************!*\
829  !*** ./sources/scss/style.scss ***!
830  \*********************************/
831/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
832
833__webpack_require__.r(__webpack_exports__);
834// extracted by mini-css-extract-plugin
835
836
837/***/ })
837
838
839},
840/******/ __webpack_require__ => { // webpackRuntimeModules
841/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
842/******/ __webpack_require__.O(0, ["library/common","library/aos"], () => (__webpack_exec__("./sources/js/script.js"), __webpack_exec__("./sources/scss/style.scss")));
843/******/ var __webpack_exports__ = __webpack_require__.O();
844/******/ }
845]);
846//# sourceMappingURL=main.js.map

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.