{"version":3,"sources":["webpack://anitas/./themes/app/src/index.js","webpack://anitas/./themes/app/src/scripts/common/ajax.js","webpack://anitas/./themes/app/src/scripts/common/payments.js","webpack://anitas/./themes/app/src/scripts/common/requestTimeout.js","webpack://anitas/./themes/app/src/scripts/common/scrollTo.js","webpack://anitas/./themes/app/src/scripts/common/slide.js","webpack://anitas/./themes/app/src/scripts/common/util.js","webpack://anitas/./themes/app/src/scripts/common/validation.js","webpack://anitas/./themes/app/src/scripts/components/animation.js","webpack://anitas/./themes/app/src/scripts/components/countUp.js","webpack://anitas/./themes/app/src/scripts/components/datepicker.js","webpack://anitas/./themes/app/src/scripts/components/dropdown.js","webpack://anitas/./themes/app/src/scripts/components/form.js","webpack://anitas/./themes/app/src/scripts/components/headerPetImages.js","webpack://anitas/./themes/app/src/scripts/components/mediaThumbnailSlider.js","webpack://anitas/./themes/app/src/scripts/components/modal.js","webpack://anitas/./themes/app/src/scripts/components/multistepform.js","webpack://anitas/./themes/app/src/scripts/components/pageHeader.js","webpack://anitas/./themes/app/src/scripts/components/photoGallery.js","webpack://anitas/./themes/app/src/scripts/components/quickLinkImages.js","webpack://anitas/./themes/app/src/scripts/components/scrollTo.js","webpack://anitas/./themes/app/src/scripts/components/siteAnnouncement.js","webpack://anitas/./themes/app/src/scripts/components/siteHeader.js","webpack://anitas/./themes/app/src/scripts/components/siteNavigation.js","webpack://anitas/./themes/app/src/scripts/components/siteWidget.js","webpack://anitas/./themes/app/src/scripts/components/slickSlider.js","webpack://anitas/./themes/app/src/scripts/components/slideToggle.js","webpack://anitas/./themes/app/src/scripts/components/tooltip.js","webpack://anitas/./themes/app/src/scripts/elements/countdown.js","webpack://anitas/./themes/app/src/scripts/elements/donationForm.js","webpack://anitas/./themes/app/src/scripts/elements/googleMaps.js","webpack://anitas/./themes/app/src/scripts/elements/meetOurPets.js","webpack://anitas/./themes/app/src/scripts/elements/membershipForm.js","webpack://anitas/./themes/app/src/scripts/elements/milestones.js","webpack://anitas/./themes/app/src/scripts/elements/sponsorshipForm.js","webpack://anitas/./themes/app/src/scripts/react/adopt/PetCard.js","webpack://anitas/./themes/app/src/scripts/react/adopt/CheckboxFilter.js","webpack://anitas/./themes/app/src/scripts/react/adopt/SelectFilter.js","webpack://anitas/./themes/app/src/scripts/react/adopt/FilterHeader.js","webpack://anitas/./themes/app/src/scripts/react/adopt/ToggleSidebarButton.js","webpack://anitas/./themes/app/src/scripts/react/adopt/index.js","webpack://anitas/./themes/app/src/scripts/sections/adopt.js","webpack://anitas/./themes/app/src/scripts/sections/adoptionApplication.js","webpack://anitas/./themes/app/src/scripts/sections/becauseYouGive.js","webpack://anitas/./themes/app/src/scripts/sections/priceList.js","webpack://anitas/./themes/app/src/scripts/sections/wishList.js","webpack://anitas/.*(common|react)).*\\.js$/"],"names":["document","addEventListener","r","require","keys","reduce","modules","script","module","default","push","map","can","run","documentElement","classList","remove","wretch","defaults","headers","handleInitialLoad","state","form","paymentMethods","getAvailablePaymentMethods","amountFields","querySelectorAll","forEach","method","contains","value","dataset","key","currentPaymentMethod","setupPaymentOptionVisibility","length","currentTotal","parseInt","setCurrentPaymentMethod","field","getElementById","add","fire","setTotal","amount","fields","formatBefore","formatAfter","Number","parseFloat","replace","setTotalFields","textContent","setupPayment","setupStripeCard","doSubmit","setupPaypal","setupApplePay","setupGooglePay","on","skipValidation","card","stripe","elements","create","style","base","fontSize","fontFamily","color","fontSmoothing","invalid","mount","stripeCard","error","message","label","submitButton","querySelector","stripeElements","paymentRequest","country","currency","total","requestPayerName","requestPayerEmail","paymentRequestButton","height","canMakePayment","then","result","applePay","display","e","disabled","hiddenInput","createElement","setAttribute","token","id","appendChild","submit","setupProcessingFees","processingFees","totalAmountDisplays","processingAmountDisplays","chargeAmount","setChargeAmount","name","formatter","Intl","NumberFormat","format","slice","unsetChargeAmount","updateProcessingFeesOptions","checked","totalAmountDisplay","processingAmountDisplay","handleProcessingFeesCheckbox","checkbox","newAmount","setFees","detail","handleSubmit","once","preventDefault","handleValidation","createToken","stripeTokenHandler","getAttribute","cleanupBeforeReload","debouncedLoadPaypalScript","paypalButtons","close","renderPaypalButtons","paypal","planId","paypalPlanId","layout","tagline","options","isRepeating","createSubscription","data","actions","subscription","plan_id","onApprove","JSON","stringify","forceSubmit","click","createOrder","order","purchase_units","capture","details","catch","err","Buttons","render","console","warn","debounce","clientId","paypalClientId","components","window","paypalLoadScript","vault","intent","fn","delay","start","Date","getTime","handle","Object","loop","call","requestAnimationFrame","$target","additionalOffset","offset","sitePrimaryHeader","panelLinks","offsetHeight","getPageOffset","Promise","resolve","jump","duration","callback","slideUp","element","transitionProperty","transitionDuration","overflow","paddingTop","paddingBottom","marginTop","marginBottom","requestTimeout","removeProperty","slideDown","getComputedStyle","slideToggle","target","isTouchDevice","validator","_","group","findFieldWrapper","$el","closest","handleBlur","$fieldWrapper","$existingErrorMessage","buildRules","$form","rules","$field","fieldName","presence","type","email","readonly","pattern","$radio","$checkbox","checkboxGroup","validate","undefined","messages","entries","insertAdjacentHTML","shouldScroll","formScroll","$firstError","scrollTo","setTimeout","focus","init","setupScrollReveals","ScrollReveal","reveal","distance","origin","interval","opacity","afterReveal","el","countUpModule","counters","useGrouping","decimalPlaces","end","opts","counter","CountUp","_el","bindEvents","update","throttle","index","verge","$datepickers","$dateRanges","$input","flatpickr","altInput","altFormat","disableMobile","onReady","this","input","datesData","dates","parse","mode","onClose","selectedDates","instance","from","formatDate","to","location","href","action","onDayCreate","dObj","dStr","fp","dayElem","includes","dateObj","isIos","test","navigator","platform","maxTouchPoints","handleNavigationSelect","handleScrollSelect","handleSubmitSelect","setup","matchMedia","matches","select","selectedIndex","setupDropdown","easydropdown","refresh","tagName","placeholder","hasAttribute","behavior","openOnFocus","maxVisibleItems","liveUpdates","StyledDropdown","$toggleForm","handleLengthLimit","handleAjax","handleAllGroup","handleRadios","handleToggle","showToggles","setupSpecialFields","setupUserForms","setupMasks","$uf","$userform","$fieldWrap","$label","getElementsByTagName","innerHTML","$prevButtons","$nextButtons","$button","maxLength","$counter","$count","$labelHolder","cloneNode","replaceWith","isAll","allEl","x","$holder","$siblings","getSiblings","$sibling","siblings","parentNode","sibling","firstChild","nodeType","nextSibling","$formMessages","$submitButton","autoHideMessage","toggleSubmit","formData","FormData","ajax","url","body","post","json","res","success","reset","hideOnSubmit","URL","queryParameters","URLSearchParams","toString","showFormMessages","finally","toggle","autoHide","$targetEl","toggleIf","split","targetValues","shift","$toggleGroup","indexOf","toggleIfGt","targetValue","selectedValue","shouldShow","async","IMask","mask","Swiper","Autoplay","EffectFade","setupSlider","container","autoplay","slidesPerView","speed","effect","fadeEffect","crossFade","Pagination","Thumbs","mainContainer","thumbnailContainer","numSlides","mainOpts","thumbnailOpts","spaceBetween","watchSlidesVisibility","watchSlidesProgress","breakpoints","1024","pagination","clickable","thumbnailSwiper","thumbs","swiper","handleOpen","autoOpenModal","openModal","modal","cssClass","buildImageModal","closeMethods","buildVideoModal","buildContentModal","buildEmbedModal","autoModal","Cookies","expires","buildModal","setContent","open","prototype","hasOwnProperty","concat","tingle","beforeOpen","closeBtn","onOpen","destroy","_currentModal","_socialshareurl","hideYTActivated","YT","tag","src","firstScriptTag","insertBefore","onYouTubeIframeAPIReadyCallbacks","playerWrap","player","playerFrame","onPlayerStateChange","event","PlayerState","ENDED","PAUSED","PLAYING","Player","events","onStateChange","playerState","getPlayerState","seekTo","playVideo","onYouTubeIframeAPIReady","get","text","resp","handleAddManageGroupBlock","handleRemoveManageGroupBlock","handleUpdateManageGroupBlock","setupManageGroups","valid","$placeholder","files","$group","$block","blockIndex","addBlockToList","$nextBlock","pendingLabel","toggleAddAction","limit","$list","$listItem","createRange","createContextualFragment","$listItemLabel","setupPageHeaderMediaSlider","headerContainer","contentContainer","handleOffset","headerTop","getBoundingClientRect","top","setProperty","lightGallery","galleryEl","currentTarget","removeChild","gallery","startIndex","galleryIndex","galleryData","photoGallery","dynamic","dynamicEl","thumbnail","download","uid","lgData","handleUrl","handleScrollToMe","handleClick","targetSelector","scroll","hash","buttonTrigger","topBar","setHeight","header","stuck","prevScroll","scrollY","scrollTop","currScroll","scrollDir","prevDir","handleScroll","primaryOffset","getPropertyValue","bodyScrollLock","disableBodyScroll","enableBodyScroll","nav","navOpen","navMenu","navHeader","navHeaderTitle","menuStack","handleResize","closeMenu","openMenu","moveMenuPrev","moveMenuNext","handleMenuToggle","resetMenu","next","updateMenu","pop","currentMenuStack","menuDepth","transform","updateNavHeader","currentMenu","headerTitle","setCookie","widget","sponsors","Splide","perPage","perMove","arrows","gap","autoWidth","easing","autoScroll","1250","AutoScroll","keyCode","trigger","tooltips","tippy","theme","arrow","countdownElement","getElementsByClassName","allowedToRun","date","countdown","headlineAfter","after","startCountdown","headline","hour","minute","day","countDown","setInterval","now","innerText","Math","floor","second","clearInterval","presetAmounts","otherAmount","totalFields","isPreset","Stripe","stripePubKey","setupAmount","updatePayment","setIsRepeating","setIsPreset","setupPaymentTypeVisibility","setupPaymentSection","presetAmount","holder","paymentFields","paymentFieldsEmpty","formIsValid","radio","newValue","toFixed","setupMapEmbed","mapHolder","google","mapOptions","center","maps","LatLng","lat","lng","zoom","mapTypeId","MapTypeId","ROADMAP","disableDefaultUI","scrollwheel","styles","featureType","stylers","visibility","Map","addListenerOnce","marker","Marker","title","animation","Animation","DROP","position","addListener","mapLink","currentIndex","centeredSlides","slideToClickedSlide","loopedSlides","768","slidesOffsetAfter","slideChangeTransitionStart","realIndex","snapGrid","slidesGrid","slidePrev","slideNext","radios","processingFeeCheckBox","stripePlanId","updateSubscriptionPlan","subscriptionIdCheck","stripePriceFeeId","paypalPlanFeeId","stripePriceId","amountValue","amountField","PetCard","photo","petango_id","className","alt","loading","width","aria-hidden","viewBox","fill","d","propTypes","PropTypes","CheckboxFilter","handleFilter","setSearchingHousetrained","onChange","htmlFor","SelectFilter","ref","useRef","eddRef","useEffect","current","edd","data-placeholder","option","FilterHeader","isVisible","filters","handleReset","filterString","setFilterString","useState","stringParts","join","onClick","isLoading","ToggleSidebarButton","isSidebarOpen","setIsSidebarOpen","fillRule","initialFilters","search","species","breed","age","gender","size","housetrained","App","initialLoad","searchTerm","setSearchTerm","searchingHousetrained","setIsLoading","isFiltered","setIsFiltered","setFilters","resultsTotal","setResultsTotal","results_total","resultsHasMore","setResultsHasMore","results_has_more","resultsOffset","setResultsOffset","results_offset","pets","setPets","initial_pets","prevState","newFilters","endpoint","searchParams","append","values","some","onSubmit","term","aria-label","pet","padStart","root","ReactDOM","urlParams","isFinished","scrollStart","hoverintent","handlePetEnter","handlePetExit","touches","clientY","handleTouch","item","scrollDiff","abs","changedTouches","bio","image","otherItems","closeOtherPets","imageRect","relatedTarget","bottom","others","handlePriceList","priceList","handleWishList","pageHeaderLeadIn","pageHeaderImage","wishList","HeaderLeadIn","newImage","HeaderImage","replaceChild","queryParams","set","wishListUrl","history","replaceState","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","exports"],"mappings":"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","file":"app.js","sourcesContent":["import 'swiper/swiper-bundle.css'\nimport 'flatpickr/dist/flatpickr.css'\nimport './styles/index.css'\n\nimport 'what-input'\n\n/*\n * Script loader\n *\n * Imports and runs all scripts in the `./scripts` directory\n * Scripts must have a default export with `can` and `run` functions\n *\n * export default {\n * can: () => boolean,\n * run: function to run if `can` is true\n * }\n */\ndocument.addEventListener('DOMContentLoaded', () => {\n ;((r) => {\n r.keys()\n .reduce((modules, script) => {\n const module = r(script).default\n if (module) {\n modules.push(module)\n }\n return modules\n }, [])\n .map((module) => (module.can === true || module.can()) && module.run())\n })(require.context('scripts', true, /^(?!.*(common|react)).*\\.js$/))\n\n document.documentElement.classList.remove('_preload')\n})\n","import wretch from 'wretch'\n\nexport default wretch().defaults({\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\n})\n","import { on, fire } from 'delegated-events'\nimport { debounce } from 'lodash'\nimport { handleValidation } from './validation'\n// import hasEventListener from './hasEventListener'\n\nexport const handleInitialLoad = (state, form) => {\n const paymentMethods = getAvailablePaymentMethods(form)\n const amountFields = form ? form.querySelectorAll('select[name=\"Amount\"]') : null\n\n paymentMethods.forEach((method) => {\n if (method.classList.contains('checked')) {\n const value = method.dataset.key\n state.currentPaymentMethod = value\n setupPaymentOptionVisibility(state, paymentMethods)\n }\n })\n\n if (amountFields.length) {\n state.currentTotal = parseInt(amountFields[0].value)\n }\n}\n\nexport const getAvailablePaymentMethods = (form) => {\n return form ? form.querySelectorAll('.payment-method-radio-group') : null\n}\n\nexport const setCurrentPaymentMethod = (state, form) => {\n const paymentMethods = getAvailablePaymentMethods(form)\n\n if (!paymentMethods) {\n return\n }\n\n paymentMethods.forEach((method) => {\n method.addEventListener('change', () => {\n if (method.classList.contains('checked')) {\n const value = method.dataset.key\n state.currentPaymentMethod = value\n setupPaymentOptionVisibility(state, paymentMethods)\n }\n })\n })\n}\n\nexport const setupPaymentOptionVisibility = (state, paymentMethods) => {\n paymentMethods.forEach((method) => {\n const field = document.getElementById(`payment-${method.dataset.key}`)\n if (field.classList.contains(`payment-${state.currentPaymentMethod}`)) {\n field.classList.contains('hidden') ? field.classList.remove('hidden') : () => {}\n } else {\n field.classList.contains('hidden') ? () => {} : field.classList.add('hidden')\n }\n })\n\n fire(document.documentElement, 'payment:updated-method', { state: state })\n}\n\nexport const setTotal = (state, amount, fields, formatBefore = '$', formatAfter = '.00') => {\n state.currentTotal = Number.parseFloat(amount.replace('$', ''))\n setTotalFields(fields, amount, formatBefore, formatAfter)\n fire(document.documentElement, 'payment:updated-amount', { state: state })\n}\n\nexport const setTotalFields = (fields, amount, formatBefore = '$', formatAfter = '.00') => {\n fields.forEach((field) => {\n field.textContent = `${formatBefore}${amount}${formatAfter}`\n })\n}\n\nexport const setupPayment = (state, form) => {\n switch (state.currentPaymentMethod) {\n case 'credit-card':\n setupStripeCard(state)\n doSubmit(state, form)\n break\n case 'paypal':\n setupPaypal(state, form)\n break\n case 'apple-pay':\n setupApplePay(state, form, `Anita's SSHS Donation`)\n break\n case 'google-pay':\n setupGooglePay(state, form, `Anita's SSHS Donation`)\n break\n case 'bitcoin':\n break\n default:\n break\n }\n on('click', '[formnovalidate]', () => {\n form.skipValidation = true\n })\n}\n\nexport const setupStripeCard = (state) => {\n const style = {\n base: {\n fontSize: '16px',\n fontFamily: 'Helvetica Neue, sans-serif',\n color: '#2c2c2c',\n fontSmoothing: 'antialiased',\n '::placeholder': {\n color: '#b4b4b4',\n },\n },\n invalid: {\n color: '#b9112a',\n },\n }\n\n const card = state.stripe.elements().create('card', { style })\n\n card.mount('#card-element')\n state.stripeCard = card\n\n card.addEventListener('change', ({ error }) => {\n const displayError = document.getElementById('card-errors')\n if (error) {\n displayError.textContent = error.message\n } else {\n displayError.textContent = ''\n }\n })\n}\n\nexport const setupApplePay = (state, form, label = \"Anita's SSHS\") => {\n const submitButton = form ? form.querySelector('[name=action_submit]') : null\n state.stripeElements = state.stripe.elements()\n\n const paymentRequest = state.stripe.paymentRequest({\n country: 'US',\n currency: 'usd',\n total: {\n label: label,\n amount: state.currentTotal * 100,\n },\n requestPayerName: true,\n requestPayerEmail: true,\n })\n\n const paymentRequestButton = state.stripeElements.create('paymentRequestButton', {\n paymentRequest: paymentRequest,\n style: {\n paymentRequestButton: {\n height: '55px',\n },\n },\n })\n\n // Check the availability of the Payment Request API first\n paymentRequest.canMakePayment().then(function (result) {\n if (result && result.applePay) {\n document.getElementById('payment-apple-pay-notice').style.display = 'none'\n paymentRequestButton.mount('#payment-apple-pay')\n state.paymentRequest = paymentRequest\n } else {\n // document.getElementById('payment-apple-pay').style.display = 'none'\n }\n })\n\n paymentRequest.on('token', (e) => {\n submitButton.disabled = true\n\n const hiddenInput = document.createElement('input')\n hiddenInput.setAttribute('type', 'hidden')\n hiddenInput.setAttribute('name', 'stripeApplePayToken')\n hiddenInput.setAttribute('value', e.token.id)\n form.appendChild(hiddenInput)\n\n form.submit()\n })\n}\n\nexport const setupGooglePay = (state, form, label = \"Anita's SSHS\") => {\n const submitButton = form ? form.querySelector('[name=action_submit]') : null\n state.stripeElements = state.stripe.elements()\n\n const paymentRequest = state.stripe.paymentRequest({\n country: 'US',\n currency: 'usd',\n total: {\n label: label,\n amount: state.currentTotal * 100,\n },\n requestPayerName: true,\n requestPayerEmail: true,\n })\n\n const paymentRequestButton = state.stripeElements.create('paymentRequestButton', {\n paymentRequest: paymentRequest,\n style: {\n paymentRequestButton: {\n height: '55px',\n },\n },\n })\n\n // Check the availability of the Payment Request API first\n paymentRequest.canMakePayment().then(function (result) {\n if (result && !result.applePay) {\n document.getElementById('payment-google-pay-notice').style.display = 'none'\n paymentRequestButton.mount('#payment-google-pay')\n state.paymentRequest = paymentRequest\n } else {\n // document.getElementById('payment-google-pay').style.display = 'none'\n }\n })\n\n paymentRequest.on('token', (e) => {\n submitButton.disabled = true\n\n const hiddenInput = document.createElement('input')\n hiddenInput.setAttribute('type', 'hidden')\n hiddenInput.setAttribute('name', 'stripeGooglePayToken')\n hiddenInput.setAttribute('value', e.token.id)\n form.appendChild(hiddenInput)\n\n form.submit()\n })\n}\n\nexport const setupProcessingFees = (state) => {\n const processingFees = document.querySelector('.processing-fees')\n const totalAmountDisplays = document.querySelectorAll('.payment-total-field')\n const processingAmountDisplays = document.querySelectorAll('.payment-total-field-with-fees')\n const chargeAmount = document.querySelector('input[type=hidden][name=ChargeAmount]')\n\n if (!processingFees) {\n return\n }\n\n const setChargeAmount = (value) => {\n if (chargeAmount) {\n chargeAmount.name = 'ChargeAmount'\n\n if (value) {\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n })\n chargeAmount.value = formatter.format(value).slice(1)\n }\n }\n }\n\n const unsetChargeAmount = () => {\n if (chargeAmount) {\n chargeAmount.name = null\n }\n }\n\n const showProcessingFeesOption = () => {\n processingFees.classList.remove('hidden')\n setChargeAmount()\n }\n\n const hideProcessingFeesOption = () => {\n processingFees.querySelector('input[type=checkbox]').checked = false\n processingFees.classList.add('hidden')\n unsetChargeAmount()\n }\n\n const updateProcessingFeesOptions = () => {\n if (state.currentTotal) {\n processingFees.querySelector('input[type=checkbox]').checked = false\n\n if (totalAmountDisplays.length) {\n totalAmountDisplays.forEach((totalAmountDisplay) => {\n totalAmountDisplay.classList.remove('hidden')\n })\n }\n\n if (processingAmountDisplays.length) {\n processingAmountDisplays.forEach((processingAmountDisplay) => {\n processingAmountDisplay.classList.add('hidden')\n })\n }\n\n unsetChargeAmount()\n showProcessingFeesOption()\n } else {\n hideProcessingFeesOption()\n }\n }\n\n const setFees = () => {\n const feeAmount = parseFloat(state.currentTotal * 0.035)\n const newAmount = feeAmount + state.currentTotal\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n })\n\n setChargeAmount(newAmount)\n\n if (processingAmountDisplays.length) {\n processingAmountDisplays.forEach((processingAmountDisplay) => {\n processingAmountDisplay.textContent = formatter.format(newAmount)\n })\n }\n }\n\n const handleProcessingFeesCheckbox = () => {\n const checkbox = document.querySelector('input[name=IncludeProcessingFees]')\n\n if (!checkbox) {\n return\n }\n\n if (checkbox.checked) {\n setFees()\n\n if (processingAmountDisplays.length) {\n processingAmountDisplays.forEach((processingAmountDisplay) => {\n processingAmountDisplay.classList.remove('hidden')\n })\n }\n\n if (totalAmountDisplays.length) {\n totalAmountDisplays.forEach((totalAmountDisplay) => {\n totalAmountDisplay.classList.add('hidden')\n })\n }\n\n setChargeAmount()\n } else {\n if (totalAmountDisplays.length) {\n totalAmountDisplays.forEach((totalAmountDisplay) => {\n totalAmountDisplay.classList.remove('hidden')\n })\n }\n\n if (processingAmountDisplays.length) {\n processingAmountDisplays.forEach((processingAmountDisplay) => {\n processingAmountDisplay.classList.add('hidden')\n })\n }\n\n unsetChargeAmount()\n }\n }\n\n on('payment:updated-amount', 'html', (e) => {\n state = e.detail.state\n updateProcessingFeesOptions()\n handleProcessingFeesCheckbox()\n })\n\n on('payment:updated-method', 'html', (e) => {\n state = e.detail.state\n updateProcessingFeesOptions()\n })\n\n on('change', 'input[name=IncludeProcessingFees]', handleProcessingFeesCheckbox)\n\n if (totalAmountDisplays) {\n processingFees.classList.add('hidden')\n }\n\n unsetChargeAmount()\n}\n\nexport const doSubmit = (state, form) => {\n const submitButton = form ? form.querySelector('[name=action_submit]') : null\n\n const addEventListener = () => {\n form.addEventListener('submit', handleSubmit, { once: true })\n }\n\n const handleSubmit = (e) => {\n e.preventDefault()\n\n const isValid = handleValidation(form)\n\n if (!isValid) {\n addEventListener()\n\n return false\n }\n\n // Handle PayPal\n if (document.querySelector('[name=paypalPayload]')) {\n return true\n }\n\n // Handle Stripe\n submitButton.disabled = true\n submitButton.classList.add('btn-loading')\n\n state.stripe\n .createToken(state.stripeCard, {\n name: form.querySelector('[name=CardholderName]').value,\n })\n .then((result) => {\n if (result.error) {\n const errorElement = document.getElementById('card-errors')\n errorElement.textContent = result.error.message\n submitButton.disabled = false\n addEventListener()\n } else {\n stripeTokenHandler(result.token, form)\n }\n })\n return false\n }\n\n if (form.getAttribute('listener') !== 'true') {\n addEventListener()\n form.setAttribute('listener', 'true')\n }\n}\n\nexport const stripeTokenHandler = (token, form) => {\n //const submitButton = form ? form.querySelector('[name=action_submit]') : null\n\n //const formMessages = form.querySelector('.form-messages')\n const hiddenInput = document.createElement('input')\n hiddenInput.setAttribute('type', 'hidden')\n hiddenInput.setAttribute('name', 'stripeToken')\n hiddenInput.setAttribute('value', token.id)\n form.appendChild(hiddenInput)\n\n //submitButton.disabled = true\n\n form.submit()\n /*\n ajax\n .url(form.action)\n .body(new FormData(form))\n .post()\n .json((res) => {\n if (res.success) {\n form.querySelectorAll('.form-content').forEach((x) => x.classList.add('hidden'))\n form.reset()\n }\n\n if (res.message) {\n showFormMessages(formMessages, res.message, res.success, false)\n }\n })\n .catch(() => {\n showFormMessages(formMessages, 'Sorry, there was a problem with your submission')\n })\n .finally(() => {\n submitButton.disabled = false\n })\n */\n}\n\nexport const showFormMessages = (holder, message, success, autoHide) => {\n holder.style.display = 'block'\n holder.innerHTML = message\n\n if (success) {\n holder.classList.remove('form-message-error')\n } else {\n holder.classList.add('form-message-error')\n }\n\n if (autoHide) {\n setTimeout(() => {\n holder.style.display = 'none'\n }, 5000)\n }\n}\n\nexport const setupPaypal = (state, form) => {\n cleanupBeforeReload(state)\n debouncedLoadPaypalScript(state, form)\n}\n\nexport const cleanupBeforeReload = (state) => {\n if (state.paypalButtons) {\n state.paypalButtons.close()\n }\n}\n\nexport const loadPaypalScript = (state, form) => {\n const clientId = form ? form.dataset.paypalClientId : null\n const components = 'buttons'\n\n if (state.isRepeating) {\n window\n .paypalLoadScript({\n 'client-id': clientId,\n vault: true,\n intent: 'subscription',\n components,\n 'disable-funding': 'credit,card',\n })\n .then((paypal) => {\n renderPaypalButtons(state, form, paypal)\n })\n } else {\n window\n .paypalLoadScript({\n 'client-id': clientId,\n vault: false,\n components,\n 'disable-funding': 'credit,card',\n })\n .then((paypal) => {\n renderPaypalButtons(state, form, paypal)\n })\n }\n}\n\nexport const renderPaypalButtons = (state, form, paypal) => {\n const submitButton = form ? form.querySelector('[name=action_submit]') : null\n const planId = state?.paypalPlanId\n\n const style = {\n layout: 'horizontal',\n color: 'white',\n height: 55,\n tagline: false,\n }\n let options = {}\n if (state.isRepeating) {\n options = {\n style: style,\n createSubscription: function (data, actions) {\n return actions.subscription.create({\n plan_id: planId,\n })\n },\n // eslint-disable-next-line no-unused-vars\n onApprove: function (data, actions) {\n const hiddenInput = document.createElement('input')\n hiddenInput.setAttribute('type', 'hidden')\n hiddenInput.setAttribute('name', 'paypalPayload')\n hiddenInput.setAttribute('value', JSON.stringify(data))\n form.appendChild(hiddenInput)\n form.forceSubmit = true\n submitButton.disabled = false\n submitButton.click()\n submitButton.disabled = true\n },\n }\n } else {\n options = {\n style: style,\n createOrder: function (data, actions) {\n return actions.order.create({\n purchase_units: [\n {\n amount: {\n value: state.currentTotal,\n },\n },\n ],\n })\n },\n onApprove: function (data, actions) {\n return actions.order\n .capture()\n .then(function (details) {\n const hiddenInput = document.createElement('input')\n hiddenInput.setAttribute('type', 'hidden')\n hiddenInput.setAttribute('name', 'paypalPayload')\n hiddenInput.setAttribute('value', JSON.stringify(details))\n form.appendChild(hiddenInput)\n submitButton.disabled = true\n form.submit()\n\n //form.forceSubmit = true\n //submitButton.disabled = false\n //submitButton.click()\n //submitButton.disabled = true\n })\n .catch((err) => {\n throw err\n })\n },\n }\n }\n paypal\n .Buttons(options)\n .render('#payment-paypal')\n .catch((err) => {\n // eslint-disable-next-line no-console\n console.warn(`Warning - Caught an error when attempting to render component: ${err}`)\n })\n}\n\nexport const debouncedLoadPaypalScript = debounce(loadPaypalScript, 500)\n","const requestTimeout = (fn, delay) => {\n const start = new Date().getTime()\n const handle = new Object()\n\n const loop = () => {\n const current = new Date().getTime()\n const delta = current - start\n\n delta >= delay ? fn.call() : (handle.value = window.requestAnimationFrame(loop))\n }\n\n handle.value = window.requestAnimationFrame(loop)\n\n return handle\n}\n\nexport default requestTimeout\n","import jump from 'jump.js'\n\nconst getPageOffset = () => {\n let offset = 0\n\n const sitePrimaryHeader = document.querySelector('.site-primary-header')\n const panelLinks = document.querySelector('.panel-links')\n\n if (panelLinks) {\n offset += panelLinks.offsetHeight\n }\n\n if (sitePrimaryHeader) {\n offset += sitePrimaryHeader.offsetHeight\n }\n\n return offset\n}\n\nconst scrollTo = ($target, additionalOffset = 0) => {\n const pageOffset = getPageOffset() * -1\n let offset = pageOffset - additionalOffset\n\n return new Promise((resolve) => {\n jump($target, { duration: 500, offset, callback: resolve })\n })\n}\n\nexport default scrollTo\n","import requestTimeout from './requestTimeout'\n\nexport const slideUp = (element, duration = 400) => {\n return new Promise(function (resolve) {\n element.style.height = element.offsetHeight + 'px'\n element.style.transitionProperty = `height, margin, padding`\n element.style.transitionDuration = duration + 'ms'\n element.offsetHeight\n element.style.overflow = 'hidden'\n element.style.height = 0\n element.style.paddingTop = 0\n element.style.paddingBottom = 0\n element.style.marginTop = 0\n element.style.marginBottom = 0\n\n requestTimeout(() => {\n element.style.display = 'none'\n element.style.removeProperty('height')\n element.style.removeProperty('padding-top')\n element.style.removeProperty('padding-bottom')\n element.style.removeProperty('margin-top')\n element.style.removeProperty('margin-bottom')\n element.style.removeProperty('overflow')\n element.style.removeProperty('transition-duration')\n element.style.removeProperty('transition-property')\n resolve(false)\n }, duration)\n })\n}\n\nexport const slideDown = (element, duration = 400) => {\n return new Promise(function (resolve) {\n element.style.removeProperty('display')\n let display = window.getComputedStyle(element).display\n\n if (display === 'none') display = 'block'\n\n element.style.display = display\n let height = element.offsetHeight\n element.style.overflow = 'hidden'\n element.style.height = 0\n element.style.paddingTop = 0\n element.style.paddingBottom = 0\n element.style.marginTop = 0\n element.style.marginBottom = 0\n element.offsetHeight\n element.style.transitionProperty = `height, margin, padding`\n element.style.transitionDuration = duration + 'ms'\n element.style.height = height + 'px'\n element.style.removeProperty('padding-top')\n element.style.removeProperty('padding-bottom')\n element.style.removeProperty('margin-top')\n element.style.removeProperty('margin-bottom')\n\n requestTimeout(() => {\n element.style.removeProperty('height')\n element.style.removeProperty('overflow')\n element.style.removeProperty('transition-duration')\n element.style.removeProperty('transition-property')\n resolve(false)\n }, duration)\n })\n}\n\nexport const slideToggle = (target, duration = 400) => {\n if (window.getComputedStyle(target).display === 'none') {\n return slideDown(target, duration)\n } else {\n return slideUp(target, duration)\n }\n}\n","export const isTouchDevice = () => {\n return 'ontouchstart' in document.documentElement\n}\n","import * as validator from 'validate.js'\nimport scrollTo from '../common/scrollTo'\n\nvalidator.validators.checkboxGroup = function (_, group) {\n if (group) {\n const checked = group.querySelectorAll('input[type=checkbox]:checked')\n\n if (checked.length) {\n return null\n }\n }\n\n return '^Please select one'\n}\n\nconst findFieldWrapper = ($el) => {\n if ($el) {\n if ($el.closest('.form-field-wrapper')) {\n return $el.closest('.form-field-wrapper')\n }\n\n if ($el.closest('.form-field')) {\n return $el.closest('.form-field')\n }\n\n if ($el.closest('.middleColumn')) {\n return $el.closest('.middleColumn')\n }\n\n if ($el.closest('.field')) {\n return $el.closest('.field')\n }\n }\n}\n\nexport const handleBlur = (e) => {\n const $fieldWrapper = findFieldWrapper(e.target)\n\n if ($fieldWrapper) {\n $fieldWrapper.classList.remove('has-error')\n\n const $existingErrorMessage = $fieldWrapper.querySelector('.form-field-message')\n\n if ($existingErrorMessage) {\n $existingErrorMessage.remove()\n }\n }\n\n if (e.target.classList.contains('has-error')) {\n e.target.classList.remove('has-error')\n }\n}\n\nexport const buildRules = ($form) => {\n const rules = {}\n\n $form\n .querySelectorAll('[required], input.required-if, .js-dropdown.required-if select, .optionset.required-if input')\n .forEach(($field) => {\n // Ignore hidden fields\n if (\n (findFieldWrapper($field) && findFieldWrapper($field).offsetHeight === 0) ||\n $field.getAttribute('readonly')\n ) {\n return\n }\n\n const fieldName = $field.dataset.name ? $field.dataset.name : $field.name\n\n rules[fieldName] = {\n presence: {\n message: '^Required',\n },\n }\n\n if ($field.type === 'email') {\n rules[$field.name].email = true\n }\n })\n\n $form.querySelectorAll('[pattern]').forEach(($field) => {\n // Ignore hidden fields\n if (findFieldWrapper($field).offsetHeight === 0 || $field.readonly) {\n return\n }\n\n rules[$field.name] = {\n format: {\n pattern: $field.getAttribute('pattern'),\n message: '^Required',\n },\n }\n })\n\n $form.querySelectorAll('[aria-required]').forEach(($field) => {\n // Ignore hidden fields\n if ((findFieldWrapper($field) && findFieldWrapper($field).offsetHeight === 0) || $field.readonly) {\n return\n }\n\n if ($field.classList.contains('optionset')) {\n const $radio = $field.querySelector('input[type=radio]')\n const $checkbox = $field.querySelector('input[type=checkbox]')\n\n if ($radio) {\n rules[$radio.name] = {\n presence: {\n message: '^Required',\n },\n }\n }\n\n if ($checkbox) {\n rules[$checkbox.name] = {\n checkboxGroup: $checkbox.closest('.optionset'),\n }\n }\n }\n })\n\n return rules\n}\n\nexport const handleValidation = ($form) => {\n const rules = buildRules($form)\n const result = validate($form, rules)\n\n if (result !== undefined) {\n for (const [name, messages] of Object.entries(result)) {\n const $field = $form.querySelector(`[name=\"${name}\"]`)\n const $fieldWrapper = findFieldWrapper($field)\n\n // Place error message\n if ($fieldWrapper) {\n const $existingErrorMessage = $fieldWrapper.querySelector('.form-field-message')\n\n if ($existingErrorMessage) {\n $existingErrorMessage.remove()\n }\n\n const message = `\n
\n ${messages[0]}\n
\n `\n $fieldWrapper.insertAdjacentHTML('beforeend', message)\n $fieldWrapper.classList.add('has-error')\n }\n\n $field.classList.add('has-error')\n }\n\n const shouldScroll = $form.dataset.formScroll !== undefined\n\n const $firstError = $form.querySelector('.has-error')\n\n if (shouldScroll && $firstError) {\n scrollTo($firstError, 150, () => {\n setTimeout(() => {\n $firstError.querySelector('input') && $firstError.querySelector('input').focus()\n }, 0)\n })\n }\n\n return false\n }\n\n return true\n}\n\nexport const validate = validator\n","import ScrollReveal from 'scrollreveal'\n\nconst fn = {\n init: () => {\n fn.setupScrollReveals()\n },\n\n setupScrollReveals: () => {\n ScrollReveal().reveal('[data-sr-fade-up]', {\n distance: '125%',\n origin: 'bottom',\n interval: 50,\n })\n\n ScrollReveal().reveal('[data-sr-touch]', {\n opacity: 1,\n afterReveal: (el) => el.classList.add('sr-touched'),\n })\n\n ScrollReveal().reveal('[data-sr-fade-left]', {\n distance: '125%',\n origin: 'right',\n interval: 50,\n })\n\n ScrollReveal().reveal('[data-sr-fade-right]', {\n distance: '125%',\n origin: 'left',\n interval: 50,\n })\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import requestTimeout from '../common/requestTimeout'\nimport throttle from 'lodash/throttle'\nimport verge from 'verge'\nconst countUpModule = require('countup.js')\n\nconst counters = document.querySelectorAll('[data-counter]')\n\nconst state = {\n counters: [],\n}\n\nconst fn = {\n init: () => {\n counters.forEach((el) => {\n const useGrouping = el.dataset.useGrouping\n const decimalPlaces = el.dataset.decimalPlaces\n const end = el.dataset.end\n\n const opts = {\n useGrouping: !!+useGrouping,\n }\n\n if (decimalPlaces) {\n opts.decimalPlaces = decimalPlaces\n }\n\n const counter = new countUpModule.CountUp(el, end, opts)\n counter._el = el\n\n state.counters.push(counter)\n })\n\n fn.bindEvents()\n\n requestTimeout(fn.update, 300)\n },\n\n bindEvents: () => {\n window.addEventListener('scroll', throttle(fn.update, 250))\n },\n\n update: () => {\n state.counters.forEach((counter, index) => {\n if (verge.inY(counter._el)) {\n counter.start()\n delete state.counters[index]\n }\n })\n },\n}\n\nexport default {\n can: () => counters.length,\n run: fn.init,\n}\n","import flatpickr from 'flatpickr'\n\nconst $datepickers = document.querySelectorAll('input[type=date]')\nconst $dateRanges = document.querySelectorAll('.date-range-field')\n\nconst fn = {\n init: () => {\n $datepickers.forEach(($input) => {\n flatpickr($input, {\n altInput: true,\n altFormat: 'M j, Y',\n disableMobile: true,\n onReady: function () {\n if (this.input.getAttribute('data-toggle-if')) {\n this.altInput.setAttribute('data-name', this.input.getAttribute('name'))\n\n this.altInput.setAttribute('data-toggle-if', this.input.getAttribute('data-toggle-if'))\n }\n },\n })\n })\n\n $dateRanges.forEach(($el) => {\n const datesData = $el.dataset.dates ? JSON.parse($el.dataset.dates) : null\n\n flatpickr($el.querySelector('input[name=date]'), {\n altInput: true,\n mode: 'range',\n altFormat: 'M j, Y',\n disableMobile: true,\n onClose: (selectedDates, _, instance) => {\n if (selectedDates.length == 2) {\n const from = instance.formatDate(selectedDates[0], 'Y-m-d')\n const to = instance.formatDate(selectedDates[1], 'Y-m-d')\n\n window.location.href = `${$el.closest('form').action}?from=${from}&to=${to}`\n }\n },\n onDayCreate: (dObj, dStr, fp, dayElem) => {\n if (datesData && datesData.includes(fp.formatDate(dayElem.dateObj, 'Y-m-d'))) {\n dayElem.classList.add('is-highlighted')\n }\n },\n })\n })\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport easydropdown from 'easydropdown'\nimport scrollTo from '../common/scrollTo'\n\nconst isIos =\n /iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)\n\nconst fn = {\n init: () => {\n on('change', '.js-navigation-dropdown select', fn.handleNavigationSelect)\n on('change', '.js-scroll-dropdown select', fn.handleScrollSelect)\n on('change', '.js-submit-dropdown select', fn.handleSubmitSelect)\n fn.setup()\n\n if (window.matchMedia('(min-width: 768px) and (max-width: 1024px)').matches && isIos) {\n document.documentElement.classList.add('is-dropdown-ios-tablet')\n }\n },\n\n setup: () => {\n document.querySelectorAll('.js-dropdown').forEach((select) => {\n if (!select.querySelector('[selected]')) {\n select.selectedIndex = -1\n }\n\n fn.setupDropdown(select)\n })\n },\n\n handleNavigationSelect: (e) => {\n window.location.href = e.target.value\n },\n\n handleScrollSelect: (e) => {\n const target = document.querySelector(e.target.value)\n\n if (target) {\n scrollTo(target)\n\n e.target.value = null\n\n easydropdown(e.target).refresh()\n }\n },\n\n handleSubmitSelect: (e) => {\n e.target.closest('form').submit()\n },\n\n setupDropdown: (el) => {\n if (el.tagName !== 'SELECT') {\n return\n }\n\n const placeholder = el.querySelector('option[value=\"\"]')\n\n if (placeholder && !placeholder.hasAttribute('data-placeholder')) {\n placeholder.setAttribute('data-placeholder', true)\n }\n\n const opts = {\n behavior: {\n openOnFocus: true,\n maxVisibleItems: 8,\n liveUpdates: true,\n },\n }\n\n easydropdown(el, opts)\n },\n}\n\nexport const StyledDropdown = {\n init: (select) => fn.setupDropdown(select),\n setup: () => fn.setup(),\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on, fire } from 'delegated-events'\nimport { handleValidation, handleBlur } from '../common/validation'\nimport scrollTo from '../common/scrollTo'\n\nconst $toggleForm = document.querySelector('form.has-toggles')\n\nconst fn = {\n init: () => {\n on('blur', '.has-error', handleBlur, { capture: true })\n on('change', '.has-error', handleBlur, { capture: true })\n on('change', '.has-error blur', handleBlur, {\n capture: true,\n })\n on('keyup', 'textarea.has-length-limit', fn.handleLengthLimit, {\n capture: true,\n })\n on('submit', '[data-form-validate]:not(.multistepform)', (e) => handleValidation(e.target))\n on('submit', '[data-form-ajax]', fn.handleAjax)\n on('change', '.form-all-group input[type=\"checkbox\"]', fn.handleAllGroup)\n on('click', '.radio-group', fn.handleRadios)\n on('change', 'input[type=radio]', fn.handleToggle)\n on('change', 'input[type=checkbox]', fn.handleToggle)\n on('keyup', '.toggle-source-gt input[type=text]', fn.handleToggle)\n\n fn.showToggles()\n fn.setupSpecialFields()\n fn.setupUserForms()\n fn.setupMasks(document.querySelector('form'))\n },\n\n setupUserForms: () => {\n const $uf = document.querySelectorAll('.userform')\n if ($uf.length) {\n const $userform = $uf[0]\n const $reqs = $userform.querySelectorAll('.field.requiredField')\n $reqs.forEach(($fieldWrap) => {\n var $label\n if ($fieldWrap.classList.contains('userformsoptionset')) {\n $label = $fieldWrap.getElementsByTagName('legend')\n } else {\n $label = $fieldWrap.getElementsByTagName('label')\n }\n $label[0].innerHTML = $label[0].innerHTML + ' *'\n })\n const $prevButtons = $userform.querySelectorAll('.step-button-prev')\n const $nextButtons = $userform.querySelectorAll('.step-button-next')\n $prevButtons.forEach(($button) => {\n $button.addEventListener('click', () => {\n var $requireds = $userform.querySelectorAll('.error')\n if ($requireds.length == 0) {\n scrollTo($userform)\n }\n })\n })\n $nextButtons.forEach(($button) => {\n $button.addEventListener('click', () => {\n var $requireds = $userform.querySelectorAll('.error')\n if ($requireds.length == 0) {\n scrollTo($userform)\n }\n })\n })\n }\n },\n\n setupSpecialFields: () => {\n document.querySelectorAll('form').forEach(($form) => {\n // Setup length limits\n $form.querySelectorAll('.form-field-wrapper.has-length-limit').forEach(($field) => {\n const $input = $field.querySelector('.has-length-limit')\n\n if ($input && $input.maxLength) {\n const $label = $field.querySelector('label')\n $label.classList.add('has-length-limit')\n\n const $counter = document.createElement('div')\n $counter.classList.add('length-limit-counter')\n\n const $count = document.createElement('span')\n $count.textContent = `(${$input.value.length}/${$input.maxLength})`\n\n $counter.appendChild($count)\n\n const $labelHolder = document.createElement('div')\n\n $labelHolder.classList.add('form-field-label')\n $labelHolder.appendChild($label.cloneNode(true))\n $labelHolder.appendChild($counter)\n\n $label.replaceWith($labelHolder)\n }\n })\n })\n },\n\n handleLengthLimit: (e) => {\n const $input = e.target.closest('.has-length-limit')\n const $field = $input.closest('.field.has-length-limit')\n\n if ($input && $field) {\n const $count = $field.querySelector('.length-limit-counter span')\n $count.textContent = `(${$input.value.length}/${$input.maxLength})`\n }\n },\n\n handleAllGroup: (e) => {\n const isAll = e.target.value === 'All'\n const group = e.target.closest('.form-all-group')\n\n if (group) {\n const allEl = group.querySelector('input[value=\"All\"]')\n\n if (allEl && isAll) {\n if (allEl.checked) {\n group.querySelectorAll('[type=\"checkbox\"]').forEach((x) => (x.checked = true))\n } else {\n group.querySelectorAll('[type=\"checkbox\"]').forEach((x) => (x.checked = false))\n }\n }\n\n if (allEl && !isAll) {\n allEl.checked = false\n }\n }\n },\n\n handleRadios: (e) => {\n const $input = e.target\n const $holder = $input.closest('[role=\"option\"]')\n const $siblings = fn.getSiblings($holder)\n\n if ($input && $holder) {\n $holder.classList.add('checked')\n\n if ($siblings.length) {\n $siblings.forEach(($sibling) => {\n $sibling.classList.remove('checked')\n })\n }\n }\n },\n\n getSiblings: (e) => {\n let siblings = []\n if (!e.parentNode) {\n return siblings\n }\n let sibling = e.parentNode.firstChild\n while (sibling) {\n if (sibling.nodeType === 1 && sibling !== e) {\n siblings.push(sibling)\n }\n sibling = sibling.nextSibling\n }\n return siblings\n },\n\n handleAjax: (e) => {\n e.preventDefault()\n\n const $form = e.target\n const isValid = handleValidation($form)\n\n if (isValid) {\n const $formMessages = $form.querySelector('.form-messages')\n const $submitButton = $form.querySelector('[type=submit]')\n let autoHideMessage = true\n fn.toggleSubmit($submitButton)\n\n const formData = new FormData($form)\n\n ajax\n .url($form.action)\n .body(formData)\n .post()\n .json((res) => {\n if (res.success) {\n $form.reset()\n $form.querySelectorAll('select').forEach((x) => (x.value = null))\n $form.querySelectorAll('.file-input-placeholder').forEach((x) => x.classList.add('is-hidden'))\n $form.querySelectorAll('.toggle-fields').forEach((x) => x.classList.add('hidden'))\n $form.querySelectorAll('.toggle-group').forEach((x) => x.classList.add('hidden'))\n $form.querySelectorAll('textarea.has-length-limit').forEach((el) => {\n fn.handleLengthLimit({ target: el })\n })\n\n if ($form.dataset.hideOnSubmit) {\n $form.querySelectorAll('.form-content').forEach((x) => x.classList.add('hidden'))\n autoHideMessage = false\n }\n\n fire(document.documentElement, 'ajaxform:submit', {\n type: 'post',\n url: new URL($form.action),\n queryParameters: new URLSearchParams(formData).toString(),\n })\n }\n\n if (res.message) {\n fn.showFormMessages($formMessages, res.message, res.success, autoHideMessage)\n }\n })\n .catch(() => {\n fn.showFormMessages($formMessages, 'Sorry, there was a problem with your submission')\n })\n .finally(() => {\n fn.toggleSubmit($submitButton)\n })\n }\n },\n\n toggleSubmit: ($submitButton) => {\n $submitButton.disabled = !$submitButton.disabled\n $submitButton.classList.toggle('btn-loading')\n },\n\n showFormMessages: ($holder, message, success, autoHide) => {\n $holder.style.display = 'block'\n $holder.innerHTML = message\n\n if (success) {\n $holder.classList.remove('form-message-error')\n } else {\n $holder.classList.add('form-message-error')\n }\n\n if (autoHide) {\n setTimeout(() => {\n $holder.style.display = 'none'\n }, 5000)\n }\n },\n\n showToggles: () => {\n if ($toggleForm) {\n $toggleForm.querySelectorAll(`[data-toggle-if]`).forEach(($input) => {\n const $targetEl = $toggleForm.querySelector(`[name=\"${$input.dataset.toggleIf.split('|')[0]}\"]:checked`)\n const targetValues = $input.dataset.toggleIf.split('|')\n targetValues.shift()\n const $toggleGroup = $input.closest('.toggle-group')\n\n if ($targetEl && targetValues.indexOf($targetEl.value) !== -1) {\n $toggleGroup.classList.remove('hidden')\n }\n })\n\n $toggleForm.querySelectorAll(`[data-toggle-if-gt]`).forEach(($input) => {\n const $targetEl = $toggleForm.querySelector(`[name=\"${$input.dataset.toggleIfGt.split('|')[0]}\"]`)\n const targetValue = $input.dataset.toggleIfGt.split('|')[1]\n const $toggleGroup = $input.closest('.toggle-group')\n\n if ($targetEl && parseInt($targetEl.value, 10) > parseInt(targetValue, 10)) {\n $toggleGroup.classList.remove('hidden')\n }\n })\n }\n },\n\n handleToggle: (e) => {\n const field = e.target\n const name = e.target.name\n const selectedValue = e.target.value\n\n if (!$toggleForm) {\n return\n }\n\n $toggleForm.querySelectorAll(`[data-toggle-if^=\"${name}|\"]`).forEach(($input) => {\n const $toggleGroup = $input.closest('.toggle-group')\n let shouldShow = false\n\n if (!$toggleGroup) {\n return\n }\n\n if (field.type === 'radio') {\n const targetValues = $input.dataset.toggleIf.split('|')\n targetValues.shift()\n shouldShow = targetValues.indexOf(selectedValue) !== -1\n }\n\n if (field.type === 'checkbox') {\n shouldShow = field.checked\n }\n\n if (shouldShow) {\n $toggleGroup.classList.remove('hidden')\n } else {\n $toggleGroup.classList.add('hidden')\n\n $toggleGroup.querySelectorAll('input:not([type=checkbox]):not([type=radio])').forEach((x) => (x.value = null))\n $toggleGroup.querySelectorAll('input:checked').forEach((x) => {\n x.checked = false\n\n $toggleForm.querySelectorAll(`[data-toggle-if^=\"${x.name}|\"]`).forEach(($input) => {\n const $toggleGroup = $input.closest('.toggle-group')\n $toggleGroup.classList.add('hidden')\n\n $toggleGroup\n .querySelectorAll('input:not([type=checkbox]):not([type=radio])')\n .forEach((x) => (x.value = null))\n })\n })\n }\n })\n\n $toggleForm.querySelectorAll(`[data-toggle-if-gt^=\"${name}|\"]`).forEach(($input) => {\n const $toggleGroup = $input.closest('.toggle-group')\n let shouldShow = false\n\n if (!$toggleGroup) {\n return\n }\n\n if (field.type === 'text') {\n const targetValue = $input.dataset.toggleIfGt.split('|')[1]\n shouldShow = parseInt(selectedValue, 10) > parseInt(targetValue, 10)\n }\n\n if (shouldShow) {\n $toggleGroup.classList.remove('hidden')\n } else {\n $toggleGroup.classList.add('hidden')\n\n $toggleGroup.querySelectorAll('input').forEach((x) => (x.value = null))\n }\n })\n },\n\n setupMasks: async (form) => {\n const fields = form.querySelectorAll('input[type=\"tel\"]')\n\n if (!fields.length) {\n return\n }\n\n const { default: IMask } = await import('imask/esm/imask')\n await import('imask/esm/masked/number')\n await import('imask/esm/masked/pattern')\n\n fields.forEach((field) => {\n if (field.type === 'tel') {\n IMask(field, {\n mask: '(000) 000-0000',\n })\n }\n })\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { Swiper, Autoplay, EffectFade } from 'swiper'\n\nSwiper.use([Autoplay, EffectFade])\n\nconst fn = {\n init: () => {\n document.querySelectorAll('.header-pet-images-slider').forEach((el) => fn.setupSlider(el))\n },\n\n setupSlider: (el) => {\n const container = el.querySelector('.swiper-container')\n\n if (!container) {\n return\n }\n\n const numSlides = container.querySelectorAll('.swiper-slide').length\n\n const opts = {\n autoplay: {\n delay: 4000,\n },\n slidesPerView: 1,\n speed: 500,\n effect: 'fade',\n fadeEffect: {\n crossFade: true,\n },\n }\n\n if (numSlides > 1) {\n new Swiper(container, opts)\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { Swiper, Pagination, Autoplay, Thumbs, EffectFade } from 'swiper'\n\nSwiper.use([Pagination, Autoplay, Thumbs, EffectFade])\n\nconst fn = {\n init: () => {\n document.querySelectorAll('.media-thumbnail-slider').forEach((el) => fn.setupSlider(el))\n },\n\n setupSlider: (el) => {\n const mainContainer = el.querySelector('.swiper-container.main-swiper')\n const thumbnailContainer = el.querySelector('.swiper-container.thumbnail-swiper')\n\n if (!mainContainer) {\n return\n }\n\n const numSlides = mainContainer.querySelectorAll('.swiper-slide').length\n\n const mainOpts = {\n autoplay: {\n delay: 4000,\n },\n slidesPerView: 1,\n speed: 500,\n effect: 'fade',\n fadeEffect: {\n crossFade: true,\n },\n }\n\n const thumbnailOpts = {\n slidesPerView: 3,\n spaceBetween: 20,\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n }\n\n if (el.classList.contains('is-4-up')) {\n thumbnailOpts.breakpoints = {\n 1024: {\n slidesPerView: 4,\n spaceBetween: 20,\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n },\n }\n }\n\n if (numSlides > 3) {\n thumbnailOpts.pagination = {\n el: thumbnailContainer.querySelector('.swiper-pagination'),\n type: 'bullets',\n clickable: true,\n }\n }\n\n if (numSlides > 1) {\n const thumbnailSwiper = new Swiper(thumbnailContainer, thumbnailOpts)\n\n mainOpts.thumbs = {\n swiper: thumbnailSwiper,\n }\n\n new Swiper(mainContainer, mainOpts)\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import Cookies from 'js-cookie'\nimport tingle from 'tingle.js'\nimport { on } from 'delegated-events'\n\nconst fn = {\n init: () => {\n on('click', '[data-modal]', fn.handleOpen)\n\n const autoOpenModal = document.querySelector('[data-auto-modal]')\n\n if (autoOpenModal) {\n fn.openModal(autoOpenModal)\n }\n },\n\n handleOpen: (e) => {\n if (e.target.tagName !== 'A' || (e.target.tagName === 'A' && e.target.dataset.modal)) {\n e.preventDefault()\n fn.openModal(e.target.closest('[data-modal]'))\n }\n },\n\n openModal: (el) => {\n let modal = null\n\n // Setup an image modal\n if (el.dataset.modal === 'image') {\n let opts = {\n cssClass: ['modal--image'],\n }\n\n modal = fn.buildImageModal(el.getAttribute('href'), opts)\n }\n\n // Setup a video modal\n if (el.dataset.modal === 'video') {\n let opts = {\n cssClass: ['modal--video'],\n closeMethods: ['button', 'escape'],\n }\n\n modal = fn.buildVideoModal(el.getAttribute('href'), opts)\n }\n\n // Setup a content/AJAX modal\n if (el.dataset.modal === 'content') {\n let opts = {\n cssClass: ['modal--content', 'modal--ajax'],\n }\n\n const href = el.dataset.href ? el.dataset.href : el.getAttribute('href')\n modal = fn.buildContentModal(href, opts)\n }\n\n // Setup an embed modal\n if (el.dataset.modal === 'embed') {\n let opts = {\n cssClass: ['modal--embed'],\n closeMethods: ['button'],\n }\n\n modal = fn.buildEmbedModal(el.getAttribute('href'), opts)\n }\n\n // Setup an auto HTML modal\n if (el.dataset.autoModal !== undefined) {\n if (el.dataset.autoModal === 'setcookie') {\n Cookies.set('seenautomodal', true, {\n expires: 1,\n })\n }\n\n let opts = {\n cssClass: ['modal--content'],\n }\n\n modal = fn.buildModal(opts)\n modal.setContent(el.innerHTML)\n }\n\n if (modal) {\n modal.open()\n }\n },\n\n buildModal: (opts = {}) => {\n let cssClass = ['modal']\n let closeMethods = ['button', 'escape', 'overlay']\n\n if (Object.prototype.hasOwnProperty.call(opts, 'cssClass')) {\n cssClass = cssClass.concat(opts.cssClass)\n }\n\n if (Object.prototype.hasOwnProperty.call(opts, 'closeMethods')) {\n closeMethods = opts.closeMethods\n }\n\n const modal = new tingle.modal({\n closeMethods,\n cssClass,\n beforeOpen: () => {\n modal.modal.classList.add('modal--loading')\n\n // Move the close button\n const closeBtn = modal.modal.querySelector('.tingle-modal__close')\n closeBtn.querySelector('.tingle-modal__closeIcon').innerHTML = `\n \n \n \n `\n modal.modal.querySelector('.tingle-modal-box').appendChild(closeBtn)\n },\n onOpen: () => {\n modal.modal.classList.remove('modal--loading')\n },\n onClose: () => {\n modal.destroy()\n\n if (window._currentModal) {\n window._currentModal = null\n }\n },\n })\n\n return modal\n },\n\n buildImageModal: (href, opts = {}) => {\n const modal = fn.buildModal(opts)\n modal.setContent(``)\n\n return modal\n },\n\n buildVideoModal: (href, opts = {}) => {\n const modal = fn.buildModal(opts)\n modal.setContent(`\n \n
\n
\n \n
\n
\n `)\n\n // Activate only if not already activated\n if (window.hideYTActivated) return\n // Load API\n if (typeof YT === 'undefined') {\n let tag = document.createElement('script')\n tag.src = 'https://www.youtube.com/iframe_api'\n let firstScriptTag = document.getElementsByTagName('script')[0]\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag)\n }\n // Activate on all players\n let onYouTubeIframeAPIReadyCallbacks = []\n for (let playerWrap of document.querySelectorAll('.hytPlayerWrap')) {\n let playerFrame = playerWrap.querySelector('iframe')\n\n let onPlayerStateChange = function (event) {\n if (event.data == window.YT.PlayerState.ENDED) {\n playerWrap.classList.add('ended')\n } else if (event.data == window.YT.PlayerState.PAUSED) {\n playerWrap.classList.add('paused')\n } else if (event.data == window.YT.PlayerState.PLAYING) {\n playerWrap.classList.remove('ended')\n playerWrap.classList.remove('paused')\n }\n }\n\n let player\n onYouTubeIframeAPIReadyCallbacks.push(function () {\n player = new window.YT.Player(playerFrame, {\n events: {\n onStateChange: onPlayerStateChange,\n },\n })\n })\n\n playerWrap.addEventListener('click', function () {\n let playerState = player.getPlayerState()\n if (playerState == window.YT.PlayerState.ENDED) {\n player.seekTo(0)\n } else if (playerState == window.YT.PlayerState.PAUSED) {\n player.playVideo()\n }\n })\n }\n\n window.onYouTubeIframeAPIReady = function () {\n for (let callback of onYouTubeIframeAPIReadyCallbacks) {\n callback()\n }\n }\n\n // window.hideYTActivated = true\n\n return modal\n },\n\n buildEmbedModal: (href, opts = {}) => {\n const modal = fn.buildModal(opts)\n modal.setContent(``)\n\n return modal\n },\n\n buildContentModal: (href, opts = {}) => {\n const modal = fn.buildModal(opts)\n\n ajax\n .url(href)\n .get()\n .text((resp) => {\n modal.setContent(resp)\n modal.modal.classList.remove('modal--ajax')\n })\n\n return modal\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport { handleValidation, handleBlur } from '../common/validation'\n\nconst $form = document.querySelector('form.multistepform')\n\nconst state = {\n skipValidation: false,\n}\n\nconst fn = {\n init: () => {\n on('blur', '.has-error', handleBlur, { capture: true })\n on('change', '.has-error', handleBlur, { capture: true })\n on('change', '.has-error blur', handleBlur, {\n capture: true,\n })\n\n on('click', '[formnovalidate]', () => {\n state.skipValidation = true\n })\n on('submit', '[data-form-validate]', fn.handleValidation)\n\n // Manage Group handlers\n on('click', '.manage-group-add-action', fn.handleAddManageGroupBlock)\n on('click', '.manage-group-remove-action', fn.handleRemoveManageGroupBlock)\n on('blur', '[data-manage-group-target]', fn.handleUpdateManageGroupBlock, {\n capture: true,\n })\n\n fn.setupSpecialFields()\n fn.setupManageGroups()\n },\n\n handleValidation: (e) => {\n if (state.skipValidation) {\n return true\n }\n\n const valid = handleValidation(e.target)\n\n if (!valid) {\n e.preventDefault()\n }\n\n return valid\n },\n\n setupSpecialFields: () => {\n document.querySelectorAll('form').forEach(($form) => {\n // Setup file inputs\n $form.querySelectorAll('input[type=file]').forEach(($input) => {\n const $placeholder = document.createElement('div')\n $placeholder.classList.add('file-input-placeholder')\n\n if ($input.value) {\n $placeholder.textContent = $input.files[0].name\n } else {\n $placeholder.textContent = $input.dataset.placeholder\n }\n\n $input.parentNode.insertBefore($placeholder, $input)\n\n $placeholder.addEventListener('click', () => $input.click())\n\n $input.addEventListener('change', (e) => {\n $placeholder.textContent = e.target.files[0].name\n $placeholder.classList.add('filled')\n })\n })\n })\n },\n\n setupManageGroups: () => {\n const $groups = $form.querySelectorAll('.manage-group')\n\n $groups.forEach(($group) => {\n const $targets = $group.querySelectorAll('[data-manage-group-target]')\n\n $targets.forEach(($field) => {\n if ($field && $field.value) {\n const $block = $field.closest('.manage-group-block')\n const blockIndex = $block.dataset.index\n const isInitial = parseInt(blockIndex) === 1\n\n if (isInitial) {\n return\n }\n\n $block.classList.remove('hidden')\n fn.addBlockToList($group, $field.value, blockIndex)\n }\n })\n })\n },\n\n handleAddManageGroupBlock: (e) => {\n const $button = e.target.closest('button')\n const $group = $button.closest('.manage-group')\n const $nextBlock = $group.querySelectorAll('.manage-group-block.hidden')\n\n if ($nextBlock.length) {\n $nextBlock[0].classList.remove('hidden')\n\n fn.addBlockToList($group, $button.dataset.pendingLabel, $nextBlock[0].dataset.index)\n }\n\n fn.toggleAddAction($group)\n },\n\n toggleAddAction: ($group) => {\n const $button = $group.querySelector('.manage-group-add-action')\n\n const visibleBlocks = $group.querySelectorAll('.manage-group-block:not(.hidden)').length\n\n if (visibleBlocks >= $group.dataset.limit) {\n $button.classList.add('hidden')\n } else {\n $button.classList.remove('hidden')\n }\n },\n\n addBlockToList: ($group, label, index) => {\n const $list = $group.querySelector('.manage-group-list')\n\n const $listItem = document.createRange().createContextualFragment(`\n
  • \n
    ${label}
    \n \n
  • \n `)\n\n $list.appendChild($listItem)\n },\n\n handleRemoveManageGroupBlock: (e) => {\n const $button = e.target.closest('button')\n const $listItem = $button.closest('li')\n const $group = $button.closest('.manage-group')\n const $block = $group.querySelector(`.manage-group-block[data-index=\"${$button.dataset.index}\"]`)\n\n $block.querySelectorAll('input, select').forEach(($input) => {\n $input.value = null\n })\n\n $block.classList.add('hidden')\n $listItem.remove()\n\n fn.toggleAddAction($group)\n },\n\n handleUpdateManageGroupBlock: (e) => {\n const $input = e.target\n const $group = $input.closest('.manage-group')\n const $block = $input.closest('.manage-group-block')\n const blockIndex = $block.dataset.index\n const $listItemLabel = $group.querySelector(`.manage-group-list [data-label-index=\"${blockIndex}\"]`)\n\n if ($input.value && $listItemLabel) {\n $listItemLabel.textContent = $input.value\n }\n },\n}\n\nexport default {\n can: () => $form,\n run: fn.init,\n}\n","const fn = {\n init: () => {\n fn.setupPageHeaderMediaSlider()\n },\n\n setupPageHeaderMediaSlider: () => {\n const headerContainer = document.querySelector('.has-media-slider-header .page-header-container')\n\n const contentContainer = document.querySelector('.has-media-slider-header .section-content')\n\n if (!headerContainer || !contentContainer) {\n return\n }\n\n const handleOffset = () => {\n const headerTop = headerContainer.getBoundingClientRect().top\n const contentTop = contentContainer.getBoundingClientRect().top\n const headerPadding = parseInt(window.getComputedStyle(headerContainer).paddingTop, 10)\n const offset = contentTop - headerTop - headerPadding + 72\n\n headerContainer.closest('.has-media-slider-header').style.setProperty('--top-offset', `-${offset}px`)\n }\n\n window.addEventListener('resize', handleOffset)\n\n handleOffset()\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport 'lightgallery.js/dist/js/lightgallery.js'\nimport 'lg-thumbnail.js/dist/lg-thumbnail.js'\nimport 'lightgallery.js/dist/css/lightgallery.css'\n\nconst lightGallery = window.lightGallery\n\nconst galleryEl = document.querySelector('[data-photo-gallery]')\n\nconst fn = {\n init: () => {\n on('click', '.gallery-show-more', (e) => {\n galleryEl.querySelectorAll('.gallery-item.hidden').forEach((x) => x.classList.remove('hidden'))\n galleryEl.querySelectorAll('.gallery-item.mobile-hidden').forEach((x) => x.classList.remove('mobile-hidden'))\n e.currentTarget.classList.add('hidden')\n\n document.querySelectorAll('.gallery-show-more').forEach((x) => x.parentNode.removeChild(x))\n })\n\n on('click', '[data-gallery-trigger]', (e) => {\n e.preventDefault()\n\n const gallery = e.target.closest('[data-photo-gallery]')\n const startIndex = e.currentTarget.dataset.galleryIndex || 1\n const galleryData = JSON.parse(gallery.dataset.photoGallery)\n\n lightGallery(gallery, {\n index: parseInt(startIndex - 1),\n dynamic: true,\n dynamicEl: galleryData,\n thumbnail: true,\n download: false,\n })\n\n gallery.addEventListener(\n 'onCloseAfter',\n () => {\n const uid = gallery.getAttribute('lg-uid')\n\n if (Object.prototype.hasOwnProperty.call(window.lgData, uid)) {\n window.lgData[uid].destroy(true)\n }\n },\n { once: true }\n )\n })\n },\n}\n\nexport default {\n can: () => galleryEl,\n run: fn.init,\n}\n","import { Swiper, Autoplay, EffectFade } from 'swiper'\n\nSwiper.use([Autoplay, EffectFade])\n\nconst fn = {\n init: () => {\n document.querySelectorAll('.quick-link-images-slider').forEach((el) => fn.setupSlider(el))\n },\n\n setupSlider: (el) => {\n const container = el.querySelector('.swiper-container')\n\n if (!container) {\n return\n }\n\n const numSlides = container.querySelectorAll('.swiper-slide').length\n\n const opts = {\n autoplay: {\n delay: 4000,\n },\n slidesPerView: 1,\n speed: 500,\n effect: 'fade',\n fadeEffect: {\n crossFade: true,\n },\n }\n\n if (numSlides > 1) {\n new Swiper(container, opts)\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport scrollTo from '../common/scrollTo'\n\nconst fn = {\n init: () => {\n fn.bindEvents()\n fn.handleUrl()\n fn.handleScrollToMe()\n },\n\n bindEvents: () => {\n on('click', '[data-scroll]', fn.handleClick)\n },\n\n handleClick: (e) => {\n const el = e.target.closest('[data-scroll]')\n\n let targetSelector = null\n\n if (el.dataset.scroll) {\n targetSelector = el.dataset.scroll\n } else if (el.tagName === 'A') {\n targetSelector = el.hash\n } else {\n return\n }\n\n if (targetSelector) {\n const target = document.querySelector(targetSelector)\n\n if (target) {\n e.preventDefault()\n\n document.documentElement.classList.remove('js-nav-active')\n\n if (window._currentModal && window._currentModal.modal) {\n window._currentModal.close()\n }\n\n if (target.classList.contains('element-formstackform')) {\n const buttonTrigger = target.querySelector('.btn-form-trigger[aria-expanded=\"false\"]')\n\n if (buttonTrigger) {\n buttonTrigger.click()\n }\n }\n\n scrollTo(target)\n }\n }\n },\n\n handleUrl: () => {\n if (window.location.hash) {\n let targetSelector = window.location.hash\n\n let target = document.querySelector(targetSelector)\n\n if (target) {\n scrollTo(target)\n }\n }\n },\n\n // Automatically scrolls to the first element with the [data-scrolltome] attribute\n handleScrollToMe: () => {\n const target = document.querySelector('[data-scrolltome]')\n\n if (target) {\n setTimeout(() => {\n scrollTo(target)\n }, 250)\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport { slideUp, slideDown } from '../common/slide'\n\nconst topBar = document.querySelector('.site-announcement')\n\nconst fn = {\n init: () => {\n window.addEventListener('resize', fn.setHeight)\n fn.setHeight()\n\n on('click', '.announcement-toggle-hide', () => {\n slideUp(topBar).then(() => {\n document.documentElement.classList.add('announcement-is-hidden')\n fn.setHeight()\n })\n })\n\n on('click', '.announcement-toggle-show', () => {\n document.documentElement.classList.remove('announcement-is-hidden')\n slideDown(topBar).then(() => {\n fn.setHeight()\n })\n })\n },\n\n setHeight: () => {\n document.documentElement.style.setProperty('--site-announcement-height', `${topBar.offsetHeight}px`)\n },\n}\n\nexport default {\n can: () => topBar,\n run: fn.init,\n}\n","const header = document.querySelector('.site-header')\n\nconst state = {\n stuck: true,\n prevScroll: window.scrollY || document.documentElement.scrollTop,\n currScroll: 0,\n scrollDir: 0,\n prevDir: 0,\n}\n\nconst fn = {\n init: () => {\n fn.handleScroll()\n fn.bindEvents()\n },\n\n bindEvents: () => {\n window.addEventListener('scroll', fn.handleScroll)\n },\n\n handleScroll: () => {\n const primaryOffset =\n parseInt(getComputedStyle(document.documentElement).getPropertyValue('--secondary-header-height'), 10) +\n parseInt(getComputedStyle(document.documentElement).getPropertyValue('--site-announcement-height'), 10)\n\n state.currScroll = window.scrollY || document.documentElement.scrollTop\n state.stuck = state.currScroll > primaryOffset\n\n if (state.currScroll > state.prevScroll + 10) {\n state.scrollDir = 'down'\n } else if (state.currScroll < state.prevScroll - 10) {\n state.scrollDir = 'up'\n }\n\n state.prevScroll = state.currScroll\n\n if (state.scrollDir === 'up') {\n document.documentElement.classList.add('is-scrolling-up')\n header.classList.add('is-scrolling-up')\n } else {\n document.documentElement.classList.remove('is-scrolling-up')\n header.classList.remove('is-scrolling-up')\n }\n\n header.classList.toggle('is-stuck', state.stuck)\n },\n}\n\nexport default {\n can: () => header,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport throttle from 'lodash/throttle'\nimport requestTimeout from '../common/requestTimeout'\n\nconst bodyScrollLock = require('body-scroll-lock')\nconst disableBodyScroll = bodyScrollLock.disableBodyScroll\nconst enableBodyScroll = bodyScrollLock.enableBodyScroll\n\nconst nav = document.querySelector('.site-mobile-menu')\nconst navOpen = document.querySelector('.site-mobile-menu-open')\nconst navMenu = document.querySelector('.site-nav-menu')\nconst navHeader = document.querySelector('.site-nav-header')\nconst navHeaderTitle = document.querySelector('.site-nav-header-title')\n\nconst state = {\n menuStack: [],\n}\n\nconst fn = {\n init: () => {\n fn.bindEvents()\n },\n\n bindEvents: () => {\n window.addEventListener('resize', throttle(fn.handleResize, 250))\n document.addEventListener('click', fn.closeMenu)\n on('click', '.site-mobile-menu-open', fn.openMenu)\n on('click', '.site-mobile-menu-close', fn.closeMenu)\n on('click', '.site-nav-prev', fn.moveMenuPrev)\n on('click', '.site-nav-next', fn.moveMenuNext)\n },\n\n handleMenuToggle: () => {\n const isOpen = navOpen.getAttribute('aria-expanded') === 'true'\n\n if (isOpen) {\n fn.closeMenu({ target: document.body })\n } else {\n fn.openMenu()\n }\n },\n\n openMenu: () => {\n document.documentElement.classList.add('js-menu-active')\n navOpen.setAttribute('aria-expanded', 'true')\n disableBodyScroll(nav)\n },\n\n closeMenu: ({ target }) => {\n if (\n !target.closest('.site-search-close') &&\n !target.closest('.site-mobile-menu-open') &&\n (target.closest('.site-mobile-menu-close') || !target.closest('.site-mobile-menu'))\n ) {\n document.documentElement.classList.remove('js-menu-active')\n navOpen.setAttribute('aria-expanded', 'false')\n\n fn.resetMenu()\n enableBodyScroll(nav)\n }\n },\n\n moveMenuNext: ({ target }) => {\n const next = target.closest('.has-submenu').querySelector('.site-nav-submenu')\n state.menuStack.push(next)\n next.classList.add('is-active')\n fn.updateMenu()\n },\n\n moveMenuPrev: () => {\n const prev = state.menuStack.pop()\n prev.classList.remove('is-active')\n fn.updateMenu()\n },\n\n resetMenu: () => {\n const currentMenuStack = state.menuStack\n\n state.menuStack = []\n\n requestTimeout(() => {\n currentMenuStack.forEach((el) => el.classList.remove('is-active'))\n fn.updateMenu()\n }, 300)\n },\n\n updateMenu: () => {\n const menuDepth = state.menuStack.length\n navMenu.style.transform = `translate3d(${menuDepth * -100}%, 0, 0)`\n\n fn.updateNavHeader()\n },\n\n updateNavHeader: () => {\n const currentMenu = state.menuStack[state.menuStack.length - 1]\n let headerTitle = null\n\n if (currentMenu) {\n const parentLink = currentMenu.closest('.has-submenu').querySelector('a:first-of-type')\n headerTitle = parentLink.getAttribute('title')\n }\n\n navHeaderTitle.textContent = headerTitle\n navHeader.classList.toggle('is-active', currentMenu !== undefined)\n nav.classList.toggle('is-active', currentMenu !== undefined)\n },\n\n handleResize: () => {\n if (window.matchMedia('(min-width: 1024px)').matches) {\n fn.closeMenu({ target: document.body })\n }\n },\n}\n\nexport default {\n can: () => document.contains(nav),\n run: fn.init,\n}\n","import Cookies from 'js-cookie'\nimport { on } from 'delegated-events'\n\nconst setCookie = (state) => {\n Cookies.set('widgetstate', state, {\n expires: 1,\n })\n}\n\nconst widget = document.querySelector('.site-widget')\n\nconst fn = {\n init: () => {\n on('click', '.site-widget-top', fn.handleToggle)\n\n const offset = widget.querySelector('.site-widget-top').offsetHeight\n\n if (Cookies.get('widgetstate') === 'inactive') {\n setTimeout(() => {\n widget.style.transform = `translate3d(0, calc(100% - ${offset}px), 0)`\n widget.setAttribute('aria-expanded', 'false')\n }, 25)\n setCookie('inactive')\n } else {\n widget.classList.add('no-animate')\n widget.style.transform = 'translate3d(0, 0, 0)'\n widget.setAttribute('aria-expanded', 'true')\n setCookie('active')\n\n setTimeout(() => {\n widget.classList.remove('no-animate')\n }, 750)\n }\n\n if (widget.classList.contains('has-auto-hide')) {\n setTimeout(() => {\n if (widget.getAttribute('aria-expanded') === 'true') {\n widget.style.transform = `translate3d(0, calc(100% - ${offset}px), 0)`\n widget.setAttribute('aria-expanded', 'false')\n setCookie('inactive')\n }\n }, 5000)\n }\n },\n\n handleToggle: () => {\n const offset = widget.querySelector('.site-widget-top').offsetHeight\n\n if (widget.getAttribute('aria-expanded') === 'false') {\n widget.style.transform = 'translate3d(0, 0, 0)'\n widget.setAttribute('aria-expanded', 'true')\n setCookie('active')\n } else {\n widget.style.transform = `translate3d(0, calc(100% - ${offset}px), 0)`\n widget.setAttribute('aria-expanded', 'false')\n setCookie('inactive')\n }\n },\n}\n\nexport default {\n can: () => widget,\n run: fn.init,\n}\n","import { Splide } from '@splidejs/splide'\nimport { AutoScroll } from '@splidejs/splide-extension-auto-scroll'\nimport '@splidejs/splide/dist/css/splide.min.css'\n\nconst sponsors = document.querySelector('.splide')\n\nconst fn = {\n init: () => {\n new Splide('.splide', {\n perPage: 5,\n perMove: 1,\n type: 'loop',\n arrows: false,\n gap: '2rem',\n pagination: false,\n autoWidth: true,\n easing: 'linear',\n autoScroll: {\n speed: 0.6,\n },\n breakpoints: {\n 1250: {\n gap: '10px',\n },\n },\n }).mount({ AutoScroll })\n },\n}\n\nexport default {\n can: () => sponsors,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport { slideToggle } from '../common/slide'\n\nconst fn = {\n init: () => {\n on('click', '[data-slide-toggle]', fn.handleToggle)\n on('keyup', '[data-slide-toggle]', fn.handleToggle)\n },\n\n handleToggle: (e) => {\n if (e.type === 'keyup' && e.keyCode !== 13) {\n return\n }\n\n const trigger = e.target.closest('[data-slide-toggle]')\n\n if (!trigger) {\n return\n }\n\n const target = document.getElementById(trigger.getAttribute('aria-controls'))\n\n if (!target) {\n return\n }\n\n if (trigger.getAttribute('aria-expanded') === 'false') {\n slideToggle(target)\n trigger.setAttribute('aria-expanded', 'true')\n trigger.parentNode.classList.add('is-active')\n } else {\n slideToggle(target).then(() => {\n trigger.parentNode.classList.remove('is-active')\n })\n\n trigger.setAttribute('aria-expanded', 'false')\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { isTouchDevice } from '../common/util'\nimport tippy from 'tippy.js'\nimport 'tippy.js/dist/tippy.css'\nimport 'tippy.js/themes/light.css'\n\nconst tooltips = document.querySelectorAll('[data-tippy]')\n\nconst fn = {\n init: () => {\n if (!isTouchDevice()) {\n tippy('[data-tippy]', {\n theme: 'light',\n arrow: true,\n delay: 40,\n })\n }\n },\n}\n\nexport default {\n can: () => tooltips.length,\n run: fn.init,\n}\n","// only run the function if countdown wrapper exists\nconst countdownElement = document.getElementsByClassName('countdown-wrapper')\nlet allowedToRun\n\nif (countdownElement.length > 0) {\n allowedToRun = true\n} else {\n allowedToRun = false\n}\n\nconst fn = {\n init: () => {\n let date = document.querySelector('#countdown').dataset.countdown\n let headlineAfter = document.querySelector('#countdownHeadline').dataset.after\n\n fn.startCountdown(date, headlineAfter)\n },\n\n startCountdown: (date, headline) => {\n const second = 1000,\n minute = second * 60,\n hour = minute * 60,\n day = hour * 24\n\n const countDown = new Date(date).getTime(),\n startCountdown = setInterval(function () {\n const now = new Date().getTime(),\n distance = countDown - now\n\n ;(document.getElementById('countdown-days').innerText = Math.floor(distance / day)),\n (document.getElementById('countdown-hours').innerText = Math.floor((distance % day) / hour)),\n (document.getElementById('countdown-minutes').innerText = Math.floor((distance % hour) / minute)),\n (document.getElementById('countdown-seconds').innerText = Math.floor((distance % minute) / second))\n\n //when date is reached\n if (distance < 0) {\n if (headline != null) {\n document.getElementById('countdownHeadline').innerText = headline\n } else {\n document.getElementById('countdownHeadline').innerText = ''\n }\n\n document.getElementById('countdown').style.display = 'none'\n\n if (document.getElementById('completionContent')) {\n document.getElementById('completionContent').style.display = 'block'\n }\n\n clearInterval(startCountdown)\n }\n }, 0)\n },\n}\n\nexport default {\n can: () => allowedToRun,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport {\n setCurrentPaymentMethod,\n setTotal,\n setupPayment,\n setupProcessingFees,\n handleInitialLoad,\n} from '../common/payments'\nimport { buildRules, validate } from '../common/validation'\n\nconst form = document.querySelector('form.donation-form')\nconst submitButton = form ? form.querySelector('[name=action_submit]') : null\nconst presetAmounts = form ? form.querySelectorAll('input[name=\"PresetAmount\"]') : null\nconst otherAmount = form ? form.querySelector('input[name=\"OtherAmount\"]') : null\nconst totalFields = form ? form.querySelectorAll('.donation-total-field') : null\n\nconst state = {\n currentPaymentMethod: null,\n stripe: null,\n stripeCard: null,\n stripeElements: null,\n paypal: null,\n paypalButtons: null,\n paymentRequest: null,\n currentTotal: 0,\n isRepeating: false,\n isPreset: true,\n}\n\nconst fn = {\n init: () => {\n state.stripe = window.Stripe(form.dataset.stripePubKey)\n fn.setupAmount()\n handleInitialLoad(state, form)\n setCurrentPaymentMethod(state, form)\n setupPayment(state, form)\n setupProcessingFees()\n fn.updatePayment()\n fn.setIsRepeating()\n fn.setIsPreset()\n fn.setupPaymentTypeVisibility()\n fn.setupPaymentSection()\n\n const presetAmount = document.querySelector('input[name=\"PresetAmount\"]:checked')\n\n if (presetAmount && presetAmount.value !== 'Other') {\n state.currentPaymentMethod = 'credit-card'\n state.currentTotal = presetAmount.value\n setTotal(state, presetAmount.value, totalFields, '$', '.00')\n }\n\n on('reset', 'form.donation-form', () => {\n const holder = document.getElementById('donation-form')\n\n if (holder) {\n holder.querySelectorAll('.form-content').forEach((x) => x.classList.add('hidden'))\n }\n })\n },\n\n updatePayment: () => {\n on('change', 'input[name=\"PaymentMethod\"]', () => {\n setCurrentPaymentMethod(state, form)\n setupPayment(state, form)\n })\n on('change', 'input[name=\"PresetAmount\"]', () => {\n setCurrentPaymentMethod(state, form)\n setupPayment(state, form)\n })\n on('change', 'input[name=\"DonationType\"]', () => {\n setCurrentPaymentMethod(state, form)\n setupPayment(state, form)\n })\n on('change', 'input[name=\"OtherAmount\"]', () => {\n setCurrentPaymentMethod(state, form)\n setupPayment(state, form)\n })\n },\n\n setIsRepeating: () => {\n on('change', 'input[name=\"DonationType\"]', () => {\n state.isRepeating = document.querySelector('input[value=\"Recurring\"]').checked\n })\n },\n\n setIsPreset: () => {\n on('change', 'input[name=\"PresetAmount\"]', () => {\n state.isPreset = !document.querySelector('input[value=\"Other\"]').checked\n })\n },\n\n setupPaymentTypeVisibility: () => {\n on('change', 'input[name=\"DonationType\"]', () => {\n //!state.isPreset && state.isRepeating\n state.isRepeating\n ? document.querySelector('li[data-key=\"paypal\"]').classList.add('hidden')\n : document.querySelector('li[data-key=\"paypal\"]').classList.remove('hidden')\n state.isRepeating\n ? document.querySelector('li[data-key=\"bitcoin\"]').classList.add('hidden')\n : document.querySelector('li[data-key=\"bitcoin\"]').classList.remove('hidden')\n state.isRepeating\n ? document.querySelector('li[data-key=\"apple-pay\"]').classList.add('hidden')\n : document.querySelector('li[data-key=\"apple-pay\"]').classList.remove('hidden')\n state.isRepeating\n ? document.querySelector('li[data-key=\"google-pay\"]').classList.add('hidden')\n : document.querySelector('li[data-key=\"google-pay\"]').classList.remove('hidden')\n })\n\n on('change', 'input[name=\"PresetAmount\"]', () => {\n //!state.isPreset && state.isRepeating\n state.isRepeating\n ? document.querySelector('li[data-key=\"paypal\"]').classList.add('hidden')\n : document.querySelector('li[data-key=\"paypal\"]').classList.remove('hidden')\n state.isRepeating\n ? document.querySelector('li[data-key=\"bitcoin\"]').classList.add('hidden')\n : document.querySelector('li[data-key=\"bitcoin\"]').classList.remove('hidden')\n state.isRepeating\n ? document.querySelector('li[data-key=\"apple-pay\"]').classList.add('hidden')\n : document.querySelector('li[data-key=\"apple-pay\"]').classList.remove('hidden')\n state.isRepeating\n ? document.querySelector('li[data-key=\"google-pay\"]').classList.add('hidden')\n : document.querySelector('li[data-key=\"google-pay\"]').classList.remove('hidden')\n })\n },\n\n setupPaymentSection: () => {\n const paymentFields = document.querySelector('.payment-fields')\n const paymentFieldsEmpty = document.querySelector('.payment-fields-empty')\n\n const formIsValid = () => {\n const rules = buildRules(form)\n const result = validate(form, rules)\n\n return result === undefined\n }\n\n const handleToggle = () => {\n const isValid = formIsValid()\n\n if (isValid) {\n paymentFields.classList.remove('hidden')\n paymentFieldsEmpty.classList.add('hidden')\n submitButton.disabled = false\n } else {\n paymentFields.classList.add('hidden')\n paymentFieldsEmpty.classList.remove('hidden')\n submitButton.disabled = true\n }\n }\n\n handleToggle()\n\n on('change', '.required-for-payment input', handleToggle, { capture: true })\n on('change', '.required-for-payment select', handleToggle, { capture: true })\n },\n\n setupAmount: () => {\n presetAmounts.forEach((radio) => {\n radio.addEventListener('change', () => {\n if (radio.checked) {\n let value = radio.value\n if (value !== 'Other') {\n setTotal(state, value, totalFields, '$', '.00')\n }\n }\n })\n })\n otherAmount.addEventListener('change', () => {\n presetAmounts.forEach((radio) => {\n if (radio.checked) {\n let value = radio.value\n if (value === 'Other') {\n const newValue = otherAmount.value\n setTotal(state, Number(newValue).toFixed(2), totalFields, '$', '')\n }\n }\n })\n })\n },\n}\n\nexport default {\n can: () => document.querySelectorAll('#donation-form').length,\n run: fn.init,\n}\n","const fn = {\n init: () => {\n document.querySelectorAll('.element-googlemaps').forEach((el) => fn.setupMapEmbed(el))\n },\n\n setupMapEmbed: (container) => {\n const mapHolder = container.querySelector('.google-map')\n\n if (!mapHolder) {\n return\n }\n\n const google = window.google\n const data = JSON.parse(mapHolder.dataset.json)\n const center = new google.maps.LatLng(data.lat, data.lng)\n\n const mapOptions = {\n center,\n zoom: 14,\n mapTypeId: google.maps.MapTypeId.ROADMAP,\n disableDefaultUI: true,\n scrollwheel: false,\n styles: [\n {\n featureType: 'poi',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n ],\n }\n\n const map = new google.maps.Map(mapHolder, mapOptions)\n\n google.maps.event.addListenerOnce(map, 'tilesloaded', () => {\n const marker = new google.maps.Marker({\n map: map,\n title: data.title,\n animation: google.maps.Animation.DROP,\n position: new google.maps.LatLng(data.lat, data.lng),\n })\n\n google.maps.event.addListener(marker, 'click', () => {\n window.open(data.mapLink)\n })\n })\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport { Swiper } from 'swiper'\n\nconst fn = {\n init: () => {\n document.querySelectorAll('.pets-slider').forEach((el) => fn.setupSlider(el))\n },\n\n setupSlider: (el) => {\n const container = el.querySelector('.swiper-container')\n const currentIndex = el.querySelector('.pets-slider-current-index')\n const numSlides = container.querySelectorAll('.swiper-slide').length\n\n const opts = {\n slidesPerView: 'auto',\n spaceBetween: 40,\n centeredSlides: true,\n slideToClickedSlide: true,\n loop: true,\n loopedSlides: numSlides,\n breakpoints: {\n 768: {\n spaceBetween: 0,\n centeredSlides: false,\n slidesOffsetAfter: 1000,\n },\n },\n on: {\n slideChangeTransitionStart: (swiper) => {\n if (currentIndex) {\n currentIndex.textContent = swiper.realIndex + 1\n }\n },\n },\n }\n\n if (numSlides > 1) {\n const swiper = new Swiper(container, opts)\n\n swiper.snapGrid = [...swiper.slidesGrid]\n\n on('click', '.pets-slider-button-prev', () => {\n swiper.slidePrev()\n })\n\n on('click', '.pets-slider-button-next', () => {\n swiper.slideNext()\n })\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport {\n setCurrentPaymentMethod,\n setTotal,\n setupPayment,\n setupProcessingFees,\n handleInitialLoad,\n} from '../common/payments'\n\nconst form = document.querySelector('form.membership-form')\nconst radios = form ? form.querySelectorAll('.membership-radio-group') : null\nconst totalFields = form ? form.querySelectorAll('.membership-total-field') : null\nconst processingFeeCheckBox = form ? form.querySelector('[name=\"IncludeProcessingFees\"]') : null\nconst submitButton = form ? form.querySelector('[name=action_submit]') : null\n\nconst state = {\n currentPaymentMethod: null,\n stripe: null,\n stripeCard: null,\n stripePlanId: null,\n paypal: null,\n paypalButtons: null,\n paypalPlanId: null,\n currentTotal: 0,\n isRepeating: true,\n}\n\nconst fn = {\n init: () => {\n state.stripe = window.Stripe(form.dataset.stripePubKey)\n fn.setupAmount()\n fn.updateSubscriptionPlan()\n handleInitialLoad(state, form)\n setCurrentPaymentMethod(state, form)\n setupPayment(state, form)\n setupProcessingFees()\n fn.updatePayment()\n\n on('reset', 'form.membership-form', () => {\n const holder = document.getElementById('membership-form')\n\n if (holder) {\n holder.querySelectorAll('.form-content').forEach((x) => x.classList.add('hidden'))\n }\n })\n },\n\n updatePayment: () => {\n on('change', 'input[name=\"PaymentMethod\"]', () => {\n setCurrentPaymentMethod(state, form)\n setupPayment(state, form)\n if (state.currentPaymentMethod !== 'credit-card') {\n submitButton.disabled = true\n } else {\n submitButton.disabled = false\n }\n })\n },\n\n updateSubscriptionPlan: () => {\n on('change', 'input[name=\"MembershipLevelID\"]', () => {\n fn.subscriptionIdCheck()\n })\n on('change', 'input[name=\"IncludeProcessingFees\"]', () => {\n fn.subscriptionIdCheck()\n })\n on('change', 'input[name=\"PaymentMethod\"]', () => {\n fn.subscriptionIdCheck()\n })\n },\n\n subscriptionIdCheck: () => {\n radios.forEach((radio) => {\n if (radio.classList.contains('checked')) {\n if (processingFeeCheckBox.checked) {\n state.stripePlanId = radio.querySelector('input[type=\"radio\"]').dataset.stripePriceFeeId\n state.paypalPlanId = radio.querySelector('input[type=\"radio\"]').dataset.paypalPlanFeeId\n } else {\n state.stripePlanId = radio.querySelector('input[type=\"radio\"]').dataset.stripePriceId\n state.paypalPlanId = radio.querySelector('input[type=\"radio\"]').dataset.paypalPlanId\n }\n setupPayment(state, form)\n }\n })\n },\n\n setupAmount: () => {\n radios.forEach((radio) => {\n radio.addEventListener('change', () => {\n if (radio.classList.contains('checked')) {\n const value = radio.dataset.amountValue.replace('.00', '').replace('$', '')\n setTotal(state, value, totalFields, '$', '.00')\n }\n })\n })\n },\n}\n\nexport default {\n can: () => document.querySelectorAll('#membership-form').length,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport { Swiper } from 'swiper'\n\nconst fn = {\n init: () => {\n document.querySelectorAll('.milestones-slider').forEach((el) => fn.setupSlider(el))\n },\n\n setupSlider: (el) => {\n const container = el.querySelector('.milestones-block-slider .swiper-container')\n const numSlides = container.querySelectorAll('.swiper-slide').length\n\n const opts = {\n slidesPerView: 'auto',\n spaceBetween: 40,\n centeredSlides: true,\n slideToClickedSlide: true,\n loop: true,\n loopedSlides: numSlides,\n breakpoints: {\n 768: {\n centeredSlides: false,\n slidesOffsetAfter: 1000,\n },\n },\n }\n\n if (numSlides > 1) {\n const swiper = new Swiper(container, opts)\n\n swiper.snapGrid = [...swiper.slidesGrid]\n\n on('click', '.milestones-slider-button-prev', () => {\n swiper.slidePrev()\n })\n\n on('click', '.milestones-slider-button-next', () => {\n swiper.slideNext()\n })\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport {\n setCurrentPaymentMethod,\n setTotal,\n setupPayment,\n setupProcessingFees,\n handleInitialLoad,\n} from '../common/payments'\n\nconst form = document.querySelector('form.sponsorship-form')\nconst amountField = form ? form.querySelector('select[name=\"Amount\"]') : null\nconst totalFields = form ? form.querySelectorAll('.sponsorship-total-field') : null\nconst processingFeeCheckBox = form ? form.querySelector('[name=\"IncludeProcessingFees\"]') : null\nconst submitButton = form ? form.querySelector('[name=action_submit]') : null\n\nconst state = {\n currentPaymentMethod: null,\n stripe: null,\n stripeCard: null,\n stripePlanId: null,\n paypal: null,\n paypalButtons: null,\n paypalPlanId: null,\n currentTotal: 0,\n isRepeating: true,\n}\n\nconst fn = {\n init: () => {\n state.stripe = window.Stripe(form.dataset.stripePubKey)\n fn.setupAmount()\n fn.updateSubscriptionPlan()\n handleInitialLoad(state, form)\n setCurrentPaymentMethod(state, form)\n setupPayment(state, form)\n setupProcessingFees(state)\n fn.updatePayment()\n\n on('reset', 'form.sponsorship-form', () => {\n const holder = document.getElementById('sponsorship-form')\n\n if (holder) {\n holder.querySelectorAll('.form-content').forEach((x) => x.classList.add('hidden'))\n }\n })\n },\n\n updatePayment: () => {\n on('change', 'input[name=\"PaymentMethod\"]', () => {\n setCurrentPaymentMethod(state, form)\n setupPayment(state, form)\n if (state.currentPaymentMethod !== 'credit-card') {\n submitButton.disabled = true\n } else {\n submitButton.disabled = false\n }\n })\n },\n\n updateSubscriptionPlan: () => {\n on('change', 'select[name=\"Amount\"]', () => {\n fn.subscriptionIdCheck()\n })\n on('change', 'input[name=\"IncludeProcessingFees\"]', () => {\n fn.subscriptionIdCheck()\n })\n on('change', 'input[name=\"PaymentMethod\"]', () => {\n fn.subscriptionIdCheck()\n })\n },\n\n subscriptionIdCheck: () => {\n if (processingFeeCheckBox.checked) {\n state.stripePlanId = document.getElementById(`plan-option-${amountField.value}`).dataset.stripePriceFeeId\n state.paypalPlanId = document.getElementById(`plan-option-${amountField.value}`).dataset.paypalPlanFeeId\n } else {\n state.stripePlanId = document.getElementById(`plan-option-${amountField.value}`).dataset.stripePriceId\n state.paypalPlanId = document.getElementById(`plan-option-${amountField.value}`).dataset.paypalPlanId\n }\n setupPayment(state, form)\n if (document.querySelectorAll('input[name=\"StripePlanID\"]').length) {\n const hiddenInput = document.querySelector('input[name=\"StripePlanID\"]')\n hiddenInput.setAttribute('value', state.stripePlanId)\n } else {\n const hiddenInput = document.createElement('input')\n hiddenInput.setAttribute('type', 'hidden')\n hiddenInput.setAttribute('name', 'StripePlanID')\n hiddenInput.setAttribute('value', state.stripePlanId)\n form.appendChild(hiddenInput)\n }\n },\n\n setupAmount: () => {\n on('change', 'select[name=\"Amount\"]', () => {\n const value = amountField.value\n value == 360\n ? setTotal(state, value, totalFields, '$', '/year')\n : setTotal(state, value, totalFields, '$', '/month')\n })\n },\n}\n\nexport default {\n can: () => document.querySelectorAll('#sponsorship-form').length,\n run: fn.init,\n}\n","import PropTypes from 'prop-types'\n\nfunction PetCard({ name, photo, petango_id, url }) {\n return (\n
    \n {name}\n\n
    \n
    \n\n
    \n
    {name}
    \n\n {petango_id &&
    ID #{petango_id}
    }\n\n
    \n \n \n \n \n Adopt Me\n \n
    \n
    \n
    \n \n )\n}\n\nPetCard.propTypes = {\n name: PropTypes.string,\n photo: PropTypes.string,\n petango_id: PropTypes.string,\n url: PropTypes.string,\n}\n\nexport default PetCard\n","import PropTypes from 'prop-types'\n\nfunction CheckboxFilter({ name, label, checked, handleFilter, setSearchingHousetrained }) {\n const handleChange = (e) => {\n handleFilter(name, e.target.checked ? '1' : '')\n setSearchingHousetrained(e.target.checked)\n }\n\n return (\n
    \n \n \n
    \n )\n}\n\nCheckboxFilter.propTypes = {\n name: PropTypes.string,\n label: PropTypes.string,\n checked: PropTypes.bool,\n handleFilter: PropTypes.func,\n setSearchingHousetrained: PropTypes.func,\n}\n\nexport default CheckboxFilter\n","import PropTypes from 'prop-types'\nimport easydropdown from 'easydropdown'\nimport { useEffect, useRef } from 'react'\n\nfunction SelectFilter({ name, value, options, placeholder, handleFilter }) {\n const ref = useRef()\n const eddRef = useRef()\n\n useEffect(() => {\n if (ref.current) {\n const edd = easydropdown(ref.current, {\n behavior: {\n liveUpdates: true,\n },\n })\n\n eddRef.current = edd\n\n ref.current.addEventListener('change', (e) => {\n handleFilter(e.target.name, e.target.value)\n })\n }\n\n return () => {\n eddRef.current.destroy()\n }\n }, [ref])\n\n return (\n \n )\n}\n\nSelectFilter.propTypes = {\n name: PropTypes.string,\n value: PropTypes.string,\n options: PropTypes.array,\n placeholder: PropTypes.string,\n handleFilter: PropTypes.func,\n}\n\nexport default SelectFilter\n","import PropTypes from 'prop-types'\nimport { useState, useEffect } from 'react'\n\nfunction FilterHeader({ isVisible, filters, handleReset, className }) {\n const [filterString, setFilterString] = useState('')\n\n useEffect(() => {\n const stringParts = []\n\n for (const [key, value] of Object.entries(filters)) {\n if (key === 'housetrained' && value !== '') {\n stringParts.push('Housetrained')\n continue\n }\n\n if (value !== '') {\n stringParts.push(value)\n }\n }\n\n setFilterString(stringParts.join(', '))\n }, [filters])\n\n if (!isVisible) {\n return null\n }\n\n return (\n
    \n
    \n Showing: {filterString}\n
    \n\n \n
    \n )\n}\n\nFilterHeader.propTypes = {\n isVisible: PropTypes.bool,\n isLoading: PropTypes.bool,\n filters: PropTypes.object,\n handleReset: PropTypes.func,\n className: PropTypes.string,\n}\n\nexport default FilterHeader\n","import PropTypes from 'prop-types'\n\nfunction ToggleSidebarButton({ isSidebarOpen, setIsSidebarOpen, className }) {\n return (\n setIsSidebarOpen(!isSidebarOpen)}\n >\n {isSidebarOpen ? 'Hide' : 'Show'} Filters\n\n {isSidebarOpen ? (\n \n \n \n ) : (\n \n \n \n )}\n \n )\n}\n\nToggleSidebarButton.propTypes = {\n isSidebarOpen: PropTypes.bool,\n setIsSidebarOpen: PropTypes.func,\n className: PropTypes.string,\n}\n\nexport default ToggleSidebarButton\n","import scrollTo from '../../common/scrollTo'\nimport PropTypes from 'prop-types'\nimport { useState, useEffect, useRef } from 'react'\nimport PetCard from './PetCard'\nimport CheckboxFilter from './CheckboxFilter'\nimport SelectFilter from './SelectFilter'\nimport FilterHeader from './FilterHeader'\nimport ToggleSidebarButton from './ToggleSidebarButton'\n\nconst initialFilters = {\n search: '',\n species: '',\n breed: '',\n age: '',\n gender: '',\n size: '',\n housetrained: '',\n}\n\nfunction App({ data }) {\n const initialLoad = useRef(true)\n const [searchTerm, setSearchTerm] = useState(initialFilters.search)\n const [searchingHousetrained, setSearchingHousetrained] = useState(initialFilters.housetrained !== '')\n const [isLoading, setIsLoading] = useState(false)\n const [isFiltered, setIsFiltered] = useState(false)\n const [isSidebarOpen, setIsSidebarOpen] = useState(false)\n const [filters, setFilters] = useState(initialFilters)\n const [resultsTotal, setResultsTotal] = useState(data.results_total)\n const [resultsHasMore, setResultsHasMore] = useState(data.results_has_more)\n const [resultsOffset, setResultsOffset] = useState(data.results_offset)\n const [pets, setPets] = useState(data.initial_pets)\n\n const handleLoadMore = () => {\n const url = new URL(`${data.endpoint}loadMore`)\n url.searchParams.append('offset', resultsOffset)\n\n for (const [key, value] of Object.entries(filters)) {\n url.searchParams.append(key, value)\n }\n\n setIsLoading(true)\n\n ajax\n .url(url.href)\n .get()\n .json((res) => {\n if (res.success) {\n setResultsOffset(res.results_offset)\n setResultsHasMore(res.results_has_more)\n setPets([...pets, ...res.pets])\n }\n })\n .finally(() => {\n setIsLoading(false)\n })\n }\n\n const handleFilter = (name, value) => {\n setFilters((prevState) => ({\n ...prevState,\n [name]: value,\n }))\n }\n\n const handleSearch = (e) => {\n e.preventDefault()\n\n const term = e.target.search.value\n const newFilters = { ...initialFilters }\n\n newFilters['search'] = term\n\n setFilters(newFilters)\n setSearchingHousetrained(false)\n }\n\n const handleReset = () => {\n const newFilters = { ...initialFilters }\n\n setFilters(newFilters)\n setSearchTerm('')\n setSearchingHousetrained(false)\n setIsFiltered(false)\n }\n\n useEffect(() => {\n if (initialLoad.current) {\n initialLoad.current = false\n return\n }\n\n const url = new URL(`${data.endpoint}fetchPets`)\n url.searchParams.append('offset', 0)\n\n for (const [key, value] of Object.entries(filters)) {\n url.searchParams.append(key, value)\n }\n\n setIsLoading(true)\n\n ajax\n .url(url.href)\n .get()\n .json((res) => {\n if (res.success) {\n setResultsOffset(res.results_offset)\n setResultsHasMore(res.results_has_more)\n setResultsTotal(res.results_total)\n setPets(res.pets)\n\n // Check if all filters are empty string\n setIsFiltered(!!Object.values(filters).some((x) => x !== null && x !== ''))\n }\n })\n .finally(() => {\n setIsLoading(false)\n\n if (window.matchMedia('(max-width: 767px)').matches) {\n setIsSidebarOpen(false)\n }\n\n scrollTo(\n document.querySelector('.adopt-pets-wrapper'),\n document.querySelector('.site-primary-header').offsetHeight\n )\n })\n }, [filters])\n\n return (\n
    \n
    \n \n 0}\n filters={filters}\n handleReset={handleReset}\n className=\"pl-5 lg:pl-10\"\n />\n
    \n
    \n
    \n \n\n
    \n 0}\n filters={filters}\n handleReset={handleReset}\n className=\"pb-8 md:hidden\"\n />\n\n {isLoading && (\n
    \n )}\n\n {pets.length === 0 ? (\n
    \n
    No pets found.
    \n \n
    \n ) : (\n <>\n
    \n {pets.map((pet) => (\n \n ))}\n
    \n\n
    \n
    \n {pets.length.toString().padStart(2, '0')}/{resultsTotal.toString().padStart(2, '0')}\n
    \n\n {resultsHasMore && (\n
    \n \n
    \n )}\n
    \n \n )}\n
    \n
    \n \n )\n}\n\nApp.propTypes = {\n data: PropTypes.object,\n}\n\nexport default App\n","import ReactDOM from 'react-dom'\n\nimport App from '@components/adopt'\n\nconst fn = {\n init: () => {\n const root = document.getElementById('adopt-app')\n\n if (root) {\n const data = JSON.parse(root.dataset.json)\n\n ReactDOM.render(, root)\n }\n },\n}\n\nexport default {\n can: () => document.body.classList.contains('adoption-app'),\n run: fn.init,\n}\n","import scrollTo from '../common/scrollTo'\n\nconst fn = {\n init: () => {\n const holder = document.querySelector('.adoption-form-holder')\n const urlParams = new URLSearchParams(window.location.search)\n const isFinished = window.location.href.indexOf('finished') > -1\n\n if (holder && (urlParams.get('MultiFormSessionID') || isFinished)) {\n scrollTo(holder)\n }\n },\n}\n\nexport default {\n can: () => document.body.classList.contains('pagetype-adoptionapplicationpage'),\n run: fn.init,\n}\n","import { isTouchDevice } from '../common/util'\nimport { slideDown, slideUp } from '../common/slide'\nimport { on } from 'delegated-events'\nimport hoverintent from 'hoverintent'\n\nlet scrollStart\n\nconst fn = {\n init: () => {\n document.querySelectorAll('.byg-pet-item').forEach((el) => {\n hoverintent(el, fn.handlePetEnter, fn.handlePetExit).options({\n interval: 20,\n })\n })\n\n if (isTouchDevice()) {\n on('touchstart', '.byg-pet-item', (e) => {\n scrollStart = e.touches[0].clientY\n })\n on('touchend', '.byg-pet-item', fn.handleTouch)\n }\n },\n\n handleTouch: (e) => {\n const item = e.target.closest('.byg-pet-item')\n\n const scrollDiff = Math.abs(e.changedTouches[0].clientY - scrollStart)\n\n if (item && scrollDiff < 10) {\n if (item.classList.contains('is-active') && e.target.closest('.byg-pet-image')) {\n fn.handlePetExit(e)\n\n return\n }\n\n if (!item.classList.contains('is-active')) {\n fn.handlePetEnter(e)\n\n return\n }\n }\n },\n\n handlePetEnter: (e) => {\n const item = e.target.closest('.byg-pet-item')\n const bio = item.querySelector('.byg-pet-bio')\n const image = item.querySelector('.byg-pet-image')\n\n if (item.classList.contains('is-active')) {\n return\n }\n\n const otherItems = document.querySelectorAll('.byg-pet-item.is-active')\n\n fn.closeOtherPets(otherItems)\n\n const imageRect = image.getBoundingClientRect()\n\n item.classList.add('is-active')\n item.classList.add('bio-bottom')\n bio.style.top = `${imageRect.height}px`\n\n slideDown(bio, 250)\n },\n\n handlePetExit: (e) => {\n const item = e.target.closest('.byg-pet-item')\n const bio = item.querySelector('.byg-pet-bio')\n\n if (e.relatedTarget && e.relatedTarget.closest('.byg-pet-item')) {\n return\n }\n\n slideUp(bio, 250).then(() => {\n item.classList.remove('is-active')\n item.classList.remove('bio-bottom')\n bio.style.bottom = null\n bio.style.top = null\n bio.style.display = null\n })\n },\n\n closeOtherPets: (others) => {\n others.forEach((el) => {\n fn.handlePetExit({ target: el, relatedTarget: document.documentElement })\n })\n },\n}\n\nexport default {\n can: () => document.body.classList.contains('pagetype-becauseyougivepage'),\n run: fn.init,\n}\n","import { on } from 'delegated-events'\n\nconst fn = {\n init: () => {\n on('change', '.price-list-selector select', fn.handlePriceList)\n },\n\n handlePriceList: (e) => {\n const priceList = document.querySelector(`[data-price-list=\"${e.target.value}\"]`)\n\n if (priceList) {\n document.querySelectorAll('.price-list').forEach((el) => el.classList.add('hidden'))\n priceList.classList.remove('hidden')\n }\n },\n}\n\nexport default {\n can: () => document.body.classList.contains('pagetype-servicepage'),\n run: fn.init,\n}\n","import { on } from 'delegated-events'\n\nconst fn = {\n init: () => {\n on('change', '.wish-list-selector select', fn.handleWishList)\n },\n\n handleWishList: (e) => {\n const pageHeaderLeadIn = document.querySelector('.page-header .page-header-lead-in')\n const pageHeaderImage = document.querySelector('.page-header .page-header-image img')\n\n const wishList = document.querySelector(`[data-wish-list-url=\"${e.target.value}\"]`)\n\n if (wishList) {\n const data = JSON.parse(wishList.dataset.wishList)\n\n if (pageHeaderLeadIn) {\n pageHeaderLeadIn.innerHTML = data.HeaderLeadIn\n }\n\n if (pageHeaderImage) {\n const newImage = document.createRange().createContextualFragment(data.HeaderImage)\n pageHeaderImage.parentNode.replaceChild(newImage, pageHeaderImage)\n }\n\n document.querySelectorAll('.wish-list-block').forEach((el) => el.classList.add('hidden'))\n wishList.classList.remove('hidden')\n\n const queryParams = new URLSearchParams(window.location.search)\n queryParams.set('list', wishList.dataset.wishListUrl)\n window.history.replaceState(null, null, `?${queryParams.toString()}`)\n }\n },\n}\n\nexport default {\n can: () => document.body.classList.contains('pagetype-wishlistpage'),\n run: fn.init,\n}\n","var map = {\n\t\"./components/animation.js\": 7587,\n\t\"./components/countUp.js\": 7160,\n\t\"./components/datepicker.js\": 7965,\n\t\"./components/dropdown.js\": 2064,\n\t\"./components/form.js\": 7577,\n\t\"./components/headerPetImages.js\": 4558,\n\t\"./components/mediaThumbnailSlider.js\": 3694,\n\t\"./components/modal.js\": 3568,\n\t\"./components/multistepform.js\": 9639,\n\t\"./components/pageHeader.js\": 7241,\n\t\"./components/photoGallery.js\": 9995,\n\t\"./components/quickLinkImages.js\": 632,\n\t\"./components/scrollTo.js\": 9644,\n\t\"./components/siteAnnouncement.js\": 7754,\n\t\"./components/siteHeader.js\": 6835,\n\t\"./components/siteNavigation.js\": 1547,\n\t\"./components/siteWidget.js\": 1596,\n\t\"./components/slickSlider.js\": 2497,\n\t\"./components/slideToggle.js\": 7369,\n\t\"./components/tooltip.js\": 3341,\n\t\"./elements/countdown.js\": 726,\n\t\"./elements/donationForm.js\": 7730,\n\t\"./elements/googleMaps.js\": 1729,\n\t\"./elements/meetOurPets.js\": 6485,\n\t\"./elements/membershipForm.js\": 5074,\n\t\"./elements/milestones.js\": 6763,\n\t\"./elements/sponsorshipForm.js\": 8148,\n\t\"./sections/adopt.js\": 2570,\n\t\"./sections/adoptionApplication.js\": 6878,\n\t\"./sections/becauseYouGive.js\": 1620,\n\t\"./sections/priceList.js\": 6745,\n\t\"./sections/wishList.js\": 6321\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 6000;"],"sourceRoot":""}