{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./api/api-handler.js","webpack:///./api/api-service.js","webpack:///./api/routes/OAB/index.js","webpack:///./api/routes/OAB/OAB/index.js","webpack:///./api/routes/account/AddNewPaymentMethod/index.js","webpack:///./api/routes/account/GetPaymentMethods/index.js","webpack:///./api/routes/account/RemovePaymentMethod/index.js","webpack:///./api/routes/account/SetDefaultPaymentMethod/index.js","webpack:///./api/routes/account/UpdatePaymentMethod/index.js","webpack:///./api/routes/account/UpdateVetSourceOrderId/index.js","webpack:///./api/routes/account/addpaymentmethod/index.js","webpack:///./api/routes/account/index.js","webpack:///./api/routes/cart/AddBillingAndPaymentMethodToCart/index.js","webpack:///./api/routes/cart/addexistingpaymentmethod/index.js","webpack:///./api/routes/cart/addline/index.js","webpack:///./api/routes/cart/addshippingmethod/index.js","webpack:///./api/routes/cart/getbillinginformation/index.js","webpack:///./api/routes/cart/getshippinginformation/index.js","webpack:///./api/routes/cart/index.js","webpack:///./api/routes/cart/selectoraddaddress/index.js","webpack:///./api/routes/cart/selectoraddbillingaddress/index.js","webpack:///./api/routes/ccde-api/agree-post/index.js","webpack:///./api/routes/ccde-api/confirm-challenge/index.js","webpack:///./api/routes/ccde-api/enroll-post/index.js","webpack:///./api/routes/ccde-api/expire-membership/index.js","webpack:///./api/routes/ccde-api/get-agreement/index.js","webpack:///./api/routes/ccde-api/get-appt-flow-settings/index.js","webpack:///./api/routes/ccde-api/get-challenge/index.js","webpack:///./api/routes/ccde-api/get-hospitals/index.js","webpack:///./api/routes/ccde-api/get-plan/index.js","webpack:///./api/routes/ccde-api/index.js","webpack:///./api/routes/fah-hospital/index.js","webpack:///./api/routes/fah-hospital/fah-hospital/index.js","webpack:///./api/routes/fah-hospital/first-available-slot/index.js","webpack:///./api/routes/findAHospital/index.js","webpack:///./api/routes/findAHospital/findAHospital/index.js","webpack:///./api/routes/findAHospitalNCA/findAHospitalNCA/index.js","webpack:///./api/routes/findAHospitalNCA/getCoupon/index.js","webpack:///./api/routes/findAHospitalNCA/index.js","webpack:///./api/routes/myvca-api/careclub-invoices/index.js","webpack:///./api/routes/myvca-api/confirm-challenge/index.js","webpack:///./api/routes/myvca-api/get-challenge/index.js","webpack:///./api/routes/myvca-api/get-google-userInfo/index.js","webpack:///./api/routes/myvca-api/get-hospitals/index.js","webpack:///./api/routes/myvca-api/get-pet-subscriptions/index.js","webpack:///./api/routes/myvca-api/index.js","webpack:///./api/routes/myvca-api/invoices/index.js","webpack:///./api/routes/myvca-api/send-password-reset/index.js","webpack:///./api/routes/myvca-api/update-emergency-contact/index.js","webpack:///./api/routes/myvca-api/update-pet-profile-image/index.js","webpack:///./api/routes/myvca-api/update-primary-address/index.js","webpack:///./api/routes/myvca-api/update-primary-contact/index.js","webpack:///./api/routes/myvca-api/update-subscription-address/index.js","webpack:///./api/routes/myvca-api/update-subscription-payment/index.js","webpack:///./api/routes/myvca-api/update-subscription/index.js","webpack:///./api/routes/newsletter-archive/index.js","webpack:///./api/routes/newsletter-archive/GetNewsletters/index.js","webpack:///./api/routes/oab-api/book-draft-appointment/index.js","webpack:///./api/routes/oab-api/confirm-book-appointment/index.js","webpack:///./api/routes/oab-api/confirm-challenge/index.js","webpack:///./api/routes/oab-api/get-all-resource-slots/index.js","webpack:///./api/routes/oab-api/get-appt-flow-settings/index.js","webpack:///./api/routes/oab-api/get-challenge/index.js","webpack:///./api/routes/oab-api/get-first-available-resource/index.js","webpack:///./api/routes/oab-api/get-slots-by-resource-id/index.js","webpack:///./api/routes/oab-api/get-wellness-options/index.js","webpack:///./api/routes/oab-api/index.js","webpack:///./api/routes/orders/index.js","webpack:///./api/routes/orders/orderlisting/index.js","webpack:///./api/routes/orders/update-order-details/index.js","webpack:///./api/routes/quickview/index.js","webpack:///./api/routes/quickview/quickview/index.js","webpack:///./api/routes/raa-api/confirm-book-appointment/index.js","webpack:///./api/routes/raa-api/get-reqappt-flow-settings/index.js","webpack:///./api/routes/raa-api/index.js","webpack:///./api/routes/relatedProducts/index.js","webpack:///./api/routes/relatedProducts/getRelatedProducts/index.js","webpack:///./js/components/50-50.js","webpack:///./js/components/CCDE/ccde-create-elements.js","webpack:///./js/components/CCDE/ccde-form.js","webpack:///./js/components/CCDE/ccde-payment-capture.js","webpack:///./js/components/CCDE/templates/index.js","webpack:///./js/components/NCA/NCA--quick-zip-promo.js","webpack:///./js/components/OAB/oab-create-elements.js","webpack:///./js/components/OAB/oab-first-available.js","webpack:///./js/components/OAB/oab-from.js","webpack:///./js/components/OAB/templates/index.js","webpack:///./js/components/PCC/PCC-video-listing.js","webpack:///./js/components/abstracts.js","webpack:///./js/components/accordion.js","webpack:///./js/components/account/activate-account-setup.js","webpack:///./js/components/account/forgot-password.js","webpack:///./js/components/account/guest-account-setup.js","webpack:///./js/components/account/reset-password.js","webpack:///./js/components/add-payment-with-address.js","webpack:///./js/components/add-payment.js","webpack:///./js/components/add-to-calendar.js","webpack:///./js/components/add-to-cart.js","webpack:///./js/components/address-book/address-book-defaults.js","webpack:///./js/components/address-book/address-book-form.js","webpack:///./js/components/address-book/address-book-line.js","webpack:///./js/components/address-book/address-book.js","webpack:///./js/components/address-book/templates/address-book-form/address-book-form.html","webpack:///./js/components/address-book/templates/address-book-form/index.js","webpack:///./js/components/address-book/templates/address-book-line/address-book-line.html","webpack:///./js/components/address-book/templates/address-book-line/index.js","webpack:///./js/components/address-book/templates/address-book/address-book.html","webpack:///./js/components/address-book/templates/address-book/index.js","webpack:///./js/components/address-validation/address-validation-defaults.js","webpack:///./js/components/address-validation/address-validation.js","webpack:///./js/components/address-validation/templates/address-validation.html","webpack:///./js/components/address-validation/templates/index.js","webpack:///./js/components/ajax-loader/ajax-loader.js","webpack:///./js/components/ajax-loader/templates/index.js","webpack:///./js/components/alert-banner.js","webpack:///./js/components/article-slider.js","webpack:///./js/components/brand-pillars.js","webpack:///./js/components/breed-filters.js","webpack:///./js/components/cart-landing/cart-autoship.js","webpack:///./js/components/cart-landing/cart-landing.js","webpack:///./js/components/cart-landing/cart-line.js","webpack:///./js/components/cart-landing/cart-mapping.js","webpack:///./js/components/cart-landing/cart-modal.js","webpack:///./js/components/cart-landing/cart-summary.js","webpack:///./js/components/cart-landing/templates/cart-autoship/cart-autoship.html","webpack:///./js/components/cart-landing/templates/cart-autoship/index.js","webpack:///./js/components/cart-landing/templates/cart-landing/index.js","webpack:///./js/components/cart-landing/templates/cart-line/cart-line.html","webpack:///./js/components/cart-landing/templates/cart-line/index.js","webpack:///./js/components/cart-landing/templates/cart-modal/cart-modal.html","webpack:///./js/components/cart-landing/templates/cart-modal/index.js","webpack:///./js/components/cart-landing/templates/cart-summary/cart-summary.html","webpack:///./js/components/cart-landing/templates/cart-summary/index.js","webpack:///./js/components/category-slider.js","webpack:///./js/components/checkout/billing-addresss-form-cc.js","webpack:///./js/components/checkout/checkout-address-form-cc.js","webpack:///./js/components/checkout/checkout-address-form.js","webpack:///./js/components/checkout/checkout-applied-promo.js","webpack:///./js/components/checkout/checkout-billing.js","webpack:///./js/components/checkout/checkout-defaults.js","webpack:///./js/components/checkout/templates/checkout-line/index.js","webpack:///./js/components/checkout/checkout-line.js","webpack:///./js/components/checkout/checkout-payment-form.js","webpack:///./js/components/checkout/checkout-promo.js","webpack:///./js/components/checkout/templates/checkout-review-summary/index.js","webpack:///./js/components/checkout/checkout-review-summary.js","webpack:///./js/components/checkout/checkout-review.js","webpack:///./js/components/checkout/checkout-shipping.js","webpack:///./js/components/checkout/checkout-summary-promos.js","webpack:///./js/components/checkout/checkout-summary.js","webpack:///./js/components/checkout/templates/billing-address-form-cc/billing-address-form-cc.html","webpack:///./js/components/checkout/templates/billing-address-form-cc/index.js","webpack:///./js/components/checkout/templates/checkout-address-form-cc/checkout-address-form-cc.html","webpack:///./js/components/checkout/templates/checkout-address-form-cc/index.js","webpack:///./js/components/checkout/templates/checkout-address-form/checkout-address-form.html","webpack:///./js/components/checkout/templates/checkout-address-form/index.js","webpack:///./js/components/checkout/templates/checkout-applied-promo/checkout-applied-promo.html","webpack:///./js/components/checkout/templates/checkout-applied-promo/index.js","webpack:///./js/components/checkout/templates/checkout-billing/checkout-billing.html","webpack:///./js/components/checkout/templates/checkout-billing/index.js","webpack:///./js/components/checkout/templates/checkout-line/checkout-line.html","webpack:///./js/components/checkout/templates/checkout-payment-form/checkout-payment-form.html","webpack:///./js/components/checkout/templates/checkout-payment-form/index.js","webpack:///./js/components/checkout/templates/checkout-promo/checkout-promo.html","webpack:///./js/components/checkout/templates/checkout-promo/index.js","webpack:///./js/components/checkout/templates/checkout-review-summary/checkout-review-summary.html","webpack:///./js/components/checkout/templates/checkout-review/checkout-review.html","webpack:///./js/components/checkout/templates/checkout-review/index.js","webpack:///./js/components/checkout/templates/checkout-shipping/checkout-shipping.html","webpack:///./js/components/checkout/templates/checkout-shipping/index.js","webpack:///./js/components/checkout/templates/checkout-summary-promos/checkout-summary-promos.html","webpack:///./js/components/checkout/templates/checkout-summary-promos/index.js","webpack:///./js/components/checkout/templates/checkout-summary/checkout-summary.html","webpack:///./js/components/checkout/templates/checkout-summary/index.js","webpack:///./js/components/coveo-analytics.js","webpack:///./js/components/coveo-scripts-articles.js","webpack:///./js/components/coveo-scripts-plp.js","webpack:///./js/components/custom-forms/form-loading-sitecore.js","webpack:///./js/components/custom-forms/form-loading.js","webpack:///./js/components/custom-forms/formatted-date-time.js","webpack:///./js/components/custom-forms/new-client-first-exam.js","webpack:///./js/components/custom-forms/vca-step-section-from.js","webpack:///./js/components/dashboard/appt-tooltip.js","webpack:///./js/components/dashboard/cards-carousel.js","webpack:///./js/components/dashboard/header-components.js","webpack:///./js/components/dashboard/pet-photo.js","webpack:///./js/components/dashboard/pets-dropdown.js","webpack:///./js/components/feature-bar-parallax.js","webpack:///./js/components/find-a-hospital/NCA-find-a-hospital.js","webpack:///./js/components/find-a-hospital/OAB-find-a-hospital.js","webpack:///./js/components/find-a-hospital/find-a-hospital-ca.js","webpack:///./js/components/find-a-hospital/find-a-search.js","webpack:///./js/components/find-a-hospital/uc-find-a-hospital.js","webpack:///./js/components/footer.js","webpack:///./js/components/grabber.js","webpack:///./js/components/home-redirect-device.js","webpack:///./js/components/hospital-action-panel.js","webpack:///./js/components/hospital-header/header-modals.js","webpack:///./js/components/hospital-header/header-site-search.js","webpack:///./js/components/hospital-header/mobile-header-nav.js","webpack:///./js/components/hospital-threecard-carousel.js","webpack:///./js/components/how-to-videos/how-to-videos.js","webpack:///./js/components/inline-search.js","webpack:///./js/components/join-our-newsletter.js","webpack:///./js/components/listbox.js","webpack:///./js/components/location-accordian/location-accordian.js","webpack:///./js/components/login.js","webpack:///./js/components/map-frame.js","webpack:///./js/components/mega-nav/mega-nav-item.js","webpack:///./js/components/mega-nav/mega-nav.js","webpack:///./js/components/mega-nav/mobile-mega-nav.js","webpack:///./js/components/mega-nav/tempates/index.js","webpack:///./js/components/menu.js","webpack:///./js/components/metadata/canonical-url.js","webpack:///./js/components/mini-cart/mini-cart-defaults.js","webpack:///./js/components/mini-cart/mini-cart-line.js","webpack:///./js/components/mini-cart/mini-cart-toggle.js","webpack:///./js/components/mini-cart/mini-cart.js","webpack:///./js/components/mini-cart/templates/mini-cart-line/index.js","webpack:///./js/components/mini-cart/templates/mini-cart-line/mini-cart-line.html","webpack:///./js/components/mini-cart/templates/mini-cart-toggle/index.js","webpack:///./js/components/mini-cart/templates/mini-cart/index.js","webpack:///./js/components/mini-cart/templates/mini-cart/mini-cart.html","webpack:///./js/components/mobile-peek-slider.js","webpack:///./js/components/multi-promo/multi-promo-link.js","webpack:///./js/components/mutli-promo.js","webpack:///./js/components/myVCA/account-change-hospital.js","webpack:///./js/components/myVCA/account-settings.js","webpack:///./js/components/myVCA/care-club-invoices.js","webpack:///./js/components/myVCA/care-club-membership.js","webpack:///./js/components/myVCA/expert-guidance.js","webpack:///./js/components/myVCA/individual-pet-profile.js","webpack:///./js/components/myVCA/invoice-history.js","webpack:///./js/components/myVCA/manage-subscriptions-list.js","webpack:///./js/components/myVCA/manage-subscriptions.js","webpack:///./js/components/myVCA/navigation-tabs.js","webpack:///./js/components/myVCA/patient-documents.js","webpack:///./js/components/myVCA/payment-management.js","webpack:///./js/components/myVCA/upload-pet-profile-image.js","webpack:///./js/components/navigable-tile.js","webpack:///./js/components/news-letter-cta.js","webpack:///./js/components/newsletter-archive/newsletter-archive.js","webpack:///./js/components/order-history/order-details-fulfillment.js","webpack:///./js/components/order-history/order-history-defaults.js","webpack:///./js/components/order-history/order-history-line.js","webpack:///./js/components/order-history/order-history.js","webpack:///./js/components/order-history/order-select-box.js","webpack:///./js/components/order-history/templates/order-history-line/index.js","webpack:///./js/components/order-history/templates/order-history-line/order-history-line.html","webpack:///./js/components/paid-media/paid-media.js","webpack:///./js/components/pdp-selector/pdp-add-to-cart-freq.js","webpack:///./js/components/pdp-selector/pdp-add-to-cart.js","webpack:///./js/components/pdp-selector/pdp-freq-modal-item.js","webpack:///./js/components/pdp-selector/pdp-frequently-bought-together.js","webpack:///./js/components/pdp-selector/pdp-info-tabs.js","webpack:///./js/components/pdp-selector/pdp-login.js","webpack:///./js/components/pdp-selector/pdp-mappings.js","webpack:///./js/components/pdp-selector/pdp-quick-view.js","webpack:///./js/components/pdp-selector/pdp-selector.js","webpack:///./js/components/pdp-selector/pdp-slider.js","webpack:///./js/components/pdp-selector/templates/pdp-add-to-cart-freq/index.js","webpack:///./js/components/pdp-selector/templates/pdp-add-to-cart-freq/pdp-add-to-cart.html","webpack:///./js/components/pdp-selector/templates/pdp-add-to-cart/index.js","webpack:///./js/components/pdp-selector/templates/pdp-add-to-cart/pdp-add-to-cart.html","webpack:///./js/components/pdp-selector/templates/pdp-freq-bought-item/index.js","webpack:///./js/components/pdp-selector/templates/pdp-freq-bought-item/pdp-freq-bought-item.html","webpack:///./js/components/pdp-selector/templates/pdp-freq-bought/index.js","webpack:///./js/components/pdp-selector/templates/pdp-freq-bought/pdp-freq-bought.html","webpack:///./js/components/pdp-selector/templates/pdp-info-tabs/index.js","webpack:///./js/components/pdp-selector/templates/pdp-info-tabs/pdp-info-tabs.html","webpack:///./js/components/pdp-selector/templates/pdp-login/index.js","webpack:///./js/components/pdp-selector/templates/pdp-login/pdp-login.html","webpack:///./js/components/pdp-selector/templates/pdp-quickshop/index.js","webpack:///./js/components/pdp-selector/templates/pdp-quickshop/pdp-selector.html","webpack:///./js/components/pdp-selector/templates/pdp-selector/index.js","webpack:///./js/components/pdp-selector/templates/pdp-selector/pdp-selector.html","webpack:///./js/components/pdp-selector/templates/pdp-slider/index.js","webpack:///./js/components/pdp-selector/templates/pdp-slider/pdp-slider-modal.html","webpack:///./js/components/pdp-selector/templates/pdp-slider/pdp-slider.html","webpack:///./js/components/pill-filters.js","webpack:///./js/components/press-article-listing.js","webpack:///./js/components/print.js","webpack:///./js/components/product-card.js","webpack:///./js/components/product-walkthrough.js","webpack:///./js/components/promo-tile-container.js","webpack:///./js/components/quantity-selector/quantity-selector.js","webpack:///./js/components/quantity-selector/templates/index.js","webpack:///./js/components/quantity-selector/templates/quantity-selector.html","webpack:///./js/components/referral-form.js","webpack:///./js/components/referral-interactive.js","webpack:///./js/components/request-appt-form/raa-create-elements.js","webpack:///./js/components/request-appt-form/request-appt-form.js","webpack:///./js/components/request-appt-form/templates/index.js","webpack:///./js/components/return-to-top/back-to-top.js","webpack:///./js/components/return-to-top/templates/back-to-top.html","webpack:///./js/components/return-to-top/templates/index.js","webpack:///./js/components/rotating-banner.js","webpack:///./js/components/scrollToLink.js","webpack:///./js/components/select-box/select-box.js","webpack:///./js/components/select-box/templates/index.js","webpack:///./js/components/service-slider.js","webpack:///./js/components/shop-landing/shop-50-50.js","webpack:///./js/components/single-slide-slider.js","webpack:///./js/components/stats-interactive.js","webpack:///./js/components/story-carousel.js","webpack:///./js/components/subscriptions/delivery-address.js","webpack:///./js/components/subscriptions/payment-method.js","webpack:///./js/components/subscriptions/templates/delivery-address/delivery-address.html","webpack:///./js/components/subscriptions/templates/delivery-address/index.js","webpack:///./js/components/subscriptions/templates/payment-method/index.js","webpack:///./js/components/subscriptions/templates/payment-method/payment-method.html","webpack:///./js/components/tabbed-content/50-50-caret.js","webpack:///./js/components/tabbed-content/tabbed-cont.js","webpack:///./js/components/tabbed-content/tabbed-img-content.js","webpack:///./js/components/tooltips.js","webpack:///./js/components/type-search/type-search.js","webpack:///./js/components/ups-copyright/templates/index.js","webpack:///./js/components/ups-copyright/templates/ups-copyright.html","webpack:///./js/components/ups-copyright/ups-copyright.js","webpack:///./js/components/urgent-care/uc-vwr-form.js","webpack:///./js/components/urgent-care/uc-wait-time.js","webpack:///./js/components/vca-voice/current-stories.js","webpack:///./js/components/vetsouce-banner/vetsource-banner-modal.js","webpack:///./js/components/white-papers-slider.js","webpack:///./js/datalayer/components/cart-datalayer.js","webpack:///./js/datalayer/components/ccde-datalayer.js","webpack:///./js/datalayer/components/checkout-confirmation-datalayer.js","webpack:///./js/datalayer/components/dashboard-dataLayer.js","webpack:///./js/datalayer/components/mini-cart-datalayer.js","webpack:///./js/datalayer/components/myvca-account.js","webpack:///./js/datalayer/components/nca-offer-datalayer.js","webpack:///./js/datalayer/components/oab-datalayer.js","webpack:///./js/datalayer/components/product-card-datalayer.js","webpack:///./js/datalayer/components/product-datalayer.js","webpack:///./js/datalayer/components/product-details-datalayer.js","webpack:///./js/datalayer/components/raa-datalayer.js","webpack:///./js/datalayer/components/refer-a-patient-promo-tile.js","webpack:///./js/datalayer/components/subscriptions.js","webpack:///./js/datalayer/components/uc-find-a-hosptial.js","webpack:///./js/datalayer/components/veterinarian-recommendations.js","webpack:///./js/datalayer/index.js","webpack:///./js/datalayer/utils/push.js","webpack:///./js/index-ca.js","webpack:///./js/polyfills/polyfills.js","webpack:///./api/routes/account/AddOrEditCustomerAddress/index.js","webpack:///./api/routes/account/GetCustomerAddresses/index.js","webpack:///./api/routes/account/DeleteCustomerAddress/index.js","webpack:///./api/routes/account/SetCustomerAddressAsPrimary/index.js","webpack:///./js/stores/address-book/address-book-store.js","webpack:///./api/routes/cart/addMultipleline/index.js","webpack:///./api/routes/cart/submit/index.js","webpack:///./api/routes/shop/index.js","webpack:///./api/routes/shop/checkout/index.js","webpack:///./api/routes/shop/checkout/cart/index.js","webpack:///./api/routes/cart/removeline/index.js","webpack:///./api/routes/cart/removepromotion/index.js","webpack:///./api/routes/cart/updateline/index.js","webpack:///./api/routes/cart/validateandaddpromotion/index.js","webpack:///./js/stores/cart/cart-store.js","webpack:///./js/utils/set-readonly.js","webpack:///./js/stores/store.js","webpack:///./js/utils/countdown-timer.js","webpack:///./js/utils/filters.js","webpack:///./js/utils/focus-trap.js","webpack:///./js/utils/force-async.js","webpack:///./js/utils/get-focusable.js","webpack:///./js/utils/is-experience-editor.js","webpack:///./js/utils/is-function.js","webpack:///./js/utils/key-codes.js","webpack:///./js/utils/login-redirect.js","webpack:///./js/utils/match-media.js","webpack:///./js/utils/metadata-utils.js","webpack:///./js/utils/parse-rendering-context.js","webpack:///./js/utils/price-string.js","webpack:///./js/utils/reactive-component.js","webpack:///./js/utils/request-animation-frame.js","webpack:///./js/utils/shared-parent.js","webpack:///./js/utils/states.js","webpack:///./js/vendor/bluefin.js","webpack:///./js/vendor/jquery-slick-filterable.js","webpack:///./scss/_exports.scss"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","Response","cancelled","error","status","success","IsPaymentFailureFF","FeatureFlags","IsAccountLocked","Error","this","httpSuccess","response","obj","props","filter","prop","hasOwnProperties","Data","ErrorMessage","Success","loginRedirect","RedirectUrl","httpError","err","message","msg","errors","request","str","toJSON","e","isJson","isCancel","callback","api","axios","CancelToken","CancelTokenSource","source","route","host","cancelHandler","params","slug","config","cancel","cancelToken","handler","post","put","delete","executor","url","ApiService","FindH","accountUrl","cartUrl","ccdeUrl","findH","myVCAURL","oabUrl","ordersUrl","catalogUrl","raaUrl","relatedProductsUrl","ELEMENT_IMAGE","CLASS_NAME","$rootEl","$","each","index","$el","eq","firstColClasses","find","attr","includes","addClass","fiftyFiftyFooter","html","trim","remove","createNewPet","newPets","newPetBody","console","log","newPetItems","item","SexId","CareClubPlan","templates","displayName","Name","prepend","createExistPetBtns","existPets","existPetBody","existPetItems","SpeciesId","IsCareClubMember","gender","imgURL","PetPhoto","petId","Id","careClub","IsPatientCareClubMember","species","SpeciesName","isMember","genderId","createPetTypeBtns","petTypes","petTypetBody","othersListy","catTypesItems","dogTypesItems","DisplayName","IconBaseUrl","imgURL2","IconHoverUrl","speciesId","show","populatedBreedsList","breedsList","selectBreedEl","breedsListObj","createVerifyInputs","petName","verifyBody","petInputs","createServiceBtn","services","serviceList","servicesDesc","servicesAry","serviceDescAry","ServiceName","Icon","serviceId","ServiceId","ind","desc","Description","createHospitalList","hospitals","hospitalDesc","hospitalsAry","id","HospitalId","isExistingPet","standardPlanName","ccdePetAge","ccdePetChangedAge","isCareClubLoggedin","VCA","isEnrollAnotherPet","isMultipetFeature","isPaymentCaptureCcdeEnabled","isAccessPlan","timesToTry","count","accessPlan","standardPlan","planValue","planLists","isBindPlanServices","CareClubForm","ui","careClubInfo","clearCache","val","removeClass","$welcome","hospitalIDValue","hospitalType","zipRadius","location","href","match","urlParams","URLSearchParams","decodeURIComponent","search","entries","toLowerCase","indexOf","$abandonLink","showLoader","hospitalId","settings","query","$IsMultiPetFeatureEnabled","$sections","hide","$errorStep","hideLoader","text","ccdeDatalayer","datalayerPushStepChange","bindHospitalNameAddressValue","isLoggedIn","IsLoggedIn","isPrimaryHospital","IsPrimaryHospital","hospitalName","HospitalName","Species","Breeds","HospitalType","hospitalPhoneNumber","HospitalPrimaryPhoneNumber","requestAnAppointmentUrl","RequestAnAppointmentUrl","bookAnAppointmentUrl","BookAnAppointmentUrl","startsWith","$hospitalPhoneNum","createDynamicRedirectButtons","existPet","Client","Pets","res","clientInfo","clientId","ClientId","$loginLink","$selectExistPet","createEl","createPersonalInfoStep","CareClubDigitalEnrollExpirationInDays","$selectPet","othersList","HospitalAddressLine1","HospitalAddressLine2","HospitalCity","HospitalState","HospitalZipCode","MapLink","addressParts","Boolean","address","join","careClubDigitalEnrollExpirationInDays","$planSelectorTermLink","$petReview","updateProgresBar","FirstName","firstName","LastName","lastName","Address1","Address2","address2","City","city","StateCode","state","Zip","zip","PhoneNumber","phoneDigitsOnly","Email","email","PetAge","petAge","PetName","sexId","BreedId","petBreedId","IsMultiPetFeatureEnabled","getChallenge","PatientId","IsExisting","Settings","pet","map","IsWellnessMembershipPending","ChallengeResponse","petNameChallenge","challengeSetId","petNameChallengeId","addressChallenge","addressChallengeId","gapLength","spaces","Array","preGap","postGap","$verifyStep","empty","choices","on","is","postEnrollPlan","challengeSuccessful","ChallengeSetId","AddressChallengeId","AddressChallengeAnswer","addressChallengeAnswer","PetNameChallengeId","PetNameChallengeAnswer","petNameChallengeAnswer","confirmChallenge","ChallengeSuccessful","clearPetInformation","$incorrect","PetAgeMonths","IsFeatureEnabled","$IsFeatureEnabled","getPlan","filteredObj","flags","Key","Value","IsSuccess","InputErrorMessages","PlanName","planid","PlanId","createPlanStep","planName","split","planInfo","scrollTop","Services","$paymentCapture","MonthlyPrice","InitiationFee","$serviceStep","AnnualPrice","updateSeciton","targetValue","progressValue","$progressBar","css","updateBackBtn","backStepValue","searchInProgress","isInProgess","hospitalLoader","findHospitals","coordinates","hosptialDesc","accessPlanExists","pathname","payload","minLat","maxLat","minLong","minLng","maxLong","maxLng","speciesid","accessplan","getHospitals","undefined","primaryEmail","ClientEmails","IsPrimary","primaryPhone","ClientPhones","phone","IsPrimaryContact","primaryAddress","Addresses","IsMailingAddress","$confirmInfo","AddressLine1","AddressLine2","State","ZipCode","updatePetInfo","petInfo","petSpecies","petBreed","BreedNames","Age","petAgeDataLayerFormat","petGender","Sex","petSpayed","Neutered","ageAry","months","weekToMonth","yearsandmonths","parseFloat","petsAgeMonth","bindComfirmPlanClick","preventDefault","enroll","GenericServiceErrorMessage","membershipId","createAgreementStep","agree","iframe","document","getElementById","$EnablePaymentCaptureCcde","paymentCapture","loadIframeWithUID","addEventListener","handleIframeLoad","removeEventListener","$confirmation","getAgreement","setTimeout","renderPage","num","pageRendering","pdfDoc","getPage","then","page","viewport","getViewport","scale","canvas","height","width","renderContext","canvasContext","ctx","render","promise","pageNumPending","numPages","textContent","queueRenderPage","onPrevPage","pageNum","onNextPage","pdfData","atob","$agreement","createElement","after","getContext","pdfjsLib","getDocument","pdfDoc_","checkPetInfoForm","valid","ageValue","ageDataFormat","$petInfo","closest","yearsInMounths","bookAppointmentDataAnalystic","dataLayer","el","$confirmationBtnsContainer","idx","wrapper","$wellnesscloseBtn","loader","petsAgeYear","expireMembership","init","GlobalWorkerOptions","workerSrc","$preSigned","$getInTouch","$healthStatus","$hospitalSelector","$backBtn","$cancelBtn","vetSlotList","$geocoder","$expireMembershipBtn","isCanada","initOABForm","isHealth","getPlanDetails","selectedPlanValue","hasClass","newPetName","newPet","newPetCreation","mailFormat","phoneReg","textReg","zipReg","elmId","test","replace","inputZip","fname","lname","errorMessageId","input","removeAttr","checkPersonalForm","initGetChallenge","checkConfirmChallenge","scrollHeight","newHeight","innerHeight","wrap","serviceType","speciesIdDataVal","dynamicTitleWrapper","title","dynamicTitle","not","parseInt","petImgURL","selectedPet","selectedPetGender","petNameDisplay","isCareClubMember","trigger","agreementButton","currentTarget","postAgree","container","target","has","listBox","listButton","next","btnName","datalayerPushAbandon","zipValue","google","maps","Geocoder","geocode","results","zipLat","geometry","lat","zipLong","lng","bounds","radius","ConvertedRadius","circleData","center","Circle","getBounds","getNorthEast","getSouthWest","formatted_address","substr","selectedHopital","getHospitalSettings","agreementStepIsVisible","isAElement","fireExpireMembership","redirectUrl","jQuery","gatewayErrorCount","retryCount","toomanyattempts","divErr","innerHTML","classList","patientId","timestamp","Date","now","toString","Math","random","substring","orderId","fetch","json","StatusCode","uid","src","add","$failureMessage","$successMessage","$closeButton","$completepaypop","modal","backdrop","keyboard","catch","pushToDataLayer","event","label","additionalParams","dataLayerEvent","eventCategory","eventAction","eventLabel","$paymentclose","$ccdemodalpopup","$confirmdelete","$continuenext","$completepayclose","$PaymentCapture500ErrorMsg","$PaymentCaptureGatewayErrorMsg","completePayment","data_input","method","body","JSON","stringify","headers","errorMessage","handleTransactionErrors","isArray","status_code","errorMessages","_gatewayErrorMsg","errorMsg","gateway_code","gateway_message","getGatewayError","_otherErrorMsg","status_message","getOtherError","consolidatedErrorMessage","subject","content","paymentData","txn_guid","petType","otherPetType","addnewPetClass","addDisabledClass","petInputGroup","breedsOptions","serviceBtn","serviceDesc","hospitalItem","FindAHospitalUC","canadaZipCodeRegex","bindEvents","$zipcodeInput","zipCodeValue","maxCharacters","initZipcode","$zipcode","$zipSubmitBtn","createClientTypeBtns","clientTypes","entrytBody","clientTypeItems","clientTypeId","ClientTypeId","createApptReasonBtns","petApptReason","reasonTypetBody","petApptResaonItems","appointmentTypeId","AppointmentTypeId","otherPetTypesItems","append","createApptTypeBtns","petApptType","apptTypetBody","petApptTypesItems","modals","HtmlDescription","createWellnessBtns","wellnessResponse","wellnesstBody","iconUrl","wellnessDuelist","wellnessAvalist","displayDate","DueDate","toLocaleDateString","showCareClubIcon","IsDue","IconUrl","wellnessTypeId","WellnessTypeId","careClubIcon","OabFirstAvailable","appoinmentReasonList","oabFirstAvailable","$firstAvailableVisit","oabFirstAvailableFF","oabThankYouFirstAvailableFF","firstAvailableSlotFCA","firstAvaialableSlot","appointmentDiv","querySelector","messageDiv","appendChild","showwellness","$firstThankYouAvailableVisit","firstAvailabeSlotThankyou","hospitalVisit","reasonDetails","bindTimeSlot","faaHeader","FaaHeader","faaSubHeader","FaaSubHeader","bookAppointmentURL","splitURL","appendHospitalVisit","reason","AppointmentTypeLabel","clickHospitalVisitType","visitType","reasonText","startDate","oabDatalayer","datalayerFirstAvailable","$hospitalId","$hospitalName","$isLoggedin","urlFaa","hospitalTimeZone","HospitalTimezone","urlFAA","AppointmentReasons","ele","ReasonLabel","type","timeSlotContent","TimeSlot","time","todayDate","date","formattedTime","StartTime","toLocaleString","hour","minute","timeZone","formattedDate","QueryId","TimeSlotErrorMsg","reasonList","appointmentIndex","initPage","bookAppointmentForm","todaysDate","formatDate","currentSelectedDate","bookInfo","$entry","settingsIdValue","$firstAvailableSlotContainer","AppointmentReasonId","ShowFirstAvailableAppt","firstAvailableDateTime","selectedReason","SelectedEndTime","selectedResourceId","urlParamsPet","URL","hasPetId","searchParams","getPetId","settingsId","isVersion2","IsDigitalApptEnabled","ServiceIconUrl","ServicesIconUrl","assetDefaultUrl","DefaultResourcePhoto","hospitalTimezone","PetSpeciesOptions","AppointmentTypeOptions","AppointmentReasonOptions","ClientTypeOptions","$firstAvailableAppointmentDetails","$appointmentReasonlabel","$confirmAppointmentLabel","displayTime","$firstAvailableDate","$firstAvailableTime","appointmentReasonDisplayText","$sickVisitButtonLabel","$sickVisitButtonHeading","$apptType","$apptReason","isRecommendService","serviceName","reasonId","apptTypeId","getPetUrl","getReasonDisplayName","createWellnessSection","isNewClient","oabCcdeRequest","userInfo","PetId","PetSpecies","speciesImg","x","replacePetName","$confirmAnony","datalayerPushPageLoad","initFirstAvailable","showTimeLoader","IsV2","ReasonId","IsNewClient","selectedDate","firstAvailFlag","resourceId","firstAvailable","keys","hideTimeLoader","updateFirstAvailableSlot","firstdata","assetUrl","PhotoURI","credentials","ResourceCreds","firstAvailableDate","TimeSlots","Start","firstAvaSlot","ResourceName","ResourceId","firstAvaItem","newDate","newtTime","End","initVeterinarianTab","resourcesItem","vetResourcesItem","resource","vetResourceContainer","vetTimesContainer","vetTimeList","vetnoMatches","firstDateFixed","assetInfo","secondGroupDate","addDays","toISOString","thirdGroupDate","nextGroupDate","firstGroupDateDisplay","weekday","year","month","day","secondGroupDateDisplay","thirdGroupDateDisplay","slotTime","slotDate","hour12","dateDisplay","startTime","endTime","vetItemAsset","vetItemAssetTwo","vetItemAssetThree","scrollMoreBtn","grabber","updateDateTimeTab","initVetTab","dayOfWeek","displayDateText","allResource","sort","a","b","dateA","dateB","nameA","nameB","dataAEmpty","dataBEmpty","dateList","notimesContainer","resourceContainer","timesContainer","timeList","matchCount","noMatches","ResourceID","slotsByResourceID","resourceToUpdate","populateWellness","showNextStep","wellness","$wellness","$wellnessResaon","referred","parent","clientID","patientID","appointmentStartDate","endDate","appointmentEndDate","resourceID","appointmentNotes","conditionMessage","bookDraft","DraftAppointmentId","draftAppointmentId","petAppointmentId","PetAppointmentId","EndTime","createConfirmStepInfo","ChallengeSet","nonClientId","sendBookConfirmation","Message","$noFoundUser","sendText","isTextOptIn","ReferrerUrl","referrer","TrackingUrl","TrackingMedium","utmMedium","TrackingSource","utmSource","TrackingCampaign","utmCampaign","TrackingTerm","utmTerm","TrackingContent","utmContent","GClid","gclid","confirmBook","buildConfirmationPage","getMonth","getDate","getFullYear","formatCalDate","days","setDate","assetBlock","slectedDateDisplay","slectedTimeDisplay","storedParams","parse","localStorage","getItem","confirmationBtn","timeBlock","timer","counter","expirationTime","removeItem","Appointment","AppointmentPatients","start","end","objForCalBtn","script","atcb_init","datalayerPushOfferSubmit","timeloader","$notimeslots","$selectedReason","hasTyfaa","expiryData","getTime","removeLocalStorage","nameValue","newMessage","initVetTabValue","flatpickr","inline","minDate","defaultDate","dateFormat","clientTypeText","clientType","apptTypeText","buttonCliked","totalWidth","dateWrapper","outerWidth","maxWidth","leftPos","scrollLeft","animate","updateResourceSlots","avaWrapper","assetName","datalayerPushStepSeven","sendDraftAppointment","validateField","selector","regex","emptyMsg","invalidMsg","field","siblings","checkChform","datalayerPushBookAppt","wellnessTypes","wellnessType","datalayerAbandon","apptType","apptTypeNoImage","apptTypeContact","apptReason","apptTypeModal","timeBtn","vetTimeAssets","wellnessBtnDueDate","wellnessBtn","PCCSlider","matchMedia","$body","$PCCSlider","$PCCThumbsSlider","element","navSlider","statusBox","isExperienceEditor","slick","autoplay","infinite","arrows","dots","rows","slidesToShow","slidesToScroll","asNavFor","appendArrows","focusOnSelect","accessibility","parentSLider","slideIndex","sliderIndex","initAbstractChildren","$abstractListingList","k","children","style","setProperty","forEach","abstractListingItem","revealedChildCounter","iteratedChildCounter","getPropertyValue","querySelectorAll","$btnShowAbstractChildren","showMoreAbstractChildrenBtnEventHandler","activeAbstractListingItem","btnItem","abstracts","Accordion","ActivateAccountSetUp","haveOneNumValid","haveOneUppercaseValid","haveOneLowercaseValid","haveOneSpecialCharValid","have8MinCharValid","generalPwFinalValue","confirmPwFinalValue","IdentityProviderValue","PostTypeValue","$Step1ContinueBtn","validateFahStep1","$Step2ContinueBtn","validateProfileStep2","$Step3ContinueBtn","validateVerifyAcctStep3","$Step4ContinueBtn","validateSetPasswordStep4","$Step1ZipCode","$Step2Email","validateemailcheckifitisused","$Step2PhoneNum","detectKeydown","$Step3Street","hideStreetErrMsg","$PasswordEyeIcon","togglePassword","$PasswordInput","showTooltipModal","hideTooltipModal","validatePassword","$BackBtn","backBtnClick","$InputEl","hideErrorMessages","clickActivateHospital","helpModal","$loginHelpModal","getUrl","AccountDatalayer","datalayerPushSignWithGoogle","code","codeId","getGoogleUserInfo","$Step2LoaderSpinner","redirecturl","given_name","family_name","dataLayerPush","stepName","stepNumber","$Step1AcctFahErrMsg","$Fired","$Step1AcctFahList","initGeocoder","$Step1AcctFahContainer","zipCode","$Step1LoaderSpinner","$Step1Geocoder","$Step1CurrentLat","$Step1CurrentLng","$Step1Coordinates","$Step1Bounds","$Step1Radius","MinLatitude","MaxLatitude","MinLongitude","MaxLongitude","$Step1AcctFahInvalidZipCodeErrMsg","$Step1AcctFahAPIErrMsg","$Step1AcctFahEmptyResponse","createHospitalItems","hospital","zipCodeVal","radio","hospitalSelected","isValidCanadaZipCode","$HospitalId","$SelectedHospitalName","$Step1AcctFahSelectHospitalErrMsg","targetStepNumberValue","updateProgressBar","$ProfileStep","which","validateEmail","emailValue","$EmailValid","$Email","$urlparamhascode","validateEmailAPI","encodeURIComponent","$RequestVerificationToken","axiosConfig","$Step2FirstName","$Step2LastName","phoneNum","$FirstNameValid","$FirstName","$LastNameValid","$LastName","$ZipCodeValid","$PhoneNumValid","$Phone","getChallengeData","alert","addressPetChallengeCheck","UserAccountLocked","initVerifyAcctStepData","$VerifyYourAccountStep","$Step3GetChallengeData","petNamesResults","$Step3PetNameList","petNameItem","$Step3StreetNum","streetNumErrMsgWrapper","petNameSelected","$ClientId","isValidUser","accountLocked","errorMsgEl","$Password","$SetPasswordStep","passwordInput","toggleClass","inputType","generalPwValue","hasOneNum","hasOneNumCircle","hasOneUppercaseChar","hasOneUppercaseCircle","hasOneLowercaseChar","hasOneLowercaseCircle","hasOneSpecialChar","hasOneSpecialCircle","hasMin8Char","hasMin8CharCircle","pwMatchCircle","confirmPwValue","passwordsMatchCircle","$Step4APIFired","Phone","Password","DatasourceId","$DataSourceId","IdentityProvider","PostType","$Step4ErrorMsg","signUpUserAccount","dataLayerActivateAcctSuccess","$FindYourHospitalStep","accountFAHRadius","$Step3VerifyAcctEmptyResponse","strcode","getGoogleUserInfoDetails","ForgotPassword","emailValid","$UnsuccessfulErrMsg","$SuccessMsg","validateEmailAddress","$ForgotPasswordInput","submitForm","$ForgotPasswordForm","$InputContainer","$SubmitBtn","$NavRedirectBtnContainer","dataLayerForgotPasswordSuccess","GuestAccountSetUp","petCountIdxNum","validateProfileStep1","validatePrimaryAddressStep2","addPetsInfoStep3","sendDataLayer","$Step1PhoneNum","$SelectPet","hideSelectPetErrMsg","$AddPetBtn","addPet","$Step4BackBtn","hideStep4ErrMsg","$Step1Email","$Step1FirstName","$Step1LastName","firstNameValid","lastNameValid","phoneNumValid","$PrimaryAddressStep","address1","$Step2Address1","$Step2Address2","$Step2City","$Step2State","$Step2ZipCode","country","$Step2Country","address1Valid","cityValid","stateValid","zipCodeValid","countryValid","$IsCanadaHiddenInput","isNaN","$PetsInfoStep","petNameInputValid","petList","petInfoItem","petItem","petNameInput","petNameValue","petTypeBtnsWrapper","petTypeSelected","errorMsgContainer","petTypeOptionsErrors","btn","parents","addPetContainer","updateIdxPosition","updatedPetList","petContainer","$Loader","$Step4GuestAcctErrMsg","dataLayerCreateGuestAcctSuccess","checkIfErrorMsgIsPresent","isActive","selectedPetSpeciesId","y","inputGroup","deleteBtn","petItemContainer","ResetPassword","passwordValidAndMatched","$ResetPasswordInput","$ResetPasswordForm","$ResetPasswordBtn","dataLayerResetPasswordSuccess","AddPaymentWithaddress","options","context","defaultContext","urlPath","initializeElements","frameSettings","$paymentFrame","setupLoader","setupFrame","setEvents","setScrolling","renderCheckoutForm","renderSelectors","getShippingAddress","setupListeners","disabledAddNewSavePayment","$container","containerId","$formContainer","$frameSettings","$paymentLoader","paymentLoaderId","$savePayment","savePaymentId","$savePaymentError","savePaymentErrorId","$updateAutoshipCheckbox","updateAutoshipCheckboxId","$paymentFormPlaceholder","formId","$addressPlaceholder","addressSelector","disableServiceUpdate","$addAddressCtrl","newAddress","$methodForm","shippingAddress","$select","iframeId","onAddAddressClick","evt","onSelectChange","billingParty","addresses","AddressName","store","mutations","SET_BILLING_PARTY","checkBillingAddressValidity","slideUp","enable","enableElement","loading","disableElement","slideDown","checkoutForm","setValues","addressOptions","newAddressIndex","findIndex","newAddressOption","updateUiOnly","ZipPostalCode","shippingAddressId","parseAddressText","setOptions","setValue","ShippingAddresses","AddressId","isPrimaryIndex","unshift","mapAddressOptions","setInitialAddress","isFn","shippingService","setupAddresses","$error","addressesLoading","methodsLoading","SelectBox","addressId","disable","defaultSchema","addressFormDefaults","schema","onCancelHandler","onAddressFormCancel","onCancelBillHandler","replaceOriginEl","cardHolderName","CheckoutAddressForm","isDefault","ddds_result","ddds_status","ddds_dstransid","ddds_authenticationvalue","eToken","DddsAmexDsTransId","amexDsTransId","DddsAttempted","ddds_attempted","DddsAuthenticationValue","DddsChallenged","ddds_challenged","DddsDsTransId","DddsEci","ddds_eci","DddsStatus","DddsVersion","ddds_version","DeliveryTimeFrame","ddds_params","deliveryTimeFrame","ReOrderItemsInd","reorderItemsInd","ShipIndicator","shipIndicator","ScaIndicator","scaIndicator","AcsTransId","acsTransId","CardBrand","card_brand","CardHolderName","BillingAddressLine1","billingLine1","BillingAddressLine2","billingLine2","BillingCity","billingCity","BillingState","billingState","BillingZip","billingPostCode","BillingCountry","billingCountry","CustomEvent","detail","bubbles","cancelable","dispatchEvent","setError","active","AjaxLoader","size","frame","PaymentiFrame","amount","billingLine3","cardNameInput","cardNameError","checkValidity","form","getters","billingPartyAddress1","billingPartyAddress2","billingPartyZipPostalCode","billingPartyCity","newbillingParty","encrypt","failure","invalidInput","inputs","invalidInputs","messages","checked","savePaymentMethod","AddPayment","isAllSubscription","IsDefault","UseForAllSubscriptions","paymentId","PaymentMethodResultModel","PaymentMethodId","setupMethods","shippingParty","AddToCalendar","CLASS_NAME_OPACITY_0","DEFAULT_OPTIONS","autoshipFrequency","loaderLight","quantity","isRefill","AddToCart","productId","variantId","assign","$content","$loader","reactive","watch","setupLoaderMarkup","cartStore","actions","addLine","IsRefill","focusMiniCart","addToCart","light","visible","ReactiveComponent","rootEls","Address","AddShippingAddress","AddressEntered","AddressValidation","Cancel","Close","ConfirmAddress","Delete","Edit","EditShippingAddress","LoadingSrText","Primary","RequiredMessage","RequiredToken","SaveAddress","SelectSuggestedAddress","SetPrimaryButton","SetPrimaryCheckbox","UnknownAddress","UpsCopyright","UpsLogo","Alt","Url","UseSuggestedAddress","CLASS_NAME_ERROR","CLASS_NAME_LOADING","EVENT_INPUT","DEFAULT_LOADER_OPTIONS","DEFAULT_CONTEXT","heading","loadingIcon","requiredToken","save","loadingSrText","validation","onAfterSave","onCancel","required","AddressBookForm","$originEl","$parsed","parseHTML","template","$headingLabel","$cancelLabel","$saveLabel","$primaryAddressLabel","$firstNameLabel","$lastNameLabel","$addressLabel","$address2Label","$cityLabel","$stateLabel","$zipLabel","$phoneLabel","$primaryAddressErrorLabel","$firstNameErrorLabel","$lastNameErrorLabel","$addressErrorLabel","$address2ErrorLabel","$cityErrorLabel","$stateErrorLabel","$zipErrorLabel","$phoneErrorLabel","$primaryAddress","$firstNameCtrl","$lastNameCtrl","$addressCtrl","$address2Ctrl","$cityCtrl","$stateCtrl","$zipCtrl","$phoneCtrl","$cancelCtrl","$form","replaceValidationToken","unwatchStore","fromEntries","uniqid","errorId","setupIds","bindElementsToSchema","renderLabels","renderStates","renderAttributes","$input","$label","loadingForm","stopPropagation","validate","replaceWith","values","fragment","createDocumentFragment","states","option","onCancelClick","onSubmit","onInputChange","formSubmitButton","addressBookStore","onLoadingChange","customIcon","srText","one","focus","onValidatedInput","formData","FormData","addressParty","addOrEditAddress","showSuggestionPrompt","addressConfirmed","UpsAddressValidationStatus","SuggestedAddresses","upsStatus","originalAddressParty","suggestedAddresses","isConfirmed","currentAddress","stateCode","suggestions","onSubmitHandler","isOriginal","isUserConfirmed","addressValidation","prompt","destroy","onEdit","AddressBookLine","$deleteLabel","$editLabel","$primaryLabel","$address","$address2","$addressLine1","$addressLine2","$city","$country","$deleteIcon","$editIcon","$primaryIcon","$name","$stamp","$state","$zip","$phone","$deleteCtrl","$editCtrl","$primaryCtrl","unwatchLoadingLine","renderLoader","renderRegions","deleteAddress","setPrimary","img","setAttribute","DeleteIcon","icon","cloneNode","alt","EditIcon","SetPrimaryIcon","LoadingIcon","togglePrimarySections","renderIcons","info","addressInfo","onDeleteClick","onEditClick","onPrimaryClick","isLoadingLine","isPrimary","AddressBook","$heading","$lines","$formSection","$ups","$noAddresssMessage","$addCtrl","formTriggerElement","lines","setupLines","renderLines","renderUps","showLines","wasChanged","handleFocus","setupForm","showForm","newIndex","addressIds","lastChanged","fallbackIndex","list","lineList","line","addressLine","li","lineItem","logo","setupFormSchema","formDefaults","onAddressesUpdate","activeElement","renderingContext","parseRenderingContext","addressBook","loaded","unwatch","getAddresses","SelectSuggestedFieldError","UnknownAddressFieldError","CLASS_NAME_INPUT_ERROR","CONFIRM_ORIGINAL_ADDRESS_VALUE","originFocusElement","preventFocusOrigin","VALIDATION_STATUS_CODES","VALID_ADDRESS","SHOW_SUGGESTIONS","INVALID_ADDRESS","UPS_UNAVAILABLE","logUpsServiceError","warn","showSuggestions","originalAddress","$confirmCheckboxLabel","$confirmRadioLabel","$enteredAddressLabel","$suggestedAddressLabel","$checkbox","$checkboxError","$description","$enteredAddress","$invalid","$radio","$radioError","$suggestedAddress","$closeCtrl","$confirmCheckboxCtrl","$confirmRadioCtrl","$formCtrl","$radioCtrl","$loaderPlaceholder","$upsPlaceholder","isValidated","validationStatusCodes","setupUps","toggleView","$errorEl","setLoading","street","parseAddress","radioHtmlStr","radioTemplate","radioNode","confirmCheckboxId","confirmRadioId","headingId","suggestedHeadingId","onHidden","renderSuggestions","isInvalidAddress","setupConfirmationView","setupSuggestionsView","Promise","resolve","onInvalidInput","$radioCtrls","aria","ariaLive","className","parsedTemplate","updateState","rootAttrs","mods","mod","visual","slideCount","mql","initModalAlert","modalAlertId","getCookie","setCookie","expires","setTime","toUTCString","cookie","nameEQ","ca","charAt","showAllText","$currentSlide","fullMsg","fullMsgContainer","removeAlertBanner","$banner","truncateHTML","HTMLMsg","limit","holdCounter","truncatedHTML","$readMoreBtn","$bannerText","$removeAlertBtn","$alertBarMsg","alertMsg","stringMsg","formattedMsg","matches","alertId","alertSlider","autoplaySpeed","adaptiveHeight","currentSlide","nextSlide","current","initAlertBanner","alertBanner","ArticleSlider","$imageSlider","$imageSliderThumbs","$imageSliderCations","responsive","breakpoint","fade","$status","BrandPillars","scrollingIsThrottled","sticker","initScrollDetection","stickers_width","StickerMatchingExpression","$this","left_of_element","offset","left","right_of_element","link","firstLink","addActiveClass","BreedFilters","catValue","breedValue","fadeOut","done","fadeIn","frequency","subscriptionValue","CartAutoship","defaults","parsed","$options","$frequency","$optionsPlaceholder","$frequencyPlaceholder","optionsSelector","frequencySelector","Number","selectedFrequency","selectedOption","cachedValues","newValue","triggerWatchers","arguments","setupSelectors","toggleFrequency","onDisabledFn","isHighlighted","highlight","AutoshipOptions","frequencyOptions","FrequencyOptions","newArray","FrequencyValue","frequencyValue","reduce","prev","curr","abs","ariaLabel","AutoshipSelectorAriaLabel","AutoshipName","AutoshipFrequency","FrequencyName","watchValue","onOptionUpdated","onFrequencyUpdate","fn","CartLanding","$empty","$note","$promotionsnote","$prescription","$render","CartLine","extendPrompt","unsavedLinePrompt","hasError","renderError","setupAccessibility","setupModal","delay","deletedLines","destroyPromises","component","waitForDelay","all","isEmpty","removeCartRegions","renderEmptyCartRegions","linesAdded","lineIds","prevIndex","YourShoppingCartEmpty","ItemHold","PromotionNoteIcon","PromotionNote","pnote","CartModal","ModalLineUpdateBody","buttonContinue","ModalLineUpdateContinue","buttonUpdate","ModalLineUpdateApplyUpdates","ModalLineUpdateHeading","displayRxRequired","renderCartRegions","rxRequired","updateLines","linesRemoved","cachedLineIds","prevLine","lineId","renderAddedLines","removeDeletedLines","hasRxRequired","unsubscribe","getCart","$ContactModal","ContactModal","CLASS_NAME_CREATING","CLASS_NAME_OFF_SCREEN","CLASS_NAME_TRANSITIONING","parseTemplate","$priceLabel","$removeLabel","$updateLabel","$attributes","$image","$petSelector","$price","$strikethrough","$productUrl","$removeCtrl","$updateCtrl","$autoshipSelector","$autoshipFrequencySelectorPlaceholder","$prescriptionPlaceholder","$promotionsPlaceholder","$quantityPlaceholder","$outofstockLabel","$outofstockIcon","$outofstockRegion","autoshipSelector","petSelector","quantitySelector","replaceOrigin","category","previousQuantity","cachedLineValues","backOrdered","setPendingUpdate","computed","isBackOrdered","hasPendingUpdate","renderIconStamps","setupAutoshipSelector","setupPetSelector","setupQuantitySelector","transitionTime","bsUtils","getTransitionDurationFromElement","creating","cleanupCreate","destroying","cleanupDestroy","deferredFn","onDisabledUpdate","eventType","CoveoAnalytics","initCoveoUa","prd","price","listPrice","variant","coveoua","context_website","eve","sendCoveoUaCartEvent","removeLine","isPetInvalid","setInvalid","removeValidation","cartLine","selectBox","selectOptionValue","isLineUpdateDisabled","updateLine","attrHtmlStr","lineAttributes","flavor","Flavor","packaging","Packaging","strengthSize","StrengthSize","strengthSizeSupplies","StrengthSizeSupplies","rxForm","RxForm","listItem","rxStamp","iconStamp","PrescriptionRequired","image","constrainedUrl","productUrl","Price","Remove","ApplyUpdates","OutOfStock","OutOfStockIcon","formattedListPrice","priceString","formattedExceptionPrice","exceptionAmount","exceptionBehavior","exceptionBehaviorValues","STRIKE_THROUGH","REPLACE","renderImage","renderPrices","hideUpdateCtrl","SET_PENDING_UPDATE","RESET_PENDING_UPDATE","variantIdHasNF","endsWith","AutoshipSelector","LoadingLine","onRemoveClick","onUpdateClick","onAutoshipUpdate","onPetUpdated","onQuantityUpdated","togglePendingState","toggleLoadingState","loadingLine","onPetSelectionValidated","petOptions","mappedOptions","PetSelectorAriaLabel","unselectedText","PetSelector","labels","increment","Increment","decrement","Decrement","inputAriaLabel","QuantitySelector","disableUpdateCtrl","enableUiOverrides","enableUpdateCtrl","enableHighlight","disableHighlight","disableUiOverrides","confirm","templateStr","CartLineExtended","AutoshipFrequencyAriaLabel","Checkout","ContinueShoppingLink","Text","Discounts","Loading","OrderSummary","ModalCheckoutHeading","ModalCheckoutBody","ModalCheckoutApplyUpdates","ModalCheckoutContinue","PetSelectorError","BackOrderError","Promotions","Shipping","Subtotal","Tax","Total","$bodyLabel","$buttonContinueLabel","$buttonUpdateLabel","originEl","AJAX_LOADER_OPTIONS","CartSummary","$checkoutLabel","$continueShoppingLabel","$discountsLabel","$orderSummaryLabel","$promotionsLabel","$shippingLabel","$subtotalLabel","$taxLabel","$totalLabel","$continueShopping","$discounts","$list","$shipping","$subtotal","$tax","$total","$upsell","$upsellContainer","$checkoutCtrl","$checkoutLoaderPlaceholder","checkoutLoader","loaders","PostActionUrl","SET_POST_ACTION_URL","renderContinueShoppingLink","renderLoadingState","hasPendingPet","errorMessagetext","SET_PET_SELECTION_VALIDATED","describedbyId","descriptionText","LoadingSummary","toArray","onCheckoutClick","onLinesUpdate","isLoading","showLoading","hideLoading","freeShippingText","formattedDiscount","formattedShippingTotal","formattedSubtotal","formattedTaxTotal","formattedTotal","updateUpsell","CartSummaryExtended","unSubscribe","summary","altText","bolded","baseTemplate","CategorySlider","toggleSlider","screenMdMin","BillingAddressForm","paymentCardId","$updateAddressForm","$updateCardId","selectId","disabledSavePayment","selectDropdownList","updateSetupListeners","disableSaveValidation","validAddress","Option","onUpdateBillingForm","onCancelUpdateForm","onContinueUpdatePopup","constructUpdatePayload","UpdatePaymentMethod","CLASS_VALIDATED","CLASS_VISIBLE_ERROR","submit","$submitLabel","$cardHolderNameLabel","$cardHolderNameErrorLabel","$cardHolderNameError","$firstNameError","$lastNameError","$addressError","$address2Error","$cityError","$stateError","$zipError","$cardHolderNameCtrl","$cancel","$stateSelectorPlaceholder","stateSelector","rendered","setupCancel","setupClassList","setupStateSelector","hideError","updateValue","resetValidation","unsetValue","isObject","off","applied","bordered","removeable","CheckoutAppliedPromo","appliedLabel","removeLabel","$code","toggleBordered","toggleRemove","updateCode","removePromo","onRemove","promoCode","CLASS_NAME_ADD_ADDRESS_DISABLED","CLASS_NAME_ADD_METHOD_DISABLED","CLASS_NAME_REVIEW_BUTTON_DISABLED","NEW_ADDRESS_OPTION_VALUE","addPaymentFormClassList","CheckoutBilling","$isSubscriptionsPage","$addLabel","$methodLabel","$methodWrapper","$reviewLabel","$cardHolderHeaderLabel","$addressForm","$hiddenOnForm","$controls","$method","$addMethodCtrl","$methodCancelCtrl","$reviewCtrl","$addressFormPlaceholder","$addressLoaderPlaceholder","$methodPlaceholder","$methodLoaderPlaceholder","addressLoader","methodLoader","methodSelector","addPaymentForm","billingAddressForm","methodId","prevAddressValue","$subscriptionsLabel","$amex","$ccList","$discover","$mastercard","$visa","$shippingAddressLabel","$checkboxShippingAddress","$useBillingAddressText","$closeToasterMsg","$checkoutPaymentFF","addressFormVisible","selectedAddressValue","methods","methodsFormVisible","methodOptions","selectedMethodValue","isNewAddress","selectedAddressInfo","newOptions","Select","renderAddPaymentForm","renderReviewLink","renderLoaders","getBillingData","renderLabels2","renderAcceptedCards","updateBillingAddressPayment","displayLegalDisclaimer","AddPaymentMethod","ActiveSubscriptions","SavePayment","CardHolderInfo","CardHolderInputLabel","CardHolderInputError","UseShippingAddress","billingService","billingResponse","getData","PaymentId","updateSummary","setAddressId","VcaAddressParty","selectAddressService","handleAddressValidation","validatedResponse","showError","statusCodes","showSuggestedAddresses","IsSuggestion","reviewUrl","addressValue","newbillingaddress","AddBillingAndPaymentMethodToCart","ShippingId","BillingAddresses","IdValue","isAddedPayment","clearAddNewPaymentDetails","SavedPayments","onAddMethodClick","paymentMethod","SET_PAYMENT_METHOD","mapPaymentMethods","setInitialMethod","payments","parseMethodText","NewAddress","$closeAddress","formattedShippingAddress","selectAddress","addressPary","CountryCode","Country","addAddress","getAddressDetail","billingAddressDetail","billingAddressSetValue","cancelUpdateForm","cancelUpdateform","getAttribute","postReivewBillinginformation","postfix","LastDigits","CardName","AddNew","BillingAddress","PaymentMethod","ReviewOrder","CheckoutPaymentForm","NextStepUrl","LoadingAddresses","LoadingMethods","billingPartyId","paymentMethodId","addressFormId","addressLabelId","methodLabelId","setupAccessibleIds","setupAccessibleCollapse","shippingAddressIDCheck","sameAsOption","SameAsShipping","onReviewClick","checkboxShippingAddress","onAddressUpdate","onMethodUpdate","SET_FREE_SHIPPING_TEXT","FreeShippingText","SET_PROMO_CODE","PromotionCode","setFormattedCartSummary","miniCartTotal","FormattedTotal","FormattedMiniCartTotal","discount","FormattedDiscount","shippingTotal","FormattedShipping","subtotal","FormattedSubtotal","taxTotal","FormattedTax","total","FormattedGrandTotal","SET_LOADING","SET_LOADED","BillingAddressTitle","ValidationMessage","amex","AmexIcon","discover","DiscoverIcon","mastercard","MastercardIcon","visa","VisaIcon","card","validBillingAddress","updateBillingAddressForm","setupBlufin","CheckoutBillingExtended","billing","unwatchLoaded","onCartLoaded","AddBillingAddress","Applied","Apply","CardHolderInformation","EditExistingAddress","Free","Items","Next","PlaceOrder","PromoApplied","PromoCode","PromoCodeRequired","PromoCodeInvalid","RemovePromoSrText","ShippingAddress","ShippingMethod","UpsellMessage","CheckoutLine","$autoship","renderAutoshipDetails","maxValue","max","autoshipValue","autoshipTxt","frequencyTxt","extendTemplate","paymentFrameContainerId","apiUrl","CLASS_NAME_FORM_VALIDATED","CheckoutPromo","$applyLabel","$codeLabel","$apply","$appliedPromo","appliedPromo","renderAppliedPromo","renderCode","validationReset","applyPromo","Valid","invalid","CheckoutReviewSummary","renderLabelOverrides","CheckoutSummaryPromos","CheckoutReview","$originalEl","$billingAddressLabel","$editCartLabel","$itemsLabel","$paymentMethodLabel","$shippingMethodLabel","$billingAddress","$paymentMethod","$shippingAddress","$shippingMethod","$linesLoader","$loaders","$billingAddressPlaceholder","$editCartPlaceholder","$paymentMethodPlaceholder","$shippingAddressPlaceholder","$shippingMethodPlaceholder","$summaryPlaceholder","linesLoader","renderLinks","setupLoaders","setupSummary","renderCheckoutInfo","renderCartLines","EditShoppingCart","EditCartLink","linkHtmlStr","EditShippingAddressLink","EditPaymentMethodLink","EditShippingMethodLink","billingAddress","formattedBillingAddress","cardPreview","shippingMethod","ShippingMethodName","review","SET_IS_REVIEW","CLASS_NAME_EDIT_BUTTON_DISABLED","CLASS_NAME_NEXT_BUTTON_DISABLED","checkoutFormClassList","CheckoutShipping","$nextLabel","$edit","$nextCtrl","$nextLoaderPlaceholder","$formPlaceholder","nextLoader","nextLoading","formVisible","renderNextCtrl","getShippingData","IsSubscriptionPage","ShippingMethodId","selectMethodService","resetMethods","SET_SHIPPING_PARTY","ShippingOptionsModel","Shipments","ShippingMethods","SET_SHIPPING_METHOD","mapMethodOptions","MethodName","setHeading","invalidSelector","setAddressLoadingState","postShippingMethod","newAddressFields","updatedAddress","shippingPartyId","addressName","addressIndex","normalizeAddress","addressOrderId","shippingMethodId","onNextClick","onCheckoutFormUpdate","CheckoutShippingExtended","shipping","$promoCodeLabel","$promo","$appliedPromoPlaceholder","$promoPlaceholder","promo","renderPromo","updatePromo","checkoutLoading","submitCart","CheckoutSummary","renderTotals","apikey","endPoint","v","O","u","hostname","q","async","getElementsByTagName","parentNode","insertBefore","CoveoScripts","paginationLinkClick","updateResultPaginationLinks","pageSet","pageSetUrl","originalUrl","hash","paramsObj","parts","first","queryString","search_params","tryUpdateHospitalArticleLinks","kypContainer","protocol","newUrl","pagerRefreshLinks","wrapFiltersLinks","Coveo","$$","coveo","root","args","queryBuilder","queryStr","history","replaceState","utmSourceValue","metaObject","resultData","raw","productid","listprice","lowprice","productname","brand","productCategory","categorylevel4","categorylevel3","initArticleLinks","updateCoveoQueryString","$resultColumn","$querySummary","noResultsMessage","$submit","setupLoadingSpinner","BS_CLASS_NAME_TARGET_CONTENT","BS_CLASS_NAME_ACTIVE","startLoadingSpinner","stopLoadingSpinner","formattedDateTime","$lastUpdate","timeElapsed","today","currentDay","currentHours","getTickToHours","hours","rhours","floor","minutes","rminutes","round","getTickToHoursShort","NewClientFirstExam","$firstName","$lastName","$email","$refUrl","$currUrl","redirect","$hospitalsettingID","$hospitalsiteID","$ShowOabFaa","LeadId","setItem","UpdateLeadTable","CouponId","NCAOfferDataLayer","dataLayerNCAOfferSuccess","postFormData","StepSecitonForm","$stepSection","section","requiredinputs","requiredselect","requiredtextarea","elmType","checkform","DashboardApptTooltip","displayTooltip","tooltipEl","hideTooltip","$WalkInApptType","hover","ready","DbCardsCarousel","onWindowResize","initCarousel","$carousel","$currentCarousel","showCount","iskypArticleV2","isMapSlider","responsiveSettings","focusOnChange","lazyLoad","draggable","transformCount","nextSlidePlusOne","pPointer","pPointerMinusOne","nPointer","nPointerMinusOne","DashboardHeader","numOfNotifications","notifsSecondArray","showMsgModal","showNotificationsModal","RegExp","deleteNotification","cancelBtn","notificationItem","cookieDataAttr","cookieResult","calcLengthOfNotifications","clearAll","$NotificationsList","notif","notifDataAttr","notification","notif2CookieResult","$NotificationsCount","$NotificationsClearAllBtn","$NotificationsCancelBtn","browserCookies","browserCookiesNotifs2","storedNotifsCookiesValues","storedNotifsCookies2Values","checkCookies","DashboardPetPhoto","$petPhoto","$petPhotoArr","$defaultPetIcon","getPetPhoto","imgBlob","openDropdown","$selectButton","closeDropdown","hideListbox","itemSelected","updateSelectValue","itemValue","checkShow","keyCode","last","button","$listItem","PetsDropdown","$parallaxSlider","$anchorTag","isloggedin","SlideShowCount","item_length","usZipCodeRegex","$viewMapBtn","toggleMap","$viewMapBtnList","$VMRForm","validateForm","$nextResult","scrollResults","$prevResult","$radiusFilterSearch","$currentLat","$currentLng","$bounds","$defaultRadius","getSearchResults","distanceFilterNCA","$resultsContainer","hidePopup","updateNavBtns","$searchClearbBtn","$ncaContainer","$NCAFormPhoneNum","$resultsList","$mapRegion","direction","nextitem","position","reverse","showPrev","fullWidth","showNext","dotw","getDay","setCurrentDate","$searchRadius","radiusOnLoad","setSearchDefaultRadius","submitSpinner","$NCAFormSubmitBtn","$map","Map","mapId","LatLng","$defaultLatitude","$defaultLongitude","zoom","infoWindow","InfoWindow","navigator","geolocation","getCurrentPosition","pos","coords","latitude","longitude","setCenter","handleLocationError","getCenter","minZoom","countryAddress","showErrorMessage","$resultsSection","$loadingSpinner","$resultsCount","$zipcodeLabel","removeMarkers","getFAHSearchParams","radiusValue","minMaxValues","myParam","CurrentLat","CurrentLng","Radius","SearchText","HospitalTypeDisplayName","hospitalTypeName","$countryId","DataItemId","$dataId","UtmParam","$errorMsgContainer","fahSearchParams","$existLabel","dataStruct","OK","sortedData","sortResults","getHospitalMapList","createCard","$milesCount","$hideZipCode","showFormModal","currentLatLng","LatLngBounds","hospitalHours","HospitalHours","hoursObj","hospitalTypesTags","HospitalTypes","hospitalPhoneNumbers","PhoneNumbers","parentContainer","leftContainer","rightContainer","ncaTag","phoneContainer","mobileHeaderWrapper","typeTagsWrapper","descContainer","ctaContainer","ctaPhoneNumber","ctaHours","ctaHoursList","btnContainer","modalContainer","modalContentWrapper","modalHoursWrapper","sphmodalContainer","sphmodalContentWrapper","sphmodalHoursWrapper","emergencymodalContainer","emergencymodalContentWrapper","emergencymodalHoursWrapper","locationA","Latitude","Longitude","locationB","calcMiles","haversine","toFixed","distanceApart","marker","AdvancedMarkerElement","$markers","addListener","infowindow","open","extend","imageWrapper","HospitalImageUrl","ctaContainerEl","HasCareClub","CareClubUrl","CareClubLabel","HasNewClientOffer","NewClientOfferUrl","NewClientOfferLabel","descContainerEl","locationIcon","Zipcode","DistanceUnit","DirectionUrl","btnContainerEl","HospitalSettingsItemId","HospitalSiteId","MediaReachOfferId","ctaHoursEl","IsComingSoonHospital","HospitalHoursList","HoursIndex","HoursName","IsOpen","OpenLabel","CloseLabel","modalBtnAndTitle","bottomModalSection","HoursDisclaimer","HoursPageUrl","hourObj","Label","isCurrentDay","IsCurrentDay","isTemporaryHours","IsTemporaryHours","bindHoursList","Hours","ctaPhoneContainer","PhoneLabel","fitBounds","$modalBtn","$hospitalDLPush","$closeBtn","openModal","clickEventDL","closeModal","$sphmodalBtn","$sphcloseBtn","openSphModal","closeSphModal","$emergencymodalBtn","$emergencycloseBtn","openEmergencyModal","closeEmergencyModal","$viewOnMapBtn","setAnimation","Animation","BOUNCE","highlightMarker","$careClubAnalystic","careClubDataAnalystic","$getDirectionAnalystic","getdirectionDataAnalystic","setZoom","animation","DROP","hourtime","parentEl","mediareachofferId","hospitalSiteId","hospitalSettingsItemId","$modalHospitalName","getCouponData","$NCAModal","ucfahDatalayer","datalayerPushClick","$modalLoader","$modalBody","getCoupon","ShowOabFaa","$couponTitle","Title","$couponMessage","$couponHeaderLogo","HeaderLogoUrl","HeaderLogoAlt","imageURL","CoverImageUrl","CoverImageAlt","$couponImage","browserHasGeolocation","setPosition","setContent","setMap","$errorMessage","setA","setB","miles","emailRegex","$APIErrorMessage","$NCAEmail","$NCAZip","initPostForm","$Zip","utmParam","action","CouponUrl","hospitalsList","$mapCarousel","EnableSprint42Change","hospitalMapDetail","MapFrame","constructMapFrame","randomNumbers","phoneNumbersContainer","ctaPhoneNumbers","hospitalnameredirectlink","numbers","$mapContainer","$searchValue","$NCALastName","$NCAFirstName","$SelectEl","$TextAreaEl","$prevSearchValue","$selectedFiltersArr","contactIcon","servicesIcon","hoursIcon","primaryFilter","leftArrowBtn","primaryIsSelected","mapEl","checkForGoogleMapsUC","FindAHospitalOAB","hospitalListFAH","avalilablSlotPromise","countHospitalList","suspendApiCalls","distanceFilterOAB","$oabContainer","oabFindAHospital","firstFourHospitalsData","firstAvailableSlotTag","div","clientWidth","scrollWidth","countlength","oabTag","phoneIconEl","hoursIconE1","BookApppoinmentContainerEl","HasBookAnAppointment","BookAnAppointmentLabel","$bookAppointmentAnalystic","IsHybridHospital","ajax","returnhtml","allAppointmentTypesList","hospitalIndex","sortedHospital","AppointmentTypes","appointment","hospitalVisitType","schedulewrapper","scheduleButtonWrapper","firstAvailablewrapper","firstAvailableSlot","appointmentTypeListData","appointmentType","appointmentTypeIndex","Availablity","appointmentTypeList","bookAppointmentDataGtm","$firstAvailableAppointment","openAvailableAppointmentModal","jqXHR","textStatus","errorThrown","selectedHospitalIndex","availableTimeSlotIndex","appointmentModalContainer","appointmentModalContentWrapper","appointmentTypeListWrapper","appointmentModalContentCard","appointmentTypesDateTime","appointmentTypeReasonButton","apptHospitalTimezone","appointmentTimeSlotText","appointmentDateTimeContentCard","appointmentTypeReason","reasonIndex","appointmentHeaderText","ReasonHeaderText","appoinmentTimeSlotsType","TimeSlotHeaderText","appoinmentTimeSlotType","dateTime","appointmentModalBtnAndTitle","$firstAvailableAppointmentCloseModal","closeSelectedReasonModal","$firstAvailableAppointmentModal","clickSelectedReasonTypes","abort","datalayerPushBook","$searchClearButton","returnParam","FindAHospital","bookAppointmentTimeout","_urlParams","focusOnMap","top","$fahSection","searchImageContainer","Marker","getPosition","phoneNumber","DirectionImageUrl","hoursDisclaimerText","setDefaultMarker","clearTimeout","hasSearchText","searchText","hasZipCode","hasHospitalType","$defaultFilter","Set","hasHospitalTypeDisplayName","unescape","hospitalTypeDisplayName","HospitalIdsItemId","hospitalIds","blResetFilters","$searchBtn","$searchInputValue","getFahHospitals","activeFilter","clientHeight","horizontalLine","$wellnessBtn","loadIssueTypes","$VWRModal","issueTypeId","issueMappingId","issueTypeName","$fahMapAndList","$VWRFormSubmitBtn","selectedType","selectedPill","selectPill","$enableCityBasedSearch","selectSearch","selectFilterOnLoad","hasRadius","paramsUrlRadius","zipCodeLocation","queryOnInitValidation","rect","getBoundingClientRect","mapRect","documentElement","bottom","isInViewport","passive","paramsBoolean","initParams","replaceAll","$defaultCityState","initCityBasedParams","hasHospitalIds","timeSlotHeaderText","wellnessModalBtnAndTitle","$wellnessBtnModal","innerText","selectFilter","selectedFilter","indexOfDefaultFilter","unescapedSelectedType","referralSourceValue","$VWRReferralSource","$VMRFormPhoneNum","$PetName","$PetSpecies","$IssueType","$PhoneNum","$Description","$ReferralSource","$ReferralPrimaryVet","$ReferralEmergencyHospital","$VWRInfoWrapper","$vwrModalForm","$vwrModalComfirmation","onSelectReferralSource","$VWRReferralEmergencyHospital","$VWRReferralPrimaryVet","defaultFilter","defaultFilterValue","$filterPill","$fahContainer","$searchRadiusUL","$tooltipIcon","$tooltipText","$vwButtonText","LocationAccordion","bindScreenSize","windowResize","bindMobieToggleClick","rightArrowBtn","lengthFInd","widthCount","checkForGoogleMaps","$dropdownInput","$search","separator","defaultParam","keyCodes","ENTER","categoryParam","queryParam","imgTitleContainer","imageTagContainer","scaledSize","Size","createCustomIconElement","waitTime","WaitTimes","waitingTimeInMinutes","waitingTimes","isOpen","HoursLabel","currentDate","toLocaleLowerCase","hospitalAU","$ucContainer","toggleFooterLinkCol","slideToggle","handleMediaQueryChange","$footerlists","$footerLinkToggle","sitefooter","startX","slider","isDown","pageX","offsetLeft","walk","RedirectDeviceType","checkElementExists","os","userAgent","vendor","opera","MSStream","getMobileOperatingSystem","IOSUrl","mobileIOSAppStoreUrl","AndroidUrl","mobileAndroidAppStoreUrl","detectOnLoad","HospitalActionPanel","Event","vimeoPlayerIFrame","from","vimeoPlayerIFrameElement","vimeoPlayer","Vimeo","Player","unload","EVENT_KEY","EVENT_CLICK","EVENT_KEYUP","EVENT_KEYUP_ESC","EVENT_MOUSE_ENTER","EVENT_MOUSE_LEAVE","HeaderModals","activeModalId","focusTrap","hidingModalTimeout","queuedHideModalFn","isStatic","emergencyModalIsLoaded","cacheUI","$document","$headerModals","$loggedInModal","$emergencyBtn","$headerModalElements","$modalEl","$parent","sharedParent","$hoverEl","$triggerEl","addHoverListeners","hideStaticModal","showStaticModal","toggleStaticModal","$target","keyIndex","ARROW_UP","ARROW_DOWN","$current","onTriggerKeyup","detectWindowHeight","unbindEvents","unbind","showModal","$closingModal","hideModal","queueModalTimeout","FocusTrap","allowBreakout","nextKeys","prevKeys","onBreakout","$focusable","ESCAPE","skipTimeout","onClickOut","createDesktopEmergencyInfoModal","emergencyContainer","getEmergencyModalInfo","pathName","currentUrl","contextItemId","emergencyCTAItemId","phones","HeaderSiteSearch","onDesktopIconKeyup","displayDesktopSearchBar","$desktopIcon","toggleDesktopSearchBar","$desktopSearch","hideDesktopSearchBar","$iconActive","$icon","checkOutsideClick","initFocusTrap","displayMobileSearchBar","$mobileSearch","$mobileIcon","hideMobileSearchBar","checkInnerKeyup","initSearch","isMobile","mobileSearch","desktopSearch","initSearchOnEnter","$desktopSearchInput","desktopId","mobileId","$close","$mobileSearchInput","$mobileSearchInputMegaNav","HospitalMobileNav","emergencyInfoIsLoaded","contentEl","contentItem","createMobileEmergencyInfo","dayXPath","toDateString","daySpanTags","evaluate","XPathResult","ORDERED_NODE_SNAPSHOT_TYPE","snapshotLength","snapshotItem","highlightCurrentDay","HospitalThreeCardCarousel","$cardSlider","HowToVideos","InlineSearch","onSearchSubmit","onSearchClick","JoinOurNewsletter","_inputErrorClass","_mailRegex","_nameRegex","evaluateSubmitButtonState","emailIsValid","firstNameIsValid","lastNameIsValid","validateFieldValue","validateFirstName","validateLastName","$submitBtn","fieldValue","fieldObj","blRegexResult","$joinOurNewsletterBtn","$joinOurNewsletterEmailInput","$newsletterForm","newsletterSignupElement","triggerHandler","itemText","openCoveoDropdown","hideCoveoListbox","itemSelectedCoveo","selectedElement","caption","$seletButton","$coveoSeletButton","$coveoList","$coveoListItem","customDropdown","$btn","targetElement","MyVCALogin","password","loginErrMessage","loginErrorMessage","loginModal","duration","displayLoadingSpinner","clickSignWithGoogle","passwordLength","FB","getLoginStatus","statusChangeCallback","listedItemEl","elHasHttps","redirectPath","durationInMilliseconds","dataLayerLoginFailure","checkErrorMessage","accessToken","authResponse","userEmail","fields","apiResponse","eamil","reload","encodedHospitalName","mapUrl","iconElement","networkName","externalLinkIcon","$window","CLASS_NAME_ACTIVE_TOGGLE","CLASS_NAME_ACTIVE_MENU","EVENT_KEYDOWN","EVENT_RESIZE","FOCUS_TRAP_OPTIONS","ARROW_RIGHT","ARROW_LEFT","MegaNavItem","$toggle","$menu","matchHeight","topLevel","$parentMenu","menuSelector","$childToggles","toggleSelector","$childMenus","subscribers","toggleId","EVENT_CLICK_INSTANCE","EVENT_KEYDOWN_INSTANCE","EVENT_RESIZE_INSTANCE","toggleHeight","onBodyClick","onBodyKeydown","afterTransition","initialFocusIndex","toggleTopLevel","isFunction","screenLgMax","focusOrigin","$origin","mobileMegaNav","SPACE","outerHeight","onToggleClick","onToggleKeydown","screenLgMin","menu","offsetHeight","matchedHeight","updateMenuHeight","offsetY","viewportY","scrollbarHeight","requestAnimationFrame","DATA_TOGGLE_SELECTOR","DATA_MENU_SELECTOR","MegaNav","Labels","items","renderLazyNavItems","$back","$inner","$nav","setupNavItems","checkListedItem","numOfListedItems","activeItems","at","megaNavItem","pop","subscribe","navItem","onNavItemToggle","onBackClick","$navItems","$item","rootData","navLevel","markup","transformNavItems","prevItemName","submenu","Children","levelMod","subMenuContents","Target","MainMenu","nav","dataId","dataset","dataEl","megaNavActive","CLASS_NAME_OPEN","CLASS_NAME_NOSCROLL","MobileMegaNav","reflow","forceAsync","close","onScreenChange","$toggler","addToggle","backNavItem","headingNavItem","modifier","navItemLink","attributes","subNav","subNavToggle","modifiers","SHOW_CSS","NO_SCROLL","showMobileMenu","hideMobileMenu","$bodyOpen","checkMenuOpen","toggleSubNav","toggleSidebarPanel","targetData","$megaPanel","$sideBarItem","$sidebar","$megaSidebarNavItem","toggleMobileSubNav","toggleMegaSimple","mobileBackBtn","toggleSubPanel","$hamburger","$navToggler","$sidebarNavToggler","$mobileClicktoggler","$simpleToggler","$megaMenu","relatedTarget","$simpleDropDown","adaptiveMenu","CanonicalUrl","setCanonicalUrl","canonicalUrlTag","MetadataUtils","CreateCanonicalUrlMetaElement","documentUrl","canonicalTag","origin","CartSubtotal","CheckoutLink","EmptyCartPrice","Quantity","Subscribe","MiniCartLine","$quantityLabel","$autoshipIcon","$link","$quantity","$subscribe","backorder","attrsHtmlStr","AutoshipIcon","updateAutoship","formattedPrice","imageUrl","renderAutoship","renderDetails","renderImages","isAutoshipUpdated","isQtyUpdated","CLASS_NAME_COUNT_VISIBLE","EVENT_KEYUP_ESCAPE","DEFAULT_FOCUS_TRAP_OPTIONS","MiniCartToggle","$count","countEl","$toggleCtrl","$miniCartPlaceholder","miniCart","initialFocus","showMenu","hideMenu","renderCount","setupMenu","toggle","miniCartDatalayer","onToggleKeyup","updateCount","MiniCart","ariaLabelElementId","linesCount","productInfo","setFocusTrap","onKeyupEsc","miniCartToggle","CLASS_NAME_IS_OVERFLOW","DATA_ATTRIBUTE_REFERENCE","LINE_ATTRIBUTE_VALUE","LINE_REFERENCE_SELECTOR","LINE_REGION_SELECTOR","$emptyLabel","$checkout","$items","$scroll","$lineRef","$priceLoaderPlaceholder","isOverflow","priceLoader","lineItemNode","loadCart","rawLines","Product","ProductId","ProductVariantId","focusEl","offsetTop","toggleEmptyCart","updateLineCount","updatePrice","updateLoadingState","deleteAnimation","$line","opacity","right","itemsText","updateLineState","checkForScroll","update","miniCartTotalFormatted","formattedMiniCartTotal","mobilePeekSlider","$statsSlider","$statsSliderKyp","initialSlide","mobileFirst","variableWidth","mobilePeekSliderKyp","$wrapper","$nextBtn","$prevBtn","func","timeout","debounceUpdateButtonVisibility","updateButtonVisibility","mutliPromo","$multiPromoSlider","startItem","centerMode","centerPadding","initmutliPromoMobileSlider","AccountChangeHospital","startSearch","$hospitalSearchInput","lookUpAddress","$noTesultsFound","$selectHospitalBtn","getHospitalsList","$hospitalResults","searchLoading","hosptialList","$hopitalSections","cancelLoader","$changeErrorSec","startLoader","SelectedHospitalID","$challengeAddress","$missingAddresInput","$missingAddressWrapper","challengeResponseId","$petSelectorBox","petsChoices","$verifyHospitalSec","token","$hospitalSerachBtn","$setHopital","$submitChallenge","$editHospitalSelection","$selectHospitalSec","$hospitalSuccessSec","statusValue","checkForEnter","checkIfUserExisit","postChallengeAnswers","hospitalid","AccountPreferences","isUserManagement","currentPassword","confirmPassword","updateInfo","updateItems","elValue","elName","failedUpdate","dataSourcedId","resetPassword","getPrarms","updatePrimary","updateAddress","updateEmergency","$IsChangePwdFeatureEnabled","$tabswrapper","$editBtn","$changePasswordBtn","datasourceId","$confirmPassword","$confirmPasswordModal","$changePasswordInput","editBtn","originalValue","updateInputAfterCancel","removeErrorMessages","sendChangePasswordEmail","bindChangePassword","newPasswordVal","confirmPasswordVal","passwordReg","inputText","inputPassword","updatePrimaryContact","updatePrimaryAddress","updateAccountPassword","updateEmergencyContact","passwordField","CareclubInvoice","invoiceCount","invoiceTotal","initGetInvoices","Invoices","$invoiceListError","TotalCount","$invoiceListEmpty","CurrentPage","createInvoiceList","invoices","invoiceList","Amount","$invoiceList","$loadMore","invoiceid","Result","pdfWindow","write","titleOfPDF","$invoiceWrapper","getInvoice","CareClubPetPage","$PaymentMethodsUpdateButton","displayIframe","$PaymentMethodsCancelButton","hideIframe","$RenewalStatus","toggleApplyBtn","$RenewalApplyBtn","updateRenewalStatus","$isRenewalOn","$PaymentMethodsIframe","$PaymentMethodsUserCardInfoContainer","resetSuccessErrorMsgs","$SuccessMessage","$RenewalErrorMessage","renewalStatus","$PatientId","$MainContentWrapper","ExpertGuidancePetPage","displayContent","tabNumber","tabName","contentContainer","contentToActivate","$TabBtn","$TabContent","$DisplayTitle","IndividualPetProfile","$ApplyUpdatesBtn","$CancelBtn","$EditBtn","$EditableContainer","$DateOfBirth","$EditableMainContent","$ErrorMessage","$SpeciesInput","$DatePickerInput","$PrimaryBreedInput","$SecondaryBreedInput","$UpdatedSpeciesValue","$UpdatedDOB","$UpdatedPrimaryBreedValue","$UpdatedSecondaryBreedValue","$PetProfileSpeciesText","$PetProfileDOBText","$PetProfilePrimaryBreedText","$PetProfileSecondaryBreedText","$SpeciesOnLoadValue","$DateOnLoadValue","$PrimaryBreedOnLoadValue","$SecondaryBreedOnLoadValue","saveSelectedValuesOnLoad","hideDOBErrorMessage","dynamicDateInputEl","hideSelectErrorMessages","changeSpecies","sortBreedsBySpeciesPri","sortBreedsBySpeciesSec","clearBreedsOnSpeciesChange","changePrimaryBeed","selectedPrimaryBreed","selectedSpeciesType","initEditInputFields","initDatePicker","altInput","altFormat","maxDate","disableMobile","applyUpdates","speciesValue","dateValue","primaryBreedValue","secondaryBreedValue","speciesValid","dateValid","primaryBreedValid","updatePetProfileAPI","primaryBreedId","secondaryBreedId","dob","resetMainContainer","htmlPartialRendering","InvoiceHistory","ManageSubscriptionList","GetPetSub","$listContainer","noResuts","subItem","backorderedFlag","defaultPetIcon","cardContainer","IsBackordered","outofstockicon","outofstocklabel","innerCard","ProductImage","ProductImageAlt","ProductName","Brand","getPetResults","shipmentDate","frequencyChanged","getFrequencyValue","DATA_PAYMENT_ID","DATA_VETSOURCE_ADDRESS_ID","dataProperties","vetsourceAddressId","isOrderNow","isSkipOrderClicked","ManageSubscriptions","bindAddClass","$sectionStep","loaderPopup","getSkipOrderValue","nextDate","getOrderNowValue","curr_date","orderShipmentDate","frequencyLabel","nextShipmentDate","hndSubscriptionFrequency","updateDetails","vetid","SubscriptionsDatalayer","datalayerSkipOrder","updateSubAPI","scrollTo","behavior","$orderNowLoader","$targetEl","VetSourceAddressId","updateAddressAPI","updatePaymentAPI","vetsourceid","otherMessage","datalayerPushSubCancel","changedShipmentDate","$sectionwrapper","$popupSection","$skipOrder","$closeToasterModal","tomorrow","editSeciton","set","paymentIndex","target2","before","randomizeDropdownList","updatePayment","cancelSubscription","MyVCANavigationTabs","toggleMobile","displayContentDesktop","sideBar","tabsContainer","tabToActivate","mobileDropdownSelectToActivate","$TabButton","displayContentMobile","selectOption","tabsParentContainer","tabToActivateMobile","$SelectBox","$MobileTigger","PatientDocumentsPetPage","embedTag","resetBtnAndLoader","$LoadingSpinner","initCareInstructionsBtn","documentId","loadingSpinner","downloadCareInstructionsPdf","initVaccineRecordsBtn","downloadPdf","initMedicalRecordsBtn","initTestResultsBtn","base64String","byteArray","Uint8Array","charCodeAt","blob","Blob","objectUrl","createObjectURL","$CareInstructionsPdfBtn","$VaccineRecordsPdfBtn","$MedialRecordsPdfBtn","$TestResultsPdfBtn","$PetId","paymentListCard","paymentFailureFF","PaymentManagement","bindSaveNewPaymentClick","$paymentForm","$paymentList","initGetpayments","$toasterMsgPayment","$addNewPaymentCTA","$paymentManagementTabContent","getPaymentMethods","$errorMessateSection","createPaymentList","paymentList","$noPayment","defaultUpdateButton","defaultUpdateTag","Default","validAddressForm","Expiration","paymentCarditem","setDefaultPaymentMethod","defaultBox","removePaymentMethod","$setDefaultBtn","$deleteBtn","$updatePaymentModal","SetDefaultClick","clone","appendTo","paymentIdtoDelete","deletePaymentClick","cardListIndex","paymentIndexId","cardDetails","ChangePetImageModal","fileDragHover","fileDrag","fileSelectHandler","file","files","dataTransfer","showUploadLoader","$modalMessages","imageName","tobig","fileSizeLimit","isGood","output","hideUploadLoader","baseString","reader","FileReader","onloadend","newImageData","readAsDataURL","$sameImage","$uploadImageBtn","reset","parseFile","uploadedFile","postPetProfileImage","originalAvatarURL","$liveImage","$changeIconModal","$modalContent","$changeIconBtn","$removeImage","$uploadImageInput","$originalAvatar","$currentImage","liveImage","fileSelect","currentImage","File","FileList","XMLHttpRequest","upload","display","imageSrc","uploadFile","NewsLetterCTA","$signUpBtn","$newsLetterForm","$newsThankYou","$newserror","submitBtn","NewsletterStories","activePage","initNewsletterGet","getAPIData","selectPage","selectedPage","scrollIntoView","updateURL","newRelativePathQuery","pushState","errMsgContainer","paginationBar","getNewsletters","emptyResultsContainer","totalPages","TotalPages","stories","NewsletterArticles","createCards","articles","totalNumOfPages","pages","liTag","beforePage","afterPage","path","plength","createPagination","story","hasImage","hasDescription","adaClass","ImageUrl","IsPdf","storyCard","ImageAlt","getPaymentMethodsList","OrderFulfillment","$changePaymentMethod","cardDetailSetValue","$paymentFailureFF","$IsPaymentDetailsMissing","$isPaymentFailureStatus","$isUpdatePaymentMethodFF","$methodPaymentDropdown","bindPaymentSelectBox","bindPaymentDropdownValue","cardId","createPaymentForm","$orderPaymentMethodId","defaultCard","saveNewPaymentMethod","$savePaymentLoader","getCardId","continueUpdatePayment","cancelUpdatePayment","openOrderDetailsFormModal","cancelOrderDetailsFormModal","closePaymentModal","updateOrderHistoryPayment","apiUpdatePaymentDetails","apiUpdateOrderDetails","payloadOrder","apiPayloadResponse","UpdateVetSourceOrderId","updateOrderDetails","OrderStatus","carrierIconHtml","carrierTextHtml","SitecoreConfigurableErrorMessage","constructUpdateVetSourceOrderPayload","constructUpdateOrderPayload","$orderId","DefaultForFutureOrders","UpdateActiveAutoships","addNewPaymentModal","closeToasterPayment","$addOrderDetailsForm","$cancelPaymentOrderForm","$updatePaymentBtn","$cancelPaymentBtn","$addNewPaymentMethod","$continueUpdatePayment","$cancelUpdatePayment","DateRangeDefault","DateRangeOptions","ItemsInOrder","OrderNumber","OrderNumberPending","OrderPlaced","OrderTotal","StatusOptions","Class","OrderHistoryLine","orderDetailsListingFF","$dateLabel","$orderNumberLabel","$date","$orderNumber","renderData","orderNumber","renderItems","renderLink","renderStatus","renderPaymentFailureMsg","isPaymentDetailsMissing","isPaymentFailureStatus","itemHtmlStr","itemTemplate","itemNode","OrderHistory","$dateRangePlaceholder","dateRangeSelector","dateRangeValue","orderLines","DetailsLink","Status","IsPaymentDetailsMissing","IsPaymentFailureStatus","getOrderHistory","setupDateRange","removeErrorMessage","orderHistoryService","HistoryInMonths","IsUpdatePaymentMethodForPaymentFailureOrderStatusFF","Orders","errMessageContainer","OrderSelectBox","onDateRangeChange","PaidMedia","isValid","firstname","lastname","resetErrorMessages","errorElementId","errorElement","formGroup","handleFormSubmit","$paidFormSubmitBtn","$updatePopup","$hospitalNamePM","$videopopup","$doctVideoModal","videoURL","CLASS_NAME_DISABLED","EVENT_CHANGE","purchaseType","PdpAddToCartFreq","product","currentProduct","$cartLabel","$favoriteLabel","$purchaseLabel","$subscribeLabel","$success","$cartCtrl","catalogName","anonymous","documentPosition","searchQueryUid","sourceName","permanentid","products","radioValue","enabled","dPrice","newoptions","VariantId","CatalogName","ExceptionAmount","ExceptionBehavior","DocumentPosition","SearchQueryUid","Anonymous","UserAuthenticated","SourceName","Permanentid","PermanentId","Category","CategoryList","indexInData","productIndex","logClickAndAddToCart","addMultipleLines","actionCause","documentTitle","originLevel1","customData","contentIDKey","contentIDValue","FavoritesSrText","OneTimePurchase","onCartClick","onRadioChange","PdpAddToCart","$radioSubscribe","$radioPurchase","$cartBtn","URL_IMAGE_NOT_AVAILABLE","PdpSelectorFBT","totalProducts","$rxLabel","$videoLabel","$modalTitle","$nextStepLabel","$navProductsLabel","$productBunldeTitleLabel","$addtoCartPlaceholder","$nextProductPlaceholder","$infoTabsPlaceholder","$loginPlaceholder","$sliderPlaceholder","$selectorPlaceholder","$brandName","$productName","$rx","$rxStamp","$discountPrice","$listPrice","$video","$videoIframe","$promoLegend","$productBundleRegion","$productBundleItem","$selectorLabels","$selectors","$ariaLive","$quantityControl","$nextStepControl","$prevStepControl","$pageNumber","$pageTotal","$selectorBoxes","login","freqBought","pleaseSelect","PleaseSelect","variants","ChildVariants","selectorOptions","VariantSelectorOptions","uiSelectorOptions","removeDuplicateSelectorValues","initialSelectors","setupInitialSelectors","currencyCode","CurrencyCode","selectors","filteredProducts","onInit","promos","mapPromos","flat","uiPromos","removeDuplicatePromoValues","activeProduct","isVariant","activeGAProduct","ProductException","PriceTreatment","NO_EXCEPTION","productDatalayer","ListPrice","RxRequired","activeSelectors","slides","Images","thumbnail","ConstrainedUrl","sendProductViewDatalayer","updateAddToCart","isPopState","renderStaticRegions","renderAddToCart","renderNextButton","renderQuantitySelector","updateRenderedOptions","renderPromoLegend","selectorProp","selectorFormattedValue","Values","FormattedValue","getSelectorsFromUrl","currentIndex","resetSelectors","setLink","duplicateValuesByProp","second","SortOrder","promoModels","PromotionModels","exception","DiscountAmount","productName","currentitem","PdpFrequentlyBoughtTogether","YourPrice","RxText","HowTo","Comfirm","SelectPackingtoContine","ConfirmYourselection","setQuantity","renderSelectorOptions","selectorHtmlStr","selectLabel","$selectEl","optionsArr","disabled","PdpSlider","rx","useTemplate","mainImage","promoHtmlStr","iconURL","PromoIcon","promoLegend","Tooltips","initVCAPromoTooltip","isAutoShipOnly","AutoShipOnly","radioPurchaseElement","radioSubscribeElement","selectorsArg","nextIndex","filterProducts","filteredOptions","filterOptions","nextKey","nextValue","productDetailsDatalayer","onSelectorChange","onPopState","showPrevStep","Video","setVariant","IsUserCareClub","IsCareClub","setPrice","discountPrice","filteredPrices","priceLow","min","priceHigh","priceLowFormatted","priceHighFormatted","renderNextOption","updateSelectorValues","updateProduct","updatePrescription","updateSelectors","updatePromoLegend","updateSlides","nextActiveIndex","$currentItemLabel","$estTotalLabel","$FrequentlyBoughtTogether","$addItemCartLabel","$productBundle","$productBundleSpinner","$bundleProducts","relatedProductsItems","checkedItemsData","productItem","renderProductBundle","updateAddToCartBundle","updateEstimatedPrice","ChooseOptions","totalBoxesCheck","sumLow","sumHigh","relatedProducts","rxFlag","currentClass","currentlabel","child","priceDisplay","currentDisplayName","updateSelectorBundle","checkedItems","updateOnSizeChange","newVariants","selectedValue","productData","selectOptions","variantSelectorOptions","selectItem","endBundleModalSpinner","CurrentItem","EstTotalPrice","AddItemsToCart","FrequentlyBoughtTogether","createBundleModal","PdpInfoTabs","$informationLabel","$ingredientsLabel","$speciesLabel","$usageLabel","$information","$informationContainer","$ingredients","$ingredientsContainer","$species","$speciesContainer","$usage","$usageContainer","$informationCtrl","$ingredientsCtrl","$speciesCtrl","$usageCtrl","productInformation","ingredients","usage","isHidden","setData","$first","showSection","hideEmptySections","ProductInformation","ActiveIngredients","DevelopedFor","UsageGuidelines","every","ctrl","tab","collapse","PdpLogin","$login","linkText","Login","linkUrl","LoginLink","description","LoginDescription","renderLogin","renderDescription","redirectParam","LoginPriceTitle","LoginPriceDescription","By","FavoriteSrText","LoaderSrText","Save","SuccessMessage","ZoomSrText","PdpSelector","dataL","$loginPricePlaceholder","$benefits","$loginpriceurl","tabs","loginurl","isAuthenticated","Ingredients","ForSpecies","Usage","toggleVideo","resetRadioInputs","renderSlider","setupHistoryState","setLoginLink","BackOrdered","Benefits","defaultRadioBtn","click","sliderdestroy","shouldHidePriceForProduct","shouldHidePrice","renderRadioInputs","updateSlider","dataLabels","catalogProduct","dataToPass","ChatWithVet","quickViewModal","ariaValueNow","addProduct","SellPrice","once","bindQuickviewClick","btnAddCart","btnCheckOut","fbtParam","renderFrequentlyBoughtTogether","createSchemaMarkup","header","showMoreBenefits","showmorebtn","clampWrapper","renderBenefits","renderInfoTabs","imgUrl","offersArray","offer","offerObject","priceCurrency","availability","productSchema","offers","breadcrumbElements","itemListElements","breadcrumbElement","breadcrumbListSchema","itemListElement","modifiedUrl","parsedModal","sliderModal","$loaderLabel","$zoomLabel","$main","$modal","$modalLoaderLabel","$modalHeading","$modalImage","$navControl","$zoomControl","modalId","renderSlides","setup","renderModalInfo","Image","onload","mainSlides","navSlides","slide","mainSlide","navSlide","isButton","nextArrow","navArrow","prevArrow","vertical","updateSlickTrack","setupNavListeners","slickTrack","onZoomClick","onNavClick","startLoading","loadSlides","stopLoading","loadedSlides","isLoaded","slideLoaded","PillFilters","$pillSlider","filterValue","speed","outerEdgeLimit","swipeToSlide","PressArticleListing","numberOfItemsToShow","totalPagesOnLoad","setPaginationOnLoad","aptUrl","parsedData","resultsContainer","childNodes","CLASS_NAME_DISPLAY_EXCEPTION","CLASS_NAME_SPACING_EXCEPTION","CSS_SELECTOR_DISPLAY_EXCEPTION","CSS_SELECTOR_SPACING_EXCEPTION","cssRule","rules","createWildcardSelector","wildcardSelector","createSelector","splitSelectors","excludeElementsRule","exclude","spacingSelector","appendSpacingException","displaySelector","appendDisplayException","createStyles","include","stylesheet","includeElementsRule","print","styles","media","createStylesheet","exceptionElements","elements","getParent","parentElement","getAllParentElements","mapExceptionElements","printState","displayExceptions","spacingExceptions","initialize","terminate","removeChild","setupPrintState","onClickPrintHandler","buildProduct","strength","getProductData","productCardDatalayer","bindClickListener","ProductWalkthrough","totalNumOfSteps","DATA_WALKTHROUGH_STEP","walkthroughOnInit","$SectionStep","currentIdxPos","btnsContainer","navigateSteps","displayModal","$Modal","setCookiesToFalse","initWalkthroughSteps","$WelcomeStep","step1","lazyLoadImages","step","currentStep","setCookiesToTrue","$ContinueToStepsBtn","$RemindMeLaterBtn","$CloseBtn","$navnextBtn","$navprevBtn","$navcarousel","DEFAULT_LABELS","$decrement","$increment","$quantityWrapper","$decrementLabel","$incrementLabel","filterQuantity","newVal","deferredValue","spliceNum","setLabels","setButtonState","TAB","BACKSPACE","ctrlKey","PAGE_UP","PAGE_DOWN","pdpSelectorDataJSON","pdpSelectorDataElement","onButtonFocus","onInput","onKeydown","resetButtons","dropDownFilters","$dropDownInput","$filterList","$filterListitems","$listCTA","Stats","initMobileSlider","createDocBtns","docResource","selectDocBody","docs","docId","createDayTimeOptions","dayTimeSelector","dayTimeRange","dayTimeOptions","requestAppointmentForm","requestInfo","$reqApptReason","ResourceList","DayTimeRangeOptions","$selectDoc","populateClinetForm","$apptDateTime","raaDatalayer","resourceName","resouceName","isExisting","isExistClient","preferredDate1","preferredDate2","preferredDate3","preferredTime1","preferredTime2","preferredTime3","confirmRequest","datalayerPushPostSubmit","$apptDetails","$bookConfirm","initRAAForm","elTime","elTimeWrapper","dkey","elDay","elDateWrapper","pkey","preferredDateDisplay1","preferredTimeDisplay1","preferredDateDisplay2","preferredTimeDisplay2","preferredDateDisplay3","preferredTimeDisplay3","buildrequestDetialsPage","datalayerPushComfirm","docR","timeOptions","scrollY","$backToTop","getFocusable","DISABLED_CLASS_NAME","RotatingCarousel","$slider","$pauseLabel","$playLabel","$next","$prev","$playPause","setupSlider","paused","play","pause","pauseOnHover","customPaging","appendDots","onNext","onPrev","onPlayPause","onBeforeChange","ScrollTo","CLASS_NAME_INVALID","CLASS_NAME_HIGHLIGHT","CLASS_NAME_VALID","EVENT_VALIDATION","optionsHtmlStr","onValidationChange","selected","rootClass","selectAttributes","inner","slidesPerRow","$serviceSlider","$clientSliderFilter","$clientSlider","$serviceSliderFilter","$serviceSliderFilter2","filtervalue","slickFilterable","filterName","initClientSlider","serviceSlider","SLICK_OPTIONS","Shop50Promo","isSlicked","setupCarousel","screenMdMax","started","targetID","initStatMobileSlider","StoryCarousel","DeliveryAddress","$submitCtrl","onAddressChange","onPaymentChange","$desktopButtons","$mobileButtons","showContentForActiveButton","$buttons","containerClass","caretId","$contentToShow","tabContents","getElementsByClassName","currentTabId","startY","isInitialLoad","viewportWidth","innerWidth","handleTouchStart","touches","clientX","clientY","handleTouchMove","xDiff","yDiff","tablinks","checkId","openTab","tabId","check","tabData","contentCheck","activeTabContent","activeTabLink","tabClass","block","isTabSelected","tabstatus","targetElementOffset","defaultValue","activeValue","borderValue","mobBorderValue","checkActiveClass","checkmobActiveClass","popover","placement","hightLightDay","tooltip","$searchButton","$searchInput","handleSearch","searchInputValue","careType","baseUrl","$logo","$text","UrgentCareVWRForm","hideErrors","dataRedirect","initHelpshiftChat","Helpshift","openHelpshiftChat","helpshiftCloseBtn","isUrgentCarePage","observer","MutationObserver","disconnect","observe","childList","subtree","$VWRChatWrapper","$VWR","$VWRChatCTA","$HelpshiftChatBubbleBtn","$HelpshiftAlertContainer","$HelpshiftCloseBtn","UrgentCareVWRWaitTime","updateMsgAndWaitTime","$LastUpdated","$VWRZeroNav","$VWRMessage","$WaitTime","$VWRLabel","$VWRComponent","getCurrentWaitTime","CurrentStories","activeElements","getActiveSelectOptions","activeImgVid","activeSortOption","activeCategory","VoiceArticles","Header","activeCategoryEl","activeImgVideoEl","activeSortOptionEl","activePageEl","selectFilterOption","selectCategoryOption","categoryPill","activePill","applyActiveCategory","VetsourceBannerModal","showAlertModal","$VetsourceModalLink","$whitePapersSlider","whitePapersSlider","sendAddToCart","sendApplyPromo","sendRemoveFromCart","cartDatalayer","buildTransactionAction","actionDetails","affiliation","revenue","tax","coupon","subscription","customerType","currentPage","previousPageName","flowType","stepInfo","dataPoint","checkoutConfirmationDataLayer","checkoutOrderDetails","$orderInfo","$orderCard","paymentType","transactionId","refills","dimension89","dimension90","dimension94","dimension104","dimension106","dimension107","dimension108","dimension114","dashboardDatalayer","reminder","cta","initRemindersImpressions","appointments","initAppointmentsImpressions","initRefillsImpressions","recommendations","initVetRecommendationsImpressions","$card","sendCheckoutClick","sendImpression","buttonAction","buttonLabel","signUpInfo","buttonType","datalayerPushStepOne","datalayerPushStepTwo","datalayerPushStepThree","datalayerPushStepFour","datalayerPushStepFive","datalayerPushStepSix","reasonDisplayText","dataLayerObject","sendClick","productDetails","autoship","sendProductDetailView","ReferPatientPromoDataLayer","Reason","OtherDetails","eventName","ctaLabel","oabLocation","vetRecommendations","initSeviceRecommendationsImpressions","recommendationCard","contains","allCardHidden","filterServiceList","objectFitImages","Store","commit","AddressParty","addOrEditAddressService","validationStatus","Parties","setAddressAsPrimary","SET_ADDRESSES","SET_LAST_CHANGED","SET_LOADING_FORM","SET_LOADING_LINE","shopUrl","checkoutUrl","formatAddress","EXCEPTION_BEHAVIOR_VALUES","DEFAULT_PENDING_UPDATE","DEFAULT_ADDLINE_OPTIONS","cachedMappedLines","isReview","pendingUpdate","petSelectionValidated","shippingTotalFormatted","subtotalFormatted","taxTotalFormatted","totalFormatted","billingAddressValidation","dispatch","cartService","cartSubmitService","cartAddLineService","addedLineIndex","linesGAProducts","cartAddMultipleLineService","removeLinesService","LineIds","removedLineIndex","updateLinePayload","CartLineId","updateLineService","validatePromoService","removePromoService","setCartData","ShippingTotal","TaxTotal","EntityOrderId","BillingParty","ShippingParty","mappedLines","Lines","setCartSummary","billingPartyState","billingPartyLastName","billingPartyFirstName","billingPartyValidation","CardType","pendingPetLineIds","pendingRemoveBackorder","flavorLabel","packagingLabel","strengthSizeLabel","strengthSizeSuppliesLabel","rxFormLabel","LineId","getProp","ProductUrl","pendingUpdateLineId","SET_TRANSACTION_ID","SET_CACHED_LINES","SET_CURRENCY_CODE","SET_DISCOUNT","SET_ERROR","SET_FORMATTED_SUMMARY","SET_HOSPITAL_ID","validated","SET_RAW_LINES","SET_SHIPPING_TOTAL","SET_SUMMARY","checkoutService","setRoute","SET_BILLING_VALIDATION","writable","definitions","setReadonly","proxy","Proxy","countdown","elementName","seconds","interval","setInterval","clearInterval","arr","EVENT_FOCUS","EVENT_BLUR","DEFAULT_ELEMENT_OPTIONS","originElement","initialFocusElement","firstKeys","HOME","lastKeys","END","nextShiftKeys","prevShiftKeys","nodeType","Node","ELEMENT_NODE","trapKeys","trapShiftKeys","setInitialFocus","maxIndex","activeIndex","shiftKey","isFirst","isLast","triggerBreakout","matchIndex","onFocus","focusableElementSelectors","selectorStr","Sitecore","PageModes","PageEditor","CTRL","sassVars","screenSmMin","screenSmMax","screenXlMin","screenXlMax","dataAttribute","contextId","contextEl","format","currency","decimalPrice","PROPERTY_COMPUTED","PROPERTY_FILTER","PROPERTY_STATE","PROPERTY_WATCH","REACTIVE_PROPERTIES","SYM","DEF","DEFAULT_DEFINITION","definition","virtualDefinition","updateFn","descriptor","filters","updates","oldValue","deferred","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","$element1","$element2","BluefinException","self","instance_id","iframe_selector","callbacks","errorBack","successBack","invalidBack","domain","iframewindow","loadBack","matchElementStyle","matchStyle","fontSize","fontColor","fontFamily","rgbMatch","elem","getComputedStyle","color","fontSizeNum","d2h","fams","fontFamilySplit","outter","font","buildSrc","version_path","payment_method","devServer","account","matchLabelStyle","labelFontSize","labelFontColor","labelFontFamily","matchInputStyle","inputFontSize","inputFontColor","inputFontFamily","lang","cvv","expy","layout","inputWidth","labelWidth","showPlaceholders","inputStyle","numberLabel","expyLabel","cvvLabel","masked","btoa","guid","s4","iFrameLoaded","readyAction","parentId","convertToCamelCase","iframeTag","showFrame","outerHTML","nodeName","contentWindow","contentDocument","defaultView","tmpAnchor","listener","attachEvent","load","completedAction","attributesToConvert","len","attributeSplitted","attributeNew","toUpperCase","readyState","oldOnload","isJSON","command","message_id","masked_data","postMessage","responseHandler","includeInvalid","fun","clear","setMasked","maskedData","dddsParms","respHandle","slideSelector","beforeFilter","newSlides"],"mappings":"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","file":"js/vca-scripts.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t3: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { isCancel } from 'axios';\r\nimport loginRedirect from '@utils/login-redirect';\r\n\r\nconst hasOwnProperties = (obj, ...props) => props.filter(prop => obj.hasOwnProperty(prop)).length === props.length;\r\n\r\n/** @typedef {{ success: boolean, data: (?Object<string, any>|?Array<any>), error: ?string }} ResponseClass */\r\n\r\nclass Response {\r\n /** @type {ResponseClass} config */\r\n constructor({ cancelled, data, error, status, success, IsPaymentFailureFF, FeatureFlags, IsAccountLocked}) {\r\n if(typeof success === 'undefined' || typeof status === 'undefined') {\r\n throw new Error('All Response instances must have a success state and status code')\r\n }\r\n\r\n this.cancelled = cancelled ?? false;\r\n this.data = data ?? null;\r\n this.error = error ?? null;\r\n this.status = status;\r\n this.success = success;\r\n this.IsPaymentFailureFF = IsPaymentFailureFF ?? null;\r\n this.IsAccountLocked = IsAccountLocked ?? null;\r\n this.FeatureFlags = FeatureFlags ?? null;\r\n }\r\n}\r\n\r\nfunction httpSuccess(response) {\r\n const status = response.status;\r\n let data = response.data;\r\n let error = null;\r\n let success = true;\r\n let IsPaymentFailureFF = null;\r\n let IsAccountLocked = null;\r\n let FeatureFlags = null;\r\n \r\n // if these three properties are in the response body, then the API is using the standard response\r\n if(hasOwnProperties(response.data, 'Data', 'ErrorMessage', 'Success')) {\r\n // if this is the case, then we can flatten the response\r\n data = response.data.Data;\r\n error = response.data.ErrorMessage;\r\n success = response.data.Success;\r\n IsPaymentFailureFF = response.data.IsPaymentFailureFF;\r\n IsAccountLocked = response.data.IsAccountLocked;\r\n FeatureFlags = response.data.FeatureFlags;\r\n\r\n if(error === '401') {\r\n loginRedirect(response.data.RedirectUrl)\r\n return;\r\n };\r\n }\r\n \r\n return new Response({\r\n data,\r\n error,\r\n status,\r\n success,\r\n IsPaymentFailureFF,\r\n IsAccountLocked,\r\n FeatureFlags\r\n });\r\n}\r\n\r\n/**\r\n * handle http error messaging for response\r\n * - will always be an error\r\n * @param {Object<string, any>} err\r\n * @return {ResponseClass} formatted response data\r\n */\r\nfunction httpError(err) {\r\n let error = err.message;\r\n let status = null;\r\n\r\n if(err.response) {\r\n const msg = err.response.data?.errors || 'Server Error:';\r\n error = `${msg}: ${err.response.status}`;\r\n status = err.response.status;\r\n } else if(err.request) {\r\n error = 'Request was made, but there was no response from server.';\r\n } else {\r\n if(isJson(err)){\r\n const errObj = err.toJSON();\r\n status = errObj.status;\r\n }\r\n }\r\n\r\n return new Response({\r\n cancelled: isCancel(err),\r\n error,\r\n status,\r\n success: false\r\n });\r\n}\r\n\r\n\r\nfunction isJson(str) {\r\n try {\r\n str.toJSON();\r\n } catch (e) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * send http request and format the response\r\n * @param {Function} callback promise or async function used to send http request\r\n * @return {ResponseClass} formatted response data\r\n */\r\nexport default async function(callback) {\r\n try {\r\n const response = await callback();\r\n return httpSuccess(response);\r\n } catch (err) {\r\n return httpError(err);\r\n }\r\n}\r\n","import axios from 'axios';\r\nimport handler from './api-handler';\r\n\r\nconst api = axios.create();\r\n\r\n// cancellation - https://github.com/axios/axios#cancellation\r\nconst CancelToken = axios.CancelToken;\r\nconst CancelTokenSource = axios.CancelToken.source();\r\n\r\nexport default class {\r\n constructor(route) {\r\n this.route = route;\r\n this.host = null;\r\n this.cancelHandler = null;\r\n }\r\n\r\n /**\r\n * change the route of this ApiService instance\r\n * @param {string} route new route path to use\r\n */\r\n setRoute(route) {\r\n this.route = route;\r\n }\r\n\r\n /**\r\n * manually change the host of this ApiService instance\r\n * @param {string} host new host path to use\r\n */\r\n setHost(host) {\r\n this.host = host;\r\n this.route = `${host}${this.route}`;\r\n }\r\n\r\n /**\r\n * send get request and send any parameters as url queries\r\n * @param {Object<string, string>} params any url queries to be appended to the route path\r\n * @param {?string} slug slug to be appended to the route path\r\n * @param {?Object<string, any>} config axios configuration object - https://github.com/axios/axios#request-config\r\n */\r\n query(params, slug = null, config = {}) {\r\n const route = slug ? `${this.route}/${slug}` : this.route;\r\n if(CancelTokenSource) {\r\n CancelTokenSource.cancel('operation cancelled by the user');\r\n }\r\n config.cancelToken = this.cancelToken;\r\n\r\n return handler(\r\n api.get.bind(this, route, { params, config })\r\n );\r\n }\r\n\r\n /**\r\n * send get request and append a slug\r\n * @param {string} route route path of the http request\r\n * @param {?string} slug slug to be appended to the route path\r\n * @param {?Object<string, any>} config axios configuration object - https://github.com/axios/axios#request-config\r\n */\r\n get(slug = '', config = {}) {\r\n return handler(\r\n api.get.bind(this, `${this.route}/${slug}`, {\r\n cancelToken: this.cancelToken,\r\n ...config\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * send post request with parameters\r\n * @param {string} route route path of the http request\r\n * @param {Object<string, string>} params parameters to be added to the request body\r\n * @param {?Object<string, any>} config axios configuration object - https://github.com/axios/axios#request-config\r\n */\r\n post(params, config = {}) {\r\n if(CancelTokenSource) {\r\n CancelTokenSource.cancel('operation cancelled by the user');\r\n }\r\n return handler(\r\n api.post.bind(this, this.route, params, {\r\n cancelToken: this.cancelToken,\r\n ...config\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * send put request with parameters\r\n * @param {string} route route path of the http request\r\n * @param {Object<string, string>} params parameters to be added to the request body\r\n * @param {?Object<string, any>} config axios configuration object - https://github.com/axios/axios#request-config\r\n */\r\n put(params, config = {}) {\r\n return handler(\r\n api.put.bind(this, this.route, params, {\r\n cancelToken: this.cancelToken,\r\n ...config\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * send delete request with parameters\r\n * @param {string} route route path of the http request\r\n * @param {Object<string, string>} params parameters to be added to the request body\r\n * @param {?Object<string, any>} config axios configuration object - https://github.com/axios/axios#request-config\r\n */\r\n delete(params, config = {}) {\r\n return handler(\r\n api.delete.bind(this, this.route, {\r\n data: params,\r\n cancelToken: this.cancelToken,\r\n ...config\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * cancels the currently active request\r\n */\r\n cancel() {\r\n this.cancelHandler(`Request at ${this.route} was canceled`);\r\n }\r\n\r\n /**\r\n * generate and return a new cancel token for each request\r\n * - set as a getter to simulate a private Class property (can't be overwritten)\r\n */\r\n get cancelToken() {\r\n return new CancelToken(executor => (this.cancelHandler = executor));\r\n }\r\n}\r\n","import ApiService from '@api/api-service';\r\n\r\nexport const url = \"/oab-api/oab-search-hospital\";\r\nexport default new ApiService(url);","import { url as FindH } from '../index';\r\n\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${FindH}`;\r\nexport default new ApiService(url);","import { url as accountUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${accountUrl}/addnewpaymentmethod`;\r\nexport default new ApiService(url);\r\n","import { url as accountUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${accountUrl}/GetPaymentMethods`;\r\nexport default new ApiService(url);\r\n","import { url as accountUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${accountUrl}/RemovePaymentMethod`;\r\nexport default new ApiService(url);\r\n","import { url as accountUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${accountUrl}/SetDefaultPaymentMethod`;\r\nexport default new ApiService(url);\r\n","import { url as accountUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${accountUrl}/UpdatePaymentMethod`;\r\nexport default new ApiService(url);","import ApiService from '@api/api-service';\r\n\r\nexport const url = `/api/orders/UpdateOrderPaymentToVetsource`;\r\nexport default new ApiService(url);","import { url as accountUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${accountUrl}/addnewpaymentmethod`;\r\nexport default new ApiService(url);\r\n\r\n\r\n","import ApiService from '@api/api-service';\r\n\r\nexport const url = '/api/account';\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/AddBillingAndPaymentMethodToCart`;\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/AddExistingPaymentMethod`;\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/addline`;\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/AddShippingMethod`;\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/GetBillingInformation`;\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/GetShippingInformation`;\r\nexport default new ApiService(url);\r\n","import ApiService from '@api/api-service';\r\n\r\nexport const url = '/api/cart';\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/selectOrAddAddress`;\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/SelectOrAddBillingAddress`;\r\nexport default new ApiService(url);\r\n","import { url as ccdeUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${ccdeUrl}/agree`;\r\nexport default new ApiService(url);\r\n","import { url as ccdeUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${ccdeUrl}/userChallenge`;\r\nexport default new ApiService(url);\r\n","import { url as ccdeUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${ccdeUrl}/enroll`;\r\nexport default new ApiService(url);\r\n","import { url as ccdeUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${ccdeUrl}/cancel`;\r\nexport default new ApiService(url);\r\n","import { url as ccdeUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${ccdeUrl}/contract`;\r\nexport default new ApiService(url);\r\n","import { url as ccdeUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${ccdeUrl}/settings`;\r\nexport default new ApiService(url);\r\n","import { url as ccdeUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${ccdeUrl}/userInformation`;\r\nexport default new ApiService(url);\r\n","import { url as ccdeUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${ccdeUrl}/hospitalSearch`;\r\nexport default new ApiService(url);\r\n","import { url as ccdeUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${ccdeUrl}/plan`;\r\nexport default new ApiService(url);\r\n","import ApiService from '@api/api-service';\r\n\r\n\r\nexport const url = process.env.NODE_ENV === 'development' ? \"/api/careclub\" : \"api/careclub\";\r\nexport default new ApiService(url);","import ApiService from '@api/api-service';\r\n\r\n\r\nexport const url = \"/fah-api/search-hospital\";\r\nexport default new ApiService(url);","import { url as findH } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${findH}`;\r\nexport default new ApiService(url);","import ApiService from '@api/api-service';\r\n\r\n\r\nexport const url = \"/fah-api/get-first-available\";\r\nexport default new ApiService(url);","import ApiService from '@api/api-service';\r\n\r\n\r\nexport const url = \"/fah-api/search-hospital-uc\";\r\nexport default new ApiService(url);","import { url as findH } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${findH}`;\r\nexport default new ApiService(url);\r\n","import { url as findH } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${findH}/SearchHospital`;\r\nexport default new ApiService(url);\r\n","import { url as findH } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${findH}/GetHospitalFormLabel`;\r\nexport default new ApiService(url);\r\n","import ApiService from '@api/api-service';\r\n\r\n\r\nexport const url = \"/api/NCA\";\r\nexport default new ApiService(url);","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/invoice/invoices`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/confirm-challenge-and-change-hospital`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/get-challenge`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/getgoogleuserinfo`;\r\nexport default new ApiService(url);","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/get-hospitals`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/subscriptions/list`;\r\nexport default new ApiService(url);\r\n","import ApiService from '@api/api-service';\r\n\r\n\r\nexport const url = \"/myvca-api\";\r\nexport default new ApiService(url);","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/invoice/invoices`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/change-password`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/update-emergency-contact`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/update-pet-photo`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/update-primary-address`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/update-primary-contact`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/subscriptions/details/updateaddress`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/subscriptions/details/UpdatePayment`;\r\nexport default new ApiService(url);\r\n","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/subscriptions/details/update`;\r\nexport default new ApiService(url);\r\n","import ApiService from '@api/api-service';\r\n\r\n\r\nexport const url = \"/api/newsarchive\";\r\nexport default new ApiService(url);","import { url as myVCAURL } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${myVCAURL}/list`;\r\nexport default new ApiService(url);\r\n","import { url as oabUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${oabUrl}/book-draft-appointment`;\r\nexport default new ApiService(url);\r\n","import { url as oabUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${oabUrl}/confirm-book-appointment`;\r\nexport default new ApiService(url);\r\n","import { url as oabUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${oabUrl}/confirm-challenge`;\r\nexport default new ApiService(url);\r\n","import { url as oabUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${oabUrl}/get-all-resource-slots`;\r\nexport default new ApiService(url);\r\n","import { url as oabUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${oabUrl}/get-appt-flow-settings`;\r\nexport default new ApiService(url);\r\n","import { url as oabUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${oabUrl}/get-challenge`;\r\nexport default new ApiService(url);\r\n","import { url as oabUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${oabUrl}/get-first-available-resource`;\r\nexport default new ApiService(url);\r\n","import { url as oabUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${oabUrl}/get-slots-by-resource-id`;\r\nexport default new ApiService(url);\r\n","import { url as oabUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${oabUrl}/get-wellness-options`;\r\nexport default new ApiService(url);\r\n","import ApiService from '@api/api-service';\r\n\r\n\r\nexport const url = process.env.NODE_ENV === 'development' ? \"/oab-api\" : \"oab-api\";\r\nexport default new ApiService(url);","import ApiService from '@api/api-service';\r\n\r\nexport const url = '/api/orders';\r\nexport default new ApiService(url);\r\n","import { url as ordersUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${ordersUrl}/orderlisting`;\r\nexport default new ApiService(url);\r\n","import { url as ordersUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${ordersUrl}/UpdateOrderPayment`;\r\nexport default new ApiService(url);","import ApiService from '@api/api-service';\r\n\r\nexport const url = '/api/catalog/product';\r\nexport default new ApiService(url);\r\n","import { url as catalogUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${catalogUrl}`;\r\nexport default new ApiService(url);\r\n","import { url as raaUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${raaUrl}/confirm-book-appointment`;\r\nexport default new ApiService(url);\r\n","import { url as raaUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${raaUrl}/get-reqappt-flow-settings`;\r\nexport default new ApiService(url);\r\n","import ApiService from '@api/api-service';\r\n\r\n\r\nexport const url = process.env.NODE_ENV === 'development' ? \"/raa-api\" : \"raa-api\";\r\nexport default new ApiService(url);","import ApiService from '@api/api-service';\r\n\r\nexport const url = '/api/catalog/frequentlyBoughtTogether';\r\nexport default new ApiService(url);\r\n","import { url as relatedProductsUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${relatedProductsUrl}`;\r\nexport default new ApiService(url);\r\n","const ELEMENT_IMAGE = '__image';\r\nconst ELEMENT_CONTENT = '__content';\r\n\r\nconst CLASS_NAME = '.fifty-fifty';\r\nconst CLASS_NAME_IMAGE = CLASS_NAME + ELEMENT_IMAGE;\r\nconst CLASS_NAME_CONTENT = CLASS_NAME + ELEMENT_CONTENT;\r\n\r\nconst $rootEl = $(CLASS_NAME);\r\n\r\n$rootEl.each(index => {\r\n const $el = $rootEl.eq(index);\r\n\r\n // selector for all main content of the component\r\n const $content = $el.find(`${CLASS_NAME_IMAGE},${CLASS_NAME_CONTENT}`);\r\n // jquery will populate element array based on order of the DOM\r\n // this allows us to use the first item in the array to tell where the image is\r\n const firstColClasses = $content.eq(0).attr('class');\r\n // if the first item is the image, add class to reverse display order on mobile\r\n if(firstColClasses?.includes(ELEMENT_IMAGE)) {\r\n $el.addClass('mobile-swap-order');\r\n }\r\n\r\n const fiftyFiftyFooter = $el.find(`${CLASS_NAME}__footer`);\r\n if(!fiftyFiftyFooter.length <= 0) {\r\n const isFooterEmpty = $(fiftyFiftyFooter).html().trim().length == 0;\r\n\r\n if (isFooterEmpty) {\r\n fiftyFiftyFooter.remove();\r\n }\r\n }\r\n \r\n});\r\n","import * as templates from './templates';\r\n\r\nconst createNewPet = (newPets, newPetBody) => {\r\n console.log(newPets,'new')\r\n var newPetItems = '';\r\n // newPetItems += `${templates.newPet({ displayName: newPets })}`;\r\n newPetBody.find('.js-acitve-btn').remove();\r\n\r\n $.each(newPets, function (i, item) {\r\n let IsCareClubMember = false;\r\n let gender = '0';\r\n if(item.SexId){\r\n gender = item.SexId;\r\n }\r\n if(item.CareClubPlan == null){\r\n IsCareClubMember = true\r\n }\r\n newPetItems += `${templates.newPet({ displayName: item.Name })}`;\r\n\r\n });\r\n newPetBody.prepend(newPetItems);\r\n}\r\n\r\n\r\nconst createExistPetBtns = (existPets, existPetBody) => {\r\n\r\n var existPetItems = '';\r\n $.each(existPets, function (i, item) {\r\n if (item.SpeciesId == 1 || item.SpeciesId == \"1\" || item.SpeciesId == 2 || item.SpeciesId == \"2\") {\r\n let IsCareClubMember = false;\r\n let gender = '0';\r\n if (item.SexId) {\r\n gender = item.SexId;\r\n }\r\n\r\n if (item.CareClubPlan == null) {\r\n IsCareClubMember = true\r\n }\r\n\r\n existPetItems += `${templates.existPet({ displayName: item.Name, imgURL: item.PetPhoto, petId: item.Id, careClub: item.IsPatientCareClubMember, species: item.SpeciesName, isMember: IsCareClubMember, genderId: gender })}`;\r\n } \r\n });\r\n\r\n existPetBody.prepend(existPetItems); \r\n}\r\n\r\n\r\n\r\nconst createPetTypeBtns = (petTypes, petTypetBody, othersListy) => {\r\n var catTypesItems = '';\r\n var dogTypesItems = '';\r\n var otherPetTypesItems = '';\r\n\r\n $.each(petTypes, function (i, item) {\r\n if (item.SpeciesId == 1) {\r\n dogTypesItems += `${templates.petType({ displayName:item.DisplayName, imgURL:item.IconBaseUrl, imgURL2:item.IconHoverUrl, speciesId:item.SpeciesId, name:item.Name })}`;\r\n }\r\n else if (item.SpeciesId == 2) {\r\n catTypesItems += `${templates.petType({ displayName:item.DisplayName, imgURL:item.IconBaseUrl, imgURL2:item.IconHoverUrl, speciesId:item.SpeciesId, name:item.Name })}`;\r\n }\r\n else {\r\n otherPetTypesItems += `${templates.otherPetType({ displayName:item.DisplayName, speciesId:item.Id, name:item.Name })}`;\r\n $('.js-vca-dropdown-button').show();\r\n }\r\n });\r\n petTypetBody.prepend(catTypesItems);\r\n petTypetBody.prepend(dogTypesItems);\r\n // othersListy.append(otherPetTypesItems);\r\n}\r\n\r\nconst populatedBreedsList = (breedsList, selectBreedEl, species) => {\r\n let breedsListObj = '<option value=\"\" selected=\"selected\">Breed*</option>';\r\n $.each(breedsList, function (i, item) {\r\n if(item.SpeciesId == species){\r\n breedsListObj += `${templates.breedsOptions({ displayName:item.Name,Id:item.Id, speciesId:item.SpeciesId })}`;\r\n }\r\n });\r\n selectBreedEl.html(breedsListObj);\r\n}\r\n\r\n\r\nconst createVerifyInputs = (petName, verifyBody) => {\r\n var petInputs = '';\r\n\r\n $.each(petName, function (i, item) {\r\n petInputs += `${templates.petInputGroup({ displayName:item })}`;\r\n });\r\n verifyBody.html(petInputs);\r\n}\r\n\r\nconst createServiceBtn = (services, serviceList, servicesDesc) => {\r\n var servicesAry = '';\r\n var serviceDescAry = '';\r\n\r\n $.each(services, function (i, item) {\r\n servicesAry += `${templates.serviceBtn({ displayName:item.ServiceName, imgURL:item.Icon, serviceId:item.ServiceId, ind:i })}`;\r\n serviceDescAry += `${templates.serviceDesc({ displayName:item.ServiceName, desc:item.Description, ind:i })}`;\r\n });\r\n serviceList.html(servicesAry);\r\n servicesDesc.html(serviceDescAry);\r\n // othersListy.append(otherPetTypesItems);\r\n}\r\n\r\n\r\nconst createHospitalList = (hospitals, hospitalDesc) => {\r\n var hospitalsAry = '';\r\n\r\n $.each(hospitals, function (i, item) {\r\n hospitalsAry += `${templates.hospitalItem({ name:item.DisplayName, id:item.HospitalId, index:i })}`;\r\n });\r\n hospitalDesc.html(hospitalsAry);\r\n}\r\n\r\nexport {\r\n createExistPetBtns,\r\n createPetTypeBtns,\r\n createVerifyInputs,\r\n populatedBreedsList,\r\n createServiceBtn,\r\n createHospitalList,\r\n createNewPet\r\n }","import settings from '@api/routes/ccde-api/get-appt-flow-settings';\r\nimport getChallenge from '@api/routes/ccde-api/get-challenge';\r\nimport getAgreement from '@api/routes/ccde-api/get-agreement';\r\nimport getHospitals from '@api/routes/ccde-api/get-hospitals'\r\nimport agree from '@api/routes/ccde-api/agree-post';\r\nimport enroll from '@api/routes/ccde-api/enroll-post';\r\nimport confirmChallenge from '@api/routes/ccde-api/confirm-challenge';\r\n//import createNewClientapi from '@api/routes/ccde-api/createNewClient';\r\nimport getPlan from '@api/routes/ccde-api/get-plan';\r\nimport expireMembership from '@api/routes/ccde-api/expire-membership';\r\nimport * as createEl from './ccde-create-elements';\r\n\r\n//import firstdataMock from './mock-fist-ava-response.json';\r\n//import datejsonMock from './mock-date-time-response.json';\r\n\r\nvar VCA = VCA || {};\r\nvar isEnrollAnotherPet = false;\r\nvar filterCareClubMem = [];\r\nvar isMultipetFeature = false;\r\nvar isPaymentCaptureCcdeEnabled = false;\r\nvar isExistingPet;\r\nvar isAccessPlan = false;\r\nvar planId;\r\n//var firstdata = firstdataMock;\r\n//var datejson = datejsonMock;\r\n\r\nvar timesToTry = 1;\r\nvar count = 0;\r\nvar accessPlan = {};\r\nvar standardPlan = {};\r\nvar planValue = {};\r\nvar planLists = [];\r\nvar isBindPlanServices = false;\r\nvar petId;\r\nvar standardPlanName;\r\nvar ccdePetAge;\r\nvar ccdePetChangedAge;\r\n// assigned for patient id bug fix -because the careclubinfo.isloggedin as assigned true\r\nvar isCareClubLoggedin;\r\n\r\nVCA.CareClubForm = (function ($) {\r\n\r\n var ui = {};\r\n\r\n var careClubInfo = {\r\n 'hospitalIDValue': '',\r\n 'hospitalName': '',\r\n 'hospitalType': '',\r\n 'HospitalAddressLine1': '',\r\n 'HospitalAddressLine2': '',\r\n 'HospitalCity': '',\r\n 'HospitalState': '',\r\n 'HospitalZipCode': '',\r\n 'MapLink': '',\r\n 'isLoggedIn': '',\r\n 'petName': 'pet',\r\n 'petGender': '',\r\n 'isEnrolled': '',\r\n 'sexId': '',\r\n 'petSpayed': '',\r\n 'petSpecies': '',\r\n 'speciesId': '',\r\n 'petsAgeYear': '',\r\n 'petsAgeMonth': '',\r\n 'petAgeDataLayerFormat': '',\r\n 'petBreed': '',\r\n 'petBreedId': '',\r\n 'isPrimaryHospital': '',\r\n 'firstName': '',\r\n 'lastName': '',\r\n 'address': '',\r\n 'address2': '',\r\n 'city': '',\r\n 'state': '',\r\n 'zip': '',\r\n 'email': '',\r\n 'phone': '',\r\n 'phoneDigitsOnly': '',\r\n 'petId': '0',\r\n 'challengeSuccessful': false,\r\n 'challengeSetId': '',\r\n 'addressChallengeId': '',\r\n 'addressChallengeAnswer': '',\r\n 'petNameChallengeId': '',\r\n 'petNameChallengeAnswer': '',\r\n 'isNewClient': 'null',\r\n 'clientId': '0',\r\n 'challengeClientId': '',\r\n 'petImgURL': '',\r\n 'isCareClubMember': '',\r\n 'clientInfo': '',\r\n 'planid': '',\r\n 'planName': '',\r\n 'utm_campaign': '',\r\n 'utm_content': '',\r\n 'utm_medium': '',\r\n 'utm_source': '',\r\n 'utm_term': '',\r\n 'gclid': '',\r\n 'petInfo': [],\r\n 'existPet': [],\r\n 'newPet': {\r\n Name: ''\r\n },\r\n 'breedsList': [],\r\n 'hospitalType': '',\r\n 'hospitalPhoneNumber': '',\r\n 'requestAnAppointmentUrl': '',\r\n 'bookAnAppointmentUrl': '',\r\n 'zipLat': '',\r\n 'zipLong': '',\r\n 'zipRadius': '',\r\n 'membershipId': '',\r\n 'careClubDigitalEnrollExpirationInDays': ''\r\n }\r\n\r\n function cacheUI() {\r\n ui.$welcome = $('section[data-step=\"welcome\"]');\r\n ui.$selectExistPet = $('section[data-step=\"select-pet\"]');\r\n ui.$preSigned = $('section[data-step=\"existing-memeber\"]');\r\n ui.$getInTouch = $('section[data-step=\"get-in-touch\"]');\r\n ui.$healthStatus = $('section[data-step=\"health-status\"]');\r\n ui.$petReview = $('section[data-step=\"info-hospital-review\"]');\r\n ui.$confirmInfo = $('section[data-step=\"owner-info\"]');\r\n ui.$confirmation = $('section[data-step=\"confirmation\"]');\r\n ui.$paymentCapture = $('section[data-step=\"payment-capture\"]');\r\n ui.$agreement = $('section[data-step=\"agreement\"]');\r\n ui.$petInfo = $('section[data-step=\"pet-info\"]');\r\n ui.$serviceStep = $('section[data-step=\"plan\"]');\r\n ui.$errorStep = $('section[data-step=\"error\"]');\r\n ui.$selectPet = $('section[data-step=\"pet-type-name\"]');\r\n ui.$verifyStep = $('section[data-step=\"verification\"]');\r\n ui.$hospitalSelector = $('section[data-step=\"hospital-selector\"]');\r\n ui.$incorrect = $('section[data-step=\"incorrect-answers\"]');\r\n ui.$progressBar = $('div[data-progress=\"bar\"]');\r\n ui.$sections = $('.js-seciton-step');\r\n ui.$backBtn = $('button[data-btn=\"back\"]');\r\n ui.$abandonLink = $('.js-abandon-link');\r\n ui.$cancelBtn = $('.js-cancel-btn');\r\n ui.$loginLink = $('.js-login-link');\r\n ui.loader = $('.js-loader');\r\n ui.hospitalLoader = $('.js-hospital-loader');\r\n ui.vetSlotList = $('.js-vet-slot-list');\r\n ui.$confirmationBtnsContainer = $('.ccde__confirmation-buttons');\r\n ui.$hospitalPhoneNum = $('.ccde-hospital-phonenum');\r\n ui.$planSelectorTermLink = $('.ccde__services__alt__fancy > .alt-fancy');\r\n ui.$geocoder;\r\n ui.$expireMembershipBtn = $('.js-expire-membership');\r\n ui.isCanada = $('[data-iscanada]').attr('data-iscanada');\r\n ui.$IsFeatureEnabled = $('#IsFeatureEnabled').val();\r\n ui.$IsMultiPetFeatureEnabled = $('#IsMultiPetFeatureEnabled').val();\r\n ui.$EnablePaymentCaptureCcde = $('#EnablePaymentCaptureCcde').val();\r\n }\r\n\r\n function clearCache() {\r\n $('#petName').val('');\r\n $('#breed').val('');\r\n $('#year').val('');\r\n $('#month').val('');\r\n $('#missingAddress').val('');\r\n $('.js-gender-group').find('.btn-selecter').removeClass('active');\r\n $('.js-acitve-btn').removeClass('active');\r\n }\r\n\r\n function init() {\r\n isAccessPlan = window.location.pathname.includes(\"access-plan\");\r\n if ($('.ccde__wrapper').length <= 0) {\r\n return;\r\n };\r\n // Loaded via <script> tag, create shortcut to access PDF.js exports.\r\n var pdfjsLib = window['pdfjs-dist/build/pdf'];\r\n\r\n // The workerSrc property shall be specified.\r\n pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://vcahospitals.com/content-2/js/pdf.worker.js';\r\n\r\n cacheUI();\r\n initOABForm();\r\n bindGoToStepClick();\r\n bindWelcomeClick();\r\n bindactiveBtnClick();\r\n bindSeclectHealthClick();\r\n bindPetInfoClick();\r\n bindpetConfirmClick();\r\n bindPlanServices();\r\n bindPetGenderClick();\r\n bindPetSpayedClick();\r\n bindEnrollPetClick();\r\n bindClientInfoFormClick();\r\n bindVerifyUserClick();\r\n scrollTrems();\r\n bindfieldUpdate();\r\n bindServiceTypeClick();\r\n bindSelectPetClick();\r\n bindSeclectExistPetClick();\r\n bindSeclectPetContinueClick();\r\n bindComfirmPlanClick();\r\n bindAcceptClick();\r\n closeListbox();\r\n showLoader();\r\n bindAgeChange();\r\n bindHoverAgreementButton();\r\n bindAbandonCloseClick();\r\n bindHospitalAction();\r\n bindHospitalSelect();\r\n bindChangeHospitalClick();\r\n bindExpireMembershipClick();\r\n bindBackBtnClick();\r\n }\r\n\r\n async function initOABForm() {\r\n if (ui.$welcome.attr('data-attr-hospId') != null) {\r\n careClubInfo.hospitalIDValue = ui.$welcome.attr('data-attr-hospId');\r\n }\r\n careClubInfo.hospitalType = ui.$welcome.attr('data-attr-hospType');\r\n careClubInfo.zipRadius = ui.$welcome.attr('data-attr-zipRadius');\r\n\r\n if (window.location.href.match(/\\?./)) {\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n\r\n for (const [key, value] of urlParams.entries()) {\r\n careClubInfo[key] = value;\r\n\r\n if (key == 'returnUrl' && -1 === value.toLowerCase().indexOf(\"javascript\") && -1 === value.toLowerCase().indexOf(\"script\")) {\r\n ui.$abandonLink.attr(\"href\", value);\r\n }\r\n }\r\n }\r\n\r\n showLoader();\r\n\r\n var params = { hospitalId: careClubInfo.hospitalIDValue };\r\n\r\n const { success, data, error } = await settings.query(params);\r\n let response = data;\r\n isMultipetFeature = (ui.$IsMultiPetFeatureEnabled == \"1\");\r\n if (!success) {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n hideLoader();\r\n $('.js-error-message').text(error);\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'error', '');\r\n return;\r\n }\r\n bindHospitalNameAddressValue(response);\r\n\r\n careClubInfo.isLoggedIn = response.IsLoggedIn;\r\n isCareClubLoggedin = response.IsLoggedIn;\r\n careClubInfo.isPrimaryHospital = response.IsPrimaryHospital;\r\n careClubInfo.hospitalName = response.HospitalName;\r\n let petTypes = response.Species;\r\n careClubInfo.breedsList = response.Breeds;\r\n careClubInfo.hospitalType = response.HospitalType;\r\n careClubInfo.hospitalPhoneNumber = response.HospitalPrimaryPhoneNumber;\r\n careClubInfo.requestAnAppointmentUrl = response.RequestAnAppointmentUrl;\r\n careClubInfo.bookAnAppointmentUrl = response.BookAnAppointmentUrl;\r\n\r\n if (careClubInfo.hospitalPhoneNumber && careClubInfo.hospitalPhoneNumber.startsWith(\"+1\")) {\r\n ui.$hospitalPhoneNum.attr('href', `tel:${careClubInfo.hospitalPhoneNumber ? careClubInfo.hospitalPhoneNumber : ''}`);\r\n } else {\r\n ui.$hospitalPhoneNum.attr('href', `tel:+1${careClubInfo.hospitalPhoneNumber ? careClubInfo.hospitalPhoneNumber : ''}`);\r\n }\r\n\r\n ui.$hospitalPhoneNum.html(careClubInfo.hospitalPhoneNumber ? careClubInfo.hospitalPhoneNumber : '');\r\n\r\n if (careClubInfo.hospitalType != null) {\r\n createDynamicRedirectButtons();\r\n }\r\n\r\n // let healthBtn = response.HealthStatus;\r\n\r\n if (careClubInfo.isLoggedIn) {\r\n $('.ccde__wrapper').addClass('js-logged-in-user');\r\n $('.ccde__wrapper').addClass('js-non-logged-in-title');\r\n careClubInfo.existPet = response.Client.Pets;\r\n filterCareClubMem = careClubInfo.existPet.filter((res) => res.IsPatientCareClubMember === false)\r\n careClubInfo.clientInfo = response.Client;\r\n careClubInfo.clientId = response.Client.ClientId;\r\n ui.$loginLink.addClass('hidden');\r\n\r\n //create existing pet buttons\r\n let existPetBody = ui.$selectExistPet.find(\".exist-pet-body\");\r\n // let existPetBody = ui.$selectExistPet.find( \".ccde__form__body\" );\r\n createEl.createExistPetBtns(careClubInfo.existPet, existPetBody);\r\n createPersonalInfoStep();\r\n //createPetIfoConfirm();\r\n } else {\r\n $('.ccde__wrapper').addClass('js-non-logged-in-user');\r\n }\r\n\r\n // Replace hospital confirmation activation template token.\r\n $('.js-activation-window').text(response.CareClubDigitalEnrollExpirationInDays);\r\n\r\n // createHealthStatusBtns(healthBtn);\r\n // let healthBody = ui.$healthStatus.find( \".ccde__form__body\" );\r\n // createEl.createHealthBtns(healthBtn, healthBody);\r\n\r\n //create pet buttons\r\n let petTypetBody = ui.$selectPet.find(\".ccde__form__body\");\r\n let othersList = ui.$selectPet.find(\".js-vca-dropdown-list\");\r\n createEl.createPetTypeBtns(petTypes, petTypetBody, othersList);\r\n\r\n hideLoader();\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'welcome', '');\r\n };\r\n\r\n function bindHospitalNameAddressValue(response) {\r\n if (response) {\r\n careClubInfo.HospitalAddressLine1 = response.HospitalAddressLine1;\r\n careClubInfo.HospitalAddressLine2 = response.HospitalAddressLine2;\r\n careClubInfo.HospitalCity = response.HospitalCity;\r\n careClubInfo.HospitalState = response.HospitalState;\r\n careClubInfo.HospitalZipCode = response.HospitalZipCode;\r\n careClubInfo.MapLink = response.MapLink;\r\n const addressParts = [\r\n careClubInfo.HospitalAddressLine1,\r\n careClubInfo.HospitalAddressLine2,\r\n careClubInfo.HospitalCity,\r\n careClubInfo.HospitalState,\r\n careClubInfo.HospitalZipCode\r\n ].filter(Boolean); // Filter out any empty, null, or undefined values\r\n\r\n $('.js-hospital-name').text(response.hospitalName);\r\n\r\n // Join parts and update the UI only if there's something to show\r\n const address = addressParts.length > 0 ? addressParts.join(', ') : '';\r\n $('.js-hospital-address').text(address);\r\n\r\n // Set the maps link if it exists\r\n if (careClubInfo.MapLink) {\r\n $('.js-get-direction').attr('href', careClubInfo.MapLink);\r\n }\r\n }\r\n\r\n }\r\n\r\n async function getHospitalSettings() {\r\n var params = { hospitalId: careClubInfo.hospitalIDValue };\r\n\r\n const { success, data, error } = await settings.query(params);\r\n let response = data;\r\n if (!success) {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n $('.js-error-message').text(error);\r\n hideLoader();\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'error', '');\r\n return;\r\n } else {\r\n ui.$sections.hide();\r\n careClubInfo.hospitalName = response.HospitalName;\r\n careClubInfo.hospitalType = response.HospitalType;\r\n careClubInfo.hospitalPhoneNumber = response.HospitalPrimaryPhoneNumber;\r\n careClubInfo.requestAnAppointmentUrl = response.RequestAnAppointmentUrl;\r\n careClubInfo.bookAnAppointmentUrl = response.BookAnAppointmentUrl;\r\n careClubInfo.careClubDigitalEnrollExpirationInDays = response.CareClubDigitalEnrollExpirationInDays;\r\n\r\n if (careClubInfo.hospitalPhoneNumber && careClubInfo.hospitalPhoneNumber.startsWith(\"+1\")) {\r\n ui.$hospitalPhoneNum.attr('href', `tel:${careClubInfo.hospitalPhoneNumber ? careClubInfo.hospitalPhoneNumber : ''}`);\r\n } else {\r\n ui.$hospitalPhoneNum.attr('href', `tel:+1${careClubInfo.hospitalPhoneNumber ? careClubInfo.hospitalPhoneNumber : ''}`);\r\n }\r\n\r\n ui.$hospitalPhoneNum.html(careClubInfo.hospitalPhoneNumber ? careClubInfo.hospitalPhoneNumber : '');\r\n\r\n // Replace hospital confirmation activation template token.\r\n $('.js-activation-window').text(careClubInfo.careClubDigitalEnrollExpirationInDays);\r\n\r\n let url = ui.$planSelectorTermLink.attr('href');\r\n if (url) {\r\n if (url != \"\" && !url.includes(careClubInfo.hospitalIDValue)) {\r\n url = url + careClubInfo.hospitalIDValue;\r\n }\r\n }\r\n\r\n ui.$planSelectorTermLink.attr('href', url);\r\n\r\n if (careClubInfo.hospitalType != null) {\r\n createDynamicRedirectButtons();\r\n }\r\n bindHospitalNameAddressValue(response);\r\n ui.$petReview.show();\r\n updateProgresBar('info-hospital-review');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'info-hospital-review', 'hospital-selector');\r\n hideLoader();\r\n }\r\n }\r\n\r\n async function initGetChallenge() {\r\n var params = {\r\n HospitalId: careClubInfo.hospitalIDValue,\r\n FirstName: careClubInfo.firstName,\r\n LastName: careClubInfo.lastName,\r\n Address1: careClubInfo.address,\r\n Address2: careClubInfo.address2,\r\n City: careClubInfo.city,\r\n StateCode: careClubInfo.state,\r\n Zip: careClubInfo.zip,\r\n PhoneNumber: careClubInfo.phoneDigitsOnly,\r\n Email: careClubInfo.email,\r\n PetAge: careClubInfo.petAge,\r\n PetName: careClubInfo.petName,\r\n SexId: careClubInfo.sexId,\r\n SpeciesId: careClubInfo.speciesId,\r\n BreedId: careClubInfo.petBreedId,\r\n IsMultiPetFeatureEnabled: isMultipetFeature\r\n };\r\n const { success, data, error } = await getChallenge.post(params);\r\n if (!success) {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n hideLoader();\r\n $('.js-error-message').text(error);\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'error', 'owner-info');\r\n return;\r\n }\r\n let response = data;\r\n petId = response.PatientId;\r\n isExistingPet = response.IsExisting;\r\n\r\n //29293: [CCDE] Online Payment Capture - IsWellnessMembershipPending check\r\n if (response.PatientId != null && response.PatientId != \"0\" && response.PatientId != \"\") {\r\n if (response.Settings != null && response.Settings.Client != null) {\r\n var isWellnessMembershipPending = (response.Settings.Client.Pets).filter((pet) => pet.Id == response.PatientId).map(pet => pet.IsWellnessMembershipPending)[0];\r\n if (isWellnessMembershipPending) {\r\n isPaymentCaptureCcdeEnabled = false;\r\n }\r\n }\r\n }\r\n\r\n if ((response.IsExisting && response.ChallengeResponse != null && response.ChallengeResponse.petNameChallenge != null)) {\r\n\r\n careClubInfo.petId = response.PatientId;\r\n careClubInfo.clientId = response.ClientId;\r\n careClubInfo.challengeSetId = response.ChallengeResponse.id;\r\n careClubInfo.petNameChallengeId = response.ChallengeResponse.petNameChallenge.id;\r\n\r\n if (response.ChallengeResponse.addressChallenge != null) {\r\n careClubInfo.addressChallengeId = response.ChallengeResponse.addressChallenge.id;\r\n let n = response.ChallengeResponse.addressChallenge.gapLength;\r\n let spaces = new Array(++n).join('*');\r\n let address = response.ChallengeResponse.addressChallenge.preGap + spaces + response.ChallengeResponse.addressChallenge.postGap;\r\n $('.js-verify-address').text(address);\r\n }\r\n else {\r\n $('.js-verify-address-inputs').hide();\r\n $('.js-verify-address-inputs input[name=\"missingAddress\"]').val('null')\r\n }\r\n\r\n let verifyBody = ui.$verifyStep.find(\".js-pet-selector-box\");\r\n verifyBody.empty();\r\n createEl.createVerifyInputs(response.ChallengeResponse.petNameChallenge.choices, verifyBody);\r\n\r\n ui.$verifyStep.on('keyup change', 'input', function (e) {\r\n if ($('.js-verify-address-inputs input[name=\"missingAddress\"]').val().length != '' && $('.js-pet-selector-box input').is(':checked')) {\r\n $('.js-verify-user').removeClass('disabled');\r\n } else {\r\n $('.js-verify-user').addClass('disabled');\r\n }\r\n });\r\n\r\n ui.$sections.hide();\r\n ui.$verifyStep.show();\r\n hideLoader();\r\n updateProgresBar('verification');\r\n\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'Verification', 'owner-info');\r\n if (((!careClubInfo.isLoggedIn || isAccessPlan) && isExistingPet && count > 1)) {\r\n ui.$verifyStep.hide();\r\n ui.$selectExistPet.show();\r\n }\r\n } else if (!response.IsExisting) {\r\n careClubInfo.clientId = response.ClientId;\r\n careClubInfo.petId = response.PatientId;\r\n postEnrollPlan();\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'agreement', 'owner-info');\r\n } else if ((response.IsExisting || careClubInfo.challengeSuccessful) && isEnrollAnotherPet == true) {\r\n careClubInfo.clientId = response.ClientId;\r\n careClubInfo.petId = response.PatientId;\r\n postEnrollPlan();\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'agreement', 'verification');\r\n }\r\n else {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n hideLoader();\r\n $('.js-error-message').text(error);\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'error', 'owner-info');\r\n return;\r\n }\r\n }\r\n\r\n function newPetCreation() {\r\n let newPetBody = ui.$selectExistPet.find(\".new-pet-body\");\r\n var newPetName = $('#petName').val();\r\n careClubInfo.newPet.Name = newPetName;\r\n let newPet = [];\r\n newPet.push(careClubInfo.newPet)\r\n createEl.createNewPet(newPet, newPetBody);\r\n ui.$sections.hide();\r\n ui.$selectExistPet.show();\r\n }\r\n\r\n async function checkConfirmChallenge() {\r\n var params = {\r\n HospitalId: careClubInfo.hospitalIDValue,\r\n ClientId: careClubInfo.clientId,\r\n ChallengeSetId: careClubInfo.challengeSetId,\r\n AddressChallengeId: careClubInfo.addressChallengeId,\r\n AddressChallengeAnswer: careClubInfo.addressChallengeAnswer,\r\n PetNameChallengeId: careClubInfo.petNameChallengeId,\r\n PetNameChallengeAnswer: careClubInfo.petNameChallengeAnswer\r\n };\r\n const { success, data, error } = await confirmChallenge.post(params);\r\n let response = data;\r\n if (success && response.ChallengeSuccessful) {\r\n careClubInfo.challengeSuccessful = true;\r\n careClubInfo.isLoggedIn = true;\r\n\r\n clearPetInformation();\r\n\r\n careClubInfo.existPet = response.Settings.Client.Pets;\r\n // careClubInfo.clientInfo = response.Client;\r\n careClubInfo.clientId = response.Settings.Client.ClientId;\r\n\r\n // needed for future reference\r\n ui.$sections.hide();\r\n ui.$selectExistPet.show();\r\n hideLoader();\r\n updateProgresBar('select-pet');\r\n ui.$selectExistPet.find('button[data-btn=\"back\"]').hide();\r\n careClubInfo.isLoggedIn = true;\r\n $('.ccde__wrapper').removeClass('js-non-logged-in-user');\r\n $('.ccde__wrapper').addClass('js-logged-in-user');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'Select pet', 'Verification');\r\n }\r\n else if (success && !response.ChallengeSuccessful) {\r\n ui.$sections.hide();\r\n ui.$incorrect.show();\r\n hideLoader();\r\n careClubInfo.clientId = '0';\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'incorrect-answers', 'Verification');\r\n }\r\n else {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n hideLoader();\r\n $('.js-error-message').text(error);\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'error', 'Verification');\r\n return;\r\n }\r\n }\r\n\r\n async function getPlanDetails() {\r\n\r\n showLoader();\r\n var params = {\r\n HospitalId: careClubInfo.hospitalIDValue,\r\n PetAgeMonths: careClubInfo.petAge,\r\n SpeciesId: careClubInfo.speciesId,\r\n SexId: careClubInfo.sexId,\r\n BreedId: careClubInfo.petBreedId,\r\n IsFeatureEnabled: ui.$IsFeatureEnabled\r\n };\r\n\r\n const { success, data, FeatureFlags } = await getPlan.post(params);\r\n planLists = data;\r\n if (FeatureFlags != null) {\r\n var filteredObj = (FeatureFlags).filter((flags) => flags.Key == \"IsPaymentCaptureEnabled\").map(flags => flags.Value);\r\n isPaymentCaptureCcdeEnabled = filteredObj[0];\r\n }\r\n\r\n if (planLists == null || planLists.length == 0 || !success || data.IsSuccess == false) {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n hideLoader();\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'error', 'info-hospital-review');\r\n $('.js-error-message').text(data.InputErrorMessages);\r\n return;\r\n } else {\r\n // User Story 31868: [CCDE] - Phase 2: Access Plan Integration into Comprehensive CCDE Flow\r\n if (planLists.length > 1) {\r\n $('.ccde__planServices').show();\r\n accessPlan = planLists.find(value => value.PlanName.includes('Access'));\r\n standardPlan = planLists.find(value => !value.PlanName.includes('Access'));\r\n standardPlanName = standardPlan.PlanName;\r\n } else {\r\n\r\n accessPlan = planLists[0];\r\n standardPlan = planLists[0];\r\n $('.ccde__planServices').hide();\r\n }\r\n if (planValue && isBindPlanServices == true) {\r\n careClubInfo.planid = planValue.PlanId;\r\n createPlanStep(planValue);\r\n } else {\r\n if (isAccessPlan) {\r\n accessPlan = planLists[0];\r\n careClubInfo.planid = accessPlan.PlanId;\r\n careClubInfo.planName = accessPlan.PlanName.trim().split(\" \");\r\n createPlanStep(accessPlan);\r\n } else {\r\n careClubInfo.planid = planLists[0].PlanId;\r\n careClubInfo.planName = planLists[0].PlanName.trim();\r\n createPlanStep(isAccessPlan ? accessPlan : standardPlan);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function createPlanStep(planInfo) {\r\n\r\n $(window).scrollTop(0);\r\n // need to change serviceList (duplicated)\r\n let services = planInfo.Services;\r\n if (ui.$paymentCapture.length > 0) {\r\n ui.$paymentCapture.find(\".js-plan-name\").text(planInfo.PlanName);\r\n ui.$paymentCapture.find(\".js-month-fee\").html(`${planInfo.MonthlyPrice}<br><span>per month</span>`);\r\n ui.$paymentCapture.find(\".js-init-fee\").text(planInfo.InitiationFee);\r\n }\r\n\r\n ui.$serviceStep.find(\".js-plan-name\").text(planInfo.PlanName);\r\n ui.$serviceStep.find(\".js-init-fee\").text(planInfo.InitiationFee);\r\n ui.$serviceStep.find(\".js-month-fee\").text(planInfo.MonthlyPrice);\r\n ui.$serviceStep.find(\".js-annual-fee\").text(planInfo.AnnualPrice);\r\n ui.$serviceStep.find(\".js-plan-change-name\").text('The' + ' ' + planInfo.PlanName)\r\n let serviceList = ui.$serviceStep.find(\".js-service-list\");\r\n let servicesDesc = ui.$serviceStep.find(\".js-service-list-desc\");\r\n standardPlanName = isBindPlanServices ? standardPlan.PlanName : careClubInfo.planName;\r\n // User Story 31868: [CCDE] - Phase 2: Access Plan Integration into Comprehensive CCDE Flow\r\n if (isAccessPlan || planInfo.PlanName.includes('Access Plan')) {\r\n ui.$serviceStep.find(\".js-plan-change-name\").text('The' + ' ' + standardPlanName);\r\n ui.$serviceStep.find(\".ccde__enroll-btn\").hide();\r\n ui.$serviceStep.find('.-standardPlanText').show();\r\n ui.$serviceStep.find('.-accessPlanText').hide();\r\n ui.$serviceStep.find('.js-access-plan-title').show();\r\n ui.$serviceStep.find('.js-standard-plan-title').hide();\r\n // ui.$serviceStep.find(\".standard-js-plan-text-header\").hide();\r\n ui.$serviceStep.find(\".js-plan-name\").text('Access Plan');\r\n ui.$serviceStep.find(\"#services_fee_val, #services_month_val\").addClass(\"ccde__fee__month__bold\");\r\n ui.$serviceStep.find(\".ccde__services__plan__fee_name, .js-month-fee\").addClass(\"ccde__text__color__vca__black\");\r\n ui.$serviceStep.find(\".ccde__service__recommendation\").addClass(\"ccde__services__border-access\");\r\n ui.$serviceStep.find(\".ccde__services__list\").addClass(\"ccde__services__list__access-plan\");\r\n ui.$serviceStep.find(\".ccde__standard-plan-btn\").hide();\r\n ui.$serviceStep.find(\".ccde__access-plan-btn\").show();\r\n ui.$serviceStep.find(\".ccde__form__footer__information\").show();\r\n ui.$serviceStep.find('.standard-plan-savings').hide();\r\n ui.$serviceStep.find('.access-plan-savings').show();\r\n ui.$serviceStep.find(\".accessplan-hint-txt\").show();\r\n $('.standard-plan-success').hide();\r\n $('.access-plan-success-txt').show();\r\n $('.standard-plan-success-txt').hide();\r\n } else {\r\n ui.$serviceStep.find(\".js-plan-change-name\").text('Access Plan');\r\n ui.$serviceStep.find('.-standardPlanText').hide();\r\n ui.$serviceStep.find('.-accessPlanText').show();\r\n $('.standard-plan-success').show();\r\n $('.access-plan-success-txt').hide();\r\n $('.standard-plan-success-txt').show();\r\n ui.$serviceStep.find('.js-access-plan-title').hide();\r\n ui.$serviceStep.find('.js-standard-plan-title').show();\r\n ui.$serviceStep.find('.standard-plan-savings').show();\r\n ui.$serviceStep.find('.access-plan-savings').hide();\r\n ui.$serviceStep.find(\".js-plan-name\").text(standardPlanName);\r\n // ui.$serviceStep.find(\".access-js-plan-text-header\").hide();\r\n $('.ccde__standard-plan-btn').find('button').text('Choose' + ' ' + standardPlanName + ' ' + 'Plan')\r\n ui.$serviceStep.find(\".ccde__standard-plan-btn\").show();\r\n ui.$serviceStep.find(\".ccde__access-plan-btn\").hide();\r\n ui.$serviceStep.find(\".accessplan-hint-txt\").hide();\r\n ui.$serviceStep.find(\".ccde__form__footer__information\").hide();\r\n }\r\n createEl.createServiceBtn(services, serviceList, servicesDesc);\r\n ui.$sections.hide();\r\n ui.$serviceStep.show();\r\n hideLoader();\r\n }\r\n function closeListbox() {\r\n $(document).on(\"mouseup touchend\", function (e) {\r\n var container = $(\".vca-dropdown-select\");\r\n\r\n // If the target of the click isn't the container\r\n if (!container.is(e.target) && container.has(e.target).length === 0) {\r\n let listBox = $('.vca-dropdown-select');\r\n let listButton = listBox.find('.js-btn-selecter');\r\n listBox.find('.js-vca-dropdown-list').addClass('hidden');\r\n listButton.attr(\"aria-expanded\", \"false\");\r\n }\r\n });\r\n }\r\n\r\n function updateSeciton(targetValue) {\r\n ui.$sections.hide();\r\n $('section[data-step=\"' + targetValue + '\"').show();\r\n hideLoader();\r\n updateProgresBar(targetValue);\r\n }\r\n\r\n function updateProgresBar(targetValue) {\r\n var progressValue = $('section[data-step=\"' + targetValue + '\"').attr('data-progress');\r\n if (targetValue === \"welcome\") {\r\n ui.$progressBar.hide();\r\n }\r\n if (targetValue === \"select-pet\" || targetValue === \"pet-type-name\") {\r\n ui.$progressBar.show();\r\n }\r\n $('.progress-bar').css('width', progressValue + '%').attr('aria-valuenow', progressValue);\r\n }\r\n\r\n function updateBackBtn(targetValue, backStepValue) {\r\n $('section[data-step=\"' + targetValue + '\"]').find('button[data-btn=\"back\"]').attr('data-target', backStepValue);\r\n }\r\n\r\n function bindAgeChange() {\r\n $('#changePetAge').on('change', '.js-age-change', function (e) {\r\n ccdePetChangedAge = $('#year').val();\r\n });\r\n }\r\n\r\n function bindBackBtnClick() {\r\n ui.$backBtn.on('click', function (e) {\r\n e.preventDefault();\r\n ccdePetAge = $('#year').val();\r\n if ($(this).hasClass('btn-reset')) {\r\n\r\n resetDynamicTitle();\r\n $(this).closest('section[data-step]').find('.js-btn-selecter').removeClass('active').show();\r\n $(this).closest('section[data-step]').find('.js-hidden-step').hide();\r\n $(this).closest('section[data-step]').find('.js-shelter-link').show();\r\n $(this).closest('section[data-step]').find('.js-login-link').show();\r\n $(this).closest('section[data-step]').removeClass('part-two');\r\n $(this).closest('section[data-step]').find('.-pet-selected').hide();\r\n $(this).removeClass('btn-reset');\r\n if ($(this).hasClass('remove-on-next')) {\r\n $(this).removeClass('remove-on-next');\r\n $(this).hide();\r\n }\r\n return;\r\n }\r\n\r\n var targetValue = $(this).attr('data-target');\r\n updateSeciton(targetValue);\r\n });\r\n }\r\n\r\n function bindSeclectPetContinueClick() {\r\n $('.js-select-btn-contiune').on('click', function (e) {\r\n e.preventDefault();\r\n var wrap = $(this).closest('.ccde__form__body');\r\n if (wrap.find('.js-required').val() === '') {\r\n wrap.find('.js-required').trigger('focus');\r\n return;\r\n }\r\n var newPetName = $('#petName').val();\r\n let petNameDisplay = '';\r\n if (newPetName.length > 37) {\r\n petNameDisplay = 'your pet';\r\n } else {\r\n petNameDisplay = newPetName;\r\n }\r\n $('.js-pet-name').each(function () {\r\n $(this).text(petNameDisplay);\r\n });\r\n careClubInfo.petName = newPetName;\r\n var targetValue = $(this).attr('data-target');\r\n let backStepValue = 'pet-type-name';\r\n updateBackBtn(targetValue, backStepValue);\r\n updateSeciton(targetValue);\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'pet-info', 'Pet type and name');\r\n });\r\n }\r\n\r\n function bindHospitalSelect() {\r\n $('.js-seciton-step').on('change', '.js-hospital-list input', function (e) {\r\n\r\n if ($('.js-hospital-list input').is(':checked')) {\r\n $('.js-hospital-select-btn').removeClass('disabled');\r\n } else {\r\n return;\r\n }\r\n });\r\n }\r\n\r\n function bindHospitalAction() {\r\n $('.js-seciton-step').on('keyup', '.js-pet-type-btn input, .js-hospital-zip', function (e) {\r\n e.preventDefault();\r\n let inputZip = $('.js-hospital-zip')\r\n let zipValue = inputZip.val();\r\n\r\n if (zipValue.length === 5) {\r\n searchInProgress(true);\r\n getCoordinates(zipValue);\r\n } else {\r\n inputZip.val(inputZip.val().substr(0, 5));\r\n return;\r\n }\r\n });\r\n }\r\n\r\n function searchInProgress(isInProgess) {\r\n if (isInProgess) {\r\n ui.hospitalLoader.show();\r\n $('.js-zipError').hide();\r\n $('.js-noResultsFound').hide();\r\n $('.ccde__select-hospital-wrap').addClass('-searching');\r\n $('.js-hospital-select-btn').addClass('disabled');\r\n } else {\r\n ui.hospitalLoader.hide();\r\n $('.ccde__select-hospital-wrap').removeClass('-searching');\r\n $('.js-hospital-zip').prop(\"disabled\", false);\r\n $('.js-hospital-item').prop('checked', false);\r\n }\r\n }\r\n\r\n function getSearchBounds() {\r\n let Bounds = getBounds(careClubInfo.zipLat, careClubInfo.zipLong, careClubInfo.zipRadius);\r\n let coordinatesResult = calcMinMaxLatLng(Bounds);\r\n\r\n return coordinatesResult;\r\n }\r\n\r\n function getCoordinates(zip) {\r\n ui.$geocoder = new google.maps.Geocoder();\r\n\r\n ui.$geocoder.geocode({\r\n 'address': `${zip} ${'USA'}`,\r\n 'region': 'US'\r\n }, function (results, status) {\r\n if (status == 'OK') {\r\n careClubInfo.zipLat = results[0].geometry.location.lat();\r\n careClubInfo.zipLong = results[0].geometry.location.lng();\r\n let coordinates = getSearchBounds();\r\n if (results[0].formatted_address === 'United States') {\r\n findHospitals({ minLat: 1, maxLat: 1, minLng: 1, maxLng: 1 });\r\n } else {\r\n findHospitals(coordinates);\r\n }\r\n } else {\r\n searchInProgress(false);\r\n $('.js-zipError').show();\r\n }\r\n });\r\n }\r\n\r\n function getBounds(lat, lng, radius) {\r\n let ConvertedRadius = radius * 1609.34;\r\n\r\n // add to canada site\r\n if (ui.isCanada === 'true') {\r\n ConvertedRadius = radius * 1000;\r\n }\r\n\r\n var circleData = {\r\n center: {\r\n lat,\r\n lng\r\n },\r\n radius: ConvertedRadius\r\n };\r\n\r\n if (window['google']) {\r\n return new window['google'].maps.Circle(circleData).getBounds();\r\n }\r\n }\r\n\r\n function calcMinMaxLatLng(bounds) {\r\n var obj = {\r\n minLat: bounds.getNorthEast().lat(),\r\n maxLat: bounds.getSouthWest().lat(),\r\n minLng: bounds.getNorthEast().lng(),\r\n maxLng: bounds.getSouthWest().lng()\r\n }\r\n return obj;\r\n }\r\n\r\n async function findHospitals(coordinates) {\r\n let hosptialDesc = $('.js-hospital-list');\r\n\r\n const accessPlanExists = window.location.pathname.includes(\"access-plan\");\r\n let payload = {\r\n minLat: coordinates.minLat,\r\n maxLat: coordinates.maxLat,\r\n minLong: coordinates.minLng,\r\n maxLong: coordinates.maxLng,\r\n speciesid: careClubInfo.speciesId,\r\n accessplan: accessPlanExists\r\n };\r\n const { success, data, error } = await getHospitals.query(payload);\r\n let hospitals = data;\r\n if (!success) {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n searchInProgress(false);\r\n $('.js-error-message').text(error);\r\n hideLoader();\r\n return;\r\n }\r\n else if (data == null || data == '' || data == undefined) {\r\n searchInProgress(false);\r\n $('.js-noResultsFound').show();\r\n hosptialDesc.hide();\r\n }\r\n else {\r\n createEl.createHospitalList(hospitals, hosptialDesc);\r\n searchInProgress(false);\r\n hosptialDesc.show();\r\n }\r\n }\r\n\r\n function createPersonalInfoStep() {\r\n\r\n if (careClubInfo.isLoggedIn) {\r\n let primaryEmail = '';\r\n $.each(careClubInfo.clientInfo.ClientEmails, function (i, email) {\r\n if (email.IsPrimary) {\r\n primaryEmail = email.Email;\r\n }\r\n });\r\n let primaryPhone = '';\r\n $.each(careClubInfo.clientInfo.ClientPhones, function (i, phone) {\r\n if (phone.IsPrimaryContact) {\r\n primaryPhone = phone.PhoneNumber;\r\n }\r\n });\r\n let primaryAddress = [];\r\n $.each(careClubInfo.clientInfo.Addresses, function (i, address) {\r\n if (address.IsMailingAddress) {\r\n primaryAddress = address;\r\n }\r\n });\r\n ui.$confirmInfo.find('#fname').val(careClubInfo.clientInfo.FirstName);\r\n ui.$confirmInfo.find('#lname').val(careClubInfo.clientInfo.LastName);\r\n ui.$confirmInfo.find('#email').val(primaryEmail);\r\n ui.$confirmInfo.find('#phone').val(primaryPhone);\r\n ui.$confirmInfo.find('#address').val(primaryAddress.AddressLine1);\r\n ui.$confirmInfo.find('#address2').val(primaryAddress.AddressLine2);\r\n ui.$confirmInfo.find('#city').val(primaryAddress.City);\r\n ui.$confirmInfo.find('#state').val(primaryAddress.State);\r\n ui.$confirmInfo.find('#zip').val(primaryAddress.ZipCode);\r\n }\r\n }\r\n\r\n function updatePetInfo(petId) {\r\n // bug 34150: [CCDE] Payload Passes Incorrect Pet Information when Multiple Pets (3rd,4th) Enrolled in AP\r\n\r\n if (isCareClubLoggedin) {\r\n $.each(careClubInfo.existPet, function (i, pet) {\r\n if (pet.id != '0' && pet.Id == petId) {\r\n careClubInfo.petInfo = pet;\r\n careClubInfo.petName = careClubInfo.petInfo.Name\r\n careClubInfo.petSpecies = careClubInfo.petInfo.SpeciesId\r\n careClubInfo.speciesId = careClubInfo.petInfo.SpeciesId\r\n careClubInfo.petBreed = careClubInfo.petInfo.BreedNames\r\n careClubInfo.petBreedId = careClubInfo.petInfo.Breeds.BreedId\r\n careClubInfo.petAge = careClubInfo.petInfo.Age\r\n careClubInfo.petAgeDataLayerFormat = careClubInfo.petInfo.Age\r\n careClubInfo.petGender = careClubInfo.petInfo.Sex.Name\r\n careClubInfo.sexId = careClubInfo.petInfo.SexId\r\n careClubInfo.petSpayed = careClubInfo.petInfo.Neutered\r\n\r\n let ageAry = careClubInfo.petInfo.Age.split(' ');\r\n let months = '';\r\n let weekToMonth = '';\r\n let yearsandmonths = '';\r\n $.each(ageAry, function (i, item) {\r\n if (item[item.length - 1] == 'y') {\r\n yearsandmonths = parseFloat(item.split('y')[0]) * 12;\r\n }\r\n if (item[item.length - 1] == 'm') {\r\n months = parseFloat(item.split('m')[0]);\r\n }\r\n if (item[item.length - 1] == 'w') {\r\n weekToMonth = parseFloat(item.split('w')[0]) / 4;\r\n }\r\n\r\n });\r\n yearsandmonths = yearsandmonths + months;\r\n careClubInfo.petsAgeMonth = parseFloat(yearsandmonths) + weekToMonth\r\n }\r\n });\r\n ui.$petReview.find('.js-edit-pet-btn').hide();\r\n ui.$petReview.find('.js-edit-pet-name-btn').hide();\r\n\r\n if (careClubInfo.petSpecies == 1) {\r\n $('.js-pet-type').text('Dog');\r\n } else if (careClubInfo.petSpecies == 2) {\r\n $('.js-pet-type').text('Cat');\r\n } else {\r\n $('.js-pet-type').text('Unspecified');\r\n }\r\n } else {\r\n ui.$petReview.find('.js-edit-pet-btn').show();\r\n ui.$petReview.find('.js-edit-pet-name-btn').show();\r\n\r\n $('.js-pet-type').text(careClubInfo.petSpecies);\r\n }\r\n\r\n $('.js-pet-name-wrapper').text(careClubInfo.petName);\r\n $('.js-pet-breed').text(careClubInfo.petBreed);\r\n $('.js-pet-age').text(careClubInfo.petAge);\r\n $('.js-pet-gender').text(careClubInfo.petGender);\r\n $('.js-pet-spayed').text(careClubInfo.petSpayed);\r\n bindHospitalNameAddressValue(careClubInfo);\r\n }\r\n\r\n // User Story 31868: [CCDE] - Phase 2: Access Plan Integration into Comprehensive CCDE Flow\r\n function bindPlanServices() {\r\n $('.js-seciton-step').on('click', '#changePlanServices', function (e) {\r\n isBindPlanServices = true;\r\n let selectedPlanValue = $(this).data('plan-id');\r\n if (isBindPlanServices) {\r\n if (selectedPlanValue == \"1\") {\r\n planValue = accessPlan;\r\n createPlanStep(planValue);\r\n } else {\r\n planValue = standardPlan;\r\n createPlanStep(planValue);\r\n }\r\n careClubInfo.planid = planValue.PlanId;\r\n }\r\n });\r\n }\r\n\r\n function bindGoToStepClick() {\r\n $('.js-seciton-step').on('click', 'button.js-next-btn', function (e) {\r\n isBindPlanServices = false;\r\n e.preventDefault();\r\n var targetValue = $(this).attr('data-target');\r\n ui.$sections.hide();\r\n updateSeciton(targetValue);\r\n updateProgresBar(targetValue);\r\n });\r\n }\r\n\r\n function bindAbandonCloseClick() {\r\n $('.js-seciton-step').on('click', '.js-abandon-link, .js-cancel-btn, .btn-sky-outline-alt', function (e) {\r\n var wrap = $(this).closest('section[data-step]');\r\n let targetValue = wrap.attr('data-step');\r\n let btnName = $(this).text();\r\n window.VCA.ccdeDatalayer.datalayerPushAbandon(careClubInfo, targetValue, btnName);\r\n });\r\n }\r\n\r\n function bindWelcomeClick() {\r\n $('.js-seciton-step').on('click', 'button.js-welcome-btn', function (e) {\r\n e.preventDefault();\r\n\r\n if (careClubInfo.isLoggedIn) {\r\n ui.$sections.hide();\r\n ui.$selectExistPet.show();\r\n ui.$progressBar.show();\r\n updateProgresBar('select-pet');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'Select pet', 'welcome');\r\n } else {\r\n ui.$sections.hide();\r\n ui.$selectPet.show();\r\n ui.$progressBar.show();\r\n updateProgresBar('pet-type-name');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'Pet type and name', 'welcome');\r\n }\r\n });\r\n }\r\n\r\n function bindSeclectExistPetClick() {\r\n $('.js-seciton-step').on('click', 'button.js-exist-pet-btn', function (e) {\r\n e.preventDefault();\r\n if (isAccessPlan) {\r\n ui.$selectExistPet.show();\r\n ui.$petReview.hide();\r\n }\r\n // why we are not using careClubInfo.isLoggedIn ? because it's assigned as true above\r\n if (!isCareClubLoggedin || isExistingPet) {\r\n careClubInfo.petId = petId;\r\n $('.js-book-pet-url').attr('href', `${careClubInfo.bookAnAppointmentUrl}?petId=${careClubInfo.petId}`);\r\n showLoader();\r\n postEnrollPlan();\r\n }\r\n let selectedPet = ui.$selectExistPet.find('.js-acitve-btn.active');\r\n var newPetName = selectedPet.attr('data-pet-name');\r\n var selectedPetGender = selectedPet.attr('data-genderid')\r\n let petNameDisplay = '';\r\n if (newPetName.length > 37) {\r\n petNameDisplay = 'your pet';\r\n } else {\r\n petNameDisplay = newPetName;\r\n }\r\n\r\n $('.js-pet-name').each(function () {\r\n $(this).text(petNameDisplay);\r\n });\r\n\r\n $('.js-sex-id').each(function () {\r\n if (selectedPetGender == 2) {\r\n $(this).text('her');\r\n } else {\r\n $(this).text('his');\r\n }\r\n });\r\n\r\n careClubInfo.petName = newPetName;\r\n careClubInfo.petId = selectedPet.attr('data-pet-id');\r\n careClubInfo.isCareClubMember = selectedPet.data('careclub');\r\n $('.js-book-pet-url').attr('href', `${careClubInfo.bookAnAppointmentUrl}?petId=${careClubInfo.petId}`);\r\n if (careClubInfo.isCareClubMember && !isEnrollAnotherPet) {\r\n ui.$sections.hide();\r\n ui.$preSigned.show();\r\n updateProgresBar('existing-memeber');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'Existing Memeber', 'Select Pet');\r\n }\r\n else {\r\n ui.$sections.hide();\r\n if (isAccessPlan && isCareClubLoggedin) {\r\n ui.$selectExistPet.hide();\r\n ui.$petReview.show();\r\n updatePetInfo(careClubInfo.petId);\r\n var targetValue = 'info-hospital-review';\r\n let backStepValue = 'select-pet';\r\n updateBackBtn(targetValue, backStepValue);\r\n updateProgresBar('info-hospital-review');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'info-hospital-review', 'select-pet');\r\n } else {\r\n if (careClubInfo.challengeSuccessful) {\r\n //Invoke Pet Enroll - 29287: [CCDE] Multi-Pet Enrollment Option (End of Funnel)\r\n careClubInfo.isLoggedIn = false;\r\n if (!careClubInfo.isLoggedIn) {\r\n ui.$agreement.show();\r\n ui.$healthStatus.hide();\r\n ui.$selectExistPet.hide();\r\n }\r\n updateProgresBar('agreement');\r\n updatePetInfo(careClubInfo.petId);\r\n updateBackBtn('agreement', 'select-pet');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'agreement', 'Select Pet');\r\n } else {\r\n let healthPick = ui.$healthStatus.find('.js-acitve-btn.active');\r\n healthPick.removeClass('active');\r\n ui.$healthStatus.find('.js-status-btn').addClass('disabled');\r\n ui.$healthStatus.show();\r\n updateProgresBar('health-status');\r\n updatePetInfo(careClubInfo.petId);\r\n updateBackBtn('health-status', 'select-pet');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'health-status', 'Select Pet');\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n function bindSeclectHealthClick() {\r\n $('.js-seciton-step').on('click', 'button.js-status-btn', function (e) {\r\n e.preventDefault();\r\n let healthPick = ui.$healthStatus.find('.js-acitve-btn.active');\r\n var isHealth = healthPick.attr('data-value');\r\n\r\n if (isHealth == 1) {\r\n ui.$sections.hide();\r\n ui.$getInTouch.show();\r\n updateProgresBar('get-in-touch');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'get-in-touch', 'health-status');\r\n } else if (isHealth == 0) {\r\n ui.$sections.hide();\r\n if (careClubInfo.hospitalIDValue == null || careClubInfo.hospitalIDValue == '') {\r\n ui.$hospitalSelector.show();\r\n updateProgresBar('hospital-selector');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'hospital-selector', 'health-status');\r\n } else {\r\n ui.$petReview.show();\r\n var targetValue = 'info-hospital-review';\r\n let backStepValue = 'health-status';\r\n updateBackBtn(targetValue, backStepValue);\r\n updateProgresBar('info-hospital-review');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'info-hospital-review', 'health-status');\r\n }\r\n\r\n if (careClubInfo.isLoggedIn) {\r\n ui.$petReview.show();\r\n ui.$hospitalSelector.hide();\r\n\r\n }\r\n }\r\n });\r\n }\r\n\r\n function bindChangeHospitalClick() {\r\n $('.js-seciton-step').on('click', 'button.js-hospital-select-btn', function (e) {\r\n e.preventDefault();\r\n\r\n let selectedHopital = $(\".js-hospital-list input[name='hospital-result']:checked\");\r\n careClubInfo.hospitalIDValue = selectedHopital.val();\r\n careClubInfo.hospitalName = selectedHopital.data('name');\r\n $('.js-hospital-name').text(careClubInfo.hospitalName);\r\n var targetValue = 'info-hospital-review';\r\n let backStepValue = 'hospital-selector';\r\n updateBackBtn(targetValue, backStepValue);\r\n showLoader();\r\n getHospitalSettings();\r\n })\r\n }\r\n\r\n function bindpetConfirmClick() {\r\n $('.js-seciton-step').on('click', 'button.js-confirm-pet-info', function (e) {\r\n e.preventDefault();\r\n if (isAccessPlan) {\r\n ui.$confirmInfo.hide();\r\n }\r\n showLoader();\r\n getPlanDetails();\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'plan', 'info-hospital-review');\r\n })\r\n }\r\n\r\n function bindClientInfoFormClick() {\r\n $('.js-seciton-step').on('click', 'button.js-client-info-form', function (e) {\r\n e.preventDefault();\r\n newPetCreation();\r\n if (!careClubInfo.isLoggedIn) {\r\n ui.$selectExistPet.hide();\r\n ui.$confirmInfo.show();\r\n }\r\n bindComfirmPlanClick();\r\n $('.js-exist-pet-btn').addClass('disabled')\r\n if (!checkPersonalForm()) {\r\n return;\r\n }\r\n if (isAccessPlan) {\r\n ui.$selectExistPet.hide();\r\n }\r\n if (isEnrollAnotherPet && count > 1 && (!isCareClubLoggedin || isAccessPlan)) {\r\n ui.$verifyStep.hide();\r\n ui.$selectExistPet.show();\r\n // bug 34156: [CCDE] Multiple Pages displaying in the UI while Loading after Verification \r\n\r\n ui.$confirmInfo.hide();\r\n }\r\n if ((!careClubInfo.isLoggedIn) || (careClubInfo.isLoggedIn && !careClubInfo.isPrimaryHospital)) {\r\n showLoader();\r\n initGetChallenge();\r\n } else {\r\n showLoader();\r\n ui.$verifyStep.hide();\r\n ui.$sections.hide();\r\n ui.$confirmInfo.hide();\r\n ui.$selectPet.show();\r\n updateProgresBar('pet-type-name');\r\n }\r\n });\r\n }\r\n\r\n function bindComfirmPlanClick() {\r\n $('.js-seciton-step').on('click', 'button.js-comfirm-plan-btn', function (e) {\r\n e.preventDefault();\r\n if (isAccessPlan && !isCareClubLoggedin) {\r\n ui.$confirmInfo.show();\r\n ui.$serviceStep.hide();\r\n } else if (isAccessPlan && isCareClubLoggedin) {\r\n ui.$serviceStep.show();\r\n }\r\n\r\n if (isCareClubLoggedin) {\r\n showLoader();\r\n postEnrollPlan();\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'agreement', 'plan');\r\n }\r\n else {\r\n ui.$sections.hide();\r\n ui.$confirmInfo.show();\r\n ui.$progressBar.show();\r\n updateProgresBar('owner-info');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'owner-info', 'plan');\r\n }\r\n });\r\n }\r\n\r\n async function postEnrollPlan() {\r\n var params = {\r\n HospitalId: careClubInfo.hospitalIDValue,\r\n ClientId: careClubInfo.clientId,\r\n PatientId: careClubInfo.petId,\r\n PlanId: careClubInfo.planid\r\n };\r\n const { success, data } = await enroll.post(params);\r\n if (!success) {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n $('.js-error-message').text(data.GenericServiceErrorMessage);\r\n return;\r\n } else if (careClubInfo.isLoggedIn) {\r\n var targetValue = 'agreement';\r\n let backStepValue = 'plan';\r\n updateBackBtn(targetValue, backStepValue);\r\n } else {\r\n var targetValue = 'agreement';\r\n let backStepValue = 'owner-info';\r\n updateBackBtn(targetValue, backStepValue);\r\n }\r\n careClubInfo.membershipId = data;\r\n if (!isCareClubLoggedin || isAccessPlan) {\r\n\r\n // bug 34468: Access Plan Only Flow for Logged In user Scenario Fails\r\n careClubInfo.petId = petId ? petId : careClubInfo.petId;\r\n\r\n createAgreementStep();\r\n } else {\r\n createAgreementStep();\r\n }\r\n }\r\n\r\n async function postAgree() {\r\n var params = {\r\n HospitalId: careClubInfo.hospitalIDValue,\r\n PatientId: careClubInfo.petId\r\n };\r\n const { success, data, error } = await agree.post(params);\r\n if (!success) {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n $('.js-error-message').text(data.GenericServiceErrorMessage);\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'error', 'agreement');\r\n return;\r\n } else {\r\n ui.$sections.hide();\r\n const iframe = document.getElementById('myIframe');\r\n\r\n if (iframe && isPaymentCaptureCcdeEnabled && (ui.$EnablePaymentCaptureCcde == \"1\")) {\r\n params.clientId = careClubInfo.clientId;\r\n params.membershipId = careClubInfo.membershipId;\r\n updateProgresBar('payment-capture');\r\n await window.VCA.paymentCapture.loadIframeWithUID(params);\r\n iframe.addEventListener('load', function handleIframeLoad() {\r\n ui.$paymentCapture.show();\r\n $(window).scrollTop(0);\r\n hideLoader();\r\n iframe.removeEventListener('load', handleIframeLoad);\r\n });\r\n } else {\r\n ui.$confirmation.show();\r\n updateProgresBar('confirmation');\r\n $(window).scrollTop(0);\r\n hideLoader();\r\n }\r\n\r\n if (careClubInfo.isLoggedIn && isMultipetFeature) {\r\n $('.exist-pet-body').find(\"[data-pet-id='\" + careClubInfo.petId + \"']\").removeClass('existingEnabled active');\r\n $('.exist-pet-body').find(\"[data-pet-id='\" + careClubInfo.petId + \"']\").addClass('existingDisabled');\r\n }\r\n\r\n $('.js-book-pet-url').attr('href', `${careClubInfo.bookAnAppointmentUrl}?petId=${careClubInfo.petId}`);\r\n\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'confirmation', 'agreement');\r\n }\r\n }\r\n\r\n function bindAcceptClick() {\r\n $('.js-seciton-step').on('click', 'button.js-accept-agreement', function (e) {\r\n let agreementButton = $(e.currentTarget);\r\n // bug 34047: [CCDE] Enroll Another pet CTA not disabled after All the pets Enrolled\r\n if (!isMultipetFeature || (isCareClubLoggedin && $('.exist-pet-body').find('.existingEnabled').length <= 1)) {\r\n $('.ccde__enroll-new-pet').addClass('hideEnrollPetBtn')\r\n }\r\n if (!agreementButton.hasClass('disabled')) {\r\n showLoader();\r\n postAgree();\r\n }\r\n });\r\n }\r\n\r\n function bindHoverAgreementButton() {\r\n $('.js-seciton-step').on('mouseenter', 'button.js-accept-agreement.disabled', function (e) {\r\n let button = $(e.currentTarget);\r\n button.next('.ccde__client-info__tooltip').show();\r\n $('.ccde__agreement__desc').css('opacity', '0.5');\r\n });\r\n\r\n $('.js-seciton-step').on('mouseleave', 'button.js-accept-agreement.disabled', function (e) {\r\n let button = $(e.currentTarget);\r\n button.next('.ccde__client-info__tooltip').hide();\r\n $('.ccde__agreement__desc').css('opacity', '1');\r\n });\r\n }\r\n\r\n async function createAgreementStep() {\r\n\r\n var params = {\r\n HospitalId: careClubInfo.hospitalIDValue,\r\n PatientId: careClubInfo.petId,\r\n clientId: careClubInfo.clientId\r\n };\r\n const { success, data, error } = await getAgreement.post(params);\r\n if (!success && timesToTry > 5) {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n hideLoader();\r\n $('.js-error-message').text(data.InputErrorMessages);\r\n return;\r\n }\r\n else if (!success && timesToTry < 6) {\r\n timesToTry++;\r\n setTimeout(function () {\r\n createAgreementStep();\r\n }, 500);\r\n }\r\n else {\r\n $('.js-print-pdf').attr(\"href\", data);\r\n let pdfData = window.atob(data.split(',')[1]);\r\n if (ui.$agreement.find('canvas')) {\r\n $('canvas').remove();\r\n }\r\n var canvas = document.createElement('canvas');\r\n $('.ccde__agreement__text__box').after(canvas);\r\n\r\n var pdfDoc = null,\r\n pageNum = 1,\r\n pageRendering = false,\r\n pageNumPending = null,\r\n scale = 2,\r\n ctx = canvas.getContext('2d');\r\n\r\n /**\r\n * Get page info from document, resize canvas accordingly, and render page.\r\n * @param num Page number.\r\n */\r\n function renderPage(num) {\r\n pageRendering = true;\r\n // Using promise to fetch the page\r\n pdfDoc.getPage(num).then(function (page) {\r\n var viewport = page.getViewport({ scale: scale });\r\n canvas.height = viewport.height;\r\n canvas.width = viewport.width;\r\n\r\n // Render PDF page into canvas context\r\n var renderContext = {\r\n canvasContext: ctx,\r\n viewport: viewport\r\n };\r\n var renderTask = page.render(renderContext);\r\n\r\n // Wait for rendering to finish\r\n renderTask.promise.then(function () {\r\n pageRendering = false;\r\n if (pageNumPending !== null) {\r\n // New page rendering is pending\r\n renderPage(pageNumPending);\r\n pageNumPending = null;\r\n }\r\n });\r\n });\r\n\r\n if (num >= pdfDoc.numPages) {\r\n $('.js-accept-agreement').removeClass('disabled');\r\n } else {\r\n $('.js-accept-agreement').addClass('disabled');\r\n }\r\n\r\n // Update page counters\r\n document.getElementById('page_num').textContent = num;\r\n }\r\n\r\n /**\r\n * If another page rendering in progress, waits until the rendering is\r\n * finised. Otherwise, executes rendering immediately.\r\n */\r\n function queueRenderPage(num) {\r\n if (pageRendering) {\r\n pageNumPending = num;\r\n } else {\r\n renderPage(num);\r\n }\r\n }\r\n\r\n /**\r\n * Displays previous page.\r\n */\r\n function onPrevPage() {\r\n if (pageNum <= 1) {\r\n return;\r\n }\r\n pageNum--;\r\n queueRenderPage(pageNum);\r\n }\r\n document.getElementById('prev').addEventListener('click', onPrevPage);\r\n\r\n /**\r\n * Displays next page.\r\n */\r\n function onNextPage() {\r\n if (pageNum >= pdfDoc.numPages) {\r\n return;\r\n }\r\n pageNum++;\r\n queueRenderPage(pageNum);\r\n }\r\n document.getElementById('next').addEventListener('click', onNextPage);\r\n /**\r\n * Asynchronously downloads PDF.\r\n */\r\n pdfjsLib.getDocument({ data: pdfData }).promise.then(function (pdfDoc_) {\r\n pdfDoc = pdfDoc_;\r\n document.getElementById('page_count').textContent = pdfDoc.numPages;\r\n\r\n // Initial/first page rendering\r\n renderPage(pageNum);\r\n });\r\n\r\n ui.$sections.hide();\r\n ui.$agreement.show();\r\n hideLoader();\r\n updateProgresBar('agreement');\r\n }\r\n\r\n }\r\n\r\n function checkPersonalForm() {\r\n var mailFormat = /(^[a-zA-Z0-9_.]+[@]{1}[a-zA-Z0-9\\-]+[\\.][a-zA-Z]+$)/;\r\n var phoneReg = /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/;\r\n var textReg = /^[a-zA-Z -]{2,60}$/;\r\n var zipReg = /^(\\d{5})(?:-?(\\d{4}))?$/;\r\n ui.$confirmInfo.find('.form-label-group').removeClass('error');\r\n\r\n let valid = true\r\n careClubInfo.address2 = $('#address2').val();\r\n\r\n $('.ccde__client-info input.js-required').each(function (index) {\r\n let el = $(this);\r\n var elmId = el.attr(\"id\");\r\n if (elmId == 'phone') {\r\n let phone = $('#phone').val();\r\n if (!phoneReg.test(phone)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n careClubInfo.phone = el.val();\r\n careClubInfo.phoneDigitsOnly = careClubInfo.phone.replace(/\\D+/g, \"\");\r\n }\r\n } else if (elmId == 'email') {\r\n let email = $('#email').val();\r\n if (!mailFormat.test(email)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n careClubInfo.email = el.val();\r\n }\r\n } else if (elmId == 'zip') {\r\n let inputZip = el.val();\r\n if (!zipReg.test(inputZip)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n careClubInfo.zip = el.val();\r\n }\r\n }\r\n else if (elmId == 'fname') {\r\n let fname = el.val();\r\n if (!textReg.test(fname)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n careClubInfo.firstName = el.val();\r\n }\r\n }\r\n else if (elmId == 'lname') {\r\n let lname = el.val();\r\n if (!textReg.test(lname)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n careClubInfo.lastName = el.val();\r\n }\r\n }\r\n else {\r\n if (el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n careClubInfo[elmId] = el.val();\r\n }\r\n }\r\n });\r\n\r\n $('.ccde__client-info .select-box__select').each(function (index) {\r\n let el = $(this);\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n var elmId = el.attr(\"id\");\r\n careClubInfo[elmId] = el.val();\r\n }\r\n });\r\n\r\n //In order to exclude incorrect voices from the screen recorder, remove the aria-described attr for valid input.\r\n $('.ccde__client-info .form-label-group').each(function (index) {\r\n let el = $(this);\r\n let errorMessageId = el.find(\".error-message\").attr(\"id\");\r\n if (errorMessageId) {\r\n let input = el.find('input, select');\r\n if (!el.hasClass('error')) {\r\n input.removeAttr(\"aria-describedby\");\r\n } else {\r\n input.attr(\"aria-describedby\", errorMessageId);\r\n }\r\n }\r\n });\r\n\r\n return valid;\r\n }\r\n\r\n function checkPetInfoForm() {\r\n\r\n let valid = true\r\n let ageValue = '';\r\n let ageDataFormat = '';\r\n ui.$petInfo.find('.form-label-group').removeClass('error');\r\n\r\n if ($(\"#breed\").val() === \"\") {\r\n $('#breed').addClass('error');\r\n $('#breed').closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n $('#breed').removeClass('error');\r\n $('#breed').closest('.form-label-group').removeClass('error');\r\n careClubInfo.petBreed = $('#breed').val();\r\n careClubInfo.petBreedId = $('#breed').find(':selected').data('id');\r\n }\r\n\r\n if ($('#month').val() + $(\"#year\").val() < 1) {\r\n $('#year').addClass('error');\r\n $('#year').closest('.form-label-group').addClass('error');\r\n $('#month').addClass('error');\r\n $('#month').closest('.form-label-group').addClass('error');\r\n valid = false;\r\n ageValue += $('#month').val() + 'm';\r\n } else {\r\n $('#year').removeClass('error');\r\n $('#year').closest('.form-label-group').removeClass('error');\r\n $('#month').removeClass('error');\r\n $('#month').closest('.form-label-group').removeClass('error');\r\n if ($('#year').val() > 0) {\r\n ageValue = $('#year').val() + 'y ';\r\n }\r\n if ($('#month').val() > 0) {\r\n ageValue += $('#month').val() + 'm';\r\n }\r\n ageDataFormat = $('#year').val() + 'y ' + $('#month').val() + 'm';\r\n let yearsInMounths = parseFloat($('#year').val() * 12);\r\n careClubInfo.petsAgeMonth = yearsInMounths + parseFloat($('#month').val());\r\n careClubInfo.petAge = ageValue;\r\n careClubInfo.petAgeDataLayerFormat = ageDataFormat;\r\n }\r\n\r\n if (careClubInfo.petGender == '') {\r\n $('.js-gender-group').addClass('error');\r\n valid = false;\r\n } else {\r\n $('.js-gender-group').removeClass('error');\r\n }\r\n // Future release\r\n /* if(careClubInfo.petSpayed == ''){\r\n $('.js-spayed-group').addClass('error');\r\n valid = false;\r\n }else{\r\n $('.js-spayed-group').removeClass('error');\r\n } */\r\n return valid;\r\n }\r\n\r\n function bindPetInfoClick() {\r\n $('[data-step=\"pet-info\"]').on('click', '.js-pet-info-form', function (e) {\r\n e.preventDefault();\r\n if (ccdePetAge != 0 && ccdePetAge != ccdePetChangedAge) {\r\n isBindPlanServices = false;\r\n }\r\n // check query string and update accordingly\r\n const accessPlanExists = window.location.pathname.includes(\"access-plan\");\r\n if (accessPlanExists) {\r\n\r\n if (!checkPetInfoForm()) {\r\n return;\r\n }\r\n\r\n ui.$sections.hide();\r\n ui.$healthStatus.hide();\r\n updatePetInfo(careClubInfo.petId);\r\n if (careClubInfo.hospitalIDValue == null || careClubInfo.hospitalIDValue == '') {\r\n updateBackBtn('hospital-selector', 'pet-info');\r\n ui.$hospitalSelector.show();\r\n updateProgresBar('hospital-selector');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'hospital-selector', 'pet-info');\r\n } else {\r\n ui.$petReview.show();\r\n var targetValue = 'info-hospital-review';\r\n let backStepValue = 'pet-info';\r\n updateBackBtn(targetValue, backStepValue);\r\n updateProgresBar('info-hospital-review');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'info-hospital-review', 'pet-info');\r\n }\r\n return;\r\n } else {\r\n\r\n if (!checkPetInfoForm()) {\r\n return;\r\n }\r\n\r\n ui.$sections.hide();\r\n ui.$healthStatus.show();\r\n updateProgresBar('health-status');\r\n updatePetInfo(careClubInfo.petId);\r\n updateBackBtn('health-status', 'pet-info');\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'health-status', 'pet-info');\r\n }\r\n });\r\n }\r\n\r\n function bindactiveBtnClick() {\r\n $('.js-seciton-step').on('click', '.js-acitve-btn', function (e) {\r\n e.preventDefault();\r\n $(this).closest('.ccde__form__body').find('button.active').removeClass('active');\r\n $(this).addClass('active');\r\n $(this).closest('.ccde__form__body').find('button.disabled').removeClass('disabled');\r\n });\r\n }\r\n\r\n function bindPetGenderClick() {\r\n $('[data-step=\"pet-info\"]').on('click', '.js-gender-group .btn-selecter', function (e) {\r\n e.preventDefault();\r\n $('.js-gender-group').find('.btn-selecter').removeClass('active');\r\n careClubInfo.petGender = $(this).data('gender');\r\n careClubInfo.sexId = $(this).data('genderid');\r\n $('.js-sex-id').each(function () {\r\n if (careClubInfo.sexId == 1) {\r\n $(this).text('his');\r\n } else if (careClubInfo.sexId == 2) {\r\n $(this).text('her');\r\n }\r\n });\r\n $(this).addClass('active');\r\n });\r\n }\r\n\r\n function bindPetSpayedClick() {\r\n $('[data-step=\"pet-info\"]').on('click', '.js-spayed-group .btn-selecter', function (e) {\r\n e.preventDefault();\r\n $('.js-spayed-group').find('.btn-selecter').removeClass('active');\r\n careClubInfo.petSpayed = $(this).data('spayed');\r\n $(this).addClass('active');\r\n });\r\n }\r\n\r\n function scrollTrems() {\r\n if ($('.js-agreement-text')[0].scrollHeight > $('.js-agreement-text').height()) {\r\n $('.js-agreement-text').on('scroll', function () {\r\n let newHeight = $(this)[0].scrollHeight * .92;\r\n if ($(this).scrollTop() + $(this).innerHeight() + 2 >= newHeight) {\r\n $('.js-accept-agreement').removeClass('disabled');\r\n }\r\n });\r\n }\r\n else {\r\n $('.js-accept-agreement').removeClass('disabled');\r\n }\r\n }\r\n\r\n function bindServiceTypeClick() {\r\n $('.js-service-list').on('click', '.js-service-option', function (e) {\r\n e.preventDefault();\r\n var serviceType = $(this).attr('data-option');\r\n if ($(this).hasClass('active')) {\r\n $('.js-service-option').removeClass('active');\r\n $('.js-service-desc').hide();\r\n } else {\r\n $('.js-service-option').removeClass('active');\r\n $(this).addClass('active');\r\n $('.js-service-desc').hide();\r\n $('.js-service-desc[data-desc=\"' + serviceType + '\"]').show();\r\n }\r\n });\r\n }\r\n\r\n function bindfieldUpdate() {\r\n $('[data-step=\"pet-type-name\"] .js-required').on('keyup', function (e) {\r\n e.preventDefault();\r\n var wrap = $(this).closest('.ccde__form__body');\r\n if ($(this).val() !== '') {\r\n wrap.find('.js-btn-required').removeClass('disabled');\r\n } else if ($(this).val() === '') {\r\n wrap.find('.js-btn-required').addClass('disabled');\r\n }\r\n });\r\n }\r\n\r\n function bookAppointmentDataAnalystic(e) {\r\n e.preventDefault();\r\n window.dataLayer.push({\r\n 'event': 'oab-click',\r\n 'oab-location': 'careclub-exit',\r\n 'oab-type': 'standard',\r\n 'logged-in-status': false\r\n });\r\n let el = $(this);\r\n window.location.href = el.attr('href');\r\n }\r\n\r\n function createDynamicRedirectButtons() {\r\n\r\n ui.$confirmationBtnsContainer.each((idx, wrapper) => {\r\n switch (careClubInfo.hospitalType) {\r\n case 0: //Nothing\r\n break;\r\n case 1: //Book\r\n $(wrapper).html(`<a class=\"btn btn-sky-outline-alt active bookNowBtn js-book-pet-url\" href=\"${careClubInfo.bookAnAppointmentUrl}\">Book an Appointment</a>`);\r\n break;\r\n case 2: //Request\r\n $(wrapper).html(`<a class=\"btn btn-sky-outline-alt active\" href=\"${careClubInfo.requestAnAppointmentUrl}\">Request an Appointment</a>`);\r\n break;\r\n case 3: //Contact\r\n $(wrapper).html(`<a class=\"btn btn-sky-outline-alt active\" href=\"tel:+${careClubInfo.hospitalPhoneNumber}\">Call Us ${careClubInfo.hospitalPhoneNumber}</a>`);\r\n break;\r\n case 4: //Walk-In (TBD)\r\n $(wrapper).html(`<a class=\"btn btn-sky-outline-alt active\" href=\"#\">Walk In - TBD</a>`);\r\n break;\r\n case 5: //corp redirect to FAH\r\n $(wrapper).html(`<h5 class=\"mb-4\">Locate a VCA hospital near you and schedule a visit.</h5><a class=\"btn btn-sky-outline-alt active\" href=\"${careClubInfo.bookAnAppointmentUrl}\">Find a Hospital</a>`);\r\n break;\r\n }\r\n });\r\n ui.$wellnesscloseBtn = $('.bookNowBtn');\r\n ui.$wellnesscloseBtn.on('click', bookAppointmentDataAnalystic);\r\n }\r\n\r\n function bindSelectPetClick() {\r\n $('.js-seciton-step').on('click', '.js-show-step', function (e) {\r\n e.preventDefault();\r\n var wrap = $(this).closest('.js-seciton-step');\r\n var speciesIdDataVal = $(this).attr('data-value');\r\n\r\n dynamicTitle(wrap);\r\n wrap.addClass('part-two');\r\n wrap.find('.js-show-step').not(this).hide();\r\n wrap.find('.js-vca-dropdown-button').hide();\r\n wrap.find('.js-shelter-link').hide();\r\n wrap.find('.js-login-link').hide();\r\n careClubInfo.petSpecies = $(this).attr('data-type');\r\n careClubInfo.speciesId = parseInt(speciesIdDataVal);\r\n careClubInfo.petImgURL = $(this).find('.js-confirm-img').attr('src');\r\n $(this).addClass('active');\r\n $(this).closest('section[data-step]').find('button[data-btn=\"back\"]').addClass('btn-reset');\r\n wrap.find('.js-hidden-step').show();\r\n\r\n //create breed dropdown\r\n let selectBreedEl = ui.$petInfo.find(\"#breed\");\r\n createEl.populatedBreedsList(careClubInfo.breedsList, selectBreedEl, careClubInfo.speciesId);\r\n });\r\n }\r\n\r\n function dynamicTitle(wrap) {\r\n var dynamicTitleWrapper = wrap.find('.js-dynamic-title');\r\n $(dynamicTitleWrapper).find('.ccde__form__question__title').each((idx, title) => {\r\n $(title).hide();\r\n });\r\n wrap.find('.ccde__form__question__title.-pet-selected').show();\r\n }\r\n\r\n function resetDynamicTitle() {\r\n var wrapper = $('.ccde__form__header.js-dynamic-title');\r\n wrapper.find('.ccde__form__question__title').each((title) => {\r\n $(title).hide();\r\n });\r\n wrapper.find('.ccde__form__question__title.-pet-not-selected').show();\r\n }\r\n\r\n\r\n function bindEnrollPetClick() {\r\n $('.js-seciton-step').on('click', 'button.js-enroll-btn', function (e) {\r\n e.preventDefault();\r\n isEnrollAnotherPet = true;\r\n isBindPlanServices = false;\r\n $(this).closest('section[data-step]').find('button[data-btn=\"enroll\"]').addClass('btn-reset');\r\n if ($(this).hasClass('btn-reset') && isEnrollAnotherPet) {\r\n if ((!careClubInfo.isLoggedIn && isAccessPlan) || !careClubInfo.isLoggedIn) {\r\n clearCache();\r\n clearPetInformation();\r\n count += 1;\r\n $('.ccde__wrapper').addClass('js-non-logged-in-user');\r\n ui.$sections.hide();\r\n ui.$selectExistPet.hide();\r\n ui.$selectPet.show();\r\n ui.$verifyStep.hide();\r\n $('.js-btn-selecter').removeClass('active');\r\n $('.input-label-wrapper').addClass('disabled');\r\n $('.ccde__client-info__field-group').find('.select-box__select').addClass('disabled')\r\n $('.js-btn-selecter').show();\r\n $('.js-hidden-step').hide();\r\n // var wrap = $(this).closest('section[data-step]').find('.js-btn-selecter').removeClass('.active')\r\n var wrapper = $('.ccde__form__header.js-dynamic-title');\r\n wrapper.find('.ccde__form__question__title.-pet-not-selected').show();\r\n wrapper.find('.ccde__form__question__title.-pet-selected').hide();\r\n wrapper.find('.ccde__form__question__title.-new-anonymous-user').hide();\r\n wrapper.find('.ccde__form__question__title.-registered-anonymous-user').show();\r\n wrapper.find('.ccde__form__question__title.-enroll-pet').show();\r\n wrapper.find('.ccde__form__question__title.-loggedIn').hide();\r\n $('section[data-step=\"pet-type-name\"]').removeClass('part-two');\r\n } else {\r\n clearCache();\r\n clearPetInformation();\r\n ui.$selectExistPet.show();\r\n ui.$confirmation.hide();\r\n }\r\n if ($(this).hasClass('remove-on-next')) {\r\n $(this).removeClass('remove-on-next');\r\n $(this).hide();\r\n }\r\n\r\n return;\r\n }\r\n // if(!isEnrollAnotherPet) {\r\n // u.$sections.hide();\r\n // ui.$selectExistPet.show();\r\n // ui.$progressBar.show();\r\n // updateProgresBar('select-pet');\r\n // window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'Select pet', 'welcome');\r\n // }else {\r\n // ui.$sections.hide();\r\n // ui.$selectPet.show();\r\n // ui.$progressBar.show();\r\n // updateProgresBar('pet-type-name');\r\n // window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'Pet type and name', 'welcome');\r\n // }\r\n });\r\n }\r\n function bindVerifyUserClick() {\r\n $('.js-seciton-step').on('click', '.js-verify-user', function (e) {\r\n e.preventDefault();\r\n\r\n if ($('.js-verify-address-inputs .js-required').val() != '' && $('.js-pet-selector-box input').is(':checked')) {\r\n careClubInfo.addressChallengeAnswer = $(\"input[name='missingAddress']\").val();\r\n careClubInfo.petNameChallengeAnswer = $(\"input[name='petName']:checked\").val();\r\n showLoader();\r\n var wrapper = $('.ccde__form__header.js-dynamic-title');\r\n wrapper.find('.ccde__form__question__title.-enroll-pet').show();\r\n wrapper.find('.ccde__form__question__title.-loggedIn').hide();\r\n checkConfirmChallenge();\r\n ui.$selectExistPet.show();\r\n ui.$verifyStep.hide();\r\n ui.$agreement.hide();\r\n }\r\n $('.js-exist-pet-btn').addClass('disabled')\r\n });\r\n }\r\n\r\n function showLoader() {\r\n ui.$sections.css('opacity', '.3').css('pointer-events', 'none');\r\n ui.loader.show();\r\n }\r\n\r\n function hideLoader() {\r\n ui.$sections.css('opacity', '1').css('pointer-events', 'all');\r\n ui.loader.hide();\r\n }\r\n\r\n function clearPetInformation() {\r\n careClubInfo.petName = '';\r\n careClubInfo.petGender = '';\r\n careClubInfo.sexId = '';\r\n careClubInfo.petSpayed = '';\r\n careClubInfo.petSpecies = '';\r\n careClubInfo.speciesId = '';\r\n careClubInfo.petsAgeYear = '';\r\n careClubInfo.petsAgeMonth = '';\r\n careClubInfo.petBreed = '';\r\n careClubInfo.petBreedId = '';\r\n careClubInfo.petAge = '';\r\n }\r\n\r\n function bindExpireMembershipClick() {\r\n $('.js-expire-membership').on('click', function (e) {\r\n e.preventDefault();\r\n\r\n let agreementStepIsVisible = ui.$agreement.is(':visible');\r\n let isAElement = $(this).is('a');\r\n\r\n if (agreementStepIsVisible && careClubInfo.planid) {\r\n fireExpireMembership();\r\n }\r\n\r\n if (isAElement) {\r\n let redirectUrl = $(this).attr('href');\r\n window.location = redirectUrl;\r\n }\r\n });\r\n }\r\n\r\n async function fireExpireMembership() {\r\n\r\n if (!careClubInfo.membershipId) {\r\n return;\r\n }\r\n\r\n var params = {\r\n 'HospitalId': careClubInfo.hospitalIDValue,\r\n 'MembershipId': careClubInfo.membershipId\r\n };\r\n\r\n const { success, data, error } = await expireMembership.post(params);\r\n\r\n if (!success) {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n hideLoader();\r\n $('.js-error-message').text(error);\r\n window.VCA.ccdeDatalayer.datalayerPushStepChange(careClubInfo, 'error', 'agreement');\r\n return;\r\n }\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.CareClubForm.init();\r\n});","window.VCA = window.VCA || {}; \r\n\r\nwindow.VCA.paymentCapture = (function ($) {\r\n var ui = {};\r\n var careClubInfo={};\r\n\r\n function init() { \r\n cacheUI();\r\n bindEvents(); \r\n }\r\n\r\n function cacheUI() {\r\n ui.$sections = $('.js-seciton-step');\r\n ui.$paymentclose = $('.js-payment-close');\r\n ui.$ccdemodalpopup=$('#ccde-modal-popup');\r\n ui.$confirmdelete=$('.js-confrim-delete');\r\n ui.$continuenext=$('.js-continue-nxt');\r\n ui.$closeButton = $('#js-modal-close-btn');\r\n\r\n ui.$completepayclose=$('.js-complete-close');\r\n ui.$completepaypop=$('#complete-pay-modal-popup');\r\n \r\n ui.$successMessage = ui.$completepaypop.find('#complete-success-message');\r\n ui.$failureMessage = ui.$completepaypop.find('#complete-failure-message');\r\n\r\n ui.$confirmation = $('section[data-step=\"confirmation\"]');\r\n ui.loader = $('.js-loader');\r\n\r\n ui.$PaymentCapture500ErrorMsg = $('#PaymentCapture500ErrorMsg').val()\r\n ui.$PaymentCaptureGatewayErrorMsg = $('#PaymentCaptureGatewayErrorMsg').val()\r\n }\r\n\r\n function showLoader() {\r\n ui.$sections.css('opacity', '.3').css('pointer-events', 'none');\r\n ui.loader.show();\r\n }\r\n\r\n function hideLoader() {\r\n ui.$sections.css('opacity', '1').css('pointer-events', 'all');\r\n ui.loader.hide();\r\n }\r\n\r\n function bindEvents(){\r\n ui.$paymentclose.on('click', (event)=> {\r\n event.preventDefault(); \r\n //ui.$ccdemodalpopup.modal('show');\r\n ui.$ccdemodalpopup.modal({ backdrop: 'static', keyboard: false }).modal('show');\r\n });\r\n\r\n ui.$confirmdelete.on('click', (event)=> {\r\n event.preventDefault(); \r\n ui.$ccdemodalpopup.modal('hide');\r\n });\r\n\r\n ui.$completepayclose.on('click', (event)=> {\r\n event.preventDefault(); \r\n ui.$completepaypop.modal('hide');\r\n ui.$sections.hide();\r\n $(window).scrollTop(0);\r\n ui.$confirmation.show();\r\n $('.progress-bar').css('width', 0 + '%').attr('aria-valuenow', 0);\r\n });\r\n\r\n ui.$continuenext.on('click', (event)=> {\r\n event.preventDefault();\r\n ui.$ccdemodalpopup.modal('hide'); \r\n ui.$sections.hide();\r\n $(window).scrollTop(0);\r\n ui.$confirmation.show()\r\n $('.progress-bar').css('width', 0 + '%').attr('aria-valuenow', 0);\r\n }); \r\n }\r\n\r\n var gatewayErrorCount = 0;\r\n var retryCount = 0;\r\n let retryLimit = 1; \r\n let toomanyattempts = false;\r\n\r\n async function loadIframeWithUID(obj) {\r\n retryCount = 0;\r\n gatewayErrorCount = 0;\r\n var divErr = document.getElementById(\"divError\");\r\n divErr.innerHTML = \"\";\r\n divErr.classList.remove(\"div-has-errors\");\r\n careClubInfo.hospitalId=obj.HospitalId\r\n careClubInfo.clientId=obj.clientId\r\n careClubInfo.patientId=obj.PatientId\r\n careClubInfo.membershipId=obj.membershipId\r\n\r\n const timestamp = Date.now().toString(36) + Math.random().toString(36).substring(2); \r\n const orderId = `${timestamp}_${careClubInfo.membershipId}_${careClubInfo.hospitalId}`;\r\n \r\n await fetch(\"/api/careclub/initiatepaymentcapture?orderId=\" + orderId)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n var divErr = document.getElementById(\"divError\"); \r\n if (data?.Data?.StatusCode == 200) {\r\n const uid = data?.Data?.Data?.uid;\r\n const url = data?.Data?.Data?.url;\r\n if (uid && url) {\r\n const iframe = document.getElementById(\"myIframe\");\r\n iframe.src = url + uid;\r\n } else {\r\n console.error(\"UID not found in the response\");\r\n }\r\n } else {\r\n divErr.classList.add(\"div-has-errors\");\r\n ui.$failureMessage.show();\r\n ui.$successMessage.hide();\r\n ui.$closeButton.show();\r\n ui.$completepaypop.modal({ backdrop: 'static', keyboard: false }).modal('show');\r\n hideLoader();\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(\"Error fetching UID:\", error);\r\n });\r\n }\r\n\r\n function pushToDataLayer(event, label, additionalParams = {}) {\r\n const dataLayerEvent = {\r\n event: event,\r\n eventCategory: 'Checkout',\r\n eventAction: 'Button Click',\r\n eventLabel: label,\r\n ...additionalParams \r\n };\r\n \r\n window.dataLayer.push(dataLayerEvent);\r\n }\r\n\r\n function completePayment(obj) {\r\n showLoader()\r\n var divErr = document.getElementById(\"divError\");\r\n divErr.innerHTML = \"\";\r\n\r\n const data_input = {\r\n uid: obj.uid,\r\n clientId: careClubInfo.clientId,\r\n patientId: careClubInfo.patientId,\r\n hospitalId: careClubInfo.hospitalId,\r\n };\r\n\r\n fetch(\"/api/careclub/savecard\", {\r\n method: \"POST\",\r\n body: JSON.stringify(data_input),\r\n headers: {\r\n \"Content-type\": \"application/json; charset=UTF-8\",\r\n \"x-hospital-id\": careClubInfo.hospitalId,\r\n },\r\n })\r\n .then((response) => response.json())\r\n .then((data) => {\r\n hideLoader(); \r\n if (data?.Data?.StatusCode == 400) {\r\n divErr.classList.add(\"div-has-errors\");\r\n divErr.innerHTML = data?.Data?.errorMessage;\r\n } else if (data?.Data?.StatusCode == 500) {\r\n divErr.classList.add(\"div-has-errors\");\r\n divErr.innerHTML = ui.$PaymentCapture500ErrorMsg;\r\n } else {\r\n ui.$successMessage.show();\r\n ui.$failureMessage.hide();\r\n ui.$closeButton.hide();\r\n ui.$completepaypop.modal({ backdrop: 'static', keyboard: false }).modal('show');\r\n pushToDataLayer(\r\n 'saveCardClick',\r\n 'Save Card Successful'\r\n ); \r\n }\r\n })\r\n .catch((error) => {\r\n hideLoader();\r\n divErr.classList.add(\"div-has-errors\");\r\n divErr.innerHTML = \"An error occurred. Please check your network connection and try again.\";\r\n console.error(\"Fetch error:\", error);\r\n });\r\n } \r\n\r\n function handleTransactionErrors(errors) {\r\n if (!Array.isArray(errors)) {\r\n errors = [errors];\r\n }\r\n\r\n var divErr = document.getElementById(\"divError\");\r\n if (divErr) {\r\n divErr.innerHTML = ``;\r\n divErr.classList.add(\"div-has-errors\");\r\n\r\n //First check for Too Many Attempts Error and Proceed to Error Page.\r\n for (let error of errors) {\r\n if (error?.status_code === 2320) {\r\n toomanyattempts = true;\r\n }\r\n }\r\n\r\n \r\n\r\n let errorMessages = []; \r\n let _gatewayErrorMsg = getGatewayError(errors);\r\n if (_gatewayErrorMsg) {\r\n gatewayErrorCount++;\r\n divErr.innerHTML += `${ui.$PaymentCaptureGatewayErrorMsg}` + _gatewayErrorMsg;\r\n errorMessages.push(_gatewayErrorMsg); \r\n }\r\n \r\n let _otherErrorMsg = getOtherError(errors);\r\n if (_otherErrorMsg) { \r\n retryCount++;\r\n divErr.innerHTML += _otherErrorMsg;\r\n errorMessages.push(_otherErrorMsg); \r\n }\r\n\r\n if (toomanyattempts || (retryCount > retryLimit) || (gatewayErrorCount > retryLimit)) {\r\n ui.$failureMessage.show();\r\n ui.$successMessage.hide();\r\n ui.$closeButton.show();\r\n ui.$completepaypop.modal({ backdrop: 'static', keyboard: false }).modal('show');\r\n }\r\n\r\n let consolidatedErrorMessage = errorMessages.join(' ');\r\n consolidatedErrorMessage = consolidatedErrorMessage.replace(/<\\/?br\\s*\\/?>/gi, '');\r\n pushToDataLayer(\r\n 'saveCardFail',\r\n 'Save Card Failed',\r\n { errorMessage: consolidatedErrorMessage } \r\n ); \r\n }\r\n }\r\n\r\n function getGatewayError(errors) {\r\n var errorMsg = \"\";\r\n for (let error of errors) {\r\n if (error?.status_code === 2300) {\r\n errorMsg += `${error.gateway_code} - ${error.gateway_message} </br>`;\r\n }\r\n }\r\n return errorMsg;\r\n } \r\n\r\n function getOtherError(errors) {\r\n var errorMsg = \"\";\r\n for (let error of errors) {\r\n if (error?.status_code !== 2300 && !error?.status_message?.includes(\"3DS error\")) {\r\n errorMsg += `${error.status_message} </br>`;\r\n }\r\n }\r\n return errorMsg;\r\n }\r\n\r\n return {\r\n init: init,\r\n loadIframeWithUID:loadIframeWithUID,\r\n completePayment: completePayment,\r\n handleTransactionErrors: handleTransactionErrors,\r\n };\r\n})(jQuery);\r\n\r\n$(function () {\r\n window.VCA.paymentCapture.init();\r\n});\r\n\r\nwindow.addEventListener('message', function(event) {\r\n const iframe = document.getElementById('myIframe');\r\n if (iframe && event.data && event.data.subject === \"completePayment\" && event.data.content.status === \"Success\") {\r\n const paymentData = event.data.content;\r\n window.VCA.paymentCapture.completePayment({\r\n uid: paymentData.uid,\r\n txn_guid: paymentData.txn_guid,\r\n gateway_message: paymentData.gateway_message\r\n });\r\n }\r\n});\r\n\r\nwindow.addEventListener('message', function(event) {\r\n const iframe = document.getElementById('myIframe');\r\n if (iframe && event.data && event.data.subject === \"handleTransactionErrors\" ) {\r\n const errors = event.data.content;\r\n window.VCA.paymentCapture.handleTransactionErrors(errors);\r\n }\r\n});\r\n","const healthStatusBtn = ({ displayName, imgURL, imgURL2, heathBtnId }) => `\r\n <button data-value=\"${heathBtnId}\" data-type=\"${displayName}\" data-btn=\"health-status\" data-target=\"\" class=\"btn btn-dusk-outline btn-selecter btn-selecter--left\">\r\n <img class=\"off-hover-icon js-confirm-img\" alt=\"${displayName} icon\" src=\"${imgURL}\">\r\n <img class=\"on-hover-icon\" alt=\"${displayName} icon\" src=\"${imgURL2}\">\r\n ${displayName}\r\n </button>\r\n`;\r\n\r\n\r\nconst petType = ({ displayName, imgURL, imgURL2, speciesId, isMember, name }) => `\r\n <button data-value=\"${speciesId}\" data-type=\"${name}\" data-member=\"${isMember}\" class=\"btn btn-dusk-outline btn-selecter btn-selecter--left js-show-step js-btn-selecter\">\r\n <img class=\"off-hover-icon js-confirm-img\" alt=\"${displayName} icon\" src=\"${imgURL}\">\r\n <img class=\"on-hover-icon\" alt=\"${displayName} icon\" src=\"${imgURL2}\">\r\n ${displayName}\r\n </button>\r\n`;\r\n\r\nconst otherPetType = ({ displayName, speciesId }) => `\r\n <li data-value=\"${speciesId}\" role=\"option\" class=\"\"><a href=\"#\" class=\"js-other-pet-selecter\" data-value=\"${speciesId}\" data-type=\"${displayName}\" data-filter=\"${displayName}\">${displayName}</a></li>\r\n`;\r\n\r\nconst newPet = ({ displayName, addnewPetClass }) => `\r\n <button data-pet-name=\"${displayName}\" class=\"btn btn-dusk-outline btn-selecter btn-selecter--thumb js-acitve-btn ${addnewPetClass}\">\r\n ${displayName}\r\n </button>\r\n`;\r\n\r\nconst existPet = ({ displayName, imgURL, petId, careClub, species, genderId, addnewPetClass,addDisabledClass }) => \r\n`\r\n <button data-pet-id=\"${petId}\" data-pet-name=\"${displayName}\" data-species=\"${species}\" data-careclub=\"${careClub}\" data-genderid=\"${genderId}\" class=\"btn btn-dusk-outline btn-selecter btn-selecter--thumb btn-selecter--left js-acitve-btn ${(careClub == true) ? 'existingDisabled': 'existingEnabled'}\">\r\n <div class=\"btn-selecter--thumb__icon\">\r\n <img data-object-fit=\"cover\" alt=\"${displayName} icon\" class=\"js-confirm-img\" src=\"${imgURL}\">\r\n </div>\r\n ${displayName}\r\n </button>`\r\n\r\nconst petInputGroup = ({ displayName }) => `\r\n <div class=\"form-label-group\">\r\n <div class=\"form-check custom-radio\">\r\n <input class=\"form-check-input custom-control-input\" type=\"radio\" name=\"petName\" id=\"${displayName}\" value=\"${displayName}\">\r\n <label class=\"form-check-label\" for=\"${displayName}\">\r\n ${displayName}\r\n </label>\r\n </div>\r\n </div>\r\n`;\r\n\r\nconst breedsOptions = ({ displayName, Id, speciesId }) => `\r\n <option value=\"${displayName}\" data-id=\"${Id}\" data-speciesId=\"${speciesId}\" >${displayName}</option>\r\n`;\r\n\r\nconst serviceBtn = ({ displayName, imgURL, serviceId, ind }) => `\r\n <li>\r\n <button class=\"ccde__services__list__item js-service-option\" data-service-id=\"${serviceId}\" data-option=\"${ind}\">\r\n <img src=\"${imgURL}\" alt=\"${displayName} icon\"/>\r\n <span>${displayName}</span>\r\n </button>\r\n </li>\r\n`;\r\n\r\nconst serviceDesc = ({ displayName, desc, ind }) => `\r\n <li class=\"ccde__services__list__desc__item js-service-desc\" style=\"display: none;\" data-desc=\"${ind}\">\r\n <strong>${displayName}</strong>\r\n <span>${desc}</span>\r\n </li>\r\n`;\r\n\r\n\r\nconst hospitalItem = ({ name, id, index }) => `\r\n <div class=\"ccde__select-hospital__hospital-list__item form-check custom-radio\">\r\n <input data-hospital-id=\"${id}\" data-name=\"${name}\" name=\"hospital-result\" id=\"${id}\" value=\"${id}\" class=\"form-check-input custom-control-input js-hospital-item\" type=\"radio\">\r\n <label class=\"form-check-label\" for=\"${id}\">\r\n ${name}\r\n </label>\r\n </div>\r\n`;\r\n\r\n\r\nexport {\r\n healthStatusBtn,\r\n petType,\r\n otherPetType,\r\n existPet,\r\n petInputGroup,\r\n breedsOptions,\r\n serviceDesc,\r\n serviceBtn,\r\n hospitalItem,\r\n newPet\r\n};\r\n","import ApiService from '@api/api-service';\r\nimport haversine from 'haversine-distance';\r\nimport getHospitals from '@api/routes/findAHospitalNCA/findAHospitalNCA';\r\nimport * as submitSpinner from '../custom-forms/form-loading';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.FindAHospitalUC = (function ($) {\r\n var ui = {};\r\n var _urlParams = {};\r\n let canadaZipCodeRegex = /^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ -]?\\d[ABCEGHJ-NPRSTV-Z]\\d$/i;\r\n let usZipCodeRegex = /^(?:[1-9]|0(?!0{4}))\\d{4}(?:[-\\s]\\d{4})?$/i;\r\n\r\n\r\n\r\n function cacheUI() {\r\n ui.$zipcode = '';\r\n ui.$zipcodeInput = $('[data-control=\"zipcodeInput\"]');\r\n ui.$zipSubmitBtn = $('[data-control=\"zipSubmitBtn\"]');\r\n ui.isCanada = $('[data-iscanada]').attr('data-iscanada');\r\n }\r\n\r\n function bindEvents() {\r\n ui.$zipcodeInput.on('keyup change', function(e) {\r\n initZipcode(e);\r\n });\r\n }\r\n\r\n function initZipcode(e) {\r\n let zipCodeValue = ui.$zipcodeInput.val();\r\n let maxCharacters = 5;\r\n // console.log('e',e.key);\r\n\r\n\r\n //Need to check if IsCanada = true\r\n if (ui.isCanada === 'true') {\r\n let isValidCanadaZipCode = canadaZipCodeRegex.test(zipCodeValue);\r\n\r\n } else {\r\n //Need to limit characters to 5\r\n if (zipCodeValue.length >= maxCharacters) { \r\n ui.$zipcodeInput.val(zipCodeValue.substr(0, maxCharacters));\r\n }\r\n }\r\n }\r\n\r\n \r\n\r\n function init() {\r\n if ($('#nca-quickzip-promo').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindEvents();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.FindAHospitalUC.init();\r\n});","import * as templates from './templates';\r\n\r\nconst createExistPetBtns = (existPets, existPetBody) => {\r\n var existPetItems = '';\r\n\r\n $.each(existPets, function (i, item) {\r\n existPetItems += `${templates.existPet({ displayName: item.Name, imgURL: item.PetPhoto, petId:item.Id, careClub:item.IsPatientCareClubMember, species:item.SpeciesName })}`;\r\n });\r\n existPetBody.prepend(existPetItems);\r\n}\r\n\r\nconst createClientTypeBtns = (clientTypes,entrytBody) => {\r\n var clientTypeItems = '';\r\n\r\n $.each(clientTypes, function (i, item) {\r\n clientTypeItems += `${templates.clientType({ displayName:item.DisplayName, imgURL:item.IconBaseUrl, imgURL2:item.IconHoverUrl, clientTypeId:item.ClientTypeId })}`;\r\n });\r\n entrytBody.prepend(clientTypeItems);\r\n}\r\n\r\n\r\nconst createApptReasonBtns = (petApptReason, reasonTypetBody) => {\r\n var petApptResaonItems = '';\r\n\r\n $.each(petApptReason, function (i, item) {\r\n if(item.DisplayName !== '' || item.DisplayName !== null){\r\n petApptResaonItems += `${templates.apptReason({ name:item.DisplayName, id:item.Id, appointmentTypeId: item.AppointmentTypeId })}`;\r\n }\r\n });\r\n reasonTypetBody.prepend(petApptResaonItems);\r\n}\r\n\r\nconst createPetTypeBtns = (petTypes, petTypetBody, othersListy) => {\r\n var catTypesItems = '';\r\n var dogTypesItems = '';\r\n var otherPetTypesItems = '';\r\n\r\n $.each(petTypes, function (i, item) {\r\n if (item.SpeciesId == 1) {\r\n dogTypesItems += `${templates.petType({ displayName:item.DisplayName, imgURL:item.IconBaseUrl, imgURL2:item.IconHoverUrl, speciesId:item.SpeciesId })}`;\r\n }\r\n else if (item.SpeciesId == 2) {\r\n catTypesItems += `${templates.petType({ displayName:item.DisplayName, imgURL:item.IconBaseUrl, imgURL2:item.IconHoverUrl, speciesId:item.SpeciesId })}`;\r\n }\r\n else {\r\n otherPetTypesItems += `${templates.otherPetType({ displayName:item.DisplayName, speciesId:item.SpeciesId })}`;\r\n $('.js-vca-dropdown-button').show();\r\n }\r\n });\r\n petTypetBody.prepend(catTypesItems);\r\n petTypetBody.prepend(dogTypesItems);\r\n othersListy.append(otherPetTypesItems);\r\n}\r\n\r\nfunction createApptTypeBtns(petApptType, apptTypetBody) {\r\n var petApptTypesItems = '';\r\n var modals = '';\r\n\r\n $.each(petApptType, function (i, item) {\r\n if(item.DisplayName != '' && item.DisplayName != null){\r\n if(item.Id === 900 || item.Id === 911){\r\n petApptTypesItems += `${templates.apptTypeContact({ name:item.DisplayName, imgURL:item.IconBaseUrl, imgURL2:item.IconHoverUrl, id:item.Id, appointmentTypeId:item.Id })}`;\r\n modals += `${templates.apptTypeModal({ name:item.DisplayName, id:item.Id, body:item.HtmlDescription })}`;\r\n }else if(item.IconBaseUrl != null && item.IconBaseUrl != '' && item.IconBaseUrl != \"undefined\"){\r\n petApptTypesItems += `${templates.apptType({ name:item.DisplayName, imgURL:item.IconBaseUrl, imgURL2:item.IconHoverUrl, id:item.Id, appointmentTypeId:item.Id })}`;\r\n }else {\r\n petApptTypesItems += `${templates.apptTypeNoImage({ name:item.DisplayName, id:item.Id, appointmentTypeId:item.Id })}`;\r\n }\r\n }\r\n\r\n });\r\n apptTypetBody.prepend(petApptTypesItems);\r\n apptTypetBody.append(modals);\r\n}\r\n\r\nfunction createWellnessBtns(wellnessResponse, wellnesstBody, isCareClubMember, iconUrl) {\r\n let wellnessDuelist= \"\";\r\n let wellnessAvalist= \"\";\r\n\r\n \r\n $.each(wellnessResponse, function (i, item) {\r\n\r\n\r\n let displayDate = new Date(item.DueDate).toLocaleDateString('en-US')\r\n let showCareClubIcon = 'hide';\r\n if(isCareClubMember){\r\n showCareClubIcon = 'show';\r\n }\r\n\r\n if(item.IsDue == true) {\r\n $('.js-wellness-section-due').show();\r\n if(item.DueDate == null){\r\n wellnessDuelist += `${templates.wellnessBtn({ displayName:item.DisplayName, IconUrl:iconUrl,wellnessTypeId:item.WellnessTypeId, id:item.Id, DueDate:displayDate, careClubIcon:showCareClubIcon })}`;\r\n }\r\n else {\r\n wellnessDuelist += `${templates.wellnessBtnDueDate({ displayName:item.DisplayName, IconUrl:iconUrl,wellnessTypeId:item.WellnessTypeId, id:item.Id, DueDate:displayDate, careClubIcon:showCareClubIcon })}`;\r\n }\r\n }else {\r\n $('.js-wellness-section-ava').show();\r\n if(item.DueDate == null){\r\n wellnessAvalist += `${templates.wellnessBtn({ displayName:item.DisplayName, IconUrl:iconUrl,wellnessTypeId:item.WellnessTypeId, id:item.Id, DueDate:displayDate, careClubIcon:showCareClubIcon })}`;\r\n }\r\n else {\r\n wellnessAvalist += `${templates.wellnessBtnDueDate({ displayName:item.DisplayName, IconUrl:iconUrl,wellnessTypeId:item.WellnessTypeId, id:item.Id, DueDate:displayDate, careClubIcon:showCareClubIcon })}`;\r\n }\r\n }\r\n });\r\n\r\n wellnesstBody.find('.js-wellness-section-due').append(wellnessDuelist);\r\n wellnesstBody.find('.js-wellness-section-ava').append(wellnessAvalist);\r\n}\r\n\r\nconst createVerifyInputs = (petName, verifyBody) => {\r\n var petInputs = '';\r\n\r\n $.each(petName, function (i, item) {\r\n petInputs += `${templates.petInputGroup({ displayName:item })}`;\r\n });\r\n verifyBody.prepend(petInputs);\r\n}\r\n\r\nexport {\r\n createExistPetBtns,\r\n createClientTypeBtns,\r\n createApptReasonBtns,\r\n createPetTypeBtns,\r\n createApptTypeBtns,\r\n createWellnessBtns,\r\n createVerifyInputs\r\n }","import firstAvailableSlotFCA from '@api/routes/fah-hospital/first-available-slot';\r\nimport * as templates from './templates';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.OabFirstAvailable = (function ($) {\r\n\r\n var ui = {};\r\n var appoinmentReasonList = [];\r\n\r\n function cacheUI() {\r\n ui.$firstAvailableVisit = $('.js-oab-fist-available');\r\n ui.$firstThankYouAvailableVisit = $(\".js-ty-first-available\");\r\n ui.$hospitalId = ui.$firstAvailableVisit.data('hospital-id');\r\n ui.$hospitalName = ui.$firstAvailableVisit.data('hospital-name');\r\n ui.$isLoggedin = ui.$firstAvailableVisit.data('isloggedin');\r\n }\r\n\r\n async function initPage() {\r\n const oabFirstAvailable = ui.$firstAvailableVisit.data('hospital-id');\r\n const oabFirstAvailableFF = ui.$firstAvailableVisit.data('first-available-ff');\r\n const oabThankYouFirstAvailableFF = ui.$firstAvailableVisit.data('thankyou-page');\r\n if (oabFirstAvailable && oabFirstAvailableFF && oabFirstAvailableFF == \"True\") {\r\n var params = { hospitalId: oabFirstAvailable };\r\n const { success, data, error } = await firstAvailableSlotFCA.query(params);\r\n if (data) {\r\n firstAvaialableSlot(data?.result)\r\n }\r\n } else if (oabFirstAvailable && oabThankYouFirstAvailableFF && oabThankYouFirstAvailableFF == \"True\") {\r\n const appointmentDiv = document.querySelector(\".js-oab-fist-available\");\r\n const messageDiv = document.querySelector(\".js-ty-first-available\");\r\n\r\n if (appointmentDiv && messageDiv) {\r\n messageDiv.appendChild(appointmentDiv);\r\n }\r\n var params = { hospitalId: oabFirstAvailable, showwellness: true };\r\n const { success, data, error } = await firstAvailableSlotFCA.query(params);\r\n if (data) {\r\n if (data?.result) {\r\n ui.$firstThankYouAvailableVisit.find('.buttons-container').addClass('hidden');\r\n } else {\r\n ui.$firstThankYouAvailableVisit.find('.buttons-container').removeClass('hidden');\r\n }\r\n firstAvailabeSlotThankyou(data?.result)\r\n } else {\r\n ui.$firstThankYouAvailableVisit.find('.buttons-container').removeClass('hidden');\r\n }\r\n } else {\r\n ui.$firstThankYouAvailableVisit.find('.buttons-container').removeClass('hidden');\r\n }\r\n }\r\n\r\n /**\r\n * @method firstAvailabeSlotThankyou\r\n * @description to get the wellness visit details in thank you page append the data\r\n */\r\n function firstAvailabeSlotThankyou(hospitalVisit) {\r\n if (hospitalVisit) {\r\n appoinmentReasonList = hospitalVisit;\r\n let reasonDetails = bindTimeSlot(hospitalVisit[0], \"tyFaa\");\r\n const faaHeader = hospitalVisit[0].FaaHeader;\r\n const faaSubHeader = hospitalVisit[0].FaaSubHeader;\r\n let bookAppointmentURL = ui.$firstAvailableVisit.data('book-appointment-url');\r\n let splitURL = ''\r\n if (bookAppointmentURL) {\r\n splitURL = bookAppointmentURL.split('/')[0];\r\n }\r\n let container = $(`<div class=\"oab-available-banner__container\">\r\n <div class=\"js-oab-appointment-visit oab-available-banner__wrapper\">\r\n <div>\r\n <h4 class=\"h4 mb-2\">${faaHeader}</h4>\r\n <p class=\"mb-2\">${faaSubHeader}</p>\r\n </div>\r\n </div>\r\n <div class=\"mt-2\">\r\n <p>Need more time.\r\n <a href=\"/${bookAppointmentURL}?rul=/${splitURL}&hosBan=true\" class=\"oab-available-banner__appointment-link\">Schedule a future appointment »</a>\r\n </p>\r\n </div>\r\n </div>`);\r\n\r\n ui.$firstThankYouAvailableVisit.append(container);\r\n ui.$firstThankYouAvailableVisit.find('.js-oab-appointment-visit').append(reasonDetails);\r\n }\r\n }\r\n\r\n /**\r\n * @method firstAvaialableSlot\r\n * @description to get the wellness and sick visit details and append the data\r\n */\r\n function firstAvaialableSlot(hospitalVisit) {\r\n appoinmentReasonList = hospitalVisit;\r\n if (hospitalVisit) {\r\n let appendHospitalVisit = hospitalVisit.map(function (reason, index) {\r\n return $(`<button type=\"button\" data-available-id=\"${index}\" class=\"oab-available-banner__app-tab-btn js-hospital-visit-btn col-6 ${index == 0 ? 'active-tab' : ''}\">\r\n <img src=\"${reason.Icon}\" alt=\"Appointment type icon\"> \r\n ${reason.AppointmentTypeLabel}\r\n </button>`);\r\n });\r\n\r\n var reasonDetails = bindTimeSlot(hospitalVisit[0], \"hosBan\");\r\n let bookAppointmentURL = ui.$firstAvailableVisit.data('book-appointment-url');\r\n let splitURL = ''\r\n if (bookAppointmentURL) {\r\n splitURL = bookAppointmentURL.split('/')[0];\r\n }\r\n let container = $(`\r\n <div class=\"oab-available-banner__container\">\r\n <div class=\"js-oab-appointment-visit\">\r\n <div>\r\n <h4 class=\"h4 mb-0\">Book Now</h4>\r\n </div>\r\n <div class=\"d-flex mb-3\">\r\n </div>\r\n </div>\r\n <div class=\"mt-2\">\r\n <a href=\"/${bookAppointmentURL}?rul=/${splitURL}&hosBan=true\" class=\"oab-available-banner__appointment-link\">More appointment options »</a>\r\n </div>\r\n </div>\r\n `);\r\n ui.$firstAvailableVisit.append(container);\r\n container.find('.d-flex').append(appendHospitalVisit);\r\n ui.$firstAvailableVisit.find('.js-oab-appointment-visit').append(reasonDetails)\r\n ui.$firstAvailableVisit.find('.js-hospital-visit-btn').on('click', clickHospitalVisitType);\r\n\r\n // Use event delegation by attaching to the parent element\r\n $('.js-oab-fist-available').on('click', '.js-oab-available-banner', function (event) {\r\n const visitType = $(this).data('visit-type');\r\n const reasonText = $(this).data('reason-display-text');\r\n const startDate = $(this).data('start-date');\r\n window.VCA.oabDatalayer.datalayerFirstAvailable(ui.$hospitalId, ui.$hospitalName, ui.$isLoggedin, visitType, reasonText, startDate)\r\n });\r\n }\r\n }\r\n\r\n function bindTimeSlot(reasonDetails, urlFaa) {\r\n let hospitalTimeZone = reasonDetails.HospitalTimezone;\r\n let urlFAA = urlFaa;\r\n return reasonDetails?.AppointmentReasons.filter((ele) => ele.ReasonLabel !== \"The Reason is Not Listed\")\r\n .map(function (type) { //temporary fix\r\n let timeSlotContent = '';\r\n if (type?.TimeSlot && type?.TimeSlot?.length) {\r\n let bookAppointmentURL = ui.$firstAvailableVisit.data('book-appointment-url');\r\n\r\n timeSlotContent = type.TimeSlot.map(function (time) {\r\n const todayDate = templates.displayDate({ date: new Date() });\r\n let timeFormat = new Date(time?.StartTime).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', timeZone: hospitalTimeZone });\r\n let formattedTime = timeFormat.toLowerCase();\r\n let formattedDate = templates.displayDate({ date: time?.StartTime });\r\n const startDate = formattedDate;\r\n if (todayDate === formattedDate) {\r\n formattedDate = 'Today'\r\n }\r\n let splitURL = ''\r\n if (bookAppointmentURL) {\r\n splitURL = bookAppointmentURL.split('/')[0];\r\n }\r\n return `\r\n <a href=\"/${bookAppointmentURL}?oabid=${time?.QueryId}&${urlFAA}=true&rul=/${splitURL}\"\r\n data-visit-type=\"${reasonDetails.AppointmentTypeLabel}\" \r\n data-reason-display-text=\"${type.ReasonLabel}\" \r\n data-start-date=\"${startDate}\" class=\"oab-available-banner__time-slot js-oab-available-banner\">\r\n <span class=\"oab-available-banner__time-slot__time\">\r\n ${formattedTime}\r\n </span>\r\n <span>${formattedDate}</span>\r\n </a>`;\r\n }).join('');\r\n } else {\r\n timeSlotContent = `<em>\r\n ${type?.TimeSlotErrorMsg}\r\n </em>`;\r\n }\r\n\r\n // Return the HTML structure with the conditionally populated time slots\r\n return $(`<div class=\"d-flex align-items-sm-center oab-available-banner__appointment-slots\" data-region=\"reasonTimeSlot\">\r\n <span class=\"oab-available-banner__appointment-slot-title\">${type?.ReasonLabel}</span> \r\n <span class=\"oab-available-banner__time-slots-container\">\r\n ${timeSlotContent}\r\n </span>\r\n </div>`);\r\n });\r\n }\r\n\r\n /**\r\n * @method clickHospitalVisitType\r\n * @description to click the sick or wellness visit to view the available appointment dates for that visit.\r\n */\r\n function clickHospitalVisitType() {\r\n ui.$firstAvailableVisit.find('.js-oab-appointment-visit').find('[data-region=\"reasonTimeSlot\"]').remove();\r\n const appointmentIndex = $(this).data('available-id');\r\n ui.$firstAvailableVisit.find('.js-hospital-visit-btn').removeClass('active-tab');\r\n $(this).addClass('active-tab');\r\n let reasonList;\r\n if (appoinmentReasonList) {\r\n reasonList = bindTimeSlot(appoinmentReasonList[appointmentIndex], \"hosBan\");\r\n ui.$firstAvailableVisit.find('.js-oab-appointment-visit').append(reasonList);\r\n }\r\n }\r\n\r\n function init() {\r\n if ($('.js-oab-fist-available').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n initPage();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.OabFirstAvailable.init();\r\n});","import settings from '@api/routes/oab-api/get-appt-flow-settings';\r\nimport firstAvailable from '@api/routes/oab-api/get-first-available-resource';\r\nimport wellness from '@api/routes/oab-api/get-wellness-options';\r\nimport allResource from '@api/routes/oab-api/get-all-resource-slots';\r\nimport slotsByResourceID from '@api/routes/oab-api/get-slots-by-resource-id';\r\nimport bookDraft from '@api/routes/oab-api/book-draft-appointment';\r\nimport getChallenge from '@api/routes/oab-api/get-challenge';\r\nimport confirmChallenge from '@api/routes/oab-api/confirm-challenge';\r\nimport confirmBook from '@api/routes/oab-api/confirm-book-appointment';\r\nimport * as templates from './templates';\r\nimport grabber from '../grabber';\r\nimport { atcb_init } from 'add-to-calendar-button';\r\nimport counter from '@utils/countdown-timer';\r\nimport * as createEl from './oab-create-elements';\r\n\r\n//import firstdataMock from './mock-fist-ava-response.json';\r\n//import datejsonMock from './mock-date-time-response.json';\r\n\r\nvar VCA = VCA || {};\r\n\r\n//var firstdata = firstdataMock;\r\n//var datejson = datejsonMock;\r\n\r\n\r\nVCA.bookAppointmentForm = (function ($) {\r\n\r\n var ui = {};\r\n\r\n var todaysDate = formatDate(new Date());\r\n var currentSelectedDate = todaysDate;\r\n var loaderWait = 'wait';\r\n\r\n var bookInfo = {\r\n 'hospitalIDValue': '',\r\n 'hospitalName': '',\r\n 'firstAvailableDateTime': '',\r\n 'selectedReason': 'data-selected-reason',\r\n 'hospitalType': '',\r\n 'hospitalTimezone': '',\r\n 'isVersion2': '',\r\n 'isLoggedIn': '',\r\n 'isNewClient': 'null',\r\n 'isPrimaryHospital': '',\r\n 'petName': 'pet',\r\n 'petSpecies': '',\r\n 'apptTypeId': '',\r\n 'apptTypeText': '',\r\n 'reasonId': '',\r\n 'appointmentReasonDisplayText': '',\r\n 'clientType': '',\r\n 'clientTypeText': '',\r\n 'clientId': '0',\r\n 'nonClientId': '',\r\n 'conditionMessage': '',\r\n 'resourceID': '',\r\n 'settingsIdValue': '',\r\n 'firstAvailableDate': '',\r\n 'appointmentStartDate': '',\r\n 'appointmentEndDate': '',\r\n 'assetBlock': '',\r\n 'assetName': '',\r\n 'assetDefaultUrl': '',\r\n 'petImgURL': '',\r\n 'ServiceIconUrl': '',\r\n 'timeBlock': '',\r\n 'petId': '0',\r\n 'isCareClubMember': '',\r\n 'clientInfo': '',\r\n 'slectedTimeDisplay': '',\r\n 'slectedDateDisplay': '',\r\n 'expirationTime': 10,\r\n 'firstName': '',\r\n 'lastName': '',\r\n 'email': '',\r\n 'phone': '',\r\n 'sendText': 'false',\r\n 'challengeSuccessful': false,\r\n 'challengeSetId': '',\r\n 'addressChallengeId': '',\r\n 'addressChallengeAnswer': '',\r\n 'petNameChallengeId': '',\r\n 'petNameChallengeAnswer': '',\r\n 'draftAppointmentId': '',\r\n 'petAppointmentId': '',\r\n 'utm_campaign': '',\r\n 'utm_content': '',\r\n 'utm_medium': '',\r\n 'utm_source': '',\r\n 'utm_term': '',\r\n 'gclid': '',\r\n 'wellnessType': [],\r\n 'ShowFirstAvailableAppt': false,\r\n 'AppointmentTypeId': null,\r\n 'AppointmentReasonId': null,\r\n }\r\n\r\n function cacheUI() {\r\n ui.$entry = $('section[data-step=\"entry\"]');\r\n ui.$errorStep = $('section[data-step=\"error\"]');\r\n ui.$notimeslots = $('section[data-step=\"notimeslots\"]');\r\n ui.$selectPet = $('section[data-step=\"select-pet\"]');\r\n ui.$selectExistPet = $('section[data-step=\"select-exist-pet\"]');\r\n ui.$apptType = $('section[data-step=\"appt-reason\"]');\r\n ui.$verifyStep = $('section[data-step=\"verify-step\"]');\r\n ui.$noFoundUser = $('section[data-step=\"no-found-user\"]');\r\n ui.$incorrect = $('section[data-step=\"incorrect-answers\"]');\r\n ui.$apptReason = $('section[data-step=\"appt-issue\"]');\r\n ui.$confirmAnony = $('section[data-step=\"confirm-anony\"]');\r\n ui.$wellness = $('section[data-step=\"well-service\"]');\r\n ui.$wellnessResaon = $('section[data-step=\"wellness-issue\"]');\r\n ui.$confirmation = $('section[data-step=\"book-confirm\"]');\r\n ui.$progressBar = $('div[data-progress=\"bar\"]');\r\n ui.$sections = $('.js-seciton-step');\r\n ui.$backBtn = $('button[data-btn=\"back\"]');\r\n ui.$abandonLink = $('.js-abandon-link');\r\n ui.$loginLink = $('.js-login-link');\r\n ui.loader = $('.js-loader');\r\n ui.timeloader = $('.js-time-loader');\r\n ui.firstAvaItem = $('.fst-ava__details');\r\n ui.dateList = $('.js-date-list');\r\n ui.vetSlotList = $('.js-vet-slot-list');\r\n ui.confirmationBtn = $('.js-client-info-form');\r\n\r\n //user story: 32701 [FAH - OAB] Hospital Locator + First Available Appointments\r\n ui.$firstAvailableDate = $('[data-label=\"firstAvailableDate\"]');\r\n ui.$firstAvailableTime = $('[data-label=\"firstAvailableTime\"]');\r\n ui.$selectedReason = $('[data-label=\"selectedReasonVCA\"]');\r\n ui.$firstAvailableSlotContainer = $('.oab__first-available-appointment');\r\n ui.$firstAvailableAppointmentDetails = $('.first-avail-appointment-details');\r\n ui.$appointmentReasonlabel = $('[data-label=\"appointmentReasonLabel\"]');\r\n ui.$confirmAppointmentLabel = $('[data-label=\"confirmAppointmentLabel\"]');\r\n ui.$sickVisitButtonLabel = $('[data-label=\"sickVisitButtonLabel\"]');\r\n ui.$sickVisitButtonHeading = $('[data-label=\"sickVisitButtonHeading\"]');\r\n }\r\n\r\n function init() {\r\n if ($('.oab__wrapper').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n initOABForm();\r\n removeLocalStorage();\r\n\r\n bindSelectPetClick();\r\n bindSeclectExistPetClick();\r\n bindSeclectPetContinueClick();\r\n bindOtherPetClick();\r\n bindSeclectConditionClick();\r\n bindclientTypeClick();\r\n bindAddNewPetBtnClick();\r\n bindTypeStepClick();\r\n bindReasonStepClick();\r\n bindReasonModalClick();\r\n bindBackBtnClick();\r\n bindWellnessBtnClick();\r\n bindScrollLoadClick();\r\n bindSeeMoreTimesClick();\r\n bindBookTimeBtnClick();\r\n bindClientInfoFormClick();\r\n bindWellnessContinueClick();\r\n bindVerifyUserClick();\r\n changeDateClick();\r\n\r\n closeListbox();\r\n\r\n // on change\r\n bindfieldUpdate();\r\n bindDateChange();\r\n\r\n abandonDataLayerPush();\r\n showLoader();\r\n }\r\n\r\n function removeLocalStorage() {\r\n let urlParamsTyfaa = new URL(window.location);\r\n const hasTyfaa = urlParamsTyfaa.searchParams.has('tyFaa');\r\n let expiryData = localStorage.getItem('expiry');\r\n if (expiryData && hasTyfaa) {\r\n let currentTime = new Date().getTime();\r\n if (currentTime > expiryData) {\r\n localStorage.removeItem('NcaUserDetails');\r\n localStorage.removeItem('expiry');\r\n }\r\n } else {\r\n localStorage.removeItem('NcaUserDetails');\r\n localStorage.removeItem('expiry');\r\n }\r\n }\r\n\r\n async function initOABForm() {\r\n\r\n bookInfo.hospitalIDValue = ui.$entry.attr('data-attr-hospId');\r\n bookInfo.hospitalName = ui.$entry.attr('data-attr-hospName');\r\n bookInfo.hospitalType = ui.$entry.attr('data-attr-hospType');\r\n bookInfo.settingsIdValue = ui.$entry.attr('data-attr-dsid');\r\n\r\n bookInfo.AppointmentTypeId = ui.$firstAvailableSlotContainer.attr('data-appointment-id');\r\n bookInfo.AppointmentReasonId = ui.$firstAvailableSlotContainer.attr('data-reason-id');\r\n bookInfo.ShowFirstAvailableAppt = ui.$firstAvailableSlotContainer.attr('data-show-available-appt');\r\n bookInfo.firstAvailableDateTime = ui.$firstAvailableSlotContainer.attr('data-available-date'); \r\n bookInfo.selectedReason = ui.$firstAvailableSlotContainer.attr('data-selected-reason');\r\n bookInfo.SelectedEndTime = ui.$firstAvailableSlotContainer.attr('data-available-enddate');\r\n bookInfo.selectedResourceId = ui.$firstAvailableSlotContainer.attr('data-resource-id');\r\n \r\n if (window.location.href.match(/\\?./)) {\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n\r\n for (const [key, value] of urlParams.entries()) {\r\n bookInfo[key] = value;\r\n\r\n if (key == 'returnUrl' && -1 === value.toLowerCase().indexOf(\"javascript\") && -1 === value.toLowerCase().indexOf(\"script\")) {\r\n ui.$abandonLink.attr(\"href\", value);\r\n }\r\n }\r\n }\r\n\r\n let urlParamsPet = new URL(window.location);\r\n const hasPetId = urlParamsPet.searchParams.has('petId');\r\n let getPetId = '';\r\n if(hasPetId) {\r\n getPetId = urlParamsPet.searchParams.get('petId');\r\n }\r\n\r\n var params = { hospitalId: bookInfo.hospitalIDValue, settingsId: bookInfo.settingsIdValue, petId: getPetId };\r\n\r\n const { success, data, error } = await settings.query(params);\r\n if (!success) {\r\n console.log('failed', error);\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n $('.js-error-message').text(error);\r\n hideLoader();\r\n return;\r\n }\r\n let response = data\r\n\r\n bookInfo.isVersion2 = response.IsDigitalApptEnabled;\r\n bookInfo.isLoggedIn = response.IsLoggedIn;\r\n bookInfo.isPrimaryHospital = response.IsPrimaryHospital;\r\n bookInfo.ServiceIconUrl = response.ServicesIconUrl;\r\n bookInfo.assetDefaultUrl = response.DefaultResourcePhoto;\r\n bookInfo.hospitalTimezone = response.HospitalTimezone;\r\n let petTypes = response.PetSpeciesOptions;\r\n let petApptType = response.AppointmentTypeOptions;\r\n let petApptReason = response.AppointmentReasonOptions;\r\n let clientTypes = response.ClientTypeOptions;\r\n //const careClubBookFF = response.CareClubBookFF\r\n // user story: 32701 [FAH - OAB] Hospital Locator + First Available Appointments\r\n // ShowFirstAvailableAppt - feature flg\r\n if (bookInfo.ShowFirstAvailableAppt == \"true\") {\r\n ui.$firstAvailableAppointmentDetails.removeClass('hidden');\r\n $('.oab__client-info__edit-btn').addClass('hidden');\r\n ui.$appointmentReasonlabel.text('Add reasons to appointment booking for pet');\r\n ui.$confirmAppointmentLabel.text('Confirm your appointment date and time');\r\n // check time and date flow\r\n let displayDate = new Date(bookInfo.firstAvailableDateTime).toLocaleDateString('en-US')\r\n let displayTime = new Date(bookInfo.firstAvailableDateTime).toLocaleString('en-us', { hour: 'numeric', minute: 'numeric', timeZone: bookInfo.hospitalTimezone });\r\n ui.$firstAvailableDate.text(displayDate);\r\n ui.$firstAvailableTime.text(displayTime);\r\n // change substring into split condition\r\n bookInfo.appointmentReasonDisplayText = bookInfo.selectedReason.substring(bookInfo.selectedReason.indexOf(\"/\") + 1);\r\n ui.$sickVisitButtonLabel.text('TELL US MORE');\r\n ui.$sickVisitButtonHeading.text(\"Please describe what's happening\")\r\n } else {\r\n ui.$appointmentReasonlabel.text('Please include additional details or reason for your visit');\r\n ui.$confirmAppointmentLabel.text('Select an appointment date and time');\r\n ui.$sickVisitButtonLabel.text('APPOINTMENT TYPE');\r\n ui.$sickVisitButtonHeading.text('Please select an appointment type.')\r\n }\r\n \r\n if (bookInfo.isLoggedIn) {\r\n let existPet = response.Client.Pets;\r\n bookInfo.clientInfo = response.Client;\r\n bookInfo.clientId = response.Client.ClientId;\r\n ui.$loginLink.addClass('hidden');\r\n\r\n //create existing pet buttons\r\n let existPetBody = ui.$selectExistPet.find(\".oab__form__body\");\r\n createEl.createExistPetBtns(existPet, existPetBody);\r\n }\r\n\r\n // createClientTypeBtns(clientTypes);\r\n let entrytBody = ui.$entry.find(\".oab__form__body\");\r\n createEl.createClientTypeBtns(clientTypes, entrytBody);\r\n\r\n //createPetTypeBtns(petTypes);\r\n let petTypetBody = ui.$selectPet.find(\".oab__form__body\");\r\n let othersList = ui.$selectPet.find(\".js-vca-dropdown-list\");\r\n createEl.createPetTypeBtns(petTypes, petTypetBody, othersList);\r\n\r\n //createApptTypeBtns(petApptType);\r\n let apptTypetBody = ui.$apptType.find(\".oab__form__body\");\r\n createEl.createApptTypeBtns(petApptType, apptTypetBody);\r\n\r\n // createApptReasonBtns(petApptReason);\r\n let reasonTypetBody = ui.$apptReason.find(\".oab__form__body\");\r\n createEl.createApptReasonBtns(petApptReason, reasonTypetBody);\r\n\r\n let isRecommendService = (bookInfo.serviceId && bookInfo.serviceId != '') || (bookInfo.serviceName && bookInfo.serviceName != '');\r\n\r\n if (bookInfo.ShowFirstAvailableAppt == \"true\") {\r\n bookInfo.reasonId = bookInfo.AppointmentReasonId;\r\n bookInfo.apptTypeId = bookInfo.AppointmentTypeId;\r\n }\r\n\r\n if (bookInfo.petId != '0' && bookInfo.apptTypeId != '' && bookInfo.reasonId != '' && isRecommendService) {\r\n let getPetUrl = response.Client.Pets.filter(function (pet) {\r\n return pet.Id == bookInfo.petId;\r\n });\r\n let getReasonDisplayName = petApptReason.filter(function (reason) {\r\n return reason.Id == bookInfo.reasonId;\r\n });\r\n bookInfo.petImgURL = getPetUrl[0].PetPhoto;\r\n bookInfo.petName = getPetUrl[0].Name;\r\n bookInfo.appointmentReasonDisplayText = getReasonDisplayName[0].DisplayName;\r\n ui.$progressBar.show();\r\n\r\n if (bookInfo.serviceId && bookInfo.serviceId != '') {\r\n updateProgresBar('wellness-issue');\r\n createWellnessSection(true, false);\r\n } else if (bookInfo.serviceName && bookInfo.serviceName != '') {\r\n var targetValue = 'wellness-issue';\r\n $('section[data-step=\"' + targetValue + '\"').find('.js-conditionmessage').val(bookInfo.serviceName);\r\n $('section[data-step=\"' + targetValue + '\"').find('.js-conditionmessage').trigger('keyup');\r\n $('section[data-step=\"' + targetValue + '\"').find('.js-select-btn-condition').removeClass('disabled');\r\n createWellnessSection(false, true);\r\n }\r\n }\r\n else if (bookInfo.isVersion2) {\r\n ui.$entry.show();\r\n updateProgresBar(\"entry\")\r\n }\r\n else if (bookInfo.isLoggedIn) {\r\n ui.$selectExistPet.show();\r\n ui.$selectExistPet.find('button[data-btn=\"back\"]').hide();\r\n ui.$progressBar.show();\r\n updateProgresBar('select-exist-pet');\r\n }\r\n else {\r\n ui.$selectPet.show();\r\n ui.$selectPet.find('button[data-btn=\"back\"]').hide();\r\n ui.$progressBar.show();\r\n updateProgresBar('select-pet');\r\n }\r\n\r\n let urlParams = new URL(window.location);\r\n let hosBannerURL = urlParams.searchParams.has('hosBan');\r\n if(hosBannerURL && bookInfo.isLoggedIn) {\r\n ui.$entry.hide();\r\n ui.$selectExistPet.show();\r\n ui.$selectExistPet.find('[data-btn=\"back\"]').remove();\r\n ui.$selectExistPet.find('.js-selct-pet-backbtn-wrapper').append(ui.$entry.find('[data-btn=\"back\"]'));\r\n bookInfo.isNewClient = true;\r\n }\r\n\r\n //User Story 29289: [CCDE] Intelligent Online Booking Integration from CCDE Enrollment Confirmation\r\n if (response?.oabCcdeRequest) {\r\n ui.$entry.hide();\r\n ui.$apptType.show();\r\n ui.$apptType.find('.justify-content-between').removeClass('justify-content-between').addClass('justify-content-end');\r\n ui.$apptType.find('[data-btn=\"back\"]').addClass('hidden');\r\n const userInfo = response.oabCcdeRequest;\r\n $('.oab__client-info').find('#fname').val(userInfo.FirstName);\r\n $('.oab__client-info').find('#lname').val(userInfo.LastName);\r\n $('.oab__client-info').find('#email').val(userInfo.Email);\r\n $('.oab__client-info').find('#phone').val(userInfo.PhoneNumber);\r\n bookInfo.petId = userInfo.PetId;\r\n bookInfo.petName = userInfo.PetName;\r\n bookInfo.petSpecies = userInfo.PetSpecies;\r\n const speciesImg = petTypes.find((x) => {\r\n return x.SpeciesId == userInfo.PetSpecies\r\n })\r\n bookInfo.petImgURL = speciesImg?.IconBaseUrl;\r\n replacePetName(bookInfo.petName);\r\n ui.$confirmAnony.find('[data-region=\"userInformationCcde\"]').html('Please verify the information below to confirm appointment')\r\n }\r\n\r\n hideLoader();\r\n\r\n window.VCA.oabDatalayer.datalayerPushPageLoad(bookInfo);\r\n };\r\n\r\n /**\r\n * @method replacePetName\r\n * @params petName - dog or cat name\r\n * @description to update the payment details for the online order history\r\n */\r\n function replacePetName(petName) {\r\n const newPetName = petName;\r\n let petNameDisplay = '';\r\n if (newPetName.length > 37) {\r\n petNameDisplay = 'your pet';\r\n } else {\r\n petNameDisplay = newPetName;\r\n }\r\n\r\n $('.js-pet-name').each(function () {\r\n const text = $(this).text();\r\n $(this).text(text.replace('pet', petNameDisplay));\r\n })\r\n }\r\n\r\n function initdateTimeApptTabs() {\r\n initFirstAvailable();\r\n setUpTabListener();\r\n };\r\n\r\n function setUpTabListener() {\r\n $('a[data-toggle=\"tab\"]').on('show.bs.tab', function (e) {\r\n if (!$.trim(ui.dateList.html()).length) {\r\n initdateDateTimeApptTab();\r\n }\r\n else {\r\n return;\r\n }\r\n });\r\n }\r\n\r\n function changeDateClick() {\r\n $('.js-seciton-step').on('click', '.js-update-date', function (e) {\r\n $('.js-fisrt-tab-btn').trigger('click');\r\n ui.dateList.empty();\r\n ui.vetSlotList.empty();\r\n ui.firstAvaItem.find('.asset-block').remove();\r\n updateSeciton('appt-time');\r\n initFirstAvailable();\r\n updateProgresBar('appt-time');\r\n });\r\n }\r\n\r\n async function initFirstAvailable() {\r\n showTimeLoader();\r\n\r\n //32701\r\n if (bookInfo.ShowFirstAvailableAppt == \"true\") {\r\n todaysDate = bookInfo.firstAvailableDateTime;\r\n }\r\n\r\n if (bookInfo.SelectedEndTime == \"\") {\r\n bookInfo.SelectedEndTime = todaysDate\r\n }\r\n \r\n var params = { hospitalId: bookInfo.hospitalIDValue, IsV2: bookInfo.isVersion2, ReasonId: bookInfo.reasonId, startDate: todaysDate, AppointmentTypeId: bookInfo.apptTypeId, IsNewClient: bookInfo.isNewClient, selectedDate: todaysDate + \"_\" + bookInfo.SelectedEndTime, firstAvailFlag: bookInfo.ShowFirstAvailableAppt, resourceId: bookInfo.selectedResourceId };\r\n\r\n const { success, data, error } = await firstAvailable.query(params);\r\n if (data == null || Object.keys(data).length === 0) {\r\n ui.$sections.hide();\r\n updateSeciton('notimeslots');\r\n hideTimeLoader();\r\n return;\r\n }\r\n\r\n if (!success) {\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n $('.js-error-message').text(error);\r\n hideTimeLoader();\r\n return;\r\n }\r\n\r\n let firstdata = data;\r\n\r\n updateFirstAvailableSlot(hideTimeLoader, firstdata);\r\n }\r\n\r\n function updateFirstAvailableSlot(callback, firstdata) {\r\n let assetUrl = firstdata.PhotoURI;\r\n if (firstdata.PhotoURI == null) {\r\n assetUrl = bookInfo.assetDefaultUrl;\r\n }\r\n let credentials = firstdata.ResourceCreds;\r\n if (firstdata.ResourceCreds == null) {\r\n credentials = '';\r\n }\r\n bookInfo.firstAvailableDate = firstdata.TimeSlots[0].Start;\r\n currentSelectedDate = bookInfo.firstAvailableDate\r\n\r\n var firstAvaSlot = `${templates.assetBlock({ displayName: firstdata.ResourceName, ResourceCreds: credentials, imgURL: assetUrl, resourceId: firstdata.ResourceId })}`;\r\n ui.firstAvaItem.prepend(firstAvaSlot);\r\n var newDate = displayDate(firstdata.TimeSlots[0].Start);\r\n var tz = bookInfo.hospitalTimezone;\r\n var newtTime = new Date(firstdata.TimeSlots[0].Start).toLocaleString('en-us', { hour: 'numeric', minute: 'numeric', timeZone: bookInfo.hospitalTimezone });\r\n $('.js-fstava-date').text(newDate);\r\n $('.js-fstava-time').html(newtTime);\r\n $('.js-select-appt').attr('data-start-time', firstdata.TimeSlots[0].Start).attr('data-end-time', firstdata.TimeSlots[0].End).attr('data-resource-id', firstdata.ResourceId).attr('data-time-display', newtTime).attr('data-date-display', newDate);\r\n\r\n callback();\r\n }\r\n\r\n function initdateDateTimeApptTab() {\r\n let initVetTabValue = true;\r\n updateDateTimeTab(formatDate(bookInfo.firstAvailableDate), initVetTabValue);\r\n\r\n setTimeout(function () {\r\n $('#bdatepicker').flatpickr({\r\n inline: true,\r\n minDate: bookInfo.firstAvailableDate,\r\n defaultDate: bookInfo.firstAvailableDate,\r\n dateFormat: \"Y-m-d\"\r\n });\r\n\r\n }, 100);\r\n\r\n setTimeout(function () {\r\n $('.flatpickr-prev-month').attr('role', 'button').attr('tabindex', '0');\r\n $('.flatpickr-next-month').attr('role', 'button').attr('tabindex', '0');\r\n $('.flatpickr-day.today').attr('tabindex', '0');\r\n }, 1000);\r\n }\r\n\r\n async function initVeterinarianTab(resourcesItem, startDate) {\r\n\r\n let vetResourcesItem = resourcesItem\r\n\r\n $.each(vetResourcesItem, function (i, resource) {\r\n var vetResourceContainer = $(document.createElement('div')).addClass('vet-selector__item js-vet-appts').attr('id', resource.ResourceId);\r\n var vetTimesContainer = $(document.createElement('div')).addClass('v-asset-times js-grabber js-v-asset-times');\r\n let vetTimeList = '';\r\n let vetnoMatches = 0;\r\n\r\n let firstDateFixed = startDate.replace(/-/g, '\\/').replace(/T.+/, '');\r\n let credentials = resource.ResourceCreds;\r\n if (resource.ResourceCreds == null) {\r\n credentials = '';\r\n }\r\n let assetUrl = resource.PhotoURI;\r\n if (resource.PhotoURI == null) {\r\n assetUrl = bookInfo.assetDefaultUrl;\r\n }\r\n\r\n var assetInfo = `${templates.assetBlock({ displayName: resource.ResourceName, ResourceCreds: credentials, imgURL: assetUrl, resourceId: resource.ResourceId })}`;\r\n vetResourceContainer.append(assetInfo);\r\n\r\n let secondGroupDate = new Date(addDays(firstDateFixed, 1)).toISOString().slice(0, 10);\r\n let thirdGroupDate = new Date(addDays(firstDateFixed, 2)).toISOString().slice(0, 10);\r\n let nextGroupDate = new Date(addDays(firstDateFixed, 3)).toISOString().slice(0, 10);\r\n let firstGroupDateDisplay = new Date(firstDateFixed).toLocaleString('en-us', { weekday: 'long', year: 'numeric', month: 'short', day: 'numeric' });\r\n let secondGroupDateDisplay = new Date(addDays(firstDateFixed, 1)).toLocaleString('en-us', { weekday: 'long', year: 'numeric', month: 'short', day: 'numeric' });\r\n let thirdGroupDateDisplay = new Date(addDays(firstDateFixed, 2)).toLocaleString('en-us', { weekday: 'long', year: 'numeric', month: 'short', day: 'numeric' });\r\n\r\n $.each(resource.TimeSlots, function (i, slotTime) {\r\n\r\n let slotDate = formatDate(slotTime.Start);\r\n if (startDate == slotDate) {\r\n vetnoMatches += 1;\r\n var displayName = new Date(slotTime.Start).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true, timeZone: bookInfo.hospitalTimezone });\r\n var dateDisplay = displayDate(slotTime.Start);\r\n vetTimeList += `${templates.timeBtn({ displayTime: displayName, resourceId: resource.ResourceId, startTime: slotTime.Start, endTime: slotTime.End, displayDate: dateDisplay })}`;\r\n }\r\n });\r\n\r\n if (vetnoMatches < 1) {\r\n vetTimeList = '<span class=\"no-match-text\">No available appointments</span>'\r\n }\r\n let vetItemAsset = `${templates.vetTimeAssets({ displayDate: firstGroupDateDisplay, content: vetTimeList })}`;\r\n vetTimesContainer.append(vetItemAsset);\r\n vetResourceContainer.append(vetTimesContainer);\r\n\r\n vetTimeList = '';\r\n vetnoMatches = 0;\r\n $.each(resource.TimeSlots, function (i, slotTime) {\r\n\r\n let slotDate = formatDate(slotTime.Start);\r\n if (secondGroupDate == slotDate) {\r\n vetnoMatches += 1;\r\n var displayName = new Date(slotTime.Start).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true, timeZone: bookInfo.hospitalTimezone });\r\n var dateDisplay = displayDate(slotTime.Start);\r\n vetTimeList += `${templates.timeBtn({ displayTime: displayName, resourceId: resource.ResourceId, startTime: slotTime.Start, endTime: slotTime.End, displayDate: dateDisplay })}`;\r\n }\r\n });\r\n\r\n if (vetnoMatches < 1) {\r\n vetTimeList = '<span class=\"no-match-text\">No available appointments</span>'\r\n }\r\n let vetItemAssetTwo = `${templates.vetTimeAssets({ displayDate: secondGroupDateDisplay, content: vetTimeList })}`;\r\n vetTimesContainer.append(vetItemAssetTwo);\r\n vetResourceContainer.append(vetTimesContainer);\r\n\r\n vetTimeList = '';\r\n vetnoMatches = 0;\r\n $.each(resource.TimeSlots, function (i, slotTime) {\r\n\r\n let slotDate = formatDate(slotTime.Start);\r\n if (thirdGroupDate == slotDate) {\r\n vetnoMatches += 1;\r\n var displayName = new Date(slotTime.Start).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true, timeZone: bookInfo.hospitalTimezone });\r\n var dateDisplay = displayDate(slotTime.Start);\r\n vetTimeList += `${templates.timeBtn({ displayTime: displayName, resourceId: resource.ResourceId, startTime: slotTime.Start, endTime: slotTime.End, displayDate: dateDisplay })}`;\r\n }\r\n });\r\n\r\n if (vetnoMatches < 1) {\r\n vetTimeList = '<span class=\"no-match-text\">No available appointments</span>'\r\n }\r\n let vetItemAssetThree = `${templates.vetTimeAssets({ displayDate: thirdGroupDateDisplay, content: vetTimeList })}`;\r\n vetTimesContainer.append(vetItemAssetThree);\r\n vetResourceContainer.append(vetTimesContainer);\r\n\r\n let scrollMoreBtn = '<button data-next-start-date=\"' + nextGroupDate + '\" data-resource-id=\"' + resource.ResourceId + '\" class=\"v-asset-times__arrow js-scroll-more-times\"><span class=\"sr-only\">scroll arrow</span><i class=\"fas fa-arrow-right\"></i></button>'\r\n vetResourceContainer.append(scrollMoreBtn);\r\n ui.vetSlotList.append(vetResourceContainer);\r\n\r\n grabber.grabber();\r\n });\r\n }\r\n\r\n async function updateDateTimeTab(startDate, initVetTab) {\r\n\r\n showTimeLoader();\r\n let date = new Date(startDate.replace(/-/g, '\\/').replace(/T.+/, ''));\r\n let month = date.toLocaleString('default', { month: 'short' });\r\n let day = date.toLocaleString('default', { day: 'numeric' });\r\n let dayOfWeek = date.toLocaleString('default', { weekday: 'short' });\r\n let displayDateText = displayDate(startDate);\r\n $('.js-date-time-calendar-labal').text(displayDateText);\r\n $('.js-date-time-month-labal').text(month);\r\n $('.js-date-time-date-labal').text(day);\r\n $('.js-date-time-day-labal').text(dayOfWeek);\r\n\r\n var params = { hospitalId: bookInfo.hospitalIDValue, IsV2: bookInfo.isVersion2, ReasonId: bookInfo.reasonId, startDate: startDate, AppointmentTypeId: bookInfo.apptTypeId, IsNewClient: bookInfo.isNewClient };\r\n\r\n const { success, data, error } = await allResource.query(params);\r\n\r\n if (!success) {\r\n console.log('failed', error);\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n $('.js-error-message').text(error);\r\n hideLoader();\r\n }\r\n let resourcesItem = data;\r\n\r\n resourcesItem.sort(function compare(a, b) {\r\n var dateA = '';\r\n var dateB = '';\r\n if (Object.keys(a.TimeSlots).length > 0) {\r\n dateA = new Date(a.TimeSlots[0].Start);\r\n }\r\n if (Object.keys(b.TimeSlots).length > 0) {\r\n dateB = new Date(b.TimeSlots[0].Start);\r\n }\r\n var nameA = a.ResourceName;\r\n var nameB = b.ResourceName;\r\n var dataAEmpty = dateA == '';\r\n var dataBEmpty = dateB == '';\r\n if ((!dataAEmpty && (dateA < dateB)) || dataBEmpty) {\r\n return -1;\r\n } else if ((!dataBEmpty && (dateA > dateB)) || dataAEmpty) {\r\n return 1;\r\n } else {\r\n if (nameA < nameB) {\r\n return -1;\r\n } else if (nameA > nameB) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n });\r\n\r\n ui.dateList.empty();\r\n\r\n var notimesContainer = $(document.createElement('div')).addClass('asset-no-times');\r\n\r\n $.each(resourcesItem, function (i, resource) {\r\n\r\n var resourceContainer = $(document.createElement('div')).addClass('asset-ava');\r\n var timesContainer = $(document.createElement('div')).addClass('asset-times');\r\n let timeList = '';\r\n let matchCount = 0;\r\n let noMatches = true;\r\n let credentials = resource.ResourceCreds;\r\n if (resource.ResourceCreds == null) {\r\n credentials = '';\r\n }\r\n let assetUrl = resource.PhotoURI;\r\n if (resource.PhotoURI == null) {\r\n assetUrl = bookInfo.assetDefaultUrl;\r\n }\r\n\r\n var assetInfo = `${templates.assetBlock({ displayName: resource.ResourceName, ResourceCreds: credentials, imgURL: assetUrl, resourceId: resource.ResourceId })}`;\r\n resourceContainer.append(assetInfo);\r\n\r\n $.each(resource.TimeSlots, function (i, slotTime) {\r\n\r\n let slotDate = formatDate(slotTime.Start);\r\n\r\n if (startDate == slotDate) {\r\n noMatches = false;\r\n matchCount += 1;\r\n\r\n var displayName = new Date(slotTime.Start).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true, timeZone: bookInfo.hospitalTimezone });\r\n var dateDisplay = displayDate(slotTime.Start);\r\n timeList += `${templates.timeBtn({ displayTime: displayName, resourceId: resource.ResourceId, startTime: slotTime.Start, endTime: slotTime.End, displayDate: dateDisplay })}`;\r\n }\r\n });\r\n\r\n if (noMatches) {\r\n timeList = $(document.createElement('div')).addClass('js-no-matches no-matches-text').text('There are no times available on this date.');\r\n timesContainer.append(timeList);\r\n resourceContainer.append(timesContainer);\r\n notimesContainer.append(resourceContainer);\r\n }\r\n else {\r\n timesContainer.append(timeList);\r\n resourceContainer.append(timesContainer);\r\n if (matchCount > 6) {\r\n resourceContainer.append('<a href=\"#\" class=\"fancy js-show-more-appt-time asset-times__more-btn\">See more available times</a>')\r\n }\r\n\r\n ui.dateList.append(resourceContainer);\r\n }\r\n });\r\n\r\n ui.dateList.append(notimesContainer);\r\n\r\n if (initVetTab) {\r\n initVeterinarianTab(resourcesItem, startDate)\r\n }\r\n\r\n hideTimeLoader();\r\n }\r\n\r\n async function updateResourceSlots(startDate, resourceId) {\r\n\r\n showTimeLoader();\r\n\r\n var params = { hospitalId: bookInfo.hospitalIDValue, IsV2: bookInfo.isVersion2, ReasonId: bookInfo.reasonId, startDate: startDate, AppointmentTypeId: bookInfo.apptTypeId, ResourceID: resourceId, IsNewClient: bookInfo.isNewClient };\r\n const { success, data, error } = await slotsByResourceID.query(params);\r\n\r\n if (!success) {\r\n console.log('failed', error);\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n $('.js-error-message').text(error);\r\n hideLoader();\r\n }\r\n let vetResourcesItem = data;\r\n\r\n var resourceToUpdate = $('#' + resourceId).find('.js-v-asset-times');;\r\n\r\n let vetTimeList = '';\r\n let vetnoMatches = 0;\r\n\r\n let firstDateFixed = startDate.replace(/-/g, '\\/').replace(/T.+/, '');\r\n\r\n let secondGroupDate = new Date(addDays(firstDateFixed, 1)).toISOString().slice(0, 10);\r\n let thirdGroupDate = new Date(addDays(firstDateFixed, 2)).toISOString().slice(0, 10);\r\n let nextGroupDate = new Date(addDays(firstDateFixed, 3)).toISOString().slice(0, 10);\r\n let firstGroupDateDisplay = new Date(firstDateFixed).toLocaleString('en-us', { weekday: 'long', year: 'numeric', month: 'short', day: 'numeric' });\r\n let secondGroupDateDisplay = new Date(addDays(firstDateFixed, 1)).toLocaleString('en-us', { weekday: 'long', year: 'numeric', month: 'short', day: 'numeric' });\r\n let thirdGroupDateDisplay = new Date(addDays(firstDateFixed, 2)).toLocaleString('en-us', { weekday: 'long', year: 'numeric', month: 'short', day: 'numeric' });\r\n\r\n $.each(vetResourcesItem.TimeSlots, function (i, slotTime) {\r\n\r\n let slotDate = formatDate(slotTime.Start);\r\n if (startDate == slotDate) {\r\n vetnoMatches += 1;\r\n var displayName = new Date(slotTime.Start).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true, timeZone: bookInfo.hospitalTimezone });\r\n var dateDisplay = displayDate(slotTime.Start);\r\n vetTimeList += `${templates.timeBtn({ displayTime: displayName, resourceId: vetResourcesItem.ResourceId, startTime: slotTime.Start, endTime: slotTime.End, displayDate: dateDisplay })}`;\r\n }\r\n });\r\n\r\n if (vetnoMatches < 1) {\r\n vetTimeList = '<span class=\"no-match-text\">No available appointments</span>'\r\n }\r\n let vetItemAsset = `${templates.vetTimeAssets({ displayDate: firstGroupDateDisplay, content: vetTimeList })}`;\r\n resourceToUpdate.append(vetItemAsset);\r\n\r\n vetTimeList = '';\r\n vetnoMatches = 0;\r\n $.each(vetResourcesItem.TimeSlots, function (i, slotTime) {\r\n\r\n let slotDate = formatDate(slotTime.Start);\r\n if (secondGroupDate == slotDate) {\r\n vetnoMatches += 1;\r\n var displayName = new Date(slotTime.Start).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true, timeZone: bookInfo.hospitalTimezone });\r\n var dateDisplay = displayDate(slotTime.Start);\r\n vetTimeList += `${templates.timeBtn({ displayTime: displayName, resourceId: vetResourcesItem.ResourceId, startTime: slotTime.Start, endTime: slotTime.End, displayDate: dateDisplay })}`;\r\n }\r\n });\r\n\r\n if (vetnoMatches < 1) {\r\n vetTimeList = '<span class=\"no-match-text\">No available appointments</span>'\r\n }\r\n let vetItemAssetTwo = `${templates.vetTimeAssets({ displayDate: secondGroupDateDisplay, content: vetTimeList })}`;\r\n resourceToUpdate.append(vetItemAssetTwo);\r\n\r\n vetTimeList = '';\r\n vetnoMatches = 0;\r\n $.each(vetResourcesItem.TimeSlots, function (i, slotTime) {\r\n\r\n let slotDate = formatDate(slotTime.Start);\r\n if (thirdGroupDate == slotDate) {\r\n vetnoMatches += 1;\r\n var displayName = new Date(slotTime.Start).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true, timeZone: bookInfo.hospitalTimezone });\r\n var dateDisplay = displayDate(slotTime.Start);\r\n vetTimeList += `${templates.timeBtn({ displayTime: displayName, resourceId: vetResourcesItem.ResourceId, startTime: slotTime.Start, endTime: slotTime.End, displayDate: dateDisplay })}`;\r\n }\r\n });\r\n\r\n if (vetnoMatches < 1) {\r\n vetTimeList = '<span class=\"no-match-text\">No available appointments</span>'\r\n }\r\n let vetItemAssetThree = `${templates.vetTimeAssets({ displayDate: thirdGroupDateDisplay, content: vetTimeList })}`;\r\n resourceToUpdate.append(vetItemAssetThree);\r\n\r\n $('button.js-scroll-more-times[data-resource-id=\"' + resourceId + '\"]').attr('data-next-start-date', nextGroupDate);\r\n grabber.grabber();\r\n\r\n hideTimeLoader();\r\n };\r\n\r\n async function createWellnessSection(populateWellness, showNextStep) {\r\n\r\n $('.js-wellness-section-due button').remove();\r\n $('.js-wellness-section-ava button').remove();\r\n\r\n var params = { hospitalId: bookInfo.hospitalIDValue, clientId: bookInfo.clientId, patientId: bookInfo.petId, reasonId: bookInfo.apptTypeId };\r\n\r\n const { success, data, error } = await wellness.query(params);\r\n if (!success) {\r\n console.log('failed', error);\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n $('.js-error-message').text(error);\r\n hideLoader();\r\n }\r\n if (data == '') {\r\n console.log(\"no data found\");\r\n var targetValue = 'wellness-issue';\r\n let backStepValue = 'appt-issue';\r\n updateSeciton(targetValue);\r\n updateBackBtn(targetValue, backStepValue);\r\n } else {\r\n let wellnessResponse = data;\r\n let wellnesstBody = ui.$wellness.find(\".oab__form__body\");\r\n createEl.createWellnessBtns(wellnessResponse, wellnesstBody, bookInfo.isCareClubMember, bookInfo.ServiceIconUrl);\r\n var targetValue = 'wellness-issue';\r\n let backStepValue = 'well-service';\r\n updateBackBtn(targetValue, backStepValue);\r\n ui.$sections.hide();\r\n\r\n if (showNextStep) {\r\n ui.$wellnessResaon.show();\r\n } else {\r\n ui.$wellness.show();\r\n }\r\n\r\n if (populateWellness) {\r\n let referred = $('.js-btn-wellness[data-id=\"' + bookInfo.serviceId + '\"]')\r\n referred.addClass('selected');\r\n referred.parent().find('.wellness-section__title').after(referred);\r\n }\r\n hideLoader();\r\n window.VCA.oabDatalayer.datalayerPushStepChange(bookInfo, targetValue, backStepValue);\r\n }\r\n }\r\n\r\n async function sendDraftAppointment() {\r\n\r\n let clientID = bookInfo.clientId;\r\n let patientID = bookInfo.petId;\r\n if (!bookInfo.isPrimaryHospital && bookInfo.isLoggedIn) {\r\n clientID = 0;\r\n patientID = 0;\r\n }\r\n\r\n var params = {\r\n hospitalId: bookInfo.hospitalIDValue,\r\n clientId: clientID,\r\n patientId: patientID,\r\n reasonId: bookInfo.reasonId,\r\n appointmentTypeId: bookInfo.apptTypeId,\r\n startDate: bookInfo.appointmentStartDate,\r\n endDate: bookInfo.appointmentEndDate,\r\n resourceId: bookInfo.resourceID,\r\n IsV2: bookInfo.isVersion2,\r\n appointmentNotes: bookInfo.conditionMessage\r\n };\r\n\r\n let displayDate = new Date(bookInfo.appointmentStartDate).toLocaleDateString('en-US')\r\n let displayTime = new Date(bookInfo.appointmentStartDate).toLocaleString('en-us', { hour: 'numeric', minute: 'numeric', timeZone: bookInfo.hospitalTimezone});\r\n ui.$firstAvailableDate.text(displayDate);\r\n ui.$firstAvailableTime.text(displayTime);\r\n\r\n const { success, data, error } = await bookDraft.query(params);\r\n if (!success || data.DraftAppointmentId == null) {\r\n console.log('failed', error);\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n $('.js-error-message').text(data.GenericServiceErrorMessage);\r\n hideLoader();\r\n return;\r\n } else {\r\n bookInfo.draftAppointmentId = data.DraftAppointmentId;\r\n bookInfo.petAppointmentId = data.PetAppointmentId;\r\n bookInfo.appointmentStartDate = data.StartTime;\r\n bookInfo.appointmentEndDate = data.EndTime;\r\n createConfirmStepInfo();\r\n }\r\n }\r\n\r\n async function initGetChallenge() {\r\n\r\n var params = { hospitalId: bookInfo.hospitalIDValue, firstName: bookInfo.firstName, lastName: bookInfo.lastName, email: bookInfo.email, phone: bookInfo.phone };\r\n const { success, data, error } = await getChallenge.query(params);\r\n if (!success) {\r\n console.log('failed', error);\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n hideLoader();\r\n $('.js-error-message').text(error);\r\n return;\r\n }\r\n let response = data\r\n if (response.Success && response.ChallengeSet != null && response.ChallengeSet.ChallengeResponse != null && response.ChallengeSet.ChallengeResponse.petNameChallenge != null) {\r\n bookInfo.nonClientId = response.ChallengeSet.ClientId;\r\n bookInfo.challengeSetId = response.ChallengeSet.ChallengeResponse.id;\r\n bookInfo.petNameChallengeId = response.ChallengeSet.ChallengeResponse.petNameChallenge.id;\r\n\r\n if (response.ChallengeSet.ChallengeResponse.addressChallenge != null) {\r\n bookInfo.addressChallengeId = response.ChallengeSet.ChallengeResponse.addressChallenge.id;\r\n let nog = response.ChallengeSet.ChallengeResponse.addressChallenge.gapLength;\r\n let n = response.ChallengeSet.ChallengeResponse.addressChallenge.gapLength;\r\n $('.js-verify-address-inputs input[name=\"missingAddress\"]').attr('maxLength', n);\r\n let spaces = new Array(++n).join('*');\r\n let address = response.ChallengeSet.ChallengeResponse.addressChallenge.preGap + spaces + response.ChallengeSet.ChallengeResponse.addressChallenge.postGap;\r\n $('.js-verify-address').text(address);\r\n } else {\r\n $('.js-verify-address-inputs').hide();\r\n $('.js-verify-address-inputs input[name=\"missingAddress\"]').val('null')\r\n }\r\n\r\n let verifyBody = ui.$verifyStep.find(\".js-pet-selector-box\");\r\n verifyBody.empty();\r\n createEl.createVerifyInputs(response.ChallengeSet.ChallengeResponse.petNameChallenge.choices, verifyBody);\r\n\r\n ui.$verifyStep.on('keyup change', 'input', function (e) {\r\n if ($('.js-verify-address-inputs input[name=\"missingAddress\"]').val().length != '' && $('.js-pet-selector-box input').is(':checked')) {\r\n $('.js-verify-user').removeClass('disabled');\r\n } else {\r\n $('.js-verify-user').addClass('disabled');\r\n }\r\n });\r\n ui.$sections.hide();\r\n ui.$verifyStep.show();\r\n hideLoader();\r\n updateProgresBar('verify-step');\r\n } else {\r\n /* ui.$sections.hide();\r\n ui.$noFoundUser.show();\r\n hideLoader(); */\r\n sendBookConfirmation();\r\n }\r\n }\r\n\r\n async function checkConfirmChallenge() {\r\n var params = {\r\n hospitalId: bookInfo.hospitalIDValue,\r\n clientId: bookInfo.nonClientId,\r\n challengeSetId: bookInfo.challengeSetId,\r\n addressChallengeId: bookInfo.addressChallengeId,\r\n addressChallengeAnswer: bookInfo.addressChallengeAnswer,\r\n petNameChallengeId: bookInfo.petNameChallengeId,\r\n petNameChallengeAnswer: bookInfo.petNameChallengeAnswer\r\n };\r\n\r\n const { success, data, error } = await confirmChallenge.query(params);\r\n if (!success) {\r\n console.log('failed', error);\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n $('.js-error-message').text(error);\r\n hideLoader();\r\n return;\r\n }\r\n\r\n let response = data;\r\n if (!response.Success) {\r\n ui.$sections.hide();\r\n ui.$noFoundUser.show();\r\n hideLoader();\r\n } else if (response.Message == 'Incorrect answers.') {\r\n ui.$sections.hide();\r\n ui.$incorrect.show();\r\n hideLoader();\r\n bookInfo.clientId = '0';\r\n }\r\n else {\r\n bookInfo.challengeSuccessful = true;\r\n bookInfo.clientId = response.ChallengeSet.ClientId;\r\n sendBookConfirmation();\r\n }\r\n console.log('data', data);\r\n }\r\n\r\n async function sendBookConfirmation() {\r\n\r\n let clientID = bookInfo.clientId;\r\n let patientID = bookInfo.petId;\r\n if (!bookInfo.isPrimaryHospital && bookInfo.isLoggedIn) {\r\n if (bookInfo.challengeSuccessful) {\r\n clientID = bookInfo.nonClientId;\r\n } else {\r\n clientID = 0;\r\n }\r\n patientID = 0;\r\n }\r\n\r\n //Reassiging the UI Values\r\n bookInfo.phone = $('#phone').val();\r\n bookInfo.firstName = $('#fname').val();\r\n bookInfo.lastName = $('#lname').val();\r\n bookInfo.email = $('#email').val();\r\n if ($('#sendText').is(\":checked\")) {\r\n bookInfo.sendText = true;\r\n }\r\n\r\n var params = {\r\n draftAppointmentId: bookInfo.draftAppointmentId,\r\n petAppointmentId: bookInfo.petAppointmentId,\r\n hospitalId: bookInfo.hospitalIDValue,\r\n clientId: clientID,\r\n patientId: patientID,\r\n reasonId: bookInfo.reasonId,\r\n appointmentTypeId: bookInfo.apptTypeId,\r\n startDate: bookInfo.appointmentStartDate,\r\n endDate: bookInfo.appointmentEndDate,\r\n resourceId: bookInfo.resourceID,\r\n IsV2: bookInfo.isVersion2,\r\n firstName: bookInfo.firstName,\r\n lastName: bookInfo.lastName,\r\n email: bookInfo.email,\r\n phone: bookInfo.phone,\r\n appointmentNotes: bookInfo.conditionMessage,\r\n isTextOptIn: bookInfo.sendText,\r\n isPrimaryHospital: bookInfo.isPrimaryHospital,\r\n ReferrerUrl: document.referrer,\r\n TrackingUrl: window.location.href,\r\n TrackingMedium: bookInfo.utmMedium,\r\n TrackingSource: bookInfo.utmSource,\r\n TrackingCampaign: bookInfo.utmCampaign,\r\n TrackingTerm: bookInfo.utmTerm,\r\n TrackingContent: bookInfo.utmContent,\r\n GClid: bookInfo.gclid,\r\n petSpecies: bookInfo.petSpecies,\r\n petName: bookInfo.petName\r\n };\r\n\r\n const { success, data, error } = await confirmBook.post(params);\r\n\r\n if (!success || data.IsSuccess == false) {\r\n console.log('failed', error);\r\n ui.$sections.hide();\r\n ui.$errorStep.show();\r\n $('.js-error-message').text(data.InputErrorMessages);\r\n hideLoader();\r\n return;\r\n } else {\r\n buildConfirmationPage(data);\r\n }\r\n }\r\n\r\n function bindDateChange() {\r\n $('.js-seciton-step').on('change', '#bdatepicker', function (e) {\r\n e.preventDefault();\r\n let date = $(this).val();\r\n if (date == '' || date == currentSelectedDate) {\r\n return;\r\n }\r\n currentSelectedDate = date;\r\n updateDateTimeTab(date);\r\n });\r\n }\r\n\r\n function displayDate(date) {\r\n var display = new Date(date).toLocaleString('en-us', { weekday: 'long', year: 'numeric', month: 'short', day: 'numeric' });\r\n\r\n return display;\r\n }\r\n\r\n function formatDate(date) {\r\n var d = new Date(date),\r\n month = '' + (d.getMonth() + 1),\r\n day = '' + d.getDate(),\r\n year = d.getFullYear();\r\n\r\n if (month.length < 2)\r\n month = '0' + month;\r\n if (day.length < 2)\r\n day = '0' + day;\r\n\r\n return [year, month, day].join('-');\r\n }\r\n\r\n function formatCalDate(date) {\r\n var d = new Date(date),\r\n month = '' + (d.getMonth() + 1),\r\n day = '' + d.getDate(),\r\n year = d.getFullYear();\r\n\r\n if (month.length < 2)\r\n month = '0' + month;\r\n if (day.length < 2)\r\n day = '0' + day;\r\n\r\n return [month, day, year].join('-');\r\n }\r\n\r\n function addDays(date, days) {\r\n const newDate = new Date(date);\r\n newDate.setDate(newDate.getDate() + days);\r\n return newDate;\r\n }\r\n\r\n function closeListbox() {\r\n $(document).on(\"mouseup touchend\", function (e) {\r\n var container = $(\".vca-dropdown-select\");\r\n\r\n // If the target of the click isn't the container\r\n if (!container.is(e.target) && container.has(e.target).length === 0) {\r\n let listBox = $('.vca-dropdown-select');\r\n let listButton = listBox.find('.js-btn-selecter');\r\n listBox.find('.js-vca-dropdown-list').addClass('hidden');\r\n listButton.attr(\"aria-expanded\", \"false\");\r\n }\r\n });\r\n }\r\n\r\n function updateSeciton(targetValue) {\r\n ui.$sections.hide();\r\n $('section[data-step=\"' + targetValue + '\"').show();\r\n hideLoader();\r\n updateProgresBar(targetValue);\r\n }\r\n\r\n function updateProgresBar(targetValue) {\r\n var progressValue = $('section[data-step=\"' + targetValue + '\"').attr('data-progress');\r\n if (targetValue === \"select-pet\" || targetValue === \"select-exist-pet\") {\r\n ui.$progressBar.show();\r\n }\r\n $('.progress-bar').css('width', progressValue + '%').attr('aria-valuenow', progressValue);\r\n }\r\n\r\n function updateBackBtn(targetValue, backStepValue) {\r\n $('section[data-step=\"' + targetValue + '\"]').find('button[data-btn=\"back\"]').attr('data-target', backStepValue);\r\n }\r\n\r\n function bindBackBtnClick() {\r\n ui.$backBtn.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n if ($(this).hasClass('btn-reset')) {\r\n $(this).closest('section[data-step]').find('.js-btn-selecter').removeClass('active').show();\r\n $(this).closest('section[data-step]').find('.js-hidden-step').hide();\r\n $(this).closest('section[data-step]').find('.js-shelter-link').show();\r\n $(this).closest('section[data-step]').find('.js-login-link').show();\r\n $(this).removeClass('btn-reset');\r\n if ($(this).hasClass('remove-on-next')) {\r\n $(this).removeClass('remove-on-next');\r\n $(this).hide();\r\n }\r\n return;\r\n }\r\n if ($(this).hasClass('appt-reset')) {\r\n $('.js-fisrt-tab-btn').trigger('click');\r\n ui.dateList.empty();\r\n ui.vetSlotList.empty();\r\n ui.firstAvaItem.find('.asset-block').remove();\r\n }\r\n\r\n var targetValue = $(this).attr('data-target');\r\n updateSeciton(targetValue);\r\n });\r\n }\r\n\r\n function bindSeclectExistPetClick() {\r\n $('.js-seciton-step').on('click', 'button.js-exist-pet-btn', function (e) {\r\n e.preventDefault();\r\n var newPetName = $(this).attr('data-pet-name');\r\n replacePetName(newPetName);\r\n var targetValue = $(this).attr('data-target');\r\n bookInfo.petId = $(this).attr('data-pet-id');\r\n bookInfo.isCareClubMember = $(this).data('careclub');\r\n bookInfo.petSpecies = $(this).data('species');\r\n bookInfo.petImgURL = $(this).find('.js-confirm-img').attr('src');\r\n bookInfo.petName = newPetName;\r\n if (bookInfo.ShowFirstAvailableAppt == 'true') {\r\n if (bookInfo.selectedReason.includes(\"Wellness\")) {\r\n targetValue = 'wellness-issue';\r\n } else {\r\n targetValue = 'appt-issue';\r\n ui.$appointmentReasonlabel.text(\"Please describe what's happening\");\r\n }\r\n $('section[data-step=\"appt-issue\"] div[data-appointmentTypeId=\"' + bookInfo.AppointmentTypeId + '\"').show();\r\n $('section[data-step=\"appt-issue\"] div[data-appointmentTypeId=\"' + bookInfo.AppointmentTypeId + '\"] button[data-id]').hide();\r\n $('section[data-step=\"appt-issue\"] div[data-appointmentTypeId=\"' + bookInfo.AppointmentTypeId + '\"] button[data-id=\"' + bookInfo.AppointmentReasonId + '\"').show().addClass('active');\r\n $('section[data-step]').find('.js-hidden-step').show();\r\n } else {\r\n targetValue = $(this).attr('data-target');\r\n }\r\n\r\n let backStepValue = 'select-exist-pet';\r\n updateBackBtn(targetValue, backStepValue);\r\n updateSeciton(targetValue);\r\n window.VCA.oabDatalayer.datalayerPushStepChange(bookInfo, targetValue, backStepValue);\r\n });\r\n }\r\n\r\n function bindSeclectPetContinueClick() {\r\n $('.js-select-btn-contiune').on('click', function (e) {\r\n e.preventDefault();\r\n let wrap = $(this).closest('.oab__form__body');\r\n let nameValue = wrap.find('.js-required').val();\r\n let nameRegex = /^[a-zA-Z-0-9]{1,100}$/;\r\n //let nameLength = nameValue.replace(/\\s/g, '');\r\n let nameTest = nameRegex.test(nameValue.replace(/\\s/g, ''));\r\n\r\n if (!nameTest) {\r\n wrap.find('.js-required').trigger('focus');\r\n wrap.find('.js-required').addClass('error');\r\n wrap.find('.input-label-wrapper').addClass('error');\r\n return;\r\n }\r\n else {\r\n wrap.find('.js-required').removeClass('error');\r\n wrap.find('.input-label-wrapper').removeClass('error');\r\n }\r\n var newPetName = $('#petName').val();\r\n replacePetName(newPetName);\r\n bookInfo.petName = newPetName;\r\n var targetValue;\r\n //user story: 32701 [FAH - OAB] Hospital Locator + First Available Appointments\r\n if (bookInfo.ShowFirstAvailableAppt == 'true') {\r\n if (bookInfo.selectedReason.includes(\"Wellness\")) {\r\n targetValue = 'wellness-issue';\r\n } else {\r\n targetValue = 'appt-issue';\r\n ui.$appointmentReasonlabel.text(\"Please describe what's happening\");\r\n }\r\n $('section[data-step=\"appt-issue\"] div[data-appointmentTypeId=\"' + bookInfo.AppointmentTypeId + '\"').show();\r\n $('section[data-step=\"appt-issue\"] div[data-appointmentTypeId=\"' + bookInfo.AppointmentTypeId + '\"] button[data-id]').hide();\r\n $('section[data-step=\"appt-issue\"] div[data-appointmentTypeId=\"' + bookInfo.AppointmentTypeId + '\"] button[data-id=\"' + bookInfo.AppointmentReasonId + '\"').show().addClass('active');\r\n $('section[data-step]').find('.js-hidden-step').show();\r\n } else {\r\n ui.$appointmentReasonlabel.text('Please include additional details or reason for your visit');\r\n targetValue = $(this).attr('data-target');\r\n }\r\n let backStepValue = 'select-pet';\r\n updateBackBtn(targetValue, backStepValue);\r\n updateSeciton(targetValue);\r\n\r\n window.VCA.oabDatalayer.datalayerPushStepChange(bookInfo, targetValue, backStepValue);\r\n });\r\n }\r\n\r\n function bindWellnessContinueClick() {\r\n $('.js-seciton-step').on('click', 'button.js-wellness-btn-contiune', function (e) {\r\n e.preventDefault();\r\n\r\n var wellnessTypes = [];\r\n $('.js-wellness-section .selected').each(function () {\r\n wellnessTypes.push($(this).attr('data-type-name'));\r\n });\r\n\r\n wellnessTypes = wellnessTypes.join(', ');\r\n bookInfo.wellnessType = wellnessTypes;\r\n\r\n var targetValue = $(this).attr('data-target');\r\n if (bookInfo.serviceName) {\r\n if (wellnessTypes != '') {\r\n $('section[data-step=\"' + targetValue + '\"').find('.js-conditionmessage').val(bookInfo.serviceName + \", \" + wellnessTypes);\r\n } else {\r\n $('section[data-step=\"' + targetValue + '\"').find('.js-conditionmessage').val(bookInfo.serviceName);\r\n }\r\n } else {\r\n $('section[data-step=\"' + targetValue + '\"').find('.js-conditionmessage').val(wellnessTypes);\r\n }\r\n if (wellnessTypes != '') {\r\n $('section[data-step=\"' + targetValue + '\"').find('.js-conditionmessage').trigger('keyup');\r\n $('section[data-step=\"' + targetValue + '\"').find('.js-select-btn-condition').removeClass('disabled');\r\n }\r\n updateSeciton(targetValue);\r\n window.VCA.oabDatalayer.datalayerPushStepChange(bookInfo, targetValue, 'well-service');\r\n });\r\n }\r\n\r\n function bindBookTimeBtnClick() {\r\n $('.js-seciton-step').on('click', 'button.js-select-appt', function (e) {\r\n e.preventDefault();\r\n ui.$sections.hide();\r\n if (bookInfo.appointmentStartDate === $(this).attr('data-start-time') && bookInfo.resourceID === $(this).attr('data-resource-id')) {\r\n showLoader();\r\n createConfirmStepInfo();\r\n }\r\n else {\r\n bookInfo.appointmentStartDate = $(this).attr('data-start-time');\r\n bookInfo.appointmentEndDate = $(this).attr('data-end-time');\r\n bookInfo.resourceID = $(this).attr('data-resource-id');\r\n bookInfo.slectedDateDisplay = $(this).attr('data-date-display');\r\n bookInfo.slectedTimeDisplay = $(this).attr('data-time-display');\r\n bookInfo.assetBlock = $('div.asset-block[data-resource-id=\"' + bookInfo.resourceID + '\"]').html();\r\n bookInfo.assetName = $('div.asset-block[data-resource-id=\"' + bookInfo.resourceID + '\"] div.asset-block__name').text();\r\n showLoader();\r\n ui.$sections.hide();\r\n window.VCA.oabDatalayer.datalayerPushStepSeven(bookInfo, 'confirm-anony', 'appt-time');\r\n sendDraftAppointment();\r\n }\r\n });\r\n }\r\n\r\n function bindWellnessBtnClick() {\r\n $('.js-seciton-step').on('click', 'button.js-btn-wellness', function (e) {\r\n e.preventDefault();\r\n if ($(this).hasClass('selected')) {\r\n $(this).removeClass('selected');\r\n }\r\n else {\r\n $(this).addClass('selected');\r\n }\r\n });\r\n }\r\n\r\n function createConfirmStepInfo() {\r\n let confirmAnonyBody = ui.$confirmAnony.find(\".js-client-asset-block\");\r\n confirmAnonyBody.empty().append(bookInfo.assetBlock).attr('data-resource-id', bookInfo.resourceID);\r\n ui.$confirmAnony.find(\".js-selected-date\").text(bookInfo.slectedDateDisplay);\r\n ui.$confirmAnony.find(\".js-selected-time\").text(bookInfo.slectedTimeDisplay);\r\n let storedParams = JSON.parse(localStorage.getItem('NcaUserDetails'));\r\n if(storedParams) {\r\n ui.$confirmAnony.find('#fname').val(storedParams.firstName);\r\n ui.$confirmAnony.find('#lname').val(storedParams.lastName);\r\n ui.$confirmAnony.find('#email').val(storedParams.email);\r\n ui.$confirmAnony.find('#phone').val(storedParams.phone);\r\n }\r\n\r\n if (bookInfo.isLoggedIn) {\r\n let primaryEmail = '';\r\n $.each(bookInfo.clientInfo.ClientEmails, function (i, email) {\r\n if (email.IsPrimary) {\r\n primaryEmail = email.Email;\r\n }\r\n });\r\n let primaryPhone = '';\r\n $.each(bookInfo.clientInfo.ClientPhones, function (i, phone) {\r\n if (phone.IsPrimaryContact) {\r\n primaryPhone = phone.PhoneNumber;\r\n }\r\n });\r\n ui.$confirmAnony.find('#fname').val(bookInfo.clientInfo.FirstName);\r\n ui.$confirmAnony.find('#lname').val(bookInfo.clientInfo.LastName);\r\n ui.$confirmAnony.find('#email').val(primaryEmail);\r\n ui.$confirmAnony.find('#phone').val(primaryPhone);\r\n ui.$confirmAnony.find(\".oab__client-info__field-group\").hide();\r\n }\r\n\r\n $('section[data-step=\"confirm-anony\"').show();\r\n $(ui.confirmationBtn).attr('data-time-display', bookInfo.slectedTimeDisplay).attr('data-start-time', bookInfo.timeBlock).attr('data-resource-id', bookInfo.resourceID).attr('data-date-display', bookInfo.slectedDateDisplay);\r\n\r\n hideLoader();\r\n updateProgresBar('confirm-anony');\r\n\r\n $('.js-appt-countdown').html('<span class=\"js-counter\"></span>');\r\n let timer = $('.js-counter');\r\n\r\n counter(timer, bookInfo.expirationTime);\r\n }\r\n\r\n function bindClientInfoFormClick() {\r\n $('.js-seciton-step').on('click', 'button.js-client-info-form', function (e) {\r\n e.preventDefault();\r\n if (!bookInfo.isLoggedIn) {\r\n if (!checkChform()) {\r\n return;\r\n }\r\n }\r\n if (!bookInfo.isLoggedIn || (bookInfo.isLoggedIn && !bookInfo.isPrimaryHospital)) {\r\n showLoader();\r\n initGetChallenge();\r\n } else {\r\n showLoader();\r\n sendBookConfirmation();\r\n }\r\n window.VCA.oabDatalayer.datalayerPushBookAppt(bookInfo, 'verify-step', 'confirm-anony');\r\n });\r\n }\r\n\r\n function tyFaaDataLayer() {\r\n let urlParamsTyfaa = new URL(window.location);\r\n const hasTyfaa = urlParamsTyfaa.searchParams.has('tyFaa');\r\n if(hasTyfaa) {\r\n window.dataLayer.push({\r\n 'event': 'oab-click',\r\n 'oab-location': 'ffe-form',\r\n 'oab-type': 'first-available',\r\n 'hospital-AAU': bookInfo.hospitalIDValue,\r\n 'hospital-name': bookInfo.hospitalName,\r\n 'logged-in-status': bookInfo.isLoggedIn,\r\n 'oab-visit-type': bookInfo.selectedReason,\r\n 'appointmentReasonDisplayText': bookInfo.appointmentReasonDisplayText,\r\n 'appointmentStartDate': bookInfo.appointmentStartDate\r\n });\r\n }\r\n console.log('Feedatalayer',window.dataLayer);\r\n }\r\n\r\n function buildConfirmationPage(data) {\r\n localStorage.removeItem('NcaUserDetails');\r\n ui.$sections.hide();\r\n ui.$confirmation.show();\r\n tyFaaDataLayer();\r\n updateProgresBar('book-confirm');\r\n let assetw = ui.$confirmation.find('.js-asset-wrapper');\r\n assetw.empty().append(bookInfo.assetBlock).attr('data-resource-id', bookInfo.resourceID);\r\n ui.$confirmation.find('.js-confirmation-date').append(bookInfo.slectedDateDisplay);\r\n ui.$confirmation.find('.js-confirmation-time').text(bookInfo.slectedTimeDisplay);\r\n ui.$confirmation.find('.js-confirmation-pet-name').text(bookInfo.petName);\r\n ui.$confirmation.find('.js-confirmation-reason').text(bookInfo.appointmentReasonDisplayText);\r\n ui.$confirmation.find('.js-confirmation-comment').text(bookInfo.conditionMessage);\r\n ui.$confirmation.find('.js-confirm-page-img').attr('src', bookInfo.petImgURL);\r\n ui.$confirmation.find('.js-confirm-page-img').attr('alt', bookInfo.petSpecies);\r\n let startTime = new Date(data.Appointment.AppointmentPatients[0].start).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: false, timeZone: bookInfo.hospitalTimezone });\r\n let endTime = new Date(data.Appointment.AppointmentPatients[0].end).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: false, timeZone: bookInfo.hospitalTimezone });\r\n let objForCalBtn = {\r\n \"event\": {\r\n \"@context\": \"https://schema.org\",\r\n \"@type\": \"Event\",\r\n \"name\": \"Add to Calendar\",\r\n \"description\": \"Add to Calendar\",\r\n \"startDate\": formatCalDate(data.Appointment.AppointmentPatients[0].start),\r\n \"endDate\": formatCalDate(data.Appointment.AppointmentPatients[0].start),\r\n \"startTime\": startTime,\r\n \"endTime\": endTime,\r\n \"location\": \"Location\"\r\n },\r\n \"label\": \"Add to Calendar\",\r\n \"options\": [\r\n \"Apple\",\r\n \"Google\",\r\n \"iCal\",\r\n \"Microsoft365\",\r\n \"Outlook.com\",\r\n \"Yahoo\"\r\n ],\r\n \"timeZone\": \"currentBrowser\",\r\n \"trigger\": \"click\",\r\n \"iCalFileName\": \"Reminder-Event\"\r\n }\r\n var script = document.createElement(\"script\");\r\n script.type = \"application/ld+json\";\r\n script.innerHTML = JSON.stringify(objForCalBtn, null, ' ');\r\n $('.js-add-to-cal').empty().removeClass('atcb_initialized').hide().addClass('atcb');\r\n $('.js-add-to-cal').append(script);\r\n setTimeout(function () {\r\n atcb_init();\r\n }, 100);\r\n\r\n window.VCA.oabDatalayer.datalayerPushOfferSubmit(bookInfo, 'book-confirm', 'book-confirm');\r\n hideLoader();\r\n }\r\n\r\n function checkChform() {\r\n var mailFormat = /^[a-zA-Z0-9_.]+@[a-zA-Z0-9-]+\\.[a-zA-Z]+$/;\r\n var phoneReg = /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/;\r\n var textReg = /^(?=.{2,60}$)[a-zA-Z]+(?:[-'\\s.][a-zA-Z]+)*$/;\r\n \r\n ui.$confirmAnony.find('.input-label-wrapper').removeClass('error');\r\n let valid = true;\r\n \r\n function validateField(selector, regex, emptyMsg, invalidMsg) {\r\n let field = $(selector);\r\n let value = field.val().trim();\r\n let wrapper = field.closest('.input-label-wrapper');\r\n let errorMessage = field.siblings('.error-message');\r\n \r\n if (!regex.test(value)) {\r\n field.addClass('error');\r\n wrapper.addClass('error');\r\n errorMessage.text(value ? invalidMsg : emptyMsg);\r\n valid = false;\r\n } else {\r\n field.removeClass('error');\r\n wrapper.removeClass('error');\r\n errorMessage.text('');\r\n bookInfo[selector.replace('#', '')] = value;\r\n }\r\n }\r\n \r\n validateField('#fname', textReg, 'Please enter first name', 'Name cannot contain special characters or numbers');\r\n validateField('#lname', textReg, 'Please enter last name', 'Name cannot contain special characters or numbers');\r\n validateField('#email', mailFormat, 'Please enter email', 'Please enter a valid email');\r\n validateField('#phone', phoneReg, 'Please enter phone number', 'Please enter a valid phone number');\r\n bookInfo.phone = $('#phone').val();\r\n bookInfo.firstName = $('#fname').val();\r\n bookInfo.lastName = $('#lname').val();\r\n bookInfo.email = $('#email').val();\r\n \r\n bookInfo.sendText = $('#sendText').is(\":checked\");\r\n return valid;\r\n }\r\n\r\n function bindclientTypeClick() {\r\n $('.js-seciton-step').on('click', 'button[data-btn=\"client-type\"]', function (e) {\r\n e.preventDefault();\r\n\r\n let clientTypeId = $(this).attr('data-value');\r\n if (clientTypeId == 0) {\r\n bookInfo.isNewClient = true;\r\n } else if (clientTypeId == 1) {\r\n bookInfo.isNewClient = false;\r\n }\r\n bookInfo.clientTypeText = $(this).text().trim();\r\n if (bookInfo.ShowFirstAvailableAppt == 'true') {\r\n if (bookInfo.selectedReason.includes(\"Wellness\")) {\r\n targetValue = 'wellness-issue';\r\n } else {\r\n targetValue = 'appt-issue';\r\n ui.$appointmentReasonlabel.text(\"Please describe what's happening\");\r\n }\r\n $('section[data-step=\"appt-issue\"] div[data-appointmentTypeId=\"' + bookInfo.AppointmentTypeId + '\"').show();\r\n $('section[data-step=\"appt-issue\"] div[data-appointmentTypeId=\"' + bookInfo.AppointmentTypeId + '\"] button[data-id]').hide();\r\n $('section[data-step=\"appt-issue\"] div[data-appointmentTypeId=\"' + bookInfo.AppointmentTypeId + '\"] button[data-id=\"' + bookInfo.AppointmentReasonId + '\"').show().addClass('active');\r\n $('section[data-step=\"appt-issue\"]').find('.js-hidden-step').show();\r\n }\r\n\r\n if (bookInfo.isLoggedIn) {\r\n ui.$sections.hide();\r\n ui.$selectExistPet.show();\r\n ui.$selectExistPet.find('button[data-btn=\"back\"]').show();\r\n updateProgresBar('select-exist-pet');\r\n\r\n } else {\r\n var targetValue = $(this).attr('data-target');\r\n var targetValue = $(this).attr('data-target');\r\n bookInfo.clientType = $(this).attr('data-value');\r\n updateSeciton(targetValue);\r\n }\r\n window.VCA.oabDatalayer.datalayerPushStepChange(bookInfo, 'entry', 'entry');\r\n });\r\n }\r\n\r\n function bindAddNewPetBtnClick() {\r\n $('.js-seciton-step').on('click', 'button.js-add-new-pet', function (e) {\r\n e.preventDefault();\r\n var targetValue = $(this).attr('data-target');\r\n var butonText = $(this).text().trim();\r\n bookInfo.petId = '0';\r\n bookInfo.isCareClubMember = '';\r\n let backStepValue = 'select-exist-pet';\r\n updateBackBtn(targetValue, backStepValue);\r\n updateSeciton(targetValue);\r\n window.VCA.oabDatalayer.datalayerPushStepChange(bookInfo, targetValue, backStepValue);\r\n });\r\n }\r\n\r\n function bindSelectPetClick() {\r\n $('.js-seciton-step').on('click', '.js-show-step', function (e) {\r\n e.preventDefault();\r\n var wrap = $(this).closest('.oab__form__body');\r\n wrap.find('.js-show-step').not(this).hide();\r\n wrap.find('.js-vca-dropdown-button').hide();\r\n wrap.find('.js-shelter-link').hide();\r\n wrap.find('.js-login-link').hide();\r\n bookInfo.petSpecies = $(this).attr('data-type');\r\n bookInfo.petImgURL = $(this).find('.js-confirm-img').attr('src');\r\n $(this).addClass('active'); \r\n $(this).closest('section[data-step]').find('button[data-btn=\"back\"]').addClass('btn-reset');\r\n wrap.find('.js-hidden-step').show();\r\n if (!bookInfo.isVersion2 && !bookInfo.isLoggedIn) {\r\n ui.$selectPet.find('button[data-btn=\"back\"]').show().addClass('remove-on-next');\r\n }\r\n window.VCA.oabDatalayer.datalayerPushStepChange(bookInfo, 'petName', 'select-pet');\r\n });\r\n }\r\n\r\n function bindOtherPetClick() {\r\n $('.js-seciton-step').on('click', '.js-other-pet-selecter', function (e) {\r\n e.preventDefault();\r\n var wrap = $(this).closest('.oab__form__body');\r\n let listBox = $(this).closest('.vca-dropdown-select');\r\n let listButton = $(this).closest('.vca-dropdown-select').find('.js-btn-selecter');\r\n let otherPetName = $(this).attr('data-type');\r\n bookInfo.petImgURL = listButton.find('.js-confirm-img').attr('src');\r\n wrap.find('.js-show-step').not(this).hide();\r\n bookInfo.petSpecies = $(this).attr('data-type');\r\n listButton.addClass('active');\r\n $('.js-other-pet-display-name').text(bookInfo.petSpecies);\r\n listBox.find('.js-vca-dropdown-list').addClass('hidden');\r\n listButton.attr(\"aria-expanded\", \"false\");\r\n $(this).closest('section[data-step]').find('button[data-btn=\"back\"]').addClass('btn-reset');\r\n wrap.find('.js-hidden-step').show();\r\n if (!bookInfo.isVersion2 && !bookInfo.isLoggedIn) {\r\n ui.$selectPet.find('button[data-btn=\"back\"]').show().addClass('remove-on-next');\r\n }\r\n });\r\n }\r\n\r\n function bindTypeStepClick() {\r\n $('.js-seciton-step').on('click', '.js-show-next', function (e) {\r\n e.preventDefault();\r\n var targetValue = $(this).attr('data-target');\r\n bookInfo.apptTypeId = $(this).attr('data-id');\r\n bookInfo.apptTypeText = $(this).text().trim();\r\n $('section[data-step=\"' + targetValue + '\"] div[data-appointmentTypeId').hide();\r\n $('section[data-step=\"' + targetValue + '\"] div[data-appointmentTypeId=\"' + bookInfo.apptTypeId + '\"').show();\r\n window.VCA.oabDatalayer.datalayerPushStepChange(bookInfo, targetValue, 'appt-reason');\r\n updateSeciton(targetValue);\r\n });\r\n }\r\n\r\n function bindReasonStepClick() {\r\n $('.js-seciton-step').on('click', '.js-show-textarea', function (e) {\r\n e.preventDefault();\r\n\r\n bookInfo.reasonId = $(this).attr('data-id');\r\n bookInfo.appointmentReasonDisplayText = $(this).attr('data-reason');\r\n\r\n\r\n if (bookInfo.reasonId == 10 || bookInfo.reasonId == 9 || bookInfo.reasonId == 8) {\r\n if (bookInfo.petId != '0' && bookInfo.isPrimaryHospital) {\r\n showLoader();\r\n createWellnessSection(false, false);\r\n } else {\r\n var targetValue = 'wellness-issue';\r\n let backStepValue = 'appt-issue';\r\n updateSeciton(targetValue);\r\n updateBackBtn(targetValue, backStepValue);\r\n window.VCA.oabDatalayer.datalayerPushStepChange(bookInfo, targetValue, backStepValue);\r\n }\r\n }\r\n else {\r\n var wrap = $(this).closest('.oab__form__body');\r\n wrap.find('.js-show-textarea').not(this).hide();\r\n $(this).addClass('active');\r\n $(this).closest('section[data-step]').find('button[data-btn=\"back\"]').addClass('btn-reset');\r\n wrap.find('.js-hidden-step').show();\r\n }\r\n });\r\n }\r\n\r\n function bindReasonModalClick() {\r\n $('.js-seciton-step').on('click', '.js-modal-btn', function (e) {\r\n e.preventDefault();\r\n $(this).addClass('active');\r\n\r\n $('#appttypemodal-900,#appttypemodal-911').on('hidden.bs.modal', function (e) {\r\n // do something...\r\n $('.js-modal-btn').removeClass('active');\r\n })\r\n });\r\n }\r\n\r\n function bindSeclectConditionClick() {\r\n $('.js-select-btn-condition').on('click', function (e) {\r\n e.preventDefault();\r\n var wrap = $(this).closest('.oab__form__body');\r\n if (wrap.find('.js-required').val() === '') {\r\n wrap.find('.js-required').trigger('focus');\r\n return;\r\n }\r\n var newMessage = wrap.find('.js-conditionmessage').val();\r\n bookInfo.conditionMessage = newMessage;\r\n var targetValue = $(this).attr('data-target');\r\n let backStepValue = $(this).closest('section[data-step]').attr('data-step');\r\n updateBackBtn(targetValue, backStepValue);\r\n updateSeciton(targetValue);\r\n initdateTimeApptTabs();\r\n\r\n window.VCA.oabDatalayer.datalayerPushStepChange(bookInfo, targetValue, backStepValue);\r\n\r\n });\r\n }\r\n\r\n function bindfieldUpdate() {\r\n $('.js-required').on('keyup', function (e) {\r\n e.preventDefault();\r\n var wrap = $(this).closest('.oab__form__body');\r\n var counter = wrap.find('.js-limit-counter');\r\n if ($(this).val() !== '') {\r\n wrap.find('.js-btn-required').removeClass('disabled');\r\n } else if ($(this).val() === '') {\r\n wrap.find('.js-btn-required').addClass('disabled');\r\n }\r\n\r\n if (this.value.length > 256) {\r\n return false;\r\n }\r\n counter.html(256 - this.value.length);\r\n });\r\n }\r\n\r\n function bindScrollLoadClick() {\r\n $('.js-seciton-step').on('click', '.js-scroll-more-times', function (e) {\r\n e.preventDefault();\r\n let buttonCliked = $(this)\r\n buttonCliked.css('pointer-events', 'none');\r\n var totalWidth = 0;\r\n var dateWrapper = $(this).closest('.js-vet-appts').find('.js-v-asset-times');\r\n var startDate = $(this).attr('data-next-start-date');\r\n var resourceId = $(this).attr('data-resource-id');\r\n buttonCliked.css('pointer-events', 'none');\r\n dateWrapper.find('.v-asset-times__item').each(function () {\r\n totalWidth += $(this).outerWidth(true);\r\n });\r\n var maxWidth = dateWrapper.width();\r\n var leftPos = dateWrapper.scrollLeft();\r\n dateWrapper.animate({\r\n scrollLeft: leftPos + 212\r\n }, 800, function () {\r\n buttonCliked.css('pointer-events', 'all');\r\n });\r\n if (leftPos + maxWidth >= totalWidth) {\r\n updateResourceSlots(startDate, resourceId);\r\n }\r\n });\r\n }\r\n\r\n function bindSeeMoreTimesClick() {\r\n $('.js-seciton-step').on('click', '.js-show-more-appt-time', function (e) {\r\n e.preventDefault();\r\n var avaWrapper = $(this).closest('.asset-ava').find('.asset-times');\r\n if (avaWrapper.hasClass('open')) {\r\n avaWrapper.removeClass('open');\r\n $(this).text('See more available times');\r\n } else {\r\n avaWrapper.addClass('open');\r\n $(this).text('See less times');\r\n }\r\n });\r\n }\r\n\r\n function bindVerifyUserClick() {\r\n $('.js-seciton-step').on('click', '.js-verify-user', function (e) {\r\n e.preventDefault();\r\n\r\n if ($('.js-verify-address-inputs .js-required').val() != '' && $('.js-pet-selector-box input').is(':checked')) {\r\n bookInfo.addressChallengeAnswer = $(\"input[name='missingAddress']\").val();\r\n bookInfo.petNameChallengeAnswer = $(\"input[name='petName']:checked\").val();\r\n showLoader();\r\n checkConfirmChallenge();\r\n }\r\n });\r\n }\r\n\r\n function abandonDataLayerPush() {\r\n $('.js-seciton-step').on('click', '.js-abandon-link', function (e) {\r\n let backStepValue = $(this).closest('section[data-step]').attr('data-step');\r\n window.VCA.oabDatalayer.datalayerAbandon(bookInfo, backStepValue);\r\n });\r\n }\r\n\r\n function showTimeLoader() {\r\n ui.$sections.css('opacity', '.3').css('pointer-events', 'none');\r\n ui.timeloader.show();\r\n }\r\n function hideTimeLoader() {\r\n ui.timeloader.hide();\r\n ui.$sections.css('opacity', '1').css('pointer-events', 'all');\r\n }\r\n function showLoader() {\r\n ui.$sections.css('opacity', '.3').css('pointer-events', 'none');\r\n ui.loader.show();\r\n }\r\n function hideLoader() {\r\n ui.$sections.css('opacity', '1').css('pointer-events', 'all');\r\n ui.loader.hide();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.bookAppointmentForm.init();\r\n});","const clientType = ({ displayName, imgURL, imgURL2, clientTypeId }) => `\r\n <div>\r\n <button data-value=\"${clientTypeId}\" data-type=\"${displayName}\" data-btn=\"client-type\" data-target=\"select-pet\" class=\"btn btn-dusk-outline btn-selecter btn-selecter--left\">\r\n <img class=\"off-hover-icon js-confirm-img\" src=\"${imgURL}\" alt=\"${displayName} icon\">\r\n <img class=\"on-hover-icon\" src=\"${imgURL2}\" alt=\"${displayName} icon\">\r\n ${displayName}\r\n </button>\r\n </div>\r\n`;\r\n\r\n\r\nconst petType = ({ displayName, imgURL, imgURL2, speciesId }) => `\r\n <div>\r\n <button data-value=\"${speciesId}\" data-type=\"${displayName}\" class=\"btn btn-dusk-outline btn-selecter btn-selecter--left js-show-step js-btn-selecter\">\r\n <img class=\"off-hover-icon js-confirm-img\" src=\"${imgURL}\" alt=\"${displayName} icon\">\r\n <img class=\"on-hover-icon\" src=\"${imgURL2}\" alt=\"${displayName} icon\">\r\n ${displayName}\r\n </button>\r\n </div>\r\n`;\r\n\r\nconst otherPetType = ({ displayName, speciesId }) => `\r\n <li data-value=\"${speciesId}\" role=\"option\" class=\"\"><a href=\"#\" class=\"js-other-pet-selecter\" data-value=\"${speciesId}\" data-type=\"${displayName}\" data-filter=\"${displayName}\">${displayName}</a></li>\r\n`;\r\n\r\nconst existPet = ({ displayName, imgURL, petId, careClub, species }) => `\r\n <div>\r\n <button data-pet-id=\"${petId}\" data-pet-name=\"${displayName}\" data-species=\"${species}\" data-careclub=\"${careClub}\" data-target=\"appt-reason\" class=\"btn btn-dusk-outline btn-selecter btn-selecter--thumb btn-selecter--left js-exist-pet-btn\">\r\n <div class=\"btn-selecter--thumb__icon\">\r\n <img data-object-fit=\"cover\" class=\"js-confirm-img\" src=\"${imgURL}\" alt=\"${displayName} icon\">\r\n </div>\r\n ${displayName}\r\n </button>\r\n </div>\r\n`;\r\n\r\n\r\nconst apptType = ({ name, imgURL, imgURL2, id, appointmentTypeId }) => `\r\n <div>\r\n <button data-btn=\"apptype\" data-target=\"appt-issue\" data-id=\"${id}\" data-appointmentTypeId=\"${appointmentTypeId}\" class=\"js-show-next btn btn-dusk-outline btn-selecter btn-selecter--left\">\r\n <img class=\"off-hover-icon\" alt=\"${name} icon\" src=\"${imgURL}\">\r\n <img class=\"on-hover-icon\" alt=\"${name} icon\" src=\"${imgURL2}\">\r\n ${name}\r\n </button>\r\n </div>\r\n`;\r\n\r\n\r\n\r\nconst apptTypeNoImage = ({ name, id, appointmentTypeId }) => `\r\n <div>\r\n <button data-btn=\"apptype\" data-target=\"appt-issue\" data-id=\"${id}\" data-appointmentTypeId=\"${appointmentTypeId}\" class=\"js-show-next btn btn-dusk-outline btn-selecter btn-selecter--left\">\r\n ${name}\r\n </button>\r\n </div>\r\n`;\r\n\r\nconst apptTypeContact = ({ name, imgURL, imgURL2, id, appointmentTypeId }) => `\r\n <div>\r\n <button data-btn=\"apptype\" data-toggle=\"modal\" data-target=\"#appttypemodal-${id}\" data-target=\"appt-issue\" data-id=\"${id}\" data-appointmentTypeId=\"${appointmentTypeId}\" class=\"btn btn-dusk-outline btn-selecter js-modal-btn btn-selecter--left\">\r\n <img class=\"off-hover-icon\" alt=\"${name} icon\" src=\"${imgURL}\">\r\n <img class=\"on-hover-icon\" alt=\"${name} icon\" src=\"${imgURL2}\">\r\n ${name}\r\n </button>\r\n </div>\r\n`;\r\n\r\nconst apptReason = ({ name, id, appointmentTypeId }) => `\r\n <div data-appointmentTypeId=\"${appointmentTypeId}\" style=\"display:none;\">\r\n <button data-btn=\"reason\" data-target=\"appt-issue\" data-id=\"${id}\" data-reason=\"${name}\" data-appointmentTypeId=\"${appointmentTypeId}\" class=\"btn btn-dusk-outline btn-selecter js-show-textarea js-btn-selecter\">\r\n ${name}\r\n </button>\r\n </div>\r\n`;\r\nconst apptTypeModal = ({ body, id, name }) => `\r\n <div class=\"modal fade\" id=\"appttypemodal-${id}\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"${name}\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n ${body}\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n`;\r\n\r\nconst assetBlock = ({ displayName, ResourceCreds, imgURL, resourceId }) => `\r\n <div class=\"asset-block\" data-resource-id=\"${resourceId}\">\r\n <div class=\"asset-block__image\">\r\n <img src=\"${imgURL}\" alt=\"${displayName} icon\"/>\r\n </div>\r\n <div class=\"asset-block__content\">\r\n <div class=\"asset-block__name\">${displayName}</div>\r\n <div class=\"asset-block__creds\">${ResourceCreds}</div>\r\n </div>\r\n </div>\r\n`;\r\n\r\nconst timeBtn = ({ displayTime, resourceId, startTime, endTime, displayDate }) => `\r\n <button data-resource-id=\"${resourceId}\" data-start-time=\"${startTime}\" data-end-time=\"${endTime}\" data-time-display=\"${displayTime}\" data-date-display=\"${displayDate}\" class=\"js-select-appt asset-appt-time-btn\">${displayTime}</button>\r\n`;\r\n\r\nconst vetTimeAssets = ({ displayDate , content}) => `\r\n <div class=\"v-asset-times__item\"><div class=\"v-asset-times__item__date\">${displayDate}</div>${content}</div>\r\n`;\r\n\r\n\r\nconst wellnessBtnDueDate = ({ displayName , IconUrl, wellnessTypeId, id, DueDate, careClubIcon}) => `\r\n <button data-wellnessType-Id=\"${wellnessTypeId}\" data-id=\"${id}\" data-type-name=\"${displayName}\"\r\n class=\"btn btn-dusk-outline btn-selecter btn-selecter-wellness btn-selecter--left js-btn-wellness\">\r\n <div class=\"btn-selecter-wellness__img\">\r\n <img class=\"${careClubIcon}\" alt=\"wellness icon\"\r\n src=\"${IconUrl}\">\r\n </div>\r\n <div class=\"flex-fill\">\r\n <div><strong>${displayName}</strong></div>\r\n <span class=\"sm-label\">Due Date</span> ${DueDate}\r\n </div>\r\n <div class=\"radial-btn\"></div>\r\n </button>\r\n`;\r\n\r\nconst wellnessBtn = ({ displayName , IconUrl, wellnessTypeId, id, DueDate, careClubIcon}) => `\r\n <button data-wellnessType-Id=\"${wellnessTypeId}\" data-id=\"${id}\" data-type-name=\"${displayName}\"\r\n class=\"btn btn-dusk-outline btn-selecter btn-selecter-wellness btn-selecter--left js-btn-wellness\">\r\n <div class=\"btn-selecter-wellness__img\">\r\n <img class=\"${careClubIcon}\" alt=\"wellness icon\"\r\n src=\"${IconUrl}\">\r\n </div>\r\n <div class=\"flex-fill\">\r\n <div><strong>${displayName}</strong></div>\r\n </div>\r\n <div class=\"radial-btn\"></div>\r\n </button>\r\n`;\r\n\r\nconst petInputGroup = ({ displayName }) => `\r\n <div class=\"form-label-group\">\r\n <div class=\"form-check custom-radio\">\r\n <input class=\"form-check-input custom-control-input\" type=\"radio\" name=\"petName\" id=\"${displayName}\" value=\"${displayName}\">\r\n <label class=\"form-check-label\" for=\"${displayName}\">\r\n ${displayName}\r\n </label>\r\n </div>\r\n </div>\r\n`;\r\n\r\nconst displayDate = ({date}) => {\r\n var d = new Date(date),\r\n month = '' + (d.getMonth() + 1),\r\n day = '' + d.getDate(),\r\n year = d.getFullYear();\r\n\r\n if (month.length < 2)\r\n month = '0' + month;\r\n if (day.length < 2)\r\n day = '0' + day;\r\n return [month, day, year].join('/');\r\n}\r\n\r\n\r\n\r\n\r\nexport {\r\n clientType,\r\n petType,\r\n otherPetType,\r\n existPet,\r\n apptType,\r\n apptTypeNoImage,\r\n apptReason,\r\n apptTypeContact,\r\n apptTypeModal,\r\n assetBlock,\r\n timeBtn,\r\n vetTimeAssets,\r\n wellnessBtn,\r\n wellnessBtnDueDate,\r\n petInputGroup,\r\n displayDate\r\n};\r\n","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\nvar VCA = VCA || {};\r\n\r\n\r\nVCA.PCCSlider = (function ($) {\r\n\r\n var ui = {};\r\n var MEDIA_QUERY = '(max-width: 767px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n var started = false;\r\n\r\n function init() {\r\n if ($('[data-slider=\"PCC-slider\"]').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n initPCCSlider();\r\n initPCCThumbsSlider();\r\n bindnavClick();\r\n }\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$PCCSlider = $('[data-slider=\"PCC-slider\"]');\r\n ui.$PCCThumbsSlider = $('[data-slider=\"PCC-thumbs-slider\"]');\r\n }\r\n\r\n function initPCCSlider(e) {\r\n ui.$PCCSlider.each(function (index, element) {\r\n\r\n $(this).addClass('js-pcc-slider' + index).data('index',index);\r\n var navSlider = '.js-pcc-slider-thumbs' + index +',' + '.js-pcc-slider-caption' + index;\r\n var statusBox = '.js-pcc-slider-arrows-wrap' + index;\r\n var item_length = $('.js-pcc-slider' + index + ' > div').length;\r\n if (item_length > 1 && !isExperienceEditor) {\r\n $('.js-pcc-slider' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: true,\r\n dots: false,\r\n rows: 0,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n asNavFor: navSlider,\r\n appendArrows: statusBox,\r\n focusOnSelect: true,\r\n accessibility: false\r\n });\r\n }else {\r\n $(statusBox).hide();\r\n }\r\n\r\n\r\n });\r\n\r\n\r\n };\r\n\r\n function initPCCThumbsSlider(e) {\r\n ui.$PCCThumbsSlider.each(function (index, element) {\r\n $(this).addClass('js-pcc-slider-thumbs' + index).data('index-thumb',index);\r\n var navSlider = '.js-pcc-slider' + index +',' + '.js-pcc-slider-caption' + index;\r\n console.log(navSlider);\r\n var item_length = $('.js-pcc-slider-thumbs' + index + ' > div').length;\r\n if (item_length > 1 && !isExperienceEditor) {\r\n $('.js-pcc-slider-thumbs' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: true,\r\n dots: false,\r\n rows: 0,\r\n slidesToShow: 3,\r\n slidesToScroll: 1,\r\n focusOnSelect: false,\r\n accessibility: true\r\n });\r\n }else {\r\n $('.js-pcc-slider-thumbs' + index).hide();\r\n }\r\n });\r\n };\r\n\r\n function bindnavClick() {\r\n $(document).on('click', '.m-article-hero-thumbs .swiper-slide', function(event) {\r\n let parentSLider = $(this).closest('.swiper-wrapper');\r\n parentSLider.find('.swiper-slide-active').removeClass('swiper-slide-active');\r\n $(this).addClass('swiper-slide-active');\r\n let slideIndex = $(this).data('slick-index');\r\n let sliderIndex = parentSLider.data('index-thumb');\r\n $('.js-pcc-slider' + sliderIndex).slick(\"slickGoTo\", slideIndex);\r\n });\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.PCCSlider.init();\r\n});","import isExperienceEditor from '@utils/is-experience-editor';\r\n\r\n(function (window) {\r\n\r\n var abstracts = function () {\r\n var ui = {};\r\n // Number of abstract children to reveal at a time\r\n var ABSTRACT_CHILD_INCREMENT = 10;\r\n\r\n function cacheUI() {\r\n ui.$abstractListingList = document.querySelectorAll(\"div[class='abstracts-listing__list']\");\r\n ui.$btnShowAbstractChildren = document.querySelectorAll(\"#btnShowAbstractChildren\");\r\n }\r\n\r\n function initAbstractChildren(e) {\r\n if (!isExperienceEditor) {\r\n showMoreAbstractChildren();\r\n } else {\r\n if (ui.$abstractListingList.length > 0) {\r\n for (var k = 0; k < ui.$abstractListingList.length; k++) {\r\n for (var i = 0; i < ui.$abstractListingList[k].children.length; i++) {\r\n ui.$abstractListingList[k].children[i].style.setProperty(\"display\", \"block\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function showMoreAbstractChildren() {\r\n ui.$abstractListingList.forEach((abstractListingItem, index) => {\r\n if (abstractListingItem && abstractListingItem.children.length > 0) {\r\n var revealedChildCounter = 0;\r\n var iteratedChildCounter = 0;\r\n var youCanDeletethis = 'markcheck';\r\n\r\n while (revealedChildCounter < ABSTRACT_CHILD_INCREMENT && iteratedChildCounter < abstractListingItem.children.length) {\r\n if (abstractListingItem.children[iteratedChildCounter].style.getPropertyValue(\"display\") == \"none\") {\r\n abstractListingItem.children[iteratedChildCounter].style.setProperty(\"display\", \"block\");\r\n revealedChildCounter += 1;\r\n }\r\n iteratedChildCounter += 1;\r\n }\r\n\r\n if (abstractListingItem.querySelectorAll(\"[style='display:none;']\").length <= 0) {\r\n ui.$btnShowAbstractChildren[index].style.setProperty(\"display\", \"none\");\r\n youCanDeletethis = 'markcheckdone';\r\n }\r\n }\r\n });\r\n }\r\n\r\n function showMoreAbstractChildrenBtnEventHandler() {\r\n // this == the \"show more\" button\r\n var activeAbstractListingItem = this.closest(\".abstracts-listing\").querySelector(\".abstracts-listing__list\");\r\n if (activeAbstractListingItem && activeAbstractListingItem.children.length > 0) {\r\n var revealedChildCounter = 0;\r\n var iteratedChildCounter = 0;\r\n var youCanDeletethis = 'markcheck';\r\n\r\n while (revealedChildCounter < ABSTRACT_CHILD_INCREMENT && iteratedChildCounter < activeAbstractListingItem.children.length) {\r\n if (activeAbstractListingItem.children[iteratedChildCounter].style.getPropertyValue(\"display\") == \"none\") {\r\n activeAbstractListingItem.children[iteratedChildCounter].style.setProperty(\"display\", \"block\");\r\n revealedChildCounter += 1;\r\n }\r\n iteratedChildCounter += 1;\r\n }\r\n\r\n if (activeAbstractListingItem.querySelectorAll(\"[style='display:none;']\").length <= 0) {\r\n this.style.setProperty(\"display\", \"none\");\r\n youCanDeletethis = 'markcheckdone';\r\n }\r\n }\r\n }\r\n\r\n function bindEvents() {\r\n ui.$btnShowAbstractChildren.forEach((btnItem) => {\r\n btnItem.addEventListener('click', showMoreAbstractChildrenBtnEventHandler);\r\n });\r\n }\r\n\r\n function init() {\r\n if ($('.abstracts-listing').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n bindEvents();\r\n initAbstractChildren();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n };\r\n\r\n var abstractsObj = abstracts();\r\n abstractsObj.init();\r\n})(window);","\r\nimport isExperienceEditor from '@utils/is-experience-editor';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.Accordion = (function ($) {\r\n\r\n function init() {\r\n if ($('.js-accordion-section').length) {\r\n $('.js-accordion-section').each(function() {\r\n var item = $(this);\r\n if(item.find('.accordion__item').length == 0 && !isExperienceEditor) {\r\n item.hide();\r\n }\r\n })\r\n }\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.Accordion.init();\r\n});","import ApiService from '@api/api-service';\r\nimport getGoogleUserInfo from '@api/routes/myvca-api/get-google-userInfo';\r\n\r\nlet VCA = VCA || {};\r\n\r\nVCA.ActivateAccountSetUp = (function ($) {\r\n let ui = {};\r\n let haveOneNumValid = false;\r\n let haveOneUppercaseValid = false;\r\n let haveOneLowercaseValid = false;\r\n let haveOneSpecialCharValid = false;\r\n let have8MinCharValid = false;\r\n let generalPwFinalValue = '';\r\n let confirmPwFinalValue = '';\r\n let IdentityProviderValue = '';\r\n let PostTypeValue = '';\r\n \r\n function cacheUI() {\r\n //Sections\r\n ui.$sections = $('section.js-account-step');\r\n ui.$FindYourHospitalStep = $('section[data-step=\"find-your-hospital\"]');\r\n ui.$ProfileStep = $('section[data-step=\"profile\"]');\r\n ui.$VerifyYourAccountStep = $('section[data-step=\"verify-your-account\"]');\r\n ui.$SetPasswordStep = $('section[data-step=\"set-password\"]');\r\n ui.$loginHelpModal = $('#loginHelpModal');\r\n\r\n //Step1 - Find Your Hospital\r\n ui.$Step1ContinueBtn = $('#ActivateAcctFAHContinueBtn');\r\n ui.$Step1ZipCode = ui.$sections.find('#ActivateAccountZipCodeProfile');\r\n ui.$Step1AcctFahContainer = $('.account-fah');\r\n ui.$Step1AcctFahList = $('.account-fah__list');\r\n ui.$Step1AcctFahErrMsg = $('.acct-fah-errormsg');\r\n ui.$Step1AcctFahSelectHospitalErrMsg = $('.acct-fah-errormsg.select-hospital');\r\n ui.$Step1AcctFahInvalidZipCodeErrMsg = $('.acct-fah-errormsg.invalid-zipcode');\r\n ui.$Step1AcctFahAPIErrMsg = $('.acct-fah-errormsg.api-error-msg');\r\n ui.$Step1AcctFahEmptyResponse = $('.acct-fah-errormsg.empty-response');\r\n ui.$Step1Radius = accountFAHRadius;\r\n ui.$Step1Geocoder;\r\n ui.$Step1CurrentLat;\r\n ui.$Step1CurrentLng;\r\n ui.$Step1Bounds;\r\n ui.$Step1Coordinates = {};\r\n ui.$Fired = true;\r\n ui.$SelectedHospitalName;\r\n\r\n //Step2 - Profile \r\n ui.$Step2ContinueBtn = $('#ActivateAcctProfileContinueBtn');\r\n ui.$Step2Email = $('#ActivateAccountEmail');\r\n ui.$Step2FirstName = $('#ActivateAccountFName');\r\n ui.$Step2LastName = $('#ActivateAccountLName');\r\n ui.$Step2PhoneNum = $('#ActivateAccountPhoneNum');\r\n ui.$EmailValid = false;\r\n ui.$FirstNameValid = false;\r\n ui.$LastNameValid = false;\r\n ui.$PhoneNumValid = false;\r\n ui.$ZipCodeValid = false;\r\n\r\n //Step3 - Verify Your Account\r\n ui.$Step3ContinueBtn = $('#VerifyYourAcctContinueBtn');\r\n ui.$Step3StreetNum = $('#ActivateAccountStreetNum');\r\n ui.$Step3Street = $('#ActivateAccountStreet');\r\n ui.$Step3PetNameList = $('.pet-name-list');\r\n ui.$Step3VerifyAcctEmptyResponse = $('.verifyacct-errormsg.empty-response')\r\n ui.$Step3GetChallengeData = {};\r\n\r\n //Step4 - Set Password\r\n ui.$Step4ContinueBtn = $('#ActivateAcctPasswordContinueBtn');\r\n ui.$Step4ErrorMsg = $('#ActivateAccountErrorMsg');\r\n ui.$PasswordInput = $('.account-password-input');\r\n ui.$PasswordEyeIcon = $('.password-eye-icon');\r\n ui.$Step4APIFired = true;\r\n\r\n //Loader Spinner\r\n ui.$Step1LoaderSpinner = $('.account-loader-spinner.step1');\r\n ui.$Step2LoaderSpinner = $('.activate-account-loader.step2');\r\n\r\n //Back Btn\r\n ui.$BackBtn = $('.account-setup__back-btn');\r\n\r\n //Other\r\n ui.$InputEl = $('input');\r\n ui.$RequestVerificationToken = $('input[name=\"__RequestVerificationToken\"]').val();\r\n ui.$DataSourceId = $('input[name=\"DatasourceId\"]').val();\r\n ui.isCanada = $('[data-iscanada]').attr('data-iscanada');\r\n\r\n //Global Variables required for step4\r\n ui.$HospitalId;\r\n ui.$ClientId;\r\n ui.$FirstName;\r\n ui.$LastName;\r\n ui.$Email;\r\n ui.$Phone;\r\n ui.$Password;\r\n }\r\n\r\n function bindEvents() {\r\n ui.$Step1ContinueBtn.on('click', validateFahStep1);\r\n ui.$Step2ContinueBtn.on('click', validateProfileStep2);\r\n ui.$Step3ContinueBtn.on('click', validateVerifyAcctStep3);\r\n ui.$Step4ContinueBtn.on('click', validateSetPasswordStep4);\r\n\r\n //Other\r\n ui.$Step1ZipCode.on('keyup', initZipcode);\r\n ui.$Step2Email.on('blur', validateemailcheckifitisused);\r\n ui.$Step2PhoneNum.on('keydown', detectKeydown);\r\n ui.$Step3Street.on('keyup paste', hideStreetErrMsg);\r\n ui.$PasswordEyeIcon.on('click', togglePassword);\r\n ui.$PasswordInput.on('focus', showTooltipModal);\r\n ui.$PasswordInput.on('blur', hideTooltipModal);\r\n ui.$PasswordInput.on('keyup paste', validatePassword);\r\n ui.$BackBtn.on('click', backBtnClick);\r\n ui.$InputEl.on('keyup paste', hideErrorMessages);\r\n $('.js-account-step').find('.js-activate-btn').on('click', clickActivateHospital); \r\n $('.js-account-step').find('.js-login-help-btn').on('click', helpModal);\r\n hideLoginModal();\r\n }\r\n\r\n function init() {\r\n if ($('.activate-account-setup').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n bindEvents();\r\n dataLayerPush('find-a-hospital', '1');\r\n\r\n let urlParams = new URL(window.location);\r\n if (urlParams && urlParams.searchParams.has('code')) {\r\n ui.$Step2LoaderSpinner.show()\r\n ui.$urlparamhascode = true;\r\n let strcode = urlParams.searchParams.get('code');\r\n if (strcode.includes(\"SIGNIN\")) {\r\n PostTypeValue = \"SIGNIN\";\r\n }\r\n getGoogleUserInfoDetails(strcode);\r\n }\r\n }\r\n \r\n function helpModal(e){\r\n e.preventDefault();\r\n ui.$loginHelpModal.modal('show');\r\n }\r\n\r\n function hideLoginModal() {\r\n ui.$loginHelpModal.on('hide.bs.modal', function () {\r\n const getUrl = ui.$loginHelpModal.find('iframe').attr('src');\r\n ui.$loginHelpModal.find('iframe').removeAttr('src');\r\n ui.$loginHelpModal.find('iframe').attr('src', getUrl);\r\n });\r\n }\r\n\r\n function hideErrorMessages(e) {\r\n const el = $(e.currentTarget);\r\n el.removeClass('error');\r\n el.closest('.form-label-group').find('.input-error-text').hide();\r\n }\r\n\r\n async function clickActivateHospital() {\r\n const url = '/myvca-api/googlesignup';\r\n let api = new ApiService(url);\r\n\r\n const { success, data, error } = await api.query();\r\n\r\n if (success) {\r\n window.VCA.AccountDatalayer?.datalayerPushSignWithGoogle(\"sign_up_with_google\",\"sign_up\",\"Sign Up with Google\")\r\n if (data !== null && data !== '') {\r\n window.location.href = data;\r\n }\r\n }\r\n }\r\n\r\n async function getGoogleUserInfoDetails(code) {\r\n const params = {\r\n codeId: code\r\n }\r\n const { success, data } = await getGoogleUserInfo.post(params);\r\n ui.$Step2LoaderSpinner.hide()\r\n\r\n if (success) {\r\n if (data !== null && data !== '') {\r\n if (data.redirecturl != null && data.redirecturl !== '') {\r\n window.location.href = data.redirecturl;\r\n } else {\r\n IdentityProviderValue = 'Google'\r\n ui.$sections.find('#ActivateAccountEmail').val(data.email);\r\n ui.$sections.find('#ActivateAccountFName').val(data.given_name);\r\n ui.$sections.find('#ActivateAccountLName').val(data.family_name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function dataLayerPush(stepName, stepNumber) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'myvca-account-activation-virtual-pageview',\r\n 'page-name': stepName,\r\n 'step': stepNumber,\r\n });\r\n }\r\n /*********************** STEP 1: Find Your Hospital *************************/\r\n function initZipcode() {\r\n let zipCodeValue = ui.$Step1ZipCode.val();\r\n let maxCharacters = 5;\r\n let canadaZipCodeRegex = /^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ -]?\\d[ABCEGHJ-NPRSTV-Z]\\d$/i;\r\n\r\n ui.$Step1ZipCode.removeClass('error');\r\n ui.$Step1ZipCode.parent().find('.input-error-text').hide();\r\n ui.$Step1AcctFahErrMsg.hide();\r\n\r\n //Need to check if IsCanada = true\r\n if (isCanada) {\r\n let isValidCanadaZipCode = canadaZipCodeRegex.test(zipCodeValue);\r\n\r\n if (isValidCanadaZipCode) {\r\n ui.$Fired = false;\r\n ui.$Step1AcctFahList.hide();\r\n ui.$Step1AcctFahList.empty();\r\n initGeocoder(zipCodeValue);\r\n } else {\r\n ui.$Step1AcctFahContainer.hide();\r\n ui.$Step1AcctFahErrMsg.hide();\r\n ui.$Step1AcctFahList.empty();\r\n }\r\n\r\n } else {\r\n //Need to limit characters to 5\r\n if (zipCodeValue.length >= maxCharacters) {\r\n ui.$Step1ZipCode.val(zipCodeValue.substr(0, maxCharacters));\r\n }\r\n\r\n if (zipCodeValue.length < maxCharacters) {\r\n ui.$Step1AcctFahContainer.hide();\r\n ui.$Step1AcctFahErrMsg.hide();\r\n ui.$Step1AcctFahList.empty();\r\n }\r\n\r\n if (zipCodeValue.length === maxCharacters && ui.$Fired) {\r\n ui.$Fired = false;\r\n ui.$Step1AcctFahList.hide();\r\n ui.$Step1AcctFahList.empty();\r\n initGeocoder(zipCodeValue);\r\n }\r\n }\r\n }\r\n\r\n function initGeocoder(zipCodeValue) {\r\n let zipCode = zipCodeValue;\r\n\r\n ui.$Step1AcctFahErrMsg.hide();\r\n ui.$Step1AcctFahContainer.css('border', 'none').show();\r\n ui.$Step1LoaderSpinner.show();\r\n\r\n //32993: [myVCA] Activation screen - Invalid ZIP Code Error for 15007\r\n if (ui.isCanada === 'true') {\r\n zipCode = zipCode + ', Canada';\r\n } else {\r\n zipCode = zipCode + ', USA';\r\n }\r\n\r\n //****** GEOCODER *******\r\n ui.$Step1Geocoder = new google.maps.Geocoder();\r\n ui.$Step1Geocoder.geocode({\r\n 'address': zipCode\r\n }, function (results, status) {\r\n if (status == 'OK') {\r\n ui.$Step1CurrentLat = results[0].geometry.location.lat();\r\n ui.$Step1CurrentLng = results[0].geometry.location.lng();\r\n ui.$Step1Coordinates = getSearchBounds();\r\n initHospitals(ui.$Step1Coordinates);\r\n } else {\r\n console.log('Geocode was not successful for the following reason: ' + status);\r\n ui.$Step1AcctFahContainer.hide();\r\n ui.$Step1LoaderSpinner.hide();\r\n ui.$Step1AcctFahInvalidZipCodeErrMsg.show();\r\n ui.$Fired = true;\r\n }\r\n });\r\n }\r\n\r\n function getSearchBounds() {\r\n ui.$Step1Bounds = getBounds(ui.$Step1CurrentLat, ui.$Step1CurrentLng, ui.$Step1Radius);\r\n let coordinatesResult = calcMinMaxLatLng(ui.$Step1Bounds);\r\n\r\n return coordinatesResult;\r\n }\r\n\r\n function getBounds(lat, lng, radius) {\r\n let ConvertedRadius = radius * 1609.34;\r\n\r\n // add to canada site\r\n if (ui.isCanada === 'true') {\r\n ConvertedRadius = radius * 1000;\r\n }\r\n\r\n var circleData = {\r\n center: {\r\n lat,\r\n lng\r\n },\r\n radius: ConvertedRadius\r\n };\r\n\r\n if (window['google']) {\r\n return new window['google'].maps.Circle(circleData).getBounds();\r\n }\r\n }\r\n\r\n function calcMinMaxLatLng(bounds) {\r\n var obj = {\r\n minLat: bounds.getNorthEast().lat(),\r\n maxLat: bounds.getSouthWest().lat(),\r\n minLng: bounds.getNorthEast().lng(),\r\n maxLng: bounds.getSouthWest().lng()\r\n }\r\n return obj;\r\n }\r\n\r\n function initHospitals(coordinates) {\r\n let payload = {\r\n MinLatitude: coordinates.minLat,\r\n MaxLatitude: coordinates.maxLat,\r\n MinLongitude: coordinates.minLng,\r\n MaxLongitude: coordinates.maxLng,\r\n }\r\n\r\n //API CALL\r\n getHospitals(payload);\r\n }\r\n\r\n async function getHospitals(payload) {\r\n ui.$Fired = true;\r\n\r\n const url = '/myvca-api/get-hospitals';\r\n let api = new ApiService(url);\r\n let query = {\r\n minLat: payload.MinLatitude,\r\n maxLat: payload.MaxLatitude,\r\n minLong: payload.MinLongitude,\r\n maxLong: payload.MaxLongitude\r\n }\r\n const { data, success, error } = await api.query(query);\r\n\r\n if (!success || (error !== null && error !== '')) {\r\n ui.$Step1AcctFahContainer.hide();\r\n ui.$Step1LoaderSpinner.hide();\r\n ui.$Step1AcctFahAPIErrMsg.html(error);\r\n ui.$Step1AcctFahAPIErrMsg.show();\r\n } else {\r\n ui.$Step1LoaderSpinner.hide();\r\n let results = data;\r\n\r\n if (results == null || results == undefined) {\r\n ui.$Step1AcctFahContainer.hide();\r\n ui.$Step1AcctFahEmptyResponse.show();\r\n } else {\r\n ui.$Step1AcctFahContainer.css('border', '1px solid #979797').show();\r\n createHospitalItems(results);\r\n }\r\n }\r\n }\r\n\r\n function createHospitalItems(json) {\r\n let data = json;\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n let hospital = $(`\r\n <div class=\"account-fah__radio-item form-label-group__hospitalList js-hospital-selection\" data-hospital-id=${data[i].HospitalId} data-hospital-name=\"${data[i].DisplayName}\">\r\n <label for=\"ChooseHospital-${i}\">${data[i].DisplayName}</label>\r\n </div>\r\n `);\r\n ui.$Step1AcctFahList.append(hospital);\r\n }\r\n\r\n $('.js-account-fah').on('click', '.js-hospital-selection', function () {\r\n // Get the display name and hospital ID from the clicked element's data attributes\r\n let hospitalName = $(this).data('hospital-name');\r\n let hospitalId = $(this).data('hospital-id');\r\n ui.$Step1ZipCode.attr('data-hospital-setId', hospitalId)\r\n ui.$Step1ZipCode.val(hospitalName);\r\n\r\n // Hide the dropdown or radio button container\r\n ui.$Step1AcctFahContainer.hide();\r\n });\r\n\r\n\r\n validateHospitalSelected();\r\n ui.$Step1AcctFahList.show();\r\n }\r\n\r\n function validateHospitalSelected() {\r\n $('.acct-choose-hospital').on('click', () => {\r\n let radio = $(\"input[type=radio][name=hospital-radio-group]\").filter(\":checked\")[0];\r\n\r\n if (radio) {\r\n ui.$Step1AcctFahErrMsg.hide();\r\n }\r\n });\r\n }\r\n\r\n function validateFahStep1() {\r\n let zipCodeVal = ui.$Step1ZipCode.val();\r\n let radio = $(\"input[type=radio][name=hospital-radio-group]\").filter(\":checked\")[0];\r\n let hospitalSelected = false;\r\n let canadaZipCodeRegex = /^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ -]?\\d[ABCEGHJ-NPRSTV-Z]\\d$/i;\r\n\r\n ui.$Step1ZipCode.parent().find('.error-msg').hide();\r\n\r\n //validate if zip code input field is empty\r\n if (zipCodeVal.trim() == '') {\r\n ui.$Step1ZipCode.addClass('error');\r\n ui.$Step1ZipCode.parent().find('.error-msg.required').show();\r\n ui.$Step1ZipCode.parent().find('.input-error-text').show();\r\n } else {\r\n ui.$Step1ZipCode.removeClass('error');\r\n ui.$Step1ZipCode.parent().find('.input-error-text').hide();\r\n }\r\n\r\n //Validate if user types an invalid zipcode\r\n if (isCanada) {\r\n let isValidCanadaZipCode = canadaZipCodeRegex.test(zipCodeVal);\r\n ui.$Step1ZipCode.parent().find('.error-msg').hide();\r\n if (isValidCanadaZipCode) {\r\n ui.$Step1ZipCode.removeClass('error');\r\n ui.$Step1ZipCode.parent().find('.input-error-text').hide();\r\n } else {\r\n ui.$Step1ZipCode.addClass('error');\r\n ui.$Step1ZipCode.parent().find('.error-msg.invalid').show();\r\n ui.$Step1ZipCode.parent().find('.input-error-text').show();\r\n }\r\n\r\n } else {\r\n if (zipCodeVal.trim() !== '') {\r\n if (zipCodeVal.length < 5) {\r\n ui.$Step1ZipCode.addClass('error');\r\n ui.$Step1ZipCode.parent().find('.error-msg.invalid').show();\r\n ui.$Step1ZipCode.parent().find('.input-error-text').show();\r\n } else {\r\n ui.$Step1ZipCode.removeClass('error');\r\n ui.$Step1ZipCode.parent().find('.input-error-text').hide();\r\n }\r\n }\r\n }\r\n\r\n //Validate if radio input has been selected\r\n if (radio) {\r\n hospitalSelected = true;\r\n //Assign HospitalId - global variable (step 4)\r\n ui.$HospitalId = $(radio).val();\r\n //Assign Hospital Name - global variable\r\n ui.$SelectedHospitalName = $(radio).data('name');\r\n } else if (!radio && ui.$Step1AcctFahList.children().length > 0) {\r\n ui.$Step1AcctFahSelectHospitalErrMsg.show();\r\n }\r\n\r\n //Check if hospitalSelected is true --> move on to STEP 2\r\n if (hospitalSelected) {\r\n let targetValue = ui.$Step1ContinueBtn.data('target');\r\n let targetStepNumberValue = ui.$Step1ContinueBtn.data('target-step-number');\r\n\r\n ui.$sections.hide();\r\n updateProgressBar(targetValue);\r\n $('.acct-hospital-name').html(ui.$SelectedHospitalName);\r\n ui.$ProfileStep.show();\r\n dataLayerPush(targetValue, targetStepNumberValue);\r\n }\r\n }\r\n /*********************** End of STEP 1: Find Your Hospital *************************/\r\n\r\n /*********************** STEP 2: Profile *************************/\r\n function detectKeydown(e) {\r\n if (e.which === 38 || e.which === 40) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n function validateEmail() {\r\n let emailValue = ui.$Step2Email.val();\r\n let emailRegex = /\\S+@\\S+\\.\\S+/;\r\n let validateEmail = emailRegex.test(emailValue);\r\n ui.$Step2Email.attr('value', emailValue);\r\n ui.$Step2Email.parent().find('.error-msg').hide();\r\n\r\n if (emailValue.trim() == '') {\r\n ui.$Step2Email.addClass('error');\r\n ui.$Step2Email.parent().find('.error-msg.required').show();\r\n ui.$Step2Email.parent().find('.input-error-text').show();\r\n ui.$EmailValid = false;\r\n } else {\r\n if (validateEmail) {\r\n ui.$Step2Email.removeClass('error');\r\n ui.$Step2Email.parent().find('.input-error-text').hide();\r\n ui.$Email = emailValue;\r\n ui.$EmailValid = true;\r\n } else {\r\n ui.$Step2Email.addClass('error');\r\n ui.$Step2Email.parent().find('.error-msg.invalid').show();\r\n ui.$Step2Email.parent().find('.input-error-text').show();\r\n }\r\n }\r\n }\r\n\r\n function validateemailcheckifitisused() {\r\n validateEmail();\r\n if (!ui.$urlparamhascode) { \r\n if (ui.$EmailValid) {\r\n validateEmailAPI(ui.$Email);\r\n }\r\n } \r\n }\r\n\r\n async function validateEmailAPI(email) {\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n\r\n let payload = {\r\n email: email, \r\n '__RequestVerificationToken': ui.$RequestVerificationToken\r\n }\r\n\r\n let axiosConfig = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\r\n }\r\n }\r\n\r\n const url = `/myvca-api/check-if-email-is-used`;\r\n let api = new ApiService(url);\r\n\r\n ui.$Step2ContinueBtn.attr('disabled', 'disabled');\r\n\r\n const { data, success } = await api.post(searchParams(payload), axiosConfig);\r\n\r\n if (success) {\r\n let emailExists = data;\r\n if (emailExists) {\r\n ui.$Step2Email.addClass('error');\r\n ui.$Step2Email.parent().find('.error-msg.email-exists').show();\r\n ui.$Step2Email.parent().find('.input-error-text').show();\r\n ui.$Step2ContinueBtn.attr('disabled', 'disabled');\r\n } else {\r\n ui.$Email = email;\r\n ui.$Step2Email.removeClass('error');\r\n ui.$Step2Email.parent().find('.input-error-text').hide();\r\n ui.$Step2ContinueBtn.removeAttr('disabled');\r\n }\r\n }\r\n }\r\n\r\n function validateProfileStep2() {\r\n let firstName = ui.$Step2FirstName.val();\r\n let lastName = ui.$Step2LastName.val();\r\n let phoneNum = ui.$Step2PhoneNum.val();\r\n\r\n ui.$Step2FirstName.attr('value', firstName);\r\n ui.$Step2LastName.attr('value', lastName);\r\n ui.$Step2PhoneNum.attr('value', phoneNum);\r\n\r\n if (!ui.$Step1ZipCode.val()) {\r\n ui.$Step1ZipCode.attr('data-hospital-setId', '')\r\n }\r\n\r\n //Validate Email\r\n validateEmail();\r\n\r\n //Validate first name and last name\r\n if (firstName.trim() == '') {\r\n ui.$Step2FirstName.addClass('error');\r\n ui.$Step2FirstName.parent().find('.input-error-text').show();\r\n ui.$FirstNameValid = false;\r\n } else {\r\n ui.$Step2FirstName.removeClass('error');\r\n ui.$Step2FirstName.parent().find('.input-error-text').hide();\r\n ui.$FirstNameValid = true;\r\n ui.$FirstName = firstName;\r\n }\r\n\r\n if (lastName.trim() == '') {\r\n ui.$Step2LastName.addClass('error');\r\n ui.$Step2LastName.parent().find('.input-error-text').show();\r\n ui.$LastNameValid = false;\r\n } else {\r\n ui.$Step2LastName.removeClass('error');\r\n ui.$Step2LastName.parent().find('.input-error-text').hide();\r\n ui.$LastNameValid = true;\r\n ui.$LastName = lastName;\r\n }\r\n\r\n //validate zip code\r\n\r\n if (!ui.$Step1ZipCode.attr('data-hospital-setid')) {\r\n ui.$Step1ZipCode.addClass('error');\r\n ui.$Step1ZipCode.parent().find('.input-error-text').show();\r\n ui.$ZipCodeValid = false;\r\n } else {\r\n ui.$Step1ZipCode.removeClass('error');\r\n ui.$Step1ZipCode.parent().find('.input-error-text').hide();\r\n ui.$ZipCodeValid = true;\r\n ui.$HospitalId = ui.$Step1ZipCode.attr('data-hospital-setid'); \r\n }\r\n\r\n //Validate Phone Number\r\n if (phoneNum == '') {\r\n ui.$Step2PhoneNum.parent().find('.error-msg').hide();\r\n ui.$Step2PhoneNum.addClass('error');\r\n ui.$Step2PhoneNum.parent().find('.error-msg.required').show();\r\n ui.$Step2PhoneNum.parent().find('.input-error-text').show();\r\n } else {\r\n ui.$Step2PhoneNum.parent().find('.error-msg').hide();\r\n\r\n if (phoneNum.length == 10) {\r\n ui.$Step2PhoneNum.removeClass('error');\r\n ui.$Step2PhoneNum.parent().find('.input-error-text').hide();\r\n ui.$PhoneNumValid = true;\r\n ui.$Phone = phoneNum;\r\n } else {\r\n ui.$Step2PhoneNum.addClass('error');\r\n ui.$Step2PhoneNum.parent().find('.error-msg.invalid').show();\r\n ui.$Step2PhoneNum.parent().find('.input-error-text').show();\r\n ui.$PhoneNumValid = false;\r\n }\r\n }\r\n\r\n //If all input fields are valid --> Move on to STEP 3\r\n if (ui.$EmailValid && ui.$FirstNameValid && ui.$LastNameValid && ui.$PhoneNumValid) {\r\n getChallengeData(ui.$HospitalId, ui.$FirstName, ui.$LastName, ui.$Step2Email.val(), ui.$Phone);\r\n }\r\n }\r\n\r\n async function getChallengeData(hospitalId, firstName, lastName, email, phone) {\r\n\r\n const url = `/myvca-api/get-challenge`;\r\n let api = new ApiService(url);\r\n let query = { hospitalId, firstName, lastName, email, phone }\r\n const { data, success, error } = await api.query(query);\r\n\r\n if (!success || (error !== null && error !== '')) {\r\n alert(error);\r\n } else {\r\n let results = data;\r\n\r\n let addressPetChallengeCheck = (results.ChallengeResponse.addressChallenge == null\r\n || results.ChallengeResponse.addressChallenge.id == null\r\n || results.ChallengeResponse.addressChallenge.id == ''\r\n || results.ChallengeResponse.addressChallenge.postGap == ''\r\n || results.ChallengeResponse.addressChallenge.postGap == null) && (results.ChallengeResponse.petNameChallenge == null\r\n || results.ChallengeResponse.petNameChallenge.id == null\r\n || results.ChallengeResponse.petNameChallenge.id == ''\r\n || results.ChallengeResponse.petNameChallenge.choices == null\r\n || results.ChallengeResponse.petNameChallenge.choices.length == 0)\r\n \r\n if (results == null\r\n || results.ChallengeResponse == null\r\n || results.ChallengeResponse.id == null\r\n || results.ChallengeResponse.id == ''\r\n || addressPetChallengeCheck\r\n || results.ClientId == null\r\n || results.ClientId == 0) {\r\n $('.step2-err-msg').show();\r\n }\r\n \r\n else if (results.UserAccountLocked) {\r\n let accountlockMsg = $('.step2-err-msg').text(\"Your account is locked. Please try again in 15 minutes.\");\r\n accountlockMsg.show();\r\n ui.$Step2ContinueBtn.attr('disabled', 'disabled');\r\n } \r\n\r\n \r\n else { //ALL SUCCESS\r\n\r\n $('.step2-err-msg').hide();\r\n let targetValue = ui.$Step2ContinueBtn.data('target');\r\n let targetStepNumberValue = ui.$Step2ContinueBtn.data('target-step-number');\r\n\r\n initVerifyAcctStepData(results);\r\n ui.$sections.hide();\r\n updateProgressBar(targetValue);\r\n ui.$VerifyYourAccountStep.show();\r\n dataLayerPush(targetValue, targetStepNumberValue);\r\n }\r\n }\r\n }\r\n /*********************** End of STEP 2: Profile *************************/\r\n\r\n\r\n /*********************** STEP 3: Verify Your Account *************************/\r\n function hideStreetErrMsg() {\r\n const el = $(e.currentTarget);\r\n el.removeClass('error');\r\n el.parent('.verify-acct-step__street-address').find('.verify-acct-step__streetnum-errormsg').hide();\r\n }\r\n\r\n function initVerifyAcctStepData(data) {\r\n ui.$Step3GetChallengeData = data;\r\n\r\n //1. Assign gap length and street name to $('#ActivateAccountStreet')\r\n if (data.ChallengeResponse.addressChallenge != null) {\r\n $('.verify-acct-step__street-address').show();\r\n let n = data.ChallengeResponse.addressChallenge.gapLength;\r\n let spaces = new Array(++n).join('*');\r\n let address = data.ChallengeResponse.addressChallenge.preGap + spaces + data.ChallengeResponse.addressChallenge.postGap;\r\n ui.$Step3Street.html(address);\r\n } else {\r\n $('.verify-acct-step__street-address').hide();\r\n }\r\n\r\n //3. Create individual pet name radio option and append to list\r\n let petNamesResults = data.ChallengeResponse.petNameChallenge.choices;\r\n\r\n ui.$Step3PetNameList.empty();\r\n for (let i = 0; i < petNamesResults.length; i++) {\r\n let petNameItem = $(`\r\n <div class=\"verify-acct-step__radio-item\">\r\n <input id=\"ChoosePetName-${i}\" class=\"acct-choose-petname\" name=\"petname-radio-group\" type=\"radio\" data-name=\"${petNamesResults[i]}\">\r\n <label for=\"ChoosePetName-${i}\" class=\"control-radio__label\">${petNamesResults[i]}</label>\r\n </div>\r\n `);\r\n ui.$Step3PetNameList.append(petNameItem);\r\n }\r\n validatePetNameSelected();\r\n }\r\n\r\n function validatePetNameSelected() {\r\n $('.acct-choose-petname').on('click', () => {\r\n let radio = $(\"input[type=radio][name=petname-radio-group]\").filter(\":checked\")[0];\r\n\r\n if (radio) {\r\n $('.pet-name-errormsg').hide();\r\n }\r\n });\r\n }\r\n\r\n function validateVerifyAcctStep3() {\r\n let hospitalId = ui.$HospitalId;\r\n let clientId = ui.$Step3GetChallengeData.ClientId;\r\n let challengeSetId = ui.$Step3GetChallengeData.ChallengeResponse.id;\r\n let petNameChallengeId = ui.$Step3GetChallengeData.ChallengeResponse.petNameChallenge.id;\r\n let petNameChallengeAnswer = '';\r\n let addressChallengeId = \"\";\r\n let addressChallengeAnswer = \"\";\r\n\r\n if (ui.$Step3GetChallengeData.ChallengeResponse.addressChallenge != null) {\r\n addressChallengeId = ui.$Step3GetChallengeData.ChallengeResponse.addressChallenge.id;\r\n addressChallengeAnswer = ui.$Step3StreetNum.val();\r\n } \r\n\r\n let streetNumErrMsgWrapper = $('.verify-acct-step__streetnum-errormsg');\r\n let streetNumValid = false;\r\n let petNameSelected = false;\r\n\r\n ui.$Step3StreetNum.attr('value', addressChallengeAnswer);\r\n ui.$ClientId = clientId;\r\n\r\n\r\n //Validate if street number input has a value\r\n if (addressChallengeAnswer.trim() == '') {\r\n streetNumValid = false;\r\n ui.$Step3StreetNum.addClass('error');\r\n streetNumErrMsgWrapper.show();\r\n } else {\r\n streetNumValid = true;\r\n ui.$Step3StreetNum.removeClass('error');\r\n streetNumErrMsgWrapper.hide();\r\n }\r\n\r\n //Validate if a pet name has been selected\r\n let radio = $(\"input[type=radio][name=petname-radio-group]\").filter(\":checked\")[0];\r\n\r\n if (radio) {\r\n petNameSelected = true;\r\n petNameChallengeAnswer = $(radio).data('name');\r\n } else {\r\n petNameSelected = false;\r\n $('.pet-name-errormsg').show();\r\n }\r\n\r\n\r\n //Validate all required fields\r\n if (petNameSelected) {\r\n confirmChallenge(hospitalId, clientId, challengeSetId, addressChallengeId, addressChallengeAnswer, petNameChallengeId, petNameChallengeAnswer);\r\n }\r\n\r\n }\r\n\r\n async function confirmChallenge(hospitalId, clientId, challengeSetId, addressChallengeId, addressChallengeAnswer, petNameChallengeId, petNameChallengeAnswer) {\r\n\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n\r\n let payload = {\r\n hospitalId: hospitalId,\r\n clientId: clientId,\r\n challengeSetId: challengeSetId,\r\n addressChallengeId: addressChallengeId,\r\n addressChallengeAnswer: addressChallengeAnswer,\r\n petNameChallengeId: petNameChallengeId,\r\n petNameChallengeAnswer: petNameChallengeAnswer,\r\n '__RequestVerificationToken': ui.$RequestVerificationToken\r\n }\r\n\r\n let axiosConfig = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\r\n }\r\n }\r\n\r\n const url = `/myvca-api/confirm-challenge`;\r\n let api = new ApiService(url);\r\n const { data, success, error, IsAccountLocked} = await api.post(searchParams(payload), axiosConfig);\r\n\r\n if (!success || (error !== null && error !== '')) {\r\n alert(error);\r\n } else {\r\n let isValidUser = data;\r\n let accountLocked = IsAccountLocked;\r\n let errorMsgEl = $('#ValidUserFalse');\r\n\r\n\r\n if (!isValidUser) {\r\n if (!accountLocked) {\r\n errorMsgEl.text(\"One or more of the answers you provided was incorrect. Please try again.\");\r\n errorMsgEl.show();\r\n } else if (accountLocked) {\r\n errorMsgEl.text(\"One or more of the answers you provided was incorrect. For security purposes, we've locked your account. Please try again in 15 minutes\");\r\n errorMsgEl.show();\r\n ui.$Step3ContinueBtn.attr('disabled', 'disabled');\r\n }\r\n } else {\r\n errorMsgEl.hide();\r\n ui.$Step3ContinueBtn.removeAttr('disabled');\r\n \r\n let targetValue = ui.$Step3ContinueBtn.data('target');\r\n let targetStepNumberValue = ui.$Step3ContinueBtn.data('target-step-number');\r\n if (ui.$urlparamhascode) {\r\n ui.$Password = '';\r\n validateSetPasswordStep4();\r\n } else {\r\n ui.$sections.hide();\r\n ui.$SetPasswordStep.show();\r\n }\r\n updateProgressBar(targetValue);\r\n dataLayerPush(targetValue, targetStepNumberValue);\r\n }\r\n\r\n }\r\n }\r\n /*********************** End of STEP 3: Verify Your Account *************************/\r\n\r\n\r\n /*********************** STEP 4: Set Password *************************/\r\n function togglePassword() {\r\n // toggle the type attribute\r\n let passwordInput = $(this).closest('.form-label-group').find('.account-password-input');\r\n const type = $(passwordInput).attr('type') === 'password' ? 'text' : 'password';\r\n $(passwordInput).attr('type', type);\r\n // toggle the eye slash icon\r\n $(this).toggleClass('fa-eye-slash');\r\n }\r\n\r\n function validatePassword() {\r\n let passwordInput = this;\r\n let inputType = $(passwordInput).data('type');\r\n\r\n if (inputType == 'general-password') {\r\n let generalPwValue = $(passwordInput).val();\r\n $(passwordInput).attr('value', generalPwValue);\r\n generalPwFinalValue = generalPwValue;\r\n\r\n // Have one number\r\n const oneNumRegex = /\\d/;\r\n const hasOneNum = generalPwValue.match(oneNumRegex);\r\n let hasOneNumCircle = $('#PwOneNumber').siblings('.fill-circle');\r\n\r\n if (hasOneNum) {\r\n $(hasOneNumCircle).addClass('active');\r\n haveOneNumValid = true;\r\n } else {\r\n $(hasOneNumCircle).removeClass('active');\r\n haveOneNumValid = false;\r\n }\r\n\r\n //Have one uppercase character\r\n const oneUppercaseChar = /[A-Z]/;\r\n const hasOneUppercaseChar = generalPwValue.match(oneUppercaseChar);\r\n let hasOneUppercaseCircle = $('#PwOneUppercaseChar').siblings('.fill-circle');\r\n\r\n if (hasOneUppercaseChar) {\r\n $(hasOneUppercaseCircle).addClass('active');\r\n haveOneUppercaseValid = true;\r\n } else {\r\n $(hasOneUppercaseCircle).removeClass('active');\r\n haveOneUppercaseValid = false;\r\n }\r\n\r\n //Have one lowercase character\r\n const oneLowercaseChar = /[a-z]/;\r\n const hasOneLowercaseChar = generalPwValue.match(oneLowercaseChar);\r\n let hasOneLowercaseCircle = $('#PwOneLowercaseChar').siblings('.fill-circle');\r\n\r\n if (hasOneLowercaseChar) {\r\n $(hasOneLowercaseCircle).addClass('active');\r\n haveOneLowercaseValid = true;\r\n } else {\r\n $(hasOneLowercaseCircle).removeClass('active');\r\n haveOneLowercaseValid = false;\r\n }\r\n\r\n //Have one special chracter\r\n const oneSpecialChar = /[ `!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?~]/;\r\n const hasOneSpecialChar = generalPwValue.match(oneSpecialChar);\r\n let hasOneSpecialCircle = $('#PwOneSpecialChar').siblings('.fill-circle');\r\n\r\n if (hasOneSpecialChar) {\r\n $(hasOneSpecialCircle).addClass('active');\r\n haveOneSpecialCharValid = true;\r\n } else {\r\n $(hasOneSpecialCircle).removeClass('active');\r\n haveOneSpecialCharValid = false;\r\n }\r\n\r\n //Have 8 characters min\r\n const min8Char = /^(?=.*\\d).{8,}$/;\r\n const hasMin8Char = generalPwValue.match(min8Char);\r\n let hasMin8CharCircle = $('#PwMin8Char').siblings('.fill-circle');\r\n\r\n if (hasMin8Char) {\r\n $(hasMin8CharCircle).addClass('active');\r\n have8MinCharValid = true;\r\n } else {\r\n $(hasMin8CharCircle).removeClass('active');\r\n have8MinCharValid = false;\r\n }\r\n\r\n //Use case to see if passwords match\r\n let pwMatchCircle = $('#PasswordsMatch').siblings('.fill-circle');\r\n if (confirmPwFinalValue.trim() !== '' && generalPwFinalValue.trim() !== '' && confirmPwFinalValue == generalPwFinalValue) {\r\n $(pwMatchCircle).addClass('active');\r\n\r\n if (haveOneNumValid && haveOneUppercaseValid && haveOneLowercaseValid && haveOneSpecialCharValid && have8MinCharValid) {\r\n ui.$Password = generalPwValue;\r\n ui.$Step4ContinueBtn.removeAttr('disabled');\r\n }\r\n } else {\r\n $(pwMatchCircle).removeClass('active');\r\n ui.$Step4ContinueBtn.attr('disabled', 'disabled');\r\n }\r\n }\r\n\r\n if (inputType == 'confirm-password') {\r\n\r\n let confirmPwValue = $(passwordInput).val();\r\n let passwordsMatchCircle = $('#PasswordsMatch').siblings('.fill-circle');\r\n $(passwordInput).attr('value', confirmPwValue);\r\n confirmPwFinalValue = confirmPwValue;\r\n\r\n if (confirmPwFinalValue.trim() !== '' && generalPwFinalValue.trim() !== '' && confirmPwFinalValue == generalPwFinalValue) {\r\n $(passwordsMatchCircle).addClass('active');\r\n\r\n if (haveOneNumValid && haveOneUppercaseValid && haveOneLowercaseValid && haveOneSpecialCharValid && have8MinCharValid) {\r\n ui.$Password = confirmPwValue;\r\n ui.$Step4ContinueBtn.removeAttr('disabled');\r\n }\r\n } else {\r\n $(passwordsMatchCircle).removeClass('active');\r\n ui.$Step4ContinueBtn.attr('disabled', 'disabled');\r\n }\r\n }\r\n\r\n }\r\n\r\n function showTooltipModal(e) {\r\n let pwInputEl = $(e.currentTarget);\r\n pwInputEl.closest('.form-label-group').find('.password-tooltip').show();\r\n }\r\n\r\n function hideTooltipModal(e) {\r\n let pwInputEl = $(e.currentTarget);\r\n pwInputEl.closest('.form-label-group').find('.password-tooltip').hide();\r\n }\r\n\r\n function validateSetPasswordStep4() {\r\n ui.$Step4APIFired = true;\r\n\r\n let payload = {\r\n HospitalId: ui.$HospitalId,\r\n ClientId: ui.$ClientId,\r\n FirstName: ui.$FirstName,\r\n LastName: ui.$LastName,\r\n Email: ui.$Email,\r\n Phone: ui.$Phone,\r\n Password: ui.$Password,\r\n DatasourceId: ui.$DataSourceId,\r\n ChallengeSetId: ui.$Step3GetChallengeData.ChallengeResponse.id,\r\n '__RequestVerificationToken': ui.$RequestVerificationToken,\r\n IdentityProvider: IdentityProviderValue,\r\n PostType: PostTypeValue\r\n }\r\n ui.$Step4ErrorMsg.hide();\r\n\r\n if (ui.$Step4APIFired) {\r\n ui.$Step4APIFired = false;\r\n signUpUserAccount(payload);\r\n }\r\n }\r\n\r\n async function signUpUserAccount(payload) {\r\n ui.$Step4APIFired = true;\r\n\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n\r\n let axiosConfig = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\r\n }\r\n }\r\n\r\n const url = '/myvca-api/submit-signup';\r\n let api = new ApiService(url);\r\n const { data, success, error } = await api.post(searchParams(payload), axiosConfig);\r\n\r\n if (success && data !== null && data !== '' && data !== undefined) {\r\n window.VCA.AccountDatalayer.dataLayerActivateAcctSuccess();\r\n dataLayerPush('myvca-signup-success', 'final step');\r\n location.href = data;\r\n } else {\r\n if (ui.$urlparamhascode) {\r\n alert(error);\r\n } else {\r\n ui.$Step4ErrorMsg.html(error);\r\n ui.$Step4ErrorMsg.show();\r\n }\r\n }\r\n }\r\n /*********************** STEP 4: Set Password *************************/\r\n\r\n /** OTHER **/\r\n function backBtnClick() {\r\n let backBtn = this;\r\n let targetValue = $(backBtn).data('target');\r\n let targetStepNumberValue = $(backBtn).data('target-step-number');\r\n\r\n ui.$sections.hide();\r\n updateProgressBar(targetValue);\r\n $('section[data-step=\"' + targetValue + '\"').show();\r\n dataLayerPush(targetValue, targetStepNumberValue);\r\n }\r\n\r\n function updateProgressBar(targetValue) {\r\n let progressValue = $('section[data-step=\"' + targetValue + '\"').data('progress');\r\n $('.progress-bar').css('width', progressValue + '%').attr('aria-valuenow', progressValue);\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.ActivateAccountSetUp.init();\r\n});\r\n","let VCA = VCA || {};\r\n\r\nVCA.ForgotPassword = (function ($) {\r\n\r\n let ui = {};\r\n let emailValid = false;\r\n\r\n function cacheUI() {\r\n ui.$ForgotPasswordForm = $('#ForgotPasswordForm');\r\n ui.$ForgotPasswordInput = $('#ForgotPasswordEmail');\r\n ui.$InputContainer = $('.acct-forgot-password__main');\r\n ui.$SubmitBtn = $('#ForgotPasswordSubmitBtn');\r\n ui.$NavRedirectBtnContainer = $('.acct-forgot-password__nav-redirect');\r\n ui.$UnsuccessfulErrMsg = $('.acct-forgot-password__be-error-msg');\r\n ui.$SuccessMsg = $('.acct-forgot-password__be-success-msg');\r\n }\r\n \r\n function bindEvents() {\r\n ui.$ForgotPasswordInput.on('blur', validateEmailAddress);\r\n ui.$ForgotPasswordInput.on('keyup paste', hideErrorMessages);\r\n ui.$ForgotPasswordForm.on('submit', submitForm);\r\n }\r\n\r\n function hideErrorMessages(e) {\r\n const el = $(e.currentTarget);\r\n el.removeClass('has-error');\r\n el.parent().find('.input-error-text').hide();\r\n\r\n ui.$UnsuccessfulErrMsg.hide();\r\n ui.$SuccessMsg.hide();\r\n }\r\n\r\n function checkIfErrorMsgIsPresent() {\r\n let errorMsg = ui.$UnsuccessfulErrMsg.html().trim();\r\n\r\n if (errorMsg.length == 0) {\r\n ui.$UnsuccessfulErrMsg.hide();\r\n } else {\r\n ui.$InputContainer.addClass('adjust-margin');\r\n ui.$ForgotPasswordInput.addClass('has-error');\r\n ui.$UnsuccessfulErrMsg.show();\r\n }\r\n }\r\n\r\n function checkIfSuccessMsgIsPresent() {\r\n\r\n let successMsg = ui.$SuccessMsg.html().trim();\r\n\r\n if (successMsg.length == 0) {\r\n ui.$SuccessMsg.hide();\r\n } else {\r\n ui.$InputContainer.addClass('adjust-margin');\r\n ui.$SuccessMsg.show();\r\n window.VCA.AccountDatalayer.dataLayerForgotPasswordSuccess();\r\n }\r\n }\r\n\r\n function validateEmailAddress() {\r\n let email = ui.$ForgotPasswordInput.val();\r\n let emailRegex = /\\S+@\\S+\\.\\S+/;\r\n let validateEmail = emailRegex.test(email);\r\n\r\n ui.$ForgotPasswordInput.attr('value',email);\r\n\r\n if (email.trim() == '') {\r\n ui.$ForgotPasswordInput.addClass('has-error');\r\n ui.$ForgotPasswordInput.parent().find('.error-msg.required').show();\r\n ui.$ForgotPasswordInput.parent().find('.input-error-text').show();\r\n } else {\r\n ui.$ForgotPasswordInput.parent().find('.error-msg').hide();\r\n\r\n if (validateEmail) {\r\n ui.$ForgotPasswordInput.removeClass('has-error');\r\n ui.$ForgotPasswordInput.parent().find('.input-error-text').hide();\r\n emailValid = true;\r\n } else {\r\n ui.$ForgotPasswordInput.addClass('has-error');\r\n ui.$ForgotPasswordInput.parent().find('.error-msg.invalid').show();\r\n ui.$ForgotPasswordInput.parent().find('.input-error-text').show();\r\n emailValid = false;\r\n }\r\n }\r\n }\r\n \r\n function submitForm(e) {\r\n validateEmailAddress();\r\n\r\n if (emailValid) {\r\n return true;\r\n } else {\r\n e.preventDefault();\r\n return false;\r\n }\r\n }\r\n\r\n function init() {\r\n if ($('.acct-forgot-password').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n bindEvents();\r\n checkIfErrorMsgIsPresent();\r\n checkIfSuccessMsgIsPresent();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.ForgotPassword.init();\r\n});","let VCA = VCA || {};\r\n\r\nVCA.GuestAccountSetUp = (function ($) {\r\n let ui = {};\r\n let petCountIdxNum = 0;\r\n let haveOneNumValid = false;\r\n let haveOneUppercaseValid = false;\r\n let haveOneLowercaseValid = false;\r\n let haveOneSpecialCharValid = false;\r\n let have8MinCharValid = false;\r\n let generalPwFinalValue = '';\r\n let confirmPwFinalValue = '';\r\n\r\n function cacheUI() {\r\n //Sections\r\n ui.$sections = $('section.js-account-step');\r\n ui.$ProfileStep = $('section[data-step=\"profile\"]');\r\n ui.$PrimaryAddressStep = $('section[data-step=\"primary-address\"]');\r\n ui.$PetsInfoStep = $('section[data-step=\"pets-info\"]');\r\n ui.$SetPasswordStep = $('section[data-step=\"set-password\"]');\r\n ui.$loginHelpModal = $('#loginHelpModal');\r\n\r\n //Step1 - Profile\r\n ui.$Step1ContinueBtn = $('#GuestAcctProfileContinueBtn');\r\n ui.$Step1Email = $('#GuestAccountEmail');\r\n ui.$Step1FirstName = $('#GuestAccountFName');\r\n ui.$Step1LastName = $('#GuestAccountLName');\r\n ui.$Step1PhoneNum = $('#GuestAccountPhoneNum');\r\n\r\n //Step2 - Primary Address\r\n ui.$Step2ContinueBtn = $('#GuestAcctPrimaryAddressContinueBtn');\r\n ui.$Step2Address1 = $('#GuestAccountAddress1');\r\n ui.$Step2Address2 = $('#GuestAccountAddress2');\r\n ui.$Step2City = $('#GuestAccountCity');\r\n ui.$Step2State = $('#GuestAccountState');\r\n ui.$Step2ZipCode = $('#GuestAccountZipCode');\r\n ui.$Step2Country = $('#GuestAccountCountry');\r\n ui.$IsCanadaHiddenInput = $('#IsCanada');\r\n\r\n //Step 3 - Pet's Info\r\n ui.$Step3ContinueBtn = $('#GuestAcctPetsInfoContinueBtn');\r\n ui.$SelectPet = $('button.pet-selection');\r\n ui.$AddPetBtn = $('button.add-another-pet');\r\n\r\n //Step4 - Set Password\r\n ui.$Step4ContinueBtn = $('#GuestAcctPasswordContinueBtn');\r\n ui.$PasswordInput = $('.account-password-input');\r\n ui.$PasswordEyeIcon = $('.password-eye-icon');\r\n ui.$Step4GuestAcctErrMsg = $('#GuestAccountErrorMsg');\r\n\r\n //Back Btn\r\n ui.$BackBtn = $('.account-setup__back-btn');\r\n ui.$Step4BackBtn = $('section[data-step=\"set-password\"]').find('.account-setup__back-btn');\r\n\r\n //Other\r\n ui.$InputEl = $('input');\r\n ui.$Loader = $('.account-setup__loading-gif');\r\n }\r\n\r\n function bindEvents() {\r\n ui.$Step1ContinueBtn.on('click', validateProfileStep1);\r\n ui.$Step2ContinueBtn.on('click', validatePrimaryAddressStep2);\r\n ui.$Step3ContinueBtn.on('click', addPetsInfoStep3);\r\n ui.$Step4ContinueBtn.on('click', sendDataLayer);\r\n ui.$Step4ContinueBtn.on('click', showLoader);\r\n\r\n ui.$Step1PhoneNum.on('keydown', detectKeydown);\r\n ui.$SelectPet.on('click', hideSelectPetErrMsg);\r\n ui.$AddPetBtn.on('click', addPet);\r\n ui.$PasswordEyeIcon.on('click', togglePassword);\r\n ui.$PasswordInput.on('focus', showTooltipModal);\r\n ui.$PasswordInput.on('blur', hideTooltipModal);\r\n ui.$PasswordInput.on('keyup paste', validatePassword);\r\n ui.$InputEl.on('keyup paste', hideErrorMessages);\r\n ui.$BackBtn.on('click', backBtnClick);\r\n ui.$Step4BackBtn.on('click', hideStep4ErrMsg);\r\n $('.js-account-step').find('.js-login-help-btn').on('click', helpModal);\r\n hideLoginModal();\r\n }\r\n\r\n function init() {\r\n if ($('.guest-account-setup').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n bindEvents();\r\n checkIfErrorMsgIsPresent();\r\n selectPet();\r\n deletePet();\r\n initSelectedPet();\r\n }\r\n\r\n function helpModal(e){\r\n e.preventDefault();\r\n ui.$loginHelpModal.modal('show');\r\n }\r\n\r\n function hideLoginModal() {\r\n ui.$loginHelpModal.on('hide.bs.modal', function () {\r\n const getUrl = ui.$loginHelpModal.find('iframe').attr('src');\r\n ui.$loginHelpModal.find('iframe').removeAttr('src');\r\n ui.$loginHelpModal.find('iframe').attr('src', getUrl);\r\n });\r\n }\r\n\r\n function hideErrorMessages(e) {\r\n const el = $(e.currentTarget);\r\n el.removeClass('error');\r\n el.closest('.form-label-group').find('.input-error-text').hide();\r\n }\r\n\r\n function checkIfErrorMsgIsPresent() {\r\n let errorMsg = ui.$Step4GuestAcctErrMsg.html().trim();\r\n\r\n if (errorMsg.length == 0) {\r\n let targetValue = 'profile';\r\n updateProgressBar(targetValue);\r\n ui.$Step4GuestAcctErrMsg.hide();\r\n ui.$ProfileStep.show();\r\n } else {\r\n let targetValue = ui.$Step3ContinueBtn.data('target');\r\n ui.$sections.hide();\r\n updateProgressBar(targetValue);\r\n ui.$Step4GuestAcctErrMsg.show();\r\n ui.$SetPasswordStep.show();\r\n }\r\n }\r\n\r\n function detectKeydown(e) {\r\n if (e.which === 38 || e.which === 40) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n function validateProfileStep1() {\r\n let email = ui.$Step1Email.val();\r\n let firstName = ui.$Step1FirstName.val();\r\n let lastName = ui.$Step1LastName.val();\r\n let phoneNum = ui.$Step1PhoneNum.val();\r\n let emailValid = false;\r\n let firstNameValid = false;\r\n let lastNameValid = false;\r\n let phoneNumValid = false;\r\n\r\n ui.$Step1Email.attr('value',email);\r\n ui.$Step1FirstName.attr('value', firstName);\r\n ui.$Step1LastName.attr('value', lastName);\r\n ui.$Step1PhoneNum.attr('value', phoneNum);\r\n\r\n //Validate email\r\n let emailRegex = /\\S+@\\S+\\.\\S+/;\r\n let validateEmail = emailRegex.test(email);\r\n\r\n if (email.trim() == '') {\r\n ui.$Step1Email.addClass('error');\r\n ui.$Step1Email.parent().find('.error-msg.required').show();\r\n ui.$Step1Email.parent().find('.input-error-text').show();\r\n } else {\r\n ui.$Step1Email.parent().find('.error-msg').hide();\r\n\r\n if (validateEmail) {\r\n ui.$Step1Email.removeClass('error');\r\n ui.$Step1Email.parent().find('.input-error-text').hide();\r\n emailValid = true;\r\n } else {\r\n ui.$Step1Email.addClass('error');\r\n ui.$Step1Email.parent().find('span.error-msg.invalid').show();\r\n ui.$Step1Email.parent().find('.input-error-text').show();\r\n }\r\n }\r\n \r\n //Validate first name and last name\r\n if (firstName.trim() == '') {\r\n ui.$Step1FirstName.addClass('error');\r\n ui.$Step1FirstName.parent().find('.input-error-text').show();\r\n } else {\r\n ui.$Step1FirstName.removeClass('error');\r\n ui.$Step1FirstName.parent().find('.input-error-text').hide();\r\n firstNameValid = true;\r\n }\r\n\r\n if (lastName.trim() == '') {\r\n ui.$Step1LastName.addClass('error');\r\n ui.$Step1LastName.parent().find('.input-error-text').show();\r\n } else {\r\n ui.$Step1LastName.removeClass('error');\r\n ui.$Step1LastName.parent().find('.input-error-text').hide();\r\n lastNameValid = true;\r\n }\r\n\r\n //valid Phone Number\r\n if (phoneNum == '') {\r\n ui.$Step1PhoneNum.addClass('error');\r\n ui.$Step1PhoneNum.parent().find('.error-msg.required').show();\r\n ui.$Step1PhoneNum.parent().find('.input-error-text').show();\r\n } else {\r\n ui.$Step1PhoneNum.parent().find('.error-msg').hide();\r\n\r\n if (phoneNum.length == 10) {\r\n ui.$Step1PhoneNum.removeClass('error');\r\n ui.$Step1PhoneNum.parent().find('.input-error-text').hide();\r\n phoneNumValid = true;\r\n } else {\r\n ui.$Step1PhoneNum.addClass('error');\r\n ui.$Step1PhoneNum.parent().find('span.error-msg.invalid').show();\r\n ui.$Step1PhoneNum.parent().find('.input-error-text').show();\r\n }\r\n }\r\n\r\n //If all input fields are valid --> Move on to STEP 2\r\n if (emailValid && firstNameValid && lastNameValid && phoneNumValid) {\r\n let targetValue = ui.$Step1ContinueBtn.data('target');\r\n\r\n ui.$sections.hide();\r\n updateProgressBar(targetValue);\r\n ui.$PrimaryAddressStep.show();\r\n }\r\n }\r\n\r\n function validatePrimaryAddressStep2() {\r\n let address1 = ui.$Step2Address1.val();\r\n let address2 = ui.$Step2Address2.val();\r\n let city = ui.$Step2City.val();\r\n let state = ui.$Step2State.val();\r\n let zipCode = ui.$Step2ZipCode.val();\r\n let country = ui.$Step2Country.val();\r\n\r\n let address1Valid = false;\r\n let cityValid = false;\r\n let stateValid = false;\r\n let zipCodeValid = false;\r\n let countryValid = false;\r\n\r\n ui.$Step2Address1.attr('value',address1);\r\n ui.$Step2Address2.attr('value', address2);\r\n ui.$Step2City.attr('value', city);\r\n ui.$Step2State.attr('value', state);\r\n ui.$Step2ZipCode.attr('value', zipCode);\r\n ui.$Step2Country.attr('value', country);\r\n\r\n //Country - Canada \r\n if (country.toLowerCase() == 'canada') {\r\n ui.$IsCanadaHiddenInput.val('true');\r\n } else {\r\n ui.$IsCanadaHiddenInput.val('false');\r\n }\r\n\r\n //Validate Address 1\r\n if (address1.trim() == '') {\r\n ui.$Step2Address1.addClass('error');\r\n ui.$Step2Address1.parent().find('.input-error-text').show();\r\n } else {\r\n ui.$Step2Address1.removeClass('error');\r\n ui.$Step2Address1.parent().find('.input-error-text').hide();\r\n address1Valid = true;\r\n }\r\n\r\n //Validate City\r\n if (city.trim() == '') {\r\n ui.$Step2City.addClass('error');\r\n ui.$Step2City.parent().find('.input-error-text').show();\r\n } else {\r\n ui.$Step2City.removeClass('error');\r\n ui.$Step2City.parent().find('.input-error-text').hide();\r\n cityValid = true;\r\n }\r\n\r\n //Validate State\r\n if (state && state !== 'State*') {\r\n ui.$Step2State.removeClass('error');\r\n ui.$Step2State.parent().find('.input-error-text').hide();\r\n stateValid = true;\r\n } else {\r\n ui.$Step2State.addClass('error');\r\n ui.$Step2State.parent().find('.input-error-text').show();\r\n }\r\n\r\n\r\n //Validate ZipCode\r\n let canadaZipCodeRegex = /^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ -]?\\d[ABCEGHJ-NPRSTV-Z]\\d$/i;\r\n\r\n if (isCanada) { //Use case for Canada zipcode\r\n if (zipCode.trim() == '') {\r\n ui.$Step2ZipCode.addClass('error');\r\n ui.$Step2ZipCode.parent().find('.error-msg.required').show();\r\n ui.$Step2ZipCode.parent().find('.input-error-text').show();\r\n } else {\r\n let isValidCanadaZipCode = canadaZipCodeRegex.test(zipCode);\r\n ui.$Step2ZipCode.parent().find('.error-msg').hide();\r\n\r\n if (isValidCanadaZipCode) {\r\n ui.$Step2ZipCode.removeClass('error');\r\n ui.$Step2ZipCode.parent().find('.input-error-text').hide();\r\n zipCodeValid = true;\r\n } else {\r\n ui.$Step2ZipCode.addClass('error');\r\n ui.$Step2ZipCode.parent().find('.error-msg.invalid').show();\r\n ui.$Step2ZipCode.parent().find('.input-error-text').show();\r\n }\r\n }\r\n } else { // CANADA COUNTRY NOT SELECTED\r\n if (isNaN(zipCode) == false && zipCode.length == 5) {\r\n ui.$Step2ZipCode.removeClass('error');\r\n ui.$Step2ZipCode.parent().find('.input-error-text').hide();\r\n zipCodeValid = true;\r\n } else if (zipCode.trim() == '') {\r\n ui.$Step2ZipCode.addClass('error');\r\n ui.$Step2ZipCode.parent().find('.error-msg.required').show();\r\n ui.$Step2ZipCode.parent().find('.input-error-text').show();\r\n } else {\r\n ui.$Step2ZipCode.addClass('error');\r\n ui.$Step2ZipCode.parent().find('.error-msg.invalid').show();\r\n ui.$Step2ZipCode.parent().find('.input-error-text').show();\r\n }\r\n }\r\n\r\n\r\n //Validate Country\r\n if (country && country !== 'Country*') {\r\n ui.$Step2Country.removeClass('error');\r\n ui.$Step2Country.parent().find('.input-error-text').hide();\r\n countryValid = true;\r\n } else {\r\n ui.$Step2Country.addClass('error');\r\n ui.$Step2Country.parent().find('.input-error-text').show();\r\n }\r\n\r\n //If all input fields are valid --> Move on to STEP 3\r\n if (address1Valid && cityValid && stateValid && zipCodeValid && countryValid) {\r\n let targetValue = ui.$Step2ContinueBtn.data('target');\r\n\r\n ui.$sections.hide();\r\n updateProgressBar(targetValue);\r\n ui.$PetsInfoStep.show();\r\n }\r\n\r\n }\r\n\r\n function addPetsInfoStep3() {\r\n let petList = $('.pet-info__list');\r\n let petInfoItem = $('.pet-info__pet');\r\n let petNameInputValid = false;\r\n let petTypeValid = false;\r\n\r\n //Validate input text field && if user selected pet type\r\n petList.find(petInfoItem).each((index,petItem) => {\r\n let petNameInput = $(`#GuestAccountPetName-${index}`);\r\n let petNameValue = petNameInput.val(); \r\n petNameInput.attr('value',petNameValue);\r\n\r\n if (petNameValue.trim() == '') {\r\n petNameInput.addClass('error');\r\n petNameInput.parent().find('.input-error-text').show();\r\n } else {\r\n petNameInput.removeClass('error');\r\n petNameInput.parent().find('.input-error-text').hide();\r\n }\r\n\r\n //Validate if user selected dog or cat\r\n let petTypeBtnsWrapper = $(petItem).find('.pet-info__pet-option')[0];\r\n let petTypeSelected = $(petTypeBtnsWrapper).children('div').children().children('button.pet-selection.active').length != 0;\r\n let errorMsgContainer = $(petTypeBtnsWrapper).find('.pet-error-text');\r\n\r\n if (!petTypeSelected) {\r\n $(petTypeBtnsWrapper).addClass('error');\r\n $(errorMsgContainer).show();\r\n } else {\r\n $(petTypeBtnsWrapper).removeClass('error');\r\n $(errorMsgContainer).hide();\r\n }\r\n\r\n });\r\n\r\n //Validate if all input text fields have been filled out && if pet types have been selected\r\n let petNameInputFieldsErrors = $(petInfoItem).children('.form-label-group').children('.pet-input.error').length != 0;\r\n petNameInputValid = petNameInputFieldsErrors ? false : true ;\r\n\r\n let petTypeOptionsErrors = $(petInfoItem).children('.pet-info__pet-option.error').length != 0;\r\n petTypeValid = petTypeOptionsErrors ? false : true ;\r\n\r\n\r\n //If all input fields && pet types are valid --> Move on to STEP 4\r\n if (petNameInputValid && petTypeValid) {\r\n let targetValue = ui.$Step3ContinueBtn.data('target');\r\n\r\n ui.$sections.hide();\r\n updateProgressBar(targetValue);\r\n ui.$SetPasswordStep.show();\r\n }\r\n }\r\n\r\n function initSelectedPet() {\r\n ui.$SelectPet.each((x,btn) => {\r\n if ($(btn).data('selected') == true) {\r\n let speciesId = $(btn).data('speciesid');\r\n $(btn).addClass('active');\r\n $(btn).parents('.pet-info__pet').find('.pet-speciesid-input').val(speciesId);\r\n }\r\n }); \r\n }\r\n\r\n function selectPet() {\r\n $('body').on('click', 'button.pet-selection', function (e) {\r\n\r\n let el = e.currentTarget;\r\n let isActive = $(el).hasClass('active');\r\n let selectedPetSpeciesId = '';\r\n \r\n if (!isActive) {\r\n $(el).parent().find('.pet-selection').each((x,y) => {\r\n $(y).removeClass('active');\r\n selectedPetSpeciesId = '';\r\n });\r\n $(el).addClass('active');\r\n selectedPetSpeciesId = $(el).data('speciesid');\r\n \r\n } else {\r\n $(el).removeClass('active');\r\n selectedPetSpeciesId = '';\r\n }\r\n \r\n //Update speciesId value to hidden input\r\n let inputGroup = $(el).closest('.pet-info__pet').find('.form-label-group');\r\n $(inputGroup).find('.pet-speciesid-input').val(selectedPetSpeciesId);\r\n });\r\n }\r\n\r\n function hideSelectPetErrMsg(e) {\r\n let btn = $(e.currentTarget);\r\n $(btn).parents('.pet-info__pet-option').find('.pet-error-text').hide();\r\n }\r\n\r\n function deletePet() {\r\n $('body').on('click', 'button.pet-info__delete-btn', function (e) {\r\n let deleteBtn = e.currentTarget;\r\n let petItemContainer = $(deleteBtn).closest('.pet-info__pet')[0];\r\n $(petItemContainer).remove();\r\n updateIdxPosition();\r\n });\r\n }\r\n\r\n function addPet() {\r\n petCountIdxNum++;\r\n\r\n let addPetContainer = $(`\r\n <div class=\"pet-info__pet\">\r\n <div class=\"form-label-group\">\r\n <input id=\"GuestAccountPetName-${petCountIdxNum}\" class=\"pet-input\" name=\"Form.Pets[${petCountIdxNum}].PetName\" type=\"text\" placeholder=\"Pet Name\" value=\"\">\r\n <label for=\"GuestAccountPetName-${petCountIdxNum}\">Pet Name</label>\r\n <input id=\"Form_Pets_${petCountIdxNum}__SpeciesId\" class=\"pet-speciesid-input\" name=\"Form.Pets[${petCountIdxNum}].SpeciesId\" type=\"hidden\" value=\"\">\r\n <div class=\"input-error-text\" style=\"display: none;\">\r\n <i class=\"fas fa-exclamation-circle error-icon\"></i>\r\n <span class=\"error-msg\">Pet Name Required</span>\r\n </div>\r\n </div>\r\n <div class=\"pet-info__pet-option\">\r\n <div class=\"d-flex flex-row justify-content-between\">\r\n <div class=\"d-flex flex-row\">\r\n <button class=\"pet-selection\" type=\"button\" data-speciesId=\"1\" data-selected=\"false\"> \r\n <img class=\"off-hover-icon\" src=\"../../../images-2/dog-dark.svg\" alt=\"Dog Icon\">\r\n <img class=\"on-hover-icon\" src=\"../../../images-2/dog-light.svg\" alt=\"Dog Hover Icon\">\r\n Dog\r\n </button>\r\n <button class=\"pet-selection\" type=\"button\" data-speciesId=\"2\" data-selected=\"false\">\r\n <img class=\"off-hover-icon\" src=\"../../../images-2/cat-dark.svg\" alt=\"Cat Icon\">\r\n <img class=\"on-hover-icon\" src=\"../../../images-2/cat-light.svg\" alt=\"Cat Hover Icon\">\r\n Cat\r\n </button>\r\n </div>\r\n <button class=\"pet-info__delete-btn\" type=\"button\">Delete</button>\r\n </div>\r\n <div class=\"pet-error-text\" style=\"display: none;\">\r\n <i class=\"fas fa-exclamation-circle error-icon\"></i>\r\n <span class=\"error-msg\">Pet Type Required</span>\r\n </div>\r\n </div>\r\n </div>\r\n `);\r\n\r\n $('.pet-info__list').append(addPetContainer);\r\n updateIdxPosition();\r\n $('input.pet-input').on('keyup paste', hideErrorMessages);\r\n $('.pet-selection').on('click', hideSelectPetErrMsg);\r\n }\r\n\r\n function updateIdxPosition() {\r\n let updatedPetList = $('.pet-info__list');\r\n $(updatedPetList).find('.pet-info__pet').each((index,petContainer) => {\r\n $(petContainer).find('.pet-input').attr({id: `GuestAccountPetName-${index}`, name: `Form.Pets[${index}].PetName`});\r\n $(petContainer).find('label').attr('for', `GuestAccountPetName-${index}`);\r\n $(petContainer).find('.pet-speciesid-input').attr({id: `Form_Pets_${index}__SpeciesId`, name: `Form.Pets[${index}].SpeciesId`});\r\n petCountIdxNum = index;\r\n });\r\n } \r\n\r\n function togglePassword() {\r\n // toggle the type attribute\r\n let passwordInput = $(this).closest('.form-label-group').find('.account-password-input');\r\n const type = $(passwordInput).attr('type') === 'password' ? 'text' : 'password';\r\n $(passwordInput).attr('type', type);\r\n // toggle the eye slash icon\r\n $(this).toggleClass('fa-eye-slash');\r\n }\r\n\r\n function validatePassword() {\r\n let passwordInput = this;\r\n let inputType = $(passwordInput).data('type');\r\n\r\n if (inputType == 'general-password'){\r\n let generalPwValue = $(passwordInput).val();\r\n $(passwordInput).attr('value', generalPwValue);\r\n generalPwFinalValue = generalPwValue;\r\n\r\n // Have one number\r\n const oneNumRegex = /\\d/;\r\n const hasOneNum = generalPwValue.match(oneNumRegex);\r\n let hasOneNumCircle = $('#PwOneNumber').siblings('.fill-circle');\r\n\r\n if (hasOneNum) {\r\n $(hasOneNumCircle).addClass('active');\r\n haveOneNumValid = true;\r\n } else {\r\n $(hasOneNumCircle).removeClass('active'); \r\n haveOneNumValid = false;\r\n }\r\n\r\n //Have one uppercase character\r\n const oneUppercaseChar = /[A-Z]/;\r\n const hasOneUppercaseChar = generalPwValue.match(oneUppercaseChar);\r\n let hasOneUppercaseCircle = $('#PwOneUppercaseChar').siblings('.fill-circle');\r\n\r\n if (hasOneUppercaseChar) {\r\n $(hasOneUppercaseCircle).addClass('active');\r\n haveOneUppercaseValid = true;\r\n } else {\r\n $(hasOneUppercaseCircle).removeClass('active');\r\n haveOneUppercaseValid = false;\r\n }\r\n\r\n //Have one lowercase character\r\n const oneLowercaseChar = /[a-z]/;\r\n const hasOneLowercaseChar = generalPwValue.match(oneLowercaseChar);\r\n let hasOneLowercaseCircle = $('#PwOneLowercaseChar').siblings('.fill-circle');\r\n\r\n if (hasOneLowercaseChar) {\r\n $(hasOneLowercaseCircle).addClass('active');\r\n haveOneLowercaseValid = true;\r\n } else {\r\n $(hasOneLowercaseCircle).removeClass('active');\r\n haveOneLowercaseValid = false;\r\n }\r\n\r\n //Have one special chracter\r\n const oneSpecialChar = /[ `!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?~]/;\r\n const hasOneSpecialChar = generalPwValue.match(oneSpecialChar);\r\n let hasOneSpecialCircle = $('#PwOneSpecialChar').siblings('.fill-circle');\r\n\r\n if (hasOneSpecialChar) {\r\n $(hasOneSpecialCircle).addClass('active');\r\n haveOneSpecialCharValid = true;\r\n } else {\r\n $(hasOneSpecialCircle).removeClass('active');\r\n haveOneSpecialCharValid = false;\r\n }\r\n\r\n //Have 8 characters min\r\n const min8Char = /^(?=.*\\d).{8,}$/;\r\n const hasMin8Char = generalPwValue.match(min8Char);\r\n let hasMin8CharCircle = $('#PwMin8Char').siblings('.fill-circle');\r\n\r\n if (hasMin8Char) {\r\n $(hasMin8CharCircle).addClass('active');\r\n have8MinCharValid = true;\r\n } else {\r\n $(hasMin8CharCircle).removeClass('active');\r\n have8MinCharValid = false;\r\n }\r\n\r\n //Use case to see if passwords match\r\n let pwMatchCircle = $('#PasswordsMatch').siblings('.fill-circle');\r\n if (confirmPwFinalValue.trim() !== '' && generalPwFinalValue.trim() !== '' && confirmPwFinalValue == generalPwFinalValue) {\r\n $(pwMatchCircle).addClass('active');\r\n\r\n if (haveOneNumValid && haveOneUppercaseValid && haveOneLowercaseValid && haveOneSpecialCharValid && have8MinCharValid) {\r\n ui.$Step4ContinueBtn.removeAttr('disabled');\r\n }\r\n } else {\r\n $(pwMatchCircle).removeClass('active');\r\n ui.$Step4ContinueBtn.attr('disabled', 'disabled');\r\n }\r\n } \r\n\r\n if (inputType == 'confirm-password'){\r\n\r\n let confirmPwValue = $(passwordInput).val();\r\n let passwordsMatchCircle = $('#PasswordsMatch').siblings('.fill-circle');\r\n $(passwordInput).attr('value', confirmPwValue);\r\n confirmPwFinalValue = confirmPwValue;\r\n\r\n if (confirmPwFinalValue.trim() !== '' && generalPwFinalValue.trim() !== '' && confirmPwFinalValue == generalPwFinalValue) {\r\n $(passwordsMatchCircle).addClass('active');\r\n if (haveOneNumValid && haveOneUppercaseValid && haveOneLowercaseValid && haveOneSpecialCharValid && have8MinCharValid) {\r\n ui.$Step4ContinueBtn.removeAttr('disabled');\r\n }\r\n } else {\r\n $(passwordsMatchCircle).removeClass('active');\r\n ui.$Step4ContinueBtn.attr('disabled', 'disabled');\r\n }\r\n }\r\n \r\n }\r\n\r\n function showLoader() {\r\n let btnDisabledStatus = ui.$Step4ContinueBtn.is(':disabled');\r\n\r\n if (!btnDisabledStatus) {\r\n ui.$Loader.show();\r\n }\r\n }\r\n\r\n function showTooltipModal(e) {\r\n let pwInputEl = $(e.currentTarget);\r\n pwInputEl.closest('.form-label-group').find('.password-tooltip').show(); \r\n }\r\n\r\n function hideTooltipModal(e) {\r\n let pwInputEl = $(e.currentTarget);\r\n pwInputEl.closest('.form-label-group').find('.password-tooltip').hide(); \r\n }\r\n\r\n function hideStep4ErrMsg() {\r\n ui.$Step4GuestAcctErrMsg.hide();\r\n }\r\n\r\n function backBtnClick() {\r\n let backBtn = this;\r\n let targetValue = $(backBtn).data('target');\r\n\r\n ui.$sections.hide();\r\n updateProgressBar(targetValue);\r\n $('section[data-step=\"' + targetValue + '\"').show();\r\n }\r\n\r\n function updateProgressBar(targetValue) {\r\n let progressValue = $('section[data-step=\"' + targetValue + '\"').data('progress');\r\n $('.progress-bar').css('width', progressValue+'%').attr('aria-valuenow', progressValue);\r\n }\r\n\r\n function sendDataLayer() {\r\n window.VCA.AccountDatalayer.dataLayerCreateGuestAcctSuccess();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.GuestAccountSetUp.init();\r\n});","let VCA = VCA || {};\r\n\r\nVCA.ResetPassword = (function ($) {\r\n\r\n let ui = {};\r\n let haveOneNumValid = false;\r\n let haveOneUppercaseValid = false;\r\n let haveOneLowercaseValid = false;\r\n let haveOneSpecialCharValid = false;\r\n let have8MinCharValid = false;\r\n let generalPwFinalValue = '';\r\n let confirmPwFinalValue = '';\r\n let passwordValidAndMatched = false;\r\n\r\n function cacheUI() {\r\n ui.$ResetPasswordForm = $('#ResetPasswordForm');\r\n ui.$ResetPasswordBtn = $('#ResetPasswordSubmitBtn');\r\n ui.$ResetPasswordInput = $('.reset-password-input');\r\n ui.$UnsuccessfulErrMsg = $('.acct-reset-password__be-error-msg');\r\n ui.$SuccessMsg = $('.acct-reset-password__be-success-msg');\r\n ui.$PasswordEyeIcon = $('.password-eye-icon');\r\n }\r\n \r\n function bindEvents() {\r\n ui.$PasswordEyeIcon.on('click', togglePassword);\r\n ui.$ResetPasswordInput.on('focus', showTooltipModal);\r\n ui.$ResetPasswordInput.on('blur', hideTooltipModal);\r\n ui.$ResetPasswordInput.on('keyup paste', validatePassword);\r\n ui.$ResetPasswordForm.on('submit', submitForm);\r\n }\r\n\r\n function checkIfErrorMsgIsPresent() {\r\n let errorMsg = ui.$UnsuccessfulErrMsg.html().trim();\r\n\r\n if (errorMsg.length == 0) {\r\n ui.$UnsuccessfulErrMsg.hide();\r\n } else {\r\n ui.$UnsuccessfulErrMsg.show();\r\n }\r\n }\r\n\r\n function checkIfSuccessMsgIsPresent() {\r\n\r\n let successMsg = ui.$SuccessMsg.html().trim();\r\n\r\n if (successMsg.length == 0) {\r\n ui.$SuccessMsg.hide();\r\n } else {\r\n ui.$SuccessMsg.show();\r\n window.VCA.AccountDatalayer.dataLayerResetPasswordSuccess();\r\n }\r\n }\r\n\r\n function togglePassword() {\r\n // toggle the type attribute\r\n let passwordInput = $(this).closest('.form-label-group').find('.reset-password-input');\r\n const type = $(passwordInput).attr('type') === 'password' ? 'text' : 'password';\r\n $(passwordInput).attr('type', type);\r\n // toggle the eye slash icon\r\n $(this).toggleClass('fa-eye-slash');\r\n }\r\n\r\n function showTooltipModal(e) {\r\n let pwInputEl = $(e.currentTarget);\r\n pwInputEl.closest('.form-label-group').find('.password-tooltip').show(); \r\n }\r\n\r\n function hideTooltipModal(e) {\r\n let pwInputEl = $(e.currentTarget);\r\n pwInputEl.closest('.form-label-group').find('.password-tooltip').hide(); \r\n }\r\n\r\n function validatePassword() {\r\n let passwordInput = this;\r\n let inputType = $(passwordInput).data('type');\r\n\r\n ui.$ResetPasswordInput.removeClass('error');\r\n ui.$UnsuccessfulErrMsg.hide();\r\n ui.$SuccessMsg.hide();\r\n\r\n if (inputType == 'general-password'){\r\n let generalPwValue = $(passwordInput).val();\r\n $(passwordInput).attr('value', generalPwValue);\r\n generalPwFinalValue = generalPwValue;\r\n\r\n // Have one number\r\n const oneNumRegex = /\\d/;\r\n const hasOneNum = generalPwValue.match(oneNumRegex);\r\n let hasOneNumCircle = $('#PwOneNumber').siblings('.fill-circle');\r\n\r\n if (hasOneNum) {\r\n $(hasOneNumCircle).addClass('active');\r\n haveOneNumValid = true;\r\n } else {\r\n $(hasOneNumCircle).removeClass('active'); \r\n haveOneNumValid = false;\r\n }\r\n\r\n //Have one uppercase character\r\n const oneUppercaseChar = /[A-Z]/;\r\n const hasOneUppercaseChar = generalPwValue.match(oneUppercaseChar);\r\n let hasOneUppercaseCircle = $('#PwOneUppercaseChar').siblings('.fill-circle');\r\n\r\n if (hasOneUppercaseChar) {\r\n $(hasOneUppercaseCircle).addClass('active');\r\n haveOneUppercaseValid = true;\r\n } else {\r\n $(hasOneUppercaseCircle).removeClass('active');\r\n haveOneUppercaseValid = false;\r\n }\r\n\r\n //Have one lowercase character\r\n const oneLowercaseChar = /[a-z]/;\r\n const hasOneLowercaseChar = generalPwValue.match(oneLowercaseChar);\r\n let hasOneLowercaseCircle = $('#PwOneLowercaseChar').siblings('.fill-circle');\r\n\r\n if (hasOneLowercaseChar) {\r\n $(hasOneLowercaseCircle).addClass('active');\r\n haveOneLowercaseValid = true;\r\n } else {\r\n $(hasOneLowercaseCircle).removeClass('active');\r\n haveOneLowercaseValid = false;\r\n }\r\n\r\n //Have one special chracter\r\n const oneSpecialChar = /[ `!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?~]/;\r\n const hasOneSpecialChar = generalPwValue.match(oneSpecialChar);\r\n let hasOneSpecialCircle = $('#PwOneSpecialChar').siblings('.fill-circle');\r\n\r\n if (hasOneSpecialChar) {\r\n $(hasOneSpecialCircle).addClass('active');\r\n haveOneSpecialCharValid = true;\r\n } else {\r\n $(hasOneSpecialCircle).removeClass('active');\r\n haveOneSpecialCharValid = false;\r\n }\r\n\r\n //Have 8 characters min\r\n const min8Char = /^(?=.*\\d).{8,}$/;\r\n const hasMin8Char = generalPwValue.match(min8Char);\r\n let hasMin8CharCircle = $('#PwMin8Char').siblings('.fill-circle');\r\n\r\n if (hasMin8Char) {\r\n $(hasMin8CharCircle).addClass('active');\r\n have8MinCharValid = true;\r\n } else {\r\n $(hasMin8CharCircle).removeClass('active');\r\n have8MinCharValid = false;\r\n }\r\n\r\n //Use case to see if passwords match\r\n let pwMatchCircle = $('#PasswordsMatch').siblings('.fill-circle');\r\n if (confirmPwFinalValue.trim() !== '' && generalPwFinalValue.trim() !== '' && confirmPwFinalValue == generalPwFinalValue) {\r\n $(pwMatchCircle).addClass('active');\r\n\r\n if (haveOneNumValid && haveOneUppercaseValid && haveOneLowercaseValid && haveOneSpecialCharValid && have8MinCharValid) {\r\n ui.$Password = generalPwValue;\r\n passwordValidAndMatched = true;\r\n }\r\n } else {\r\n $(pwMatchCircle).removeClass('active');\r\n passwordValidAndMatched = false;\r\n }\r\n } \r\n\r\n if (inputType == 'confirm-password'){\r\n\r\n let confirmPwValue = $(passwordInput).val();\r\n let passwordsMatchCircle = $('#PasswordsMatch').siblings('.fill-circle');\r\n $(passwordInput).attr('value', confirmPwValue);\r\n confirmPwFinalValue = confirmPwValue;\r\n\r\n if (confirmPwFinalValue.trim() !== '' && generalPwFinalValue.trim() !== '' && confirmPwFinalValue == generalPwFinalValue) {\r\n $(passwordsMatchCircle).addClass('active');\r\n\r\n if (haveOneNumValid && haveOneUppercaseValid && haveOneLowercaseValid && haveOneSpecialCharValid && have8MinCharValid) {\r\n ui.$Password = confirmPwValue;\r\n passwordValidAndMatched = true;\r\n }\r\n } else {\r\n $(passwordsMatchCircle).removeClass('active');\r\n passwordValidAndMatched = false;\r\n }\r\n }\r\n \r\n }\r\n\r\n function submitForm(e) {\r\n validatePassword();\r\n\r\n if (passwordValidAndMatched) {\r\n return true;\r\n } else {\r\n e.preventDefault();\r\n ui.$ResetPasswordInput.addClass('error');\r\n return false;\r\n }\r\n }\r\n\r\n function init() {\r\n if ($('.acct-reset-password').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n bindEvents();\r\n checkIfErrorMsgIsPresent();\r\n checkIfSuccessMsgIsPresent();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.ResetPassword.init();\r\n});","import ApiService from '@api/api-service';\r\nimport PaymentiFrame from '../vendor/bluefin';\r\nimport AjaxLoader from './ajax-loader/ajax-loader';\r\nimport store from '@stores/cart/cart-store';\r\nimport CheckoutAddressForm, { DEFAULT_OPTIONS as addressFormDefaults } from './checkout/checkout-address-form-cc';\r\nimport { context as defaultContext } from './checkout/checkout-defaults';\r\nimport SelectBox from './select-box/select-box';\r\nimport shippingService from '@api/routes/cart/getshippinginformation';\r\nimport isFn from '@utils/is-function';\r\n\r\n\r\nconst CLASS_NAME_ADD_ADDRESS_DISABLED = '-disabled';\r\nconst CLASS_NAME_ADD_METHOD_DISABLED = '-disabled';\r\nconst CLASS_NAME_REVIEW_BUTTON_DISABLED = 'disabled';\r\n\r\nconst NEW_ADDRESS_OPTION_VALUE = '__checkoutBilling_newAddress__';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n addPaymentFormClassList: '',\r\n classList: '',\r\n onCancelHandler: null,\r\n onCancelBillHandler: null,\r\n replaceOriginEl: false\r\n};\r\n\r\nconst DEFAULT_LOADER_OPTIONS = {\r\n aria: false,\r\n className: 'd-flex align-items-center h-100',\r\n size: 'xs',\r\n visible: true\r\n};\r\n\r\nexport default class AddPaymentWithaddress {\r\n constructor(options, context) {\r\n context = { ...defaultContext, ...context };\r\n this.options = options;\r\n this.api = new ApiService(options.urlPath);\r\n\r\n this.loader = null;\r\n\r\n this.initializeElements();\r\n if (!this.frameSettings || this.$paymentFrame.length) {\r\n return true\r\n }\r\n\r\n this.setupLoader();\r\n this.setupFrame();\r\n this.setEvents();\r\n this.setScrolling();\r\n this.renderCheckoutForm();\r\n this.renderSelectors();\r\n this.getShippingAddress();\r\n this.setupListeners();\r\n this.disabledAddNewSavePayment();\r\n }\r\n\r\n initializeElements() {\r\n this.$container = $(this.options.containerId);\r\n this.$formContainer = this.$container.find('[data-region=\"addressForm\"]');\r\n // this.$form = this.$container.find('[data-control=\"form\"]');\r\n this.$frameSettings = $('#paymentSettings');\r\n this.$paymentLoader = this.$container.find(this.options.paymentLoaderId);\r\n this.$savePayment = this.$container.find(this.options.savePaymentId);\r\n this.$savePaymentError = this.$container.find(this.options.savePaymentErrorId);\r\n this.$updateAutoshipCheckbox = this.$container.find(this.options.updateAutoshipCheckboxId);\r\n this.$paymentFormPlaceholder = $(this.options.formId);\r\n this.$addressPlaceholder = $('#addPaymentContainer').find('[data-placeholder=\"address\"]');\r\n this.addressSelector = null;\r\n this.disableServiceUpdate = false;\r\n this.$addAddressCtrl = this.$container.find('[data-control=\"addAddress\"]');\r\n this.newAddress = {};\r\n this.$methodForm = this.$container.find('[data-region=\"methodForm\"]');\r\n this.shippingAddress = {};\r\n this.$select = null;\r\n\r\n if (this.$frameSettings.length) {\r\n this.frameSettings = JSON.parse(this.$frameSettings.html());\r\n this.$paymentFrame = this.$container.find('#' + this.frameSettings.iframeId);\r\n }\r\n }\r\n\r\n setupListeners() {\r\n this.$addAddressCtrl.on('click', () => this.onAddAddressClick());\r\n this.$select.on('change', evt => this.onSelectChange(evt));\r\n // this.checkoutForm.watchValue((value) => this.onCheckoutFormUpdate(value));\r\n }\r\n\r\n onSelectChange(evt){\r\n const value = evt.target.value;\r\n let addresses = this.addresses;\r\n let billingParty = addresses.find((address) => address.AddressName === value);\r\n store.mutations.SET_BILLING_PARTY(billingParty);\r\n }\r\n\r\n disabledAddNewSavePayment() {\r\n $('.js-new-add-billing-address').find('input, select').each((idx,el) => {\r\n $(el).on('change keyup', () => {\r\n this.checkBillingAddressValidity($(el));\r\n });\r\n });\r\n }\r\n\r\n checkBillingAddressValidity(el) {\r\n let zipReg = /^\\d{5}$/;\r\n let zipValue = $('#addPaymentContainer').find('[data-control=\"zip\"]').val();\r\n el.parent().addClass('was-validated');\r\n const validBillingAddress = $('#addPaymentContainer').find('[data-control=\"cardHolderName\"]').val() != '' &&\r\n $('#addPaymentContainer').find('[data-control=\"address\"]').val() != '' &&\r\n $('#addPaymentContainer').find('[data-control=\"city\"]').val() != '' &&\r\n $('#addPaymentContainer').find('[data-control=\"select\"]').val() != '' &&\r\n $('#addPaymentContainer').find('[data-control=\"select\"]').val() != null &&\r\n zipValue !== '' && zipReg.test(zipValue);\r\n if(validBillingAddress) {\r\n $('#savePayment').removeAttr('disabled').removeClass('disabled')\r\n } else {\r\n $('#savePayment').attr('disabled', true).addClass('disabled');\r\n }\r\n }\r\n\r\n \r\n onAddressFormCancel() {\r\n this.$methodForm.slideUp('fast');\r\n this.addressSelector.enable();\r\n this.addressSelector.enableElement();\r\n this.$addAddressCtrl.removeAttr('aria-expanded');\r\n\r\n // this.addressFormVisible = false;\r\n }\r\n\r\n onAddAddressClick() {\r\n\r\n\r\n if (this.loading) return;\r\n if(this.$methodForm.css('display') == 'block'){\r\n this.$methodForm.slideUp('fast');\r\n this.addressSelector.enable();\r\n this.addressSelector.enableElement();\r\n this.$addAddressCtrl.removeAttr('aria-expanded');\r\n }else{\r\n this.addressSelector.disableElement();\r\n this.$methodForm.slideDown('fast');\r\n this.$addAddressCtrl.attr('aria-expanded', true);\r\n }\r\n\r\n this.newAddress = {};\r\n this.checkoutForm.setValues({\r\n firstName: '',\r\n lastName: '',\r\n address: '',\r\n address2: '',\r\n city: '',\r\n state: '',\r\n zip: ''\r\n });\r\n\r\n const options = [...this.addressOptions];\r\n // const newAddressOption = { text: this.context.NewAddress, value: NEW_ADDRESS_OPTION_VALUE };\r\n const newAddressIndex = options.findIndex(({ value }) => value === NEW_ADDRESS_OPTION_VALUE);\r\n\r\n if (newAddressIndex > -1) {\r\n options[newAddressIndex] = newAddressOption;\r\n } else {\r\n // options.push(newAddressOption);\r\n }\r\n\r\n this.addressOptions = options;\r\n\r\n this.updateUiOnly(() => {\r\n // this.addressSelector.setValue(NEW_ADDRESS_OPTION_VALUE);\r\n });\r\n\r\n // this.addressSelector.disableElement();\r\n }\r\n\r\n parseAddressText(address) {\r\n let text = address.Address1;\r\n\r\n if (address.Address2) {\r\n text += ` ${address.Address2}`;\r\n }\r\n\r\n text += ` ${address.City}, ${address.StateCode} ${address.ZipPostalCode}`;\r\n\r\n return text;\r\n }\r\n\r\n mapAddressOptions(addresses = []) {\r\n this.addresses = addresses;\r\n\r\n const addressOptions =\r\n addresses\r\n .filter((address) => address !== null && address !== undefined && address.AddressName !== this.shippingAddressId)\r\n .map((address, index) => {\r\n const text = this.parseAddressText(address);\r\n return {\r\n text,\r\n value: address.AddressName\r\n };\r\n });\r\n\r\n const options = {\r\n options:addressOptions\r\n };\r\n\r\n this.addressOptions = addressOptions;\r\n this.addressSelector.setOptions(options);\r\n this.addressSelector.enable();\r\n }\r\n\r\n setInitialAddress() {\r\n /* if (this.addressOptions.find(({ value }) => value === store.getters.billingPartyId)) {\r\n this.addressSelector.setValue(store.getters.billingPartyId);\r\n return;\r\n } */\r\n\r\n if (this.addressOptions.length > 0) {\r\n this.addressSelector.setValue(this.addressOptions[0].value);\r\n } else {\r\n // this.$edit.hide();\r\n // this.onAddAddressClick();\r\n }\r\n }\r\n\r\n setupAddresses(data) {\r\n const addresses = data.ShippingAddresses;\r\n const billingParty = addresses.find((address) => address.AddressName === data.AddressId);\r\n this.shippingAddress = billingParty;\r\n store.mutations.SET_BILLING_PARTY(billingParty);\r\n let isPrimaryIndex = addresses.findIndex(address => address.IsPrimary == true );\r\n addresses.unshift(addresses.splice(isPrimaryIndex, 1)[0]);\r\n this.mapAddressOptions(addresses);\r\n\r\n this.setInitialAddress();\r\n }\r\n\r\n updateUiOnly(callback) {\r\n if (!isFn(callback)) return;\r\n\r\n this.disableServiceUpdate = true;\r\n callback();\r\n this.disableServiceUpdate = false;\r\n }\r\n\r\n async getShippingAddress() {\r\n\r\n\r\n const { data, error, success, shippingAddressId } = await shippingService.get();\r\n\r\n if (success) {\r\n this.updateUiOnly(() => {\r\n this.setupAddresses(data);\r\n });\r\n\r\n\r\n\r\n // this.addPaymentForm.setAddressId(this.selectedAddressValue);\r\n } else {\r\n this.$error.show().html(error);\r\n }\r\n\r\n this.addressesLoading = false;\r\n this.methodsLoading = false;\r\n this.loading = false;\r\n }\r\n\r\n renderSelectors() {\r\n this.addressSelector = new SelectBox(this.$addressPlaceholder, {\r\n id: this.addressId\r\n });\r\n this.addressSelector.disable();\r\n this.addressSelector.render();\r\n this.$select = this.$container.find('.select-box__select');\r\n }\r\n\r\n renderCheckoutForm() {\r\n const defaultSchema = { ...addressFormDefaults.schema }\r\n const schema = {\r\n cardHolderName:{\r\n ...defaultSchema.cardHolderName,\r\n name: 'CardHolderName',\r\n },\r\n firstName: {\r\n ...defaultSchema.firstName,\r\n name: 'FirstName'\r\n },\r\n lastName: {\r\n ...defaultSchema.lastName,\r\n name: 'LastName'\r\n },\r\n address: {\r\n ...defaultSchema.address,\r\n name: 'Address1'\r\n },\r\n address2: {\r\n ...defaultSchema.address2,\r\n name: 'Address2'\r\n },\r\n city: {\r\n ...defaultSchema.city,\r\n name: 'City'\r\n },\r\n state: {\r\n ...defaultSchema.state,\r\n name: 'StateCode'\r\n },\r\n zip: {\r\n ...defaultSchema.zip,\r\n name: 'ZipPostalCode'\r\n }\r\n };\r\n\r\n const options = {\r\n onCancelHandler: () => this.onAddressFormCancel(),\r\n onCancelBillHandler: () => this.onAddressFormCancel(),\r\n replaceOriginEl: true,\r\n schema\r\n };\r\n\r\n const context = {\r\n /* cancel: this.context.Cancel,\r\n heading: this.context.AddBillingAddress,\r\n requiredToken: this.context.RequiredToken,\r\n submit: this.context.ApplyUpdates,\r\n validation: this.context.ValidationMessage */\r\n };\r\n\r\n\r\n this.checkoutForm = new CheckoutAddressForm(this.$paymentFormPlaceholder, options, context);\r\n this.checkoutForm.init();\r\n this.checkoutForm.render();\r\n }\r\n\r\n async savePaymentMethod(res, params,isDefault) {\r\n let dstransid = '';\r\n let authenticationvalue = '';\r\n if (res.ddds_result != null) {\r\n if (res.ddds_result.ddds_status == 'N') {\r\n alert(\"Unable to validate payment method. Please check card number, expiration date or CVV\");\r\n return;\r\n }\r\n\r\n //if (res.ddds_result.ddds_challenged) {\r\n if (res.ddds_result.ddds_dstransid != null) {\r\n dstransid = res.ddds_result.ddds_dstransid;\r\n }\r\n if (res.ddds_result.ddds_authenticationvalue != null) {\r\n authenticationvalue = res.ddds_result.ddds_authenticationvalue;\r\n }\r\n //}\r\n }\r\n const { success, data, error } = await this.api.post({\r\n //AddressId: this.options.addressId,\r\n Id:res.id,\r\n eToken: res.eToken,\r\n DddsAmexDsTransId: res.ddds_result.amexDsTransId,\r\n DddsAttempted:res.ddds_result.ddds_attempted,\r\n DddsAuthenticationValue: res.ddds_result.ddds_authenticationvalue,\r\n DddsChallenged:res.ddds_result.ddds_challenged,\r\n DddsDsTransId: res.ddds_result.ddds_dstransid,\r\n DddsEci: res.ddds_result.ddds_eci,\r\n DddsStatus: res.ddds_result.ddds_status,\r\n DddsVersion: res.ddds_result.ddds_version,\r\n DeliveryTimeFrame: params.ddds_params.deliveryTimeFrame,\r\n ReOrderItemsInd: params.ddds_params.reorderItemsInd,\r\n ShipIndicator: params.ddds_params.shipIndicator,\r\n ScaIndicator:res.ddds_result.scaIndicator,\r\n AcsTransId:res.ddds_result.acsTransId,\r\n CardBrand:res.ddds_result.card_brand,\r\n CardHolderName:params.ddds_params.cardHolderName,\r\n BillingAddressLine1:params.ddds_params.billingLine1,\r\n BillingAddressLine2:params.ddds_params.billingLine2,\r\n BillingCity: params.ddds_params.billingCity,\r\n BillingState: params.ddds_params.billingState,\r\n BillingZip: params.ddds_params.billingPostCode,\r\n BillingCountry: params.ddds_params.billingCountry,\r\n isDefault: isDefault,\r\n });\r\n\r\n if(success) {\r\n const event = new CustomEvent(\"successAddPayment\", {\r\n detail: data,\r\n bubbles: true,\r\n cancelable: true\r\n });\r\n document.dispatchEvent(event);\r\n } else if(error) {\r\n this.setError(error);\r\n }\r\n\r\n if(this.loader) this.loader.active = false;\r\n }\r\n\r\n setupLoader() {\r\n if(this.$paymentLoader.length) {\r\n this.loader = new AjaxLoader(this.$paymentLoader, {\r\n replaceOriginEl: false,\r\n size: 'xs'\r\n });\r\n\r\n this.loader.render();\r\n }\r\n }\r\n\r\n setupFrame() {\r\n this.frame = new PaymentiFrame(this.frameSettings);\r\n }\r\n\r\n setError(error) {\r\n if(this.$savePaymentError.length) {\r\n this.$savePaymentError.show().html(error);\r\n } else {\r\n alert(error);\r\n }\r\n }\r\n\r\n setEvents() {\r\n let params = {\r\n\t\t\t'ddds_params': {\r\n amount: \"0.01\",\r\n cardHolderName: \"\", //First Name + Last Name\r\n billingLine1: \"\",\r\n billingLine2: \"\",\r\n billingLine3: \"\",\r\n billingPostCode: \"\",\r\n billingCity: \"\",\r\n billingState: \"\",\r\n billingCountry: \"840\", // ISO 3166-1 three-digit country codes. e.g. 840 for the United States\r\n shipIndicator: \"01\",\r\n deliveryTimeFrame: \"04\",\r\n reorderItemsInd: \"01\",\r\n shipIndicator: \"01\"\r\n }\r\n\t\t}\r\n\r\n\r\n this.$savePayment.on('click', () => {\r\n this.$savePaymentError.hide();\r\n\r\n if(this.loader) this.loader.active = true;\r\n let cardNameInput = $('#addPaymentContainer [data-control=\"cardHolderName\"]');\r\n let cardNameError = $('#addPaymentContainer [data-region=\"cardHolderNameError\"]');\r\n if(!cardNameInput[0].checkValidity()) {\r\n cardNameError.addClass('-visible');\r\n cardNameInput.parent().addClass('was-validated');\r\n cardNameInput.attr({ 'aria-invalid': true }).trigger('focus');\r\n return;\r\n }\r\n else {\r\n cardNameError.removeClass('-visible');\r\n cardNameInput.parent().removeClass('was-validated');\r\n cardNameInput.removeAttr('aria-invalid');\r\n params.ddds_params.cardHolderName = $('#addPaymentContainer [data-control=\"cardHolderName\"]').val();\r\n }\r\n\r\n\r\n\r\n let form = this.$container.find('[data-control=\"form\"]');\r\n if(this.$methodForm.css('display') == 'none'){\r\n params.ddds_params.billingLine1 = store.getters.billingPartyAddress1;\r\n params.ddds_params.billingLine2 =store.getters.billingPartyAddress2;\r\n params.ddds_params.billingState = store.state.billingParty.StateCode;\r\n params.ddds_params.billingPostCode = store.getters.billingPartyZipPostalCode;\r\n params.ddds_params.billingCity = store.getters.billingPartyCity;\r\n }else{\r\n form.trigger( \"submit\" );\r\n\r\n if(!form.hasClass('was-validated')){\r\n\r\n let newbillingParty = {\r\n 'Address1': $('#addPaymentContainer .checkout-address-form [data-control=\"address\"]').val(),\r\n 'Address2': $('#addPaymentContainer .checkout-address-form [data-control=\"address2\"]').val(),\r\n 'AddressName': \"\",\r\n 'City': $('#addPaymentContainer .checkout-address-form [data-control=\"city\"]').val(),\r\n 'Country': \"United States\",\r\n 'CountryCode': \"US\",\r\n 'Email': null,\r\n 'FirstName': \"\",\r\n 'LastName': \"\",\r\n 'Name': \"\",\r\n 'State': \"\",\r\n 'StateCode': $('#addPaymentContainer .checkout-address-form [data-control=\"select\"]').data('value'),\r\n 'ZipPostalCode': $('#addPaymentContainer .checkout-address-form [data-control=\"zip\"]').val()\r\n }\r\n params.ddds_params.billingLine1 = $('#addPaymentContainer .checkout-address-form [data-control=\"address\"]').val();\r\n params.ddds_params.billingLine2 = $('#addPaymentContainer .checkout-address-form [data-control=\"address2\"]').val();\r\n params.ddds_params.billingCity = $('#addPaymentContainer .checkout-address-form [data-control=\"city\"]').val();\r\n params.ddds_params.billingState = $('#addPaymentContainer .checkout-address-form [data-control=\"select\"]').data('value');\r\n params.ddds_params.billingPostCode = $('#addPaymentContainer .checkout-address-form [data-control=\"zip\"]').val();\r\n\r\n store.mutations.SET_BILLING_PARTY(newbillingParty);\r\n }else{\r\n this.loader.active = false;\r\n return\r\n }\r\n }\r\n console.log('bluefin params', params);\r\n\r\n if(params.ddds_params.billingLine2 === null){\r\n params.ddds_params.billingLine2 = \"\";\r\n }\r\n\r\n\r\n this.frame.encrypt(params)\r\n .failure((error) => {\r\n const message = error?.message;\r\n message ? this.setError(message) : alert('Failure:', error);\r\n\r\n if(this.loader) this.loader.active = false;\r\n })\r\n .invalidInput((data) => {\r\n const inputs = data?.invalidInputs;\r\n if(inputs.length) {\r\n const messages = inputs.map((input) => input.message);\r\n this.setError(messages[0]);\r\n } else {\r\n alert('Invalid Input:', data);\r\n }\r\n\r\n if(this.loader) this.loader.active = false;\r\n })\r\n .success((res) => {\r\n console.log('PayConnect responce', res);\r\n console.log('address params', params);\r\n if (res.eToken.length > 0) {\r\n var isDefault = $('#addPaymentContainer #is-default').length ? $('#addPaymentContainer #is-default')[0].checked : false;\r\n this.savePaymentMethod(res, params, isDefault);\r\n }\r\n });\r\n });\r\n }\r\n\r\n setScrolling() {\r\n $('#' + this.frameSettings.iframeId).attr(\"scrolling\", \"no\");\r\n }\r\n}\r\n","import ApiService from '@api/api-service';\r\nimport PaymentiFrame from '../vendor/bluefin';\r\nimport AjaxLoader from './ajax-loader/ajax-loader';\r\nimport store from '@stores/cart/cart-store';\r\n\r\nexport default class AddPayment {\r\n constructor(options) {\r\n this.options = options;\r\n this.api = new ApiService(options.urlPath);\r\n\r\n this.loader = null;\r\n this.newbillingParty = null;\r\n\r\n this.initializeElements();\r\n if (!this.frameSettings || this.$paymentFrame.length) {\r\n return true\r\n }\r\n\r\n this.setupLoader();\r\n this.setupFrame();\r\n this.setEvents();\r\n this.setScrolling();\r\n }\r\n\r\n initializeElements() {\r\n this.$container = $(this.options.containerId);\r\n this.$formContainer = this.$container.find('[data-region=\"addressForm\"]');\r\n // this.$form = this.$container.find('[data-control=\"form\"]');\r\n this.$frameSettings = $('#paymentSettings');\r\n //console.log('settings' ,this.$frameSettings );\r\n this.$paymentLoader = this.$container.find(this.options.paymentLoaderId);\r\n this.$savePayment = this.$container.find(this.options.savePaymentId);\r\n this.$savePaymentError = this.$container.find(this.options.savePaymentErrorId);\r\n this.$updateAutoshipCheckbox = this.$container.find(this.options.updateAutoshipCheckboxId);\r\n\r\n if (this.$frameSettings.length) {\r\n this.frameSettings = JSON.parse(this.$frameSettings.html());\r\n this.$paymentFrame = this.$container.find('#' + this.frameSettings.iframeId);\r\n }\r\n }\r\n\r\n async savePaymentMethod(res, params) {\r\n let dstransid = '';\r\n let authenticationvalue = '';\r\n if (res.ddds_result != null) {\r\n if (res.ddds_result.ddds_status == 'N') {\r\n alert(\"Unable to validate payment method. Please check card number, expiration date or CVV\");\r\n return;\r\n }\r\n\r\n //if (res.ddds_result.ddds_challenged) {\r\n if (res.ddds_result.ddds_dstransid != null) {\r\n dstransid = res.ddds_result.ddds_dstransid;\r\n }\r\n if (res.ddds_result.ddds_authenticationvalue != null) {\r\n authenticationvalue = res.ddds_result.ddds_authenticationvalue;\r\n }\r\n //}\r\n }\r\n const isDefault = $('#addPaymentContainer #default-payment').length ? $('#addPaymentContainer #default-payment')[0].checked : false;\r\n const isAllSubscription = $('#addPaymentContainer #active-subscriptions').length ? $('#addPaymentContainer #active-subscriptions')[0].checked : false;\r\n const { success, data, error } = await this.api.post({\r\n //AddressId: this.options.addressId,\r\n Id: res.id,\r\n eToken: res.eToken,\r\n DddsAmexDsTransId: res.ddds_result.amexDsTransId,\r\n DddsAttempted: res.ddds_result.ddds_attempted,\r\n DddsAuthenticationValue: res.ddds_result.ddds_authenticationvalue,\r\n DddsChallenged: res.ddds_result.ddds_challenged,\r\n DddsDsTransId: res.ddds_result.ddds_dstransid,\r\n DddsEci: res.ddds_result.ddds_eci,\r\n DddsStatus: res.ddds_result.ddds_status,\r\n DddsVersion: res.ddds_result.ddds_version,\r\n DeliveryTimeFrame: params.ddds_params.deliveryTimeFrame,\r\n ReOrderItemsInd: params.ddds_params.reorderItemsInd,\r\n ShipIndicator: params.ddds_params.shipIndicator,\r\n ScaIndicator: res.ddds_result.scaIndicator,\r\n AcsTransId: res.ddds_result.acsTransId,\r\n CardBrand: res.ddds_result.card_brand,\r\n CardHolderName: params.ddds_params.cardHolderName,\r\n BillingAddressLine1: params.ddds_params.billingLine1,\r\n BillingAddressLine2: params.ddds_params.billingLine2,\r\n BillingCity: params.ddds_params.billingCity,\r\n BillingState: params.ddds_params.billingState,\r\n BillingZip: params.ddds_params.billingPostCode,\r\n BillingCountry: params.ddds_params.billingCountry,\r\n IsDefault: isDefault,\r\n UseForAllSubscriptions: isAllSubscription\r\n });\r\n\r\n if (success) {\r\n //window.location.href = window.location.href;\r\n console.log('data for cards dd', data);\r\n let paymentId = data.PaymentMethodResultModel.PaymentMethodId\r\n this.options.setupMethods(data, true, paymentId);\r\n } else if (error) {\r\n this.setError(error);\r\n }\r\n\r\n if (this.loader) this.loader.active = false;\r\n }\r\n\r\n setupLoader() {\r\n if (this.$paymentLoader.length) {\r\n this.loader = new AjaxLoader(this.$paymentLoader, {\r\n replaceOriginEl: false,\r\n size: 'xs'\r\n });\r\n\r\n this.loader.render();\r\n }\r\n }\r\n\r\n setupFrame() {\r\n this.frame = new PaymentiFrame(this.frameSettings);\r\n }\r\n\r\n setError(error) {\r\n if (this.$savePaymentError.length) {\r\n this.$savePaymentError.show().html(error);\r\n } else {\r\n alert(error);\r\n }\r\n }\r\n\r\n setEvents() {\r\n let params = {\r\n 'ddds_params': {\r\n amount: \"0.01\",\r\n cardHolderName: \"\", //First Name + Last Name\r\n billingLine1: \"\",\r\n billingLine2: \"\",\r\n billingLine3: \"\",\r\n billingPostCode: \"\",\r\n billingCity: \"\",\r\n billingState: \"\",\r\n billingCountry: \"840\", // ISO 3166-1 three-digit country codes. e.g. 840 for the United States\r\n shipIndicator: \"01\",\r\n deliveryTimeFrame: \"04\",\r\n reorderItemsInd: \"01\",\r\n shipIndicator: \"01\"\r\n }\r\n }\r\n\r\n\r\n this.$savePayment.on('click', () => {\r\n this.$savePaymentError.hide();\r\n if (this.loader) this.loader.active = true;\r\n let cardNameInput = $('#addPaymentContainer [data-control=\"cardHolderName\"]');\r\n let cardNameError = $('#addPaymentContainer [data-region=\"cardHolderNameError\"]');\r\n if (!cardNameInput[0].checkValidity()) {\r\n cardNameError.addClass('-visible');\r\n cardNameInput.parent().addClass('was-validated');\r\n cardNameInput.attr({ 'aria-invalid': true }).trigger('focus');\r\n return;\r\n }\r\n else {\r\n cardNameError.removeClass('-visible');\r\n cardNameInput.parent().removeClass('was-validated');\r\n cardNameInput.removeAttr('aria-invalid');\r\n params.ddds_params.cardHolderName = $('#addPaymentContainer [data-control=\"cardHolderName\"]').val();\r\n }\r\n\r\n\r\n\r\n let form = this.$container.find('[data-control=\"form\"]');\r\n if (this.$formContainer.css('display') == 'none') {\r\n this.loader.active = false;\r\n this.newbillingParty = null;\r\n console.log('address saved', store.state.shippingParty);\r\n if (store.state.shippingParty != null) {\r\n params.ddds_params.billingLine1 = store.state.shippingParty.Address1;\r\n params.ddds_params.billingLine2 = store.state.shippingParty.Address2;\r\n params.ddds_params.billingState = store.state.shippingParty.StateCode ? store.state.shippingParty.StateCode : store.state.shippingParty.State;\r\n params.ddds_params.billingPostCode = store.state.shippingParty.ZipPostalCode;\r\n params.ddds_params.billingCity = store.state.shippingParty.City;\r\n }\r\n } else {\r\n form.trigger(\"submit\");\r\n\r\n if (!form.hasClass('was-validated')) {\r\n console.log('was vall');\r\n\r\n this.newbillingParty = {\r\n 'Address1': $('#addPaymentContainer .checkout-address-form [data-control=\"address\"]').val(),\r\n 'Address2': $('#addPaymentContainer .checkout-address-form [data-control=\"address2\"]').val(),\r\n 'AddressName': \"\",\r\n 'City': $('#addPaymentContainer .checkout-address-form [data-control=\"city\"]').val(),\r\n 'Country': \"United States\",\r\n 'CountryCode': \"US\",\r\n 'Email': null,\r\n 'FirstName': \"\",\r\n 'LastName': \"\",\r\n 'Name': \"\",\r\n 'State': \"\",\r\n 'StateCode': $('#addPaymentContainer .checkout-address-form [data-control=\"select\"]').data('value'),\r\n 'ZipPostalCode': $('#addPaymentContainer .checkout-address-form [data-control=\"zip\"]').val()\r\n }\r\n params.ddds_params.billingLine1 = $('#addPaymentContainer .checkout-address-form [data-control=\"address\"]').val();\r\n params.ddds_params.billingLine2 = $('#addPaymentContainer .checkout-address-form [data-control=\"address2\"]').val();\r\n params.ddds_params.billingCity = $('#addPaymentContainer .checkout-address-form [data-control=\"city\"]').val();\r\n params.ddds_params.billingState = $('#addPaymentContainer .checkout-address-form [data-control=\"select\"]').data('value');\r\n params.ddds_params.billingPostCode = $('#addPaymentContainer .checkout-address-form [data-control=\"zip\"]').val();\r\n console.log('new bill', store.state.billingParty);\r\n } else {\r\n console.log('not vall');\r\n this.loader.active = false;\r\n return\r\n }\r\n }\r\n console.log('bluefin params', params);\r\n\r\n if (params.ddds_params.billingLine2 === null) {\r\n params.ddds_params.billingLine2 = \"\";\r\n }\r\n\r\n this.frame.encrypt(params)\r\n .failure((error) => {\r\n const message = error?.message;\r\n message ? this.setError(message) : alert('Failure:', error);\r\n\r\n if (this.loader) this.loader.active = false;\r\n })\r\n .invalidInput((data) => {\r\n const inputs = data?.invalidInputs;\r\n if (inputs.length) {\r\n const messages = inputs.map((input) => input.message);\r\n this.setError(messages[0]);\r\n } else {\r\n alert('Invalid Input:', data);\r\n }\r\n\r\n if (this.loader) this.loader.active = false;\r\n })\r\n .success((res) => {\r\n console.log('PayConnect responce', res);\r\n console.log('address params', params);\r\n if (this.newbillingParty) {\r\n store.mutations.SET_BILLING_PARTY(this.newbillingParty);\r\n }\r\n if (res.eToken.length > 0) {\r\n this.savePaymentMethod(res, params);\r\n }\r\n });\r\n });\r\n }\r\n\r\n setScrolling() {\r\n $('#' + this.frameSettings.iframeId).attr(\"scrolling\", \"no\");\r\n }\r\n}\r\n","import { atcb_init } from 'add-to-calendar-button';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.AddToCalendar = (function ($) {\r\n\r\n function init() {\r\n if ($('.dashboard-appts').length) {\r\n atcb_init();\r\n }\r\n\r\n if ($('.petpage-appts').length) {\r\n atcb_init();\r\n }\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.AddToCalendar.init();\r\n});","import ReactiveComponent, { watch } from '../utils/reactive-component';\r\nimport AjaxLoader from './ajax-loader/ajax-loader';\r\nimport cartStore from '@stores/cart/cart-store';\r\n\r\nconst BS_CLASS_NAME_POSITION_ABSOLUTE = 'position-absolute';\r\nconst BS_CLASS_NAME_POSITION_RELATIVE = 'position-relative';\r\nconst BS_CLASS_NAME_WIDTH_FULL = 'w-100';\r\n\r\nconst CLASS_NAME_OPACITY_0 = 'opacity-0';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n autoshipFrequency: 0,\r\n loaderLight: false,\r\n quantity: 1,\r\n showLoader: true,\r\n isRefill: false\r\n};\r\n\r\nexport default class AddToCart extends ReactiveComponent {\r\n constructor($el, productId, variantId, options = {}, petId) {\r\n super();\r\n\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n Object.assign(this, options);\r\n\r\n this.$el = $el;\r\n this.$content = $(); // empty until assigned\r\n this.$loader = $(); // empty until assigned\r\n\r\n this.productId = productId;\r\n this.variantId = variantId;\r\n this.petId = petId;\r\n\r\n this.loader = null;\r\n\r\n this.reactive({\r\n loading: false\r\n });\r\n\r\n this.init();\r\n }\r\n\r\n [watch]() {\r\n return {\r\n loading(loading) {\r\n if(this.showLoader) {\r\n if(!this.loader) this.setupLoader();\r\n\r\n this.loader.active = loading;\r\n\r\n if(loading) {\r\n this.$content.addClass(CLASS_NAME_OPACITY_0);\r\n } else {\r\n this.$content.removeClass(CLASS_NAME_OPACITY_0);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n init() {\r\n this.setupListeners();\r\n this.setupLoaderMarkup();\r\n }\r\n\r\n async addToCart() {\r\n if(!this.productId || !this.variantId) {\r\n throw new Error('Both ProductId and VariantId are required to add a product to the cart');\r\n }\r\n\r\n this.loading = true;\r\n\r\n const { success, error } = await cartStore.actions.addLine(this.productId, this.variantId, {\r\n autoshipFrequency: this.autoshipFrequency,\r\n quantity: this.quantity,\r\n IsRefill: this.isRefill\r\n },this.petId);\r\n\r\n if(success) {\r\n cartStore.actions.focusMiniCart({\r\n productId: this.productId,\r\n variantId: this.variantId,\r\n petId: this.petId\r\n });\r\n } else {\r\n console.error(error);\r\n }\r\n\r\n this.loading = false;\r\n }\r\n\r\n setupListeners() {\r\n this.$el.on('click', () => this.addToCart());\r\n }\r\n\r\n setupLoader() {\r\n if(this.showLoader) {\r\n this.loader = new AjaxLoader(this.$loader, {\r\n light: this.loaderLight,\r\n replaceOriginEl: false,\r\n size: 'xs',\r\n visible: true\r\n });\r\n }\r\n }\r\n\r\n setupLoaderMarkup() {\r\n if(this.showLoader) {\r\n const $container = $('<div></div>').addClass(BS_CLASS_NAME_POSITION_RELATIVE);\r\n this.$loader = $('<div></div>').addClass([BS_CLASS_NAME_POSITION_ABSOLUTE, BS_CLASS_NAME_WIDTH_FULL]);\r\n this.$content = $('<div></div>').html(this.$el.html());\r\n\r\n $container.append([ this.$loader, this.$content ]);\r\n this.$el.html($container);\r\n }\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-add-to-cart');\r\n rootEls?.forEach((el) => {\r\n const $el = $(el);\r\n\r\n const autoshipFrequency = $el.data('autoship-frequency') || 0;\r\n const productId = $el.data('product-id') || null;\r\n const loaderLight = typeof $el.data('loader-light') === 'boolean' ? $el.data('loader-light') : false;\r\n const quantity = $el.data('quantity') || 1;\r\n const showLoader = typeof $el.data('loader') === 'boolean' ? $el.data('loader') : true;\r\n const variantId = $el.data('variant-id') || null;\r\n const petId = $el.data('pet-id') || null;\r\n const isRefill = typeof $el.data('isrefill') === 'boolean' ? $el.data('isrefill') : false;\r\n\r\n new AddToCart($el, productId, variantId, { \r\n autoshipFrequency,\r\n loaderLight,\r\n quantity,\r\n showLoader,\r\n isRefill\r\n }, petId);\r\n });\r\n});\r\n","const context = {\r\n Address: 'Address',\r\n Address2: 'Address, cont.',\r\n AddShippingAddress: 'Add new shipping address',\r\n AddressEntered: 'Address You Entered',\r\n AddressValidation: 'AddressValidation',\r\n Cancel: 'Cancel',\r\n City: 'City',\r\n Close: 'Close',\r\n ConfirmAddress: 'The address I entered is correct. Incorrect information may result in delay or cancellation of my order.',\r\n Delete: 'Delete',\r\n Edit: 'Edit',\r\n EditShippingAddress: 'Edit shipping address',\r\n FirstName: 'First Name',\r\n LastName: 'Last Name',\r\n LoadingSrText: 'Loading...',\r\n Phone: 'Phone',\r\n Primary: 'Primary',\r\n RequiredMessage: '{0} is required.',\r\n RequiredToken: '*',\r\n SaveAddress: 'Save Address',\r\n SelectSuggestedAddress: 'Please select one of the suggested options',\r\n SetPrimaryButton: 'Set as Primary',\r\n SetPrimaryCheckbox: 'Set as primary address',\r\n State: 'State',\r\n UnknownAddress: 'The address entered does not validate against any known address. Please cancel and edit the address, or confirm the address you entered is correct.',\r\n UpsCopyright: 'UPS, the UPS brand mark, and the Color Brown are trademarks of United Parcel Service of America, Inc. All Rights Reserved',\r\n UpsLogo: {\r\n Alt: 'UPS',\r\n Url: '/images-2/ups-logo.svg'\r\n },\r\n UseSuggestedAddress: 'Use Suggested Address',\r\n Zip: 'Zip'\r\n};\r\n\r\nexport {\r\n context\r\n};\r\n","import uniqid from 'uniqid';\r\nimport states from '@utils/states';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport AddressValidation from '../address-validation/address-validation';\r\nimport addressBookStore from '@stores/address-book/address-book-store';\r\nimport template from './templates/address-book-form';\r\nimport { context as defaultContext } from './address-book-defaults';\r\n\r\nconst CLASS_NAME_ERROR = 'error';\r\nconst CLASS_NAME_LOADING = '-loading';\r\n\r\nconst EVENT_KEY = '_addressBookForm_';\r\nconst EVENT_INPUT = `input.${EVENT_KEY}`;\r\n\r\nconst DEFAULT_LOADER_OPTIONS = {\r\n replaceOriginEl: false,\r\n size: 'lg'\r\n};\r\n\r\nconst DEFAULT_CONTEXT = {\r\n cancel: defaultContext.Cancel,\r\n heading: defaultContext.AddShippingAddress,\r\n loadingIcon: null,\r\n requiredToken: defaultContext.RequiredToken,\r\n save: defaultContext.SaveAddress,\r\n loadingSrText: defaultContext.LoadingSrText,\r\n validation: defaultContext.RequiredMessage\r\n};\r\n\r\nexport const DEFAULT_OPTIONS = {\r\n addressId: null,\r\n onAfterSave: null,\r\n onCancel: null,\r\n replaceOriginEl: false,\r\n schema: {\r\n primaryAddress: {\r\n required: false,\r\n name: 'IsPrimary',\r\n label: 'Set as primary address',\r\n value: false\r\n },\r\n firstName: {\r\n required: true,\r\n name: 'FirstName',\r\n label: 'First Name',\r\n value: ''\r\n },\r\n lastName: {\r\n required: true,\r\n name: 'LastName',\r\n label: 'Last Name',\r\n value: ''\r\n },\r\n address: {\r\n required: true,\r\n name: 'Address1',\r\n label: 'Street Address',\r\n value: ''\r\n },\r\n address2: {\r\n required: false,\r\n name: 'Address2',\r\n label: 'Address Line 2',\r\n value: ''\r\n },\r\n city: {\r\n required: true,\r\n name: 'City',\r\n label: 'City',\r\n value: ''\r\n },\r\n state: {\r\n required: true,\r\n name: 'State',\r\n label: 'State',\r\n value: ''\r\n },\r\n zip: {\r\n required: true,\r\n name: 'Zip',\r\n label: 'Zip',\r\n value: ''\r\n },\r\n phone: {\r\n required: false,\r\n name: 'Phone',\r\n label: 'Phone',\r\n value: ''\r\n }\r\n }\r\n};\r\n\r\nexport default class AddressBookForm {\r\n constructor($originEl, options, context) {\r\n context = { ...DEFAULT_CONTEXT, ...context };\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n\r\n const $parsed = $($.parseHTML(template));\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n // non-field labels\r\n this.$headingLabel = this.$el.find('[data-label=\"heading\"]');\r\n this.$cancelLabel = this.$el.find('[data-label=\"cancel\"]');\r\n this.$saveLabel = this.$el.find('[data-label=\"save\"]');\r\n\r\n // field labels\r\n this.$primaryAddressLabel = this.$el.find('[data-label=\"primaryAddress\"]');\r\n this.$firstNameLabel = this.$el.find('[data-label=\"firstName\"]');\r\n this.$lastNameLabel = this.$el.find('[data-label=\"lastName\"]');\r\n this.$addressLabel = this.$el.find('[data-label=\"address\"]');\r\n this.$address2Label = this.$el.find('[data-label=\"address2\"]');\r\n this.$cityLabel = this.$el.find('[data-label=\"city\"]');\r\n this.$stateLabel = this.$el.find('[data-label=\"state\"]');\r\n this.$zipLabel = this.$el.find('[data-label=\"zip\"]');\r\n this.$phoneLabel = this.$el.find('[data-label=\"phone\"]');\r\n\r\n // field error labels\r\n this.$primaryAddressErrorLabel = this.$el.find('[data-label=\"primaryAddressError\"]');\r\n this.$firstNameErrorLabel = this.$el.find('[data-label=\"firstNameError\"]');\r\n this.$lastNameErrorLabel = this.$el.find('[data-label=\"lastNameError\"]');\r\n this.$addressErrorLabel = this.$el.find('[data-label=\"addressError\"]');\r\n this.$address2ErrorLabel = this.$el.find('[data-label=\"address2Error\"]');\r\n this.$cityErrorLabel = this.$el.find('[data-label=\"cityError\"]');\r\n this.$stateErrorLabel = this.$el.find('[data-label=\"stateError\"]');\r\n this.$zipErrorLabel = this.$el.find('[data-label=\"zipError\"]');\r\n this.$phoneErrorLabel = this.$el.find('[data-label=\"phoneError\"]');\r\n\r\n // field controls (input)\r\n this.$primaryAddress = this.$el.find('[data-control=\"primaryAddress\"]');\r\n this.$firstNameCtrl = this.$el.find('[data-control=\"firstName\"]');\r\n this.$lastNameCtrl = this.$el.find('[data-control=\"lastName\"]');\r\n this.$addressCtrl = this.$el.find('[data-control=\"address\"]');\r\n this.$address2Ctrl = this.$el.find('[data-control=\"address2\"]');\r\n this.$cityCtrl = this.$el.find('[data-control=\"city\"]');\r\n this.$stateCtrl = this.$el.find('[data-control=\"state\"]');\r\n this.$zipCtrl = this.$el.find('[data-control=\"zip\"]');\r\n this.$phoneCtrl = this.$el.find('[data-control=\"phone\"]');\r\n\r\n this.$cancelCtrl = this.$el.find('[data-control=\"cancel\"]');\r\n \r\n this.$error = this.$el.find('[data-region=\"error\"]');\r\n this.$form = this.$el.find('[data-region=\"form\"]');\r\n this.$loader = this.$el.find('[data-region=\"loader\"]');\r\n\r\n this.replaceValidationToken = (str) => context.validation.replace('{0}', str);\r\n \r\n this.loader = null;\r\n this.unwatchStore = null;\r\n\r\n this.addressId = options.addressId;\r\n this.onAfterSave = options.onAfterSave;\r\n this.onCancel = options.onCancel;\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n\r\n this.schema = Object.fromEntries(\r\n Object.entries(options.schema).map(([ key, value]) => {\r\n const id = uniqid.time(`${key}_`);\r\n const errorId = `${id}__error`;\r\n const error = value.error && value.required ? value.error : (context.validation?.replace('{0}', value.label) || 'This field is required');\r\n const label = !value.required ? value.label : value.label + context.requiredToken;\r\n\r\n return [ key, { ...value, error, errorId, id, label } ];\r\n })\r\n );\r\n\r\n this.context = context;\r\n\r\n this.init();\r\n }\r\n\r\n async #save() {\r\n this.$error.hide().empty();\r\n\r\n const formData = new FormData(this.$form.get(0));\r\n const addressParty = Object.fromEntries(formData.entries());\r\n const { success, data, error, showSuggestionPrompt } = await addressBookStore.actions.addOrEditAddress({\r\n addressId: this.addressId,\r\n addressParty\r\n });\r\n\r\n if(success) {\r\n let addressConfirmed = !showSuggestionPrompt;\r\n\r\n if(showSuggestionPrompt) {\r\n addressConfirmed = await this.#handleSuggestions(data.UpsAddressValidationStatus, formData, addressParty, data.SuggestedAddresses);\r\n }\r\n\r\n if(addressConfirmed) {\r\n this.onAfterSave?.();\r\n }\r\n } else {\r\n this.$error.html(error).show();\r\n }\r\n }\r\n\r\n async #handleSuggestions(upsStatus, formData, originalAddressParty, suggestedAddresses = []) {\r\n let isConfirmed = false;\r\n\r\n const currentAddress = {\r\n address: formData.get(this.schema.address.name),\r\n address2: formData.get(this.schema.address2.name),\r\n city: formData.get(this.schema.city.name),\r\n stateCode: formData.get(this.schema.state.name),\r\n zip: formData.get(this.schema.zip.name)\r\n };\r\n\r\n const suggestions = suggestedAddresses?.map((address, index) => ({\r\n addressId: `${index}`,\r\n address: address.Address1,\r\n address2: address.Address2,\r\n city: address.City,\r\n stateCode: address.StateCode,\r\n zip: address.ZipPostalCode\r\n }));\r\n\r\n const onSubmitHandler = async (isOriginal, value) => {\r\n let addressParty = originalAddressParty;\r\n\r\n if(!isOriginal) {\r\n const index = suggestions.findIndex(({ addressId }) => addressId === value);\r\n if(index > -1) {\r\n addressParty = {\r\n ...addressParty,\r\n ...suggestedAddresses[index]\r\n };\r\n }\r\n }\r\n\r\n const response = await addressBookStore.actions.addOrEditAddress({\r\n addressId: this.addressId,\r\n addressParty,\r\n isUserConfirmed: true\r\n });\r\n\r\n if(response.success) {\r\n isConfirmed = true;\r\n }\r\n\r\n return response;\r\n };\r\n\r\n const addressValidation = new AddressValidation(\r\n upsStatus,\r\n currentAddress,\r\n suggestions,\r\n this.context,\r\n {},\r\n onSubmitHandler\r\n );\r\n\r\n await addressValidation.prompt();\r\n addressValidation.destroy();\r\n return isConfirmed;\r\n }\r\n\r\n destroy() {\r\n this.unwatchStore?.();\r\n this.$el.remove();\r\n }\r\n\r\n init() {\r\n this.setupIds();\r\n this.bindElementsToSchema();\r\n this.renderLabels();\r\n this.renderStates();\r\n this.renderAttributes();\r\n this.setupLoader();\r\n this.setupListeners();\r\n }\r\n\r\n bindElementsToSchema() {\r\n this.schema = Object.fromEntries(\r\n Object.entries(this.schema).map(([ key, value ]) => {\r\n const $error = this.$el.find(`#${value.errorId}`);\r\n const $input = this.$el.find(`#${value.id}`);\r\n const $container = $input.closest('[data-region=\"field\"]');\r\n const $label = this.$el.find(`[for=${value.id}]`);\r\n return [ key, { ...value, $container, $error, $input, $label } ];\r\n })\r\n );\r\n }\r\n\r\n onCancelClick() {\r\n this.onCancel?.();\r\n }\r\n\r\n onLoadingChange(loadingForm) {\r\n this.loader.active = loadingForm;\r\n\r\n if(loadingForm) {\r\n this.$loader.addClass(CLASS_NAME_LOADING);\r\n } else {\r\n this.$loader.removeClass(CLASS_NAME_LOADING);\r\n }\r\n }\r\n\r\n onInputChange(evt) {\r\n $(evt.currentTarget).data('changed', true);\r\n }\r\n\r\n onValidatedInput($container, $input, errorId) {\r\n if($input.is(':valid')) {\r\n $container.removeClass(CLASS_NAME_ERROR);\r\n $input\r\n .removeClass(CLASS_NAME_ERROR)\r\n .attr({ 'aria-describedby ': null, 'aria-invalid': false });\r\n } else {\r\n $container.addClass(CLASS_NAME_ERROR);\r\n $input\r\n .addClass(CLASS_NAME_ERROR)\r\n .attr({ 'aria-describedby': errorId, 'aria-invalid': true });\r\n }\r\n }\r\n\r\n onSubmit(evt) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n\r\n if(!this.$form.get(0).checkValidity()) {\r\n this.validate();\r\n } else {\r\n this.#save();\r\n }\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n if(this.replaceOriginEl) {\r\n this.$originEl.replaceWith(this.$el);\r\n } else {\r\n this.$originEl.html(this.$el);\r\n }\r\n }\r\n\r\n return this.$el;\r\n }\r\n\r\n renderAttributes() {\r\n Object.values(this.schema).forEach((field) => {\r\n if(field.$input.is('[type=text],select')) {\r\n field.$input\r\n .attr({\r\n 'placeholder': field.label,\r\n 'name': field.name,\r\n 'aria-required': field.required\r\n })\r\n .prop('required', field.required)\r\n .val(field.value);\r\n } else if(field.$input.is('[type=checkbox]')) {\r\n field.$input\r\n .attr({\r\n 'name': field.name,\r\n 'aria-required': field.required\r\n })\r\n .prop({\r\n 'checked': field.value,\r\n 'required': field.required\r\n });\r\n }\r\n });\r\n }\r\n\r\n renderLabels() {\r\n this.$headingLabel.html(this.context.heading);\r\n this.$cancelLabel.html(this.context.cancel);\r\n this.$saveLabel.html(this.context.save);\r\n\r\n Object.values(this.schema).forEach((field) => {\r\n field.$label.html(field.label);\r\n field.$error.html(field.error);\r\n });\r\n }\r\n\r\n renderStates() {\r\n const fragment = document.createDocumentFragment();\r\n\r\n states.forEach((state) => {\r\n const option = document.createElement('option');\r\n option.value = state.value;\r\n option.innerHTML = state.text;\r\n fragment.appendChild(option);\r\n });\r\n\r\n this.$stateCtrl.append(fragment);\r\n }\r\n\r\n setupIds() {\r\n this.$primaryAddress.attr('id', this.schema.primaryAddress.id);\r\n this.$firstNameCtrl.attr('id', this.schema.firstName.id);\r\n this.$lastNameCtrl.attr('id', this.schema.lastName.id);\r\n this.$addressCtrl.attr('id', this.schema.address.id);\r\n this.$address2Ctrl.attr('id', this.schema.address2.id);\r\n this.$cityCtrl.attr('id', this.schema.city.id);\r\n this.$stateCtrl.attr('id', this.schema.state.id);\r\n this.$zipCtrl.attr('id', this.schema.zip.id);\r\n this.$phoneCtrl.attr('id', this.schema.phone.id);\r\n\r\n this.$primaryAddressLabel.attr('for', this.schema.primaryAddress.id);\r\n this.$firstNameLabel.attr('for', this.schema.firstName.id);\r\n this.$lastNameLabel.attr('for', this.schema.lastName.id);\r\n this.$addressLabel.attr('for', this.schema.address.id);\r\n this.$address2Label.attr('for', this.schema.address2.id);\r\n this.$cityLabel.attr('for', this.schema.city.id);\r\n this.$stateLabel.attr('for', this.schema.state.id);\r\n this.$zipLabel.attr('for', this.schema.zip.id);\r\n this.$phoneLabel.attr('for', this.schema.phone.id);\r\n\r\n this.$primaryAddressErrorLabel.attr('id', this.schema.primaryAddress.errorId);\r\n this.$firstNameErrorLabel.attr('id', this.schema.firstName.errorId);\r\n this.$lastNameErrorLabel.attr('id', this.schema.lastName.errorId);\r\n this.$addressErrorLabel.attr('id', this.schema.address.errorId);\r\n this.$address2ErrorLabel.attr('id', this.schema.address2.errorId);\r\n this.$cityErrorLabel.attr('id', this.schema.city.errorId);\r\n this.$stateErrorLabel.attr('id', this.schema.state.errorId);\r\n this.$zipErrorLabel.attr('id', this.schema.zip.errorId);\r\n this.$phoneErrorLabel.attr('id', this.schema.phone.errorId);\r\n }\r\n\r\n setupListeners() {\r\n this.$cancelCtrl.on('click', () => this.onCancelClick());\r\n this.$form.on('submit', (evt) => this.onSubmit(evt));\r\n this.$form.on('change', (evt) => this.onInputChange(evt));\r\n\r\n this.$form.find('input[type=\"text\"], select[data-control=\"state\"]').each((idx,el) => {\r\n $(el).on('change keyup', () => {\r\n let formSubmitButton = $(this.$form).find(':submit');\r\n $(formSubmitButton).removeAttr('disabled');\r\n });\r\n });\r\n\r\n this.unwatchStore = addressBookStore.watch('loadingForm', (...[,,loadingForm]) => this.onLoadingChange(loadingForm));\r\n }\r\n\r\n setupLoader() {\r\n this.loader = new AjaxLoader(this.$loader, {\r\n ...DEFAULT_LOADER_OPTIONS,\r\n customIcon: this.context.loadingIcon,\r\n srText: this.context.loadingSrText\r\n });\r\n\r\n this.loader.render();\r\n }\r\n\r\n focus() {\r\n this.$headingLabel\r\n .attr('tabindex', '0')\r\n .one('blur', () => this.$headingLabel.removeAttr('tabindex'))\r\n .get(0)\r\n .focus();\r\n }\r\n\r\n validate() {\r\n Object.values(this.schema).forEach((field) => {\r\n if(field.required && !field.$input.val()) {\r\n field.$container.addClass(CLASS_NAME_ERROR);\r\n field.$input\r\n .addClass(CLASS_NAME_ERROR)\r\n .attr({\r\n 'aria-describedby': field.errorId,\r\n 'aria-invalid': true\r\n });\r\n }\r\n\r\n field.$input.on(EVENT_INPUT, () => this.onValidatedInput(field.$container, field.$input, field.errorId));\r\n });\r\n\r\n this.$form.find('[aria-invalid=true]').get(0)?.focus();\r\n }\r\n}\r\n","import ReactiveComponent, { watch } from '@utils/reactive-component';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport { context as defaultContext } from './address-book-defaults';\r\nimport template from './templates/address-book-line/index';\r\nimport addressBookStore from '@stores/address-book/address-book-store';\r\n\r\nconst CLASS_NAME_HIDDEN = '-hidden';\r\nconst CLASS_NAME_LOADING = '-loading';\r\nconst CLASS_NAME_VISIBLE = '-visible';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n onEdit: null,\r\n replaceOriginEl: false\r\n};\r\n\r\nconst DEFAULT_LOADER_OPTIONS = {\r\n replaceOriginEl: false,\r\n size: 'lg'\r\n};\r\n\r\nexport default class AddressBookLine extends ReactiveComponent {\r\n constructor($originEl, context, addressId, options) {\r\n super();\r\n\r\n context = {\r\n ...defaultContext,\r\n ...context\r\n };\r\n\r\n options = {\r\n ...DEFAULT_OPTIONS,\r\n ...options\r\n };\r\n\r\n const $parsed = $($.parseHTML(template));\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n this.$deleteLabel = this.$el.find('[data-label=\"delete\"]');\r\n this.$editLabel = this.$el.find('[data-label=\"edit\"]');\r\n this.$primaryLabel = this.$el.find('[data-label=\"primary\"]');\r\n\r\n this.$address = this.$el.find('[data-region=\"address\"]');\r\n this.$address2 = this.$el.find('[data-region=\"address2\"]');\r\n this.$addressLine1 = this.$el.find('[data-region=\"addressLine1\"]');\r\n this.$addressLine2 = this.$el.find('[data-region=\"addressLine2\"]');\r\n this.$city = this.$el.find('[data-region=\"city\"]');\r\n this.$country = this.$el.find('[data-region=\"country\"]');\r\n this.$deleteIcon = this.$el.find('[data-region=\"deleteIcon\"]');\r\n this.$editIcon = this.$el.find('[data-region=\"editIcon\"]');\r\n this.$loader = this.$el.find('[data-region=\"loader\"]');\r\n this.$primaryIcon = this.$el.find('[data-region=\"primaryIcon\"]');\r\n this.$name = this.$el.find('[data-region=\"name\"]');\r\n this.$stamp = this.$el.find('[data-region=\"stamp\"]');\r\n this.$state = this.$el.find('[data-region=\"state\"]');\r\n this.$zip = this.$el.find('[data-region=\"zip\"]');\r\n this.$phone = this.$el.find('[data-region=\"phone\"]');\r\n\r\n this.$deleteCtrl= this.$el.find('[data-control=\"delete\"]');\r\n this.$editCtrl= this.$el.find('[data-control=\"edit\"]');\r\n this.$primaryCtrl= this.$el.find('[data-control=\"primary\"]');\r\n\r\n this.loader = null;\r\n this.unwatchLoadingLine = null;\r\n\r\n this.onEdit = options.onEdit;\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n\r\n this.addressId = addressId;\r\n this.context = context;\r\n\r\n this.reactive({\r\n loading: false\r\n });\r\n\r\n this.init();\r\n }\r\n\r\n [watch]() {\r\n return {\r\n loading(loading) {\r\n this.loader.active = loading;\r\n loading ? this.$loader.addClass(CLASS_NAME_LOADING) : this.$loader.removeClass(CLASS_NAME_LOADING);\r\n }\r\n }\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderLoader();\r\n this.renderRegions();\r\n this.setupListeners();\r\n }\r\n\r\n destroy() {\r\n this.unwatchLoadingLine?.();\r\n }\r\n\r\n focus() {\r\n this.$el\r\n .attr('tabindex', '0')\r\n .one('blur', () => this.$el.removeAttr('tabindex'))\r\n .get(0)\r\n .focus();\r\n }\r\n\r\n onDeleteClick() {\r\n addressBookStore.actions.deleteAddress(this.addressId);\r\n }\r\n \r\n onEditClick() {\r\n this.onEdit?.(this.addressId);\r\n }\r\n\r\n onPrimaryClick() {\r\n addressBookStore.actions.setPrimary(this.addressId);\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n if(this.replaceOriginEl) {\r\n this.$originEl.replaceWith(this.$el);\r\n } else {\r\n this.$originEl.html(this.$el);\r\n }\r\n }\r\n\r\n return this.$el;\r\n }\r\n\r\n renderIcons() {\r\n const img = document.createElement('img');\r\n img.setAttribute('aria-hidden', true);\r\n if(this.context.DeleteIcon) {\r\n const icon = img.cloneNode(false);\r\n icon.src = this.context.DeleteIcon;\r\n icon.alt = 'delete icon'\r\n this.$deleteIcon.html(icon);\r\n } else {\r\n this.$deleteIcon.hide();\r\n }\r\n\r\n if(this.context.EditIcon) {\r\n const icon = img.cloneNode(false);\r\n icon.src = this.context.EditIcon;\r\n icon.alt = 'edit icon'\r\n this.$editIcon.html(icon);\r\n } else {\r\n this.$editIcon.hide();\r\n }\r\n\r\n if(this.context.SetPrimaryIcon) {\r\n const icon = img.cloneNode(false);\r\n icon.src = this.context.SetPrimaryIcon;\r\n icon.alt = 'primary icon'\r\n this.$primaryIcon.html(icon);\r\n } else {\r\n this.$primaryIcon.hide();\r\n }\r\n }\r\n\r\n renderLabels() {\r\n this.$deleteLabel.html(this.context.Delete);\r\n this.$editLabel.html(this.context.Edit);\r\n this.$primaryLabel.html(this.context.SetPrimaryButton);\r\n this.$stamp.html(this.context.Primary);\r\n }\r\n\r\n renderLoader() {\r\n this.loader = new AjaxLoader(this.$loader, {\r\n ...DEFAULT_LOADER_OPTIONS,\r\n customIcon: this.context.LoadingIcon || null,\r\n srText: this.context.LoadingSrText || null\r\n });\r\n \r\n this.loader.render();\r\n }\r\n\r\n renderRegions() {\r\n this.togglePrimarySections();\r\n this.renderIcons();\r\n\r\n const info = addressBookStore.getters.addressInfo(this.addressId);\r\n\r\n this.$address.prepend(info.address1);\r\n this.$address2.prepend(info.address2);\r\n this.$city.html(info.city);\r\n this.$country.html(info.country);\r\n this.$name.html(info.name);\r\n this.$state.html(info.state);\r\n this.$zip.html(info.zip);\r\n // this.$phone.html(info.phone);\r\n }\r\n\r\n setupListeners() {\r\n this.$deleteCtrl.on('click', () => this.onDeleteClick());\r\n this.$editCtrl.on('click', () => this.onEditClick());\r\n this.$primaryCtrl.on('click', () => this.onPrimaryClick());\r\n\r\n this.unwatchLoadingLine = addressBookStore.watch('loadingLine', () => this.loading = addressBookStore.getters.isLoadingLine(this.addressId));\r\n }\r\n\r\n togglePrimarySections() {\r\n if(addressBookStore.getters.isPrimary(this.addressId)) {\r\n this.$stamp.addClass(CLASS_NAME_VISIBLE);\r\n this.$primaryCtrl.addClass(CLASS_NAME_HIDDEN);\r\n }\r\n }\r\n}","import parseRenderingContext from '@utils/parse-rendering-context';\r\nimport addressBookStore from '@stores/address-book/address-book-store';\r\nimport AddressBookForm from './address-book-form';\r\nimport AddressBookLine from './address-book-line';\r\nimport UpsCopyright from '../ups-copyright/ups-copyright';\r\nimport template, { lineItem, lineList } from './templates/address-book';\r\nimport { context as defaultContext } from './address-book-defaults';\r\nimport { DEFAULT_OPTIONS as formDefaults } from './address-book-form';\r\n\r\nexport default class AddressBook {\r\n constructor($el, context) {\r\n context = {\r\n ...defaultContext,\r\n ...context\r\n };\r\n\r\n const $parsed = $($.parseHTML(template));\r\n $el.append($parsed);\r\n\r\n this.$el = $el;\r\n\r\n this.$heading = this.$el.find('[data-region=\"heading\"]');\r\n this.$loader = this.$el.find('[data-region=\"loader\"]');\r\n this.$lines =this.$el.find('[data-region=\"lines\"]');\r\n this.$formSection =this.$el.find('[data-region=\"formSection\"]');\r\n this.$form = this.$el.find('[data-region=\"form\"]');\r\n this.$ups = this.$el.find('[data-region=\"ups\"]');\r\n this.$noAddresssMessage = $('.js-address-book').find('.js-add-address');\r\n\r\n this.$addCtrl = this.$el.find('[data-control=\"add\"]');\r\n\r\n this.form = null;\r\n this.formTriggerElement = null;\r\n\r\n this.lines = [];\r\n\r\n this.context = context;\r\n }\r\n\r\n init() {\r\n this.$loader.hide();\r\n\r\n this.setupLines();\r\n this.setupListeners();\r\n this.renderLines();\r\n this.renderUps();\r\n\r\n this.showLines();\r\n }\r\n\r\n onAddressesUpdate() {\r\n this.setupLines();\r\n this.renderLines();\r\n\r\n if(addressBookStore.getters.wasChanged) {\r\n this.handleFocus();\r\n }\r\n }\r\n\r\n onAfterSave(addressId) {\r\n this.showLines();\r\n\r\n if(addressId) { // edited address\r\n // lines will be re-rendered so original trigger element is lost\r\n this.formTriggerElement = null;\r\n this.handleFocus();\r\n } else { // new address\r\n this.formTriggerElement?.focus();\r\n }\r\n }\r\n\r\n onCancel() {\r\n this.showLines();\r\n this.form.destroy();\r\n this.form = null;\r\n if(this.lines.length == 0){\r\n this.$noAddresssMessage.removeClass(\"hidden\");\r\n }\r\n }\r\n\r\n onEdit(addressId) {\r\n this.$noAddresssMessage.addClass(\"hidden\");\r\n this.setupForm(addressId);\r\n this.showForm();\r\n }\r\n\r\n focus() {\r\n if(this.$heading.length) {\r\n this.$heading\r\n .attr('tabindex', 0)\r\n .one('blur', () => this.$heading.removeAttr('tabindex'))\r\n .get(0)\r\n .focus();\r\n }\r\n }\r\n\r\n handleFocus() {\r\n const newIndex = addressBookStore.getters.addressIds.indexOf(addressBookStore.state.lastChanged.addressId);\r\n if(newIndex > -1) {\r\n this.lines[newIndex].focus();\r\n } else {\r\n const fallbackIndex = addressBookStore.state.lastChanged.index - 1;\r\n if(fallbackIndex > -1 && this.lines && this.lines[fallbackIndex]) {\r\n this.lines[fallbackIndex].focus();\r\n } else {\r\n this.focus();\r\n }\r\n }\r\n }\r\n\r\n renderLines() {\r\n this.$lines.empty();\r\n this.$noAddresssMessage.addClass(\"hidden\");\r\n\r\n if(this.lines.length) {\r\n const fragment = document.createDocumentFragment();\r\n const [ list ] = $.parseHTML(lineList());\r\n\r\n this.lines.forEach((line) => {\r\n const addressLine = line.render()?.get(0);\r\n if (addressLine) {\r\n const [li] = $.parseHTML(lineItem());\r\n\r\n if (addressBookStore.getters.isPrimary(line.addressId)) {\r\n li.appendChild(addressLine);\r\n list.prepend(li);\r\n } else {\r\n li.appendChild(addressLine);\r\n list.appendChild(li);\r\n }\r\n }\r\n });\r\n\r\n fragment.appendChild(list);\r\n console.log(list);\r\n\r\n this.$lines.html(fragment);\r\n\r\n }else{\r\n if(this.$formSection.css('display') == 'none'){\r\n this.$noAddresssMessage.removeClass(\"hidden\");\r\n }\r\n }\r\n }\r\n\r\n renderUps() {\r\n const ups = new UpsCopyright(this.$ups, { replaceOriginEl: true }, {\r\n logo: {\r\n alt: this.context.UpsLogo.Alt,\r\n url: this.context.UpsLogo.Url\r\n },\r\n text: this.context.UpsCopyright\r\n });\r\n\r\n ups.render();\r\n }\r\n\r\n setupForm(addressId) {\r\n const schema = this.setupFormSchema(addressId);\r\n\r\n const options = {\r\n addressId,\r\n onAfterSave: () => this.onAfterSave(addressId),\r\n onCancel: () => this.onCancel(),\r\n schema\r\n };\r\n\r\n const context = {\r\n cancel: this.context.Cancel,\r\n heading: addressId ? this.context.EditShippingAddress : this.context.AddShippingAddress,\r\n loadingIcon: this.context.LoadingIcon,\r\n requiredToken: this.context.RequiredToken,\r\n save: this.context.SaveAddress,\r\n loadingSrText: this.context.LoadingSrText,\r\n validation: this.context.RequiredMessage,\r\n UpsLogo: {\r\n Alt: this.context.UpsLogo.Alt,\r\n Url: this.context.UpsLogo.Url\r\n }\r\n };\r\n\r\n this.form = new AddressBookForm(this.$form, options, context);\r\n this.form.render();\r\n }\r\n\r\n setupFormSchema(addressId) {\r\n const addressInfo = addressBookStore.getters.addressInfo(addressId);\r\n const defaultSchema = { ...formDefaults.schema };\r\n return {\r\n primaryAddress: {\r\n ...defaultSchema.primaryAddress,\r\n label: this.context.SetPrimaryCheckbox,\r\n name: 'IsPrimary',\r\n value: addressInfo.isPrimary\r\n },\r\n firstName: {\r\n ...defaultSchema.firstName,\r\n label: this.context.FirstName,\r\n name: 'FirstName',\r\n value: addressInfo.firstName || ''\r\n },\r\n lastName: {\r\n ...defaultSchema.lastName,\r\n label: this.context.LastName,\r\n name: 'LastName',\r\n value: addressInfo.lastName || ''\r\n },\r\n address: {\r\n ...defaultSchema.address,\r\n label: this.context.Address,\r\n name: 'Address1',\r\n value: addressInfo.address1 || ''\r\n },\r\n address2: {\r\n ...defaultSchema.address2,\r\n label: this.context.Address2,\r\n name: 'Address2',\r\n value: addressInfo.address2 || ''\r\n },\r\n city: {\r\n ...defaultSchema.city,\r\n label: this.context.City,\r\n name: 'City',\r\n value: addressInfo.city || ''\r\n },\r\n state: {\r\n ...defaultSchema.state,\r\n label: this.context.State,\r\n name: 'StateCode',\r\n value: addressInfo.stateCode || ''\r\n },\r\n zip: {\r\n ...defaultSchema.zip,\r\n label: this.context.Zip,\r\n name: 'ZipPostalCode',\r\n value: addressInfo.zip || ''\r\n },\r\n phone: {\r\n ...defaultSchema.phone,\r\n label: this.context.Phone,\r\n name: 'PhoneNumber',\r\n value: addressInfo.phone || ''\r\n }\r\n };\r\n }\r\n\r\n setupLines() {\r\n const lines = [];\r\n\r\n addressBookStore.getters.addressIds.forEach((addressId) => {\r\n lines.push(new AddressBookLine(null, this.context, addressId, {\r\n onEdit: (...args) => this.onEdit(...args)\r\n }));\r\n });\r\n\r\n this.lines.forEach((line) => line.destroy());\r\n this.lines = lines;\r\n }\r\n\r\n setupListeners() {\r\n addressBookStore.watch('addresses', () => this.onAddressesUpdate());\r\n this.$addCtrl.on('click', () => this.onEdit());\r\n }\r\n\r\n showLines() {\r\n this.$formSection.hide();\r\n this.$lines.show();\r\n\r\n this.formTriggerElement?.focus();\r\n this.formTriggerElement = null;\r\n }\r\n\r\n showForm() {\r\n this.$lines.hide();\r\n this.$formSection.show();\r\n\r\n this.formTriggerElement = document.activeElement;\r\n this.form.focus();\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-address-book');\r\n rootEls?.forEach((el) => {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n const addressBook = new AddressBook($el, renderingContext);\r\n \r\n if(addressBookStore.loaded) {\r\n addressBook.init();\r\n } else {\r\n const unwatch = addressBookStore.watch('loaded', (...[,,loaded]) => {\r\n if(loaded) {\r\n addressBook.init();\r\n unwatch();\r\n }\r\n });\r\n }\r\n });\r\n\r\n if(rootEls.length && !addressBookStore.loaded) {\r\n addressBookStore.actions.getAddresses();\r\n }\r\n});\r\n","// Module\nvar code = \"<div class=\\\"address-book-form\\\"> <form class=\\\"vca-form -address\\\" method=\\\"POST\\\" novalidate data-region=\\\"form\\\" data-changed=\\\"false\\\"> <h4 class=\\\"address-book-form__heading\\\" data-label=\\\"heading\\\"></h4> <div class=\\\"address-book-form__fields\\\"> <div class=\\\"form-label-group input-label-wrapper\\\" data-region=\\\"field\\\"> <input class=\\\"border-thin\\\" type=\\\"text\\\" autofill=\\\"given-name\\\" data-control=\\\"firstName\\\"/> <label data-label=\\\"firstName\\\"></label> <span class=\\\"error-message\\\" data-label=\\\"firstNameError\\\"> </span> </div> <div class=\\\"form-label-group input-label-wrapper\\\" data-region=\\\"field\\\"> <input class=\\\"border-thin\\\" type=\\\"text\\\" autofill=\\\"family-name\\\" data-control=\\\"lastName\\\"/> <label data-label=\\\"lastName\\\"></label> <span class=\\\"error-message\\\" data-label=\\\"lastNameError\\\"> </span> </div> <div class=\\\"form-label-group input-label-wrapper\\\" data-region=\\\"field\\\"> <input class=\\\"border-thin\\\" type=\\\"text\\\" autofill=\\\"address-line1\\\" data-control=\\\"address\\\"/> <label data-label=\\\"address\\\"></label> <span class=\\\"error-message\\\" data-label=\\\"addressError\\\"> </span> </div> <div class=\\\"form-label-group input-label-wrapper\\\" data-region=\\\"field\\\"> <input class=\\\"border-thin\\\" type=\\\"text\\\" autofill=\\\"address-line2\\\" data-control=\\\"address2\\\"/> <label data-label=\\\"address2\\\"></label> <span class=\\\"error-message\\\" data-label=\\\"address2Error\\\"> </span> </div> <div class=\\\"form-label-group input-label-wrapper\\\" data-region=\\\"field\\\"> <input class=\\\"border-thin\\\" type=\\\"text\\\" autocomplete=\\\"address-level2\\\" data-control=\\\"city\\\"/> <label data-label=\\\"city\\\"></label> <span class=\\\"error-message\\\" data-label=\\\"cityError\\\"> </span> </div> <div class=\\\"form-label-group input-label-wrapper\\\" data-region=\\\"field\\\"> <select class=\\\"border-thin\\\" autofill=\\\"address-level1\\\" data-control=\\\"state\\\"> <option selected=\\\"selected\\\" disabled=\\\"disabled\\\" hidden></option> </select> <label data-label=\\\"state\\\"></label> <span class=\\\"error-message\\\" data-label=\\\"stateError\\\"> </span> </div> <div class=\\\"form-label-group input-label-wrapper\\\" data-region=\\\"field\\\"> <input class=\\\"border-thin\\\" type=\\\"text\\\" autocomplete=\\\"postal-code\\\" data-control=\\\"zip\\\"/> <label data-label=\\\"zip\\\"></label> <span class=\\\"error-message\\\" data-label=\\\"zipError\\\"> </span> </div> <div class=\\\"form-label-group input-label-wrapper\\\" data-region=\\\"field\\\"> <input class=\\\"border-thin\\\" type=\\\"text\\\" autocomplete=\\\"tel\\\" data-control=\\\"phone\\\"/> <label data-label=\\\"phone\\\"></label> <span class=\\\"error-message\\\" data-label=\\\"phone\\\"> </span> </div> </div> <div class=\\\"address-book-form__controls\\\"> <button type=\\\"submit\\\" class=\\\"address-book-form__submit btn btn-outline-alt active\\\" disabled=\\\"disabled\\\"> <span data-label=\\\"save\\\"></span> </button> <button type=\\\"button\\\" class=\\\"address-book-form__cancel\\\" data-control=\\\"cancel\\\"> <span data-label=\\\"cancel\\\"></span> </button> </div> <p class=\\\"address-book-form__error\\\" role=\\\"alert\\\" data-region=\\\"error\\\"></p> </form> <div class=\\\"address-book-form__loader\\\" data-region=\\\"loader\\\"></div> </div> \";\n// Exports\nmodule.exports = code;","import template from './address-book-form.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"address-book-line\\\"> <div class=\\\"address-book-line__main\\\"> <div class=\\\"address-book-line__details\\\"> <div class=\\\"address-book-line__name\\\"> <span data-region=\\\"name\\\"></span> <span class=\\\"address-book-line__stamp\\\" data-region=\\\"stamp\\\"></span> </div> <div class=\\\"address-book-line__address\\\"> <span role=\\\"text\\\"> <div><span data-region=\\\"address\\\"></span> <span data-region=\\\"address2\\\"></span></div> <div><span data-region=\\\"city\\\"></span>, <span data-region=\\\"state\\\"></span> <span data-region=\\\"zip\\\"></span></div> <div data-region=\\\"country\\\"></div> <div data-region=\\\"phone\\\"></div> </span> </div> </div> <div class=\\\"address-book-line__controls\\\"> <button type=\\\"button\\\" class=\\\"address-book-line__btn\\\" data-control=\\\"primary\\\"> <span class=\\\"address-book-line__icon\\\" data-region=\\\"primaryIcon\\\"></span> <span data-label=\\\"primary\\\"></span> </button> <button type=\\\"button\\\" class=\\\"address-book-line__btn\\\" data-control=\\\"edit\\\"> <span class=\\\"address-book-line__icon\\\" data-region=\\\"editIcon\\\"></span> <span data-label=\\\"edit\\\"></span> </button> <button type=\\\"button\\\" class=\\\"address-book-line__btn\\\" data-control=\\\"delete\\\"> <span class=\\\"address-book-line__icon\\\" data-region=\\\"deleteIcon\\\"></span> <span data-label=\\\"delete\\\"></span> </button> </div> </div> <div class=\\\"address-book-line__loader\\\" data-region=\\\"loader\\\"></div> </div> \";\n// Exports\nmodule.exports = code;","import template from './address-book-line.html'\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div data-region=\\\"lines\\\"></div> <div data-region=\\\"formSection\\\" style=\\\"display:none\\\"> <div data-region=\\\"form\\\"></div> <div class=\\\"text-center my-md-5\\\"> <div class=\\\"d-inline-block mx-auto\\\"> <div data-region=\\\"ups\\\"></div> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","import template from './address-book.html';\r\n\r\nconst lineList = () => `<ul></ul>`;\r\n\r\nconst lineItem = () => `<li class=\"address-book__item\"></li>`;\r\n\r\nexport {\r\n lineItem,\r\n lineList\r\n}\r\n\r\nexport default template;\r\n","const context = {\r\n AddressEntered: 'Address You Entered',\r\n AddressValidation: 'Address Validation',\r\n Cancel: 'Cancel',\r\n Close: 'Close',\r\n ConfirmAddress: 'The address I entered is correct. Incorrect information may result in delay or cancellation of my order.',\r\n LoadingSrText: 'Loading...',\r\n SaveAddress: 'Save Address',\r\n SelectSuggestedAddress: 'Please select one of the suggested options',\r\n SelectSuggestedFieldError: 'Please select one of the suggested options',\r\n UnknownAddress: 'The address entered does not validate against any known address. Please cancel and edit the address, or confirm the address you entered is correct.',\r\n UnknownAddressFieldError: 'Please cancel and edit the address, or confirm the address you entered is correct.',\r\n UpsCopyright: 'UPS, the UPS brand mark, and the Color Brown are trademarks of United Parcel Service of America, Inc. All Rights Reserved',\r\n UpsLogo: {\r\n Alt: 'UPS-default-context',\r\n Url: '/images-2/ups-logo.svg'\r\n },\r\n UseSuggestedAddress: 'Use Suggested Address'\r\n};\r\n\r\nexport {\r\n context\r\n};\r\n","import uniqid from 'uniqid';\r\nimport isFn from '@utils/is-function';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport UpsCopyright from '../ups-copyright/ups-copyright';\r\nimport template, { radio as radioTemplate } from './templates/';\r\nimport { context as defaultContext } from './address-validation-defaults';\r\nimport { validationStatusCodes } from '@stores/address-book/address-book-store';\r\n\r\nconst $body = $(document.body);\r\n\r\nconst CLASS_NAME_INPUT_ERROR = '-error';\r\n\r\nconst CONFIRM_ORIGINAL_ADDRESS_VALUE = '_confirmedOriginalAddress_';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n originFocusElement: null,\r\n preventFocusOrigin: false\r\n};\r\n\r\nconst VALIDATION_STATUS_CODES = {\r\n VALID_ADDRESS: 0,\r\n SHOW_SUGGESTIONS: 1,\r\n INVALID_ADDRESS: 2, \r\n UPS_UNAVAILABLE: 3\r\n};\r\n\r\nconst logUpsServiceError = () => console.warn('UPS Service Unavailable: Address saved but not validated.');\r\n\r\nconst showSuggestions = (status) => status === VALIDATION_STATUS_CODES.SHOW_SUGGESTIONS || status === VALIDATION_STATUS_CODES.INVALID_ADDRESS;\r\n\r\nexport default class AddressValidation {\r\n #value = null;\r\n\r\n /**\r\n * @typedef {{ addressId: string|number, address: string, address2: string, city: string, stateCode: string, zip: string }} Address\r\n * \r\n * @param {number} status status code of address entered by user\r\n * @param {Object<Address>} address object detailing user's currently entered address\r\n * @param {Array<Address>} suggestions array of address suggestions\r\n * @param {Object<string,any>} context object of dictionary mappings\r\n * @param {Ojbect<string,any>} options class configuration options\r\n * @param {Function?} onSubmitHandler function to call when user choice submitted\r\n */\r\n constructor(status, originalAddress, suggestions, context, options = {}, onSubmitHandler = null) {\r\n context = { ...defaultContext, ...context };\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n\r\n const $parsed = $($.parseHTML(template));\r\n this.$el = $parsed;\r\n\r\n this.$cancelLabel = this.$el.find('[data-label=\"cancel\"]');\r\n this.$confirmCheckboxLabel = this.$el.find('[data-label=\"confirmCheckbox\"]');\r\n this.$confirmRadioLabel = this.$el.find('[data-label=\"confirmRadio\"]');\r\n this.$enteredAddressLabel = this.$el.find('[data-label=\"enteredAddress\"]');\r\n this.$headingLabel = this.$el.find('[data-label=\"heading\"]');\r\n this.$saveLabel = this.$el.find('[data-label=\"save\"]');\r\n this.$suggestedAddressLabel = this.$el.find('[data-label=\"suggestedAddress\"]');\r\n\r\n this.$checkbox = this.$el.find('[data-region=\"checkbox\"]');\r\n this.$checkboxError = this.$el.find('[data-region=\"checkboxError\"]');\r\n this.$description = this.$el.find('[data-region=\"description\"]');\r\n this.$enteredAddress = this.$el.find('[data-region=\"enteredAddress\"]');\r\n this.$error = this.$el.find('[data-region=\"error\"]');\r\n this.$invalid = this.$el.find('[data-region=\"invalid\"]');\r\n this.$radio = this.$el.find('[data-region=\"radio\"]');\r\n this.$radioError = this.$el.find('[data-region=\"radioError\"]');\r\n this.$suggestedAddress = this.$el.find('[data-region=\"suggestedAddress\"]');\r\n\r\n this.$closeCtrl = this.$el.find('[data-control=\"close\"]');\r\n this.$confirmCheckboxCtrl = this.$el.find('[data-control=\"confirmCheckbox\"]');\r\n this.$confirmRadioCtrl = this.$el.find('[data-control=\"confirmRadio\"]');\r\n this.$formCtrl = this.$el.find('[data-control=\"form\"]');\r\n this.$radioCtrl = this.$el.find('[data-control=\"radio\"]');\r\n\r\n this.$loaderPlaceholder = this.$el.find('[data-placeholder=\"loader\"]');\r\n this.$upsPlaceholder = this.$el.find('[data-placeholder=\"ups\"]');\r\n\r\n this.loader = null;\r\n\r\n this.id = uniqid.time('_addressValidation_');\r\n\r\n this.status = status;\r\n this.originalAddress = originalAddress || {};\r\n this.suggestions = suggestions || [];\r\n this.context = context;\r\n this.onSubmitHandler = isFn(onSubmitHandler) || null;\r\n\r\n this.originFocusElement = options.originFocusElement || document.activeElement;\r\n this.preventFocusOrigin = options.preventFocusOrigin;\r\n\r\n this.isValidated = false;\r\n\r\n this.init();\r\n }\r\n\r\n get #isOriginal() {\r\n return this.#value === CONFIRM_ORIGINAL_ADDRESS_VALUE;\r\n }\r\n\r\n get isInvalidAddress() {\r\n return this.status === validationStatusCodes.INVALID_ADDRESS;\r\n }\r\n\r\n destroy() {\r\n if(this.$el.is(':visible')) {\r\n this.$el.on('hidden.bs.modal', () => this.$el.remove());\r\n this.hide();\r\n } else {\r\n this.$el.remove();\r\n }\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderRegions();\r\n this.setupIds();\r\n this.setupLoader();\r\n this.setupUps();\r\n this.toggleView();\r\n this.setupListeners();\r\n this.render();\r\n }\r\n\r\n onHidden() {\r\n if(!this.preventFocusOrigin) {\r\n this.originFocusElement?.focus();\r\n }\r\n }\r\n\r\n onInputChange({ checked, type, value }) {\r\n if(type === 'checkbox') {\r\n this.#value = checked ? value : null;\r\n } else {\r\n this.#value = value;\r\n }\r\n }\r\n\r\n onInvalidInput($input, $errorEl, errorId) {\r\n if($input.filter(':checked').length) {\r\n $input\r\n .removeClass(CLASS_NAME_INPUT_ERROR)\r\n .removeAttr('aria-describedby aria-invalid');\r\n \r\n $errorEl.hide();\r\n } else {\r\n $input\r\n .addClass(CLASS_NAME_INPUT_ERROR)\r\n .attr({ 'aria-describedby': errorId, 'aria-invalid': true });\r\n \r\n $errorEl.show();\r\n }\r\n }\r\n\r\n async onSubmit(evt) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n\r\n if(this.$formCtrl.get(0).checkValidity()) {\r\n if(this.onSubmitHandler) {\r\n this.setLoading();\r\n this.$error.hide().html();\r\n\r\n const { success, error } = await this.onSubmitHandler(this.#isOriginal, this.#value);\r\n\r\n if(success) {\r\n this.isValidated = true;\r\n this.hide();\r\n } else if(error) {\r\n this.$error.show().html(error);\r\n }\r\n\r\n this.setLoading(false);\r\n } else {\r\n this.hide();\r\n }\r\n } else {\r\n this.validate();\r\n }\r\n }\r\n\r\n parseAddress({ address, address2, city, stateCode, zip }) {\r\n let street = address;\r\n\r\n if(address2) {\r\n street += ` ${address2}`;\r\n }\r\n\r\n return `${street}, ${city}, ${stateCode} ${zip}`;\r\n }\r\n\r\n render() {\r\n $body.append(this.$el);\r\n }\r\n\r\n renderLabels() {\r\n this.$headingLabel.html(this.context.AddressValidation);\r\n\r\n this.$cancelLabel.html(this.context.Cancel);\r\n this.$confirmCheckboxLabel.html(this.context.ConfirmAddress);\r\n this.$confirmRadioLabel.html(this.context.ConfirmAddress);\r\n this.$enteredAddressLabel.html(this.context.AddressEntered);\r\n this.$headingLabel.html(this.context.AddressValidation);\r\n this.$saveLabel.html(this.context.SaveAddress);\r\n this.$suggestedAddressLabel.html(this.context.UseSuggestedAddress);\r\n }\r\n\r\n renderRegions() {\r\n this.$checkboxError.html(this.context.UnknownAddressFieldError);\r\n this.$description.html(this.context.SelectSuggestedAddress);\r\n this.$enteredAddress.html(this.parseAddress(this.originalAddress));\r\n this.$invalid.html(this.context.UnknownAddress);\r\n this.$radioError.html(this.context.SelectSuggestedFieldError);\r\n\r\n this.$confirmCheckboxCtrl.attr('value', CONFIRM_ORIGINAL_ADDRESS_VALUE);\r\n this.$confirmRadioCtrl.attr('value', CONFIRM_ORIGINAL_ADDRESS_VALUE);\r\n }\r\n\r\n renderSuggestions() {\r\n const fragment = document.createDocumentFragment();\r\n\r\n this.suggestions.forEach((address) => {\r\n const label = this.parseAddress(address)\r\n const radioHtmlStr = radioTemplate({\r\n id: `${this.id}_suggestions_radio_${address.addressId}_`,\r\n label,\r\n value: address.addressId\r\n });\r\n \r\n const [ radioNode ] = $.parseHTML(radioHtmlStr.trim());\r\n fragment.appendChild(radioNode);\r\n });\r\n\r\n this.$radio.html(fragment);\r\n\r\n this.$radioCtrl = this.$el.find('[data-control=\"radio\"]');\r\n }\r\n\r\n setupConfirmationView() {\r\n this.$description.remove();\r\n this.$suggestedAddress.remove();\r\n }\r\n\r\n setupIds() {\r\n const confirmCheckboxId = `${this.id}_confirm_checkbox_`;\r\n const confirmRadioId = `${this.id}_confirm_radio_`;\r\n const headingId = `${this.id}_heading_`;\r\n const suggestedHeadingId = `${this.id}_suggested_heading_`;\r\n\r\n this.$headingLabel.attr('id', headingId);\r\n this.$el.attr({\r\n 'id': this.id,\r\n 'aria-labeledby': headingId\r\n });\r\n\r\n this.$suggestedAddressLabel.attr('id', suggestedHeadingId);\r\n this.$suggestedAddress.attr('aria-labelledby', suggestedHeadingId);\r\n\r\n this.$confirmCheckboxCtrl.attr('id', confirmCheckboxId);\r\n this.$confirmCheckboxLabel.attr('for', confirmCheckboxId);\r\n this.$confirmRadioCtrl.attr('id', confirmRadioId);\r\n this.$confirmRadioLabel.attr('for', confirmRadioId);\r\n }\r\n\r\n setupListeners() {\r\n this.$el.on('hidden.bs.modal', () => this.onHidden());\r\n this.$formCtrl.on('submit', (evt) => this.onSubmit(evt));\r\n\r\n this.$confirmCheckboxCtrl.on('change', (evt) => this.onInputChange(evt.target));\r\n const $radios = this.$radioCtrl.add(this.$confirmRadioCtrl.get(0));\r\n $radios.on('change', (evt) => this.onInputChange(evt.target));\r\n }\r\n\r\n setupLoader() {\r\n this.loader = new AjaxLoader(this.$loaderPlaceholder, {\r\n light: true,\r\n replaceOriginEl: false,\r\n size: 'xs',\r\n srText: this.context.LoadingSrText\r\n });\r\n\r\n this.loader.render();\r\n }\r\n\r\n setLoading(loading = true) {\r\n if(this.loader) this.loader.active = loading;\r\n }\r\n\r\n setupSuggestionsView() {\r\n this.$checkbox.remove();\r\n this.$invalid.remove();\r\n\r\n this.renderSuggestions();\r\n }\r\n\r\n setupUps() {\r\n const context = { \r\n logo: {\r\n alt: this.context.UpsLogo.Alt,\r\n url: this.context.UpsLogo.Url\r\n },\r\n text: this.context.UpsCopyright\r\n };\r\n\r\n const ups = new UpsCopyright(\r\n this.$upsPlaceholder,\r\n { replaceOriginEl: true },\r\n context\r\n );\r\n\r\n ups.render();\r\n }\r\n\r\n toggleView() {\r\n if(this.isInvalidAddress) {\r\n this.setupConfirmationView();\r\n } else {\r\n this.setupSuggestionsView();\r\n }\r\n }\r\n\r\n show() {\r\n $(`#${this.id}`).modal('show');\r\n }\r\n\r\n hide() {\r\n $(`#${this.id}`).modal('hide');\r\n }\r\n\r\n prompt() {\r\n this.show();\r\n\r\n return new Promise((resolve) => {\r\n this.$el.one('hide.bs.modal', () => {\r\n resolve({\r\n isValidated: this.isValidated,\r\n isOriginal: this.#isOriginal,\r\n value: this.#value\r\n });\r\n });\r\n });\r\n }\r\n\r\n validate() {\r\n const errorId = `${this.id}_error_`;\r\n if(this.isInvalidAddress) {\r\n this.$confirmCheckboxCtrl\r\n .addClass(CLASS_NAME_INPUT_ERROR)\r\n .attr({ 'aria-describedby': errorId, 'aria-invalid': true })\r\n .on('change', () => this.onInvalidInput(this.$confirmCheckboxCtrl, this.$checkboxError, errorId));\r\n \r\n this.$checkboxError\r\n .show()\r\n .attr('id', errorId);\r\n } else {\r\n const $radioCtrls = this.$radioCtrl.add(this.$confirmRadioCtrl.get(0));\r\n $radioCtrls\r\n .addClass(CLASS_NAME_INPUT_ERROR)\r\n .attr({ 'aria-describedby': errorId, 'aria-invalid': true })\r\n .on('change', () => this.onInvalidInput($radioCtrls, this.$radioError, errorId));\r\n \r\n this.$radioError\r\n .show()\r\n .attr('id', errorId);\r\n }\r\n\r\n this.$formCtrl.find('[aria-invalid=true]').get(0)?.focus();\r\n }\r\n}\r\n\r\nexport {\r\n VALIDATION_STATUS_CODES as statusCodes,\r\n logUpsServiceError,\r\n showSuggestions\r\n};\r\n","// Module\nvar code = \"<div class=\\\"vca-modal modal fade -address-validation\\\" tabindex=\\\"-1\\\" role=\\\"dialog\\\"> <div class=\\\"vca-modal__dialog modal-dialog\\\" role=\\\"document\\\"> <div class=\\\"vca-modal__content modal-content\\\"> <button type=\\\"button\\\" class=\\\"vca-modal__close\\\" data-dismiss=\\\"modal\\\" data-control=\\\"close\\\"> <span class=\\\"vca-modal__close-icon -dark\\\" aria-hidden=\\\"true\\\"></span> </button> <form class=\\\"address-validation\\\" method=\\\"POST\\\" data-control=\\\"form\\\" novalidate> <div class=\\\"address-validation__header\\\"> <h1 class=\\\"address-validation__heading\\\" data-label=\\\"heading\\\"></h1> <p class=\\\"address-validation__desc\\\" data-region=\\\"description\\\"></p> <p class=\\\"address-validation__invalid\\\" data-region=\\\"invalid\\\"></p> </div> <div class=\\\"address-validation__body\\\"> <div class=\\\"address-validation__group\\\"> <h2 class=\\\"address-validation__subheading\\\" data-label=\\\"enteredAddress\\\"></h2> <p class=\\\"address-validation__desc mb-2\\\" data-region=\\\"enteredAddress\\\"></p> <div class=\\\"address-validation__field\\\" data-region=\\\"checkbox\\\"> <input class=\\\"address-validation__check\\\" type=\\\"checkbox\\\" name=\\\"SuggestedAddress\\\" value=\\\"confirmAddress\\\" required data-control=\\\"confirmCheckbox\\\"/> <label data-label=\\\"confirmCheckbox\\\"></label> </div> <div class=\\\"address-validation__error\\\" data-region=\\\"checkboxError\\\"></div> </div> <div class=\\\"address-validation__group\\\" role=\\\"group\\\" data-region=\\\"suggestedAddress\\\"> <h2 class=\\\"address-validation__subheading\\\" data-label=\\\"suggestedAddress\\\"></h2> <div data-region=\\\"radio\\\"></div> <div class=\\\"address-validation__field\\\"> <input class=\\\"address-validation__radio\\\" type=\\\"radio\\\" name=\\\"SuggestedAddress\\\" required data-control=\\\"confirmRadio\\\"/> <label data-label=\\\"confirmRadio\\\"></label> </div> <div class=\\\"address-validation__error\\\" data-region=\\\"radioError\\\"></div> </div> </div> <div class=\\\"address-validation__footer\\\"> <button type=\\\"submit\\\" class=\\\"address-validation__save btn btn-outline-alt active\\\"> <span class=\\\"position-relative\\\" role=\\\"text\\\"> <span class=\\\"position-absolute ml-n4\\\" data-placeholder=\\\"loader\\\"></span> <span data-label=\\\"save\\\"></span> </span> </button> <button type=\\\"button\\\" class=\\\"address-validation__cancel\\\" data-dismiss=\\\"modal\\\"> <span data-label=\\\"cancel\\\"></span> </button> <p class=\\\"address-validation__error mt-4 mb-0\\\" data-region=\\\"error\\\"></p> </div> </form> <div class=\\\"mx-n5 mb-n5\\\"> <div data-placeholder=\\\"ups\\\"></div> </div> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","import template from './address-validation.html';\r\n\r\nexport const radio = ({id, label, value }) => {\r\n return `\r\n <div class=\"address-validation__field\">\r\n <input\r\n class=\"address-validation__radio \"\r\n type=\"radio\"\r\n name=\"SuggestedAddress\"\r\n id=\"${id}\"\r\n value=\"${value}\"\r\n required\r\n data-control=\"radio\" />\r\n\r\n <label for=\"${id}\">\r\n ${label}\r\n </label>\r\n </div>\r\n `;\r\n};\r\n\r\nexport default template;\r\n","import ReactiveComponent, { watch } from '../../utils/reactive-component';\r\nimport template from './templates';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n aria: true,\r\n ariaLive: 'polite',\r\n className: '',\r\n customIcon: null,\r\n light: false,\r\n replaceOriginEl: true,\r\n size: '',\r\n srText: 'Loading...',\r\n visible: false\r\n};\r\n\r\nexport default class AjaxLoader extends ReactiveComponent {\r\n constructor($originEl, options) {\r\n super();\r\n\r\n options = {\r\n ...DEFAULT_OPTIONS,\r\n ...options\r\n };\r\n\r\n const parsedTemplate = $.parseHTML(template(options));\r\n\r\n this.$el = $(parsedTemplate);\r\n this.$originEl = $originEl;\r\n this.$loader = this.$el.find('[data-region=\"loader\"]');\r\n\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n\r\n this.reactive({\r\n active: options.visible\r\n });\r\n\r\n this.init();\r\n\r\n if(options.visible) {\r\n this.render();\r\n }\r\n }\r\n\r\n [watch]() {\r\n return { active: this.updateState };\r\n }\r\n\r\n init() {\r\n this.updateState();\r\n }\r\n\r\n updateState() {\r\n if(this.active) {\r\n this.$loader.addClass('-active');\r\n } else {\r\n this.$loader.removeClass('-active');\r\n }\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n if(this.replaceOriginEl) {\r\n this.$originEl.replaceWith(this.$el);\r\n } else {\r\n this.$originEl.html(this.$el);\r\n }\r\n }\r\n\r\n return this.$el;\r\n }\r\n}\r\n\r\n$(() => {\r\n $('.js-ajax-loader').each(function() {\r\n const $el = $(this);\r\n const options = {\r\n aria: $el.data('aria') ?? DEFAULT_OPTIONS.aria,\r\n ariaLive: $el.data('aria-live') || DEFAULT_OPTIONS.ariaLive,\r\n className: $el.data('class-name') || DEFAULT_OPTIONS.className,\r\n customIcon: $el.data('custom-icon') || DEFAULT_OPTIONS.customIcon,\r\n light: $el.data('light') || DEFAULT_OPTIONS.light,\r\n replaceOriginEl: DEFAULT_OPTIONS.replaceOriginEl,\r\n size: $el.data('size') || DEFAULT_OPTIONS.size,\r\n srText: $el.data('sr-text') || DEFAULT_OPTIONS.srText,\r\n visible: true\r\n };\r\n \r\n new AjaxLoader($el, options);\r\n });\r\n});\r\n","const animation = `\r\n <span class=\"ajax-loader__animation\" aria-hidden=\"true\">\r\n <span class=\"ajax-loader__item\"></span>\r\n <span class=\"ajax-loader__item\"></span>\r\n <span class=\"ajax-loader__item\"></span>\r\n <span class=\"ajax-loader__item\"></span>\r\n <span class=\"ajax-loader__item\"></span>\r\n <span class=\"ajax-loader__item\"></span>\r\n <span class=\"ajax-loader__item\"></span>\r\n <span class=\"ajax-loader__item\"></span>\r\n <span class=\"ajax-loader__item\"></span>\r\n <span class=\"ajax-loader__item\"></span>\r\n <span class=\"ajax-loader__item\"></span>\r\n <span class=\"ajax-loader__item\"></span>\r\n </span>\r\n`;\r\n\r\nconst icon = (src) => `\r\n <span class=\"ajax-loader__icon\">\r\n <img src=\"${src}\" alt=\"loader icon\" aria-hidden=\"true\" />\r\n </span>\r\n`;\r\n\r\nconst template = ({ aria, ariaLive, className, customIcon, light, size, srText }) => {\r\n const rootAttrs = [\r\n aria && 'aria-atomic=\"true\"',\r\n aria && ariaLive && `aria-live=\"${ariaLive}\"`\r\n ].filter(attr => attr).join(' ');\r\n\r\n const mods = [\r\n light && '-light',\r\n size && `-${size}`\r\n ].filter(mod => mod).join(' ');\r\n\r\n const visual = customIcon ? icon(customIcon) : animation;\r\n\r\n return `\r\n <span class=\"ajax-loader ${className}\" ${rootAttrs}>\r\n <span class=\"ajax-loader__main ${mods}\" data-region=\"loader\">\r\n <span class=\"sr-only\">${srText}</span>\r\n\r\n ${visual}\r\n </span>\r\n </span>\r\n `;\r\n};\r\n\r\nexport default template;\r\n","import Cookies from 'js-cookie';\r\nimport isExperienceEditor from '@utils/is-experience-editor';\r\n\r\n(function (window) {\r\n\r\n var alertBanner = function () {\r\n var menuStack = [];\r\n var ui = {};\r\n var slideCount;\r\n var isMobile;\r\n var SHOW_FULL_TEXT = 'collapsed';\r\n var MEDIA_QUERY = '(max-width: 575px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$readMoreBtn = $('.js-alert-banner-readmore-btn');\r\n ui.$bannerText = '.js-alert-banner-text';\r\n ui.$removeAlertBtn = $('.js-alertbanner-alert__banner__close-btn');\r\n ui.$alertBarMsg = $('.alert__banner__item__text__message');\r\n }\r\n\r\n function bindEvents() {\r\n ui.$readMoreBtn.on('click', showAllText);\r\n ui.$removeAlertBtn.on('click', removeAlertBanner);\r\n }\r\n\r\n function initModalAlert() {\r\n // let ssItem = sessionStorage.getItem('modal-alert');\r\n\r\n if ($('#ModalAlert').length) {\r\n let modalAlertId = $('#ModalAlert').attr('data-id');\r\n\r\n if(!getCookie(modalAlertId)){\r\n showAlertModal();\r\n setCookie(modalAlertId, 'active', 1);\r\n }\r\n \r\n }\r\n\r\n }\r\n\r\n function initAlertBanner(e) {\r\n /* if (sessionStorage.getItem('vcaalertbanner') === 'active' || getCookie('vcaalertbanner') == 'active') {\r\n $('.js-alert-banner').remove();\r\n } */\r\n\r\n // check each alert and remove if cookie found\r\n $('.js-alertbanner-alert__banner__close-btn').each(function (index, element) {\r\n let alertId = $(element).attr('data-id');\r\n let hospitalName = $(element).attr('data-hospital');\r\n\r\n if (getCookie(alertId) == 'active') {\r\n $(element).closest('.alert__banner__item').remove();\r\n }\r\n\r\n });\r\n\r\n var alertSlider = $('.js-alert__banner__slider').each(function (index, element) {\r\n $(this).addClass('alert-banner--slider-' + index);\r\n if (!isExperienceEditor) {\r\n $('.alert-banner--slider-' + index).slick({\r\n autoplay: true,\r\n autoplaySpeed: 5000,\r\n adaptiveHeight: true,\r\n infinite: false,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n arrows: true,\r\n rows: 0,\r\n dots: false\r\n });\r\n }\r\n\r\n $('.alert-banner--slider-' + index).on('afterChange', function (event, slick, currentSlide, nextSlide) {\r\n var current = ++currentSlide;\r\n //check the length of total items in .slide container\r\n //if that number is the same with the number of the last slider\r\n //Then pause the slider\r\n if (slideCount === current) {\r\n //this should do the same thing -> slider.slickPause();\r\n $('.alert-banner--slider-' + index).slick('slickPause');\r\n };\r\n });\r\n });\r\n\r\n slideCount = alertSlider.slick('getSlick').slideCount;\r\n }\r\n\r\n function setCookie(name, value, days) {\r\n let expires = \"\";\r\n if (days) {\r\n let date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = \"; expires=\" + date.toUTCString();\r\n }\r\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\r\n }\r\n\r\n function getCookie(name) {\r\n let nameEQ = name + \"=\";\r\n let ca = document.cookie.split(';');\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i];\r\n while (c.charAt(0) == ' ') c = c.substring(1, c.length);\r\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\r\n }\r\n return null;\r\n }\r\n\r\n function showAllText(e) {\r\n let $currentSlide = $(e.target).closest('.alert__banner__item');\r\n let fullMsg = $($currentSlide).find('.alert__banner__alert-msg-copy').html();\r\n let fullMsgContainer = $('#ReadMoreModal').find('.modal-message');\r\n $(fullMsgContainer).empty().html(fullMsg);\r\n $('#ReadMoreModal').modal('show');\r\n }\r\n\r\n function removeAlertBanner(e) {\r\n let $banner = $(e.target).closest('.js-alert-banner');\r\n let alertId = $(e.currentTarget).attr('data-id');\r\n\r\n //add to cookies\r\n setCookie(alertId, 'active', 1);\r\n\r\n $('.alert-banner--slider-0').slick('slickRemove', $('.slick-slide').index($('.slick-current')));\r\n\r\n let $bannerContainer = $('.alert__banner__slider').find('.alert__banner__item');\r\n let $bannerAlertsLength = $bannerContainer.length;\r\n\r\n if ($bannerAlertsLength == 0) {\r\n\r\n // setCookie('vcaalertbanner', 'active', 1);\r\n\r\n $banner.slideUp(\"slow\", function () {\r\n $banner.remove();\r\n });\r\n }\r\n\r\n }\r\n\r\n function checkAlertSession() {\r\n // if (sessionStorage.getItem('vcaalertbanner') === 'active') {\r\n // $('.js-alert-banner').remove();\r\n // } else {\r\n $('.js-alert-banner').addClass('active');\r\n // }\r\n };\r\n\r\n\r\n function showAlertModal() {\r\n $('#ModalAlert').modal('show');\r\n }\r\n\r\n function resizeAlertMsgs() {\r\n ui.$alertBarMsg.each((idx, alertMsg) => {\r\n let stringMsg = $(alertMsg).text().toString().trim();\r\n let HTMLMsg = $(alertMsg).html();\r\n let formattedMsg = '';\r\n\r\n if (mql.matches) {\r\n if (stringMsg.length > 72) {\r\n formattedMsg = truncateHTML(HTMLMsg, 72);\r\n $(alertMsg).html(`${formattedMsg}...`);\r\n $(alertMsg).append(`<button class=\"alert__banner__slider__read-more js-alert-banner-readmore-btn\">Read more</button>`);\r\n }\r\n } else {\r\n if (stringMsg.length > 158) {\r\n formattedMsg = truncateHTML(HTMLMsg, 158);\r\n $(alertMsg).html(`${formattedMsg}...`);\r\n $(alertMsg).append(`<button class=\"alert__banner__slider__read-more js-alert-banner-readmore-btn\">Read more</button>`);\r\n }\r\n }\r\n });\r\n $('.js-alert-banner-readmore-btn').on('click', showAllText);\r\n }\r\n\r\n function truncateHTML(HTMLMsg, limit) {\r\n let holdCounter = false;\r\n let truncatedHTML = '';\r\n let html = HTMLMsg;\r\n let index = 0;\r\n\r\n for (index = 0; index < html.length; index++) {\r\n if (!limit) {\r\n break;\r\n }\r\n if (html[index] == '<') {\r\n holdCounter = true;\r\n }\r\n if (!holdCounter) {\r\n limit--;\r\n }\r\n if (html[index] == '>') {\r\n holdCounter = false;\r\n }\r\n truncatedHTML += html[index];\r\n }\r\n //truncatedHTML = correctHTML(truncatedHTML);\r\n\r\n return truncatedHTML;\r\n }\r\n\r\n function correctHTML(html) {\r\n let container = document.createElement('div');\r\n container.innerHTML = html\r\n\r\n return container.innerHTML;\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n bindEvents();\r\n resizeAlertMsgs();\r\n initModalAlert();\r\n initAlertBanner();\r\n checkAlertSession();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n };\r\n\r\n var alert = alertBanner();\r\n alert.init();\r\n})(window);","import isExperienceEditor from \"@utils/is-experience-editor\";\r\nvar VCA = VCA || {};\r\n\r\n\r\nVCA.ArticleSlider = (function ($) {\r\n\r\n var ui = {};\r\n var isExperienceEditor = $('#sitecore-page-mode').attr('data-attribute');\r\n\r\n function init() {\r\n cacheUI();\r\n addIdentigier().then(initSliders());\r\n }\r\n\r\n\r\n function cacheUI() {\r\n ui.$imageSlider = $('.js-image-slider');\r\n ui.$imageSliderThumbs = $('.js-image-slider-thumbs');\r\n ui.$imageSliderCations = $('.js-image-slider-caption');\r\n }\r\n function addIdentigier() {\r\n\r\n return new Promise((resolve) => {\r\n ui.$imageSlider.each(function (index, element) {\r\n $(this).addClass('js-image-slider' + index);\r\n $(this).closest('.image-slider__wrapper').find('.js-image-slider-arrows-wrap').addClass('js-image-slider-arrows-wrap' + index);\r\n });\r\n \r\n ui.$imageSliderCations.each(function (index, element) {\r\n $(this).addClass('js-image-slider-caption' + index);\r\n });\r\n \r\n ui.$imageSliderThumbs.each(function (index, element) {\r\n $(this).addClass('js-image-slider-thumbs' + index);\r\n });\r\n resolve();\r\n });\r\n }\r\n\r\n function initSliders() {\r\n initImageSliderThumbs();\r\n initImageSliderCations();\r\n initImageSlider();\r\n }\r\n\r\n function initImageSlider(e) {\r\n ui.$imageSlider.each(function (index, element) {\r\n var $status = $('.js-image-slider' + index).closest('.image-slider__wrapper').find('.js-pagingInfo');\r\n var hasCaptions = $('.js-image-slider-caption' + index).length;\r\n\r\n $('.js-image-slider' + index).on('init reInit afterChange', function (event, slick, currentSlide, nextSlide) {\r\n //currentSlide is undefined on init -- set it to 0 in this case (currentSlide is 0 based)\r\n var i = (currentSlide ? currentSlide : 0) + 1;\r\n $status.text(i + ' of ' + slick.slideCount);\r\n });\r\n\r\n var navSlider = '.js-image-slider-thumbs' + index +',' + '.js-image-slider-caption' + index;\r\n var statusBox = '.js-image-slider-arrows-wrap' + index;\r\n var item_length = $('.js-image-slider' + index + ' > div').length;\r\n if (item_length > 1 && !isExperienceEditor) {\r\n $('.js-image-slider' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: true,\r\n dots: false,\r\n rows: 0,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n asNavFor: navSlider,\r\n appendArrows: statusBox,\r\n focusOnSelect: true,\r\n accessibility: false\r\n });\r\n }else {\r\n $(statusBox).hide();\r\n }\r\n\r\n\r\n });\r\n\r\n\r\n };\r\n\r\n \r\n function initImageSliderCations(e) {\r\n ui.$imageSliderCations.each(function (index, element) {\r\n var navSlider = '.js-image-slider' + index +',' + '.js-image-slider-thumbs' + index;\r\n console.log(navSlider);\r\n var item_length = $('.js-image-slider-caption' + index + ' > div').length;\r\n if (item_length > 1 && !isExperienceEditor) {\r\n $('.js-image-slider-caption' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: false,\r\n dots: false,\r\n fade: true,\r\n rows: 0,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n asNavFor: navSlider,\r\n accessibility: false\r\n });\r\n }\r\n });\r\n };\r\n\r\n function initImageSliderThumbs(e) {\r\n ui.$imageSliderThumbs.each(function (index, element) {\r\n $(this).addClass('js-image-slider-thumbs' + index);\r\n var navSlider = '.js-image-slider' + index +',' + '.js-image-slider-caption' + index;\r\n console.log(navSlider);\r\n var item_length = $('.js-image-slider-thumbs' + index + ' > div').length;\r\n if (item_length > 1 && !isExperienceEditor) {\r\n $('.js-image-slider-thumbs' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: true,\r\n dots: false,\r\n rows: 0,\r\n slidesToShow:5,\r\n slidesToScroll: 1,\r\n asNavFor: navSlider,\r\n focusOnSelect: true,\r\n accessibility: true,\r\n responsive: [\r\n {\r\n breakpoint: 767,\r\n settings: {\r\n slidesToShow: 3\r\n }\r\n }\r\n ]\r\n });\r\n }else {\r\n $('.js-image-slider-thumbs' + index).hide();\r\n }\r\n });\r\n };\r\n\r\n\r\n\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n\r\n$(function () {\r\n VCA.ArticleSlider.init();\r\n});","var VCA = VCA || {};\r\n\r\nVCA.BrandPillars = (function ($) {\r\n\r\n var MEDIA_QUERY = '(max-width: 767px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n var scrollingIsThrottled = false;\r\n var sticker = $('.brand-pillars__item__link');\r\n\r\n function bindEvents() {\r\n $('.brand-pillars__list').on('scroll', initScrollDetection);\r\n }\r\n\r\n function initScrollDetection() {\r\n var stickers_width = $(this).width();\r\n if (!scrollingIsThrottled && mql.matches) {\r\n scrollingIsThrottled = true;\r\n \r\n var StickerMatchingExpression = sticker.filter(function() {\r\n var $this = $(this);\r\n var left_of_element = $this.offset().left;\r\n var right_of_element = left_of_element + $this.width();\r\n return 0 <= left_of_element && right_of_element <= stickers_width;\r\n });\r\n\r\n if (StickerMatchingExpression[0] !== undefined) {\r\n $('.brand-pillars__item__link').each((idx,link) => {\r\n $(link).removeClass('active');\r\n });\r\n StickerMatchingExpression.addClass('active');\r\n }\r\n\r\n scrollingIsThrottled = false;\r\n }\r\n }\r\n\r\n function addActiveClass() {\r\n if (mql.matches) {\r\n let firstLink = $('.brand-pillars__item__link')[0];\r\n $(firstLink).addClass('active');\r\n }\r\n }\r\n\r\n function init() {\r\n if ($('.brand-pillars').length <= 0) {\r\n return;\r\n }\r\n\r\n bindEvents();\r\n addActiveClass();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n\r\n$(function () {\r\n VCA.BrandPillars.init();\r\n});\r\n","var VCA = VCA || {};\r\n\r\n\r\nVCA.BreedFilters = (function ($) {\r\n\r\n var ui = {};\r\n\r\n function init() {\r\n bindCatFilterClick();\r\n }\r\n\r\n function bindCatFilterClick() {\r\n $('.js-breed-cat-filter').on('click', function (e) {\r\n e.preventDefault();\r\n if ($(this).hasClass('active')) {\r\n return;\r\n }\r\n\r\n $(this).closest('.js-filter-wrap').find('.active').removeClass('active');\r\n $(this).addClass('active');\r\n\r\n var catValue = $('.js-breed-pet-type-filter.active').attr('data-pet-type');\r\n var breedValue = $('.js-breed-cat-filter.active').attr('data-breed-cat');\r\n\r\n if (breedValue === 'all') {\r\n $('.js-breed-list-item').fadeOut().promise().done(function () {\r\n $('.js-breed-list-item[data-pet-type=\"' + catValue + '\"]').fadeIn();\r\n });\r\n } else {\r\n\r\n $('.js-breed-list-item').fadeOut().promise().done(function () {\r\n $('.js-breed-list-item[data-pet-type=\"' + catValue + '\"][data-breed-cat=\"' + breedValue + '\"]').fadeIn();\r\n });\r\n }\r\n\r\n\r\n\r\n\r\n if ($(this).hasClass('all')) {\r\n $('.grid li').fadeOut().promise().done(function () {\r\n $('.grid li').fadeIn();\r\n });\r\n }\r\n });\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.BreedFilters.init();\r\n});","import uniqid from 'uniqid';\r\nimport ReactiveComponent, { filter, watch } from '@utils/reactive-component';\r\nimport SelectBox from '../select-box/select-box';\r\nimport template from './templates/cart-autoship';\r\nimport { defaults } from './cart-mapping';\r\nimport isFn from '@utils/is-function';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n frequency: 0,\r\n replaceOriginEl: true,\r\n subscriptionValue: 7\r\n};\r\n\r\nexport default class CartAutoship extends ReactiveComponent {\r\n #watch = {};\r\n\r\n constructor($originEl, context, options = DEFAULT_OPTIONS) {\r\n super();\r\n\r\n context = { ...defaults.context, ...context };\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n\r\n const parsed = $.parseHTML(template);\r\n this.$el = $(parsed);\r\n this.$originEl = $originEl;\r\n\r\n this.$options = this.$el.find('[data-region=\"options\"]');\r\n this.$frequency = this.$el.find('[data-region=\"frequency\"]');\r\n\r\n this.$optionsPlaceholder = this.$el.find('[data-placeholder=\"options\"]');\r\n this.$frequencyPlaceholder = this.$el.find('[data-placeholder=\"frequency\"]');\r\n\r\n this.optionsSelector = null;\r\n this.frequencySelector = null;\r\n\r\n this.context = context;\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n this.subscriptionValue = options.subscriptionValue;\r\n\r\n let frequency = Number(options.frequency);\r\n frequency = !isNaN(frequency) ? frequency : DEFAULT_OPTIONS.frequency;\r\n const selectedFrequency = frequency > 0 ? frequency : this.subscriptionValue;\r\n\r\n this.reactive({\r\n frequency: frequency,\r\n selectedOption: frequency > this.subscriptionValue ? this.subscriptionValue : frequency,\r\n selectedFrequency: selectedFrequency\r\n });\r\n\r\n this.cachedValues = {\r\n selectedOption: this.selectedOption,\r\n selectedFrequency: this.selectedOption > 0 ? this.selectedFrequency : 0\r\n };\r\n\r\n this.init();\r\n }\r\n\r\n [filter]() {\r\n return {\r\n selectedOption(newValue) {\r\n return newValue > this.subscriptionValue ? this.subscriptionValue : newValue;\r\n }\r\n }\r\n }\r\n\r\n [watch]() {\r\n return {\r\n frequency() {\r\n this.triggerWatchers(...arguments);\r\n },\r\n selectedOption() {\r\n this.updateState();\r\n },\r\n selectedFrequency() {\r\n this.updateState();\r\n }\r\n }\r\n }\r\n\r\n init() {\r\n this.setupSelectors();\r\n this.toggleFrequency();\r\n }\r\n\r\n enable() {\r\n this.optionsSelector.enable();\r\n this.frequencySelector.enable();\r\n }\r\n\r\n disable(onDisabledFn) {\r\n this.optionsSelector.disable(onDisabledFn);\r\n this.frequencySelector.disable(onDisabledFn);\r\n }\r\n\r\n highlight(isHighlighted) {\r\n if(isHighlighted) {\r\n this.optionsSelector.highlight(this.selectedOption !== this.cachedValues.selectedOption);\r\n this.frequencySelector.highlight(this.selectedFrequency !== this.cachedValues.selectedFrequency);\r\n } else {\r\n this.optionsSelector.highlight(false);\r\n this.frequencySelector.highlight(false);\r\n }\r\n }\r\n\r\n onOptionUpdated(newValue) {\r\n if(this.selectedOption !== newValue) {\r\n this.selectedOption = newValue;\r\n }\r\n }\r\n\r\n onFrequencyUpdate(newValue) {\r\n if(this.selectedFrequency !== newValue) {\r\n this.selectedFrequency = newValue;\r\n }\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n if(this.replaceOriginEl) {\r\n this.$originEl.replaceWith(this.$el);\r\n } else {\r\n this.$originEl.html(this.$el);\r\n }\r\n }\r\n\r\n return this.$el;\r\n }\r\n\r\n setupSelectors() {\r\n const options = this.context.AutoshipOptions || [];\r\n const frequencyOptions = this.context.FrequencyOptions || [];\r\n\r\n var newArray = frequencyOptions.map(function(item){\r\n return Number(item.FrequencyValue);\r\n });\r\n\r\n if(!newArray.includes(this.selectedFrequency)){\r\n let frequencyValue = this.selectedFrequency;\r\n var closest = newArray.reduce(function(prev, curr) {\r\n return (Math.abs(curr - frequencyValue) < Math.abs(prev - frequencyValue) ? curr : prev);\r\n });\r\n this.selectedFrequency = closest;\r\n }\r\n\r\n if(options.length > 0 && frequencyOptions.length > 0) {\r\n this.optionsSelector = new SelectBox(this.$optionsPlaceholder, {\r\n ariaLabel: this.context.AutoshipSelectorAriaLabel,\r\n id: 'autoshipOptions',\r\n mods: '-txt-sm',\r\n name: 'AutoshipOptions',\r\n options: options.map(({ AutoshipName, AutoshipFrequency }) => {\r\n return {\r\n text: AutoshipName,\r\n value: AutoshipFrequency\r\n };\r\n }),\r\n replaceOriginEl: true,\r\n value: this.selectedOption\r\n });\r\n\r\n this.frequencySelector = new SelectBox(this.$frequencyPlaceholder, {\r\n ariaLabel: this.context.AutoshipSelectorAriaLabel,\r\n id: 'autoshipFrequency',\r\n mods: '-txt-sm',\r\n name: 'AutoshipFrequency',\r\n options: frequencyOptions.map(({ FrequencyName, FrequencyValue }) => {\r\n return {\r\n text: FrequencyName,\r\n value: FrequencyValue\r\n };\r\n }),\r\n replaceOriginEl: true,\r\n value: this.selectedFrequency\r\n });\r\n\r\n this.optionsSelector.watchValue((newValue) => this.onOptionUpdated(Number(newValue)));\r\n this.frequencySelector.watchValue((newValue) => this.onFrequencyUpdate(Number(newValue)));\r\n\r\n this.optionsSelector.render();\r\n this.frequencySelector.render();\r\n }\r\n }\r\n\r\n toggleFrequency() {\r\n if(this.selectedOption === 0) {\r\n this.$frequency.hide('fast', 'linear');\r\n } else {\r\n this.$frequency.show('fast', 'linear');\r\n }\r\n }\r\n\r\n triggerWatchers() {\r\n Object.values(this.#watch).forEach(fn => fn(...arguments));\r\n }\r\n\r\n updateState() {\r\n this.frequency = this.selectedOption ? this.selectedFrequency : this.selectedOption;\r\n this.toggleFrequency();\r\n }\r\n\r\n watchValue(fn) {\r\n if(isFn(fn)) {\r\n const id = uniqid.time();\r\n this.#watch[id] = fn;\r\n\r\n return () => {\r\n delete this.#watch[id];\r\n }\r\n }\r\n }\r\n}\r\n","import parseRenderingContext from '@utils/parse-rendering-context';\r\nimport CartLine from './cart-line';\r\nimport CartModal from './cart-modal';\r\nimport { alert } from './templates/cart-landing';\r\nimport { defaults } from './cart-mapping';\r\nimport store from '@stores/cart/cart-store';\r\n\r\nexport default class CartLanding {\r\n constructor($originEl, context, error) {\r\n this.context = { ...defaults.context, ...context };\r\n\r\n this.$el = $originEl;\r\n\r\n this.$empty = this.$el.find('[data-region=\"empty\"]');\r\n this.$heading = this.$el.find('[data-region=\"heading\"]');\r\n this.$note = this.$el.find('[data-region=\"note\"]');\r\n this.$promotionsnote = this.$el.find('[data-region=\"promotionsnote\"]');\r\n this.$loader = this.$el.find('[data-region=\"landingLoader\"]');\r\n this.$prescription = this.$el.find('[data-region=\"prescription\"]');\r\n this.$render = this.$el.find('[data-region=\"render\"]');\r\n\r\n this.CartLine = CartLine.extendPrompt(() => this.unsavedLinePrompt());\r\n\r\n this.error = error; \r\n this.hasError = !!error;\r\n\r\n this.modal = null;\r\n\r\n this.lines = [];\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n if(!this.hasError) {\r\n this.setupLines();\r\n this.renderLines();\r\n this.setupAccessibility();\r\n this.setupListeners();\r\n this.setupModal();\r\n } else {\r\n this.renderError();\r\n }\r\n }\r\n\r\n removeCartRegions() {\r\n this.$note.hide();\r\n this.$prescription.hide();\r\n this.$render.hide();\r\n }\r\n\r\n waitForDelay(delay = 0) {\r\n return new Promise((resolve) => {\r\n setTimeout(() => resolve(), delay);\r\n });\r\n }\r\n\r\n async removeDeletedLines(deletedLines = []) {\r\n const destroyPromises = deletedLines.map((component, index) => {\r\n const delay = index * 150;\r\n return this.waitForDelay(delay).then(() => component.destroy());\r\n });\r\n\r\n await Promise.all(destroyPromises);\r\n\r\n if(store.getters.isEmpty) {\r\n this.removeCartRegions();\r\n this.renderEmptyCartRegions();\r\n }\r\n }\r\n\r\n renderAddedLines() {\r\n store.getters.linesAdded.forEach((id) => {\r\n const index = store.getters.lineIds.indexOf(id);\r\n const prevIndex = index - 1;\r\n const component = this.lines[index];\r\n\r\n if (prevIndex > -1) {\r\n const prevComponent = this.lines[prevIndex];\r\n prevComponent.$el.after(component.$el);\r\n } else {\r\n this.$render.prepend(component.$el);\r\n }\r\n });\r\n }\r\n\r\n renderEmptyCartRegions() {\r\n this.$heading.html(this.context.YourShoppingCartEmpty);\r\n this.$empty.show();\r\n }\r\n\r\n renderError() {\r\n this.$render.html(alert(this.error)).show();\r\n this.$loader.remove();\r\n }\r\n\r\n renderCartRegions() {\r\n this.$note.html(this.context.ItemHold);\r\n if(this.context.PromotionNoteIcon && this.context.PromotionNote){\r\n let pnote = `<img alt=\"Promo icon\" src=\"${this.context.PromotionNoteIcon}\" /><div>${this.context.PromotionNote}</div>`;\r\n this.$promotionsnote.html(pnote);\r\n this.$promotionsnote.addClass(\"mb-3\");\r\n }else{\r\n this.$promotionsnote.hide();\r\n }\r\n this.$prescription.slideDown();\r\n }\r\n\r\n renderLines() {\r\n if (this.lines.length > 0) {\r\n this.$loader.remove();\r\n\r\n this.lines.forEach((component) => {\r\n this.$render.append(component.$el);\r\n });\r\n\r\n this.$render.animate({ height: 'toggle' }, 'linear');\r\n }\r\n }\r\n\r\n setupAccessibility() {\r\n this.$el.attr('aria-live', 'polite');\r\n }\r\n\r\n setupModal() {\r\n this.modal = new CartModal({\r\n body: this.context.ModalLineUpdateBody,\r\n buttonContinue: this.context.ModalLineUpdateContinue,\r\n buttonUpdate: this.context.ModalLineUpdateApplyUpdates,\r\n heading: this.context.ModalLineUpdateHeading\r\n });\r\n }\r\n\r\n setupLines() {\r\n if (!store.getters.isEmpty) {\r\n let displayRxRequired = false;\r\n this.renderCartRegions();\r\n\r\n store.getters.lines.forEach(line => {\r\n this.lines.push(\r\n new this.CartLine(null, this.context, line)\r\n );\r\n if (line.rxRequired) displayRxRequired = true;\r\n });\r\n\r\n !displayRxRequired ? this.$prescription.hide() : '';\r\n\r\n } else {\r\n this.renderEmptyCartRegions();\r\n }\r\n\r\n this.$loader.remove();\r\n }\r\n\r\n setupListeners() {\r\n store.watch('lines', () => this.updateLines());\r\n }\r\n\r\n async unsavedLinePrompt() {\r\n return await this.modal.prompt();\r\n }\r\n\r\n updateLines() {\r\n const deletedLines = store.getters.linesRemoved.map((id) => {\r\n const index = store.state.cachedLineIds.indexOf(id);\r\n return this.lines[index];\r\n });\r\n\r\n this.lines =\r\n store.getters.lines\r\n .map((line) => {\r\n const prevLine = this.lines.find((prevLine) => prevLine.lineId === line.lineId);\r\n return prevLine || new CartLine(null, this.context, line);\r\n });\r\n\r\n this.renderAddedLines();\r\n this.removeDeletedLines(deletedLines);\r\n this.hasRxRequired();\r\n }\r\n\r\n hasRxRequired() {\r\n let displayRxRequired = false;\r\n\r\n store.getters.lines.forEach(line => {\r\n if (line.rxRequired) displayRxRequired = true;\r\n });\r\n\r\n !displayRxRequired ? this.$prescription.hide() : '';\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-cart-landing');\r\n rootEls.forEach((el) => {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n if(!store.state.loaded) {\r\n const unsubscribe = store.watch('loaded', (...[state,, loaded]) => {\r\n if (loaded) {\r\n new CartLanding($el, renderingContext, state.error);\r\n\r\n unsubscribe();\r\n }\r\n });\r\n }\r\n });\r\n\r\n if(rootEls.length) {\r\n store.actions.getCart();\r\n }\r\n let $ContactModal = $('#cartContactModal');\r\n\r\n if($('#cartContactModal').length) {\r\n bindEvents();\r\n function bindEvents(){\r\n $('.js-cart-contact-modal').on('click', ContactModal);\r\n }\r\n\r\n function ContactModal(e){\r\n e.preventDefault();\r\n $ContactModal.modal('show');\r\n }\r\n\r\n $('#cartContactModal').on('hide.bs.modal', function () {\r\n const getUrl = $ContactModal.find('iframe').attr('src');\r\n $ContactModal.find('iframe').removeAttr('src');\r\n $ContactModal.find('iframe').attr('src', getUrl);\r\n });\r\n }\r\n});\r\n ","import bsUtils from 'bootstrap/js/src/util';\r\nimport ReactiveComponent, { computed, watch } from '@utils/reactive-component';\r\nimport isFn from '@utils/is-function';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport AutoshipSelector from './cart-autoship';\r\nimport QuantitySelector from '../quantity-selector/quantity-selector';\r\nimport SelectBox from '../select-box/select-box';\r\nimport template, { iconStamp, listItem } from './templates/cart-line';\r\nimport { defaults } from './cart-mapping';\r\nimport priceString from '@utils/price-string';\r\nimport store from '@stores/cart/cart-store';\r\nimport { exceptionBehaviorValues } from '@stores/cart/cart-store';\r\n\r\nconst URL_IMAGE_NOT_AVAILABLE = '/images-2/image-not-available.svg';\r\n\r\nconst CLASS_NAME_CREATING = '-creating';\r\nconst CLASS_NAME_DESTROYED = '-destroyed';\r\nconst CLASS_NAME_OFF_SCREEN = '-off-screen';\r\nconst CLASS_NAME_TRANSITIONING = '-transitioning';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n replaceOriginEl: false,\r\n};\r\n\r\nexport default class CartLine extends ReactiveComponent {\r\n #uiDisabled = false;\r\n\r\n constructor($originEl, context, data, options = DEFAULT_OPTIONS) {\r\n super();\r\n\r\n context = { ...defaults.context, ...context };\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n\r\n const $parsed = this.parseTemplate(template);\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n // static labels\r\n this.$priceLabel = this.$el.find('[data-label=\"price\"]');\r\n this.$removeLabel = this.$el.find('[data-label=\"remove\"]');\r\n this.$updateLabel = this.$el.find('[data-label=\"update\"]');\r\n\r\n // dynamic line/product data\r\n this.$attributes = this.$el.find('[data-region=\"attributes\"]');\r\n this.$image = this.$el.find('[data-region=\"image\"]');\r\n this.$name = this.$el.find('[data-region=\"name\"]');\r\n this.$petSelector = this.$el.find('[data-region=\"petSelector\"]');\r\n this.$price = this.$el.find('[data-region=\"price\"]');\r\n this.$strikethrough = this.$el.find('[data-region=\"strikethrough\"]');\r\n this.$productUrl = this.$el.find('[data-region=\"productUrl\"]');\r\n\r\n // ui controls\r\n this.$removeCtrl = this.$el.find('[data-control=\"remove\"]');\r\n this.$updateCtrl = this.$el.find('[data-control=\"update\"]');\r\n\r\n // placeholders\r\n this.$autoshipSelector = this.$el.find('[data-placeholder=\"autoship\"]');\r\n this.$autoshipFrequencySelectorPlaceholder = this.$el.find(\r\n '[data-placeholder=\"autoshipFrequencySelector\"]'\r\n );\r\n this.$loaderPlaceholder = this.$el.find('[data-placeholder=\"loader\"]');\r\n this.$prescriptionPlaceholder = this.$el.find(\r\n '[data-placeholder=\"prescription\"]'\r\n );\r\n this.$promotionsPlaceholder = this.$el.find(\r\n '[data-placeholder=\"promotions\"]'\r\n );\r\n this.$quantityPlaceholder = this.$el.find(\r\n '[data-placeholder=\"quantity\"]'\r\n );\r\n\r\n // backorder\r\n this.$outofstockLabel = this.$el.find('[data-label=\"outofstock\"]');\r\n this.$outofstockIcon = this.$el.find('[data-label=\"outofstockicon\"]');\r\n this.$outofstockRegion = this.$el.find(\r\n '[data-region=\"outofstockregion\"]'\r\n );\r\n\r\n // dynamic components\r\n this.autoshipSelector = null;\r\n this.loader = null;\r\n this.petSelector = null;\r\n this.quantitySelector = null;\r\n\r\n this.replaceOrigin = options.replaceOriginEl;\r\n this.context = context;\r\n this.data = data;\r\n this.lineId = this.data.lineId;\r\n this.category = this.data.category;\r\n this.previousQuantity = this.data.quantity;\r\n\r\n //console.log(this.data);\r\n\r\n this.cachedLineValues = {\r\n autoshipFrequency: this.data.autoshipFrequency,\r\n petId: this.data.petId,\r\n quantity: this.data.quantity,\r\n backOrdered: this.data.backOrdered,\r\n };\r\n\r\n this.reactive(this.cachedLineValues);\r\n\r\n this.init();\r\n }\r\n\r\n [watch]() {\r\n return {\r\n autoshipFrequency: () => this.setPendingUpdate(),\r\n petId: () => this.setPendingUpdate(),\r\n quantity: () => this.setPendingUpdate(),\r\n };\r\n }\r\n\r\n [computed]() {\r\n return {\r\n isBackOrdered() {\r\n return this.backOrdered;\r\n },\r\n hasPendingUpdate() {\r\n for (const prop of Object.keys(this.cachedLineValues)) {\r\n if (this[prop] !== this.cachedLineValues[prop]) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n };\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderRegions();\r\n this.renderIconStamps();\r\n this.setupLoader();\r\n if (!this.isBackOrdered) {\r\n this.setupAutoshipSelector();\r\n this.setupPetSelector();\r\n }\r\n this.setupQuantitySelector();\r\n this.setupListeners();\r\n }\r\n\r\n cleanupCreate() {\r\n this.$el.removeClass(CLASS_NAME_TRANSITIONING).removeAttr('style');\r\n }\r\n\r\n cleanupDestroy() {\r\n this.$el.addClass(CLASS_NAME_DESTROYED).removeAttr('style');\r\n this.$el.empty();\r\n }\r\n\r\n async create() {\r\n this.$el\r\n .addClass(\r\n [CLASS_NAME_TRANSITIONING, CLASS_NAME_OFF_SCREEN].join(' ')\r\n )\r\n .css('display', 'none');\r\n const transitionTime = bsUtils.getTransitionDurationFromElement(\r\n this.$el.eq(0)\r\n );\r\n\r\n await this.creating(transitionTime);\r\n\r\n this.$el.removeClass([CLASS_NAME_CREATING].join(' '));\r\n\r\n setTimeout(() => {\r\n this.cleanupCreate();\r\n }, transitionTime);\r\n }\r\n\r\n creating(transitionTime) {\r\n return new Promise(resolve => {\r\n this.$el.slideDown(transitionTime, resolve);\r\n this.$el.removeClass(CLASS_NAME_CREATING);\r\n });\r\n }\r\n\r\n async destroy() {\r\n this.$el.addClass(CLASS_NAME_TRANSITIONING);\r\n const transitionTime = bsUtils.getTransitionDurationFromElement(\r\n this.$el.eq(0)\r\n );\r\n\r\n await this.destroying(transitionTime);\r\n\r\n this.cleanupDestroy();\r\n\r\n setTimeout(() => {\r\n this.$el.remove();\r\n }, transitionTime);\r\n }\r\n\r\n destroying(transitionTime) {\r\n return new Promise(resolve => {\r\n const height = this.$el.height();\r\n this.$el.addClass(CLASS_NAME_OFF_SCREEN).height(height);\r\n\r\n setTimeout(resolve, transitionTime);\r\n });\r\n }\r\n\r\n enableUpdateCtrl() {\r\n this.$updateCtrl\r\n .removeClass('disabled')\r\n .addClass('active')\r\n .attr('aria-disabled', null)\r\n .removeAttr('disabled');\r\n }\r\n\r\n disableUpdateCtrl() {\r\n this.$updateCtrl\r\n .addClass('disabled')\r\n .removeClass('active')\r\n .attr('aria-disabled', true)\r\n .attr('disabled', true);\r\n }\r\n\r\n hideUpdateCtrl() {\r\n this.$updateCtrl.hide();\r\n }\r\n\r\n enableHighlight() {\r\n this.autoshipSelector?.highlight(\r\n this.autoshipFrequency !== this.cachedLineValues.autoshipFrequency\r\n );\r\n this.petSelector?.highlight(this.petId !== this.cachedLineValues.petId);\r\n this.quantitySelector?.highlight(\r\n this.quantity !== this.cachedLineValues.quantity\r\n );\r\n }\r\n\r\n disableHighlight() {\r\n this.autoshipSelector?.highlight(false);\r\n this.petSelector?.highlight(false);\r\n this.quantitySelector?.highlight(false);\r\n }\r\n\r\n enableUiOverrides() {\r\n this.#uiDisabled = true;\r\n this.autoshipSelector?.disable(deferredFn =>\r\n this.onDisabledUpdate(deferredFn)\r\n );\r\n this.petSelector?.disable(deferredFn =>\r\n this.onDisabledUpdate(deferredFn)\r\n );\r\n this.quantitySelector?.disable(deferredFn =>\r\n this.onDisabledUpdate(deferredFn)\r\n );\r\n }\r\n\r\n disableUiOverrides() {\r\n this.#uiDisabled = false;\r\n this.autoshipSelector?.enable();\r\n this.petSelector?.enable();\r\n this.quantitySelector?.enable();\r\n }\r\n\r\n onAutoshipUpdate(autoshipFrequency) {\r\n this.autoshipFrequency = autoshipFrequency;\r\n }\r\n\r\n async onDisabledUpdate(deferredFn) {\r\n const isSaved = await this.unsavedLinePrompt();\r\n\r\n if (isSaved && isFn(deferredFn)) {\r\n deferredFn();\r\n }\r\n }\r\n\r\n onPetUpdated(petId) {\r\n this.petId = petId;\r\n }\r\n\r\n onQuantityUpdated(quantity) {\r\n this.quantity = quantity;\r\n }\r\n\r\n sendCoveoUaCartEvent(eventType, quantity) {\r\n window.VCA.CoveoAnalytics.initCoveoUa();\r\n var prd = {\r\n id: this.data.productId,\r\n name: this.data.displayName,\r\n category: this.data.category,\r\n quantity: quantity,\r\n price: this.data.listPrice,\r\n variant: this.data.variantId,\r\n };\r\n\r\n coveoua('ec:addProduct', prd);\r\n coveoua('set', 'custom', {\r\n context_website: 'Vca',\r\n });\r\n coveoua('ec:setAction', eventType);\r\n coveoua('send', `event`);\r\n }\r\n\r\n onRemoveClick(eve) {\r\n if (!this.#uiDisabled) {\r\n //send coveoua event\r\n this.sendCoveoUaCartEvent('remove', this.quantity);\r\n\r\n store.actions.removeLine(this.lineId);\r\n } else {\r\n this.onDisabledUpdate();\r\n }\r\n }\r\n\r\n onPetSelectionValidated() {\r\n if (store.getters.isPetInvalid(this.lineId)) {\r\n this.petSelector.setInvalid();\r\n } else {\r\n this.petSelector.removeValidation();\r\n }\r\n }\r\n\r\n async onUpdateClick(evt) {\r\n let cartLine = $(evt.currentTarget).closest('.cart-line');\r\n let selectBox = $(cartLine).find('.select-box__select[name=\"PetId\"]');\r\n let selectOptionValue = $(cartLine)\r\n .find('.select-box__select[name=\"PetId\"] option:selected')\r\n .val(); //Pet Name\r\n\r\n if (selectOptionValue == '') {\r\n $(selectBox).addClass('is-invalid');\r\n return;\r\n }\r\n\r\n if (\r\n this.hasPendingUpdate &&\r\n store.getters.hasPendingUpdate &&\r\n !store.getters.isLineUpdateDisabled(this.lineId) &&\r\n selectOptionValue !== ''\r\n ) {\r\n // send coveoua event -- eventType - add/remove\r\n //if quantity is added, send add event type and only the changed quantity.\r\n //if quantity is reduced, send remove event type and only the changed quantity.\r\n\r\n this.category = selectBox.find('option:selected').text();\r\n let count = Math.abs(this.quantity - this.previousQuantity);\r\n if (this.quantity > this.previousQuantity) {\r\n this.sendCoveoUaCartEvent('add', count);\r\n } else if (this.quantity < this.previousQuantity) {\r\n this.sendCoveoUaCartEvent('remove', count);\r\n }\r\n const { success } = await store.actions.updateLine();\r\n if (success) {\r\n this.cachedLineValues = {\r\n autoshipFrequency: this.autoshipFrequency,\r\n petId: this.petId,\r\n quantity: this.quantity,\r\n };\r\n this.previousQuantity = this.quantity;\r\n }\r\n }\r\n }\r\n\r\n renderAttributes() {\r\n const attrs = store.getters.lineAttributes(this.lineId, {\r\n flavor: this.context.Flavor,\r\n packaging: this.context.Packaging,\r\n strengthSize: this.context.StrengthSize,\r\n strengthSizeSupplies: this.context.StrengthSizeSupplies,\r\n rxForm: this.context.RxForm,\r\n });\r\n\r\n const attrHtmlStr = attrs\r\n .map(attr => listItem(attr.label, attr.value))\r\n .join('');\r\n\r\n const parsed = $.parseHTML(attrHtmlStr);\r\n this.$attributes.prepend(parsed);\r\n }\r\n\r\n renderIconStamps() {\r\n if (this.data.rxRequired) {\r\n const rxStamp = iconStamp(\r\n '/images-2/prescription.svg',\r\n this.context.PrescriptionRequired,\r\n 'prescription icon'\r\n );\r\n this.$prescriptionPlaceholder.replaceWith(rxStamp);\r\n }\r\n\r\n // todo: render promotions\r\n }\r\n\r\n renderImage() {\r\n const url = this.data.image?.constrainedUrl || URL_IMAGE_NOT_AVAILABLE;\r\n\r\n const img = document.createElement('img');\r\n img.src = url;\r\n img.alt = this.data.image.alt || this.data.displayName;\r\n\r\n this.$image.attr('href', this.data.productUrl);\r\n this.$image.html(img);\r\n }\r\n\r\n renderLabels() {\r\n this.$priceLabel.html(this.context.Price);\r\n this.$removeLabel.html(this.context.Remove);\r\n if (this.isBackOrdered) {\r\n this.$removeCtrl.addClass('text-color-vca-red');\r\n }\r\n this.$updateLabel.html(this.context.ApplyUpdates);\r\n this.$outofstockLabel.html(this.context.OutOfStock);\r\n let img = document.createElement('img');\r\n img.src = this.context.OutOfStockIcon;\r\n this.$outofstockIcon.html(img);\r\n }\r\n\r\n renderPrices() {\r\n const formattedListPrice = priceString(this.data.listPrice);\r\n const formattedExceptionPrice = priceString(this.data.exceptionAmount);\r\n\r\n switch (this.data.exceptionBehavior) {\r\n case exceptionBehaviorValues.STRIKE_THROUGH:\r\n this.$price.html(formattedExceptionPrice);\r\n this.$strikethrough.html(formattedListPrice);\r\n break;\r\n case exceptionBehaviorValues.REPLACE:\r\n this.$price.html(formattedExceptionPrice);\r\n this.$strikethrough.hide();\r\n break;\r\n default:\r\n this.$price.html(formattedListPrice);\r\n this.$strikethrough.hide();\r\n }\r\n }\r\n\r\n renderRegions() {\r\n this.$name.html(this.data.displayName);\r\n this.$productUrl.attr('href', this.data.productUrl);\r\n\r\n this.renderAttributes();\r\n this.renderImage();\r\n this.renderPrices();\r\n if (this.isBackOrdered) {\r\n this.$outofstockRegion.show();\r\n this.hideUpdateCtrl();\r\n } else {\r\n this.$outofstockRegion.hide();\r\n }\r\n }\r\n\r\n setPendingUpdate() {\r\n if (!store.getters.isLineUpdateDisabled(this.lineId)) {\r\n if (this.hasPendingUpdate) {\r\n store.mutations.SET_PENDING_UPDATE({\r\n lineId: this.lineId,\r\n autoshipFrequency: this.autoshipFrequency,\r\n petId: this.petId,\r\n quantity: this.quantity,\r\n });\r\n } else {\r\n store.mutations.RESET_PENDING_UPDATE();\r\n }\r\n }\r\n }\r\n\r\n setupAutoshipSelector() {\r\n let variantIdHasNF = this.data.variantId.endsWith('NF');\r\n\r\n this.autoshipSelector = new AutoshipSelector(\r\n this.$autoshipSelector,\r\n this.context,\r\n {\r\n frequency: this.data.autoshipFrequency,\r\n replaceOriginEl: true,\r\n }\r\n );\r\n\r\n this.autoshipSelector.render();\r\n\r\n if (this.isBackOrdered) {\r\n this.autoshipSelector.addClass('disable');\r\n }\r\n\r\n if (variantIdHasNF) {\r\n let selectBox = this.autoshipSelector.optionsSelector.$select[0];\r\n selectBox.querySelector('option[value=\"0\"]').remove();\r\n }\r\n }\r\n\r\n setupLoader() {\r\n this.loader = new AjaxLoader(this.$loaderPlaceholder, {\r\n aria: false,\r\n className: 'd-inline-flex h-100 align-items-center mr-2',\r\n size: 'xs',\r\n srText:\r\n this.context.LoadingLine?.replace(\r\n '{0}',\r\n this.data.displayName\r\n ) || 'Loading...',\r\n });\r\n\r\n this.loader.render();\r\n }\r\n\r\n setupListeners() {\r\n this.$removeCtrl.on('click', evt => this.onRemoveClick(evt));\r\n\r\n if (!this.isBackOrdered) {\r\n this.$updateCtrl.on('click', evt => this.onUpdateClick(evt));\r\n this.autoshipSelector.watchValue((...args) =>\r\n this.onAutoshipUpdate(...args)\r\n );\r\n this.petSelector?.watchValue((...args) =>\r\n this.onPetUpdated(...args)\r\n );\r\n this.quantitySelector.watchValue((...args) =>\r\n this.onQuantityUpdated(...args)\r\n );\r\n store.watch('hasPendingUpdate', (...args) =>\r\n this.togglePendingState(...args)\r\n );\r\n store.watch('loadingLine', state =>\r\n this.toggleLoadingState(state.loadingLine)\r\n );\r\n store.watch('petSelectionValidated', () =>\r\n this.onPetSelectionValidated()\r\n );\r\n store.watch('lines', () => this.onPetSelectionValidated());\r\n }\r\n }\r\n\r\n setupPetSelector() {\r\n const petOptions = this.context.Pets;\r\n if (petOptions && petOptions.length > 0) {\r\n const mappedOptions = petOptions.map(option => {\r\n return {\r\n text: option.PetName,\r\n value: option.PetId,\r\n };\r\n });\r\n\r\n this.petSelector = new SelectBox(this.$petSelector, {\r\n ariaLabel: this.context.PetSelectorAriaLabel,\r\n id: `petSelector_${this.data.lineId}`,\r\n name: 'PetId',\r\n mods: '-txt-sm',\r\n options: mappedOptions,\r\n replaceOriginEl: false,\r\n required: true,\r\n unselectedText: this.context.PetSelector,\r\n value: this.data.petId,\r\n });\r\n\r\n this.petSelector.render();\r\n }\r\n }\r\n\r\n setupQuantitySelector() {\r\n const labels = {\r\n increment: this.context.Increment,\r\n decrement: this.context.Decrement,\r\n inputAriaLabel: this.context.QuantitySelector,\r\n };\r\n\r\n this.quantitySelector = new QuantitySelector(\r\n this.$quantityPlaceholder,\r\n {\r\n replaceOriginEl: true,\r\n value: this.data.quantity,\r\n backOrdered: this.backOrdered,\r\n },\r\n labels\r\n );\r\n }\r\n\r\n toggleLoadingState(lineId) {\r\n if (this.lineId === lineId) {\r\n this.loader.active = true;\r\n this.disableUpdateCtrl();\r\n } else {\r\n this.loader.active = false;\r\n }\r\n }\r\n\r\n togglePendingState(state, getters, hasPendingUpdate) {\r\n if (hasPendingUpdate) {\r\n if (!store.getters.isLineUpdateDisabled(this.lineId)) {\r\n this.enableUpdateCtrl();\r\n this.enableHighlight();\r\n } else {\r\n this.enableUiOverrides();\r\n }\r\n } else {\r\n this.disableUpdateCtrl();\r\n this.disableHighlight();\r\n this.disableUiOverrides();\r\n }\r\n }\r\n\r\n /** virtual prompt method - will be overridden most of the time */\r\n unsavedLinePrompt() {\r\n return new Promise(resolve => {\r\n const confirmed = window.confirm(this.context.ModalLineUpdateBody);\r\n if (confirmed) {\r\n store.actions\r\n .updateLine()\r\n .then(({ success }) => resolve(success));\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n }\r\n\r\n parseTemplate(templateStr = template) {\r\n const parsed = $.parseHTML(templateStr);\r\n return $(parsed);\r\n }\r\n\r\n static extendPrompt(fn) {\r\n if (isFn(fn)) {\r\n const CartLineExtended = CartLine;\r\n CartLineExtended.prototype.unsavedLinePrompt = fn;\r\n return CartLineExtended;\r\n }\r\n }\r\n\r\n static extendTemplate(templateStr) {\r\n class CartLineExtended extends CartLine {}\r\n CartLineExtended.prototype.parseTemplate = CartLineExtended.prototype.parseTemplate.bind(\r\n this,\r\n templateStr\r\n );\r\n return CartLineExtended;\r\n }\r\n}\r\n","const defaults = {\r\n context: {\r\n ApplyUpdates: 'Apply Updates',\r\n AutoshipSelectorAriaLabel: 'Choose an autoship option',\r\n AutoshipFrequencyAriaLabel: 'Choose your autoship frequency',\r\n Checkout: 'Checkout',\r\n ContinueShoppingLink: {\r\n Text: \"Continue Shopping\",\r\n Url: \"/shopmyvca\"\r\n },\r\n Discounts: 'Discounts',\r\n Flavor: 'Flavor:',\r\n Loading: \"Loading...\",\r\n LoadingLine: '{0} Loading...',\r\n OrderSummary: 'Order Summary',\r\n ModalLineUpdateHeading: \"Unsaved Changes\",\r\n ModalLineUpdateBody: \"<p>You have unsaved changes pending. Apply your current updates or continue without your most recent changes.</p>\",\r\n ModalLineUpdateApplyUpdates: \"Apply Updates\", \r\n ModalLineUpdateContinue: \"Continue\",\r\n ModalCheckoutHeading: \"Unsaved Changes\",\r\n ModalCheckoutBody: \"<p>You have unsaved changes pending. Apply your updates before making any more changes.</p>\",\r\n ModalCheckoutApplyUpdates: \"Apply Updates\", \r\n ModalCheckoutContinue: \"Continue\",\r\n Packaging: 'Packaging:',\r\n PetSelector: 'Pet for this product',\r\n PetSelectorAriaLabel: 'Choose a pet for this product',\r\n PetSelectorError: 'All products in the cart need to have a pet selected.',\r\n BackOrderError: 'Please remove out of stock items from cart to proceed with checkout.',\r\n PrescriptionRequired: '* Prescription Required',\r\n Price: 'Price:',\r\n Promotions: 'Promotions and discounts will be applied at checkout',\r\n Shipping: 'Estimated Shipping',\r\n StrengthSize: 'Strength / Size:',\r\n StrengthSizeSupplies: 'Strength / Size Supplies:',\r\n Subtotal: 'Subtotal',\r\n Remove: 'Remove',\r\n RxForm: 'Rx Form:',\r\n Tax: 'Estimated Tax',\r\n Total: 'Estimated Total',\r\n YourShoppingCartEmpty: 'Your Shopping Cart is Empty',\r\n AutoshipOptions: [\r\n {\r\n AutoshipName: 'Subscribe With Never Forget®',\r\n AutoshipFrequency: '7'\r\n },\r\n {\r\n AutoshipName: 'One Time Purchase',\r\n AutoshipFrequency: '0'\r\n }\r\n ],\r\n FrequencyOptions: [\r\n {\r\n FrequencyName: '1 week',\r\n FrequencyValue: '7'\r\n },\r\n {\r\n FrequencyName: '2 weeks',\r\n FrequencyValue: '14'\r\n },\r\n {\r\n FrequencyName: '3 weeks',\r\n FrequencyValue: '21'\r\n },\r\n {\r\n FrequencyName: '4 weeks',\r\n FrequencyValue: '28'\r\n },\r\n {\r\n FrequencyName: 'Monthly',\r\n FrequencyValue: '30'\r\n },\r\n {\r\n FrequencyName: '5 Weeks',\r\n FrequencyValue: '35'\r\n },\r\n {\r\n FrequencyName: '6 Weeks',\r\n FrequencyValue: '42'\r\n },\r\n {\r\n FrequencyName: '7 Weeks',\r\n FrequencyValue: '49'\r\n },\r\n {\r\n FrequencyName: '8 Weeks',\r\n FrequencyValue: '56'\r\n },\r\n {\r\n FrequencyName: '9 Weeks',\r\n FrequencyValue: '63'\r\n },\r\n {\r\n FrequencyName: '10 Weeks',\r\n FrequencyValue: '70'\r\n },\r\n {\r\n FrequencyName: '11 Weeks',\r\n FrequencyValue: '77'\r\n },\r\n {\r\n FrequencyName: '12 Weeks',\r\n FrequencyValue: '84'\r\n },\r\n {\r\n FrequencyName: '4 Months',\r\n FrequencyValue: '120'\r\n },\r\n {\r\n FrequencyName: '6 Months',\r\n FrequencyValue: '180'\r\n },\r\n {\r\n FrequencyName: '7 Months',\r\n FrequencyValue: '210'\r\n },\r\n {\r\n FrequencyName: 'Yearly',\r\n FrequencyValue: '365'\r\n }\r\n ],\r\n }\r\n};\r\n\r\nexport {\r\n defaults\r\n};\r\n","import uniqid from 'uniqid';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport template from './templates/cart-modal';\r\nimport store from '@stores/cart/cart-store';\r\n\r\nconst DEFAULT_CONTEXT = {\r\n body: \"Save your cart or continue without your most recent changes.\",\r\n buttonContinue: 'Continue',\r\n buttonUpdate: 'Apply Updates',\r\n heading: 'Unsaved Changes',\r\n};\r\n\r\nexport default class CartModal {\r\n #isSaved = false;\r\n\r\n constructor(context) {\r\n context = {\r\n ...DEFAULT_CONTEXT,\r\n ...context\r\n };\r\n\r\n const parsed = $.parseHTML(template);\r\n this.$el = $(parsed);\r\n \r\n this.$bodyLabel = this.$el.find('[data-label=\"body\"]');\r\n this.$buttonContinueLabel = this.$el.find('[data-label=\"continue\"]');\r\n this.$buttonUpdateLabel = this.$el.find('[data-label=\"update\"]');\r\n this.$headingLabel = this.$el.find('[data-label=\"heading\"]');\r\n\r\n this.$heading = this.$el.find('[data-region=\"heading\"]');\r\n\r\n this.$updateCtrl = this.$el.find('[data-control=\"update\"]');\r\n\r\n this.$loaderPlaceholder = this.$el.find('[data-placeholder=\"loader\"]');\r\n\r\n this.loader = null;\r\n\r\n this.originEl = null;\r\n\r\n this.id = uniqid.time('cartModal_');\r\n this.context = context;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.setupAccessibility();\r\n this.setupListeners();\r\n this.setupLoader();\r\n\r\n this.render();\r\n }\r\n\r\n async onUpdateClick() {\r\n const { success } = await store.actions.updateLine();\r\n this.#isSaved = success;\r\n\r\n this.hide();\r\n }\r\n\r\n render() {\r\n $(document.body).append(this.$el);\r\n }\r\n\r\n renderLabels() {\r\n this.$bodyLabel.html(this.context.body);\r\n this.$buttonContinueLabel.html(this.context.buttonContinue);\r\n this.$buttonUpdateLabel.html(this.context.buttonUpdate);\r\n this.$headingLabel.html(this.context.heading);\r\n }\r\n\r\n setupAccessibility() {\r\n const headingId = `${this.id}_heading`;\r\n\r\n this.$el.attr(\r\n { 'id': this.id },\r\n { 'aria-labelledby': headingId }\r\n );\r\n\r\n this.$heading.attr('id', headingId);\r\n }\r\n\r\n setupListeners() {\r\n this.$updateCtrl.on('click', () => this.onUpdateClick());\r\n\r\n store.watch('loadingLine', (...[,,lineId]) => (this.loader.active = !!lineId));\r\n }\r\n\r\n setupLoader() {\r\n this.loader = new AjaxLoader(this.$loaderPlaceholder, {\r\n aria: false,\r\n size: 'xs'\r\n });\r\n \r\n this.loader.render();\r\n }\r\n\r\n prompt() {\r\n this.show();\r\n\r\n return new Promise((resolve) => {\r\n this.$el.one('hide.bs.modal', () =>{\r\n resolve(this.#isSaved);\r\n this.#isSaved = false;\r\n });\r\n });\r\n }\r\n\r\n show() {\r\n $(`#${this.id}`).modal('show', {\r\n focus: false\r\n });\r\n\r\n this.originEl = document.activeElement;\r\n\r\n if(this.originEl) {\r\n this.$el.one('hidden.bs.modal', () => {\r\n this.originEl.focus();\r\n this.originEl = null;\r\n });\r\n }\r\n \r\n this.$el.one('shown.bs.modal', () => this.$updateCtrl.get(0).focus());\r\n }\r\n\r\n hide() {\r\n $(`#${this.id}`).modal('hide');\r\n }\r\n}\r\n","import parseRenderingContext from '@utils/parse-rendering-context';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport CartModal from './cart-modal';\r\nimport template from './templates/cart-summary';\r\nimport { defaults } from './cart-mapping';\r\nimport store from '@stores/cart/cart-store';\r\n\r\nconst AJAX_LOADER_OPTIONS = {\r\n aria: false,\r\n size: 'xs',\r\n visible: true\r\n};\r\n\r\nexport default class CartSummary {\r\n constructor($originEl, context) {\r\n context = { ...defaults.context, ...context };\r\n\r\n const $parsed = this.parseTemplate();\r\n $originEl.replaceWith($parsed);\r\n\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n this.$checkoutLabel = this.$el.find('[data-label=\"checkout\"]');\r\n this.$continueShoppingLabel = this.$el.find('[data-label=\"continueShopping\"]');\r\n this.$discountsLabel = this.$el.find('[data-label=\"discounts\"]');\r\n this.$orderSummaryLabel = this.$el.find('[data-label=\"orderSummary\"]');\r\n this.$promotionsLabel = this.$el.find('[data-label=\"promotions\"]');\r\n this.$shippingLabel = this.$el.find('[data-label=\"shipping\"]');\r\n this.$subtotalLabel = this.$el.find('[data-label=\"subtotal\"]');\r\n this.$taxLabel = this.$el.find('[data-label=\"tax\"]');\r\n this.$totalLabel = this.$el.find('[data-label=\"total\"]');\r\n\r\n this.$continueShopping = this.$el.find('[data-region=\"continueShopping\"]');\r\n this.$discounts = this.$el.find('[data-region=\"discounts\"]');\r\n this.$error = this.$el.find('[data-region=\"error\"]');\r\n this.$heading = this.$el.find('[data-region=\"heading\"]');\r\n this.$loader = this.$el.find('[data-region=\"loader\"]');\r\n this.$list = this.$el.find('[data-region=\"list\"]');\r\n this.$shipping = this.$el.find('[data-region=\"shipping\"]');\r\n this.$subtotal = this.$el.find('[data-region=\"subtotal\"]');\r\n this.$tax = this.$el.find('[data-region=\"tax\"]');\r\n this.$total = this.$el.find('[data-region=\"total\"]');\r\n this.$upsell = this.$el.find('[data-region=\"upsell\"]');\r\n this.$upsellContainer = this.$el.find('[data-region=\"upsellContainer\"]');\r\n\r\n this.$checkoutCtrl = this.$el.find('[data-control=\"checkout\"]');\r\n\r\n this.$checkoutLoaderPlaceholder = this.$el.find('[data-placeholder=\"loaderCheckout\"]');\r\n this.$promotionsnote = this.$el.find('[data-region=\"promotionsnote\"]');\r\n\r\n\r\n this.modal = null;\r\n\r\n this.checkoutLoader = null;\r\n this.loaders = [];\r\n\r\n this.aria = true;\r\n this.context = context;\r\n\r\n if (this.context.PostActionUrl) {\r\n store.mutations.SET_POST_ACTION_URL(this.context.PostActionUrl);\r\n }\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderAttributes();\r\n this.renderContinueShoppingLink();\r\n this.renderLoadingState();\r\n this.setupAccessibility();\r\n this.setupListeners();\r\n this.setupModal();\r\n this.updateState(store.state.loading);\r\n }\r\n\r\n show() {\r\n this.$el.slideDown('fast', () => this.$el.removeAttr('style'));\r\n }\r\n\r\n hide() {\r\n this.$el.slideUp('fast');\r\n }\r\n\r\n async onCheckoutClick(evt) {\r\n evt.preventDefault();\r\n\r\n this.$error.hide();\r\n\r\n if (store.getters.hasPendingUpdate) {\r\n await this.modal.prompt();\r\n }\r\n if(store.getters.hasPendingPet || store.getters.isBackOrdered) {\r\n let errorMessagetext = '';\r\n\r\n if(store.getters.hasPendingPet){\r\n store.mutations.SET_PET_SELECTION_VALIDATED(true);\r\n errorMessagetext += '<div>' + this.context.PetSelectorError + '</div>';\r\n }\r\n if(store.getters.isBackOrdered){\r\n errorMessagetext += '<div>' + this.context.BackOrderError + '</div>';\r\n }\r\n this.$error.show().html(errorMessagetext);\r\n return;\r\n }\r\n\r\n const href = evt.currentTarget.href;\r\n if(href) {\r\n window.location.href = href;\r\n }\r\n }\r\n\r\n onLinesUpdate() {\r\n if(!store.getters.hasPendingPet && !store.getters.isBackOrdered) {\r\n store.mutations.SET_PET_SELECTION_VALIDATED(false);\r\n this.$error.hide();\r\n }else{\r\n let errorMessagetext = '';\r\n\r\n if(store.getters.hasPendingPet){\r\n store.mutations.SET_PET_SELECTION_VALIDATED(true);\r\n errorMessagetext += '<div>' + this.context.PetSelectorError + '</div>';\r\n }\r\n if(store.getters.isBackOrdered){\r\n errorMessagetext += '<div>' + this.context.BackOrderError + '</div>';\r\n }\r\n this.$error.show().html(errorMessagetext);\r\n }\r\n\r\n if(store.getters.isEmpty) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n renderAttributes() {\r\n if(this.$checkoutCtrl.is('a')) {\r\n this.$checkoutCtrl.attr('href', this.context.PostActionUrl);\r\n }\r\n }\r\n\r\n renderContinueShoppingLink() {\r\n if(this.context.ContinueShoppingLink?.Url) {\r\n this.$continueShoppingLabel.html(this.context.ContinueShoppingLink.Text);\r\n if(this.$continueShopping.is('a')) {\r\n this.$continueShopping.attr('href', this.context.ContinueShoppingLink.Url);\r\n }\r\n } else {\r\n this.$continueShopping.hide();\r\n }\r\n }\r\n\r\n renderLabels() {\r\n this.$checkoutLabel.html(this.context.Checkout);\r\n this.$discountsLabel.html(this.context.Discounts);\r\n this.$orderSummaryLabel.html(this.context.OrderSummary);\r\n this.$promotionsLabel.html(this.context.Promotions);\r\n this.$shippingLabel.html(this.context.Shipping);\r\n this.$subtotalLabel.html(this.context.Subtotal);\r\n this.$taxLabel.html(this.context.Tax);\r\n this.$totalLabel.html(this.context.Total);\r\n\r\n if(this.context.PromotionNoteIcon && this.context.PromotionNote){\r\n let pnote = `<img alt=\"promo icon\" src=\"${this.context.PromotionNoteIcon}\" /><div>${this.context.PromotionNote}</div>`;\r\n this.$promotionsnote.html(pnote);\r\n this.$promotionsnote.addClass(\"mt-3\");\r\n }else{\r\n this.$promotionsnote.hide();\r\n }\r\n }\r\n\r\n renderLoadingState() {\r\n this.checkoutLoader = new AjaxLoader(this.$checkoutLoaderPlaceholder, {\r\n aria: false,\r\n size: 'xs',\r\n srText: this.context.Loading\r\n });\r\n this.checkoutLoader.render();\r\n\r\n this.loaders =\r\n this.$loader\r\n .map(i => {\r\n const $el = this.$loader.eq(i);\r\n const describedbyId = $el.data('describedby');\r\n const descriptionText = describedbyId ? $(describedbyId).text() : 'Cart Summary';\r\n const loadingSrText = this.context.LoadingSummary?.replace('{0}', descriptionText);\r\n\r\n return new AjaxLoader($el, {\r\n ...AJAX_LOADER_OPTIONS,\r\n srText: loadingSrText\r\n });\r\n }).toArray();\r\n }\r\n\r\n setupAccessibility() {\r\n if (this.aria) {\r\n this.$el.attr('aria-live', 'polite');\r\n }\r\n }\r\n\r\n setupListeners() {\r\n this.$checkoutCtrl.on('click', (evt) => this.onCheckoutClick(evt));\r\n\r\n store.watch('lines', () => this.onLinesUpdate());\r\n store.watch('loading', (state) => (this.checkoutLoader.active = state.loading));\r\n store.watch('loadingLine', (state) => this.updateState(!!state.loadingLine));\r\n\r\n if(store.getters.isBackOrdered){\r\n this.$error.show().html(this.context.BackOrderError);\r\n }\r\n \r\n }\r\n\r\n setupModal() {\r\n this.modal = new CartModal({\r\n body: this.context.ModalCheckoutBody,\r\n buttonContinue: this.context.ModalCheckoutContinue,\r\n buttonUpdate: this.context.ModalCheckoutApplyUpdates,\r\n heading: this.context.ModalCheckoutHeading\r\n });\r\n }\r\n\r\n updateState(isLoading) {\r\n if (!isLoading) {\r\n this.hideLoading();\r\n } else {\r\n this.showLoading();\r\n }\r\n }\r\n\r\n updateUpsell() {\r\n if(store.state.freeShippingText) {\r\n this.$upsellContainer.show();\r\n this.$upsell.html(store.state.freeShippingText);\r\n } else {\r\n this.$upsellContainer.hide();\r\n }\r\n }\r\n\r\n hideLoading() {\r\n this.loaders.forEach(loader => (loader.active = false));\r\n this.$checkoutCtrl.removeClass('disabled').attr('aria-disabled', null);\r\n\r\n this.$discounts.html(store.getters.formattedDiscount);\r\n this.$shipping.html(store.getters.formattedShippingTotal);\r\n this.$subtotal.html(store.getters.formattedSubtotal);\r\n this.$tax.html(store.getters.formattedTaxTotal);\r\n this.$total.html(store.getters.formattedTotal);\r\n\r\n this.updateUpsell();\r\n }\r\n\r\n showLoading() {\r\n this.$discounts.empty();\r\n this.$shipping.empty();\r\n this.$subtotal.empty();\r\n this.$tax.empty();\r\n this.$total.empty();\r\n\r\n this.loaders.forEach(loader => (loader.active = true));\r\n this.$checkoutCtrl.addClass('disabled').attr('aria-disabled', true);\r\n }\r\n\r\n parseTemplate(templateStr = template) {\r\n const parsed = $.parseHTML(templateStr);\r\n return $(parsed);\r\n }\r\n\r\n static extendTemplate(templateStr) {\r\n class CartSummaryExtended extends this { };\r\n CartSummaryExtended.prototype.parseTemplate = CartSummary.prototype.parseTemplate.bind(CartSummaryExtended, templateStr);\r\n return CartSummaryExtended;\r\n }\r\n}\r\n\r\n$(() => {\r\n const el = document.querySelector('.js-cart-summary');\r\n if(el) {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n if(!store.state.loaded) {\r\n const unSubscribe = store.watch('loaded', (...[, , loaded]) => {\r\n if (loaded) {\r\n if (!store.getters.isEmpty) {\r\n const summary = new CartSummary($el, renderingContext);\r\n \r\n summary.$el.css('display', 'none');\r\n summary.init();\r\n summary.show();\r\n }\r\n \r\n unSubscribe();\r\n }\r\n });\r\n }\r\n\r\n store.actions.getCart();\r\n };\r\n});\r\n","// Module\nvar code = \"<div class=\\\"cart-line__autoship\\\"> <div class=\\\"cart-line__autoship-selector\\\" data-region=\\\"options\\\"> <div data-placeholder=\\\"options\\\"></div> </div> <div class=\\\"cart-line__autoship-selector\\\" data-region=\\\"frequency\\\"> <div data-placeholder=\\\"frequency\\\"></div> </div> </div> \";\n// Exports\nmodule.exports = code;","import template from './cart-autoship.html';\r\n\r\nexport default template;\r\n","export const alert = text => `<p class=\"text-danger text-center my-2\" role=\"alert\">${text}</p>`;\r\n","// Module\nvar code = \"<div class=\\\"cart-line\\\"> <div class=\\\"cart-line__col-left\\\"> <div class=\\\"cart-line__img\\\"> <a href=\\\"#\\\" data-region=\\\"image\\\"></a> </div> <div class=\\\"cart-line__details\\\"> <a class=\\\"cart-line__details__link\\\" href=\\\"#\\\" data-region=\\\"productUrl\\\"> <h2 class=\\\"cart-line__heading\\\" data-region=\\\"name\\\"> </h2> </a> <ul class=\\\"cart-line__list\\\" data-region=\\\"attributes\\\"> <li class=\\\"cart-line__list-item\\\"> <b data-label=\\\"price\\\"></b> <span data-region=\\\"price\\\"></span> </li> </ul> <div data-placeholder=\\\"prescription\\\"></div> <div data-placeholder=\\\"promotions\\\"></div> <div class=\\\"cart-line__pet-selector\\\" data-region=\\\"petSelector\\\"> </div> </div> </div> <div class=\\\"cart-line__col-right\\\"> <div data-region=\\\"outofstockregion\\\"> <div class=\\\"out-of-stock-flag mb-3\\\"> <span class=\\\"out-of-stock-flag__icon\\\" data-label=\\\"outofstockicon\\\"></span> <span data-label=\\\"outofstock\\\"></span> </div> </div> <div class=\\\"cart-line__pricing-controls\\\"> <div class=\\\"cart-line__quantity\\\"> <div data-placeholder=\\\"quantity\\\"></div> </div> <div class=\\\"cart-line__price-wrapper\\\"> <p class=\\\"cart-line__price\\\" data-region=\\\"price\\\"></p> <p class=\\\"cart-line__strikethrough\\\" data-region=\\\"strikethrough\\\"> </p> </div> <div class=\\\"cart-line__remove-wrapper\\\"> <button type=\\\"button\\\" class=\\\"cart-line__remove\\\" data-control=\\\"remove\\\"> <span data-label=\\\"remove\\\"></span> </button> </div> </div> <div data-placeholder=\\\"autoship\\\"></div> </div> <div class=\\\"cart-line__update\\\"> <div data-placeholder=\\\"loader\\\"></div> <button type=\\\"button\\\" class=\\\"cart-line__update-btn btn btn-sky-outline-alt disabled\\\" disabled=\\\"true\\\" data-control=\\\"update\\\"> <span data-label=\\\"update\\\"></span> </button> </div> </div>\";\n// Exports\nmodule.exports = code;","import template from './cart-line.html';\r\n\r\nexport const iconStamp = (iconUrl, text, altText) => `\r\n <p class=\"icon-stamp\">\r\n <span class=\"icon-stamp__icon\" aria-hidden=\"true\">\r\n <img src=\"${iconUrl}\" alt=\"${altText}\"/>\r\n </span>\r\n\r\n <span class=\"icon-stamp__text\">\r\n ${text}\r\n </span>\r\n </p>\r\n`;\r\n\r\nexport const listItem = (name, value) => {\r\n const bolded = name ? `<b>${name}</b>` : '';\r\n\r\n return `\r\n <li class=\"cart-line__list-item\">\r\n ${bolded} ${value}\r\n </li> \r\n `;\r\n};\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"vca-modal modal fade\\\" tabindex=\\\"-1\\\" role=\\\"dialog\\\" aria-hidden=\\\"true\\\"> <div class=\\\"vca-modal__dialog modal-dialog\\\" role=\\\"document\\\"> <div class=\\\"vca-modal__content modal-content\\\"> <div class=\\\"vca-modal__header modal-header\\\"> <h1 class=\\\"vca-modal__heading\\\" data-region=\\\"heading\\\"> <span data-label=\\\"heading\\\"></span> </h1> <button type=\\\"button\\\" class=\\\"vca-modal__close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"> <span class=\\\"vca-modal__close-icon\\\" aria-hidden=\\\"true\\\"></span> </button> </div> <div class=\\\"vca-modal__body modal-body\\\" data-label=\\\"body\\\"> </div> <div class=\\\"vca-modal__footer modal-footer\\\"> <div class=\\\"d-flex flex-column flex-md-row mx-md-4\\\"> <button type=\\\"button\\\" class=\\\"btn btn-sky-outline-alt active flex-md-1 mb-3 mb-md-0 mr-md-2\\\" data-control=\\\"update\\\" aria-live=\\\"polite\\\"> <span class=\\\"position-relative\\\" role=\\\"text\\\"> <span class=\\\"position-absolute ml-n4\\\"> <span data-placeholder=\\\"loader\\\"></span> </span> <span data-label=\\\"update\\\"></span> </span> </button> <button type=\\\"button\\\" class=\\\"btn btn-sky-outline-alt flex-md-1 ml-md-2\\\" data-dismiss=\\\"modal\\\"> <span data-label=\\\"continue\\\"></span> </button> </div> </div> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","import template from './cart-modal.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"cart-summary\\\"> <h2 class=\\\"cart-summary__heading\\\" id=\\\"cartSummary_heading\\\" data-region=\\\"heading\\\"> <span data-label=\\\"orderSummary\\\"></span> </h2> <ul aria-labelledby=\\\"cartSummary_heading\\\" data-region=\\\"list\\\"> <li class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_subtotal\\\" data-label=\\\"subtotal\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"subtotal\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_subtotal\\\"></span> </span> </li> <li class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_shipping\\\" data-label=\\\"shipping\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"shipping\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_shipping\\\"></span> </span> </li> <li class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_discounts\\\" data-label=\\\"discounts\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"discounts\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_discounts\\\"></span> </span> </li> <li class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_tax\\\" data-label=\\\"tax\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"tax\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_tax\\\"></span> </span> </li> </ul> <hr class=\\\"cart-summary__divider\\\"/> <ul aria-labelledby=\\\"cartSummary_heading\\\" data-region=\\\"list\\\"> <li class=\\\"cart-summary__item -total\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_total\\\" data-label=\\\"total\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"total\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_total\\\"></span> </span> </li> </ul> <div style=\\\"display:none\\\" data-region=\\\"upsellContainer\\\"> <hr class=\\\"cart-summary__divider\\\"/> <div class=\\\"cart-summary__upsell\\\" data-region=\\\"upsell\\\"></div> <a class=\\\"cart-summary__continue mb-0\\\" data-region=\\\"continueShopping\\\"> <span data-label=\\\"continueShopping\\\"></span> </a> </div> <div class=\\\"d-md-none checkout__promo__note\\\" data-region=\\\"promotionsnote\\\"></div> <a class=\\\"cart-summary__btn btn btn-sky\\\" data-control=\\\"checkout\\\"> <span class=\\\"position-relative\\\" role=\\\"text\\\"> <span class=\\\"cart-summary__loader\\\"> <span data-placeholder=\\\"loaderCheckout\\\"></span> </span> <span data-label=\\\"checkout\\\"></span> </span> </a> <div class=\\\"cart-summary__error-wrapper\\\"> <p class=\\\"cart-summary__error pt-0\\\" role=\\\"alert\\\" data-region=\\\"error\\\"></p> </div> <p class=\\\"cart-summary__note\\\" data-label=\\\"promotions\\\"></p> </div> \";\n// Exports\nmodule.exports = code;","import baseTemplate from './cart-summary.html';\r\n\r\nexport default baseTemplate;\r\n","import { screenMdMin } from '@utils/match-media';\r\n\r\nexport default class CategorySlider {\r\n constructor($el) {\r\n this.$el = $el;\r\n }\r\n\r\n init() {\r\n this.setupListeners();\r\n this.toggleSlider();\r\n }\r\n\r\n setupListeners() {\r\n screenMdMin.addEventListener('change', () => this.toggleSlider());\r\n }\r\n\r\n toggleSlider() {\r\n if(screenMdMin.matches) {\r\n this.$el.slick({\r\n infinite: false,\r\n rows: 0,\r\n slidesToShow: 5,\r\n });\r\n } else if(this.$el.hasClass('slick-initialized')) {\r\n this.$el.slick('unslick');\r\n }\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-category-slider');\r\n rootEls.forEach((el) => {\r\n const $el = $(el);\r\n const slider = new CategorySlider($el);\r\n slider.init();\r\n });\r\n});\r\n","import template from './templates/billing-address-form-cc';\r\nimport states from '@utils/states';\r\nimport UpdatePaymentMethod from '../../../api/routes/account/UpdatePaymentMethod';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\n\r\nexport default class BillingAddressForm {\r\n constructor(paymentCardId) {\r\n const $parsed = $( $.parseHTML(template));\r\n this.$el = $parsed;\r\n this.$updateAddressForm = this.$el.find('.js-update-billing-wrapper');\r\n this.$updateCardId = paymentCardId.selectId;\r\n this.loader = new AjaxLoader(this.$el.find('[data-loader=\"loader\"]'), {\r\n aria: false,\r\n size: 'xs'\r\n });\r\n this.loader.render();\r\n }\r\n\r\n init() {\r\n this.render();\r\n this.disabledSavePayment();\r\n this.selectDropdownList();\r\n this.updateSetupListeners();\r\n }\r\n\r\n render() {\r\n return this.$el;\r\n }\r\n\r\n disabledSavePayment() { \r\n this.$el.find('input, select').each((idx,el) => {\r\n $(el).on('change keyup', () => {\r\n this.disableSaveValidation($(el))\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * @method disableSaveValidation\r\n * @description to fill in the entire billing address input field, after which enable the update payment CTA.\r\n */\r\n disableSaveValidation(el) {\r\n let zipReg = /^\\d{5}$/;\r\n let zipValue = this.$el.find('[data-item=\"updateZip\"]').val();\r\n const validAddress = this.$el.find('[data-item=\"nameOnCard\"]').val() !== '' &&\r\n this.$el.find('[data-item=\"updateAddress\"]').val() !== '' && \r\n this.$el.find('[data-item=\"updateCity\"]').val() !== '' &&\r\n this.$el.find('[data-item=\"updateState\"]').val() !== '' &&\r\n this.$el.find('[data-item=\"updateState\"]').val() !== null &&\r\n zipValue !== '' && zipReg.test(zipValue);\r\n if ((el.val() == '' || el.val() == null || (el.attr(\"name\") == 'updateZip' && !zipReg.test(zipValue))) && el.hasClass('js-required')) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n if(validAddress) {\r\n this.$el.find('.js-update-payment-address-form').removeAttr('disabled');\r\n } else {\r\n this.$el.find('.js-update-payment-address-form').attr('disabled', true);\r\n }\r\n }\r\n\r\n /**\r\n * @method selectDropdownList\r\n * @description to get the state code of US and binding on select dropdown\r\n */\r\n selectDropdownList() {\r\n const $select = this.$el.find('[data-item=\"updateState\"]');\r\n $select.append(new Option('', '', true, true));\r\n states.forEach(item => {\r\n $select.append(new Option(item.text, item.value));\r\n });\r\n }\r\n\r\n /**\r\n * @method updateSetupListeners\r\n * @description to click function of update, cancel and continue update CTA\r\n */\r\n updateSetupListeners() {\r\n this.$el.find('.js-update-payment-address-form').on('click', () => this.onUpdateBillingForm());\r\n this.$el.find('.js-cancel-payment-address-form').on('click', () => this.onCancelUpdateForm());\r\n this.$el.find('.js-continue-update-payment, .js-edit-cancel-update-payment').on('click', () => this.onContinueUpdatePopup());\r\n }\r\n\r\n /**\r\n * @method onUpdateBillingForm\r\n * @description to hit the post api call after click the update payment CTA\r\n */\r\n async onUpdateBillingForm() {\r\n const payload = this.constructUpdatePayload();\r\n this.loader.active = true;\r\n const { success, data, error } = await UpdatePaymentMethod.post(payload);\r\n if(!success){\r\n return;\r\n }else{\r\n this.loader.active = false;\r\n const event = new CustomEvent(\"successUpdatePayment\", {\r\n bubbles: true,\r\n cancelable: true,\r\n detail: data\r\n });\r\n \r\n document.dispatchEvent(event);\r\n }\r\n }\r\n\r\n /**\r\n * @method constructUpdatePayload\r\n * @description to construct the payload of update billing address form\r\n */\r\n constructUpdatePayload() {\r\n let payload = {\r\n paymentId: this.$updateCardId,\r\n name: this.$el.find('[data-item=\"nameOnCard\"]').val(),\r\n address1: this.$el.find('[data-item=\"updateAddress\"]').val(),\r\n address2: this.$el.find('[data-item=\"updateAddress1\"]').val(),\r\n city: this.$el.find('[data-item=\"updateCity\"]').val(),\r\n state: this.$el.find('[data-item=\"updateState\"]').val(),\r\n zip: this.$el.find('[data-item=\"updateZip\"]').val(),\r\n }\r\n return payload;\r\n }\r\n\r\n /**\r\n * @method onCancelUpdateForm\r\n * @description to click the cancel CTA in upadate payment form\r\n */\r\n onCancelUpdateForm() {\r\n this.$el.find('#js-update-payment-management-modal').modal('show');\r\n }\r\n\r\n /**\r\n * @method onContinueUpdatePopup\r\n * @description to click the continue update CTA in cancel update popup\r\n */\r\n onContinueUpdatePopup() {\r\n this.$el.find('#js-update-payment-management-modal').modal('hide');\r\n }\r\n};\r\n","import uniqid from 'uniqid';\r\nimport { isObject } from 'lodash';\r\nimport ReactiveComponent, { watch } from '@utils/reactive-component';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport isFn from '@utils/is-function';\r\nimport template from './templates/checkout-address-form-cc';\r\nimport SelectBox from '../select-box/select-box';\r\nimport states from '@utils/states';\r\n\r\nconst EVENT_KEY = '_checkoutAddressForm_';\r\nconst EVENT_INPUT = `input.${EVENT_KEY}`;\r\n\r\nconst CLASS_VALIDATED = 'was-validated';\r\nconst CLASS_VISIBLE_ERROR = '-visible';\r\n\r\nconst DEFAULT_CONTEXT = {\r\n cancel: 'Cancel',\r\n heading: 'Add Address',\r\n requiredToken: '*',\r\n submit: 'Apply Updates',\r\n validation: '{0} is required'\r\n};\r\n\r\nexport const DEFAULT_OPTIONS = {\r\n classList: '',\r\n onCancelHandler: null,\r\n replaceOriginEl: false,\r\n schema: {\r\n cardHolderName:{\r\n required: true,\r\n name: 'CardHolderName',\r\n label: 'Name on Card',\r\n value: ''\r\n },\r\n firstName: {\r\n required: true,\r\n name: 'FirstName',\r\n label: 'First Name',\r\n value: ''\r\n },\r\n lastName: {\r\n required: true,\r\n name: 'LastName',\r\n label: 'Last Name',\r\n value: ''\r\n },\r\n address: {\r\n required: true,\r\n name: 'Address1',\r\n label: 'Street Address',\r\n value: ''\r\n },\r\n address2: {\r\n required: false,\r\n name: 'Address2',\r\n label: 'Address Line 2',\r\n value: ''\r\n },\r\n city: {\r\n required: true,\r\n name: 'City',\r\n label: 'City',\r\n value: ''\r\n },\r\n state: {\r\n required: true,\r\n name: 'State',\r\n label: 'State',\r\n value: ''\r\n },\r\n zip: {\r\n required: true,\r\n name: 'Zip',\r\n label: 'Zip',\r\n value: ''\r\n }\r\n }\r\n};\r\n\r\nexport default class CheckoutAddressForm extends ReactiveComponent {\r\n constructor($originEl, options, context) {\r\n super();\r\n\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n context = { ...DEFAULT_CONTEXT, ...context };\r\n\r\n const $parsed = $( $.parseHTML(template) );\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n // non-field labels\r\n this.$cancelLabel = this.$el.find('[data-label=\"cancel\"]');\r\n this.$headingLabel = this.$el.find('[data-label=\"heading\"]');\r\n this.$submitLabel = this.$el.find('[data-label=\"submit\"]');\r\n\r\n // field labels\r\n this.$cardHolderNameLabel = this.$el.find('[data-label=\"cardHolderName\"]');\r\n this.$firstNameLabel = this.$el.find('[data-label=\"firstName\"]');\r\n this.$lastNameLabel = this.$el.find('[data-label=\"lastName\"]');\r\n this.$addressLabel = this.$el.find('[data-label=\"address\"]');\r\n this.$address2Label = this.$el.find('[data-label=\"address2\"]');\r\n this.$cityLabel = this.$el.find('[data-label=\"city\"]');\r\n this.$stateLabel = this.$el.find('[data-label=\"state\"]');\r\n this.$zipLabel = this.$el.find('[data-label=\"zip\"]');\r\n\r\n // field error labels\r\n this.$cardHolderNameErrorLabel = this.$el.find('[data-label=\"cardHolderNameError\"]');\r\n this.$firstNameErrorLabel = this.$el.find('[data-label=\"firstNameError\"]');\r\n this.$lastNameErrorLabel = this.$el.find('[data-label=\"lastNameError\"]');\r\n this.$addressErrorLabel = this.$el.find('[data-label=\"addressError\"]');\r\n this.$address2ErrorLabel = this.$el.find('[data-label=\"address2Error\"]');\r\n this.$cityErrorLabel = this.$el.find('[data-label=\"cityError\"]');\r\n this.$stateErrorLabel = this.$el.find('[data-label=\"stateError\"]');\r\n this.$zipErrorLabel = this.$el.find('[data-label=\"zipError\"]');\r\n \r\n // field errors\r\n this.$error = this.$el.find('[data-region=\"error\"]');\r\n this.$cardHolderNameError = this.$el.find('[data-region=\"cardHolderNameError\"]');\r\n this.$firstNameError = this.$el.find('[data-region=\"firstNameError\"]');\r\n this.$lastNameError = this.$el.find('[data-region=\"lastNameError\"]');\r\n this.$addressError = this.$el.find('[data-region=\"addressError\"]');\r\n this.$address2Error = this.$el.find('[data-region=\"address2Error\"]');\r\n this.$cityError = this.$el.find('[data-region=\"cityError\"]');\r\n this.$stateError = this.$el.find('[data-region=\"stateError\"]');\r\n this.$zipError = this.$el.find('[data-region=\"zipError\"]');\r\n\r\n // field controls (input)\r\n this.$cardHolderNameCtrl = this.$el.find('[data-control=\"cardHolderName\"]');\r\n this.$firstNameCtrl = this.$el.find('[data-control=\"firstName\"]');\r\n this.$lastNameCtrl = this.$el.find('[data-control=\"lastName\"]');\r\n this.$addressCtrl = this.$el.find('[data-control=\"address\"]');\r\n this.$address2Ctrl = this.$el.find('[data-control=\"address2\"]');\r\n this.$cityCtrl = this.$el.find('[data-control=\"city\"]');\r\n this.$stateCtrl = this.$el.find('[data-control=\"state\"]');\r\n this.$zipCtrl = this.$el.find('[data-control=\"zip\"]');\r\n\r\n this.$cancel = this.$el.find('[data-control=\"cancel\"]');\r\n\r\n this.$loaderPlaceholder = this.$el.find('[data-placeholder=\"loader\"]');\r\n this.$stateSelectorPlaceholder = this.$el.find('[data-placeholder=\"state\"]');\r\n\r\n this.loader = null;\r\n this.stateSelector = null;\r\n\r\n this.replaceValidationToken = (str) => context.validation.replace('{0}', str);\r\n\r\n this.classList = options.classList;\r\n this.onCancelHandler = isFn(options.onCancelHandler) || null;\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n this.rendered = false;\r\n this.schema = Object.fromEntries(\r\n Object.entries(options.schema).map(([ key, value ]) => {\r\n const id = uniqid.time(`${key}_`); // generate unique ids for each field\r\n const errorId = `${id}_error`;\r\n const error = value.error && value.required ? value.error : (context.validation?.replace('{0}', value.label) || 'This field is required');\r\n const label = !value.required ? value.label : value.label + context.requiredToken;\r\n\r\n return [ key, { ...value, error, errorId, id, label } ]\r\n })\r\n );\r\n\r\n this.reactive({\r\n loading: false,\r\n value: null\r\n });\r\n\r\n this.context = context;\r\n }\r\n\r\n [watch]() {\r\n return {\r\n loading(loading) {\r\n this.loader.active = loading;\r\n }\r\n }\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.setupAccessibility();\r\n this.setupCancel();\r\n this.setupClassList();\r\n this.setupLoader();\r\n this.setupStateSelector();\r\n this.setupListeners();\r\n\r\n this.bindElementsToSchema();\r\n }\r\n\r\n bindElementsToSchema() {\r\n this.schema = Object.fromEntries(\r\n Object.entries(this.schema).map(([ key, value ]) => {\r\n const $el = this.$el.find(`#${value.id}`);\r\n const $errorEl = this.$el.find(`#${value.errorId}`);\r\n return [ key, { ...value, $el, $errorEl } ];\r\n })\r\n );\r\n }\r\n\r\n focus() {\r\n this.$el.find('input, select').get(0)?.focus();\r\n }\r\n\r\n hideError() {\r\n this.$error.hide();\r\n }\r\n\r\n onInvalidInput($el, $errorEl, errorId) {\r\n let zipReg = /^(\\d{5})(?:-?(\\d{4}))?$/;\r\n if(($el.val() && $el.attr(\"name\") != \"ZipPostalCode\") || ($el.attr(\"name\") == \"ZipPostalCode\" && zipReg.test($el.val()))) {\r\n $el.attr({ 'aria-describedby': null, 'aria-invalid': false });\r\n $errorEl.removeClass(CLASS_VISIBLE_ERROR);\r\n } else {\r\n $el.attr({ 'aria-describedby': errorId, 'aria-invalid': true });\r\n $errorEl.addClass(CLASS_VISIBLE_ERROR);\r\n }\r\n }\r\n\r\n onSubmit(evt) {\r\n evt?.preventDefault();\r\n evt?.stopPropagation();\r\n\r\n const form = this.$el.get(0);\r\n\r\n if(!form.checkValidity()) {\r\n this.validate();\r\n\r\n if(this.value) {\r\n this.unsetValue();\r\n }\r\n } else {\r\n this.hideError();\r\n this.updateValue();\r\n this.resetValidation()\r\n }\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n if(this.replaceOriginEl) {\r\n this.$originEl.replaceWith(this.$el);\r\n } else {\r\n this.$originEl.html(this.$el);\r\n }\r\n }\r\n\r\n this.rendered = true;\r\n\r\n return this.$el;\r\n }\r\n\r\n renderLabels() {\r\n this.$cancelLabel.html(this.context.cancel);\r\n this.$headingLabel.html(this.context.heading);\r\n this.$submitLabel.html(this.context.submit);\r\n\r\n this.$cardHolderNameLabel.html(this.schema.cardHolderName.label);\r\n this.$firstNameLabel.html(this.schema.firstName.label);\r\n this.$lastNameLabel.html(this.schema.lastName.label);\r\n this.$addressLabel.html(this.schema.address.label);\r\n this.$address2Label.html(this.schema.address2.label);\r\n this.$cityLabel.html(this.schema.city.label);\r\n this.$stateLabel.html(this.schema.state.label);\r\n this.$zipLabel.html(this.schema.zip.label);\r\n\r\n this.$cardHolderNameCtrl.attr('placeholder', this.schema.cardHolderName.label);\r\n this.$firstNameCtrl.attr('placeholder', this.schema.firstName.label);\r\n this.$lastNameCtrl.attr('placeholder', this.schema.lastName.label);\r\n this.$addressCtrl.attr('placeholder', this.schema.address.label);\r\n this.$address2Ctrl.attr('placeholder', this.schema.address2.label);\r\n this.$cityCtrl.attr('placeholder', this.schema.city.label);\r\n this.$stateCtrl.attr('placeholder', this.schema.state.label);\r\n this.$zipCtrl.attr('placeholder', this.schema.zip.label);\r\n\r\n this.$cardHolderNameErrorLabel.html(this.schema.cardHolderName.error);\r\n this.$firstNameErrorLabel.html(this.schema.firstName.error);\r\n this.$lastNameErrorLabel.html(this.schema.lastName.error);\r\n this.$addressErrorLabel.html(this.schema.address.error);\r\n this.$address2ErrorLabel.html(this.schema.address2.error);\r\n this.$cityErrorLabel.html(this.schema.city.error);\r\n this.$stateErrorLabel.html(this.schema.state.error);\r\n this.$zipErrorLabel.html(this.schema.zip.error);\r\n }\r\n\r\n setHeading(heading) {\r\n this.$headingLabel.html(heading);\r\n }\r\n\r\n setValues(values) {\r\n if(isObject(values) && !Array.isArray(values)) {\r\n Object.entries(values).forEach(([ key, value ]) => {\r\n if(this.schema[key]) {\r\n if(key !== 'state') {\r\n this.schema[key].value = value;\r\n this.schema[key].$el.val(value); \r\n } else {\r\n this.stateSelector.setValue(value);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n setupClassList() {\r\n this.$el.addClass(this.classList);\r\n }\r\n\r\n resetValidation() {\r\n this.$el.removeClass(CLASS_VALIDATED);\r\n\r\n Object.values(this.schema).forEach(({ $el, $errorEl }) => {\r\n $errorEl.removeClass(CLASS_VISIBLE_ERROR);\r\n $el.attr({ 'aria-describedby': null, 'aria-invalid': null });\r\n $el.off(EVENT_INPUT);\r\n });\r\n }\r\n\r\n resetValues() {\r\n Object.entries(this.schema).forEach(([ key, { $el } ]) => {\r\n if(key !== 'state') {\r\n $el.val('');\r\n } else {\r\n this.stateSelector.setValue('');\r\n }\r\n });\r\n }\r\n\r\n setupAccessibility() {\r\n this.$firstNameLabel.attr('for', this.schema.firstName.id);\r\n this.$lastNameLabel.attr('for', this.schema.lastName.id);\r\n this.$addressLabel.attr('for', this.schema.address.id);\r\n this.$address2Label.attr('for', this.schema.address2.id);\r\n this.$cityLabel.attr('for', this.schema.city.id);\r\n this.$stateLabel.attr('for', this.schema.state.id);\r\n this.$zipLabel.attr('for', this.schema.zip.id);\r\n\r\n this.$cardHolderNameCtrl.attr({ 'id': this.schema.cardHolderName.id, 'name': this.schema.cardHolderName.name });\r\n this.$firstNameCtrl.attr({ 'id': this.schema.firstName.id, 'name': this.schema.firstName.name });\r\n this.$lastNameCtrl.attr({ 'id': this.schema.lastName.id, 'name': this.schema.lastName.name });\r\n this.$addressCtrl.attr({ 'id': this.schema.address.id, 'name': this.schema.address.name });\r\n this.$address2Ctrl.attr({ 'id': this.schema.address2.id, 'name': this.schema.address2.name });\r\n this.$cityCtrl.attr({ 'id': this.schema.city.id, 'name': this.schema.city.name });\r\n this.$stateCtrl.attr({ 'id': this.schema.state.id, 'name': this.schema.state.name });\r\n this.$zipCtrl.attr({ 'id': this.schema.zip.id, 'name': this.schema.zip.name });\r\n\r\n this.$cardHolderNameError.attr('id', this.schema.cardHolderName.errorId);\r\n this.$firstNameError.attr('id', this.schema.firstName.errorId);\r\n this.$lastNameError.attr('id', this.schema.lastName.errorId);\r\n this.$addressError.attr('id', this.schema.address.errorId);\r\n this.$address2Error.attr('id', this.schema.address2.errorId);\r\n this.$cityError.attr('id', this.schema.city.errorId);\r\n this.$stateError.attr('id', this.schema.state.errorId);\r\n this.$zipError.attr('id', this.schema.zip.errorId);\r\n }\r\n\r\n setupCancel() {\r\n if(this.onCancelHandler) {\r\n this.$cancel.on('click', () => this.onCancelHandler());\r\n } else {\r\n this.$cancel.hide();\r\n }\r\n }\r\n\r\n setupLoader() {\r\n this.loader = new AjaxLoader(this.$loaderPlaceholder, {\r\n replaceOriginEl: false,\r\n size: 'xs'\r\n });\r\n\r\n this.loader.render();\r\n }\r\n\r\n setupListeners() {\r\n this.$el.on('submit', (evt) => this.onSubmit(evt));\r\n }\r\n \r\n setupStateSelector() {\r\n this.stateSelector = new SelectBox(this.$stateSelectorPlaceholder, {\r\n id: this.schema.state.id,\r\n mods: '-has-placeholder -txt-base -arrow-sm',\r\n name: this.schema.state.name,\r\n options: states,\r\n required: this.schema.state.required,\r\n unselectedText: this.schema.state.label\r\n });\r\n this.stateSelector.render();\r\n }\r\n\r\n showError(error) {\r\n this.$error.show().html(error);\r\n }\r\n\r\n validate() {\r\n this.$el.addClass(CLASS_VALIDATED);\r\n let zipReg = /^(\\d{5})(?:-?(\\d{4}))?$/;\r\n Object.values(this.schema).forEach(field => {\r\n if(field.required && !field.$el.val() || (field.name === \"ZipPostalCode\" && !zipReg.test(field.$el.val()))) {\r\n field.$el.attr({ 'aria-describedby': field.errorId, 'aria-invalid': true });\r\n field.$el.on(EVENT_INPUT, () => this.onInvalidInput(field.$el, field.$errorEl, field.errorId));\r\n\r\n field.$errorEl.addClass(CLASS_VISIBLE_ERROR);\r\n }\r\n });\r\n }\r\n\r\n watchValue(fn) {\r\n if(isFn(fn)) {\r\n return this.watch('value', fn);\r\n }\r\n }\r\n\r\n updateValue() {\r\n let value = {};\r\n\r\n Object.values(this.schema).forEach(({ $el, name }) => {\r\n const val = $el.val();\r\n value[name] = val;\r\n });\r\n\r\n this.value = value;\r\n }\r\n\r\n unsetValue() {\r\n this.value = null;\r\n }\r\n}","import uniqid from 'uniqid';\r\nimport { isObject } from 'lodash';\r\nimport ReactiveComponent, { watch } from '@utils/reactive-component';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport isFn from '@utils/is-function';\r\nimport template from './templates/checkout-address-form';\r\nimport SelectBox from '../select-box/select-box';\r\nimport states from '@utils/states';\r\n\r\nconst EVENT_KEY = '_checkoutAddressForm_';\r\nconst EVENT_INPUT = `input.${EVENT_KEY}`;\r\n\r\nconst CLASS_VALIDATED = 'was-validated';\r\nconst CLASS_VISIBLE_ERROR = '-visible';\r\n\r\nconst DEFAULT_CONTEXT = {\r\n cancel: 'Cancel',\r\n heading: 'Add Address',\r\n requiredToken: '*',\r\n submit: 'Apply Updates',\r\n validation: '{0} is required'\r\n};\r\n\r\nexport const DEFAULT_OPTIONS = {\r\n classList: '',\r\n onCancelHandler: null,\r\n replaceOriginEl: false,\r\n schema: {\r\n firstName: {\r\n required: true,\r\n name: 'FirstName',\r\n label: 'First Name',\r\n value: ''\r\n },\r\n lastName: {\r\n required: true,\r\n name: 'LastName',\r\n label: 'Last Name',\r\n value: ''\r\n },\r\n address: {\r\n required: true,\r\n name: 'Address1',\r\n label: 'Street Address',\r\n value: ''\r\n },\r\n address2: {\r\n required: false,\r\n name: 'Address2',\r\n label: 'Address Line 2',\r\n value: ''\r\n },\r\n city: {\r\n required: true,\r\n name: 'City',\r\n label: 'City',\r\n value: ''\r\n },\r\n state: {\r\n required: true,\r\n name: 'State',\r\n label: 'State',\r\n value: ''\r\n },\r\n zip: {\r\n required: true,\r\n name: 'Zip',\r\n label: 'Zip',\r\n value: ''\r\n }\r\n }\r\n};\r\n\r\nexport default class CheckoutAddressForm extends ReactiveComponent {\r\n constructor($originEl, options, context) {\r\n super();\r\n\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n context = { ...DEFAULT_CONTEXT, ...context };\r\n\r\n const $parsed = $( $.parseHTML(template) );\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n // non-field labels\r\n this.$cancelLabel = this.$el.find('[data-label=\"cancel\"]');\r\n this.$headingLabel = this.$el.find('[data-label=\"heading\"]');\r\n this.$submitLabel = this.$el.find('[data-label=\"submit\"]');\r\n\r\n // field labels\r\n this.$firstNameLabel = this.$el.find('[data-label=\"firstName\"]');\r\n this.$lastNameLabel = this.$el.find('[data-label=\"lastName\"]');\r\n this.$addressLabel = this.$el.find('[data-label=\"address\"]');\r\n this.$address2Label = this.$el.find('[data-label=\"address2\"]');\r\n this.$cityLabel = this.$el.find('[data-label=\"city\"]');\r\n this.$stateLabel = this.$el.find('[data-label=\"state\"]');\r\n this.$zipLabel = this.$el.find('[data-label=\"zip\"]');\r\n\r\n // field error labels\r\n this.$firstNameErrorLabel = this.$el.find('[data-label=\"firstNameError\"]');\r\n this.$lastNameErrorLabel = this.$el.find('[data-label=\"lastNameError\"]');\r\n this.$addressErrorLabel = this.$el.find('[data-label=\"addressError\"]');\r\n this.$address2ErrorLabel = this.$el.find('[data-label=\"address2Error\"]');\r\n this.$cityErrorLabel = this.$el.find('[data-label=\"cityError\"]');\r\n this.$stateErrorLabel = this.$el.find('[data-label=\"stateError\"]');\r\n this.$zipErrorLabel = this.$el.find('[data-label=\"zipError\"]');\r\n \r\n // field errors\r\n this.$error = this.$el.find('[data-region=\"error\"]');\r\n this.$firstNameError = this.$el.find('[data-region=\"firstNameError\"]');\r\n this.$lastNameError = this.$el.find('[data-region=\"lastNameError\"]');\r\n this.$addressError = this.$el.find('[data-region=\"addressError\"]');\r\n this.$address2Error = this.$el.find('[data-region=\"address2Error\"]');\r\n this.$cityError = this.$el.find('[data-region=\"cityError\"]');\r\n this.$stateError = this.$el.find('[data-region=\"stateError\"]');\r\n this.$zipError = this.$el.find('[data-region=\"zipError\"]');\r\n\r\n // field controls (input)\r\n this.$firstNameCtrl = this.$el.find('[data-control=\"firstName\"]');\r\n this.$lastNameCtrl = this.$el.find('[data-control=\"lastName\"]');\r\n this.$addressCtrl = this.$el.find('[data-control=\"address\"]');\r\n this.$address2Ctrl = this.$el.find('[data-control=\"address2\"]');\r\n this.$cityCtrl = this.$el.find('[data-control=\"city\"]');\r\n this.$stateCtrl = this.$el.find('[data-control=\"state\"]');\r\n this.$zipCtrl = this.$el.find('[data-control=\"zip\"]');\r\n\r\n this.$cancel = this.$el.find('[data-control=\"cancel\"]');\r\n\r\n this.$loaderPlaceholder = this.$el.find('[data-placeholder=\"loader\"]');\r\n this.$stateSelectorPlaceholder = this.$el.find('[data-placeholder=\"state\"]');\r\n\r\n this.loader = null;\r\n this.stateSelector = null;\r\n\r\n this.replaceValidationToken = (str) => context.validation.replace('{0}', str);\r\n\r\n this.classList = options.classList;\r\n this.onCancelHandler = isFn(options.onCancelHandler) || null;\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n this.rendered = false;\r\n this.schema = Object.fromEntries(\r\n Object.entries(options.schema).map(([ key, value ]) => {\r\n const id = uniqid.time(`${key}_`); // generate unique ids for each field\r\n const errorId = `${id}_error`;\r\n const error = value.error && value.required ? value.error : (context.validation?.replace('{0}', value.label) || 'This field is required');\r\n const label = !value.required ? value.label : value.label + context.requiredToken;\r\n\r\n return [ key, { ...value, error, errorId, id, label } ]\r\n })\r\n );\r\n\r\n this.reactive({\r\n loading: false,\r\n value: null\r\n });\r\n\r\n this.context = context;\r\n }\r\n\r\n [watch]() {\r\n return {\r\n loading(loading) {\r\n this.loader.active = loading;\r\n }\r\n }\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.setupAccessibility();\r\n this.setupCancel();\r\n this.setupClassList();\r\n this.setupLoader();\r\n this.setupStateSelector();\r\n this.setupListeners();\r\n\r\n this.bindElementsToSchema();\r\n }\r\n\r\n bindElementsToSchema() {\r\n this.schema = Object.fromEntries(\r\n Object.entries(this.schema).map(([ key, value ]) => {\r\n const $el = this.$el.find(`#${value.id}`);\r\n const $errorEl = this.$el.find(`#${value.errorId}`);\r\n return [ key, { ...value, $el, $errorEl } ];\r\n })\r\n );\r\n }\r\n\r\n focus() {\r\n this.$el.find('input, select').get(0)?.focus();\r\n }\r\n\r\n hideError() {\r\n this.$error.hide();\r\n }\r\n\r\n onInvalidInput($el, $errorEl, errorId) {\r\n if($el.val()) {\r\n $el.attr({ 'aria-describedby': null, 'aria-invalid': false });\r\n $errorEl.removeClass(CLASS_VISIBLE_ERROR);\r\n } else {\r\n $el.attr({ 'aria-describedby': errorId, 'aria-invalid': true });\r\n $errorEl.addClass(CLASS_VISIBLE_ERROR);\r\n }\r\n }\r\n\r\n onSubmit(evt) {\r\n evt?.preventDefault();\r\n evt?.stopPropagation();\r\n\r\n const form = this.$el.get(0);\r\n\r\n if(!form.checkValidity()) {\r\n this.validate();\r\n\r\n if(this.value) {\r\n this.unsetValue();\r\n }\r\n } else {\r\n this.hideError();\r\n this.updateValue();\r\n this.resetValidation()\r\n }\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n if(this.replaceOriginEl) {\r\n this.$originEl.replaceWith(this.$el);\r\n } else {\r\n this.$originEl.html(this.$el);\r\n }\r\n }\r\n\r\n this.rendered = true;\r\n\r\n return this.$el;\r\n }\r\n\r\n renderLabels() {\r\n this.$cancelLabel.html(this.context.cancel);\r\n this.$headingLabel.html(this.context.heading);\r\n this.$submitLabel.html(this.context.submit);\r\n\r\n this.$firstNameLabel.html(this.schema.firstName.label);\r\n this.$lastNameLabel.html(this.schema.lastName.label);\r\n this.$addressLabel.html(this.schema.address.label);\r\n this.$address2Label.html(this.schema.address2.label);\r\n this.$cityLabel.html(this.schema.city.label);\r\n this.$stateLabel.html(this.schema.state.label);\r\n this.$zipLabel.html(this.schema.zip.label);\r\n\r\n this.$firstNameCtrl.attr('placeholder', this.schema.firstName.label);\r\n this.$lastNameCtrl.attr('placeholder', this.schema.lastName.label);\r\n this.$addressCtrl.attr('placeholder', this.schema.address.label);\r\n this.$address2Ctrl.attr('placeholder', this.schema.address2.label);\r\n this.$cityCtrl.attr('placeholder', this.schema.city.label);\r\n this.$stateCtrl.attr('placeholder', this.schema.state.label);\r\n this.$zipCtrl.attr('placeholder', this.schema.zip.label);\r\n\r\n this.$firstNameErrorLabel.html(this.schema.firstName.error);\r\n this.$lastNameErrorLabel.html(this.schema.lastName.error);\r\n this.$addressErrorLabel.html(this.schema.address.error);\r\n this.$address2ErrorLabel.html(this.schema.address2.error);\r\n this.$cityErrorLabel.html(this.schema.city.error);\r\n this.$stateErrorLabel.html(this.schema.state.error);\r\n this.$zipErrorLabel.html(this.schema.zip.error);\r\n }\r\n\r\n setHeading(heading) {\r\n this.$headingLabel.html(heading);\r\n }\r\n\r\n setValues(values) {\r\n if(isObject(values) && !Array.isArray(values)) {\r\n Object.entries(values).forEach(([ key, value ]) => {\r\n if(this.schema[key]) {\r\n if(key !== 'state') {\r\n this.schema[key].value = value;\r\n this.schema[key].$el.val(value); \r\n } else {\r\n this.stateSelector.setValue(value);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n setupClassList() {\r\n this.$el.addClass(this.classList);\r\n }\r\n\r\n resetValidation() {\r\n this.$el.removeClass(CLASS_VALIDATED);\r\n\r\n Object.values(this.schema).forEach(({ $el, $errorEl }) => {\r\n $errorEl.removeClass(CLASS_VISIBLE_ERROR);\r\n $el.attr({ 'aria-describedby': null, 'aria-invalid': null });\r\n $el.off(EVENT_INPUT);\r\n });\r\n }\r\n\r\n resetValues() {\r\n Object.entries(this.schema).forEach(([ key, { $el } ]) => {\r\n if(key !== 'state') {\r\n $el.val('');\r\n } else {\r\n this.stateSelector.setValue('');\r\n }\r\n });\r\n }\r\n\r\n setupAccessibility() {\r\n this.$firstNameLabel.attr('for', this.schema.firstName.id);\r\n this.$lastNameLabel.attr('for', this.schema.lastName.id);\r\n this.$addressLabel.attr('for', this.schema.address.id);\r\n this.$address2Label.attr('for', this.schema.address2.id);\r\n this.$cityLabel.attr('for', this.schema.city.id);\r\n this.$stateLabel.attr('for', this.schema.state.id);\r\n this.$zipLabel.attr('for', this.schema.zip.id);\r\n\r\n this.$firstNameCtrl.attr({ 'id': this.schema.firstName.id, 'name': this.schema.firstName.name });\r\n this.$lastNameCtrl.attr({ 'id': this.schema.lastName.id, 'name': this.schema.lastName.name });\r\n this.$addressCtrl.attr({ 'id': this.schema.address.id, 'name': this.schema.address.name });\r\n this.$address2Ctrl.attr({ 'id': this.schema.address2.id, 'name': this.schema.address2.name });\r\n this.$cityCtrl.attr({ 'id': this.schema.city.id, 'name': this.schema.city.name });\r\n this.$stateCtrl.attr({ 'id': this.schema.state.id, 'name': this.schema.state.name });\r\n this.$zipCtrl.attr({ 'id': this.schema.zip.id, 'name': this.schema.zip.name });\r\n\r\n this.$firstNameError.attr('id', this.schema.firstName.errorId);\r\n this.$lastNameError.attr('id', this.schema.lastName.errorId);\r\n this.$addressError.attr('id', this.schema.address.errorId);\r\n this.$address2Error.attr('id', this.schema.address2.errorId);\r\n this.$cityError.attr('id', this.schema.city.errorId);\r\n this.$stateError.attr('id', this.schema.state.errorId);\r\n this.$zipError.attr('id', this.schema.zip.errorId);\r\n }\r\n\r\n setupCancel() {\r\n if(this.onCancelHandler) {\r\n this.$cancel.on('click', () => this.onCancelHandler());\r\n } else {\r\n this.$cancel.hide();\r\n }\r\n }\r\n\r\n setupLoader() {\r\n this.loader = new AjaxLoader(this.$loaderPlaceholder, {\r\n replaceOriginEl: false,\r\n size: 'xs'\r\n });\r\n\r\n this.loader.render();\r\n }\r\n\r\n setupListeners() {\r\n this.$el.on('submit', (evt) => this.onSubmit(evt));\r\n }\r\n \r\n setupStateSelector() {\r\n this.stateSelector = new SelectBox(this.$stateSelectorPlaceholder, {\r\n id: this.schema.state.id,\r\n mods: '-has-placeholder -txt-base -arrow-sm',\r\n name: this.schema.state.name,\r\n options: states,\r\n required: this.schema.state.required,\r\n unselectedText: this.schema.state.label\r\n });\r\n this.stateSelector.render();\r\n }\r\n\r\n showError(error) {\r\n this.$error.show().html(error);\r\n }\r\n\r\n validate() {\r\n this.$el.addClass(CLASS_VALIDATED);\r\n\r\n Object.values(this.schema).forEach(field => {\r\n if(field.required && !field.$el.val()) {\r\n field.$el.attr({ 'aria-describedby': field.errorId, 'aria-invalid': true });\r\n field.$el.on(EVENT_INPUT, () => this.onInvalidInput(field.$el, field.$errorEl, field.errorId));\r\n\r\n field.$errorEl.addClass(CLASS_VISIBLE_ERROR);\r\n }\r\n });\r\n }\r\n\r\n watchValue(fn) {\r\n if(isFn(fn)) {\r\n return this.watch('value', fn);\r\n }\r\n }\r\n\r\n updateValue() {\r\n let value = {};\r\n\r\n Object.values(this.schema).forEach(({ $el, name }) => {\r\n const val = $el.val();\r\n value[name] = val;\r\n });\r\n\r\n this.value = value;\r\n }\r\n\r\n unsetValue() {\r\n this.value = null;\r\n }\r\n}\r\n","import template from './templates/checkout-applied-promo';\r\nimport store from '@stores/cart/cart-store';\r\n\r\nconst CLASS_NAME_BORDERED = '-bordered';\r\n\r\nconst DEFAULT_CONTEXT = {\r\n applied: 'Applied',\r\n remove: 'Remove Promo Code'\r\n};\r\n\r\nconst DEFAULT_OPTIONS = {\r\n bordered: false,\r\n replaceOriginEl: false,\r\n removeable: true\r\n};\r\n\r\nexport default class CheckoutAppliedPromo {\r\n constructor($originEl, context, options) {\r\n context = { ...DEFAULT_CONTEXT, ...context };\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n\r\n const $parsed = $( $.parseHTML(template));\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n this.appliedLabel = this.$el.find('[data-label=\"applied\"]');\r\n this.removeLabel = this.$el.find('[data-label=\"remove\"]');\r\n\r\n this.$code = this.$el.find('[data-region=\"code\"]');\r\n\r\n this.$removeCtrl = this.$el.find('[data-control=\"remove\"]');\r\n\r\n this.context = context;\r\n Object.assign(this, options);\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.toggleBordered();\r\n this.toggleRemove();\r\n this.updateCode();\r\n this.setupListeners();\r\n }\r\n\r\n async onRemove() {\r\n const { success, error } = await store.actions.removePromo();\r\n\r\n // todo: error handling\r\n console.log(success, error);\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n this.replaceOriginEl ? this.$originEl.replaceWith(this.$el) : this.$originEl.html(this.$el);\r\n }\r\n\r\n return this.$el;\r\n }\r\n\r\n renderLabels() {\r\n this.appliedLabel.html(this.context.applied);\r\n this.removeLabel.html(this.context.remove);\r\n }\r\n\r\n toggleBordered() {\r\n if(this.bordered) {\r\n this.$el.addClass(CLASS_NAME_BORDERED);\r\n }\r\n }\r\n\r\n toggleRemove() {\r\n if(!this.removeable) {\r\n this.$removeCtrl.remove();\r\n }\r\n }\r\n\r\n setupListeners() {\r\n this.$removeCtrl.on('click', () => this.onRemove());\r\n\r\n store.watch('promoCode', () => this.updateCode());\r\n }\r\n\r\n updateCode() {\r\n this.$code.html(store.state.promoCode);\r\n }\r\n};\r\n","\r\nimport billingService from '@api/routes/cart/getbillinginformation';\r\nimport shippingService from '@api/routes/cart/getshippinginformation';\r\n// remove these to and combimed into review\r\nimport selectAddressService from '@api/routes/cart/selectoraddbillingaddress';\r\nimport selectPaymentService from '@api/routes/cart/addexistingpaymentmethod';\r\nimport AddBillingAndPaymentMethodToCart from '@api/routes/cart/AddBillingAndPaymentMethodToCart';\r\nimport uniqid from 'uniqid';\r\nimport ReactiveComponent, { computed, watch } from \"@utils/reactive-component\";\r\nimport parseRenderingContext from '@utils/parse-rendering-context';\r\nimport isFn from '@utils/is-function';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport SelectBox from '../select-box/select-box';\r\nimport CheckoutAddressForm, { DEFAULT_OPTIONS as addressFormDefaults } from './checkout-address-form-cc';\r\nimport CheckoutPaymentForm from './checkout-payment-form';\r\nimport AddressValidation, { logUpsServiceError, showSuggestions, statusCodes } from '../address-validation/address-validation';\r\nimport template from './templates/checkout-billing';\r\nimport { context as defaultContext } from './checkout-defaults';\r\nimport store from '@stores/cart/cart-store';\r\n\r\nimport AddPayment from '../add-payment';\r\n// needs to change everwhere form cart to account\r\nimport { url as apiUrl } from '@api/routes/account/addpaymentmethod';\r\nimport BillingAddressForm from './billing-addresss-form-cc';\r\n\r\nconst CLASS_NAME_ADD_ADDRESS_DISABLED = '-disabled';\r\nconst CLASS_NAME_ADD_METHOD_DISABLED = '-disabled';\r\nconst CLASS_NAME_REVIEW_BUTTON_DISABLED = 'disabled';\r\n\r\nconst NEW_ADDRESS_OPTION_VALUE = '__checkoutBilling_newAddress__';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n addPaymentFormClassList: '',\r\n classList: '',\r\n onCancelHandler: null,\r\n onCancelBillHandler: null,\r\n replaceOriginEl: false\r\n};\r\n\r\nconst DEFAULT_LOADER_OPTIONS = {\r\n aria: false,\r\n className: 'd-flex align-items-center h-100',\r\n size: 'xs',\r\n visible: true\r\n};\r\n\r\nexport default class CheckoutBilling extends ReactiveComponent {\r\n constructor($originEl, context, options) {\r\n context = { ...defaultContext, ...context };\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n\r\n super();\r\n\r\n const $parsed = this.parseTemplate();\r\n $originEl.replaceWith($parsed);\r\n\r\n this.$el = $parsed;\r\n\r\n this.$isSubscriptionsPage = $(\".js-sub-section\").length > 0;\r\n\r\n this.$addLabel = this.$el.find('[data-label=\"add\"]');\r\n this.$addressLabel = this.$el.find('[data-label=\"address\"]');\r\n this.$methodLabel = this.$el.find('[data-label=\"method\"]');\r\n this.$methodWrapper = this.$el.find('[data-control=\"method\"]');\r\n this.$reviewLabel = this.$el.find('[data-label=\"review\"]');\r\n this.$cardHolderHeaderLabel = this.$el.find('[data-label=\"heading-card-name\"]');\r\n this.$cardHolderNameLabel = this.$el.find('[data-label=\"cardHolderName\"]');\r\n this.$cardHolderNameErrorLabel = this.$el.find('[data-label=\"cardHolderNameError\"]');\r\n this.$cardHolderNameError = this.$el.find('[data-region=\"cardHolderNameError\"]');\r\n this.$cardHolderNameCtrl = this.$el.find('[data-control=\"cardHolderName\"]');\r\n\r\n this.$address = this.$el.find('[data-region=\"address\"]');\r\n this.$addressForm = this.$el.find('[data-region=\"addressForm\"]');\r\n this.$error = this.$el.find('[data-region=\"error\"]');\r\n this.$hiddenOnForm = this.$el.find('[data-region=\"hidden-on-form\"]');\r\n this.$controls = this.$el.find('[data-region=\"controls\"]');\r\n this.$method = this.$el.find('[data-region=\"method\"]');\r\n this.$methodForm = this.$el.find('[data-region=\"methodForm\"]');\r\n\r\n this.$addAddressCtrl = this.$el.find('[data-control=\"addAddress\"]');\r\n this.$addMethodCtrl = this.$el.find('[data-control=\"addMethod\"]');\r\n this.$methodCancelCtrl = this.$el.find('[data-control=\"methodCancel\"]');\r\n this.$reviewCtrl = this.$el.find('[data-control=\"review\"]');\r\n\r\n this.$savePayment = this.$el.find(\"#saveNewPayment\");\r\n\r\n this.$addressPlaceholder = $('#addPaymentContainer').find('[data-placeholder=\"address\"]');\r\n this.$addressFormPlaceholder = this.$el.find('[data-placeholder=\"addressForm\"]');\r\n this.$addressLoaderPlaceholder = $('#addPaymentContainer').find('[data-placeholder=\"addressLoader\"]');\r\n this.$loaderPlaceholder = this.$el.find('[data-placeholder=\"loader\"]');\r\n this.$methodPlaceholder = this.$el.find('[data-placeholder=\"method\"]');\r\n this.$methodLoaderPlaceholder = this.$el.find('[data-placeholder=\"methodLoader\"]');\r\n this.$paymentFormPlaceholder = this.$el.find('[data-placeholder=\"payment\"]');\r\n this.$addressFormPlaceholder = this.$el.find('[data-placeholder=\"addressForm\"]');\r\n this.$prescription = $('.cart-landing__rx[data-region=\"prescription\"]');\r\n\r\n this.$promotionsnote = this.$el.find('[data-region=\"promotionsnote\"]');\r\n\r\n this.addressLoader = null;\r\n this.addressSelector = null;\r\n this.loader = null;\r\n this.methodLoader = null;\r\n this.methodSelector = null;\r\n\r\n this.addPaymentForm = null;\r\n this.addPaymentFormClassList = options.addPaymentFormClassList;\r\n this.checkoutForm = null;\r\n this.billingAddressForm = null;\r\n\r\n this.id = uniqid.time('');\r\n this.addressId = `billingAddress_${this.id}`;\r\n this.methodId = `billingMethod_${this.id}`;\r\n this.shippingAddressId = null;\r\n this.shippingAddress = {};\r\n\r\n this.prevAddressValue = '';\r\n this.disableServiceUpdate = false;\r\n this.newAddress = {};\r\n\r\n\r\n this.$cancelLabel = this.$el.find('[data-label=\"cancel\"]');\r\n this.$headingLabel = this.$el.find('[data-label=\"heading\"]');\r\n this.$subscriptionsLabel = this.$el.find('[data-label=\"subscriptions\"]');\r\n this.$submitLabel = this.$el.find('[data-label=\"submit\"]');\r\n\r\n this.$amex = this.$el.find('[data-region=\"amex\"]');\r\n this.$ccList = this.$el.find('[data-region=\"ccList\"]');\r\n this.$discover = this.$el.find('[data-region=\"discover\"]');\r\n this.$mastercard = this.$el.find('[data-region=\"mastercard\"]');\r\n this.$visa = this.$el.find('[data-region=\"visa\"]');\r\n\r\n //this.$openNewAddress = this.$el.find('[data-control=\"openAddAddress\"]');\r\n //this.$closeAddress = this.$el.find('[data-target=\"cancel\"]');\r\n\r\n this.$cancel = this.$el.find('[data-control=\"cancel\"]');\r\n\r\n // user story 35439: [Ecomm] Payment Failure Enhancement - Checkout\r\n this.$shippingAddressLabel = this.$el.find('[data-label=\"useShippingAddress\"]');\r\n this.$checkboxShippingAddress = this.$el.find('#useShippingAddress');\r\n this.$useBillingAddressText = this.$el.find('[data-region=\"useAddressText\"]');\r\n this.$closeToasterMsg = $('.js-checkout-toaster-visible').find('.close-toaster-payment');\r\n this.$checkoutPaymentFF = $('.checkout-progress').find('#checkoutUpdateFF').val();\r\n\r\n this.form = null;\r\n\r\n this.classList = options.classList;\r\n this.onCancelHandler = isFn(options.onCancelHandler) || null;\r\n this.onCancelBillHandler = isFn(options.onCancelBillHandler) || null;\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n\r\n\r\n this.reactive({\r\n addresses: [],\r\n addressFormVisible: false,\r\n addressesLoading: true,\r\n addressOptions: [],\r\n selectedAddressValue: '',\r\n\r\n methods: [],\r\n methodsFormVisible: false,\r\n methodsLoading: true,\r\n methodOptions: [],\r\n selectedMethodValue: '',\r\n\r\n loading: true\r\n });\r\n\r\n this.loaders = [];\r\n this.context = context;\r\n }\r\n\r\n [computed]() {\r\n return {\r\n isNewAddress() {\r\n return this.selectedAddressValue === NEW_ADDRESS_OPTION_VALUE;\r\n },\r\n selectedAddressInfo() {\r\n if (this.selectedAddressValue === 'null') {\r\n this.selectedAddressValue = store.state.shippingParty?.AddressName;\r\n return store.state.shippingParty;\r\n }\r\n\r\n if (this.isNewAddress) {\r\n return this.newAddress;\r\n }\r\n\r\n return this.addresses.find(address => address.AddressName === this.selectedAddressValue) || null;\r\n }\r\n }\r\n }\r\n\r\n [watch]() {\r\n return {\r\n addressesLoading(loading) {\r\n this.addressLoader.active = loading;\r\n },\r\n methodsLoading(loading) {\r\n this.methodLoader.active = loading;\r\n },\r\n addressOptions(newOptions) {\r\n if (!newOptions || !Array.isArray(newOptions) || newOptions.length === 0) {\r\n this.addressSelector.disable();\r\n this.addressSelector.disableElement();\r\n }\r\n\r\n const options = {\r\n options: newOptions\r\n };\r\n\r\n this.addressSelector.setOptions(options);\r\n this.addressSelector.enable();\r\n },\r\n methodsFormVisible() {\r\n if (this.methodsFormVisible) {\r\n this.$methodForm.slideDown('fast');\r\n this.$hiddenOnForm.slideUp('fast');\r\n this.$addMethodCtrl.attr('aria-expanded', true);\r\n } else {\r\n this.$methodForm.slideUp('fast');\r\n this.$hiddenOnForm.slideDown('fast');\r\n this.methodSelector.focus();\r\n this.$addMethodCtrl.removeAttr('aria-expanded');\r\n }\r\n },\r\n loading(loading) {\r\n this.loader.active = loading;\r\n\r\n if (loading) {\r\n this.$addAddressCtrl.addClass(CLASS_NAME_ADD_ADDRESS_DISABLED).attr('aria-disabled', true);\r\n this.$addMethodCtrl.addClass(CLASS_NAME_ADD_METHOD_DISABLED).attr('aria-disabled', true);\r\n } else {\r\n this.$addAddressCtrl.removeClass(CLASS_NAME_ADD_ADDRESS_DISABLED).removeAttr('aria-disabled');\r\n this.$addMethodCtrl.removeClass(CLASS_NAME_ADD_METHOD_DISABLED).removeAttr('aria-disabled');\r\n }\r\n },\r\n methodOptions(newOptions) {\r\n if ((!newOptions || !Array.isArray(newOptions) || newOptions.length === 0) && !this.$isSubscriptionsPage) {\r\n this.methodSelector.disable();\r\n this.methodSelector.disableElement();\r\n }\r\n const options = {\r\n options: newOptions,\r\n unselectedText: this.context.Select\r\n };\r\n\r\n this.methodSelector.setOptions(options);\r\n this.methodSelector.enable();\r\n },\r\n addressFormVisible() {\r\n if (this.addressFormVisible) {\r\n if (!this.checkoutForm.rendered) {\r\n this.checkoutForm.init();\r\n this.checkoutForm.render();\r\n }\r\n\r\n this.$addressForm.slideDown('fast');\r\n //this.$hiddenOnForm.slideUp('fast');\r\n this.checkoutForm.focus();\r\n this.$addAddressCtrl.attr('aria-expanded', true);\r\n } else {\r\n this.$addressForm.slideUp('fast');\r\n //this.$hiddenOnForm.slideDown('fast');\r\n this.addressSelector.focus();\r\n this.$addAddressCtrl.removeAttr('aria-expanded');\r\n }\r\n }\r\n }\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderAddPaymentForm();\r\n //this.renderCheckoutForm();\r\n this.renderReviewLink();\r\n this.renderSelectors();\r\n this.renderLoaders();\r\n this.setupAccessibility();\r\n this.setupListeners();\r\n this.getBillingData();\r\n\r\n this.renderLabels2();\r\n this.renderAcceptedCards();\r\n // this.setupCancel();\r\n this.setupClassList();\r\n this.renderCheckoutForm();\r\n this.setEvents();\r\n this.render();\r\n this.disabledAddNewSavePayment();\r\n this.updateBillingAddressPayment();\r\n }\r\n\r\n onCartLoaded() {\r\n this.loaders.forEach(loader => (loader.active = false));\r\n this.displayLegalDisclaimer();\r\n }\r\n\r\n renderLabels2() {\r\n this.$cancelLabel.html(this.context.Cancel);\r\n this.$headingLabel.html(this.context.AddPaymentMethod);\r\n this.$subscriptionsLabel.html(this.context.ActiveSubscriptions);\r\n this.$submitLabel.html(this.context.SavePayment);\r\n this.$cardHolderHeaderLabel.html(this.context.CardHolderInfo);\r\n this.$cardHolderNameLabel.html(this.context.CardHolderInputLabel);\r\n this.$cardHolderNameErrorLabel.html(this.context.CardHolderInputError);\r\n this.$cardHolderNameCtrl.attr('placeholder', this.context.CardHolderInputLabel);\r\n this.$shippingAddressLabel.html(this.context.UseShippingAddress);\r\n }\r\n\r\n getData() {\r\n return new Promise((resolve) => {\r\n Promise\r\n .all([billingService.get()])\r\n .then(([billingResponse]) => {\r\n resolve({\r\n ...billingResponse,\r\n shippingAddressId: billingResponse?.data?.AddressId || null\r\n });\r\n });\r\n });;\r\n }\r\n\r\n async getBillingData() {\r\n // const { data, error, success } = await billingService.get();\r\n const { data, error, success, shippingAddressId } = await this.getData();\r\n let paymentId = data.PaymentId\r\n\r\n if (success) {\r\n this.shippingAddressId = shippingAddressId;\r\n\r\n this.updateUiOnly(() => {\r\n this.setupAddresses(data, this.shippingAddressId);\r\n this.setupMethods(data, false, paymentId);\r\n });\r\n\r\n this.updateSummary(data);\r\n\r\n this.addPaymentForm.setAddressId(this.selectedAddressValue);\r\n } else {\r\n this.$error.show().html(error);\r\n }\r\n\r\n this.addressesLoading = false;\r\n this.methodsLoading = false;\r\n this.loading = false;\r\n }\r\n\r\n async selectAddress() {\r\n this.$error.hide();\r\n\r\n const payload = {\r\n AddressId: this.selectedAddressValue\r\n };\r\n\r\n this.addPaymentForm.setAddressId(this.selectedAddressValue);\r\n let addresses = this.addresses;\r\n let billingParty = addresses.find((address) => address.AddressName === this.selectedAddressValue);\r\n store.mutations.SET_BILLING_PARTY(billingParty);\r\n }\r\n\r\n async addAddress(addressParty) {\r\n const payload = {\r\n AddressId: null,\r\n VcaAddressParty: addressParty\r\n };\r\n\r\n const { success, data, error } = await await selectAddressService.post(payload);\r\n\r\n if (success) {\r\n const {\r\n isValidated,\r\n response: validatedResponse\r\n } = await this.handleAddressValidation(data.UpsAddressValidationStatus, addressParty, data.SuggestedAddresses);\r\n\r\n if (isValidated) {\r\n this.updateUiOnly(() => {\r\n this.setupAddresses(validatedResponse.data || data);\r\n });\r\n\r\n this.addPaymentForm.setAddressId(this.selectedAddressValue);\r\n\r\n this.addressFormVisible = false;\r\n }\r\n } else if (error) {\r\n this.checkoutForm.showError(error);\r\n }\r\n }\r\n\r\n async handleAddressValidation(status, originalAddress, suggestedAddresses = []) {\r\n const showPrompt = showSuggestions(status);\r\n\r\n if (!showPrompt) {\r\n if (status === statusCodes.UPS_UNAVAILABLE) logUpsServiceError();\r\n\r\n return {\r\n isValidated: true,\r\n response: {}\r\n }\r\n };\r\n\r\n return await this.showSuggestedAddresses(status, originalAddress, suggestedAddresses);\r\n }\r\n\r\n async showSuggestedAddresses(status, originalAddress, suggestedAddresses = []) {\r\n let response = {};\r\n\r\n const currentAddress = {\r\n address: originalAddress.Address1,\r\n address2: originalAddress.Address2,\r\n city: originalAddress.City,\r\n stateCode: originalAddress.StateCode,\r\n zip: originalAddress.ZipPostalCode\r\n };\r\n\r\n const suggestions = suggestedAddresses?.map((address, index) => ({\r\n addressId: `${index}`,\r\n address: address.Address1,\r\n address2: address.Address2,\r\n city: address.City,\r\n stateCode: address.StateCode,\r\n zip: address.ZipPostalCode\r\n }));\r\n\r\n const onSubmitHandler = async (isOriginal, value) => {\r\n let addressParty = originalAddress;\r\n\r\n if (!isOriginal) {\r\n const index = suggestions.findIndex(({ addressId }) => addressId === value);\r\n if (index > -1) {\r\n addressParty = {\r\n ...addressParty,\r\n ...suggestedAddresses[index]\r\n };\r\n }\r\n }\r\n\r\n response = await selectAddressService.post({\r\n AddressId: null,\r\n VcaAddressParty: addressParty,\r\n IsSuggestion: true\r\n });\r\n\r\n return response;\r\n };\r\n\r\n const addressValidation = new AddressValidation(\r\n status,\r\n currentAddress,\r\n suggestions,\r\n this.context,\r\n {},\r\n onSubmitHandler\r\n );\r\n\r\n const { isValidated } = await addressValidation.prompt();\r\n addressValidation.destroy();\r\n\r\n return {\r\n isValidated,\r\n response\r\n };\r\n }\r\n\r\n /* async postPaymentMethod() {\r\n if (!this.disableServiceUpdate) {\r\n this.loading = true;\r\n\r\n this.$error.hide();\r\n\r\n const payload = {\r\n AddressId: this.selectedAddressValue,\r\n PaymentId: this.selectedMethodValue\r\n }\r\n\r\n const { error, success } = await selectPaymentService.post(payload);\r\n\r\n if (!success) {\r\n this.$error.show().html(error);\r\n }\r\n\r\n this.loading = false;\r\n }\r\n } */\r\n\r\n async postReivewBillinginformation(reviewUrl) {\r\n let addressValue = this.selectedAddressValue;\r\n let newbillingaddress = store.state.billingParty\r\n if (addressValue === '__checkoutBilling_newAddress__') {\r\n addressValue = '';\r\n } else {\r\n newbillingaddress = {}\r\n }\r\n console.log(23, addressValue)\r\n const payload = {\r\n AddressId: addressValue,\r\n PaymentId: this.selectedMethodValue,\r\n VcaAddressParty: newbillingaddress\r\n }\r\n\r\n const { error, data, success } = await AddBillingAndPaymentMethodToCart.post(payload);\r\n\r\n if (!success) {\r\n this.$error.show().html(error);\r\n } else {\r\n window.location.href = reviewUrl;\r\n }\r\n\r\n }\r\n\r\n setupAddresses(data, ShippingId) {\r\n const addresses = data.BillingAddresses;\r\n let IdValue = data.AddressId;\r\n if (data.AddressId === null) {\r\n IdValue = ShippingId\r\n } else {\r\n IdValue = data.AddressId\r\n }\r\n const billingParty = addresses.find((address) => address.AddressName === IdValue);\r\n this.shippingAddress = billingParty;\r\n store.mutations.SET_BILLING_PARTY(billingParty);\r\n let isPrimaryIndex = addresses.findIndex(address => address.IsPrimary == true);\r\n addresses.unshift(addresses.splice(isPrimaryIndex, 1)[0]);\r\n this.mapAddressOptions(addresses);\r\n\r\n this.setInitialAddress();\r\n }\r\n\r\n setupMethods(data, isAddedPayment, paymentId) {\r\n\r\n if (isAddedPayment) {\r\n this.methodsFormVisible = false;\r\n $('.js-checkout-toaster-visible').removeClass('hidden');\r\n $('.js-checkout-toaster-visible').find('[data-region=\"addPaymentToasterMsg\"]').html('Your payment method has been added');\r\n this.$el.find('[data-control=\"method\"]').find('.select-box__select').removeAttr('disabled').removeClass('disabled');\r\n this.clearAddNewPaymentDetails();\r\n }\r\n\r\n const methods = data.SavedPayments;\r\n if (methods == null || Object.keys(methods).length === 0) {\r\n this.$methodWrapper.hide();\r\n this.$methodCancelCtrl.hide();\r\n this.onAddMethodClick();\r\n } else {\r\n this.$methodWrapper.show();\r\n this.$methodCancelCtrl.show();\r\n let paymentMethod = methods.find((method) => method.Id === paymentId);\r\n let paymentMethodDefault = [];\r\n if (data.PaymentId === null) {\r\n paymentMethod = methods.find((method) => method.IsDefault === true);\r\n }\r\n let isPrimaryIndex = methods.findIndex(methods => methods.IsDefault == true);\r\n methods.unshift(methods.splice(isPrimaryIndex, 1)[0]);\r\n\r\n store.mutations.SET_PAYMENT_METHOD(paymentMethod);\r\n this.mapPaymentMethods(methods);\r\n\r\n this.setInitialMethod();\r\n }\r\n }\r\n\r\n mapPaymentMethods(payments = []) {\r\n this.methods = payments;\r\n\r\n const methodOptions = this.methods.map(method => {\r\n const text = this.parseMethodText(method);\r\n return {\r\n text,\r\n value: method.Id\r\n };\r\n });\r\n\r\n this.methodOptions = methodOptions;\r\n }\r\n\r\n onAddAddressClick() {\r\n if (this.loading) return;\r\n\r\n this.addressFormVisible = true;\r\n\r\n this.newAddress = {};\r\n this.checkoutForm.setValues({\r\n firstName: '',\r\n lastName: '',\r\n address: '',\r\n address2: '',\r\n city: '',\r\n state: '',\r\n zip: ''\r\n });\r\n\r\n const options = [...this.addressOptions];\r\n const newAddressOption = { text: this.context.NewAddress, value: NEW_ADDRESS_OPTION_VALUE };\r\n const newAddressIndex = options.findIndex(({ value }) => value === NEW_ADDRESS_OPTION_VALUE);\r\n\r\n if (newAddressIndex > -1) {\r\n options[newAddressIndex] = newAddressOption;\r\n } else {\r\n options.push(newAddressOption);\r\n }\r\n\r\n this.addressOptions = options;\r\n\r\n this.updateUiOnly(() => {\r\n this.addressSelector.setValue(NEW_ADDRESS_OPTION_VALUE);\r\n });\r\n\r\n this.addressSelector.disableElement();\r\n }\r\n\r\n onAddressFormCancel() {\r\n this.updateUiOnly(() => {\r\n this.addressOptions = this.addressOptions.filter(({ value }) => value !== NEW_ADDRESS_OPTION_VALUE);\r\n this.addressSelector.setValue(this.prevAddressValue)\r\n this.addressSelector.enable();\r\n this.addressSelector.enableElement();\r\n });\r\n\r\n this.addressFormVisible = false;\r\n }\r\n\r\n onAddMethodClick() {\r\n // if (this.loading) return;\r\n this.methodsFormVisible = true;\r\n $('.js-update-billing-wrapper').addClass('hidden');\r\n this.$closeAddress = this.$el.find('[data-target=\"cancel\"]');\r\n this.$closeAddress.addClass('hidden');\r\n this.$el.find('[data-control=\"method\"]').find('.select-box__select').attr('disabled', true);\r\n this.$el.find('[data-region=\"useFormattedShippingAdress\"]').html(store.getters.formattedShippingAddress);\r\n }\r\n\r\n async onAddressUpdate(value) {\r\n this.prevAddressValue = this.selectedAddressValue;\r\n this.selectedAddressValue = value;\r\n\r\n if (!this.disableServiceUpdate) {\r\n this.loading = true;\r\n await this.selectAddress();\r\n this.loading = false;\r\n }\r\n }\r\n\r\n async onCheckoutFormUpdate(address) {\r\n if (!address) return;\r\n\r\n const addressPary = {\r\n ...address,\r\n IsPrimary: false,\r\n CountryCode: \"US\",\r\n Country: \"United States\",\r\n PhoneNumber: null\r\n };\r\n\r\n this.checkoutForm.hideError();\r\n\r\n this.checkoutForm.loading = true;\r\n\r\n await this.addAddress(addressPary);\r\n\r\n this.checkoutForm.loading = false;\r\n }\r\n\r\n onMethodUpdate(value) {\r\n this.selectedMethodValue = value;\r\n if (this.methods.length > 0 && this.$checkoutPaymentFF == \"true\") {\r\n const getAddressDetail = this.methods.find((address) => address.Id === value);\r\n if (getAddressDetail != undefined) {\r\n const billingAddressDetail = getAddressDetail.Address;\r\n const validAddress = (billingAddressDetail && billingAddressDetail.Address1 && billingAddressDetail.City &&\r\n billingAddressDetail.State && billingAddressDetail.ZipPostalCode && billingAddressDetail.FirstName\r\n );\r\n $('.js-update-billing-wrapper').remove();\r\n if (!validAddress) {\r\n $('[data-control=\"method\"]').find('.select-box').append(\r\n `<div class=\"select-box__card-status status-stamp bg-color-vca-salmon js-update-payment-tag\">Update</div>`\r\n )\r\n this.billingAddressForm = new BillingAddressForm({ selectId: this.selectedMethodValue });\r\n this.billingAddressForm.init();\r\n this.billingAddressForm.render();\r\n $('.checkout-selector').append(this.billingAddressForm.$el);\r\n $('.checkout-step').find('[data-control=\"review\"]').attr('disabled', true);\r\n this.billingAddressSetValue(billingAddressDetail);\r\n this.$reviewCtrl.addClass(CLASS_NAME_REVIEW_BUTTON_DISABLED).attr('aria-disabled', true);\r\n this.cancelUpdateForm = this.billingAddressForm.$el.find('.js-edit-cancel-update-payment');\r\n this.cancelUpdateForm.on('click', () => this.cancelUpdateform())\r\n } else {\r\n this.$reviewCtrl.removeClass(CLASS_NAME_REVIEW_BUTTON_DISABLED).removeAttr('aria-disabled');\r\n $('.js-update-payment-tag').remove();\r\n $('.js-update-billing-wrapper').remove();\r\n $('.checkout-step').find('[data-control=\"review\"]').removeAttr('disabled');\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @method billingAddressSetValue\r\n * @description to update the billing address form's value and highlight the red-colored fields that don't have a value\r\n */\r\n billingAddressSetValue(billingAddressDetail) {\r\n if (billingAddressDetail) {\r\n this.billingAddressForm.$el.find('[data-item=\"nameOnCard\"]').val(billingAddressDetail.FirstName);\r\n this.billingAddressForm.$el.find('[data-item=\"updateAddress\"]').val(billingAddressDetail.Address1);\r\n this.billingAddressForm.$el.find('[data-item=\"updateAddress1\"]').val(billingAddressDetail.Address2);\r\n this.billingAddressForm.$el.find('[data-item=\"updateCity\"]').val(billingAddressDetail.City);\r\n this.billingAddressForm.$el.find('[data-item=\"updateState\"]').val(billingAddressDetail.State);\r\n this.billingAddressForm.$el.find('[data-item=\"updateZip\"]').val(billingAddressDetail.ZipPostalCode);\r\n }\r\n this.billingAddressForm.$el.find('input, select').each((idx, el) => {\r\n if ($(el).hasClass('js-required')) {\r\n if ($(el).val() == '' || !billingAddressDetail) {\r\n $(el).addClass('error');\r\n $(el).closest('.form-label-group').addClass('error');\r\n this.billingAddressForm.$el.find('.js-update-payment-address-form').attr('disabled', true);\r\n } else {\r\n $(el).removeClass('error');\r\n $(el).closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n });\r\n }\r\n\r\n cancelUpdateform() {\r\n const getAddressDetail = this.methods.find((address) => address.Id === this.selectedMethodValue);\r\n if (getAddressDetail) {\r\n const billingAddressDetail = getAddressDetail.Address;\r\n this.billingAddressSetValue(billingAddressDetail);\r\n }\r\n }\r\n\r\n onReviewClick(evt) {\r\n evt.preventDefault();\r\n /* if (!this.loading && this.selectedMethodValue && this.selectedAddressInfo) {\r\n return;\r\n } */\r\n\r\n let reviewUrl = evt.currentTarget.getAttribute('href');\r\n\r\n if (!this.selectedMethodValue) {\r\n this.methodSelector.setInvalid();\r\n this.methodSelector.focus();\r\n } else if (!this.selectedAddressValue) {\r\n this.$error.show().html(`Shipping address wasn't saved in the previous step. \"Same as Shipping\" can't be selected for your billing address.`);\r\n } else {\r\n this.postReivewBillinginformation(reviewUrl);\r\n }\r\n }\r\n\r\n\r\n\r\n parseAddressText(address) {\r\n let text = address.Address1;\r\n\r\n if (address.Address2) {\r\n text += ` ${address.Address2}`;\r\n }\r\n\r\n text += ` ${address.City}, ${address.StateCode} ${address.ZipPostalCode}`;\r\n\r\n return text;\r\n }\r\n\r\n parseMethodText(method) {\r\n const postfix = method.LastDigits;\r\n const text = `${method.CardName} ****${postfix}`;\r\n return text;\r\n }\r\n\r\n renderLabels() {\r\n this.$addLabel.html(this.context.AddNew);\r\n this.$addressLabel.html(this.context.BillingAddress);\r\n this.$methodLabel.html(this.context.PaymentMethod);\r\n this.$reviewLabel.html(this.context.ReviewOrder);\r\n\r\n if (this.context.PromotionNoteIcon && this.context.PromotionNote) {\r\n let pnote = `<img alt=\"promo icon\" src=\"${this.context.PromotionNoteIcon}\" /><div>${this.context.PromotionNote}</div>`;\r\n this.$promotionsnote.html(pnote);\r\n this.$promotionsnote.addClass(\"mt-3\");\r\n } else {\r\n this.$promotionsnote.hide();\r\n }\r\n }\r\n\r\n renderAddPaymentForm() {\r\n this.addPaymentForm = new CheckoutPaymentForm(this.$paymentFormPlaceholder, this.context, {\r\n classList: this.addPaymentFormClassList,\r\n onCancelBillHandler: () => this.methodsFormVisible = false,\r\n setupMethods: (data, isAddedPayment, paymentId) => this.setupMethods(data, isAddedPayment, paymentId),\r\n replaceOriginEl: true\r\n });\r\n\r\n this.addPaymentForm.render();\r\n }\r\n\r\n renderReviewLink() {\r\n if (this.$reviewCtrl.is('a')) {\r\n this.$reviewCtrl.attr('href', this.context.NextStepUrl);\r\n }\r\n }\r\n\r\n renderLoaders() {\r\n this.addressLoader = new AjaxLoader(this.$addressLoaderPlaceholder, {\r\n ...DEFAULT_LOADER_OPTIONS,\r\n srText: this.context.LoadingAddresses\r\n });\r\n\r\n this.methodLoader = new AjaxLoader(this.$methodLoaderPlaceholder, {\r\n ...DEFAULT_LOADER_OPTIONS,\r\n srText: this.context.LoadingMethods\r\n });\r\n\r\n this.loader = new AjaxLoader(this.$loaderPlaceholder, {\r\n aria: false,\r\n size: 'xs'\r\n });\r\n\r\n this.loader.render();\r\n }\r\n\r\n renderSelectors() {\r\n this.addressSelector = new SelectBox(this.$addressPlaceholder, {\r\n id: this.addressId\r\n });\r\n this.addressSelector.disable();\r\n this.addressSelector.render();\r\n\r\n this.methodSelector = new SelectBox(this.$methodPlaceholder, {\r\n id: this.methodId\r\n });\r\n this.methodSelector.disable();\r\n this.methodSelector.render();\r\n }\r\n\r\n setInitialAddress() {\r\n if (this.addressOptions.find(({ value }) => value === store.getters.billingPartyId)) {\r\n this.addressSelector.setValue(store.getters.billingPartyId);\r\n return;\r\n }\r\n\r\n if (this.addressOptions.length > 0) {\r\n this.addressSelector.setValue(this.addressOptions[0].value);\r\n } else {\r\n // this.$edit.hide();\r\n // this.onAddAddressClick();\r\n }\r\n }\r\n\r\n setInitialMethod() {\r\n\r\n if (this.methodOptions.find(({ value }) => value === store.getters.paymentMethodId)) {\r\n this.methodSelector.setValue(store.getters.paymentMethodId);\r\n }\r\n }\r\n\r\n setupAccessibleCollapse() {\r\n const addressFormId = `addressForm_${this.id}`;\r\n this.$addressForm.attr('id', addressFormId);\r\n this.$addAddressCtrl.attr({ 'aria-expanded': false, 'aria-controls': addressFormId });\r\n\r\n const methodFormId = `methodForm_${this.id}`;\r\n // this.$methodForm.attr('id', methodFormId);\r\n // this.$addMethodCtrl.attr({ 'aria-expanded': false, 'aria-controls': methodFormId });\r\n }\r\n\r\n setupAccessibleIds() {\r\n const addressLabelId = `${this.addressId}_label`;\r\n const methodLabelId = `${this.methodId}_label`;\r\n\r\n this.$address.attr({ 'for': this.addressId, 'id': addressLabelId });\r\n this.$method.attr({ 'for': this.methodId, 'id': methodLabelId });\r\n\r\n this.$controls.attr('aria-labelledby', addressLabelId);\r\n }\r\n\r\n setupAccessibility() {\r\n this.setupAccessibleIds();\r\n this.setupAccessibleCollapse();\r\n\r\n this.$el.attr('aria-live', 'polite');\r\n }\r\n\r\n mapAddressOptions(addresses = []) {\r\n this.addresses = addresses;\r\n let shippingAddressIDCheck = this.shippingAddressId\r\n if (this.$isSubscriptionsPage) {\r\n shippingAddressIDCheck = 0;\r\n }\r\n\r\n const sameAsOption = { text: this.context.SameAsShipping, value: this.shippingAddressId };\r\n const addressOptions =\r\n addresses\r\n .filter((address) => address !== null && address !== undefined && address.AddressName !== shippingAddressIDCheck)\r\n .map((address, index) => {\r\n const text = this.parseAddressText(address);\r\n return {\r\n text,\r\n value: address.AddressName\r\n };\r\n });\r\n\r\n if (this.$isSubscriptionsPage) {\r\n this.addressOptions = [\r\n ...addressOptions\r\n ];\r\n } else {\r\n this.addressOptions = [\r\n sameAsOption,\r\n ...addressOptions\r\n ];\r\n }\r\n }\r\n\r\n setupListeners() {\r\n this.$addAddressCtrl.on('click', () => this.onAddAddressClick());\r\n this.$addMethodCtrl.on('click', () => this.onAddMethodClick());\r\n this.$methodCancelCtrl.on('click', () => {\r\n this.methodsFormVisible = false;\r\n $('.js-update-billing-wrapper').removeClass('hidden');\r\n this.$el.find('[data-control=\"method\"]').find('.select-box__select').removeAttr('disabled').removeClass('disabled');\r\n this.clearAddNewPaymentDetails();\r\n });\r\n this.$reviewCtrl.on('click', (evt) => this.onReviewClick(evt));\r\n this.$checkboxShippingAddress.on('change', (evt) => this.checkboxShippingAddress(evt));\r\n this.$closeToasterMsg.on('click', () => $('.js-checkout-toaster-visible').addClass('hidden'));\r\n\r\n this.addressSelector.watchValue((value) => this.onAddressUpdate(value));\r\n this.methodSelector.watchValue((value) => this.onMethodUpdate(value));\r\n\r\n }\r\n\r\n updateSummary(data) {\r\n store.mutations.SET_FREE_SHIPPING_TEXT(data.FreeShippingText);\r\n store.mutations.SET_PROMO_CODE(data.PromotionCode);\r\n\r\n store.actions.setFormattedCartSummary({\r\n miniCartTotal: data?.FormattedTotal?.FormattedMiniCartTotal,\r\n discount: data?.FormattedTotal?.FormattedDiscount,\r\n shippingTotal: data?.FormattedTotal?.FormattedShipping,\r\n subtotal: data?.FormattedTotal?.FormattedSubtotal,\r\n taxTotal: data?.FormattedTotal?.FormattedTax,\r\n total: data?.FormattedTotal?.FormattedGrandTotal\r\n });\r\n\r\n store.mutations.SET_LOADING(false);\r\n store.mutations.SET_LOADED(true);\r\n }\r\n\r\n updateUiOnly(callback) {\r\n if (!isFn(callback)) return;\r\n\r\n this.disableServiceUpdate = true;\r\n callback();\r\n this.disableServiceUpdate = false;\r\n }\r\n\r\n parseTemplate(templateStr = template) {\r\n const parsed = $.parseHTML(templateStr);\r\n return $(parsed);\r\n }\r\n\r\n static extendTemplate(templateStr) {\r\n class CheckoutBillingExtended extends this { };\r\n CheckoutBillingExtended.prototype.parseTemplate = CheckoutBilling.prototype.parseTemplate.bind(CheckoutBillingExtended, templateStr);\r\n return CheckoutBillingExtended;\r\n }\r\n\r\n\r\n setEvents() {\r\n /* \r\n this.$closeAddress.on('click', () => {\r\n \r\n let form = $('#addPaymentContainer .checkout-address-form');\r\n form.hide();\r\n \r\n }); */\r\n }\r\n\r\n render() {\r\n if (this.$originEl) {\r\n if (this.replaceOriginEl) {\r\n this.$originEl.replaceWith(this.$el);\r\n } else {\r\n this.$originEl.html(this.$el);\r\n }\r\n }\r\n\r\n // this.setupBlufin();\r\n\r\n return this.$el;\r\n }\r\n\r\n renderCheckoutForm() {\r\n const defaultSchema = { ...addressFormDefaults.schema }\r\n const schema = {\r\n cardHolderName: {\r\n ...defaultSchema.cardHolderName,\r\n label: this.context.CardHolderName,\r\n name: 'CardHolderName',\r\n },\r\n firstName: {\r\n ...defaultSchema.firstName,\r\n label: this.context.FirstName,\r\n name: 'FirstName'\r\n },\r\n lastName: {\r\n ...defaultSchema.lastName,\r\n label: this.context.LastName,\r\n name: 'LastName'\r\n },\r\n address: {\r\n ...defaultSchema.address,\r\n label: this.context.Address,\r\n name: 'Address1'\r\n },\r\n address2: {\r\n ...defaultSchema.address2,\r\n label: this.context.Address2,\r\n name: 'Address2'\r\n },\r\n city: {\r\n ...defaultSchema.city,\r\n label: this.context.City,\r\n name: 'City'\r\n },\r\n state: {\r\n ...defaultSchema.state,\r\n label: this.context.State,\r\n name: 'StateCode'\r\n },\r\n zip: {\r\n ...defaultSchema.zip,\r\n label: this.context.Zip,\r\n name: 'ZipPostalCode'\r\n }\r\n };\r\n\r\n const options = {\r\n onCancelHandler: () => this.onAddressFormCancel(),\r\n onCancelBillHandler: () => this.onAddressFormCancel(),\r\n replaceOriginEl: true,\r\n schema\r\n };\r\n\r\n const context = {\r\n cancel: this.context.Cancel,\r\n heading: this.context.BillingAddressTitle,\r\n requiredToken: this.context.RequiredToken,\r\n submit: this.context.ApplyUpdates,\r\n validation: this.context.ValidationMessage\r\n };\r\n\r\n\r\n this.checkoutForm = new CheckoutAddressForm(this.$addressFormPlaceholder, options, context);\r\n this.checkoutForm.init();\r\n this.checkoutForm.render();\r\n this.$addressForm.find('[data-label=\"heading\"]').remove();\r\n this.$addressForm.find('[data-control=\"select\"]').addClass('rounded-0');\r\n }\r\n\r\n renderAcceptedCards() {\r\n const {\r\n AmexIcon: amex,\r\n DiscoverIcon: discover,\r\n MastercardIcon: mastercard,\r\n VisaIcon: visa\r\n } = this.context;\r\n\r\n if (!amex.Url && !discover.Url && !mastercard.Url && !visa.Url) {\r\n this.$ccList.hide();\r\n return;\r\n }\r\n\r\n const img = document.createElement('img');\r\n\r\n [\r\n [this.$amex, amex],\r\n [this.$discover, discover],\r\n [this.$mastercard, mastercard],\r\n [this.$visa, visa]\r\n ].forEach(([$el, card]) => {\r\n if (card.Url) {\r\n const icon = img.cloneNode(false);\r\n icon.alt = card.Alt;\r\n icon.src = card.Url;\r\n $el.html(icon);\r\n } else {\r\n $el.hide();\r\n }\r\n });\r\n }\r\n\r\n displayLegalDisclaimer() {\r\n let displayRxRequired = false;\r\n\r\n store.getters.lines.forEach(line => {\r\n if (line.rxRequired) displayRxRequired = true;\r\n });\r\n\r\n displayRxRequired ? this.$prescription.show() : this.$prescription.hide();;\r\n }\r\n\r\n\r\n setAddressId(addressId) {\r\n this.form.options.addressId = addressId;\r\n }\r\n\r\n /* setupBlufin() {\r\n this.form = new AddPayment({\r\n containerId: '#addPaymentContainer',\r\n paymentFrameContainerId: 'paymentFrameContainer',\r\n paymentLoaderId: '#paymentLoader',\r\n savePaymentId: '#savePayment',\r\n savePaymentErrorId: '#addPaymentFailure',\r\n settingsId: '#paymentSettings',\r\n //setupMethods: (data) => this.form.setupMethods(data),\r\n updateAutoshipCheckboxId: '#active-subscriptions',\r\n urlPath: apiUrl\r\n });\r\n window.form = this.form;\r\n } */\r\n\r\n /**\r\n * @method disabledAddNewSavePayment\r\n * @description to use keyup function for input and select element for enable the save payment CTA\r\n */\r\n disabledAddNewSavePayment() {\r\n $('.js-address-validation-form').find('input, select').each((idx, el) => {\r\n $(el).on('change keyup', () => {\r\n this.checkBillingAddressValidity($(el));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * @method checkBillingAddressValidity\r\n * @description to enter the all required field and then enable the save payment CTA\r\n */\r\n checkBillingAddressValidity(el) {\r\n let zipReg = /^\\d{5}$/;\r\n let zipValue = $('#addPaymentContainer').find('[data-control=\"zip\"]').val();\r\n if (el.attr(\"name\") != 'use-shipping-address') {\r\n el.parent().addClass('was-validated');\r\n }\r\n const validBillingAddress = (!this.addressFormVisible && $('#addPaymentContainer').find('[data-control=\"cardHolderName\"]').val() != '') ||\r\n ($('#addPaymentContainer').find('[data-control=\"cardHolderName\"]').val() != '' &&\r\n $('#addPaymentContainer').find('[data-control=\"address\"]').val() != '' &&\r\n $('#addPaymentContainer').find('[data-control=\"city\"]').val() != '' &&\r\n $('#addPaymentContainer').find('[data-control=\"select\"]').val() != '' &&\r\n $('#addPaymentContainer').find('[data-control=\"select\"]').val() &&\r\n zipValue !== '' && zipReg.test(zipValue));\r\n if ((el.val() == '' || el.val() == null || (el.attr(\"name\") == 'updateZip' && !zipReg.test(zipValue))) && el.hasClass('js-required')) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n if (validBillingAddress) {\r\n $('#savePayment').removeAttr('disabled').removeClass('disabled')\r\n } else {\r\n $('#savePayment').attr('disabled', true).addClass('disabled');\r\n }\r\n }\r\n\r\n setupCancel() {\r\n this.$cancel.on('click', () => this.onAddressFormCancel())\r\n if (this.onCancelBillHandler) {\r\n // this.$cancel.on('click', () => this.onAddressFormCancel()),;\r\n } else {\r\n this.$cancel.hide();\r\n }\r\n }\r\n\r\n setupClassList() {\r\n this.$el.addClass(this.classList);\r\n }\r\n\r\n updateUiOnly(callback) {\r\n if (!isFn(callback)) return;\r\n\r\n this.disableServiceUpdate = true;\r\n callback();\r\n this.disableServiceUpdate = false;\r\n }\r\n\r\n /**\r\n * @method checkboxShippingAddress\r\n * @description to check/uncheck the checkbox on same as shipping address, If I unchecked the checkbox, billing address\r\n */\r\n checkboxShippingAddress(event) {\r\n if (event.target.checked) {\r\n this.onAddressFormCancel();\r\n this.$useBillingAddressText.removeClass('hidden');\r\n } else {\r\n this.addressFormVisible = true;\r\n this.$useBillingAddressText.addClass('hidden');\r\n }\r\n console.log('AddressId', this.selectedAddressValue)\r\n }\r\n\r\n /**\r\n * @method updateBillingAddressPayment\r\n * @description to click the update payment CTA in upadate payment form after hit the success call and the value to be updated on billing address\r\n */\r\n updateBillingAddressPayment() {\r\n window.addEventListener('successUpdatePayment', (evt) => {\r\n if (evt?.detail?.result) {\r\n $('.js-update-billing-wrapper').find('[data-region=\"errorUpdatePayment\"]').remove();\r\n this.methods.map((address) => {\r\n if (address.Id === this.selectedMethodValue) {\r\n const updateBillingAddressForm = this.billingAddressForm.$el;\r\n if (!address.Address) {\r\n address.Address = {};\r\n }\r\n address.Address.FirstName = updateBillingAddressForm.find('[data-item=\"nameOnCard\"]').val();\r\n address.Address.Address1 = updateBillingAddressForm.find('[data-item=\"updateAddress\"]').val();\r\n address.Address.Address2 = updateBillingAddressForm.find('[data-item=\"updateAddress1\"]').val();\r\n address.Address.City = updateBillingAddressForm.find('[data-item=\"updateCity\"]').val();\r\n address.Address.State = updateBillingAddressForm.find('[data-item=\"updateState\"]').val();\r\n address.Address.ZipPostalCode = updateBillingAddressForm.find('[data-item=\"updateZip\"]').val();\r\n $('.js-update-payment-tag').remove();\r\n $('.js-update-billing-wrapper').remove();\r\n $('.checkout-step').find('[data-control=\"review\"]').removeAttr('disabled');\r\n $('.js-checkout-toaster-visible').removeClass('hidden');\r\n $('.js-checkout-toaster-visible').find('[data-region=\"addPaymentToasterMsg\"]').html('Your payment method has been updated');\r\n this.$reviewCtrl.removeClass(CLASS_NAME_REVIEW_BUTTON_DISABLED).removeAttr('aria-disabled');\r\n }\r\n });\r\n } else {\r\n $('.js-update-billing-wrapper').find('[data-region=\"errorUpdatePayment\"]').remove();\r\n $('.js-update-billing-wrapper').find('.js-update-payment-buttons').prepend(\r\n `<span class=\"text-color-vca-red\" data-region=\"errorUpdatePayment\" style=\"display: block; text-align: center;\">${evt?.detail?.Error}</span>`\r\n )\r\n }\r\n window.removeEventListener('successAddPayment', this.updateBillingAddressPayment);\r\n });\r\n }\r\n\r\n /**\r\n * @method clearAddNewPaymentDetails\r\n * @description to clear the add new payment credit card iframe input and billing address\r\n */\r\n clearAddNewPaymentDetails() {\r\n $('.js-address-validation-form').find('input, select').each((idx, el) => {\r\n $(el).val('');\r\n $(el).parent().removeClass('was-validated');\r\n });\r\n this.$el.find('#useShippingAddress').prop('checked', true);\r\n this.$el.find('#active-subscriptions').prop('checked', false);\r\n this.addressFormVisible = false;\r\n this.$useBillingAddressText.removeClass('hidden');\r\n $('#addPaymentFailure').hide();\r\n const iframe = document.getElementById('paymentFrame');\r\n iframe.remove();\r\n this.addPaymentForm.setupBlufin()\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-checkout-billing');\r\n\r\n if (rootEls.length) {\r\n store.actions.getCart();\r\n }\r\n\r\n rootEls?.forEach((el) => {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n const billing = new CheckoutBilling($el, renderingContext);\r\n billing.init();\r\n\r\n const unwatchLoaded = store.watch('loaded', (...[, , loaded]) => {\r\n if (loaded) {\r\n billing.onCartLoaded();\r\n unwatchLoaded();\r\n }\r\n });\r\n });\r\n});\r\n","const context = {\r\n AddBillingAddress: \"Add Billing Address\",\r\n BillingAddressTitle: \"Billing Address\",\r\n AddNew: 'Add New',\r\n AddPaymentMethod: 'Add Payment Method',\r\n AddShippingAddress: 'Add Shipping Address',\r\n Address: 'Address',\r\n Applied: 'Applied',\r\n Apply: 'Apply',\r\n ApplyUpdates: 'Apply Updates',\r\n BillingAddress: \"Billing Address\",\r\n Cancel: 'Cancel',\r\n CardHolderInformation: 'Card Holder Information',\r\n CardHolderInfo: \"Card Holder Information\",\r\n CardHolderInputLabel: \"Name on Card\",\r\n CardHolderInputError: \"Name on Card is required\",\r\n ContinueShoppingLink: {\r\n Text: \"Continue Shopping\",\r\n Url: \"/shop\"\r\n },\r\n City: 'City',\r\n Discounts: 'Discounts',\r\n EditExistingAddress: 'Edit Existing Address',\r\n EditShippingAddress: 'Edit Shipping Address',\r\n Edit: \"Edit\",\r\n Free: 'Free',\r\n Items: \"Items\",\r\n LoadingAddresses: \"Shipping Addresses Loading...\",\r\n LoadingMethods: \"Shipping Methods Loading...\",\r\n LoadingSummary: '{0} Loading...',\r\n Next: 'Next',\r\n NewAddress: 'New Address',\r\n OrderSummary: \"Order Summary\",\r\n PaymentMethod: \"Payment Method\",\r\n PlaceOrder: 'PlaceOrder',\r\n PromoApplied: 'Promo Applied',\r\n PromoCode: 'Promo Code',\r\n PromoCodeRequired: 'A promo code is required',\r\n PromoCodeInvalid: 'Invalid promo code',\r\n RemovePromoSrText: 'Remove Promo Code',\r\n RequiredToken: '*',\r\n ReviewOrder: \"Review Order\",\r\n SameAsShipping: \"Same as Shipping\",\r\n SavePayment: 'Save Payment',\r\n Select: 'Select',\r\n Shipping: 'Estimated Shipping',\r\n ShippingAddress: 'Shipping Address',\r\n ShippingMethod: 'Shipping Method',\r\n State: 'State',\r\n Subtotal: 'Subtotal',\r\n Tax: 'Estimated Tax',\r\n Total: 'Estimated Total',\r\n UpsellMessage: \"Your are only {0} away from free shipping!\",\r\n ValidationMessage: \"{0} is required\",\r\n Zip: 'Zip',\r\n AmexIcon: {\r\n Alt: 'American Express Card'\r\n },\r\n DiscoverIcon: {\r\n Alt: 'Discover Card'\r\n },\r\n MastercardIcon: {\r\n Alt: 'Mastercard Card'\r\n },\r\n VisaIcon: {\r\n Alt: 'Visa Card'\r\n },\r\n UseShippingAddress: 'Same as shipping address'\r\n}\r\n\r\nexport {\r\n context\r\n};\r\n","import template from './checkout-line.html';\r\n\r\nexport default template;\r\n","import CartLine from '../cart-landing/cart-line';\r\nimport template from './templates/checkout-line';\r\nimport { context as defaultContext } from './checkout-defaults';\r\n \r\nexport default class CheckoutLine extends CartLine.extendTemplate(template) {\r\n constructor($originEl, context, data, options) {\r\n context = { ...defaultContext, ...context };\r\n\r\n super($originEl, context, data, options);\r\n\r\n this.$autoship = this.$el.find('[data-region=\"autoship\"]');\r\n this.$frequency = this.$el.find('[data-region=\"frequency\"]');\r\n\r\n this.autoshipFrequency = data.autoshipFrequency;\r\n\r\n this.renderAutoshipDetails();\r\n }\r\n\r\n renderAutoshipDetails() {\r\n const options = this.context.AutoshipOptions;\r\n if(options) {\r\n const maxValue = Math.max(\r\n ...options.map(({ AutoshipFrequency }) => {\r\n const frequency = Number(AutoshipFrequency);\r\n return !isNaN(frequency) ? frequency : 0;\r\n })\r\n );\r\n\r\n const autoshipValue = this.autoshipFrequency > maxValue ? maxValue.toString() : this.autoshipFrequency.toString();\r\n const { AutoshipName: autoshipTxt } = options.find(option => option.AutoshipFrequency === autoshipValue) || {};\r\n\r\n if(autoshipTxt) {\r\n this.$autoship.html(autoshipTxt);\r\n } else {\r\n this.$autoship.hide();\r\n }\r\n }\r\n\r\n const frequencyOptions = this.context.FrequencyOptions;\r\n if(frequencyOptions) {\r\n const frequencyValue = this.autoshipFrequency.toString();\r\n const { FrequencyName: frequencyTxt } = frequencyOptions.find(option => option.FrequencyValue === frequencyValue) || {};\r\n\r\n if(frequencyTxt && this.autoshipFrequency > 0) {\r\n this.$frequency.html(frequencyTxt);\r\n } else {\r\n this.$frequency.hide();\r\n }\r\n }\r\n }\r\n}\r\n","import isFn from '@utils/is-function';\r\nimport AddPayment from '../add-payment';\r\nimport template from './templates/checkout-payment-form';\r\nimport { context as defaultContext } from './checkout-defaults';\r\nimport { url as apiUrl } from '@api/routes/account/addpaymentmethod';\r\n\r\n/**\r\n * @typedef {Object} DefaultOptions\r\n * @property {Function?} onCancelHandler\r\n * @property {boolean} replaceOriginEl\r\n */\r\n\r\n/** @type {DefaultOptions} */\r\nconst DEFAULT_OPTIONS = {\r\n classList: '',\r\n onCancelHandler: null,\r\n setupMethods: null,\r\n replaceOriginEl: false\r\n};\r\n\r\nexport default class CheckoutPaymentForm {\r\n constructor($originEl, context, options) {\r\n context = { ...defaultContext, ...context };\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n\r\n const $parsed = $($.parseHTML(template));\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n this.$cancelLabel = this.$el.find('[data-label=\"cancel\"]');\r\n this.$headingLabel = this.$el.find('[data-label=\"heading\"]');\r\n this.$subscriptionsLabel = this.$el.find('[data-label=\"subscriptions\"]');\r\n this.$submitLabel = this.$el.find('[data-label=\"submit\"]');\r\n\r\n this.$amex = this.$el.find('[data-region=\"amex\"]');\r\n this.$ccList = this.$el.find('[data-region=\"ccList\"]');\r\n this.$discover = this.$el.find('[data-region=\"discover\"]');\r\n this.$mastercard = this.$el.find('[data-region=\"mastercard\"]');\r\n this.$visa = this.$el.find('[data-region=\"visa\"]');\r\n\r\n this.$cancel = this.$el.find('[data-control=\"cancel\"]');\r\n\r\n this.form = null;\r\n\r\n this.classList = options.classList;\r\n this.onCancelHandler = isFn(options.onCancelHandler) || null;\r\n this.setupMethods = isFn(options.setupMethods) || null;\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n\r\n this.context = context;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderAcceptedCards();\r\n this.setupCancel();\r\n this.setupClassList();\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n if(this.replaceOriginEl) {\r\n this.$originEl.replaceWith(this.$el);\r\n } else {\r\n this.$originEl.html(this.$el);\r\n }\r\n }\r\n\r\n this.setupBlufin();\r\n\r\n return this.$el;\r\n }\r\n\r\n renderAcceptedCards() {\r\n const {\r\n AmexIcon: amex,\r\n DiscoverIcon: discover,\r\n MastercardIcon: mastercard,\r\n VisaIcon: visa\r\n } = this.context;\r\n\r\n if(!amex.Url && !discover.Url && !mastercard.Url && !visa.Url) {\r\n this.$ccList.hide();\r\n return;\r\n }\r\n\r\n const img = document.createElement('img');\r\n\r\n [\r\n [ this.$amex, amex ],\r\n [ this.$discover, discover ],\r\n [ this.$mastercard, mastercard ],\r\n [ this.$visa, visa ]\r\n ].forEach(([ $el, card ]) => {\r\n if(card.Url) {\r\n const icon = img.cloneNode(false);\r\n icon.alt = card.Alt;\r\n icon.src = card.Url;\r\n $el.html(icon);\r\n } else {\r\n $el.hide();\r\n }\r\n });\r\n }\r\n\r\n renderLabels() {\r\n this.$cancelLabel.html(this.context.Cancel);\r\n this.$headingLabel.html(this.context.AddPaymentMethod);\r\n this.$subscriptionsLabel.html(this.context.ActiveSubscriptions);\r\n this.$submitLabel.html(this.context.SavePayment);\r\n }\r\n\r\n setAddressId(addressId) {\r\n this.form.options.addressId = addressId;\r\n }\r\n\r\n setupBlufin() {\r\n //console.log('form 2', this)\r\n this.form = new AddPayment({\r\n containerId: '#addPaymentContainer',\r\n paymentFrameContainerId: 'paymentFrameContainer',\r\n paymentLoaderId: '#paymentLoader',\r\n savePaymentId: '#savePayment',\r\n savePaymentErrorId: '#addPaymentFailure',\r\n settingsId: '#paymentSettings',\r\n setupMethods: this.setupMethods,\r\n updateAutoshipCheckboxId: '#active-subscriptions',\r\n urlPath: apiUrl\r\n });\r\n //console.log('form 2', this.form)\r\n window.form = this.form;\r\n }\r\n\r\n setupCancel() {\r\n if(this.onCancelHandler) {\r\n this.$cancel.on('click', () => this.onCancelHandler());\r\n } else {\r\n this.$cancel.hide();\r\n }\r\n }\r\n\r\n setupClassList() {\r\n this.$el.addClass(this.classList);\r\n }\r\n}\r\n","import CheckoutAppliedPromo from './checkout-applied-promo';\r\nimport template from './templates/checkout-promo';\r\nimport { context as defaultContext } from './checkout-defaults';\r\nimport store from '@stores/cart/cart-store';\r\n\r\nconst CLASS_NAME_FORM_VALIDATED = 'was-validated';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n replaceOriginEl: false\r\n};\r\n\r\nexport default class CheckoutPromo {\r\n constructor($originEl, context, options) {\r\n context = { ...defaultContext, ...context };\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n\r\n const $parsed = $( $.parseHTML(template) );\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n this.$applyLabel = this.$el.find('[data-label=\"apply\"]');\r\n this.$codeLabel = this.$el.find('[data-label=\"code\"]');\r\n\r\n this.$error = this.$el.find('[data-region=\"error\"]');\r\n\r\n this.$apply = this.$el.find('[data-control=\"apply\"]');\r\n this.$form = this.$el.find('[data-control=\"form\"]');\r\n this.$input = this.$el.find('[data-control=\"input\"]');\r\n\r\n this.$appliedPromo = this.$el.find('[data-region=\"appliedPromo\"]');\r\n\r\n this.appliedPromo = null;\r\n\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n\r\n this.context = context;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderAppliedPromo();\r\n this.renderCode();\r\n this.setupListeners();\r\n }\r\n\r\n async onSubmit(evt) {\r\n evt.preventDefault();\r\n \r\n this.validationReset();\r\n\r\n const form = this.$form.get(0);\r\n\r\n if(form.checkValidity()) {\r\n const { success, data, error } = await store.actions.applyPromo(this.$input.val());\r\n\r\n if(!success && error) {\r\n this.$error.show().html(error);\r\n } else if(!data?.Valid) {\r\n this.$error.show().html(this.context.PromoCodeInvalid);\r\n }\r\n } else {\r\n this.validate();\r\n }\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n this.replaceOriginEl ? this.$originEl.replaceWith(this.$el) : this.$originEl.html(this.$el);\r\n }\r\n\r\n return this.$el;\r\n }\r\n \r\n renderAppliedPromo() {\r\n const context = {\r\n applied: this.context.PromoApplied,\r\n remove: this.context.RemovePromoSrText\r\n };\r\n\r\n this.appliedPromo = new CheckoutAppliedPromo(this.$appliedPromo, context, {\r\n bordered: true\r\n });\r\n\r\n this.appliedPromo.render();\r\n }\r\n\r\n renderCode() {\r\n this.$code\r\n }\r\n\r\n renderLabels() {\r\n this.$applyLabel.html(this.context.Apply);\r\n this.$codeLabel.html(this.context.PromoCode);\r\n this.$input.attr('placeholder', this.context.PromoCode);\r\n }\r\n\r\n setupListeners() {\r\n this.$form.on('submit', (evt) => this.onSubmit(evt));\r\n\r\n store.watch('promoCode', () => this.updateCode());\r\n }\r\n\r\n updateCode() {\r\n if(store.state.promoCode) {\r\n this.$appliedPromo.show();\r\n } else {\r\n this.$appliedPromo.hide();\r\n }\r\n }\r\n\r\n validate() {\r\n this.$form.addClass(CLASS_NAME_FORM_VALIDATED);\r\n this.$error.show().html(this.context.PromoCodeRequired);\r\n\r\n this.$input\r\n .attr('aria-invalid', true)\r\n .on('input', () => {\r\n const invalid = this.$input.is(':invalid');\r\n this.$input.attr('aria-invalid', invalid);\r\n });\r\n\r\n this.$input.get(0).focus();\r\n }\r\n\r\n validationReset() {\r\n this.$form.removeClass(CLASS_NAME_FORM_VALIDATED);\r\n this.$error.hide();\r\n }\r\n};\r\n","import template from './checkout-review-summary.html';\r\n\r\nexport default template;\r\n","import CheckoutSummaryPromos from './checkout-summary-promos';\r\nimport template from './templates/checkout-review-summary';\r\nimport { context as defaultContext } from './checkout-defaults';\r\n\r\nexport default class CheckoutReviewSummary extends CheckoutSummaryPromos.extendTemplate(template) {\r\n constructor($originEl, context) {\r\n context = { ...defaultContext, ...context };\r\n\r\n super($originEl, context);\r\n\r\n this.aria = false;\r\n }\r\n\r\n init() {\r\n super.init();\r\n\r\n this.renderLabelOverrides();\r\n }\r\n\r\n renderLabelOverrides() {\r\n this.$checkoutLabel.html(this.context.PlaceOrder);\r\n }\r\n}\r\n","import parseRenderingContext from '@utils/parse-rendering-context';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport CheckoutLine from './checkout-line';\r\nimport CheckoutReviewSummary from './checkout-review-summary';\r\nimport template, { link as linkHtmlStr } from './templates/checkout-review';\r\nimport { context as defaultContext } from './checkout-defaults';\r\nimport store from '@stores/cart/cart-store';\r\n\r\nexport default class CheckoutReview {\r\n constructor($originalEl, context) {\r\n context = { ...defaultContext, ...context };\r\n\r\n const $parsed = $($.parseHTML(template));\r\n $originalEl.replaceWith($parsed);\r\n this.$el = $parsed;\r\n\r\n this.$billingAddressLabel = this.$el.find('[data-label=\"billingAddress\"]');\r\n this.$editCartLabel = this.$el.find('[data-label=\"editCart\"]');\r\n this.$itemsLabel = this.$el.find('[data-label=\"items\"]');\r\n this.$paymentMethodLabel = this.$el.find('[data-label=\"paymentMethod\"]');\r\n this.$shippingAddressLabel = this.$el.find('[data-label=\"shippingAddress\"]');\r\n this.$shippingMethodLabel = this.$el.find('[data-label=\"shippingMethod\"]');\r\n\r\n this.$billingAddress = this.$el.find('[data-region=\"billingAddress\"]');\r\n this.$lines = this.$el.find('[data-region=\"lines\"]');\r\n this.$paymentMethod = this.$el.find('[data-region=\"paymentMethod\"]');\r\n this.$shippingAddress = this.$el.find('[data-region=\"shippingAddress\"]');\r\n this.$shippingMethod = this.$el.find('[data-region=\"shippingMethod\"]');\r\n\r\n this.$linesLoader = this.$el.find('[data-loader=\"lines\"]');\r\n this.$loaders = this.$el.find('[data-loader=\"loader\"]');\r\n this.$prescription = $('.cart-landing__rx[data-region=\"prescription\"]');\r\n\r\n this.$billingAddressPlaceholder = this.$el.find('[data-placeholder=\"editBillingAddress\"]');\r\n this.$editCartPlaceholder = this.$el.find('[data-placeholder=\"editCart\"]');\r\n this.$paymentMethodPlaceholder = this.$el.find('[data-placeholder=\"editPaymentMethod\"]');\r\n this.$shippingAddressPlaceholder = this.$el.find('[data-placeholder=\"editShippingAddress\"]');\r\n this.$shippingMethodPlaceholder = this.$el.find('[data-placeholder=\"editShippingMethod\"]');\r\n this.$summaryPlaceholder = this.$el.find('[data-placeholder=\"summary\"]');\r\n\r\n this.linesLoader = null;\r\n this.loaders = [];\r\n\r\n this.summary = null;\r\n\r\n this.context = context;\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderLinks();\r\n this.setupLoaders();\r\n this.setupSummary();\r\n }\r\n\r\n onCartLoaded() {\r\n this.loaders.forEach(loader => (loader.active = false));\r\n this.summary.reactive.loading = false;\r\n this.renderCheckoutInfo();\r\n this.renderCartLines();\r\n }\r\n\r\n renderLabels() {\r\n this.$billingAddressLabel.html(this.context.BillingAddress);\r\n this.$editCartLabel.html(this.context.EditShoppingCart);\r\n this.$itemsLabel.html(this.context.Items);\r\n this.$paymentMethodLabel.html(this.context.PaymentMethod);\r\n this.$shippingAddressLabel.html(this.context.ShippingAddress);\r\n this.$shippingMethodLabel.html(this.context.ShippingMethod);\r\n }\r\n\r\n renderLinks() {\r\n /* if(this.context.EditBillingAddressLink) {\r\n const link = linkHtmlStr({\r\n text: this.context.EditBillingAddressLink.Text,\r\n url: this.context.EditBillingAddressLink.Url\r\n });\r\n this.$billingAddressPlaceholder.replaceWith(link);\r\n } */\r\n\r\n if(this.context.EditCartLink) {\r\n const link = linkHtmlStr({\r\n text: this.context.EditCartLink.Text,\r\n url: this.context.EditCartLink.Url\r\n });\r\n this.$editCartPlaceholder.replaceWith(link);\r\n }\r\n\r\n if(this.context.EditShippingAddressLink) {\r\n const link = linkHtmlStr({\r\n text: this.context.EditShippingAddressLink.Text,\r\n url: this.context.EditShippingAddressLink.Url\r\n });\r\n this.$shippingAddressPlaceholder.replaceWith(link);\r\n }\r\n\r\n if(this.context.EditPaymentMethodLink) {\r\n const link = linkHtmlStr({\r\n text: this.context.EditPaymentMethodLink.Text,\r\n url: this.context.EditPaymentMethodLink.Url\r\n });\r\n this.$paymentMethodPlaceholder.replaceWith(link);\r\n }\r\n\r\n if(this.context.EditShippingMethodLink) {\r\n const link = linkHtmlStr({\r\n text: this.context.EditShippingMethodLink.Text,\r\n url: this.context.EditShippingMethodLink.Url\r\n });\r\n this.$shippingMethodPlaceholder.replaceWith(link);\r\n }\r\n }\r\n\r\n renderCartLines() {\r\n this.$lines.empty();\r\n this.$lines.hide();\r\n let displayRxRequired = false;\r\n\r\n store.getters.lines.forEach(line => {\r\n const component = new CheckoutLine(null, this.context, line);\r\n this.$lines.append(component.$el);\r\n if (line.rxRequired) displayRxRequired = true;\r\n });\r\n\r\n displayRxRequired ? this.$prescription.show() : this.$prescription.hide();;\r\n \r\n this.$lines.slideDown();\r\n }\r\n\r\n renderCheckoutInfo() {\r\n const shippingAddress = store.getters.formattedShippingAddress;\r\n let billingAddress = store.getters.formattedBillingAddress;\r\n if(shippingAddress === billingAddress) {\r\n billingAddress = 'Same as Shipping';\r\n }\r\n\r\n this.$billingAddress.html(billingAddress || 'n/a'); \r\n this.$paymentMethod.html(store.getters.cardPreview || 'n/a');\r\n this.$shippingAddress.html(shippingAddress || 'n/a');\r\n this.$shippingMethod.html(store.state.shippingMethod?.ShippingMethodName || 'n/a');\r\n }\r\n\r\n setupLoaders() {\r\n this.$loaders.each((index) => {\r\n const $el = this.$loaders.eq(index);\r\n this.loaders.push(new AjaxLoader($el, {\r\n aria: false,\r\n className: 'd-flex align-items-center h-100',\r\n size: 'xs',\r\n visible: true\r\n }));\r\n });\r\n\r\n this.linesLoader = new AjaxLoader(this.$linesLoader, {\r\n aria: false,\r\n size: 'sm',\r\n visible: true\r\n });\r\n }\r\n\r\n setupSummary() {\r\n this.summary = new CheckoutReviewSummary(this.$summaryPlaceholder, this.context);\r\n this.summary.init();\r\n this.summary.reactive.loading = true;\r\n }\r\n}\r\n\r\n$(async () => {\r\n const rootEls = document.querySelectorAll('.js-checkout-review');\r\n rootEls.forEach((el) => {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n const review = new CheckoutReview($el, renderingContext);\r\n review.init();\r\n \r\n const unwatchLoaded = store.watch('loaded', (...[,,loaded]) => {\r\n if(loaded) {\r\n review.onCartLoaded();\r\n unwatchLoaded();\r\n }\r\n });\r\n });\r\n\r\n if(rootEls.length) {\r\n store.actions.getCart();\r\n store.mutations.SET_IS_REVIEW(true);\r\n }\r\n});\r\n","\r\nimport shippingService from '@api/routes/cart/getshippinginformation';\r\nimport selectAddressService from '@api/routes/cart/selectoraddaddress';\r\nimport selectMethodService from '@api/routes/cart/addshippingmethod';\r\nimport uniqid from 'uniqid';\r\nimport ReactiveComponent, { computed, watch } from \"@utils/reactive-component\";\r\nimport parseRenderingContext from '@utils/parse-rendering-context';\r\nimport isFn from '@utils/is-function';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport SelectBox from '../select-box/select-box';\r\nimport CheckoutAddressForm, { DEFAULT_OPTIONS as addressFormDefaults } from './checkout-address-form';\r\nimport AddressValidation, { logUpsServiceError, showSuggestions, statusCodes } from '../address-validation/address-validation';\r\nimport template from './templates/checkout-shipping';\r\nimport { context as defaultContext } from './checkout-defaults';\r\nimport store from '@stores/cart/cart-store';\r\n\r\nconst CLASS_NAME_ADD_BUTTON_DISABLED = '-disabled';\r\nconst CLASS_NAME_EDIT_BUTTON_DISABLED = '-disabled';\r\nconst CLASS_NAME_NEXT_BUTTON_DISABLED = 'disabled';\r\n\r\nconst NEW_ADDRESS_OPTION_VALUE = '__checkoutShipping_newAddress__';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n checkoutFormClassList: ''\r\n};\r\n\r\nconst DEFAULT_LOADER_OPTIONS = {\r\n aria: false,\r\n className: 'd-flex align-items-center h-100',\r\n size: 'xs',\r\n visible: true\r\n};\r\n\r\nexport default class CheckoutShipping extends ReactiveComponent {\r\n #isEdit = false;\r\n\r\n constructor($originEl, context, options) {\r\n context = { ...defaultContext, ...context };\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n\r\n super();\r\n\r\n const $parsed = this.parseTemplate();\r\n $originEl.replaceWith($parsed);\r\n\r\n this.$el = $parsed;\r\n\r\n this.$isSubscriptionsPage = $(\".js-sub-section\").length > 0 ;\r\n\r\n this.$addLabel = this.$el.find('[data-label=\"add\"]');\r\n this.$addressLabel = this.$el.find('[data-label=\"address\"]');\r\n this.$editLabel = this.$el.find('[data-label=\"edit\"]');\r\n this.$methodLabel = this.$el.find('[data-label=\"method\"]');\r\n this.$nextLabel = this.$el.find('[data-label=\"next\"]');\r\n\r\n this.$address = this.$el.find('[data-region=\"address\"]');\r\n this.$edit = this.$el.find('[data-region=\"edit\"]');\r\n this.$error = this.$el.find('[data-region=\"error\"]');\r\n this.$form = this.$el.find('[data-region=\"form\"]');\r\n this.$hiddenOnForm = this.$el.find('[data-region=\"hidden-on-form\"]');\r\n this.$controls = this.$el.find('[data-region=\"controls\"]');\r\n this.$method = this.$el.find('[data-region=\"method\"]');\r\n\r\n this.$addCtrl = this.$el.find('[data-control=\"add\"]');\r\n this.$editCtrl = this.$el.find('[data-control=\"edit\"]');\r\n this.$nextCtrl = this.$el.find('[data-control=\"next\"]');\r\n\r\n this.$addressPlaceholder = this.$el.find('[data-placeholder=\"address\"]');\r\n this.$addressLoaderPlaceholder = this.$el.find('[data-placeholder=\"addressLoader\"]');\r\n this.$methodPlaceholder = this.$el.find('[data-placeholder=\"method\"]');\r\n this.$methodLoaderPlaceholder = this.$el.find('[data-placeholder=\"methodLoader\"]');\r\n this.$nextLoaderPlaceholder = this.$el.find('[data-placeholder=\"nextLoader\"]');\r\n this.$formPlaceholder = this.$el.find('[data-placeholder=\"form\"]');\r\n this.$prescription = $('.cart-landing__rx[data-region=\"prescription\"]');\r\n\r\n this.$promotionsnote = this.$el.find('[data-region=\"promotionsnote\"]');\r\n\r\n this.addressLoader = null;\r\n this.addressSelector = null;\r\n this.methodLoader = null;\r\n this.methodSelector = null;\r\n this.nextLoader = null;\r\n\r\n this.checkoutForm = null;\r\n this.checkoutFormClassList = options.checkoutFormClassList;\r\n\r\n this.id = uniqid.time('');\r\n this.addressId = `shippingAddress_${this.id}`;\r\n this.methodId = `shippingMethod_${this.id}`;\r\n\r\n this.prevAddressValue = '';\r\n this.disableServiceUpdate = false;\r\n this.newAddress = {};\r\n\r\n this.reactive({\r\n addressOptions: [],\r\n addresses: [],\r\n selectedAddressValue: '',\r\n\r\n methodOptions: [],\r\n methods: [],\r\n selectedMethodValue: '',\r\n\r\n loading: true,\r\n nextLoading: false,\r\n\r\n formVisible: false\r\n });\r\n\r\n this.loaders = [];\r\n this.context = context;\r\n }\r\n\r\n [computed]() {\r\n return {\r\n isNewAddress() {\r\n return this.selectedAddressValue === NEW_ADDRESS_OPTION_VALUE;\r\n },\r\n selectedAddressInfo() {\r\n if (this.isNewAddress) {\r\n return this.newAddress;\r\n }\r\n\r\n return this.addresses.find(address => address.AddressName === this.selectedAddressValue) || {};\r\n }\r\n }\r\n }\r\n\r\n [watch]() {\r\n return {\r\n loading(newValue) {\r\n this.addressLoader.active = newValue;\r\n this.methodLoader.active = newValue;\r\n },\r\n addressOptions(newOptions) {\r\n if (!newOptions || !Array.isArray(newOptions) || newOptions.length === 0) {\r\n this.addressSelector.disable();\r\n this.addressSelector.disableElement();\r\n //console.error('invalid address options');\r\n\r\n }\r\n\r\n const options = {\r\n options: newOptions,\r\n unselectedText: this.context.Select\r\n };\r\n\r\n this.addressSelector.setOptions(options);\r\n this.addressSelector.enable();\r\n },\r\n methodOptions(newOptions) {\r\n if ((!newOptions || !Array.isArray(newOptions) || newOptions.length === 0) && !this.$isSubscriptionsPage) {\r\n this.methodSelector.disable();\r\n this.methodSelector.disableElement();\r\n console.error('invalid method options');\r\n }\r\n\r\n const options = {\r\n options: newOptions,\r\n unselectedText: this.context.Select\r\n };\r\n\r\n this.methodSelector.setOptions(options);\r\n this.methodSelector.enable();\r\n },\r\n formVisible() {\r\n if (this.formVisible) {\r\n if (!this.checkoutForm.rendered) {\r\n this.checkoutForm.init();\r\n this.checkoutForm.render();\r\n }\r\n\r\n this.$form.slideDown('fast');\r\n this.$hiddenOnForm.slideUp('fast');\r\n this.checkoutForm.focus();\r\n this.$editCtrl.attr('aria-expanded', true);\r\n this.$addCtrl.attr('aria-expanded', true);\r\n } else {\r\n this.$form.slideUp('fast');\r\n this.$hiddenOnForm.slideDown('fast');\r\n this.addressSelector.focus();\r\n this.$editCtrl.attr('aria-expanded', false);\r\n this.$addCtrl.attr('aria-expanded', false);\r\n\r\n this.#isEdit = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderCheckoutForm();\r\n this.renderNextCtrl();\r\n this.renderSelectors();\r\n this.renderLoaders();\r\n this.setupAccessibility();\r\n this.setupListeners();\r\n this.getShippingData();\r\n }\r\n\r\n onCartLoaded() {\r\n this.loaders.forEach(loader => (loader.active = false));\r\n this.displayLegalDisclaimer();\r\n }\r\n\r\n async getShippingData() {\r\n const { data, error, success } = await shippingService.get();\r\n\r\n if (success) {\r\n this.updateUiOnly(() => {\r\n this.setupAddresses(data);\r\n this.setupMethods(data);\r\n });\r\n\r\n this.updateSummary(data);\r\n } else {\r\n this.$error.show().html(error);\r\n }\r\n\r\n this.loading = false;\r\n }\r\n\r\n async selectAddress() {\r\n this.$error.hide();\r\n\r\n const payload = {\r\n AddressId: this.selectedAddressValue,\r\n IsSubscriptionPage: this.$isSubscriptionsPage\r\n };\r\n\r\n const { success, data, error } = await selectAddressService.post(payload);\r\n\r\n if (success) {\r\n this.updateUiOnly(() => this.setupMethods(data));\r\n if(!this.$isSubscriptionsPage){\r\n this.updateSummary(data);\r\n }\r\n } else if (error) {\r\n this.$error.show().html(error);\r\n }\r\n }\r\n\r\n async addOrEditAddress(addressParty = {}) {\r\n const payload = {\r\n AddressId: !this.isNewAddress ? this.selectedAddressValue : null,\r\n VcaAddressParty: addressParty,\r\n IsSubscriptionPage: this.$isSubscriptionsPage\r\n };\r\n\r\n const { success, data, error } = await selectAddressService.post(payload);\r\n\r\n if (success) {\r\n const {\r\n isValidated,\r\n response: validatedResponse\r\n } = await this.handleAddressValidation(data.UpsAddressValidationStatus, addressParty, data.SuggestedAddresses);\r\n\r\n if (isValidated) {\r\n this.updateUiOnly(() => {\r\n this.setupAddresses(validatedResponse.data || data);\r\n this.setupMethods(validatedResponse.data || data);\r\n });\r\n if(!this.$isSubscriptionsPage){\r\n this.updateSummary(validatedResponse.data || data);\r\n }\r\n this.$editCtrl.prop('disabled', false);\r\n this.$addCtrl.prop('disabled', false);\r\n this.formVisible = false;\r\n }\r\n } else if (error) {\r\n this.checkoutForm.showError(error);\r\n }\r\n }\r\n\r\n async handleAddressValidation(status, originalAddress, suggestedAddresses = []) {\r\n const showPrompt = showSuggestions(status);\r\n\r\n if (!showPrompt) {\r\n if (status === statusCodes.UPS_UNAVAILABLE) logUpsServiceError();\r\n\r\n return {\r\n isValidated: true,\r\n response: {}\r\n }\r\n };\r\n\r\n return await this.showSuggestedAddresses(status, originalAddress, suggestedAddresses);\r\n }\r\n\r\n async showSuggestedAddresses(status, originalAddress, suggestedAddresses = []) {\r\n let response = {};\r\n\r\n const currentAddress = {\r\n address: originalAddress.Address1,\r\n address2: originalAddress.Address2,\r\n city: originalAddress.City,\r\n stateCode: originalAddress.StateCode,\r\n zip: originalAddress.ZipPostalCode\r\n };\r\n\r\n const suggestions = suggestedAddresses?.map((address, index) => ({\r\n addressId: `${index}`,\r\n address: address.Address1,\r\n address2: address.Address2,\r\n city: address.City,\r\n stateCode: address.StateCode,\r\n zip: address.ZipPostalCode\r\n }));\r\n\r\n const onSubmitHandler = async (isOriginal, value) => {\r\n let addressParty = originalAddress;\r\n\r\n if (!isOriginal) {\r\n const index = suggestions.findIndex(({ addressId }) => addressId === value);\r\n if (index > -1) {\r\n addressParty = {\r\n ...addressParty,\r\n ...suggestedAddresses[index]\r\n };\r\n }\r\n }\r\n\r\n response = await selectAddressService.post({\r\n AddressId: !this.isNewAddress ? this.selectedAddressValue : null,\r\n VcaAddressParty: addressParty,\r\n IsSuggestion: true,\r\n IsSubscriptionPage: this.$isSubscriptionsPage\r\n });\r\n\r\n return response;\r\n };\r\n\r\n const addressValidation = new AddressValidation(\r\n status,\r\n currentAddress,\r\n suggestions,\r\n this.context,\r\n {},\r\n onSubmitHandler\r\n );\r\n\r\n const { isValidated } = await addressValidation.prompt();\r\n addressValidation.destroy();\r\n\r\n return {\r\n isValidated,\r\n response\r\n };\r\n }\r\n\r\n async postShippingMethod() {\r\n if (!this.disableServiceUpdate) {\r\n this.$error.hide();\r\n\r\n store.mutations.SET_LOADING(true);\r\n\r\n const payload = {\r\n AddressId: this.selectedAddressValue,\r\n ShippingMethodId: this.selectedMethodValue\r\n };\r\n\r\n const { data, error, success } = await selectMethodService.post(payload);\r\n\r\n if (success) {\r\n this.updateSummary(data);\r\n } else {\r\n this.$error.show().html(error);\r\n }\r\n\r\n if (data.ShippingMethodId !== this.selectedMethodValue) {\r\n this.updateUiOnly(() => {\r\n this.resetMethods();\r\n this.setupMethods(data);\r\n });\r\n }\r\n }\r\n }\r\n\r\n setupAddresses(data) {\r\n const addresses = data.ShippingAddresses || [];\r\n const shippingParty = addresses.find((address) => address.AddressName === data.AddressId);\r\n let isPrimaryIndex = data.ShippingAddresses.findIndex(address => address.IsPrimary == true );\r\n addresses.unshift(addresses.splice(isPrimaryIndex, 1)[0]);\r\n\r\n store.mutations.SET_SHIPPING_PARTY(shippingParty);\r\n if(addresses[0] != undefined) {\r\n this.mapAddressOptions(addresses);\r\n this.setInitialAddress();\r\n }else{\r\n this.$edit.hide();\r\n this.onAddAddressClick();\r\n }\r\n }\r\n\r\n mapAddressOptions(addresses = []) {\r\n this.addresses = addresses;\r\n\r\n const addressOptions = addresses.map((address, index) => {\r\n if(address === null || address === undefined){\r\n return;\r\n }\r\n const text = this.parseAddressText(address);\r\n return {\r\n text,\r\n value: address.AddressName\r\n };\r\n });\r\n\r\n this.addressOptions = addressOptions;\r\n }\r\n\r\n setAddressLoadingState(loading = true) {\r\n store.mutations.SET_LOADING(loading);\r\n this.methodLoader.active = loading;\r\n }\r\n\r\n setupMethods(data) {\r\n const methods = data.ShippingOptionsModel?.Shipments?.[0]?.ShippingMethods || []; // this schema is nonsense\r\n const shippingMethod = methods.find((method) => method.ShippingMethodId === data.ShippingMethodId);\r\n\r\n store.mutations.SET_SHIPPING_METHOD(shippingMethod);\r\n this.mapMethodOptions(methods);\r\n\r\n this.setInitialMethod();\r\n }\r\n\r\n mapMethodOptions(methods) {\r\n this.methods = methods;\r\n\r\n const methodOptions = methods.map(method => {\r\n return {\r\n text: method.MethodName,\r\n value: method.ShippingMethodId\r\n };\r\n });\r\n\r\n this.methodOptions = methodOptions;\r\n }\r\n\r\n resetMethods() {\r\n this.methodSelector.setOptions({\r\n options: [{ text: '', value: '' }]\r\n });\r\n\r\n this.methodSelector.disable();\r\n this.methodSelector.disableElement();\r\n }\r\n\r\n onAddAddressClick() {\r\n if (store.state.loading) return;\r\n\r\n this.formVisible = true;\r\n\r\n this.checkoutForm.setHeading(this.context.AddShippingAddress);\r\n\r\n this.checkoutForm.setValues({\r\n firstName: this.newAddress.FirstName || '',\r\n lastName: this.newAddress.LastName || '',\r\n address: this.newAddress.Address1 || '',\r\n address2: this.newAddress.Address2 || '',\r\n city: this.newAddress.City || '',\r\n state: this.newAddress.State || '',\r\n zip: this.newAddress.ZipPostalCode || ''\r\n });\r\n\r\n const options = [...this.addressOptions];\r\n const newAddressOption = { text: this.context.NewAddress, value: NEW_ADDRESS_OPTION_VALUE };\r\n const newAddressIndex = options.findIndex(({ value }) => value === NEW_ADDRESS_OPTION_VALUE);\r\n\r\n if (newAddressIndex > -1) {\r\n options[newAddressIndex] = newAddressOption;\r\n } else {\r\n options.push(newAddressOption);\r\n }\r\n\r\n this.addressOptions = options;\r\n\r\n this.updateUiOnly(() => {\r\n this.addressSelector.setValue(NEW_ADDRESS_OPTION_VALUE);\r\n });\r\n\r\n this.$editCtrl.prop('disabled', true);\r\n this.addressSelector.disableElement();\r\n }\r\n\r\n onEditClick() {\r\n if (store.state.loading) return;\r\n\r\n if (this.selectedAddressValue) {\r\n this.#isEdit = true;\r\n\r\n this.formVisible = true;\r\n\r\n this.checkoutForm.setHeading(this.context.EditShippingAddress);\r\n\r\n this.checkoutForm.setValues({\r\n firstName: this.selectedAddressInfo.FirstName,\r\n lastName: this.selectedAddressInfo.LastName,\r\n address: this.selectedAddressInfo.Address1,\r\n address2: this.selectedAddressInfo.Address2,\r\n city: this.selectedAddressInfo.City,\r\n state: this.selectedAddressInfo.StateCode,\r\n zip: this.selectedAddressInfo.ZipPostalCode\r\n });\r\n\r\n this.$addCtrl.prop('disabled', true);\r\n this.addressSelector.disableElement();\r\n }\r\n }\r\n\r\n async onNextClick(evt) {\r\n let invalidSelector = null;\r\n\r\n if (!this.selectedMethodValue) {\r\n this.methodSelector.setInvalid();\r\n invalidSelector = this.methodSelector;\r\n }\r\n\r\n if (!this.selectedAddressValue) {\r\n this.addressSelector.setInvalid();\r\n invalidSelector = this.addressSelector;\r\n }\r\n\r\n if (invalidSelector) {\r\n invalidSelector.focus();\r\n evt.preventDefault();\r\n }\r\n }\r\n\r\n async onAddressUpdate(value) {\r\n this.prevAddressValue = this.selectedAddressValue;\r\n this.selectedAddressValue = value;\r\n\r\n if (!this.disableServiceUpdate) {\r\n this.resetMethods();\r\n\r\n this.setAddressLoadingState();\r\n await this.selectAddress();\r\n this.setAddressLoadingState(false);\r\n }\r\n }\r\n\r\n onAddressFormCancel() {\r\n this.updateUiOnly(() => {\r\n if (!this.#isEdit) {\r\n this.addressOptions = this.addressOptions.filter(({ value }) => value !== NEW_ADDRESS_OPTION_VALUE);\r\n this.addressSelector.setValue(this.prevAddressValue);\r\n }\r\n\r\n this.addressSelector.enable();\r\n this.addressSelector.enableElement();\r\n });\r\n this.$editCtrl.prop('disabled', false);\r\n this.$addCtrl.prop('disabled', false);\r\n this.formVisible = false;\r\n }\r\n\r\n onLoadingChange(loading) {\r\n this.nextLoader.active = loading;\r\n\r\n if (loading) {\r\n this.$addCtrl.addClass(CLASS_NAME_ADD_BUTTON_DISABLED).attr('aria-disabled', true);\r\n this.$editCtrl.addClass(CLASS_NAME_EDIT_BUTTON_DISABLED).attr('aria-disabled', true);\r\n this.$nextCtrl.addClass(CLASS_NAME_NEXT_BUTTON_DISABLED).attr('aria-disabled', true);\r\n } else {\r\n this.$addCtrl.removeClass(CLASS_NAME_EDIT_BUTTON_DISABLED).removeAttr('aria-disabled');\r\n this.$editCtrl.removeClass(CLASS_NAME_EDIT_BUTTON_DISABLED).removeAttr('aria-disabled');\r\n if(this.selectedMethodValue){\r\n this.$nextCtrl.removeClass(CLASS_NAME_NEXT_BUTTON_DISABLED).removeAttr('aria-disabled');\r\n }\r\n }\r\n }\r\n\r\n onMethodUpdate(value) {\r\n this.selectedMethodValue = value;\r\n\r\n this.postShippingMethod();\r\n }\r\n\r\n async onCheckoutFormUpdate(address) {\r\n if (!address) return;\r\n\r\n this.checkoutForm.hideError();\r\n this.resetMethods();\r\n\r\n const newAddressFields = {\r\n IsPrimary: false,\r\n CountryCode: \"US\",\r\n Country: \"United States\",\r\n PhoneNumber: null\r\n };\r\n\r\n const updatedAddress = {\r\n ...address,\r\n ...(this.isNewAddress ? newAddressFields : {})\r\n };\r\n\r\n this.checkoutForm.loading = true;\r\n this.setAddressLoadingState();\r\n\r\n await this.addOrEditAddress(updatedAddress);\r\n\r\n this.checkoutForm.loading = false;\r\n this.setAddressLoadingState(false);\r\n }\r\n\r\n parseAddressText(address) {\r\n let text = address.Address1;\r\n\r\n if (address.Address2) {\r\n text += ` ${address.Address2}`;\r\n }\r\n\r\n text += ` ${address.City}, ${address.StateCode} ${address.ZipPostalCode}`;\r\n\r\n return text;\r\n }\r\n\r\n renderLabels() {\r\n this.$addLabel.html(this.context.AddNew);\r\n this.$addressLabel.html(this.context.ShippingAddress);\r\n this.$editLabel.html(this.context.EditExistingAddress);\r\n this.$methodLabel.html(this.context.ShippingMethod);\r\n this.$nextLabel.html(this.context.Next);\r\n\r\n if(this.context.PromotionNoteIcon && this.context.PromotionNote){\r\n let pnote = `<img src=\"${this.context.PromotionNoteIcon}\" alt=\"promo icon\" /><div>${this.context.PromotionNote}</div>`;\r\n this.$promotionsnote.html(pnote);\r\n this.$promotionsnote.addClass(\"mt-3\");\r\n }else{\r\n this.$promotionsnote.hide();\r\n }\r\n }\r\n\r\n renderCheckoutForm() {\r\n const defaultSchema = { ...addressFormDefaults.schema }\r\n const schema = {\r\n firstName: {\r\n ...defaultSchema.firstName,\r\n label: this.context.FirstName,\r\n name: 'FirstName'\r\n },\r\n lastName: {\r\n ...defaultSchema.lastName,\r\n label: this.context.LastName,\r\n name: 'LastName'\r\n },\r\n address: {\r\n ...defaultSchema.address,\r\n label: this.context.Address,\r\n name: 'Address1'\r\n },\r\n address2: {\r\n ...defaultSchema.address2,\r\n label: this.context.Address2,\r\n name: 'Address2'\r\n },\r\n city: {\r\n ...defaultSchema.city,\r\n label: this.context.City,\r\n name: 'City'\r\n },\r\n state: {\r\n ...defaultSchema.state,\r\n label: this.context.State,\r\n name: 'StateCode'\r\n },\r\n zip: {\r\n ...defaultSchema.zip,\r\n label: this.context.Zip,\r\n name: 'ZipPostalCode'\r\n }\r\n };\r\n\r\n const options = {\r\n classList: this.checkoutFormClassList,\r\n onCancelHandler: () => this.onAddressFormCancel(),\r\n replaceOriginEl: true,\r\n schema\r\n };\r\n\r\n const context = {\r\n cancel: this.context.Cancel,\r\n heading: this.context.AddShippingAddress,\r\n requiredToken: this.context.RequiredToken,\r\n submit: this.context.ApplyUpdates,\r\n validation: this.context.ValidationMessage\r\n };\r\n\r\n this.checkoutForm = new CheckoutAddressForm(this.$formPlaceholder, options, context);\r\n }\r\n\r\n renderNextCtrl() {\r\n if (this.$nextCtrl.is('a')) {\r\n this.$nextCtrl.attr('href', this.context.NextStepUrl);\r\n this.$nextCtrl.addClass(CLASS_NAME_NEXT_BUTTON_DISABLED).attr('aria-disabled', true);\r\n }\r\n }\r\n\r\n renderLoaders() {\r\n this.addressLoader = new AjaxLoader(this.$addressLoaderPlaceholder, {\r\n ...DEFAULT_LOADER_OPTIONS,\r\n srText: this.context.LoadingAddresses\r\n });\r\n\r\n this.methodLoader = new AjaxLoader(this.$methodLoaderPlaceholder, {\r\n ...DEFAULT_LOADER_OPTIONS,\r\n srText: this.context.LoadingMethods\r\n });\r\n\r\n this.nextLoader = new AjaxLoader(this.$nextLoaderPlaceholder, {\r\n aria: false,\r\n size: 'xs'\r\n });\r\n\r\n this.nextLoader.render();\r\n }\r\n\r\n renderSelectors() {\r\n this.addressSelector = new SelectBox(this.$addressPlaceholder, {\r\n id: this.addressId\r\n });\r\n this.addressSelector.disable();\r\n this.addressSelector.render();\r\n\r\n this.methodSelector = new SelectBox(this.$methodPlaceholder, {\r\n id: this.methodId\r\n });\r\n this.methodSelector.disable();\r\n this.methodSelector.render();\r\n }\r\n\r\n displayLegalDisclaimer() {\r\n let displayRxRequired = false;\r\n\r\n store.getters.lines.forEach(line => {\r\n if (line.rxRequired) displayRxRequired = true;\r\n });\r\n\r\n displayRxRequired ? this.$prescription.show() : this.$prescription.hide();;\r\n }\r\n\r\n setInitialAddress() {\r\n if (this.addressOptions.find(({ value }) => value === store.getters.shippingPartyId) && !this.$isSubscriptionsPage) {\r\n this.addressSelector.setValue(store.getters.shippingPartyId);\r\n return;\r\n }\r\n let addressName = $('div[data-info=\"address\"]').attr('data-addressName');\r\n if (this.addressOptions.length > 0) {\r\n let addressIndex = this.addressOptions.findIndex(\r\n option => this.normalizeAddress(option.text).includes(this.normalizeAddress(addressName))\r\n );\r\n let addressOrderId = '';\r\n if(addressIndex != -1) {\r\n addressOrderId = this.addressOptions[addressIndex].value;\r\n } else {\r\n addressOrderId = this.addressOptions[0].value;\r\n }\r\n this.addressSelector.setValue(addressOrderId);\r\n } else {\r\n this.$edit.hide();\r\n this.onAddAddressClick();\r\n }\r\n }\r\n\r\n normalizeAddress(address) {\r\n return address\r\n .toLowerCase() \r\n .replace(/\\s+/g, ' ') \r\n .replace(/,\\s*/g, ', ') \r\n .replace(/\\s*,/g, ',') \r\n .trim(); \r\n }\r\n\r\n setInitialMethod() {\r\n if (this.methodOptions.find(({ value }) => value === store.getters.shippingMethodId)) {\r\n this.methodSelector.setValue(store.getters.shippingMethodId);\r\n }\r\n }\r\n\r\n setupAccessibleCollapse() {\r\n const formId = `addressForm_${this.id}`;\r\n this.$form.attr('id', formId);\r\n this.$editCtrl.attr({ 'aria-expanded': false, 'aria-controls': formId });\r\n this.$addCtrl.attr({ 'aria-expanded': false, 'aria-controls': formId });\r\n }\r\n\r\n setupAccessibleIds() {\r\n const addressLabelId = `${this.addressId}_label`;\r\n const methodLabelId = `${this.methodId}_label`;\r\n\r\n this.$address.attr({ 'for': this.addressId, 'id': addressLabelId });\r\n this.$method.attr({ 'for': this.methodId, 'id': methodLabelId });\r\n\r\n this.$controls.attr('aria-labelledby', addressLabelId);\r\n }\r\n\r\n setupAccessibility() {\r\n this.setupAccessibleIds();\r\n this.setupAccessibleCollapse();\r\n\r\n this.$el.attr('aria-live', 'polite');\r\n }\r\n\r\n setupListeners() {\r\n this.$addCtrl.on('click', () => this.onAddAddressClick());\r\n this.$editCtrl.on('click', () => this.onEditClick());\r\n this.$nextCtrl.on('click', (evt) => this.onNextClick(evt));\r\n\r\n this.addressSelector.watchValue((value) => this.onAddressUpdate(value));\r\n this.methodSelector.watchValue((value) => this.onMethodUpdate(value));\r\n\r\n this.checkoutForm.watchValue((value) => this.onCheckoutFormUpdate(value));\r\n\r\n store.watch('loading', (...[, , loading]) => this.onLoadingChange(loading));\r\n }\r\n\r\n updateSummary(data) {\r\n store.mutations.SET_FREE_SHIPPING_TEXT(data.FreeShippingText);\r\n store.mutations.SET_PROMO_CODE(data.PromotionCode);\r\n\r\n store.actions.setFormattedCartSummary({\r\n miniCartTotal: data?.FormattedTotal?.FormattedMiniCartTotal,\r\n discount: data?.FormattedTotal?.FormattedDiscount,\r\n shippingTotal: data?.FormattedTotal?.FormattedShipping,\r\n subtotal: data?.FormattedTotal?.FormattedSubtotal,\r\n taxTotal: data?.FormattedTotal?.FormattedTax,\r\n total: data?.FormattedTotal?.FormattedGrandTotal\r\n });\r\n\r\n store.mutations.SET_LOADING(false);\r\n store.mutations.SET_LOADED(true);\r\n }\r\n\r\n updateUiOnly(callback) {\r\n if (!isFn(callback)) return;\r\n\r\n this.disableServiceUpdate = true;\r\n callback();\r\n this.disableServiceUpdate = false;\r\n }\r\n\r\n parseTemplate(templateStr = template) {\r\n const parsed = $.parseHTML(templateStr);\r\n return $(parsed);\r\n }\r\n\r\n static extendTemplate(templateStr) {\r\n class CheckoutShippingExtended extends this { };\r\n CheckoutShippingExtended.prototype.parseTemplate = CheckoutShipping.prototype.parseTemplate.bind(CheckoutShippingExtended, templateStr);\r\n return CheckoutShippingExtended;\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-checkout-shipping');\r\n \r\n if(rootEls.length) {\r\n store.actions.getCart();\r\n }\r\n\r\n rootEls.forEach((el) => {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n const shipping = new CheckoutShipping($el, renderingContext);\r\n shipping.init();\r\n\r\n const unwatchLoaded = store.watch('loaded', (...[,,loaded]) => {\r\n if(loaded) {\r\n shipping.onCartLoaded();\r\n unwatchLoaded();\r\n }\r\n });\r\n });\r\n});\r\n","import parseRenderingContext from '@utils/parse-rendering-context';\r\nimport CheckoutAppliedPromo from './checkout-applied-promo';\r\nimport CheckoutPromo from './checkout-promo';\r\nimport CheckoutSummary from './checkout-summary';\r\nimport template from './templates/checkout-summary-promos';\r\nimport { context as defaultContext } from './checkout-defaults';\r\nimport store from '@stores/cart/cart-store';\r\n\r\nexport default class CheckoutSummaryPromos extends CheckoutSummary.extendTemplate(template) {\r\n constructor($originEl, context) {\r\n context = { ...defaultContext, ...context };\r\n\r\n super($originEl, context);\r\n\r\n this.$promoCodeLabel = this.$el.find('[data-label=\"promoCode\"]');\r\n\r\n this.$promo = this.$el.find('[data-region=\"promo\"]');\r\n\r\n this.$appliedPromoPlaceholder = this.$el.find('[data-placeholder=\"appliedPromo\"]');\r\n this.$promoPlaceholder = this.$el.find('[data-placeholder=\"promo\"]');\r\n \r\n this.appliedPromo = null;\r\n this.promo = null;\r\n\r\n this.context = context;\r\n }\r\n\r\n init() {\r\n super.init();\r\n\r\n this.renderAppliedPromo();\r\n this.renderLabelOverrides();\r\n this.renderPromo();\r\n this.updatePromo();\r\n }\r\n\r\n async onCheckoutClick() {\r\n if(this.reactive.checkoutLoading) {\r\n return;\r\n }\r\n\r\n this.$error.slideUp('fast');\r\n this.reactive.checkoutLoading = true;\r\n\r\n const { success, error } = await store.actions.submitCart();\r\n if(!success) {\r\n this.$error.html(error).slideDown('fast');\r\n }\r\n\r\n this.reactive.checkoutLoading = false;\r\n }\r\n\r\n setupListeners() {\r\n super.setupListeners();\r\n\r\n this.$checkoutCtrl.on('click', () => this.onCheckoutClick());\r\n\r\n store.watch('promoCode', () => this.updatePromo());\r\n }\r\n\r\n hideLoading() {\r\n super.hideLoading();\r\n\r\n this.$checkoutCtrl.removeClass('disabled').attr('aria-disabled', null);\r\n }\r\n\r\n showLoading() {\r\n super.showLoading();\r\n\r\n this.$checkoutCtrl.addClass('disabled').attr('aria-disabled', true);\r\n }\r\n\r\n renderAppliedPromo() {\r\n const context = {\r\n applied: this.context.Applied,\r\n remove: this.context.RemovePromoSrText\r\n };\r\n\r\n this.appliedPromo = new CheckoutAppliedPromo(this.$appliedPromoPlaceholder, context, {\r\n replaceOriginEl: true,\r\n removeable: false\r\n });\r\n\r\n this.appliedPromo.render();\r\n }\r\n\r\n renderLabelOverrides() {\r\n this.$checkoutLabel.html(this.context.PlaceOrder);\r\n }\r\n\r\n renderPromo() {\r\n this.promo = new CheckoutPromo(this.$promoPlaceholder, this.context, {\r\n replaceOriginEl: true\r\n });\r\n\r\n this.promo.render();\r\n }\r\n\r\n renderTotals() {\r\n super.renderTotals();\r\n\r\n this.updateUpsell();\r\n }\r\n\r\n updatePromo() {\r\n if(store.state.promoCode) {\r\n this.$promo.show();\r\n } else {\r\n this.$promo.hide();\r\n }\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-checkout-summary-promos');\r\n rootEls.forEach((el) => {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n const summary = new CheckoutSummaryPromos($el, renderingContext);\r\n summary.init();\r\n\r\n summary.showLoading();\r\n const unwatch = store.watch('loaded', (...[, , loaded]) => {\r\n if (loaded) {\r\n unwatch();\r\n }\r\n });\r\n });\r\n});\r\n","import ReactiveComponent from '@utils/reactive-component';\r\nimport parseRenderingContext from '@utils/parse-rendering-context';\r\nimport CartSummary from '../cart-landing/cart-summary';\r\nimport template from './templates/checkout-summary';\r\nimport { context as defaultContext } from './checkout-defaults';\r\nimport store from '@stores/cart/cart-store';\r\n\r\nexport default class CheckoutSummary extends CartSummary.extendTemplate(template) {\r\n constructor($originEl, context) {\r\n context = { ...defaultContext, ...context };\r\n\r\n super($originEl, context);\r\n\r\n this.reactive = new ReactiveComponent({\r\n state: {\r\n checkoutLoading: false,\r\n loading: false\r\n }\r\n });\r\n\r\n this.context = context;\r\n }\r\n\r\n setupListeners() {\r\n this.reactive.watch('checkoutLoading', (checkoutLoading) => this.checkoutLoader.active = checkoutLoading);\r\n\r\n store.watch('loading', (...[, , loading]) => {\r\n if (loading) {\r\n this.showLoading();\r\n } else {\r\n this.hideLoading();\r\n }\r\n });\r\n }\r\n\r\n hideLoading() {\r\n this.loaders.forEach(loader => (loader.active = false));\r\n\r\n this.renderTotals();\r\n }\r\n\r\n renderTotals() {\r\n this.$discounts.html(store.getters.formattedDiscount);\r\n this.$shipping.html(store.getters.formattedShippingTotal);\r\n this.$subtotal.html(store.getters.formattedSubtotal);\r\n this.$tax.html(store.getters.formattedTaxTotal);\r\n this.$total.html(store.getters.formattedTotal);\r\n }\r\n\r\n showLoading() { \r\n this.$discounts.empty();\r\n this.$shipping.empty();\r\n this.$subtotal.empty();\r\n this.$tax.empty();\r\n this.$total.empty();\r\n\r\n this.loaders.forEach(loader => (loader.active = true));\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-checkout-summary');\r\n rootEls.forEach((el) => {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n const summary = new CheckoutSummary($el, renderingContext);\r\n summary.init();\r\n\r\n summary.showLoading();\r\n const unwatch = store.watch('loaded', (...[, , loaded]) => {\r\n if (loaded) {\r\n unwatch();\r\n }\r\n });\r\n });\r\n});\r\n","// Module\nvar code = \"<div class=\\\"payment-management col-12 col-lg-7 px-0 mt-2 js-update-billing-wrapper\\\" data-region=\\\"update-payment-address\\\"> <div class=\\\"update-payment-wrapper\\\"> <div class=\\\"js-myvca-account-box payment-management__checkout-update-payment\\\"> <div class=\\\"rounded bg-color-vca-powder p-3 my-1\\\"> <div class=\\\"vca-form\\\"> <h5 class=\\\"order-details-fulfillment__heading\\\">Card Holder Information </h5> <div class=\\\"form-label-group\\\"> <input id=\\\"nameOnCard\\\" placeholder=\\\"Name on Card\\\" data-item=\\\"nameOnCard\\\" class=\\\"js-required\\\"> <label class=\\\"required\\\" for=\\\"nameOnCard\\\">Name on Card</label> </div> <h5 class=\\\"order-details-fulfillment__heading\\\">Billing Address</h5> <div class=\\\"form-label-group\\\"> <input id=\\\"updateAddress\\\" placeholder=\\\"Address\\\" data-item=\\\"updateAddress\\\" class=\\\"js-required\\\"> <label class=\\\"required\\\" for=\\\"updateAddress\\\">Address</label> </div> <div class=\\\"form-label-group\\\"> <input id=\\\"updateAddress1\\\" placeholder=\\\"Name on Card\\\" data-item=\\\"updateAddress1\\\"> <label for=\\\"updateAddress1\\\">Apt #, Suite, etc.</label> </div> <div class=\\\"form-label-group\\\"> <input id=\\\"updateCity\\\" placeholder=\\\"Name on Card\\\" data-item=\\\"updateCity\\\" class=\\\"js-required\\\"> <label class=\\\"required\\\" for=\\\"updateCity\\\">City</label> </div> <div class=\\\"d-flex\\\"> <div class=\\\"form-label-group -updatestate\\\"> <div class=\\\"select-box\\\"> <label class=\\\"required\\\" for=\\\"updateState\\\">State</label> <select id=\\\"updateState\\\" name=\\\"state\\\" aria-required=\\\"true\\\" data-item=\\\"updateState\\\" class=\\\"select-box__select js-required\\\"> </select> </div> </div> <div class=\\\"form-label-group ml-2\\\"> <input id=\\\"updateZip\\\" placeholder=\\\"Zip\\\" name=\\\"updateZip\\\" data-item=\\\"updateZip\\\" class=\\\"js-required\\\"> <label class=\\\"required\\\" for=\\\"updateZip\\\">Zip</label> </div> </div> <div>*All fields are required</div> </div> </div> <div class=\\\"d-flex flex-column mt-3 align-items-center js-update-payment-buttons\\\"> <button class=\\\"btn js-update-payment-address-form mb-1\\\" disabled=\\\"disabled\\\"> <span class=\\\"position-relative\\\"> <span class=\\\"checkout-step__loader\\\"> <span data-loader=\\\"loader\\\"></span> </span> <span>Update Payment</span> </span> </button> <button class=\\\"js-cancel-payment-address-form mt-2\\\"> Cancel </button> </div> </div> <div class=\\\"vca-modal modal fade -cancal-update-payment-method\\\" tabindex=\\\"-1\\\" role=\\\"dialog\\\" aria-hidden=\\\"true\\\" id=\\\"js-update-payment-management-modal\\\"> <div class=\\\"vca-modal__dialog modal-dialog\\\" role=\\\"document\\\"> <div class=\\\"vca-modal__content modal-content\\\"> <button type=\\\"button\\\" class=\\\"vca-modal__close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"> <span class=\\\"vca-modal__close-icon\\\" aria-hidden=\\\"true\\\"></span> </button> <div class=\\\"vca-modal__body modal-body vca-form cancal-update-payment-content d-flex flex-column align-items-center text-center\\\" data-label=\\\"body\\\"> <h4 class=\\\"mb-0\\\">Cancel Updating Your Payment Method?</h4> <div class=\\\"cancal-update-payment-msg\\\">Without updating, your payment method will remain invalid and may cause pending and/or future order issues.</div> <button class=\\\"btn js-continue-update-payment\\\">Continue with updating payment</button> <button class=\\\"text-color-vca-mud js-edit-cancel-update-payment underline\\\"> Select a different payment method </button> </div> </div> </div> </div> </div></div>\";\n// Exports\nmodule.exports = code;","import template from './billing-address-form-cc.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<form class=\\\"checkout-address-form\\\" method=\\\"POST\\\" novalidate data-control=\\\"form\\\"> <h2 class=\\\"checkout-address-form__heading\\\" data-label=\\\"heading\\\"></h2> <div class=\\\"checkout-address-form__row\\\"> <label class=\\\"sr-only\\\" data-label=\\\"address\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" aria-required=\\\"true\\\" autofill=\\\"address-line1\\\" required data-control=\\\"address\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"addressError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"addressError\\\"></span> </div> </div> <div class=\\\"checkout-address-form__row\\\"> <label class=\\\"sr-only\\\" data-label=\\\"address2\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" autofill=\\\"address-line2\\\" data-control=\\\"address2\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"address2Error\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"address2Error\\\"></span> </div> </div> <div class=\\\"checkout-address-form__row\\\"> <div class=\\\"checkout-address-form__field -city\\\"> <label class=\\\"sr-only\\\" data-label=\\\"city\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" aria-required=\\\"true\\\" autocomplete=\\\"address-level2\\\" required data-control=\\\"city\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"cityError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"cityError\\\"></span> </div> </div> <div class=\\\"checkout-address-form__field -state\\\"> <label class=\\\"sr-only\\\" data-label=\\\"state\\\"> </label> <div data-placeholder=\\\"state\\\"></div> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"stateError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"stateError\\\"></span> </div> </div> <div class=\\\"checkout-address-form__field -zip\\\"> <label class=\\\"sr-only\\\" data-label=\\\"zip\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" aria-required=\\\"true\\\" autocomplete=\\\"postal-code\\\" pattern=\\\"^\\\\d{5}$\\\" required data-control=\\\"zip\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"zipError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"zipError\\\"></span> </div> </div> </div> <div class=\\\"col-md-7 d-flex flex-column p-0 flex-sm-row\\\"> <button type=\\\"submit\\\" class=\\\"checkout-address-form__submit btn btn-sky-outline-alt\\\" data-control=\\\"submit\\\"> <span role=\\\"text\\\" class=\\\"position-relative\\\"> <span class=\\\"position-absolute ml-n4\\\" data-placeholder=\\\"loader\\\"></span> <span data-label=\\\"submit\\\"></span> </span> </button> <button type=\\\"button\\\" class=\\\"checkout-address-form__submit btn btn-sky-outline-alt ml-sm-3\\\" data-target=\\\"cancel\\\" data-control=\\\"cancel\\\"> <span data-label=\\\"cancel\\\"></span> </button> </div> <p role=\\\"alert\\\" class=\\\"checkout-address-form__error mt-3\\\" data-region=\\\"error\\\"></p> </form> \";\n// Exports\nmodule.exports = code;","import template from './checkout-address-form-cc.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<form class=\\\"checkout-address-form\\\" method=\\\"POST\\\" novalidate data-control=\\\"form\\\"> <h2 class=\\\"checkout-address-form__heading\\\" data-label=\\\"heading\\\"></h2> <div class=\\\"checkout-address-form__row\\\"> <div class=\\\"checkout-address-form__field\\\"> <label class=\\\"sr-only\\\" data-label=\\\"firstName\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" aria-required=\\\"true\\\" autofill=\\\"given-name\\\" required data-control=\\\"firstName\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"firstNameError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"firstNameError\\\"></span> </div> </div> <div class=\\\"checkout-address-form__field\\\"> <label class=\\\"sr-only\\\" data-label=\\\"lastName\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" aria-required=\\\"true\\\" autofill=\\\"family-name\\\" required data-control=\\\"lastName\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"lastNameError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"lastNameError\\\"></span> </div> </div> </div> <div class=\\\"checkout-address-form__row\\\"> <label class=\\\"sr-only\\\" data-label=\\\"address\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" aria-required=\\\"true\\\" autofill=\\\"address-line1\\\" required data-control=\\\"address\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"addressError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"addressError\\\"></span> </div> </div> <div class=\\\"checkout-address-form__row\\\"> <label class=\\\"sr-only\\\" data-label=\\\"address2\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" autofill=\\\"address-line2\\\" data-control=\\\"address2\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"address2Error\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"address2Error\\\"></span> </div> </div> <div class=\\\"checkout-address-form__row\\\"> <div class=\\\"checkout-address-form__field -city\\\"> <label class=\\\"sr-only\\\" data-label=\\\"city\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" aria-required=\\\"true\\\" autocomplete=\\\"address-level2\\\" required data-control=\\\"city\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"cityError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"cityError\\\"></span> </div> </div> <div class=\\\"checkout-address-form__field -state\\\"> <label class=\\\"sr-only\\\" data-label=\\\"state\\\"> </label> <div data-placeholder=\\\"state\\\"></div> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"stateError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"stateError\\\"></span> </div> </div> <div class=\\\"checkout-address-form__field -zip\\\"> <label class=\\\"sr-only\\\" data-label=\\\"zip\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" aria-required=\\\"true\\\" autocomplete=\\\"postal-code\\\" required data-control=\\\"zip\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"zipError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"zipError\\\"></span> </div> </div> </div> <div class=\\\"col-md-7 d-flex flex-column p-0 flex-sm-row\\\"> <button type=\\\"submit\\\" class=\\\"checkout-address-form__submit btn btn-sky-outline-alt\\\" data-control=\\\"submit\\\"> <span role=\\\"text\\\" class=\\\"position-relative\\\"> <span class=\\\"position-absolute ml-n4\\\" data-placeholder=\\\"loader\\\"></span> <span data-label=\\\"submit\\\"></span> </span> </button> <button type=\\\"button\\\" class=\\\"checkout-address-form__submit btn btn-sky-outline-alt ml-sm-3\\\" data-target=\\\"cancel\\\" data-control=\\\"cancel\\\"> <span data-label=\\\"cancel\\\"></span> </button> </div> <p role=\\\"alert\\\" class=\\\"checkout-address-form__error mt-3\\\" data-region=\\\"error\\\"></p> </form> \";\n// Exports\nmodule.exports = code;","import template from './checkout-address-form.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"applied-promo\\\"> <p class=\\\"applied-promo__name\\\"> <span role=\\\"text\\\"> <span data-region=\\\"code\\\"></span> <span class=\\\"applied-promo__accent\\\" data-label=\\\"applied\\\"> </span> </span></p> <button type=\\\"button\\\" class=\\\"applied-promo__remove\\\" data-control=\\\"remove\\\"> <span class=\\\"sr-only\\\" data-label=\\\"remove\\\"></span> </button> </div> \";\n// Exports\nmodule.exports = code;","import template from './checkout-applied-promo.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \" <div class=\\\"container payment-success-toaster js-checkout-toaster-visible hidden\\\"> <div class=\\\"toaster -success\\\"> <span class=\\\"toaster__content\\\"> <img src=\\\"../../../images-2/success-icon.svg\\\" alt=\\\"Success Icon\\\"> <span class=\\\"toaster__message\\\" data-region=\\\"addPaymentToasterMsg\\\"></span> </span> <a class=\\\"d-flex text-color-vca-mud text-decoration-none close-toaster-payment\\\" href=\\\"#\\\"> <span class=\\\"sr-only\\\">close success message</span> <i class=\\\"fal fa-times\\\"></i></a> </div> </div> <div class=\\\"checkout-step\\\"> <div class=\\\"checkout-selector -half\\\"> <label class=\\\"checkout-selector__label\\\" data-region=\\\"method\\\"> <span data-label=\\\"method\\\"></span> </label> <div class=\\\"checkout-selector__wrapper\\\" data-control=\\\"method\\\"> <div class=\\\"checkout-selector__selector\\\"> <div data-placeholder=\\\"method\\\"></div> <div class=\\\"checkout-selector__loader\\\"> <div data-placeholder=\\\"methodLoader\\\"></div> </div> </div> <div class=\\\"checkout-selector__controls\\\"> <ul aria-labelledby=\\\"paymentMethod_label\\\" class=\\\"checkout-selector__list\\\"> <li class=\\\"checkout-selector__list-item\\\"> <button type=\\\"button\\\" class=\\\"checkout-selector__btn\\\" data-control=\\\"addMethod\\\"> <span data-label=\\\"add\\\"></span> </button> </li> </ul> </div> </div> </div> <div class=\\\"checkout-step__form\\\" data-region=\\\"methodForm\\\"> <div id=\\\"addPaymentContainer\\\" class=\\\"checkout-address-form\\\"> <h2 class=\\\"checkout-address-form__heading\\\" data-label=\\\"heading\\\"></h2> <div id=\\\"paymentFrameContainer\\\"></div> <h2 class=\\\"checkout-selector__label\\\" data-label=\\\"heading-card-name\\\"></h2> <div class=\\\"checkout-address-form__row js-address-validation-form row mb-4\\\"> <div class=\\\"checkout-address-form__field col-12\\\"> <label class=\\\"sr-only\\\" data-label=\\\"cardHolderName\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" aria-required=\\\"true\\\" autofill=\\\"given-name\\\" required data-control=\\\"cardHolderName\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"cardHolderNameError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"cardHolderNameError\\\"></span> </div> </div> </div> <label class=\\\"checkout-selector__label\\\" data-region=\\\"address\\\"> <span data-label=\\\"address\\\"></span> </label> <div class=\\\"form-check pl-1 mb-4 js-address-validation-form\\\"> <input name=\\\"use-shipping-address\\\" type=\\\"checkbox\\\" data-control=\\\"addAddress\\\" id=\\\"useShippingAddress\\\" class=\\\"form-check-input\\\" checked=\\\"checked\\\"/> <label for=\\\"useShippingAddress\\\" class=\\\"form-check-label\\\" data-label=\\\"useShippingAddress\\\"></label> </div> <div data-region=\\\"useAddressText\\\"> <div>Address</div> <div data-region=\\\"useFormattedShippingAdress\\\"></div> </div> <div class=\\\"checkout-step__form js-address-validation-form\\\" data-region=\\\"addressForm\\\"> <div data-placeholder=\\\"addressForm\\\"></div> </div> <p class=\\\"mt-4\\\">*All fields are required </p> <div class=\\\"form-check pl-1 my-3\\\"> <input name=\\\"active-subscriptions\\\" type=\\\"checkbox\\\" id=\\\"active-subscriptions\\\" class=\\\"form-check-input\\\"/> <label for=\\\"active-subscriptions\\\" class=\\\"form-check-label\\\" data-label=\\\"subscriptions\\\">Update current subscriptions to this payment method</label> </div> <div class=\\\"form-check pl-1 my-3\\\"> <input name=\\\"default-payment\\\" type=\\\"checkbox\\\" id=\\\"default-payment\\\" class=\\\"form-check-input\\\"/> <label for=\\\"default-payment\\\" class=\\\"form-check-label\\\" data-label=\\\"payment\\\">Set as default payment method</label> </div> <div class=\\\"d-flex flex-column p-0 mt-3 align-items-center\\\"> <button type=\\\"button\\\" class=\\\"checkout-address-form__submit btn disabled\\\" id=\\\"savePayment\\\"> <span role=\\\"text\\\" class=\\\"position-relative\\\"> <span class=\\\"position-absolute ml-5\\\" id=\\\"paymentLoader\\\"></span> <span data-label=\\\"submit\\\"></span> </span> </button> <button type=\\\"button\\\" class=\\\"checkout-address-form__submit\\\" data-control=\\\"methodCancel\\\"> <span data-label=\\\"cancel\\\"></span> </button> </div> <p role=\\\"alert\\\" class=\\\"text-color-vca-red p-body-small mt-3 mb-0\\\" id=\\\"addPaymentFailure\\\" style=\\\"display:none\\\"></p> </div> </div> <div data-region=\\\"hidden-on-form\\\"> <div class=\\\"checkout-step__btn-wrapper\\\"> <a class=\\\"checkout-step__btn btn btn-sky -review\\\" aria-disabled=\\\"true\\\" data-control=\\\"review\\\"> <span class=\\\"position-relative\\\" role=\\\"text\\\"> <span class=\\\"checkout-step__loader\\\"> <span data-placeholder=\\\"loader\\\"></span> </span> <span data-label=\\\"review\\\"></span> </span> </a> <div class=\\\"checkout-step__message\\\"> <p class=\\\"checkout-step__error\\\" role=\\\"alert\\\" data-region=\\\"error\\\"></p> </div> </div> </div> <div class=\\\"d-md-none checkout__promo__note\\\" data-region=\\\"promotionsnote\\\"></div> </div> \";\n// Exports\nmodule.exports = code;","import template from './checkout-billing.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"cart-line -review\\\"> <div class=\\\"cart-line__col-left\\\"> <div class=\\\"cart-line__img\\\" data-region=\\\"image\\\"> </div> <div class=\\\"cart-line__details\\\"> <h2 class=\\\"cart-line__heading\\\" data-region=\\\"name\\\"> </h2> <ul class=\\\"cart-line__list\\\" data-region=\\\"attributes\\\"> <li class=\\\"cart-line__list-item\\\"> <b data-label=\\\"price\\\"></b> <span data-region=\\\"price\\\"></span> </li> </ul> <p class=\\\"cart-line__autoship\\\" data-region=\\\"autoship\\\"></p> <p class=\\\"cart-line__autoship\\\" data-region=\\\"frequency\\\"></p> </div> </div> <div class=\\\"cart-line__col-right\\\"> <div class=\\\"cart-line__pricing-controls\\\"> <div class=\\\"cart-line__price-wrapper\\\"> <p class=\\\"cart-line__price\\\" data-region=\\\"price\\\"></p> <p class=\\\"cart-line__strikethrough\\\" data-region=\\\"strikethrough\\\"> </p> </div> </div> </div> </div>\";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"<div id=\\\"addPaymentContainer\\\" class=\\\"checkout-address-form\\\"> <h2 class=\\\"checkout-address-form__heading\\\" data-label=\\\"heading\\\"></h2> <ul class=\\\"d-flex list-inline\\\" data-region=\\\"ccList\\\"> <li data-region=\\\"visa\\\"></li> <li data-region=\\\"discover\\\"></li> <li data-region=\\\"mastercard\\\"></li> <li data-region=\\\"amex\\\"></li> </ul> <div id=\\\"paymentFrameContainer\\\"></div> <div class=\\\"col-md-7 d-flex flex-column p-0 flex-sm-row\\\"> <button type=\\\"button\\\" class=\\\"checkout-address-form__submit btn btn-sky-outline-alt\\\" id=\\\"savePayment\\\"> <span role=\\\"text\\\" class=\\\"position-relative\\\"> <span class=\\\"position-absolute ml-n4\\\" id=\\\"paymentLoader\\\"></span> <span data-label=\\\"submit\\\"></span> </span> </button> <button type=\\\"button\\\" class=\\\"checkout-address-form__submit btn btn-sky-outline-alt ml-sm-3\\\" data-control=\\\"cancel\\\"> <span data-label=\\\"cancel\\\"></span> </button> </div> <p role=\\\"alert\\\" class=\\\"text-color-vca-red p-body-small mt-3 mb-0\\\" id=\\\"addPaymentFailure\\\" style=\\\"display:none\\\"></p> </div> \";\n// Exports\nmodule.exports = code;","import template from './checkout-payment-form.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"checkout-promotion\\\"> <form class=\\\"checkout-promotion__form\\\" method=\\\"POST\\\" novalidate data-control=\\\"form\\\"> <div class=\\\"checkout-promotion__fields\\\"> <label class=\\\"sr-only\\\" for=\\\"checkoutPromoCode\\\" data-label=\\\"code\\\"></label> <input class=\\\"checkout-promotion__input form-control\\\" type=\\\"text\\\" required data-control=\\\"input\\\"/> </div> <div class=\\\"checkout-promotion__submit\\\"> <button class=\\\"checkout-promotion__btn btn\\\" type=\\\"submit\\\" data-control=\\\"apply\\\"> <span data-label=\\\"apply\\\"></span> </button> </div> </form> <p class=\\\"checkout-promotion__error\\\" role=\\\"alert\\\" style=\\\"display:none\\\" data-region=\\\"error\\\"> Promo code required Promo code required Promo code required </p> <div class=\\\"mt-3\\\" style=\\\"display:none\\\" data-region=\\\"appliedPromo\\\"></div> </div> \";\n// Exports\nmodule.exports = code;","import template from './checkout-promo.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"checkout-review d-md-block d-none\\\"> <div class=\\\"checkout-review__left\\\"> <h2 class=\\\"checkout-review__heading\\\" id=\\\"checkoutReviewSummary_heading\\\" data-region=\\\"heading\\\"> <span data-label=\\\"orderSummary\\\"></span> </h2> </div> <div class=\\\"checkout-review__middle\\\"> <ul aria-labelledby=\\\"checkoutReviewSummary_heading\\\" data-region=\\\"list\\\"> <li class=\\\"checkout-review__item\\\"> <span class=\\\"checkout-review__title\\\" id=\\\"cartSummary_subtotal\\\" data-label=\\\"subtotal\\\"></span> <span class=\\\"checkout-review__desc\\\"> <span data-region=\\\"subtotal\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_subtotal\\\"></span> </span> </li> <li class=\\\"checkout-review__item\\\"> <span class=\\\"checkout-review__title\\\" id=\\\"cartSummary_shipping\\\" data-label=\\\"shipping\\\"></span> <span class=\\\"checkout-review__desc\\\"> <span data-region=\\\"shipping\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_shipping\\\"></span> </span> </li> <li class=\\\"checkout-review__item\\\"> <span class=\\\"checkout-review__title\\\" id=\\\"cartSummary_discounts\\\" data-label=\\\"discounts\\\"></span> <span class=\\\"checkout-review__desc\\\"> <span data-region=\\\"discounts\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_discounts\\\"></span> </span> </li> <li class=\\\"checkout-review__item\\\"> <span class=\\\"checkout-review__title\\\" id=\\\"cartSummary_tax\\\" data-label=\\\"tax\\\"></span> <span class=\\\"checkout-review__desc\\\"> <span data-region=\\\"tax\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_tax\\\"></span> </span> </li> </ul> <hr class=\\\"checkout-review__divider\\\"/> <ul aria-labelledby=\\\"checkoutReviewSummary_heading\\\" data-region=\\\"list\\\"> <li class=\\\"checkout-review__item -total\\\"> <span class=\\\"checkout-review__title\\\" id=\\\"cartSummary_total\\\" data-label=\\\"total\\\"></span> <span class=\\\"checkout-review__desc\\\"> <span data-region=\\\"total\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_total\\\"></span> </span> </li> </ul> </div> <div class=\\\"checkout-review__right\\\"> <div> <button type=\\\"button\\\" class=\\\"checkout-review__btn btn btn-sky\\\" data-control=\\\"checkout\\\"> <span class=\\\"position-relative\\\" role=\\\"text\\\"> <span class=\\\"checkout-review__loader\\\"> <span data-placeholder=\\\"loaderCheckout\\\"></span> </span> <span data-label=\\\"checkout\\\"></span> </span> </button> <p class=\\\"checkout-review__error\\\" role=\\\"alert\\\" data-region=\\\"error\\\"></p> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"<div class=\\\"checkout-step\\\"> <div class=\\\"checkout-selector\\\"> <h2 class=\\\"checkout-selector__label\\\" data-label=\\\"shippingAddress\\\"></h2> <div class=\\\"d-flex checkout-selector__wrapper bg-color-vca-powder p-2\\\"> <div class=\\\"checkout-selector__selector\\\"> <p type=\\\"text\\\" class=\\\"rounded-0 mb-0\\\" data-region=\\\"shippingAddress\\\"></p> <div class=\\\"checkout-selector__loader\\\"> <div data-loader=\\\"loader\\\"></div> </div> </div> <div class=\\\"checkout-selector__controls\\\"> <ul class=\\\"checkout-selector__list\\\" data-region=\\\"controls\\\"> <li class=\\\"checkout-selector__list-item\\\"> <div data-placeholder=\\\"editShippingAddress\\\"></div> </li> </ul> </div> </div> </div> <div class=\\\"checkout-selector -half py-2\\\"> <h2 class=\\\"checkout-selector__label\\\" data-label=\\\"shippingMethod\\\"></h2> <div class=\\\"d-flex checkout-selector__wrapper bg-color-vca-powder p-2\\\"> <div class=\\\"checkout-selector__selector\\\"> <p type=\\\"text\\\" class=\\\"rounded-0 mb-0\\\" data-region=\\\"shippingMethod\\\"></p> <div class=\\\"checkout-selector__loader\\\"> <div data-loader=\\\"loader\\\"></div> </div> </div> <div class=\\\"checkout-selector__controls\\\"> <ul class=\\\"checkout-selector__list\\\" data-region=\\\"controls\\\"> <li class=\\\"checkout-selector__list-item\\\"> <div data-placeholder=\\\"editShippingMethod\\\"></div> </li> </ul> </div> </div> </div> <div class=\\\"checkout-selector -half py-2\\\"> <h2 class=\\\"checkout-selector__label\\\" data-label=\\\"paymentMethod\\\"></h2> <div class=\\\"d-flex checkout-selector__wrapper bg-color-vca-powder p-2\\\"> <div class=\\\"checkout-selector__selector\\\"> <p type=\\\"text\\\" class=\\\"rounded-0 mb-0\\\" data-region=\\\"paymentMethod\\\"></p> <div class=\\\"checkout-selector__loader\\\"> <div data-loader=\\\"loader\\\"></div> </div> </div> <div class=\\\"checkout-selector__controls\\\"> <ul class=\\\"checkout-selector__list\\\" data-region=\\\"controls\\\"> <li class=\\\"checkout-selector__list-item\\\"> <div data-placeholder=\\\"editPaymentMethod\\\"></div> </li> </ul> </div> </div> </div> <div class=\\\"checkout-selector -half py-2\\\"> <h2 class=\\\"checkout-selector__label\\\" data-label=\\\"billingAddress\\\"></h2> <div class=\\\"d-flex checkout-selector__wrapper bg-color-vca-powder p-2\\\"> <div class=\\\"checkout-selector__selector\\\"> <p type=\\\"text\\\" class=\\\"rounded-0 mb-0\\\" data-region=\\\"billingAddress\\\"></p> <div class=\\\"checkout-selector__loader\\\"> <div data-loader=\\\"loader\\\"></div> </div> </div> <div class=\\\"checkout-selector__controls\\\"> <ul class=\\\"checkout-selector__list\\\" data-region=\\\"controls\\\"> <li class=\\\"checkout-selector__list-item\\\"> <div data-placeholder=\\\"editBillingAddress\\\"></div> </li> </ul> </div> </div> </div> <hr class=\\\"checkout-step__divider mt-0\\\"/> <div class=\\\"checkout-step__header\\\"> <h2 class=\\\"checkout-step__subheading\\\" data-label=\\\"items\\\"></h2> <div data-placeholder=\\\"editCart\\\"></div> </div> <div data-region=\\\"lines\\\"> <div class=\\\"text-center mt-3\\\"> <div data-loader=\\\"lines\\\"></div> </div> </div> <hr class=\\\"checkout-step__divider\\\"> <div data-placeholder=\\\"summary\\\"></div> </div>\";\n// Exports\nmodule.exports = code;","import template from './checkout-review.html';\r\n\r\nexport const link = ({ url, text }) => `\r\n <a href=\"${url}\" class=\"checkout-selector__btn\">\r\n ${text}\r\n </a>\r\n`;\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"checkout-step\\\"> <div class=\\\"checkout-selector\\\"> <label class=\\\"checkout-selector__label\\\" data-region=\\\"address\\\"> <span data-label=\\\"address\\\"></span> </label> <div class=\\\"checkout-selector__wrapper\\\"> <div class=\\\"checkout-selector__selector\\\"> <div data-placeholder=\\\"address\\\"></div> <div class=\\\"checkout-selector__loader\\\"> <div data-placeholder=\\\"addressLoader\\\"></div> </div> </div> <div class=\\\"checkout-selector__controls\\\"> <ul class=\\\"checkout-selector__list\\\" data-region=\\\"controls\\\"> <li class=\\\"checkout-selector__list-item\\\" data-region=\\\"edit\\\"> <button type=\\\"button\\\" class=\\\"checkout-selector__btn -disabled\\\" aria-disabled=\\\"true\\\" data-control=\\\"edit\\\"> <span data-label=\\\"edit\\\"></span> </button> </li> <li class=\\\"checkout-selector__list-item\\\"> <button type=\\\"button\\\" class=\\\"checkout-selector__btn -disabled\\\" aria-disabled=\\\"true\\\" data-control=\\\"add\\\"> <span data-label=\\\"add\\\"></span> </button> </li> </ul> </div> </div> </div> <div class=\\\"checkout-step__form\\\" data-region=\\\"form\\\"> <div data-placeholder=\\\"form\\\"></div> </div> <div data-region=\\\"hidden-on-form\\\"> <div class=\\\"checkout-selector -shipping-method\\\"> <div class=\\\"checkout-selector__wrapper\\\"> <label class=\\\"checkout-selector__label\\\" data-region=\\\"method\\\"> <span data-label=\\\"method\\\"></span> </label> <div class=\\\"checkout-selector__selector\\\"> <div data-placeholder=\\\"method\\\"></div> <div class=\\\"checkout-selector__loader\\\"> <div data-placeholder=\\\"methodLoader\\\"></div> </div> </div> </div> </div> </div> <hr class=\\\"checkout-step__divider\\\"/> <div data-region=\\\"hidden-on-form\\\"> <div class=\\\"checkout-step__btn-wrapper\\\"> <a class=\\\"checkout-step__btn btn btn-sky disabled\\\" aria-disabled=\\\"true\\\" data-control=\\\"next\\\"> <span class=\\\"position-relative\\\" role=\\\"text\\\"> <span class=\\\"checkout-step__loader\\\"> <span data-placeholder=\\\"nextLoader\\\"></span> </span> <span data-label=\\\"next\\\"></span> </span> </a> <div class=\\\"checkout-step__message\\\"> <p class=\\\"checkout-step__error\\\" role=\\\"alert\\\" data-region=\\\"error\\\"></p> </div> </div> </div> <div class=\\\"d-md-none checkout__promo__note\\\" data-region=\\\"promotionsnote\\\"></div> </div> \";\n// Exports\nmodule.exports = code;","import template from './checkout-shipping.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"cart-summary\\\"> <h2 class=\\\"cart-summary__heading\\\" id=\\\"cartSummary_heading\\\" data-region=\\\"heading\\\"> <span data-label=\\\"orderSummary\\\"></span> </h2> <ul aria-labelledby=\\\"cartSummary_heading\\\" data-region=\\\"list\\\"> <li class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_subtotal\\\" data-label=\\\"subtotal\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"subtotal\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_subtotal\\\"></span> </span> </li> <li class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_shipping\\\" data-label=\\\"shipping\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"shipping\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_shipping\\\"></span> </span> </li> <li> <div class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_discounts\\\" data-label=\\\"discounts\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"discounts\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_discounts\\\"></span> </span> </div> <div style=\\\"display:none\\\" data-region=\\\"promo\\\"> <div class=\\\"cart-summary__item\\\"> <div class=\\\"flex-1\\\"> <div data-placeholder=\\\"appliedPromo\\\"></div> </div> </div> </div> </li> <li class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_tax\\\" data-label=\\\"tax\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"tax\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_tax\\\"></span> </span> </li> </ul> <hr class=\\\"cart-summary__divider\\\"/> <ul aria-labelledby=\\\"cartSummary_heading\\\" data-region=\\\"list\\\"> <li class=\\\"cart-summary__item -total\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_total\\\" data-label=\\\"total\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"total\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_total\\\"></span> </span> </li> </ul> <div class=\\\"mt-5\\\"> <div data-placeholder=\\\"promo\\\"></div> </div> <hr class=\\\"cart-summary__divider\\\"/> <div style=\\\"display:none\\\" data-region=\\\"upsellContainer\\\"> <div class=\\\"cart-summary__upsell\\\" data-region=\\\"upsell\\\"></div> <a class=\\\"cart-summary__continue\\\" data-region=\\\"continueShopping\\\"> <span data-label=\\\"continueShopping\\\"></span> </a> </div> <button type=\\\"button\\\" class=\\\"cart-summary__btn btn btn-sky disabled mt-0\\\" data-control=\\\"checkout\\\" aria-disabled=\\\"true\\\" aria-live=\\\"polite\\\"> <span class=\\\"position-relative\\\" role=\\\"text\\\"> <span class=\\\"cart-summary__loader\\\"> <span data-placeholder=\\\"loaderCheckout\\\"></span> </span> <span data-label=\\\"checkout\\\"></span> </span> </button> <p class=\\\"cart-summary__error\\\" role=\\\"alert\\\" data-region=\\\"error\\\"></p> </div> \";\n// Exports\nmodule.exports = code;","import template from './checkout-summary-promos.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"cart-summary\\\"> <h2 class=\\\"cart-summary__heading\\\" id=\\\"cartSummary_heading\\\" data-region=\\\"heading\\\"> <span data-label=\\\"orderSummary\\\"></span> </h2> <ul aria-labelledby=\\\"cartSummary_heading\\\" data-region=\\\"list\\\"> <li class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_subtotal\\\" data-label=\\\"subtotal\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"subtotal\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_subtotal\\\"></span> </span> </li> <li class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_shipping\\\" data-label=\\\"shipping\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"shipping\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_shipping\\\"></span> </span> </li> <li class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_discounts\\\" data-label=\\\"discounts\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"discounts\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_discounts\\\"></span> </span> </li> <li class=\\\"cart-summary__item\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_tax\\\" data-label=\\\"tax\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"tax\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_tax\\\"></span> </span> </li> </ul> <hr class=\\\"cart-summary__divider\\\"/> <ul aria-labelledby=\\\"cartSummary_heading\\\" data-region=\\\"list\\\"> <li class=\\\"cart-summary__item -total\\\"> <span class=\\\"cart-summary__title\\\" id=\\\"cartSummary_total\\\" data-label=\\\"total\\\"></span> <span class=\\\"cart-summary__desc\\\"> <span data-region=\\\"total\\\"></span> <span data-region=\\\"loader\\\" data-describedby=\\\"#cartSummary_total\\\"></span> </span> </li> </ul> <div style=\\\"display:none\\\" data-region=\\\"upsellContainer\\\"> <hr class=\\\"cart-summary__divider\\\"/> <div class=\\\"cart-summary__upsell\\\" data-region=\\\"upsell\\\"></div> <a class=\\\"cart-summary__continue\\\" data-region=\\\"continueShopping\\\"> <span data-label=\\\"continueShopping\\\"></span> </a> </div> </div> \";\n// Exports\nmodule.exports = code;","import template from './checkout-summary.html';\r\n\r\nexport default template;\r\n","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.CoveoAnalytics = (function($) {\r\n function initCoveoUa() {\r\n //TODO: Move this production check to server side.\r\n const productionDomain = 'vcahospitals.com';\r\n\r\n // Get the current hostname\r\n const currentDomain = window.location.hostname;\r\n\r\n // Initialize the apikey variable and endpoint variable\r\n let apikey;\r\n let endPoint;\r\n\r\n // Check if the current domain is production\r\n if (currentDomain === productionDomain) {\r\n apikey = 'xxd1ce71b0-f86d-4aff-8383-55ab674e70cb';\r\n endPoint =\r\n 'https://vcaveterinarycentersofamericaproductionlbktxg48.analytics.org.coveo.com';\r\n } else {\r\n apikey = 'xx816eb3e5-ee77-4b22-9a22-8266d9a882fb';\r\n endPoint =\r\n 'https://vcaveterinarycentersofamericanonproduction1p8dkzmph.analytics.org.coveo.com';\r\n }\r\n\r\n (function(c, o, v, e, O, u, a) {\r\n a = 'coveoua';\r\n c[a] =\r\n c[a] ||\r\n function() {\r\n (c[a].q = c[a].q || []).push(arguments);\r\n };\r\n c[a].t = Date.now();\r\n u = o.createElement(v);\r\n u.async = 1;\r\n u.src = e;\r\n O = o.getElementsByTagName(v)[0];\r\n O.parentNode.insertBefore(u, O);\r\n })(\r\n window,\r\n document,\r\n 'script',\r\n 'https://static.cloud.coveo.com/coveo.analytics.js/2/coveoua.js'\r\n );\r\n coveoua('set', 'currencyCode', 'USD');\r\n\r\n coveoua('init', apikey, endPoint);\r\n }\r\n\r\n return {\r\n initCoveoUa: initCoveoUa,\r\n };\r\n})(jQuery);\r\n\r\n// window.VCA.CoveoAnalytics.initCoveoUa (); to call this function in another page\r\n","import isExperienceEditor from '@utils/is-experience-editor';\r\nimport MetadataUtils from '../utils/metadata-utils';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.CoveoScripts = (function($) {\r\n var ui = {};\r\n\r\n function cacheUI() {}\r\n\r\n function init() {\r\n // CoveoRecommendation is for Related KYP articles\r\n if ($('.CoveoSearchInterface, .CoveoRecommendation').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindCoveoClick();\r\n //bindCoveoPillSlider();\r\n toggleSpeciesSelectClass();\r\n closeSpeciesSelectClass();\r\n toggleTopicSelectClass();\r\n closeTopicSelectClass();\r\n //rebindCoveoPillSlider();\r\n wrapFiltersLinks();\r\n //tryUpdateHospitalArticleLinks();\r\n offClickCloseSelect();\r\n //pagerRefreshLinks();\r\n //bindFacetClick();\r\n //bindSearchClick();\r\n initArticleLinks();\r\n }\r\n\r\n function initArticleLinks() {\r\n var root = document.querySelector('.CoveoSearchInterface');\r\n if (root == null) {\r\n root = document.querySelector('.CoveoRecommendation');\r\n }\r\n\r\n Coveo.$$(root).on('newQuery', function(e, args) {\r\n let queryBuilder = args.queryBuilder;\r\n });\r\n\r\n Coveo.$$(root).on('beforeInitialization', function() {\r\n var originalUrl = document.location;\r\n var queryStr = document.location.search.replace('?', '');\r\n if (queryStr) {\r\n queryStr =\r\n document.location.hash !== ''\r\n ? '&' + queryStr\r\n : '#' + queryStr;\r\n var url =\r\n originalUrl.pathname +\r\n document.location.search +\r\n document.location.hash +\r\n queryStr;\r\n history.replaceState(null, '', url);\r\n }\r\n });\r\n\r\n Coveo.$$(root).on('buildingQuery', function(e, args) {\r\n UpdateArticleLinksHost();\r\n let queryBuilder = args.queryBuilder;\r\n updateResultPaginationLinks();\r\n tryUpdateHospitalArticleLinks();\r\n paginationLinkClick();\r\n wrapFiltersLinks();\r\n });\r\n\r\n Coveo.$$(root).on('duringQuery', function(e, args) {\r\n let argQuery = args.query;\r\n let argQueryB = args.queryBuilder;\r\n });\r\n\r\n // Coveo.$$(root).on('querySuccess', function() {\r\n // var canonicalUrlTag = document.querySelector(\r\n // \"link[rel='canonical']\"\r\n // );\r\n // if (canonicalUrlTag === null) {\r\n // let metadataUtilsObj = new MetadataUtils();\r\n // canonicalUrlTag = metadataUtilsObj.CreateCanonicalUrlMetaElement();\r\n // }\r\n\r\n // if (canonicalUrlTag) {\r\n // var documentUrl = document.URL;\r\n // if (documentUrl.includes('?utm_source')) {\r\n // canonicalUrlTag.setAttribute(\r\n // 'href',\r\n // documentUrl.split('?')[0]\r\n // );\r\n // } else {\r\n // canonicalUrlTag.setAttribute('href', documentUrl);\r\n // }\r\n // }\r\n\r\n // //35786: [SEO] Update Canonical Tags of Hospital-Level Know Your Pet Pages\r\n // if (window.location.pathname.length > 1) {\r\n // var pathname = window.location.pathname;\r\n // if (\r\n // pathname.includes('/know-your-pet') &&\r\n // !pathname.startsWith('/know-your-pet')\r\n // ) {\r\n // var canonicalTag = document.querySelectorAll(\r\n // \"link[rel='canonical']\"\r\n // );\r\n // for (var i = 0; i < canonicalTag.length; i++) {\r\n // canonicalTag[i].setAttribute(\r\n // 'href',\r\n // window.location.origin +\r\n // pathname.replace(\r\n // pathname.substring(\r\n // 0,\r\n // pathname.indexOf('/know-your-pet')\r\n // ),\r\n // ''\r\n // )\r\n // );\r\n // }\r\n // }\r\n // }\r\n // });\r\n\r\n // Code introduced as per the Coveo Audit of the VCA Coveo integration.\r\n // This is to introduce additional data to the Search Click in the JS UI\r\n Coveo.$$(root).on('changeAnalyticsCustomData', function(e, args) {\r\n //console.log(args);\r\n //console.log(args.type);\r\n //console.log(\"changeAnalyticsCustomData\");\r\n var urlParams = new URLSearchParams(window.location.search);\r\n //console.log(urlParams);\r\n var utmSourceValue = urlParams.get('utm_source');\r\n if (\r\n typeof utmSourceValue !== 'undefined' &&\r\n utmSourceValue !== '' &&\r\n utmSourceValue !== null\r\n ) {\r\n args.metaObject['utm_source'] = utmSourceValue;\r\n }\r\n\r\n if (args.type === 'ClickEvent') {\r\n // console.log(\"args.type === 'ClickEvent'\");\r\n // console.log(args.resultData);\r\n args.metaObject['customData'] =\r\n \"customData':{'siteName':'vca',}\";\r\n args.metaObject['product_variant'] =\r\n args.resultData.raw.productid;\r\n args.metaObject['product_price'] =\r\n args.resultData.raw.listprice;\r\n args.metaObject['product_ppcprice'] =\r\n args.resultData.raw.lowprice;\r\n args.metaObject['product_name'] =\r\n args.resultData.raw.productname;\r\n args.metaObject['product_brand'] = args.resultData.raw.brand;\r\n var productCategory = '';\r\n if (\r\n args.resultData.raw.categorylevel4 !== 'undefined' &&\r\n args.resultData.raw.categorylevel4 !== null &&\r\n args.resultData.raw.categorylevel4.length > 0\r\n ) {\r\n productCategory = args.resultData.raw.categorylevel4;\r\n } else if (\r\n args.resultData.raw.categorylevel3 !== 'undefined' &&\r\n args.resultData.raw.categorylevel3 !== null &&\r\n args.resultData.raw.categorylevel3.length > 0\r\n ) {\r\n productCategory = args.resultData.raw.categorylevel3;\r\n }\r\n args.metaObject['product_category'] = productCategory; //(typeof args.resultData.raw.productcategory !== 'undefined' && args.resultData.raw.productcategory !== null && args.resultData.raw.productcategory.length > 0) ? args.resultData.raw.productcategory[args.resultData.raw.productcategory.length -1].replaceAll('|', '/') : '';\r\n }\r\n });\r\n }\r\n\r\n function paginationLinkClick() {\r\n setTimeout(() => {\r\n if ($('.coveo-pager-anchor').length != 0) {\r\n $('.coveo-pager-anchor').on('click', function(e) {\r\n e.preventDefault();\r\n });\r\n } else {\r\n paginationLinkClick();\r\n }\r\n }, 1000);\r\n }\r\n\r\n function updateResultPaginationLinks() {\r\n setTimeout(() => {\r\n if ($('.coveo-pager-anchor').length != 0) {\r\n $('.coveo-pager-anchor').each(function(index, element) {\r\n var count = $('.CoveoSearchInterface').attr(\r\n 'data-results-per-page'\r\n );\r\n // console.log('count', count)\r\n var pageSet = $(this).html() * count - count;\r\n if ($(this).is('li')) {\r\n if ($(this).hasClass('coveo-pager-next')) {\r\n pageSet =\r\n $('.coveo-active .coveo-pager-anchor').html() *\r\n count;\r\n } else {\r\n pageSet =\r\n $('.coveo-active .coveo-pager-anchor').html() *\r\n count -\r\n count * 2;\r\n }\r\n }\r\n\r\n var originalUrl = document.location;\r\n var hash = document.location.hash;\r\n var pageSetUrl;\r\n\r\n if (hash) {\r\n var params =\r\n hash.indexOf('#') == 0\r\n ? hash.replace(/#/g, '')\r\n : params;\r\n var paramsObj = params\r\n .split('&')\r\n .reduce(function(res, item) {\r\n var parts = item.split('=');\r\n res[parts[0]] = parts[1];\r\n return res;\r\n }, {});\r\n\r\n if (paramsObj.first) {\r\n paramsObj.first = pageSet;\r\n\r\n var queryString = Object.keys(paramsObj)\r\n .map(key => key + '=' + paramsObj[key])\r\n .join('&');\r\n pageSetUrl = pageSetUrl =\r\n originalUrl.pathname +\r\n '?' +\r\n queryString +\r\n '#' +\r\n queryString;\r\n } else {\r\n pageSetUrl =\r\n originalUrl.pathname +\r\n '?first=' +\r\n pageSet +\r\n '&' +\r\n params +\r\n '#first=' +\r\n pageSet +\r\n '&' +\r\n params;\r\n var url = new URL(document.location.href);\r\n var search_params = url.searchParams;\r\n search_params.delete('first');\r\n url.search = search_params;\r\n }\r\n } else {\r\n pageSetUrl =\r\n originalUrl.pathname +\r\n '?first=' +\r\n pageSet +\r\n '#first=' +\r\n pageSet;\r\n }\r\n\r\n if ($(this).is('li')) {\r\n $(this)\r\n .find('a')\r\n .attr('href', pageSetUrl);\r\n } else {\r\n $(this).attr('href', pageSetUrl);\r\n }\r\n });\r\n } else {\r\n updateResultPaginationLinks();\r\n }\r\n }, 500);\r\n }\r\n\r\n function tryUpdateHospitalArticleLinks() {\r\n setTimeout(() => {\r\n if ($('.CoveoResultLink').length != 0) {\r\n var hospitalName = $(this).attr('data-attr-hospitalName');\r\n if (hospitalName != '') {\r\n updateHospitalArticleLinks();\r\n pagerRefreshLinks();\r\n }\r\n } else {\r\n tryUpdateHospitalArticleLinks();\r\n }\r\n }, 1000);\r\n }\r\n\r\n function updateHospitalArticleLinks() {\r\n var updateLink = $('.CoveoResultLink').each(function(index, element) {\r\n var kypContainer = $('.kypSearchResultContainer');\r\n var originalUrl = $(this).attr('href');\r\n var hospitalName = $(this).attr('data-attr-hospitalName');\r\n if (kypContainer.length == 0) {\r\n return;\r\n }\r\n var hostname = $(location).attr('hostname');\r\n var url = new URL(originalUrl);\r\n if (hospitalName != '') {\r\n hospitalName = '/' + hospitalName;\r\n var protocol = $(location).attr('protocol');\r\n\r\n if (url.hostname != hostname) {\r\n originalUrl = originalUrl.replace(\r\n url.hostname,\r\n hospitalName\r\n );\r\n }\r\n\r\n var newUrl = originalUrl\r\n .replace(protocol + '//', '')\r\n .replace(hostname, hospitalName)\r\n .toLowerCase();\r\n\r\n $(this).attr('href', newUrl);\r\n } else {\r\n if (url.hostname != hostname) {\r\n originalUrl = originalUrl.replace(url.hostname, hostname);\r\n $(this).attr('href', originalUrl);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // KYP articles come with US domain from Coveo so we need to update them for Vca Canada\r\n function UpdateArticleLinksHost() {\r\n setTimeout(() => {\r\n if (\r\n $('a.coveo-search-list-item__title, a.CoveoResultLink')\r\n .length != 0\r\n ) {\r\n $('a.coveo-search-list-item__title, a.CoveoResultLink').each(\r\n function(index, element) {\r\n var hostname = $(location).attr('hostname');\r\n var originalUrl = $(this).attr('href');\r\n if (originalUrl.startsWith('http')) {\r\n var url = new URL(originalUrl);\r\n if (url.hostname != hostname) {\r\n originalUrl = originalUrl.replace(\r\n url.hostname,\r\n hostname\r\n );\r\n $(this).attr('href', originalUrl);\r\n }\r\n }\r\n }\r\n );\r\n }\r\n }, 1000);\r\n }\r\n\r\n function pagerRefreshLinks() {\r\n setTimeout(() => {\r\n if ($('.CoveoResultLink').length != 0) {\r\n var hospitalName = $(this).attr('data-attr-hospitalName');\r\n if (hospitalName != '') {\r\n $('.coveo-pager-anchor').on('click', function(e) {\r\n tryUpdateHospitalArticleLinks();\r\n });\r\n }\r\n } else {\r\n pagerRefreshLinks();\r\n }\r\n }, 1000);\r\n }\r\n\r\n function bindSearchClick() {\r\n setTimeout(() => {\r\n if ($('.CoveoSearchButton').length != 0) {\r\n $('.CoveoSearchButton').on('click', function(e) {\r\n tryUpdateHospitalArticleLinks();\r\n });\r\n $('.magic-box-input')\r\n .find(':input')\r\n .keyup(function(e) {\r\n console.log('search input clicked');\r\n console.log(e.key + ' + ' + e.keyCode);\r\n initEnter();\r\n if (e.key === 'Enter' || e.keyCode === 13) {\r\n e.preventDefault();\r\n console.log('search input clicked');\r\n console.log(e.key + ' + ' + e.keyCode);\r\n tryUpdateHospitalArticleLinks();\r\n }\r\n });\r\n } else {\r\n bindSearchClick();\r\n }\r\n }, 1000);\r\n }\r\n\r\n function bindFacetClick() {\r\n setTimeout(() => {\r\n if ($('.coveo-facet-value').length != 0) {\r\n $('.coveo-facet-values, .coveo-facet-header-eraser').on(\r\n 'click',\r\n function(e) {\r\n tryUpdateHospitalArticleLinks();\r\n }\r\n );\r\n } else {\r\n bindFacetClick();\r\n }\r\n }, 1000);\r\n }\r\n\r\n function bindCoveoClick() {\r\n $('.js-load-more-articles').on('click', function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n var i = $('#coveoaeead5d3').attr('data-results-per-page');\r\n Coveo.$$('#coveofa66f3ab').coveo('displayMoreResults', parseInt(i));\r\n });\r\n }\r\n\r\n /* function bindCoveoPillSlider() {\r\n setTimeout(() => { \r\n console.log('test');\r\n var coveoSlider = $('div[data-class=\"topic\"] ul.coveo-facet-values').each(function (index, element) {\r\n $(this).addClass('js-coveo-pill-slider' + index + ' dark');\r\n var item_length = $('.js-coveo-pill-slider' + index + ' > li').length;\r\n console.log(item_length);\r\n if(item_length > 1 && !isExperienceEditor) {\r\n $('.js-coveo-pill-slider' + index).slick({\r\n variableWidth: true,\r\n autoplay: false,\r\n infinite: false,\r\n rows: 0,\r\n speed: 100,\r\n arrows: true,\r\n dots: false,\r\n slidesToScroll: 1,\r\n outerEdgeLimit: true,\r\n draggable: true,\r\n swipeToSlide: true\r\n });\r\n }\r\n });\r\n }, 5000);\r\n } */\r\n\r\n function wrapFiltersLinks() {\r\n setTimeout(() => {\r\n var wrapLink = $(\r\n 'div[data-class=\"topic\"] .coveo-facet-value-caption'\r\n ).each(function(index, element) {\r\n var value = $(this).attr('title');\r\n value = value\r\n .replace(/&\\s+/g, '')\r\n .replace(/\\s+/g, '-')\r\n .toLowerCase();\r\n var url = '/know-your-pet/topics/' + value;\r\n $(this).wrap(\r\n \"<a class='new-coveo-link' href='\" + url + \"'></a>\"\r\n );\r\n });\r\n }, 5000);\r\n }\r\n\r\n function toggleSpeciesSelectClass() {\r\n $(\"div[data-class='pet-type']\").on('click', function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n $(this).toggleClass('open');\r\n $(\"div[data-class='topic']\").removeClass('open');\r\n });\r\n }\r\n\r\n function closeSpeciesSelectClass() {\r\n $(\"div[data-class='pet-type'] .coveo-facet-value-label\").on(\r\n 'click',\r\n function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n $(\"div[data-class='pet-type']\").removeClass('open');\r\n $(\"div[data-class='topic']\").removeClass('open');\r\n }\r\n );\r\n }\r\n\r\n function toggleTopicSelectClass() {\r\n $(\"div[data-class='topic']\").on('click', function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n $(this).toggleClass('open');\r\n $(\"div[data-class='pet-type']\").removeClass('open');\r\n });\r\n }\r\n\r\n function closeTopicSelectClass() {\r\n $(\"div[data-class='topic'] .coveo-facet-value-label\").on(\r\n 'click',\r\n function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n $(\"div[data-class='pet-type']\").removeClass('open');\r\n $(\"div[data-class='topic']\").removeClass('open');\r\n }\r\n );\r\n }\r\n\r\n function offClickCloseSelect() {\r\n $(window).on('click', function(e) {\r\n $(\"div[data-class='pet-type']\").removeClass('open');\r\n $(\"div[data-class='topic']\").removeClass('open');\r\n });\r\n }\r\n\r\n /* function rebindCoveoPillSlider() {\r\n $(document).on(\"click\", \"div[data-class='topic'] li\", function (e) {\r\n console.log('clicked');\r\n setTimeout(() => { \r\n console.log('rebinded');\r\n $('.js-coveo-pill-slider0').slick('unslick');\r\n $('.js-coveo-pill-slider0').slick({\r\n variableWidth: true,\r\n autoplay: false,\r\n infinite: false,\r\n rows: 0,\r\n speed: 100,\r\n arrows: true,\r\n dots: false,\r\n slidesToScroll: 1,\r\n outerEdgeLimit: true,\r\n draggable: true,\r\n swipeToSlide: true\r\n });\r\n }, 3000);\r\n });\r\n } */\r\n\r\n return {\r\n init: init,\r\n };\r\n})(jQuery);\r\n\r\n$(function() {\r\n VCA.CoveoScripts.init();\r\n});\r\n","var VCA = VCA || {};\r\n\r\nVCA.CoveoScripts = (function ($) {\r\n function init() {\r\n var root = document.querySelector('.CoveoSearchInterface');\r\n if (root == null) {\r\n root = document.querySelector('.CoveoRecommendation');\r\n }\r\n if(root){\r\n updateCoveoQueryString();\r\n Coveo.$$(root).on('querySuccess', function (e, args) {\r\n updateCoveoQueryString();\r\n });\r\n }\r\n }\r\n\r\n function updateCoveoQueryString() {\r\n\r\n setTimeout(() => {\r\n if ($('.coveo-pager-list-item-text').length != 0) {\r\n $('.coveo-pager-list-item-text').each(function (index, element) {\r\n let href = $(this).attr('href');\r\n if(href){\r\n $(this).attr('href', href.toLowerCase());\r\n }\r\n });\r\n } else {\r\n updateCoveoQueryString();\r\n }\r\n const $resultColumn = $('.coveo-results-column');\r\n if ($resultColumn.hasClass('coveo-no-results')) {\r\n $resultColumn.show();\r\n $resultColumn.addClass('d-block mw-100')\r\n const $querySummary = $resultColumn.find('.CoveoQuerySummary');\r\n const noResultsMessage = $querySummary.data('no-results-found-message');\r\n $querySummary.find('.coveo-query-summary-no-results-string').text(noResultsMessage);\r\n $resultColumn.find('.js-vca-coveo-dropdown-button').addClass('hidden');\r\n }\r\n }, 1000);\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.CoveoScripts.init();\r\n});","import AjaxLoader from '../ajax-loader/ajax-loader';\r\n\r\nconst BS_CLASS_NAME_POSITION_ABSOLUTE = 'position-absolute';\r\nconst BS_CLASS_NAME_POSITION_RELATIVE = 'position-relative';\r\nconst BS_CLASS_NAME_WIDTH_FULL = 'w-100';\r\n\r\nconst CLASS_NAME_OPACITY_0 = 'opacity-0';\r\n\r\nfunction setupLoadingSpinner($, submit, form) {\r\n const loader = new AjaxLoader(null, {\r\n light: true,\r\n size: 'xs'\r\n });\r\n\r\n const $submit = $(submit);\r\n const $form = $(form);\r\n\r\n const $container = $('<div></div>').addClass(BS_CLASS_NAME_POSITION_RELATIVE).attr('role', 'text');\r\n const $loader = $('<div></div>').addClass([BS_CLASS_NAME_POSITION_ABSOLUTE, BS_CLASS_NAME_WIDTH_FULL]).html(loader.render());\r\n const $content = $('<div></div>').html($submit.html());\r\n\r\n $container.append([ $loader, $content ]);\r\n $submit.html($container);\r\n\r\n $form.submit(() => {\r\n if($form.valid()) {\r\n $submit.prop('disabled', true);\r\n $content.addClass(CLASS_NAME_OPACITY_0);\r\n loader.active = true;\r\n }\r\n });\r\n}\r\n\r\n$(() => {\r\n const els = document.querySelectorAll('.js-sc-form-submit');\r\n els.forEach((el) => {\r\n const $submit = $(el);\r\n const $form = $submit.closest('form[data-ajax=\"true\"]');\r\n\r\n if(window.$ && window.$.fn.validate && $form.length) {\r\n setupLoadingSpinner(window.$, $submit.get(0), $form.get(0));\r\n }\r\n });\r\n});\r\n","import AjaxLoader from '../ajax-loader/ajax-loader';\r\n\r\nconst BS_CLASS_NAME_POSITION_ABSOLUTE = 'position-absolute';\r\nconst BS_CLASS_NAME_POSITION_RELATIVE = 'position-relative';\r\nconst BS_CLASS_NAME_WIDTH_FULL = 'w-100';\r\nconst BS_CLASS_NAME_TARGET_LOADER = 'js-btn-loader';\r\nconst BS_CLASS_NAME_TARGET_CONTENT = 'js-btn-text';\r\nconst BS_CLASS_NAME_ACTIVE = '-active';\r\n\r\nconst CLASS_NAME_OPACITY_0 = 'opacity-0';\r\n\r\nfunction setupLoadingSpinner(submit) {\r\n const loader = new AjaxLoader(null, {\r\n light: true,\r\n size: 'xs'\r\n });\r\n\r\n const $submit = $(submit);\r\n\r\n const $container = $('<div></div>').addClass(BS_CLASS_NAME_POSITION_RELATIVE).attr('role', 'text');\r\n const $loader = $('<div></div>').addClass([BS_CLASS_NAME_POSITION_ABSOLUTE, BS_CLASS_NAME_WIDTH_FULL, BS_CLASS_NAME_TARGET_LOADER]).html(loader.render());\r\n const $content = $('<div></div>').addClass([BS_CLASS_NAME_TARGET_CONTENT]).html($submit.html());\r\n\r\n $container.append([ $loader, $content ]);\r\n $submit.html($container);\r\n}\r\n\r\nfunction startLoadingSpinner(submit){\r\n const $submit = $(submit);\r\n $submit.prop('disabled', true);\r\n $submit.find('.' + BS_CLASS_NAME_TARGET_CONTENT).addClass(CLASS_NAME_OPACITY_0);\r\n $submit.find('.ajax-loader__main').addClass(BS_CLASS_NAME_ACTIVE);\r\n}\r\n\r\nfunction stopLoadingSpinner(submit){\r\n const $submit = $(submit);\r\n $submit.prop('disabled', false);\r\n $submit.find('.' + BS_CLASS_NAME_TARGET_CONTENT).removeClass(CLASS_NAME_OPACITY_0);\r\n $submit.find('.ajax-loader__main').removeClass(BS_CLASS_NAME_ACTIVE);\r\n}\r\n\r\nexport {setupLoadingSpinner, startLoadingSpinner, stopLoadingSpinner}","function formattedDateTime($lastUpdate) {\r\n const timeElapsed = Date.now();\r\n const today = new Date(timeElapsed);\r\n const currentDay = today.toLocaleDateString();\r\n const currentHours = today.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true })\r\n $lastUpdate.text(`${currentDay} ${currentHours}`);\r\n}\r\n\r\nfunction getTickToHours(time) {\r\n let num = time;\r\n let hours = (num / 60);\r\n let rhours = Math.floor(hours);\r\n let minutes = (hours - rhours) * 60;\r\n let rminutes = Math.round(minutes);\r\n\r\n if (rhours < 1) {\r\n return `${rminutes} minutes`;\r\n } else if (rhours == 1) {\r\n return `${rhours} hour and ${rminutes} minutes`;\r\n } else {\r\n return `${rhours} hours and ${rminutes} minutes`;\r\n }\r\n}\r\n\r\nfunction getTickToHoursShort(time) {\r\n let num = time;\r\n let hours = (num / 60);\r\n let rhours = Math.floor(hours);\r\n let minutes = (hours - rhours) * 60;\r\n let rminutes = Math.round(minutes);\r\n\r\n if (rhours < 1) {\r\n return `${rminutes} minutes`;\r\n }\r\n else {\r\n return rminutes > 0 ? `${rhours}h ${rminutes}m` : `${rhours}h`;\r\n }\r\n}\r\n\r\nexport {\r\n formattedDateTime,\r\n getTickToHours,\r\n getTickToHoursShort\r\n}","import ApiService from '@api/api-service';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.NewClientFirstExam = (function ($) {\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n ui.$form = $('.nca-exam');\r\n }\r\n\r\n function init() {\r\n if ($('.nca-exam').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindFetchCouponClick();\r\n }\r\n\r\n function bindFetchCouponClick() {\r\n ui.$form.on('click', '.js-nca-exam-submit', function (e) {\r\n e.preventDefault();\r\n if (!checkform()) {\r\n return;\r\n } \r\n else {\r\n postFormData();\r\n }\r\n });\r\n }\r\n\r\n function checkform() {\r\n var mailFormat = /^[a-zA-Z0-9_.]+@[a-zA-Z0-9\\-]+\\.[a-zA-Z]+$/;\r\n var phoneReg = /^[2-9]\\d{9}$/;\r\n var textReg = /^(?=.{2,60}$)[a-zA-Z]+(?:[-'\\s.][a-zA-Z]+)*$/;\r\n var zipReg = /^\\d{5}(-\\d{4})?$/;\r\n \r\n let valid = true;\r\n \r\n $('.nca-exam .form-wrapper input').each(function () {\r\n let el = $(this);\r\n let elmId = el.attr(\"id\");\r\n let value = el.val().trim();\r\n let errorMessage = '';\r\n \r\n if (elmId === 'phone') {\r\n if (!phoneReg.test(value)) {\r\n errorMessage = value ? 'Please enter a valid phone number' : 'Please enter a phone number';\r\n }\r\n } else if (elmId === 'email') {\r\n if (!mailFormat.test(value)) {\r\n errorMessage = value ? 'Please enter a valid email' : 'Please enter an email';\r\n }\r\n } else if (elmId === 'zip') {\r\n if (!zipReg.test(value)) {\r\n errorMessage = value ? 'Please enter a valid ZIP code' : 'Please enter a ZIP code';\r\n }\r\n } else if (!textReg.test(value)) {\r\n if (elmId === 'fname') {\r\n errorMessage = value ? 'Please enter a valid first name' : 'Please enter your first name';\r\n } else if (elmId === 'lname') {\r\n errorMessage = value ? 'Please enter a valid last name' : 'Please enter your last name';\r\n }\r\n }\r\n \r\n if (errorMessage) {\r\n el.addClass('error').closest('.form-label-group').addClass('error');\r\n el.siblings('.error-message').text(errorMessage);\r\n valid = false;\r\n } else {\r\n el.removeClass('error').closest('.form-label-group').removeClass('error');\r\n el.siblings('.error-message').text('');\r\n }\r\n });\r\n \r\n $('.js-client-form .select-box__select').each(function () {\r\n let el = $(this);\r\n let value = el.val();\r\n \r\n if (!value) {\r\n el.addClass('error').closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error').closest('.form-label-group').removeClass('error');\r\n }\r\n });\r\n \r\n return valid;\r\n }\r\n\r\n\r\n async function postFormData() {\r\n\r\n const url = '/api/NCA/SubmitNCAForm';\r\n let api = new ApiService(url);\r\n var $firstName = ui.$form.find('#fname').val();\r\n var $lastName = ui.$form.find('#lname').val();\r\n var $email = ui.$form.find('#email').val();\r\n var $phone = ui.$form.find('#phone').val().replace(/[- ()\\\\s-]+/gi, \"\");\r\n var $zip = ui.$form.find('#zip').val();\r\n var $refUrl = document.referrer;\r\n var $currUrl = window.location.href;\r\n var redirect = ui.$form.find('#nca-redirectlink').val();\r\n var $hospitalsettingID = ui.$form.find('#hospital-settingId').val();\r\n var $hospitalsiteID = ui.$form.find('#hospital-siteId').val(); \r\n let $ShowOabFaa = ui.$form.find('#hospital-showoabfaa').val();\r\n\r\n let params = {\r\n \"firstName\": $firstName,\r\n \"lastName\": $lastName,\r\n \"email\": $email,\r\n \"phone\": $phone,\r\n \"zip\": $zip,\r\n \"refUrl\": $refUrl,\r\n \"currUrl\": $currUrl,\r\n \"RedirectionUrl\": redirect,\r\n \"HospitaSettinglId\": $hospitalsettingID,\r\n \"HospitalSiteId\": $hospitalsiteID,\r\n \"ShowOabFaa\": $ShowOabFaa\r\n }\r\n\r\n const { data, success, error } = await api.post(params);\r\n \r\n if (data.LeadId != '' && data.LeadId != null) {\r\n localStorage.setItem('expiry', new Date().getTime() + 15 * 60 * 1000);\r\n localStorage.setItem('NcaUserDetails', JSON.stringify(params)); \r\n UpdateLeadTable(data.LeadId, data.CouponId);\r\n window.VCA.NCAOfferDataLayer.dataLayerNCAOfferSuccess();\r\n } else {\r\n ui.$form.find('#nca-errormessage').show();\r\n }\r\n }\r\n\r\n async function UpdateLeadTable(LeadId, CouponId) {\r\n var redirect = ui.$form.find('#nca-redirectlink').val();\r\n\r\n const url = '/api/NCA/UpdateLeadTable';\r\n let api = new ApiService(url);\r\n\r\n let params = {\r\n 'leadId': LeadId\r\n }\r\n\r\n const {data,success,error} = await api.post(params);\r\n if (success && (data == true || data == 'True')) {\r\n window.location.assign(redirect + '?couponid=' + CouponId);\r\n } else {\r\n ui.$form.find('#nca-errormessage').show();\r\n }\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.NewClientFirstExam.init();\r\n});","var VCA = VCA || {};\r\n\r\nVCA.StepSecitonForm = (function ($) {\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n ui.$stepSection = $('.js-form-section-step');\r\n }\r\n\r\n function init() {\r\n if ($('.js-form-section-step').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindNextSectionClick();\r\n bindbackClick();\r\n }\r\n\r\n\r\n function bindNextSectionClick() {\r\n ui.$stepSection.on('click', '.js-check-form-section', function (e) {\r\n e.preventDefault();\r\n let section = $(this).closest('.js-form-section-step');\r\n if(!checkform(section)){\r\n return;\r\n }else{\r\n section.hide();\r\n section.next().next().show();\r\n }\r\n });\r\n }\r\n\r\n\r\n function bindbackClick() {\r\n ui.$stepSection.on('click', '.js-back-section', function (e) {\r\n e.preventDefault();\r\n let section = $(this).closest('.js-form-section-step');\r\n section.hide();\r\n section.prev().prev().show();\r\n });\r\n }\r\n function checkform(section) {\r\n var mailFormat = /(^[a-zA-Z0-9_.]+[@]{1}[a-zA-Z0-9\\-]+[\\.][a-zA-Z]+$)/;\r\n var phoneReg = /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/;\r\n\r\n let requiredinputs = section.find('input[data-val-required]');\r\n let requiredselect = section.find('select[data-val-required]');\r\n let requiredtextarea = section.find('select[data-val-required]');\r\n let textReg = /^[a-zA-Z -]{2,60}$/;\r\n // console.log('inputs',requiredinputs);\r\n // console.log('sleect',requiredselect);\r\n\r\n let valid = true\r\n\r\n requiredinputs.each(function (index) {\r\n let el = $(this);\r\n var elmType = el.attr('type');\r\n if (elmType == 'tel') {\r\n let phone = el.val();\r\n if (!phoneReg.test(phone)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else if (elmType == 'email') {\r\n let email = el.val();\r\n if (!mailFormat.test(email)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else {\r\n if (el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n console.log(el.val());\r\n });\r\n requiredselect.each(function (index) {\r\n let el = $(this);\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n });\r\n requiredtextarea.each(function (index){\r\n let el = $(this);\r\n if(el.val() == '' || el.val() == null){\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n });\r\n\r\n return valid;\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.StepSecitonForm.init();\r\n});\r\n\r\n\r\n","let VCA = VCA || {};\r\n\r\nVCA.DashboardApptTooltip = (function ($) {\r\n let ui = {};\r\n\r\n function cacheUI() {\r\n ui.$WalkInApptType = $('.card-listing__card__link.walk-in');\r\n }\r\n\r\n function bindEvents() {\r\n ui.$WalkInApptType.hover(displayTooltip, hideTooltip)\r\n }\r\n \r\n function displayTooltip(e) {\r\n let el = $(e.currentTarget);\r\n let wrapper = el.closest('.card-listing__card__tooltip-wrapper');\r\n let tooltipEl = $(wrapper).find('.card-listing__card__tooltip');\r\n $(tooltipEl).show();\r\n }\r\n\r\n function hideTooltip(e) {\r\n let el = $(e.currentTarget);\r\n let wrapper = el.closest('.card-listing__card__tooltip-wrapper');\r\n let tooltipEl = $(wrapper).find('.card-listing__card__tooltip');\r\n $(tooltipEl).hide();\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n bindEvents();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n $(document).ready(function() {\r\n VCA.DashboardApptTooltip.init();\r\n });\r\n});\r\n\r\n","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\nwindow.VCA = window.VCA || {};\r\n\r\nwindow.VCA.DbCardsCarousel = (function ($) {\r\n\r\n function bindEvents() {\r\n $(window).on('resize', onWindowResize);\r\n }\r\n\r\n function onWindowResize() {\r\n let viewportWidth = $(window).width();\r\n if (viewportWidth > 767) {\r\n initCarousel();\r\n }\r\n }\r\n\r\n function initCarousel() {\r\n if (isExperienceEditor) {\r\n return;\r\n }\r\n\r\n const $carousel = $('.js-cards-carousel');\r\n if ($carousel.length > 0) {\r\n $carousel.each((index) => {\r\n\r\n const $currentCarousel = $($carousel[index]);\r\n const showCount = Number($currentCarousel.data('show-count'));\r\n const slidesToShow = !isNaN(showCount) ? showCount : 3;\r\n\r\n\r\n const iskypArticleV2 = $currentCarousel.attr('data-iskypArticle-v2') ? JSON.parse($currentCarousel.attr('data-iskypArticle-v2')) : '';\r\n const isMapSlider = $currentCarousel.attr('data-isMap-card-slider') ? JSON.parse($currentCarousel.attr('data-isMap-card-slider')) : '';\r\n let responsiveSettings = [];\r\n\r\n if ($currentCarousel.hasClass(\"coveo-card-layout-container\")) {\r\n $currentCarousel.children('.coveo-card-layout-padding').remove();\r\n }\r\n\r\n //Code for kyp-articles-v2 carousel\r\n if (iskypArticleV2) {\r\n responsiveSettings.push({\r\n breakpoint: 1200,\r\n settings: {\r\n slidesToShow: 3,\r\n }\r\n },\r\n\r\n {\r\n breakpoint: 768,\r\n settings: \"unslick\"\r\n });\r\n }\r\n //Code for map-card-slider carousel\r\n else if(isMapSlider){\r\n responsiveSettings.push({\r\n breakpoint: 1200,\r\n settings: {\r\n slidesToShow: 2,\r\n }\r\n },\r\n\r\n {\r\n breakpoint: 768,\r\n settings: {\r\n slidesToShow: 1,\r\n dots: true,\r\n arrows: true,\r\n focusOnChange: true,\r\n accessibility: true,\r\n }\r\n });\r\n }\r\n\r\n //code for All other carousels\r\n else {\r\n responsiveSettings.push({\r\n breakpoint: 1200,\r\n settings: {\r\n slidesToShow: 2,\r\n }\r\n },\r\n {\r\n breakpoint: 768,\r\n settings: \"unslick\"\r\n });\r\n }\r\n\r\n $currentCarousel.not('.slick-initialized').slick({\r\n lazyLoad: \"ondemand\",\r\n dots: false,\r\n slidesToShow,\r\n infinite: false,\r\n draggable: false,\r\n accessibility: true,\r\n responsive: responsiveSettings\r\n });\r\n\r\n // Wrap dots in a custom container\r\n $currentCarousel.find('.slick-dots').wrap(\"<div class='slick-dots-container'></div>\");\r\n const maxDots = 4;\r\n let transformCount = 0;\r\n\r\n //The below variables are used move the dots forward and backword in pixels\r\n let transformXIntervalNext = -18; \r\n let transformXIntervalPrev = 18;\r\n\r\n $currentCarousel.find('.slick-dots li').each(function (index) {\r\n $(this).addClass('dot-index-' + index);\r\n });\r\n\r\n function setBoundries(slick, state) {\r\n if (state === 'default') {\r\n slick.find('ul.slick-dots li').eq(4).addClass('n-small-1');\r\n }\r\n }\r\n\r\n // Handle slide change and update dots\r\n $currentCarousel.on('beforeChange', function (event, slick, currentSlide, nextSlide) {\r\n const totalCount = $(this).find('.slick-dots li').length;\r\n\r\n if (totalCount > maxDots) {\r\n if (nextSlide > currentSlide) {\r\n if ($(this).find('ul.slick-dots li.dot-index-' + nextSlide).hasClass('n-small-1')) {\r\n if (!$(this).find('ul.slick-dots li:last-child').hasClass('n-small-1')) {\r\n transformCount = transformCount + transformXIntervalNext;\r\n $(this).find('ul.slick-dots li.dot-index-' + nextSlide).removeClass('n-small-1');\r\n const nextSlidePlusOne = nextSlide + 1;\r\n $(this).find('ul.slick-dots li.dot-index-' + nextSlidePlusOne).addClass('n-small-1');\r\n $(this).find('ul.slick-dots').css('transform', 'translateX(' + transformCount + 'px)');\r\n const pPointer = nextSlide - 3;\r\n const pPointerMinusOne = pPointer - 1;\r\n $(this).find('ul.slick-dots li').eq(pPointerMinusOne).removeClass('p-small-1');\r\n $(this).find('ul.slick-dots li').eq(pPointer).addClass('p-small-1');\r\n }\r\n }\r\n }\r\n else {\r\n if ($(this).find('ul.slick-dots li.dot-index-' + nextSlide).hasClass('p-small-1')) {\r\n if (!$(this).find('ul.slick-dots li:first-child').hasClass('p-small-1')) {\r\n transformCount = transformCount + transformXIntervalPrev;\r\n $(this).find('ul.slick-dots li.dot-index-' + nextSlide).removeClass('p-small-1');\r\n const nextSlidePlusOne = nextSlide - 1;\r\n $(this).find('ul.slick-dots li.dot-index-' + nextSlidePlusOne).addClass('p-small-1');\r\n $(this).find('ul.slick-dots').css('transform', 'translateX(' + transformCount + 'px)');\r\n const nPointer = currentSlide + 3;\r\n const nPointerMinusOne = nPointer - 1;\r\n $(this).find('ul.slick-dots li').eq(nPointer).removeClass('n-small-1');\r\n $(this).find('ul.slick-dots li').eq(nPointerMinusOne).addClass('n-small-1');\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Initial setup\r\n setBoundries($currentCarousel, 'default');\r\n })\r\n }\r\n }\r\n \r\n function init() {\r\n bindEvents();\r\n initCarousel();\r\n }\r\n\r\n\r\n return {\r\n init: init,\r\n initCarousel: initCarousel\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.DbCardsCarousel.init();\r\n});","var VCA = VCA || {};\r\n\r\nVCA.DashboardHeader = (function ($) {\r\n let ui = {};\r\n let numOfNotifications = 0;\r\n let notifsSecondArray = [];\r\n\r\n function cacheUI() {\r\n ui.$NotificationsList = $('#DashboardNotificationsList');\r\n ui.$NotificationsCount = $('.header-info__notifications-count');\r\n ui.$NotificationsCancelBtn = $('.notifications-cancel-btn');\r\n ui.$NotificationsClearAllBtn = $('#NotificationsClearAllBtn'); \r\n }\r\n\r\n function bindEvents() {\r\n $('.header-info__truncated-msg').on('click', showMsgModal);\r\n $('.header-info__notifications').on('click', showNotificationsModal);\r\n ui.$NotificationsCancelBtn.on('click', deleteNotification);\r\n ui.$NotificationsClearAllBtn.on('click', clearAll);\r\n }\r\n\r\n function showMsgModal() {\r\n $('#MessageModal').modal('show');\r\n }\r\n\r\n function showNotificationsModal() {\r\n $('#NotificationsModal').modal('show');\r\n }\r\n\r\n function checkCookies() {\r\n let browserCookies = getCookie('notification');\r\n let browserCookiesNotifs2 = getCookie('notification2');\r\n\r\n if (browserCookies == null) {\r\n calcLengthOfNotifications();\r\n return;\r\n } else {\r\n let storedNotifsCookiesValues = browserCookies.split(',');\r\n let storedNotifsCookies2Values = browserCookiesNotifs2.split(',');\r\n\r\n //loop through each notification item \r\n ui.$NotificationsList.find('.db-notification-item').each((idx,notif) => {\r\n let notifDataAttr = $(notif).data('notificationid');\r\n \r\n if (storedNotifsCookiesValues.includes(notifDataAttr) || storedNotifsCookies2Values.includes(notifDataAttr)) {\r\n $(notif).find('.notifications-cancel-btn').remove();\r\n $(notif).find('.header-info__animal-icon').addClass('adjust');\r\n $(notif).removeClass('new-notification');\r\n }\r\n });\r\n calcLengthOfNotifications(); \r\n }\r\n }\r\n\r\n function getCookie(name) {\r\n let match = document.cookie.match(RegExp('(?:^|;\\\\s*)' + name + '=([^;]*)')); \r\n return match ? match[1] : null;\r\n }\r\n\r\n function deleteNotification(e) {\r\n let cancelBtn = $(e.currentTarget);\r\n let notificationItem = cancelBtn.parent('.db-notification-item')[0];\r\n let cookieDataAttr = $(notificationItem).data('notificationid');\r\n\r\n let cookieResult = getCookie('notification');\r\n\r\n if (cookieResult == null) {\r\n document.cookie = \"notification= \" + cookieDataAttr;\r\n } else {\r\n //add to cookies \r\n document.cookie = \"notification= \" + cookieResult + \",\" + cookieDataAttr;\r\n }\r\n\r\n //remove notification from DOM\r\n cancelBtn.remove();\r\n $(notificationItem).find('.header-info__animal-icon').addClass('adjust');\r\n $(notificationItem).removeClass('new-notification');\r\n calcLengthOfNotifications();\r\n }\r\n\r\n function clearAll() {\r\n ui.$NotificationsList.find('.db-notification-item').each((idx,notif) => {\r\n let notifDataAttr = $(notif).data('notificationid');\r\n let cookieResult = getCookie('notification');\r\n \r\n if (cookieResult == null) {\r\n document.cookie = \"notification= \" + notifDataAttr;\r\n } else {\r\n //add to cookies \r\n document.cookie = \"notification= \" + cookieResult + \",\" + notifDataAttr;\r\n\r\n let updatedCookiesResults = getCookie('notification');\r\n let updatedNotifsCookiesValues = updatedCookiesResults.split(',');\r\n\r\n if (updatedNotifsCookiesValues.includes(notifDataAttr) == false) {\r\n notifsSecondArray.push(notifDataAttr);\r\n }\r\n }\r\n $(notif).removeClass('new-notification');\r\n $(notif).find('.header-info__animal-icon').addClass('adjust');\r\n $(notif).find('.notifications-cancel-btn').hide();\r\n\r\n });\r\n addMissedNotifsToCookies();\r\n calcLengthOfNotifications(); \r\n }\r\n\r\n function addMissedNotifsToCookies() {\r\n $(notifsSecondArray).each((idx,notification) => {\r\n let notif2CookieResult = getCookie('notification2');\r\n document.cookie = \"notification2= \" + notif2CookieResult + \",\" + notification;\r\n });\r\n }\r\n\r\n function calcLengthOfNotifications() {\r\n numOfNotifications = ui.$NotificationsList.children('li.new-notification').length;\r\n\r\n if (numOfNotifications == 0) {\r\n ui.$NotificationsCount.hide();\r\n } else if (numOfNotifications >= 1 && numOfNotifications <= 9) {\r\n ui.$NotificationsCount.show();\r\n ui.$NotificationsClearAllBtn.show();\r\n ui.$NotificationsCount.text(numOfNotifications);\r\n } else if (numOfNotifications > 9) {\r\n ui.$NotificationsCount.show();\r\n ui.$NotificationsClearAllBtn.show();\r\n ui.$NotificationsCount.text('9+');\r\n }\r\n }\r\n\r\n function init() {\r\n if ($('.dashboard__header').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n bindEvents();\r\n checkCookies();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n $(document).ready(function() {\r\n VCA.DashboardHeader.init();\r\n });\r\n});","import ApiService from '@api/api-service';\r\n\r\nlet VCA = VCA || {};\r\n\r\nVCA.DashboardPetPhoto = (function ($) {\r\n\r\n let $petPhoto = $('img[data-petid]'); \r\n let $petPhotoArr = [];\r\n let $defaultPetIcon = $('img[data-petid]').first().attr('src');\r\n\r\n function checkPetPhoto() {\r\n if ($petPhoto.length>0) {\r\n\r\n localStorage.setItem('defaultPetIcon', $defaultPetIcon);\r\n\r\n $($petPhoto).each((count,el) => {\r\n let petId = $(el).data('petid');\r\n\r\n if (petId == '') {\r\n return;\r\n }\r\n\r\n if ($petPhotoArr.includes(petId) == true) {\r\n return;\r\n }else{\r\n $petPhotoArr.push(petId);\r\n }\r\n\r\n if (petId in localStorage) {\r\n let imgBlob = localStorage.getItem(petId);\r\n\r\n if (imgBlob !== '') {\r\n $(`img[data-petid=\"${petId}\"]`).each((idx,element) => {\r\n $(element).attr('src','');\r\n $(element).attr('src',imgBlob);\r\n });\r\n } \r\n \r\n if (imgBlob == '') {\r\n getPetPhoto(petId);\r\n }\r\n } else {\r\n getPetPhoto(petId);\r\n }\r\n });\r\n }\r\n }\r\n\r\n async function getPetPhoto(petId) { \r\n localStorage.setItem(petId,'');\r\n\r\n const url = '/myvca-api/get-pet-photo';\r\n let api = new ApiService(url);\r\n let query = { petId };\r\n const { data, success, error } = await api.query(query);\r\n\r\n if (success) {\r\n if (data !== null && data !== '') {\r\n $(`img[data-petid=\"${petId}\"]`).each((idx,el) => {\r\n $(el).attr('src','');\r\n $(el).attr('src',data);\r\n });\r\n localStorage.setItem(petId, data);\r\n }\r\n } else {\r\n console.log(\"Error retrieving pet profile image: \", error);\r\n }\r\n }\r\n\r\n function init() {\r\n checkPetPhoto();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n $(document).ready(function() {\r\n VCA.DashboardPetPhoto.init();\r\n });\r\n});","\r\n\r\n(function (window) {\r\n\r\n var PetsDropdown = function () {\r\n var menuStack = [];\r\n var ui = {};\r\n var isMobile;\r\n var SHOW_FULL_TEXT = 'collapsed';\r\n var MEDIA_QUERY = '(max-width: 991px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$selectButton = $('.js-pets-dropdown-button');\r\n ui.$list = $('.js-pets-dropdown-list');\r\n ui.$listItem = $('.js-pets-dropdown-list li a');\r\n }\r\n\r\n function openDropdown(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (ui.$selectButton.attr(\"aria-expanded\") === 'true') {\r\n hideListbox(this);\r\n return;\r\n }\r\n var $button = this;\r\n var $list = $($button).parent().parent().find(\".js-pets-dropdown-list\");\r\n $list.removeClass('hidden');\r\n $button.setAttribute('aria-expanded', 'true');\r\n $list.trigger('focus');\r\n $(window).on('click', closeDropdown);\r\n }\r\n\r\n function closeDropdown(e) {\r\n if ($(e.target).closest(\".pets-dropdown-select\").length === 0) {\r\n if (ui.$selectButton.attr(\"aria-expanded\") === 'true') {\r\n hideListbox(ui.$selectButton);\r\n $(window).off('click');\r\n return;\r\n }\r\n }\r\n }\r\n\r\n function itemSelected(e) {\r\n var item;\r\n\r\n if (this === undefined) {\r\n item = e.parent();\r\n } else {\r\n item = $(this).parent();\r\n }\r\n $(item).siblings().removeClass('focused selected');\r\n $(item).addClass('focused selected');\r\n updateSelectValue($(item));\r\n hideListbox($(item).closest('.js-pets-dropdown-list'));\r\n }\r\n\r\n function updateSelectValue(e) {\r\n var item = e;\r\n var itemValue = $(item).attr('data-value');\r\n var input = $(item).closest('.pets-dropdown-select').find('.js-pets-dropdown-input');\r\n input.val(itemValue);\r\n input.trigger('keypress');\r\n }\r\n\r\n function checkShow(e) {\r\n e.preventDefault();\r\n var key = e.which || e.keyCode;\r\n\r\n var first = $(this).find('.focused').is(':first-child');\r\n var last = $(this).find('.focused').is(':last-child');\r\n\r\n switch (key) {\r\n case 40: //down arrow\r\n if (!last) {\r\n $(this).find('.focused').removeClass('focused').next().addClass('focused');\r\n }\r\n e.stopPropagation();\r\n break;\r\n case 38: // up arrow\r\n if (!first) {\r\n $(this).find('.focused').removeClass('focused').prev().addClass('focused');\r\n }\r\n e.stopPropagation();\r\n break;\r\n case 27: // esc\r\n case 9: // tab\r\n hideListbox($(this));\r\n e.stopPropagation();\r\n break;\r\n case 32: // space bar\r\n case 13: // enter key\r\n $(this).find('.focused').addClass('selected');\r\n $(this).find('.focused a').trigger('click');\r\n updateSelectValue($(this).find('.focused'));\r\n hideListbox($(this));\r\n e.stopPropagation();\r\n break;\r\n }\r\n }\r\n\r\n function hideListbox(e) {\r\n var item;\r\n\r\n if (this === undefined) {\r\n item = e;\r\n } else {\r\n item = $(e);\r\n }\r\n\r\n var parent = $(item).closest('.pets-dropdown-select');\r\n var list = $(parent).find('.js-pets-dropdown-list');\r\n var button = $(parent).find(\".js-pets-dropdown-button\");\r\n list.addClass('hidden');\r\n button.attr('aria-expanded', 'false');\r\n }\r\n\r\n\r\n function bindEvents() {\r\n ui.$selectButton.on('click', openDropdown);\r\n ui.$listItem.on('click', itemSelected);\r\n ui.$list.bind('keydown', checkShow);\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n bindEvents();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n };\r\n\r\n var select = PetsDropdown();\r\n select.init();\r\n})(window);","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n(function (window) {\r\n var parallaxCols = function () {\r\n var menuStack = [];\r\n var ui = {};\r\n var isMobile;\r\n var SHOW_FULL_TEXT = 'collapsed';\r\n var MEDIA_QUERY = '(max-width: 991px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n var isExperienceEditor = $('#sitecore-page-mode').attr('data-attribute');\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$parallaxSlider = $('.js-parallax-slider');\r\n ui.$anchorTag=$('.js-parallax-datalayer');\r\n }\r\n function initParallaxSlider(e) {\r\n var parallaxSlider = ui.$parallaxSlider.each(function (index, element) {\r\n $(this).addClass('js-parallax-slider' + index);\r\n const showCount = $(this).data('show-count');\r\n\r\n let SlideShowCount;\r\n if (showCount && showCount !== \"\") {\r\n SlideShowCount = isNaN(showCount) ? 4 : Number(showCount);\r\n } else {\r\n SlideShowCount = 4;\r\n }\r\n var item_length = $('.js-parallax-slider' + index + ' > div').length;\r\n if (item_length > 4 && !isExperienceEditor) {\r\n $('.js-parallax-slider' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: true,\r\n dots: false,\r\n slidesToShow: SlideShowCount,\r\n rows: 0,\r\n slidesToScroll: SlideShowCount,\r\n responsive: [{\r\n breakpoint: 1024,\r\n settings: {\r\n slidesToShow: 3,\r\n slidesToScroll: 3,\r\n infinite: true,\r\n dots: true\r\n }\r\n },\r\n {\r\n breakpoint: 991,\r\n settings: {\r\n slidesToShow: 2,\r\n slidesToScroll: 2,\r\n dots: true,\r\n arrows: false,\r\n focusOnChange: true,\r\n accessibility: true\r\n }\r\n },\r\n {\r\n breakpoint: 600,\r\n settings: {\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n dots: true,\r\n arrows: false,\r\n focusOnChange: true,\r\n accessibility: true\r\n }\r\n }\r\n // You can unslick at a given breakpoint now by adding:\r\n // settings: \"unslick\"\r\n // instead of a settings object\r\n ]\r\n });\r\n } else if (mql.matches && item_length > 1 && !isExperienceEditor) {\r\n $('.js-parallax-slider' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: false,\r\n dots: false,\r\n slidesToShow: 2,\r\n slidesToScroll: 2,\r\n rows: 0,\r\n responsive: [{\r\n breakpoint: 1024,\r\n settings: \"unslick\"\r\n },\r\n {\r\n breakpoint: 991,\r\n settings: {\r\n slidesToShow: 2,\r\n slidesToScroll: 2,\r\n dots: true,\r\n arrows: false,\r\n focusOnChange: true,\r\n accessibility: true\r\n }\r\n },\r\n {\r\n breakpoint: 600,\r\n settings: {\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n dots: true,\r\n arrows: false,\r\n focusOnChange: true,\r\n accessibility: true\r\n }\r\n }\r\n ]\r\n });\r\n }\r\n $(this).addClass('-active');\r\n });\r\n }\r\n function bindEvents() {\r\n ui.$anchorTag.on('click', function(event) {\r\n event.preventDefault(); // Prevent the default anchor behavior\r\n var targetValue = $(this).attr('href'); \r\n if (targetValue != null && targetValue != undefined && targetValue.includes('book-an-appointment')){\r\n var isloggedin = $(this).data('isloggedin');\r\n var hospitalId = $(this).data('hospitalid');\r\n var hospitalName = $(this).data('hospitalname');\r\n \r\n window.dataLayer.push({\r\n 'event': 'oab-click',\r\n 'oab-location': 'hospital-lp-feature-bar',\r\n 'oab-type': 'standard',\r\n 'hospital-AAU': hospitalId,\r\n 'hospital-name': hospitalName,\r\n 'logged-in-status': isloggedin\r\n }); \r\n \r\n }\r\n window.location.href = targetValue; \r\n });\r\n }\r\n function init() {\r\n cacheUI();\r\n bindEvents();\r\n initParallaxSlider();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n };\r\n\r\n var parallax = parallaxCols();\r\n parallax.init();\r\n})(window);","import ApiService from '@api/api-service';\r\nimport haversine from 'haversine-distance';\r\nimport getHospitals from '@api/routes/findAHospitalNCA/findAHospitalNCA';\r\nimport getCoupon from '@api/routes/findAHospitalNCA/getCoupon';\r\nimport * as submitSpinner from '../custom-forms/form-loading';\r\nimport MapFrame from '../map-frame';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.FindAHospitalUC = (function ($) {\r\n var ui = {};\r\n var _urlParams = {};\r\n let canadaZipCodeRegex = /^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ -]?\\d[ABCEGHJ-NPRSTV-Z]\\d$/i;\r\n let usZipCodeRegex = /^(?:[1-9]|0(?!0{4}))\\d{4}(?:[-\\s]\\d{4})?$/i;\r\n var searchHospitalsList = [];\r\n let $ShowOabFaa = \"\";\r\n\r\n function cacheUI() {\r\n ui.$mapContainer = $(\"#FindAHospitalMap-NCA\");\r\n ui.$loadingSpinner = $('.search-results-container__loading');\r\n ui.$resultsSection = $('[data-region=\"resultsSection\"]');\r\n ui.$resultsContainer = $('[data-region=\"resultsListUL\"]');\r\n ui.$ncaContainer = $('.find-a-hospital')\r\n ui.$errorMsgContainer = $('.search-results-container__error-msg-container');\r\n ui.$errorMessage = $('.search-results-container__error-msg');\r\n ui.$viewMapBtn = $('[data-control=\"viewmap\"]');\r\n ui.$viewMapBtnList = $('[data-control=\"viewmapList\"]');\r\n ui.$resultsList = $('[data-region=\"resultsList\"]');\r\n ui.$viewOnMapBtn = $('[data-control=\"viewOnMapBtn\"]');\r\n ui.$mapRegion = $('[data-region=\"mapRegion\"]');\r\n ui.$nextResult = $('[data-control=\"nextResult\"]');\r\n ui.$hideZipCode = $('[data-control=\"hideZipCodeNCA\"]');\r\n ui.$prevResult = $('[data-control=\"prevResult\"]');\r\n ui.$searchValue = $('#SearchInput');\r\n ui.$searchRadius = $('#SearchRadiusNCA');\r\n ui.$zipcode = '';\r\n ui.$zipcodeInput = $('[data-control=\"zipcodeInput\"]');\r\n ui.$zipSubmitBtn = $('[data-control=\"zipSubmitBtn\"]');\r\n ui.$existLabel = $('.nca-results-label');\r\n ui.$zipcodeLabel = $('[data-label=\"ziplabel\"]');\r\n ui.$resultsCount = $('[data-label=\"resultsCount\"]');\r\n ui.$milesCount = $('[data-label=\"milesCount\"]');\r\n ui.$defaultRadius = $('#defaultRadius').val();\r\n ui.$defaultLatitude = $(\"#defaultLatitude\").val();\r\n ui.$defaultLongitude = $(\"#defaultLongitude\").val();\r\n ui.$countryId = $('#countryId').val();\r\n ui.$dataId = $('#dataId').val();\r\n ui.isCanada = $('[data-iscanada]').attr('data-iscanada');\r\n ui.$radiusFilterSearch = $('.find-search__dropdown-list-nca')\r\n ui.$searchClearbBtn = $('.search-clear');\r\n\r\n // modal\r\n ui.$modalHospitalName = $('[data-label=\"modalHospitalName\"]');\r\n ui.$NCAModal = $('#NCAFormModal');\r\n ui.$NCAFormSubmitBtn = $('#NCAFormSubmit');\r\n ui.$VMRForm = $('.nca-form');\r\n ui.$APIErrorMessage = $('.nca-modal__error-msg');\r\n ui.$NCAZip = $('#NCAZip');\r\n ui.$NCAFormPhoneNum = $('#NCAPhoneNum');\r\n ui.$NCAEmail = $('#NCAEmail');\r\n ui.$NCALastName = $('#NCALastName');\r\n ui.$NCAFirstName = $('#NCAFirstName');\r\n ui.$InputEl = $('.nca-modal input');\r\n ui.$SelectEl = $('.nca-modal select');\r\n ui.$TextAreaEl = $('.nca-modal textarea');\r\n ui.$couponTitle = $('[data-label=\"couponTitle\"]');\r\n ui.$couponMessage = $('[data-label=\"couponMessage\"]');\r\n ui.$couponImage = $('[data-region=\"couponImage\"]');\r\n ui.$modalLoader = $('[data-control=\"modalLoader\"]');\r\n ui.$modalBody = $('[data-regoin=\"modalBody\"]');\r\n ui.$couponHeaderLogo = $('[data-control=\"couponHeaderLogo\"]');\r\n\r\n ui.$map;\r\n ui.$geocoder;\r\n ui.$currentLat;\r\n ui.$currentLng;\r\n ui.$bounds;\r\n ui.$prevSearchValue;\r\n ui.$markers = [];\r\n ui.$selectedFiltersArr = [];\r\n\r\n ui.locationIcon = $('#locationIcon').val();\r\n ui.contactIcon = $('#contactIcon').val();\r\n ui.servicesIcon = $('#servicesIcon').val();\r\n ui.hoursIcon = $('#hoursIcon').val();\r\n ui.hospitalType = $('#hospitalType').val();\r\n ui.hospitalTypeName = $('#hospitalTypeName').val();\r\n\r\n ui.hospitalName;\r\n ui.hospitalId;\r\n ui.hospitalSettingsItemId;\r\n ui.hospitalSiteId;\r\n ui.mediareachofferId;\r\n\r\n $(ui.$zipcodeInput).val('');\r\n }\r\n\r\n function bindEvents() {\r\n ui.$viewMapBtn.on('click', toggleMap);\r\n ui.$viewMapBtnList.on('click', toggleMap);\r\n ui.$VMRForm.on('submit', validateForm);\r\n ui.$nextResult.on('click', function () {\r\n scrollResults('next')\r\n });\r\n ui.$prevResult.on('click', function () {\r\n scrollResults('prev')\r\n });\r\n ui.$radiusFilterSearch.on('click', function () {\r\n distanceFilterNCA();\r\n })\r\n\r\n ui.$resultsContainer.on('scroll', function () {\r\n scrollNcaList()\r\n });\r\n\r\n ui.$searchClearbBtn.on('click', function () {\r\n clearSearchButton()\r\n });\r\n\r\n ui.$ncaContainer.on('click', function (event) {\r\n if (!$('.hours-modal').is(event.target) && $('.hours-modal').has(event.target).length === 0) {\r\n $('.hours-modal').hide();\r\n }\r\n\r\n if (!$('.sph-hours-modal').is(event.target) && $('.sph-hours-modal').has(event.target).length === 0) {\r\n $('.sph-hours-modal').hide();\r\n }\r\n\r\n if (!$('.emergency-hours-modal').is(event.target) && $('.emergency-hours-modal').has(event.target).length === 0) {\r\n $('.emergency-hours-modal').hide();\r\n }\r\n });\r\n\r\n ui.$zipcodeInput.on('keyup change', function (e) {\r\n initZipcode(e);\r\n });\r\n ui.$zipSubmitBtn.on('click', initGeocoder);\r\n\r\n $(ui.$NCAFormPhoneNum).on('input', function () {\r\n let value = $(this).val();\r\n $(this).val(value.replace(/\\D/g, ''));\r\n });\r\n\r\n $(ui.$NCAFormPhoneNum).on('keydown', function (e) {\r\n if (\r\n e.key !== 'Backspace' &&\r\n e.key !== 'Tab' &&\r\n e.key !== 'ArrowLeft' &&\r\n e.key !== 'ArrowRight' &&\r\n e.key !== 'Delete' &&\r\n !/^\\d$/.test(e.key)\r\n ) {\r\n e.preventDefault();\r\n }\r\n });\r\n }\r\n\r\n function scrollNcaList() {\r\n hidePopup();\r\n updateNavBtns();\r\n }\r\n\r\n function clearSearchButton() {\r\n ui.$zipcodeInput.val('')\r\n ui.$searchClearbBtn.addClass('hidden');\r\n }\r\n\r\n function distanceFilterNCA() {\r\n if (ui.$currentLat == undefined || ui.$currentLng == undefined) {\r\n return;\r\n }\r\n ui.$bounds = getBounds(ui.$currentLat, ui.$currentLng, ui.$defaultRadius);\r\n getSearchResults('Error', false);\r\n }\r\n\r\n function toggleMap() {\r\n if (ui.$resultsList.is(\":visible\")) {\r\n ui.$resultsList.hide();\r\n ui.$mapRegion.show();\r\n ui.$viewMapBtn.addClass('hidden');\r\n ui.$viewMapBtnList.removeClass('hidden');\r\n } else {\r\n ui.$mapRegion.hide();\r\n ui.$resultsList.show();\r\n ui.$viewMapBtn.removeClass('hidden');\r\n ui.$viewMapBtnList.addClass('hidden');\r\n }\r\n }\r\n\r\n function scrollResults(direction) {\r\n var cutoff = 50;\r\n var nextitem = '';\r\n if (direction === 'next') {\r\n $('.search-item').each(function () {\r\n var $this = $(this);\r\n if ($this.position().left >= cutoff) {\r\n nextitem = '+=' + $this.position().left;\r\n return false;\r\n }\r\n });\r\n } else {\r\n $($('.search-item').get().reverse()).each(function () {\r\n var $this = $(this);\r\n if ($this.position().left < 0) {\r\n nextitem = '-=' + Math.abs($this.position().left);\r\n return false;\r\n }\r\n });\r\n }\r\n ui.$resultsContainer.animate({\r\n scrollLeft: nextitem\r\n }, 500, function () {\r\n updateNavBtns();\r\n });\r\n }\r\n\r\n function updateNavBtns() {\r\n var showPrev = ui.$resultsContainer.scrollLeft();\r\n var fullWidth = $('.search-item').length * $('.search-item').outerWidth();\r\n var showNext = showPrev + ui.$resultsContainer.outerWidth() > fullWidth - 50;\r\n\r\n if (showPrev > 50) {\r\n ui.$prevResult.show();\r\n }\r\n else {\r\n ui.$prevResult.hide();\r\n }\r\n if (showNext) {\r\n ui.$nextResult.hide();\r\n } else {\r\n ui.$nextResult.show();\r\n }\r\n }\r\n\r\n function highlightMarker(i) {\r\n $.each(ui.$markers, function (i, item) {\r\n item.setAnimation(null);\r\n });\r\n let found = ui.$markers.find(item => {\r\n return item.id == i;\r\n });\r\n found.setAnimation(google.maps.Animation.BOUNCE);\r\n toggleMap();\r\n }\r\n\r\n function initPage() {\r\n setCurrentDate();\r\n setSearchDefaultRadius();\r\n ui.$viewMapBtnList.addClass('hidden');\r\n submitSpinner.setupLoadingSpinner(ui.$NCAFormSubmitBtn);\r\n ui.$map = new google.maps.Map(document.getElementById('FindAHospitalMap-NCA'), {\r\n mapId: \"ddfa8e9020e47824\",\r\n center: new google.maps.LatLng(ui.$defaultLatitude, ui.$defaultLongitude),\r\n zoom: 12 //1 (furthest) to 20 (closest)\r\n });\r\n\r\n if (window.location.href.match(/\\?./)) {\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n\r\n for (const [key, value] of urlParams.entries()) {\r\n if (key == 'zip') {\r\n if (usZipCodeRegex.test(value)) {\r\n ui.$zipcode = value;\r\n ui.$zipcodeInput.val(value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n var infoWindow = new google.maps.InfoWindow();\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(\r\n (position) => {\r\n var pos = {\r\n lat: position.coords.latitude,\r\n lng: position.coords.longitude,\r\n };\r\n ui.$currentLat = position.coords.latitude;\r\n ui.$currentLng = position.coords.longitude;\r\n ui.$map.setCenter(pos);\r\n // If coming from the home page search field,\r\n // getHospitalsData() will return before getSearchResults() does\r\n // and will show a \"No results\" message before valid results are shown.\r\n if (window.location.search.length === 0) {\r\n getSearchResults('Error: ', false);\r\n } else {\r\n //queryOnInitValidation();\r\n }\r\n },\r\n () => {\r\n handleLocationError(true, infoWindow, ui.$map.getCenter());\r\n }\r\n );\r\n } else {\r\n // Browser doesn't support Geolocation\r\n handleLocationError(false, infoWindow, ui.$map.getCenter());\r\n }\r\n\r\n if (ui.$zipcode !== '') {\r\n initGeocoder(ui.$zipcode);\r\n }\r\n }\r\n\r\n function hidePopup() {\r\n $('.hours-modal').hide();\r\n $('.sph-hours-modal').hide();\r\n $('.emergency-hours-modal').hide();\r\n }\r\n\r\n function initGeocoder() {\r\n ui.$geocoder = new google.maps.Geocoder();\r\n ui.$map = new google.maps.Map(document.getElementById('FindAHospitalMap-NCA'), {\r\n mapId: \"ddfa8e9020e47824\",\r\n center: new google.maps.LatLng(ui.$defaultLatitude, ui.$defaultLongitude),\r\n zoom: 12, //1 (furthest) to 20 (closest)\r\n minZoom: 8\r\n });\r\n\r\n ui.$currentLat = ui.$defaultLatitude;\r\n ui.$currentLng = ui.$defaultLongitude;\r\n let countryAddress = ui.$zipcode\r\n if (ui.isCanada === 'true') {\r\n countryAddress = countryAddress + ', Canada';\r\n } else {\r\n countryAddress = countryAddress + ', USA';\r\n }\r\n\r\n ui.$geocoder.geocode({\r\n 'address': countryAddress\r\n }, function (results, status) {\r\n if (status == 'OK') {\r\n ui.$currentLat = results[0].geometry.location.lat();\r\n ui.$currentLng = results[0].geometry.location.lng();\r\n getSearchResults('Error: ', false);\r\n } else {\r\n showErrorMessage(\"Please provide address or postal code.\");\r\n ui.$resultsSection.show();\r\n hideLoader();\r\n ui.$loadingSpinner.addClass('hidden');\r\n console.log('Geocode was not successful for the following reason: ' + status);\r\n ui.$resultsCount.text('0');\r\n ui.$zipcodeLabel.text(ui.$zipcode);\r\n ui.$nextResult.hide();\r\n removeMarkers();\r\n ui.$resultsContainer.empty();\r\n }\r\n });\r\n }\r\n\r\n function initZipcode(e) {\r\n let zipCodeValue = ui.$zipcodeInput.val();\r\n ui.$zipcode = ui.$zipcodeInput.val();\r\n let maxCharacters = 5;\r\n ui.$zipcode = ui.$zipcodeInput.val();\r\n // console.log('buttonvalue', ui.$zipcode, e.target.value)\r\n if (ui.$zipcode != '') {\r\n ui.$searchClearbBtn.removeClass('hidden');\r\n } else {\r\n ui.$searchClearbBtn.addClass('hidden');\r\n }\r\n\r\n //Need to check if IsCanada = true\r\n if (ui.isCanada === 'true') {\r\n let isValidCanadaZipCode = canadaZipCodeRegex.test(zipCodeValue);\r\n\r\n if (isValidCanadaZipCode) {\r\n ui.$zipcode = zipCodeValue;\r\n if (e.key === 'Enter' || e.keyCode === 13) {\r\n initGeocoder();\r\n }\r\n }\r\n\r\n } else {\r\n\r\n\r\n if (zipCodeValue.length > 0) {\r\n ui.$zipcode = zipCodeValue;\r\n if (e.key === 'Enter' || e.keyCode === 13) {\r\n initGeocoder();\r\n }\r\n }\r\n }\r\n }\r\n\r\n function getFAHSearchParams() {\r\n let radiusValue = $(ui.$searchRadius).val();\r\n radiusValue = (radiusValue == undefined || radiusValue == null || radiusValue == \"\") ? ui.$defaultRadius : radiusValue;\r\n ui.$bounds = getBounds(ui.$currentLat, ui.$currentLng, radiusValue);\r\n let minMaxValues = calcMinMaxLatLng(ui.$bounds);\r\n //console.log(\"LangitudeFAH\", ui.$currentLat, ui.$currentLng)\r\n\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n const myParam = urlParams.get('utm_source');\r\n\r\n let fahSearchParams = {\r\n CurrentLat: ui.$currentLat,\r\n CurrentLng: ui.$currentLng,\r\n MinLatitude: minMaxValues.minLat,\r\n MaxLatitude: minMaxValues.maxLat,\r\n MinLongitude: minMaxValues.minLng,\r\n MaxLongitude: minMaxValues.maxLng,\r\n Radius: radiusValue,\r\n SearchText: ui.$zipcode,\r\n HospitalType: ui.hospitalType,\r\n HospitalTypeDisplayName: ui.hospitalTypeName,\r\n Country: ui.$countryId,\r\n DataItemId: ui.$dataId,\r\n UtmParam: (myParam != null && myParam != \"\") ? myParam : urlParams.get('utmsource')\r\n }\r\n\r\n return fahSearchParams;\r\n }\r\n\r\n async function getSearchResults(errorMessage) {\r\n ui.$resultsContainer.empty();\r\n ui.$zipcodeLabel.text(ui.$zipcode);\r\n ui.$resultsContainer.addClass('hidden');\r\n ui.$errorMsgContainer.addClass('hidden');\r\n showLoader();\r\n ui.$loadingSpinner.removeClass('hidden');\r\n let fahSearchParams = getFAHSearchParams();\r\n ui.$nextResult.hide();\r\n ui.$existLabel.removeClass('hidden');\r\n ui.$resultsSection.show();\r\n const dataStruct = $('.find-a-hospital').find('[data-region=\"mapEnableButton\"]').val();\r\n ui.$bounds = getBounds(fahSearchParams.CurrentLat, fahSearchParams.CurrentLng, fahSearchParams.Radius);\r\n\r\n await getHospitals.post(fahSearchParams)\r\n .then(response => {\r\n if (response.data.OK) {\r\n let data = response.data.result;\r\n searchHospitalsList = response.data.result;\r\n let sortedData = sortResults(data);\r\n removeMarkers();\r\n if (dataStruct === 'true') {\r\n ui.$viewMapBtn.addClass('hidden');\r\n ui.$resultsSection.find('.-nca-list').remove();\r\n getHospitalMapList(sortedData);\r\n } else {\r\n createCard(sortedData);\r\n ui.$viewMapBtn.removeClass('hidden');\r\n ui.$viewMapBtnList.addClass('hidden');\r\n }\r\n ui.$loadingSpinner.addClass('hidden');\r\n hideLoader();\r\n ui.$resultsContainer.removeClass('hidden');\r\n ui.$resultsCount.text(response.data.result.length);\r\n ui.$milesCount.text(ui.$searchRadius.val());\r\n\r\n if (ui.$zipcodeInput.val() !== '') {\r\n ui.$hideZipCode.show();\r\n } else {\r\n ui.$hideZipCode.hide();\r\n }\r\n\r\n $('.js-open-coupon-modal').on('click', showFormModal);\r\n if (response.data.result.length === 0) {\r\n showErrorMessage(\"No Results.\");\r\n }\r\n } else {\r\n removeMarkers();\r\n ui.$existLabel.addClass('hidden');\r\n ui.$viewMapBtn.addClass('hidden');\r\n ui.$viewMapBtnList.addClass('hidden');\r\n ui.$loadingSpinner.addClass('hidden');\r\n hideLoader();\r\n ui.$resultsCount.text('0');\r\n showErrorMessage(response.data.error);\r\n }\r\n })\r\n .catch(error => {\r\n ui.$loadingSpinner.addClass('hidden');\r\n showLoader();\r\n ui.$errorMsgContainer.removeClass('hidden');\r\n ui.$resultsCount.text('0');\r\n handleLocationError(true, infoWindow, ui.$map.getCenter());\r\n console.log(errorMessage, error.response);\r\n });\r\n }\r\n\r\n function showLoader() {\r\n ui.$ncaContainer.css('opacity', '.9').css('pointer-events', 'none');\r\n }\r\n\r\n function hideLoader() {\r\n ui.$ncaContainer.css('opacity', '1').css('pointer-events', 'all');\r\n }\r\n\r\n function createCard(hospitals) {\r\n var bounds = new google.maps.LatLngBounds();\r\n\r\n for (var a = 0; a < hospitals.length; a++) {\r\n var hospitalHours = hospitals[a].HospitalHours;\r\n var hoursObj = [];\r\n var hospitalTypesTags = hospitals[a].HospitalTypes;\r\n var hospitalPhoneNumbers = hospitals[a].PhoneNumbers;\r\n var parentContainer = $(document.createElement('li')).addClass('search-item find-a-hospital__nca-search-item');\r\n var leftContainer = $(document.createElement('div')).addClass('search-item__left');\r\n var rightContainer = $(document.createElement('div')).addClass('search-item__right');\r\n var ncaTag = $(document.createElement('div')).addClass('');\r\n var phoneContainer = $(document.createElement('div')).addClass('search-item__phone-hours search-item__wicon');\r\n var mobileHeaderWrapper = $(document.createElement('div')).addClass('');\r\n var typeTagsWrapper = $(document.createElement('ul')).addClass('search-item__type-tags');\r\n var descContainer = $(document.createElement('div')).addClass('search-item__desc-wrapper');\r\n var ctaContainer = $(document.createElement('div')).addClass('search-item__cta-container');\r\n var ctaPhoneNumber = $(document.createElement('div')).addClass('search-item__phone-container');\r\n var ctaHours = $(document.createElement('div')).addClass('search-item__hospital-hours-container');\r\n var ctaHoursList = $(document.createElement('div')).addClass('search-item__phone-hours search-item__wicon');\r\n var btnContainer = $(document.createElement('div')).addClass('search-item__btn-container');\r\n var modalContainer = $(document.createElement('div')).addClass('hours-modal').attr({\r\n 'id': `HoursModal-${a}`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var modalContentWrapper = $(document.createElement('div')).addClass('hours-modal__content modal-content').attr('role', 'document');\r\n var modalHoursWrapper = $(document.createElement('ul')).addClass('hours-modal__hours-list');\r\n var sphmodalContainer = $(document.createElement('div')).addClass('sph-hours-modal').attr({\r\n 'id': `HoursModal-${a}`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var sphmodalContentWrapper = $(document.createElement('div')).addClass('sph-hours-modal__content modal-content').attr('role', 'document');\r\n var sphmodalHoursWrapper = $(document.createElement('ul')).addClass('sph-hours-modal__hours-list');\r\n var emergencymodalContainer = $(document.createElement('div')).addClass('emergency-hours-modal').attr({\r\n 'id': `HoursModal-${a}`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var emergencymodalContentWrapper = $(document.createElement('div')).addClass('emergency-hours-modal__content modal-content').attr('role', 'document');\r\n var emergencymodalHoursWrapper = $(document.createElement('ul')).addClass('emergency-hours-modal__hours-list');\r\n\r\n // Calculate distance \r\n var locationA = {\r\n latitude: hospitals[a].Latitude,\r\n longitude: hospitals[a].Longitude\r\n };\r\n var locationB = {\r\n latitude: ui.$currentLat,\r\n longitude: ui.$currentLng\r\n } //Need to modify this line of code\r\n var calcMiles = (haversine(locationA, locationB) * 0.000621371).toFixed(1);\r\n var distanceApart = `${calcMiles}`;\r\n\r\n // Create Google Map Markers \r\n\r\n var marker = new google.maps.marker.AdvancedMarkerElement({\r\n position: { lat: parseFloat(hospitals[a].Latitude), lng: parseFloat(hospitals[a].Longitude) }, // LatLngLiteral format\r\n map: ui.$map,\r\n id: hospitals[a].HospitalId\r\n });\r\n\r\n ui.$markers.push(marker);\r\n\r\n var label = new google.maps.InfoWindow({\r\n content: hospitals[a].Name,\r\n maxWidth: 200\r\n });\r\n\r\n google.maps.event.addListener(marker, 'click', (function (marker, infowindow) {\r\n return function () {\r\n infowindow.open(ui.$map, marker);\r\n };\r\n })(marker, label));\r\n\r\n // Extend the bounds with the marker's position\r\n bounds.extend(marker.position);\r\n\r\n\r\n // Create hospital type tags (left section)\r\n let imageWrapper = (`<a class='find-a-hospital__image-wrap js-hospital-dl-btn' href='${hospitals[a].Url}' style='background-image:url(${hospitals[a].HospitalImageUrl})'></a>`);\r\n\r\n if (hospitalTypesTags !== null) {\r\n for (var b = 0; b < hospitalTypesTags.length; b++) {\r\n if (hospitalTypesTags[b].RedirectUrl !== null && hospitalTypesTags[b].RedirectUrl !== \"\") {\r\n typeTagsWrapper.append(`<a class='search-item__tag tag-text-decoration ${(hospitalTypesTags[b].DisplayName.includes(\"Primary\") || hospitalTypesTags[b].DisplayName === 'Cat Only')\r\n ? 'pv-tag' : (hospitalTypesTags[b].DisplayName == 'Boarding & Grooming' || hospitalTypesTags[b].DisplayName == 'Boarding' || hospitalTypesTags[b].DisplayName == 'Grooming')\r\n ? 'bg-tag' : hospitalTypesTags[b].DisplayName == 'Urgent Care'\r\n ? 'uc-tag' : hospitalTypesTags[b].DisplayName == 'Emergency Care'\r\n ? 'ec-tag' : (hospitalTypesTags[b].DisplayName == 'Specialty Care' || hospitalTypesTags[b].DisplayName == 'Pet CancerCare Center')\r\n ? 'sc-tag' : ''}' href=\"${hospitalTypesTags[b].RedirectUrl}\">${hospitalTypesTags[b].DisplayName}</a>`);\r\n } else {\r\n typeTagsWrapper.append(`<span class='search-item__tag ${(hospitalTypesTags[b].DisplayName.includes(\"Primary\") || hospitalTypesTags[b].DisplayName === 'Cat Only')\r\n ? 'pv-tag' : (hospitalTypesTags[b].DisplayName == 'Boarding & Grooming' || hospitalTypesTags[b].DisplayName == 'Boarding' || hospitalTypesTags[b].DisplayName == 'Grooming')\r\n ? 'bg-tag' : hospitalTypesTags[b].DisplayName == 'Urgent Care'\r\n ? 'uc-tag' : hospitalTypesTags[b].DisplayName == 'Emergency Care'\r\n ? 'ec-tag' : (hospitalTypesTags[b].DisplayName == 'Specialty Care' || hospitalTypesTags[b].DisplayName == 'Pet CancerCare Center')\r\n ? 'sc-tag' : ''}'>${hospitalTypesTags[b].DisplayName}</span>`);\r\n }\r\n }\r\n }\r\n\r\n ncaTag.append(typeTagsWrapper)\r\n leftContainer.append(imageWrapper, ncaTag);\r\n\r\n // Create right section content\r\n var hospitalName = $(`<div class=\"search-item__mobile-title-image\"> <a class=\"search-item__header js-hospital-dl-btn\" data-hospital-name=\"${hospitals[a].Name}\" data-hospital-au=\"${hospitals[a].HospitalId}\" href=\"${hospitals[a].Url}\">${hospitals[a].Name}</a>\r\n <a class='oab-find-a-hospital__mob-image-wrap js-hospital-dl-btn' data-hospital-name=\"${hospitals[a].Name}\" data-hospital-au=\"${hospitals[a].HospitalId}\" href='${hospitals[a].Url}' style='background-image:url(${hospitals[a].HospitalImageUrl})'></a> </div>`);\r\n\r\n var ctaContainerEl = $(`<div class=\"search-item__cta-tags\">\r\n <div class=\"cta-row nca-fah-tags\">\r\n <a class=\"cta-tag ${hospitals[a].HasCareClub == true && hospitals[a].CareClubUrl !== null ? '' : 'hidden'}\" data-care-club=\"${hospitals[a].CareClubLabel}\" data-care-id=\"${hospitals[a].HospitalId}\" href=\"${hospitals[a].CareClubUrl}\">${hospitals[a].CareClubLabel}</a>\r\n <a class=\"cta-tag ${hospitals[a].HasNewClientOffer == true && hospitals[a].NewClientOfferUrl !== null ? '' : 'hidden'}\" data-care-club=\"${hospitals[a].NewClientOfferLabel}\" data-care-id=\"${hospitals[a].HospitalId}\" href=\"${hospitals[a].NewClientOfferUrl}\">${hospitals[a].NewClientOfferLabel}</a>\r\n </div>\r\n </div>`);\r\n\r\n var descContainerEl = $(`<div class=\"search-item__address search-item__wicon\">\r\n <div class=\"search-item__icon\"><img src=\"${ui.locationIcon}\" alt=\"address icon\"/></div>\r\n <div class=\"search-item__address-map\">\r\n <div >\r\n <div>${hospitals[a].AddressLine1} ${hospitals[a].AddressLine2}</div>\r\n <span>${hospitals[a].City}, ${hospitals[a].State} ${hospitals[a].Zipcode}</span>\r\n <span class=\"search-item__distance-away\">${distanceApart} ${hospitals[a].DistanceUnit}</span>\r\n </div>\r\n </div></div>\r\n\r\n <div class=\"search-item__side pr-4\">\r\n <a class=\"redirect-to-map ${hospitals[a].DirectionUrl == null || hospitals[a].DirectionUrl == '' || hospitals[a].AddressLine1 === '' || hospitals[a].AddressLine1 === null ? 'hidden' : ''}\" data-get-direction=\"Direction\" data-get-id=\"${hospitals[a].HospitalId}\" href=\"${hospitals[a].DirectionUrl}\" target=\"_blank\">\r\n Directions\r\n </a>\r\n </div>`);\r\n\r\n var btnContainerEl = $(`<div class=\"search-item__cta-tags\">\r\n <div class=\"cta-row\">\r\n <button\r\n data-hospital-name=\"${hospitals[a].Name}\"\r\n data-toggle=\"modal\"\r\n data-target=\"NCAFormModal\"\r\n data-hospital-au=\"${hospitals[a].HospitalId}\"\r\n data-hospital-setting=\"${hospitals[a].HospitalSettingsItemId}\"\r\n data-hospital-siteid=\"${hospitals[a].HospitalSiteId}\"\r\n data-media-reach-offerid=\"${hospitals[a].MediaReachOfferId}\"\r\n class=\"btn btn-sunny js-open-coupon-modal\" href=\"#\">Get Coupon</button>\r\n </div>\r\n </div>`);\r\n\r\n // Create Modal\r\n var ctaHoursEl = $(`\r\n <div class=\"search-item__icon ${hospitals[a].IsComingSoonHospital == true ? `hidden` : ``}\">\r\n <img src=\"../../../images-2/hours-fah-icon.svg\" alt=\"hospital hours icon\">\r\n </div>`);\r\n\r\n if (hospitalHours !== null) {\r\n for (var i = 0; i < hospitalHours.length; i++) {\r\n hoursObj = hospitalHours[i].HospitalHoursList;\r\n\r\n ctaHours.append(`\r\n <li class=\" hospital-hours-list ${hospitals[a].IsComingSoonHospital == true ? `hidden` : ``}\">\r\n <span class=\"search-item__hours-modal-link ${hospitalHours[i].HoursIndex == '0' ? `hours-modal-btn` : hospitalHours[i].HoursIndex == '1' ? 'sph-hours-modal-btn' : `emergency-hours-modal-btn`}\" > ${hospitalHours[i].HoursName}</span>\r\n <span class=\"search-item__status ${hospitalHours[i].IsOpen == true ? `open` : `closed`}\">${hospitalHours[i].IsOpen == true ? `${hospitals[a].OpenLabel}` : `${hospitals[a].CloseLabel}`}</span>\r\n </li>`);\r\n\r\n var modalBtnAndTitle = $(`\r\n <button type=\"button\" class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__close-btn close-btn` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__close-btn sph-close-btn` : `emergency-hours-modal__close-btn emergency-close-btn`}\" aria-label=\"close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n <div class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__header` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__header` : `emergency-hours-modal__header`}\">${hospitalHours[i].HoursName}</div>\r\n `);\r\n\r\n var bottomModalSection = $(`\r\n <div class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__divider` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__divider` : `emergency-hours-modal__divider`}\"></div>\r\n <p class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__message` : hospitalHours[i].HoursIndex == '1' ? `emergency-hours-modal__message` : `sph-hours-modal__message`} ${hospitals[a].HoursDisclaimer == null || hospitals[a].HoursDisclaimer == '' ? 'hidden' : ''}\">${hospitals[a].HoursDisclaimer}</p>\r\n <a class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__link` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__link` : `emergency-hours-modal__link`}\" href=\"${hospitalHours[i].HoursPageUrl}\">View hospital info »</a>\r\n `);\r\n\r\n if (hoursObj !== null) {\r\n hoursObj.forEach(function (hourObj) {\r\n if (hourObj.Label !== null && hourObj.Label !== undefined && hourObj.Label.includes(\"_\")) {\r\n return;\r\n }\r\n var day = hourObj.Label;\r\n var isCurrentDay = hourObj.IsCurrentDay;\r\n var isTemporaryHours = hourObj.IsTemporaryHours;\r\n\r\n var filteredObj = (hoursObj).filter((hour) => hour !== null && hour !== undefined && hour.Label !== null && hour.Label !== undefined && hour.Label.includes(day)).map(({ Hours }) => Hours);\r\n\r\n let timeList = bindHoursList(filteredObj, isTemporaryHours);\r\n\r\n if (hospitalHours[i].HoursIndex == '0') {\r\n modalHoursWrapper.append(`<li class=\"${isCurrentDay ? 'active' : ''}\">\r\n <span class=\"day\">${day}</span>\r\n <div class=\"time\">${timeList}</div>\r\n </li>`);\r\n } else if (hospitalHours[i].HoursIndex == '1') {\r\n sphmodalHoursWrapper.append(`<li class=\"${isCurrentDay ? 'active' : ''}\">\r\n <span class=\"day\">${day}</span>\r\n <div class=\"time\">${timeList}</div>\r\n </li>`);\r\n } else {\r\n emergencymodalHoursWrapper.append(`<li class=\"${isCurrentDay ? 'active' : ''}\">\r\n <span class=\"day\">${day}</span>\r\n <div class=\"time\">${timeList}</div>\r\n </li>`);\r\n }\r\n });\r\n\r\n if (hospitalHours[i].HoursIndex == '0') {\r\n modalContainer.append(modalContentWrapper);\r\n modalContentWrapper.append(modalBtnAndTitle, modalHoursWrapper, bottomModalSection);\r\n ctaHoursList.append(ctaHoursEl, ctaHours)\r\n parentContainer.append(leftContainer, rightContainer, modalContainer);\r\n } else if (hospitalHours[i].HoursIndex == '1') {\r\n sphmodalContainer.append(sphmodalContentWrapper);\r\n sphmodalContentWrapper.append(modalBtnAndTitle, sphmodalHoursWrapper, bottomModalSection);\r\n ctaHoursList.append(ctaHours)\r\n parentContainer.append(leftContainer, rightContainer, sphmodalContainer);\r\n } else {\r\n emergencymodalContainer.append(emergencymodalContentWrapper);\r\n emergencymodalContentWrapper.append(modalBtnAndTitle, emergencymodalHoursWrapper, bottomModalSection);\r\n ctaHoursList.append(ctaHours)\r\n parentContainer.append(leftContainer, rightContainer, emergencymodalContainer);\r\n }\r\n }\r\n }\r\n }\r\n\r\n var ctaPhoneContainer = $(`<div class=\"search-item__icon\">\r\n <img src=\"../../../images-2/contact-fah-icon.svg\" alt=\"phone icon\">\r\n </div>`);\r\n\r\n if (hospitalPhoneNumbers !== null) {\r\n for (var i = 0; i < hospitalPhoneNumbers.length; i++) {\r\n ctaPhoneNumber.append(`<span class= \"find-a-hospital__phone-label\"> ${hospitalPhoneNumbers[i].PhoneLabel}<a class=\"phone-number\" href=\"tel:${hospitalPhoneNumbers[i].PhoneNumber}\">${hospitalPhoneNumbers[i].PhoneNumber}</a></span>`)\r\n }\r\n }\r\n\r\n ctaContainer.append(ctaContainerEl);\r\n phoneContainer.append(ctaPhoneContainer, ctaPhoneNumber);\r\n mobileHeaderWrapper.append(hospitalName);\r\n // ctaPhoneContainer.append(ctaHoursEl); \r\n descContainer.append(descContainerEl, phoneContainer, ctaHoursList);\r\n btnContainer.append(ctaContainer, btnContainerEl);\r\n rightContainer.append(mobileHeaderWrapper, descContainer, btnContainer);\r\n ui.$resultsContainer.append(parentContainer)\r\n ui.$map.fitBounds(bounds);\r\n }\r\n\r\n //Bind events after dynamic content has been created\r\n ui.$modalBtn = $('.hours-modal-btn');\r\n ui.$hospitalDLPush = $('.js-hospital-dl-btn');\r\n ui.$closeBtn = $('.close-btn');\r\n ui.$modalBtn.on('click', openModal);\r\n ui.$hospitalDLPush.on('click', clickEventDL);\r\n ui.$closeBtn.on('click', closeModal);\r\n ui.$sphmodalBtn = $('.sph-hours-modal-btn');\r\n ui.$sphcloseBtn = $('.sph-close-btn');\r\n ui.$sphmodalBtn.on('click', openSphModal);\r\n ui.$sphcloseBtn.on('click', closeSphModal);\r\n ui.$emergencymodalBtn = $('.emergency-hours-modal-btn');\r\n ui.$emergencycloseBtn = $('.emergency-close-btn');\r\n ui.$emergencymodalBtn.on('click', openEmergencyModal);\r\n ui.$emergencycloseBtn.on('click', closeEmergencyModal);\r\n ui.$viewOnMapBtn = $('[data-control=\"viewOnMapBtn\"]');\r\n ui.$viewOnMapBtn.on('click', function () {\r\n highlightMarker($(this).data('num'))\r\n });\r\n\r\n ui.$careClubAnalystic = $('.nca-fah-tags');\r\n ui.$careClubAnalystic.on('click', careClubDataAnalystic);\r\n ui.$getDirectionAnalystic = $('.redirect-to-map');\r\n ui.$getDirectionAnalystic.on('click', getdirectionDataAnalystic);\r\n\r\n if (hospitals.length === 1) {\r\n ui.$map.setZoom(15);\r\n }\r\n\r\n if (hospitals.length === 0) {\r\n setDefaultMarker();\r\n }\r\n\r\n if (hospitals.length > 2) {\r\n ui.$nextResult.show();\r\n }\r\n }\r\n\r\n function bindHoursList(timeList, isTemporaryHours) {\r\n return timeList.map((hourtime) => {\r\n return `\r\n <span>\r\n ${hourtime} \r\n <span class=\"${isTemporaryHours ? '' : 'hidden'}\">*</span>\r\n </span>\r\n `;\r\n }).join('');\r\n }\r\n\r\n function getBounds(lat, lng, radius) {\r\n let ConvertedRadius = radius * 1609.34;\r\n lat = parseFloat(lat);\r\n lng = parseFloat(lng);\r\n\r\n // add to canada site\r\n if (ui.isCanada === 'true') {\r\n ConvertedRadius = radius * 1000;\r\n }\r\n\r\n var circleData = {\r\n center: {\r\n lat,\r\n lng\r\n },\r\n radius: ConvertedRadius\r\n };\r\n\r\n if (window['google']) {\r\n return new window['google'].maps.Circle(circleData).getBounds();\r\n }\r\n }\r\n\r\n function calcMinMaxLatLng(bounds) {\r\n var obj = {\r\n minLat: bounds.getNorthEast().lat(),\r\n maxLat: bounds.getSouthWest().lat(),\r\n minLng: bounds.getNorthEast().lng(),\r\n maxLng: bounds.getSouthWest().lng()\r\n }\r\n return obj;\r\n }\r\n\r\n function closeModal(e) {\r\n e.stopPropagation();\r\n var parentEl = e.target.closest('.hours-modal');\r\n $(parentEl).css('display', 'none');\r\n }\r\n\r\n function closeSphModal(e) {\r\n e.stopPropagation();\r\n var parentEl = e.target.closest('.sph-hours-modal');\r\n $(parentEl).css('display', 'none');\r\n }\r\n\r\n function closeEmergencyModal(e) {\r\n e.stopPropagation();\r\n var parentEl = e.target.closest('.emergency-hours-modal');\r\n $(parentEl).css('display', 'none');\r\n }\r\n\r\n function showFormModal(e) {\r\n let el = $(e.target);\r\n let target = $(e.target)[0];\r\n if ($(target).hasClass('tooltip-icon') || $(target).hasClass('uc-hero-panel__tooltip')) {\r\n e.preventDefault();\r\n return;\r\n } else {\r\n ui.hospitalName = el.data('hospital-name');\r\n ui.hospitalId = el.data('hospital-au');\r\n ui.mediareachofferId = el.data('media-reach-offerid');\r\n ui.hospitalSiteId = el.data('hospital-siteid');\r\n ui.hospitalSettingsItemId = el.data('hospital-setting');\r\n ui.$modalHospitalName.text(ui.hospitalName);\r\n getCouponData(ui.hospitalId, ui.mediareachofferId);\r\n ui.$NCAModal.modal('show');\r\n window.VCA.ucfahDatalayer.datalayerPushClick('Get Coupon', el.data('hospital-au'), 'NCA find a hospital');\r\n }\r\n }\r\n\r\n function careClubDataAnalystic(e) {\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('care-club'), el.data('care-id'), 'NCA find a hospital');\r\n }\r\n\r\n function getdirectionDataAnalystic(e) {\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('get-direction'), el.data('get-id'), 'NCA find a hospital');\r\n }\r\n\r\n async function getCouponData(hospitalId, mediareachofferId) {\r\n ui.$modalLoader.show();\r\n ui.$modalBody.addClass('-loading');\r\n $ShowOabFaa = \"\";\r\n\r\n let payload = {\r\n 'hospitalId': hospitalId,\r\n 'mediareachofferid': mediareachofferId\r\n }\r\n await getCoupon.query(payload)\r\n .then(response => {\r\n if (response.data.OK) {\r\n let data = response.data.result;\r\n $ShowOabFaa = data.ShowOabFaa;\r\n\r\n ui.$couponTitle.text(data.Title);\r\n ui.$couponMessage.html(data.Description);\r\n ui.$couponHeaderLogo.attr('src', data.HeaderLogoUrl).attr('alt', data.HeaderLogoAlt);\r\n\r\n if (data.imageURL !== '' || data.imageURL !== null) {\r\n var img = document.createElement('img');\r\n img.src = data.CoverImageUrl;\r\n img.alt = data.CoverImageAlt;\r\n ui.$couponImage.append(img);\r\n ui.$couponImage.hide();\r\n } else {\r\n ui.$couponImage.hide();\r\n }\r\n ui.$modalLoader.hide();\r\n ui.$modalBody.removeClass('-loading');\r\n } else {\r\n ui.$modalLoader.hide();\r\n ui.$modalBody.removeClass('-loading');\r\n showErrorMessage(response.data.error);\r\n }\r\n })\r\n .catch(error => {\r\n ui.$modalLoader.hide();\r\n ui.$errorMsgContainer.removeClass('hidden');\r\n handleLocationError(true, infoWindow, ui.$map.getCenter());\r\n console.log(errorMessage, error.response);\r\n });\r\n }\r\n\r\n function handleLocationError(browserHasGeolocation, infoWindow, pos) {\r\n infoWindow.setPosition(pos);\r\n infoWindow.setContent(\r\n browserHasGeolocation ?\r\n \"Error: The Geolocation service failed.\" :\r\n \"Error: Your browser doesn't support geolocation.\"\r\n );\r\n infoWindow.open(ui.$map);\r\n hideLoader();\r\n ui.$loadingSpinner.addClass('hidden');\r\n showErrorMessage('Please provide address or zipcode.');\r\n }\r\n\r\n function openModal(e) {\r\n hidePopup()\r\n e.stopPropagation();\r\n var parentContainer = e.target.closest('.search-item');\r\n var modal = $(parentContainer).find('.hours-modal');\r\n $(modal).css('display', 'block');\r\n }\r\n\r\n function openSphModal(e) {\r\n hidePopup()\r\n e.stopPropagation();\r\n var parentContainer = e.target.closest('.search-item');\r\n var modal = $(parentContainer).find('.sph-hours-modal');\r\n $(modal).css('display', 'block');\r\n }\r\n\r\n function openEmergencyModal(e) {\r\n hidePopup()\r\n e.stopPropagation();\r\n var parentContainer = e.target.closest('.search-item');\r\n var modal = $(parentContainer).find('.emergency-hours-modal');\r\n $(modal).css('display', 'block');\r\n }\r\n\r\n function clickEventDL(e) {\r\n var parentContainer = e.target.closest('.search-item');\r\n var hospitalAU = $(parentContainer).find('.js-open-coupon-modal').attr('data-hospital-au');\r\n let action = 'hub-select hospital';\r\n if ($(e.target).hasClass(\"redirect-to-map\") || $(e.target).parent().hasClass(\"redirect-to-map\")) {\r\n action = 'hub-view map';\r\n }\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('hospital-name'), el.data('hospital-au'), 'NCA find a hospital');\r\n }\r\n\r\n function removeMarkers() {\r\n for (let i = 0; i < ui.$markers.length; i++) {\r\n ui.$markers[i].setMap(null);\r\n }\r\n }\r\n\r\n function setCurrentDate() {\r\n var dotw = '';\r\n switch (new Date().getDay()) {\r\n case 0:\r\n dotw = \"Sun\";\r\n break;\r\n case 1:\r\n dotw = \"Mon\";\r\n break;\r\n case 2:\r\n dotw = \"Tues\";\r\n break;\r\n case 3:\r\n dotw = \"Wed\";\r\n break;\r\n case 4:\r\n dotw = \"Thurs\";\r\n break;\r\n case 5:\r\n dotw = \"Fri\";\r\n break;\r\n case 6:\r\n dotw = \"Sat\";\r\n }\r\n\r\n return dotw;\r\n }\r\n\r\n function setDefaultMarker() {\r\n var currentLatLng = { lat: ui.$defaultLatitude, lng: ui.$defaultLongitude };\r\n var marker = new google.maps.marker.AdvancedMarkerElement({\r\n position: currentLatLng,\r\n map: ui.$map,\r\n animation: google.maps.Animation.DROP,\r\n zoom: 8,\r\n center: currentLatLng\r\n });\r\n }\r\n\r\n function setSearchDefaultRadius() {\r\n ui.$searchRadius.val(ui.$defaultRadius);\r\n if (ui.isCanada === 'true') {\r\n $('.find-search__dropdown-btn').text(`${ui.$defaultRadius} KM`);\r\n } else {\r\n $('.find-search__dropdown-btn').text(`${ui.$defaultRadius} miles`);\r\n }\r\n var radiusOnLoad = $('.find-search__dropdown-list').find(`[data-value=\"${ui.$defaultRadius}\"]`)[0];\r\n $(radiusOnLoad).addClass('focused selected');\r\n }\r\n\r\n function showErrorMessage(errorMessage) {\r\n ui.$errorMessage.text(errorMessage);\r\n ui.$errorMsgContainer.removeClass('hidden');\r\n }\r\n\r\n function sortResults(data) {\r\n var results = [...data];\r\n $(results).each(function () {\r\n var hospLat = this.Latitude;\r\n var hospLng = this.Longitude;\r\n var setA = {\r\n latitude: hospLat,\r\n longitude: hospLng\r\n };\r\n var setB = {\r\n latitude: ui.$currentLat,\r\n longitude: ui.$currentLng\r\n }\r\n var miles = (haversine(setA, setB) * 0.000621371).toFixed(1);\r\n this.miles = Number(miles);\r\n });\r\n var sortedArray = results.sort(function (a, b) {\r\n return a.miles - b.miles\r\n });\r\n return sortedArray;\r\n }\r\n\r\n function validateForm(evt) {\r\n evt.preventDefault();\r\n ui.$APIErrorMessage.hide();\r\n submitSpinner.startLoadingSpinner(ui.$NCAFormSubmitBtn);\r\n\r\n if (!checkForm()) {\r\n submitSpinner.stopLoadingSpinner(ui.$NCAFormSubmitBtn);\r\n return;\r\n } else {\r\n initPostForm();\r\n }\r\n }\r\n\r\n function checkForm() {\r\n let phoneReg = /^[2-9]\\d{9}$/;\r\n let emailRegex = /(^[a-zA-Z0-9_.]+[@]{1}[a-zA-Z0-9\\-]+[\\.][a-zA-Z]+$)/;\r\n let valid = true;\r\n\r\n $('.nca-form input').each(function (index) {\r\n let el = $(this);\r\n var elmId = el.attr('id');\r\n\r\n if (elmId == 'NCAPhoneNum') {\r\n let phone = ui.$NCAFormPhoneNum.val();\r\n if (!phoneReg.test(phone)) {\r\n ui.$NCAFormPhoneNum.addClass('error');\r\n ui.$NCAFormPhoneNum.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n ui.$NCAFormPhoneNum.removeClass('error');\r\n ui.$NCAFormPhoneNum.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n else if (elmId == 'NCAEmail') {\r\n let email = ui.$NCAEmail.val();\r\n if (!emailRegex.test(email)) {\r\n ui.$NCAEmail.addClass('error');\r\n ui.$NCAEmail.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n ui.$NCAEmail.removeClass('error');\r\n ui.$NCAEmail.closest('.form-label-group').removeClass('error');\r\n }\r\n } else if (elmId == 'NCAZip') {\r\n let email = ui.$NCAZip.val();\r\n if (!usZipCodeRegex.test(email)) {\r\n ui.$NCAZip.addClass('error');\r\n ui.$NCAZip.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n ui.$NCAZip.removeClass('error');\r\n ui.$NCAZip.closest('.form-label-group').removeClass('error');\r\n }\r\n } else {\r\n if (el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n });\r\n return valid;\r\n }\r\n\r\n async function initPostForm() {\r\n const url = '/api/NCA/SubmitNCAForm';\r\n let api = new ApiService(url);\r\n $('.nca-form ').find('#nca-errormessage').hide();\r\n\r\n let $FirstName = ui.$VMRForm.find('#NCAFirstName').val();\r\n let $LastName = ui.$VMRForm.find('#NCALastName').val();\r\n let $Email = ui.$VMRForm.find('#NCAEmail').val();\r\n let $Phone = ui.$VMRForm.find('#NCAPhoneNum').val();\r\n let $Zip = ui.$VMRForm.find('#NCAZip').val();\r\n var $refUrl = document.referrer;\r\n var $currUrl = window.location.href;\r\n var redirect = $('#nca-redirectlink').val();\r\n\r\n //40253: [Paid Media] Coupon Confirmation Page – Add Call Tracking Number\r\n //Pass the UTM param to the thank you page to display the tracking number\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n const myParam = urlParams.get('utm_source');\r\n const utmParam = (myParam != null && myParam != \"\") ? myParam : urlParams.get('utmsource');\r\n\r\n let payload = {\r\n \"firstName\": $FirstName,\r\n \"lastName\": $LastName,\r\n \"email\": $Email,\r\n \"phone\": $Phone,\r\n \"zip\": $Zip,\r\n \"refUrl\": $refUrl,\r\n \"currUrl\": $currUrl,\r\n \"RedirectionUrl\": redirect,\r\n \"HospitaSettinglId\": ui.hospitalSettingsItemId,\r\n \"hospitalSiteId\": ui.hospitalSiteId,\r\n \"MediaReachOfferId\": ui.mediareachofferId,\r\n \"UtmSource\": utmParam,\r\n \"ShowOabFaa\": $ShowOabFaa\r\n }\r\n const { data, success, error } = await api.post(payload);\r\n if (success) {\r\n if (data.LeadId != '' && data.LeadId != null) {\r\n\r\n localStorage.setItem('expiry', new Date().getTime() + 15 * 60 * 1000);\r\n localStorage.setItem('NcaUserDetails', JSON.stringify(payload));\r\n\r\n //google analytics\r\n window.dataLayer.push({\r\n event: 'clickevent',\r\n category: 'NCA find a hospital',\r\n action: 'Get coupon',\r\n label: ui.hospitalName\r\n });\r\n\r\n //40253: [Paid Media] Coupon Confirmation Page – Add Call Tracking Number\r\n //Pass the UTM param to the thank you page to display the tracking number\r\n if (ui.mediareachofferId != null && ui.mediareachofferId != \"\") {\r\n window.location.assign(data.CouponUrl + \"&utm=\" + utmParam);\r\n } else {\r\n window.location.assign(data.CouponUrl);\r\n }\r\n\r\n } else {\r\n window.location.assign(data.CouponUrl);\r\n }\r\n } else {\r\n $('.nca-form ').find('#nca-errormessage').show();\r\n submitSpinner.stopLoadingSpinner(ui.$NCAFormSubmitBtn);\r\n }\r\n }\r\n\r\n function getHospitalMapList(hospitalsList) {\r\n const $mapCarousel = $('.js-map-card-carousel');\r\n const EnableSprint42Change = $('.find-a-hospital').find('[data-region=\"EnableSprint42Change\"]').val();\r\n $mapCarousel.find('[data-region=\"mapSliderCardDetails\"]').remove();\r\n $mapCarousel.removeClass('js-cards-carousel');\r\n\r\n if ($mapCarousel.hasClass('slick-initialized')) {\r\n $mapCarousel.slick('unslick');\r\n }\r\n for (var i = 0; i < hospitalsList.length; i++) {\r\n let hospital = hospitalsList[i];\r\n const hospitalMapDetail = {\r\n hospitalName: hospital.Name,\r\n latitude: hospital.Latitude,\r\n longitude: hospital.Longitude\r\n }\r\n let iframeStructure = new MapFrame(hospitalMapDetail);\r\n const iframe = iframeStructure.constructMapFrame();\r\n const randomNumbers = Math.floor(Math.random() * 10000);\r\n let phoneNumbersContainer = hospitalsList[i].PhoneNumbers;\r\n let ctaPhoneNumbers = '';\r\n let hospitalnameredirectlink = '';\r\n\r\n if (EnableSprint42Change === 'true') {\r\n hospitalnameredirectlink = `<span class=\"map-card-slider__name\">\r\n ${hospital.Name}\r\n </span>`;\r\n } else {\r\n hospitalnameredirectlink = `<a href=${hospital.Url} class=\"map-card-slider__name\">\r\n ${hospital.Name}\r\n </a>`;\r\n }\r\n\r\n if (phoneNumbersContainer) {\r\n ctaPhoneNumbers = phoneNumbersContainer.map((numbers) => {\r\n if (numbers.PhoneNumber) {\r\n return `\r\n <span class=\"map-card-slider__phone mr-2\">\r\n ${numbers.PhoneLabel}\r\n <a href=\"tel:${numbers.PhoneNumber}\">${numbers.PhoneNumber}</a>\r\n </span>\r\n `;\r\n }\r\n }).join('');\r\n }\r\n $mapCarousel.append(`\r\n <div data-region=\"mapSliderCardDetails\">\r\n <div class=\"map-card-slider__card\">\r\n <div class=\"map-card-slider__google-map\" id=${'js-mapId-' + randomNumbers}>\r\n \r\n </div>\r\n <div class=\"map-card-slider__info-container\">\r\n <div class=\"map-card-slider__info-content col-xl-8\">\r\n <div class=\"map-card-slider__info mb-2 d-flex align-items-center col-12\">\r\n <div class=\"col\">\r\n <img src=\"../../../images-2/hospital-icon.png\" alt=\"hospital icon\">\r\n </div>\r\n <div class=\"col-10\"> \r\n ${hospitalnameredirectlink}\r\n </div>\r\n </div>\r\n <div class=\"map-card-slider__info mb-2 d-flex align-items-center col-12\">\r\n <div class=\"col\">\r\n <img src=\"../../../images-2/location-icon.png\" alt=\"address icon\">\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"map-card-slider__address\" >\r\n <span class=\"hosp-addr\">${hospital.AddressLine1}, ${hospital.AddressLine2}</span> <span class=\"hosp-city-state\">${hospital.City}, ${hospital.State} ${hospital.Zipcode}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"map-card-slider__info mb-2 d-flex align-items-center col-12\">\r\n <div class=\"col\">\r\n <img src=\"../../../images-2/nca_phone.svg\" alt=\"phone icon\">\r\n </div>\r\n <div class=\"col-10\">\r\n ${ctaPhoneNumbers}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"map-card-slider__button-container col-xl-4 d-flex align-center\">\r\n <button data-hospital-name=\"${hospital.Name}\"\r\n data-toggle=\"modal\"\r\n data-target=\"NCAFormModal\"\r\n data-hospital-au=\"${hospital.HospitalId}\"\r\n data-hospital-setting=\"${hospital.HospitalSettingsItemId}\"\r\n data-hospital-siteid=\"${hospital.HospitalSiteId}\"\r\n data-media-reach-offerid=\"${hospital.MediaReachOfferId}\"\r\n class=\"btn btn-sunset text-color-vca-white map-card-slider__btn js-open-coupon-modal\" href=\"#\">Get Coupon</button>\r\n </div>\r\n </div>\r\n </div> \r\n </div>\r\n `)\r\n document.getElementById('js-mapId-' + randomNumbers).append(iframe);\r\n }\r\n $mapCarousel.addClass('js-cards-carousel');\r\n window.VCA.DbCardsCarousel.initCarousel()\r\n }\r\n\r\n function init() {\r\n if ($('#FindAHospitalMap-NCA').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindEvents();\r\n initPage();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n\r\n if ($('#FindAHospitalMap-NCA').length <= 0) {\r\n return;\r\n }\r\n //check for hiding left arrow in filter pills carousel\r\n let primaryFilter = $('.filter-pills').find('.slick-slide')[0];\r\n let leftArrowBtn = $('.filter-pills').find('.slick-prev.slick-arrow');\r\n let primaryIsSelected = $(primaryFilter).hasClass('slick-active');\r\n if (primaryIsSelected) {\r\n $(leftArrowBtn).hide();\r\n }\r\n\r\n $('.slick-prev').on('click', function (event) {\r\n event.preventDefault();\r\n primaryFilter = $('.filter-pills').find('.slick-slide')[0];\r\n primaryIsSelected = $(primaryFilter).hasClass('slick-active');\r\n\r\n if (primaryIsSelected) {\r\n $(leftArrowBtn).hide();\r\n }\r\n });\r\n\r\n $('.slick-next').on('click', function (event) {\r\n event.preventDefault();\r\n $(leftArrowBtn).show();\r\n });\r\n\r\n const mapEl = document.getElementById('FindAHospitalMap-NCA');\r\n\r\n function checkForGoogleMapsUC() {\r\n setTimeout(() => {\r\n if ('google' in window && typeof google === 'object' && typeof google.maps === 'object' && mapEl) {\r\n // console.log('google', google);\r\n VCA.FindAHospitalUC.init(mapEl);\r\n }\r\n else {\r\n checkForGoogleMapsUC();\r\n }\r\n }, 1000);\r\n }\r\n\r\n checkForGoogleMapsUC();\r\n});","import haversine from 'haversine-distance';\r\nimport oabFindAHospital from '@api/routes/OAB/OAB';\r\nimport * as submitSpinner from '../custom-forms/form-loading';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.FindAHospitalOAB = (function ($) {\r\n var ui = {};\r\n var _urlParams = {};\r\n var hospitalListFAH;\r\n let canadaZipCodeRegex = /^[\\w\\- ]{5,}$/i;\r\n let usZipCodeRegex = /^(?:[1-9]|0(?!0{4}))\\d{4}(?:[-\\s]\\d{4})?$/i;\r\n var avalilablSlotPromise = [];\r\n var resultsAvailableSlot = [];\r\n var sortedData = [];\r\n var countHospitalList = 4;\r\n\r\n function cacheUI() {\r\n ui.$mapContainer = $(\"#FindAHospitalMap-OAB\");\r\n ui.$loadingSpinner = $('.search-results-container__loading');\r\n ui.$resultsSection = $('[data-region=\"resultsSectionOAB\"]');\r\n ui.$resultsContainer = $('[data-region=\"oabResultsListUL\"]');\r\n ui.$oabContainer = $('.oab-find-a-hospital');\r\n ui.$errorMsgContainer = $('.search-results-container__error-msg-container');\r\n ui.$errorMessage = $('.search-results-container__error-msg');\r\n ui.$viewMapBtn = $('[data-control=\"viewmapBtnMapOAB\"]');\r\n ui.$viewMapBtnList = $('[data-control=\"viewmapBtnListOAB\"]');\r\n ui.$resultsList = $('[data-region=\"resultsListOAB\"]');\r\n ui.$viewOnMapBtn = $('[data-control=\"viewOnMapBtnOAB\"]');\r\n ui.$mapRegion = $('[data-region=\"mapRegionOAB\"]');\r\n ui.$nextResult = $('[data-control=\"nextResultOAB\"]');\r\n ui.$prevResult = $('[data-control=\"prevResultOAB\"]');\r\n ui.$searchValue = $('#SearchInput');\r\n ui.$searchRadius = $('#SearchRadiusOAB');\r\n ui.$zipcode = '';\r\n ui.$zipcodeInput = $('[data-control=\"zipcodeInputOAB\"]');\r\n ui.$zipSubmitBtn = $('[data-control=\"zipSubmitBtnOAB\"]');\r\n ui.$zipcodeLabel = $('[data-label=\"ziplabelOAB\"]');\r\n ui.$existLabel = $('.OAB-results-label');\r\n ui.$resultsCount = $('[data-label=\"resultsCountOAB\"]');\r\n ui.$milesCount = $('[data-label=\"milesCountOAB\"]');\r\n ui.$hideZipCode = $('[data-control=\"hideZipCodeOAB\"]');\r\n ui.$defaultRadius = $('#defaultRadiusOAB').val();\r\n ui.$defaultLatitude = $(\"#defaultLatitudeOAB\").val();\r\n ui.$defaultLongitude = $(\"#defaultLongitudeOAB\").val();\r\n ui.$countryId = $('#countryId').val();\r\n ui.$dataId = $('#dataId').val();\r\n ui.isCanada = $('[data-iscanada]').attr('data-iscanada');\r\n ui.$searchClearButton = $('.js-searchbox');\r\n ui.$searchClearbBtn = $('.search-clear');\r\n\r\n // modal\r\n ui.$modalHospitalName = $('[data-label=\"modalHospitalName\"]');\r\n ui.$NCAModal = $('#NCAFormModal');\r\n ui.$NCAFormSubmitBtn = $('#NCAFormSubmit');\r\n ui.$VMRForm = $('.nca-form');\r\n ui.$APIErrorMessage = $('.nca-modal__error-msg');\r\n ui.$NCAZip = $('#NCAZip');\r\n ui.$NCAFormPhoneNum = $('#NCAPhoneNum');\r\n ui.$NCAEmail = $('#NCAEmail');\r\n ui.$NCALastName = $('#NCALastName');\r\n ui.$NCAFirstName = $('#NCAFirstName');\r\n ui.$InputEl = $('.nca-modal input');\r\n ui.$SelectEl = $('.nca-modal select');\r\n ui.$TextAreaEl = $('.nca-modal textarea');\r\n ui.$couponTitle = $('[data-label=\"couponTitle\"]');\r\n ui.$couponMessage = $('[data-label=\"couponMessage\"]');\r\n ui.$couponImage = $('[data-region=\"couponImage\"]');\r\n ui.$modalLoader = $('[data-control=\"modalLoader\"]');\r\n ui.$modalBody = $('[data-regoin=\"modalBody\"]');\r\n ui.$couponHeaderLogo = $('[data-control=\"couponHeaderLogo\"]');\r\n ui.$radiusFilterSearch = $('.find-search__dropdown-list-OAB')\r\n\r\n ui.$map;\r\n ui.$geocoder;\r\n ui.$currentLat;\r\n ui.$currentLng;\r\n ui.$bounds;\r\n ui.$prevSearchValue;\r\n ui.$markers = [];\r\n ui.$selectedFiltersArr = [];\r\n\r\n ui.locationIcon = $('#locationIcon').val();\r\n ui.contactIcon = $('#contactIcon').val();\r\n ui.servicesIcon = $('#servicesIcon').val();\r\n ui.hoursIcon = $('#hoursIcon').val();\r\n ui.hospitalType = $('#hospitalType').val();\r\n ui.hospitalTypeName = $('#hospitalTypeName').val();\r\n\r\n ui.hospitalName;\r\n ui.hospitalId;\r\n ui.hospitalSettingsItemId;\r\n ui.hospitalSiteId;\r\n\r\n $(ui.$zipcodeInput).val('');\r\n }\r\n\r\n function bindEvents() {\r\n ui.$viewMapBtn.on('click', toggleMap);\r\n ui.$viewMapBtnList.on('click', toggleMap);\r\n\r\n ui.$nextResult.on('click', function () {\r\n scrollResults('next')\r\n });\r\n ui.$prevResult.on('click', function () {\r\n scrollResults('prev')\r\n });\r\n ui.$radiusFilterSearch.on('click', function () {\r\n distanceFilterOAB();\r\n })\r\n ui.$resultsContainer.on('scroll', function () {\r\n scrollOabList()\r\n });\r\n ui.$searchClearbBtn.on('click', function () {\r\n clearSearchButton()\r\n })\r\n\r\n ui.$oabContainer.on('click', function (event) {\r\n if (!$('.hours-modal').is(event.target) && $('.hours-modal').has(event.target).length === 0) {\r\n $('.hours-modal').hide();\r\n }\r\n\r\n if (!$('.sph-hours-modal').is(event.target) && $('.sph-hours-modal').has(event.target).length === 0) {\r\n $('.sph-hours-modal').hide();\r\n }\r\n\r\n if (!$('.emergency-hours-modal').is(event.target) && $('.emergency-hours-modal').has(event.target).length === 0) {\r\n $('.emergency-hours-modal').hide();\r\n }\r\n\r\n if (!$('.appointment-visit-tag-modal').is(event.target) && $('.appointment-visit-tag-modal').has(event.target).length === 0 && !$('.faa-modal-btn').is(event.target) && $('.faa-modal-btn').has(event.target).length === 0) {\r\n $('.appointment-visit-tag-modal').remove('.appointment-visit-tag-modal');\r\n }\r\n });\r\n\r\n ui.$zipcodeInput.on('keyup change', function (e) {\r\n initZipcode(e);\r\n });\r\n ui.$zipSubmitBtn.on('click', initGeocoder);\r\n }\r\n\r\n function scrollOabList() {\r\n hidePopup();\r\n updateNavBtns();\r\n }\r\n\r\n function clearSearchButton() {\r\n ui.$zipcodeInput.val('')\r\n ui.$searchClearbBtn.addClass('hidden');\r\n }\r\n\r\n function distanceFilterOAB() {\r\n if (ui.$currentLat == undefined || ui.$currentLng == undefined) {\r\n return;\r\n }\r\n ui.$bounds = getBounds(ui.$currentLat, ui.$currentLng, ui.$defaultRadius);\r\n suspendApiCalls();\r\n resultsAvailableSlot = [];\r\n getSearchResults('Error', false);\r\n }\r\n\r\n function toggleMap() {\r\n if (ui.$resultsList.is(\":visible\")) {\r\n ui.$resultsList.hide();\r\n ui.$mapRegion.show();\r\n ui.$viewMapBtn.addClass('hidden')\r\n ui.$viewMapBtnList.removeClass('hidden')\r\n } else {\r\n ui.$mapRegion.hide();\r\n ui.$resultsList.show();\r\n ui.$viewMapBtnList.addClass('hidden')\r\n ui.$viewMapBtn.removeClass('hidden')\r\n }\r\n }\r\n\r\n function scrollResults(direction) {\r\n console.log(35)\r\n var cutoff = 50;\r\n var nextitem = '';\r\n if (direction === 'next') {\r\n $('.oab-find-a-hospital__search-item').each(function () {\r\n var $this = $(this);\r\n if ($this.position().left >= cutoff) {\r\n nextitem = '+=' + $this.position().left;\r\n return false;\r\n }\r\n });\r\n } else {\r\n $($('.oab-find-a-hospital__search-item').get().reverse()).each(function () {\r\n var $this = $(this);\r\n if ($this.position().left < 0) {\r\n nextitem = '-=' + Math.abs($this.position().left);\r\n return false;\r\n }\r\n });\r\n }\r\n ui.$resultsContainer.animate({\r\n scrollLeft: nextitem\r\n }, 500, function () {\r\n updateNavBtns();\r\n });\r\n }\r\n\r\n function updateNavBtns() {\r\n var showPrev = ui.$resultsContainer.scrollLeft();\r\n var fullWidth = $('.oab-find-a-hospital__search-item').length * $('.oab-find-a-hospital__search-item').outerWidth();\r\n var showNext = showPrev + ui.$resultsContainer.outerWidth() > fullWidth - 50;\r\n\r\n if (showPrev > 50) {\r\n ui.$prevResult.show();\r\n }\r\n else {\r\n ui.$prevResult.hide();\r\n }\r\n if (showNext) {\r\n ui.$nextResult.hide();\r\n } else {\r\n ui.$nextResult.show();\r\n }\r\n }\r\n\r\n function highlightMarker(i) {\r\n $.each(ui.$markers, function (i, item) {\r\n item.setAnimation(null);\r\n });\r\n let found = ui.$markers.find(item => {\r\n return item.id == i;\r\n });\r\n found.setAnimation(google.maps.Animation.BOUNCE);\r\n toggleMap();\r\n }\r\n\r\n function initPage() {\r\n setCurrentDate();\r\n setSearchDefaultRadius();\r\n ui.$viewMapBtnList.addClass('hidden')\r\n submitSpinner.setupLoadingSpinner(ui.$NCAFormSubmitBtn);\r\n ui.$map = new google.maps.Map(document.getElementById('FindAHospitalMap-OAB'), {\r\n mapId: \"ddfa8e9020e47824\",\r\n center: new google.maps.LatLng(ui.$defaultLatitude, ui.$defaultLongitude),\r\n zoom: 12 //1 (furthest) to 20 (closest)\r\n });\r\n\r\n if (window.location.href.match(/\\?./)) {\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n\r\n for (const [key, value] of urlParams.entries()) {\r\n if (key == 'zip') {\r\n if (usZipCodeRegex.test(value)) {\r\n ui.$zipcode = value;\r\n ui.$zipcodeInput.val(value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n var infoWindow = new google.maps.InfoWindow();\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(\r\n (position) => {\r\n var pos = {\r\n lat: position.coords.latitude,\r\n lng: position.coords.longitude,\r\n };\r\n ui.$currentLat = position.coords.latitude;\r\n ui.$currentLng = position.coords.longitude;\r\n ui.$map.setCenter(pos);\r\n // If coming from the home page search field,\r\n // getHospitalsData() will return before getSearchResults() does\r\n // and will show a \"No results\" message before valid results are shown.\r\n /* prevent execute search action without a valid search termn\r\n if (window.location.search.length === 0) {\r\n getSearchResults('Error: ', false);\r\n }\r\n */\r\n },\r\n () => {\r\n handleLocationError(true, infoWindow, ui.$map.getCenter());\r\n }\r\n );\r\n } else {\r\n console.log(41, navigator)\r\n // Browser doesn't support Geolocation\r\n handleLocationError(false, infoWindow, ui.$map.getCenter());\r\n }\r\n\r\n if (ui.$zipcode !== '') {\r\n initGeocoder(ui.$zipcode);\r\n }\r\n }\r\n\r\n function handleLocationError(browserHasGeolocation, infoWindow, pos) {\r\n infoWindow.setPosition(pos);\r\n infoWindow.setContent(\r\n browserHasGeolocation ?\r\n \"Error: The Geolocation service failed.\" :\r\n \"Error: Your browser doesn't support geolocation.\"\r\n );\r\n infoWindow.open(ui.$map);\r\n hideLoader();\r\n ui.$loadingSpinner.addClass('hidden');\r\n if (ui.isCanada) {\r\n showErrorMessage('Please provide address or postal code.');\r\n } else {\r\n showErrorMessage('Please provide address or zipcode.');\r\n }\r\n }\r\n\r\n function initGeocoder() {\r\n\r\n ui.$geocoder = new google.maps.Geocoder();\r\n ui.$map = new google.maps.Map(document.getElementById('FindAHospitalMap-OAB'), {\r\n mapId: \"ddfa8e9020e47824\",\r\n center: { lat: parseFloat(ui.$defaultLatitude), lng: parseFloat(ui.$defaultLongitude) },\r\n zoom: 12, //1 (furthest) to 20 (closest)\r\n minZoom: 8\r\n });\r\n\r\n ui.$currentLat = ui.$defaultLatitude;\r\n ui.$currentLng = ui.$defaultLongitude;\r\n\r\n let countryAddress = ui.$zipcode\r\n if (ui.isCanada === 'true') {\r\n countryAddress = countryAddress + ', Canada';\r\n } else {\r\n countryAddress = countryAddress + ', USA';\r\n }\r\n\r\n ui.$geocoder.geocode({\r\n 'address': countryAddress\r\n }, function (results, status) {\r\n if (status == 'OK') {\r\n ui.$currentLat = results[0].geometry.location.lat();\r\n ui.$currentLng = results[0].geometry.location.lng();\r\n resultsAvailableSlot = [];\r\n suspendApiCalls();\r\n getSearchResults('Error: ', false);\r\n } else {\r\n showErrorMessage(\"Please provide address or postal code.\");\r\n ui.$resultsSection.show();\r\n hideLoader();\r\n ui.$loadingSpinner.addClass('hidden');\r\n console.log('Geocode was not successful for the following reason: ' + status);\r\n ui.$resultsCount.text('0');\r\n ui.$zipcodeLabel.text(ui.$zipcode);\r\n ui.$nextResult.hide();\r\n removeMarkers();\r\n ui.$resultsContainer.empty();\r\n }\r\n });\r\n }\r\n\r\n function initZipcode(e) {\r\n let zipCodeValue = ui.$zipcodeInput.val();\r\n ui.$zipcode = ui.$zipcodeInput.val();\r\n let maxCharacters = 5;\r\n\r\n if (ui.$zipcode != '') {\r\n ui.$searchClearbBtn.removeClass('hidden');\r\n } else {\r\n ui.$searchClearbBtn.addClass('hidden');\r\n }\r\n\r\n //Need to check if IsCanada = true\r\n if (ui.isCanada === 'true') {\r\n let isValidCanadaZipCode = canadaZipCodeRegex.test(zipCodeValue);\r\n\r\n if (isValidCanadaZipCode) {\r\n ui.$zipcode = zipCodeValue;\r\n\r\n if (e.key === 'Enter' || e.keyCode === 13) {\r\n initGeocoder();\r\n }\r\n } \r\n \r\n } else {\r\n //Need to limit characters to 5\r\n // if (zipCodeValue.length >= maxCharacters) {\r\n // ui.$zipcodeInput.val(zipCodeValue.substr(0, maxCharacters));\r\n // }\r\n\r\n if (zipCodeValue.length >= maxCharacters) {\r\n ui.$zipcode = zipCodeValue;\r\n if (e.key === 'Enter' || e.keyCode === 13) {\r\n initGeocoder();\r\n }\r\n }\r\n }\r\n }\r\n \r\n \r\n\r\n function getFAHSearchParams() {\r\n let radiusValue = $(ui.$searchRadius).val();\r\n ui.$bounds = getBounds(ui.$currentLat, ui.$currentLng, radiusValue);\r\n let minMaxValues = calcMinMaxLatLng(ui.$bounds);\r\n let fahSearchParams = {\r\n CurrentLat: ui.$currentLat,\r\n CurrentLng: ui.$currentLng,\r\n MinLatitude: minMaxValues.minLat,\r\n MaxLatitude: minMaxValues.maxLat,\r\n MinLongitude: minMaxValues.minLng,\r\n MaxLongitude: minMaxValues.maxLng,\r\n Radius: radiusValue,\r\n SearchText: ui.$zipcode,\r\n HospitalType: ui.hospitalType,\r\n HospitalTypeDisplayName: ui.hospitalTypeName,\r\n Country: ui.$countryId,\r\n DataItemId: ui.$dataId\r\n }\r\n\r\n return fahSearchParams;\r\n }\r\n\r\n async function getSearchResults(errorMessage) {\r\n ui.$resultsContainer.empty();\r\n ui.$zipcodeLabel.text(ui.$zipcode);\r\n ui.$resultsContainer.addClass('hidden');\r\n ui.$errorMsgContainer.addClass('hidden');\r\n showLoader();\r\n ui.$loadingSpinner.removeClass('hidden');\r\n let fahSearchParams = getFAHSearchParams();\r\n ui.$nextResult.hide();\r\n ui.$existLabel.removeClass('hidden');\r\n ui.$resultsSection.show();\r\n ui.$bounds = getBounds(fahSearchParams.CurrentLat, fahSearchParams.CurrentLng, fahSearchParams.Radius);\r\n suspendApiCalls();\r\n resultsAvailableSlot = [];\r\n sortedData = [];\r\n\r\n await oabFindAHospital.post(fahSearchParams)\r\n .then(response => {\r\n if (response.data.OK) {\r\n let data = response.data.result;\r\n sortedData = sortResults(data);\r\n removeMarkers();\r\n createCard(sortedData);\r\n ui.$loadingSpinner.addClass('hidden');\r\n hideLoader();\r\n ui.$viewMapBtn.removeClass('hidden');\r\n ui.$viewMapBtnList.addClass('hidden');\r\n ui.$resultsContainer.removeClass('hidden');\r\n ui.$resultsCount.text(response.data.result.length);\r\n ui.$milesCount.text(ui.$searchRadius.val());\r\n countHospitalList = 4;\r\n\r\n //User Story 32703: [OAB] Update National-Level OAB Desktop and Mobile Flows to Expose First-Available Appt Dates / Times Upfront\r\n let firstFourHospitalsData = sortedData.slice(0, 4)\r\n if (sortedData != \"\" && sortedData.length > 0) {\r\n for (let j = 0; j < 4; j++) {\r\n if (j > sortedData.length) {\r\n break;\r\n }\r\n }\r\n firstAvailableSlotTag(firstFourHospitalsData);\r\n }\r\n $('.search-results-container__list__horz').on('scroll', function () {\r\n const div = $(this).get(0);\r\n if (div.scrollLeft + div.clientWidth + 10 >= div.scrollWidth) {\r\n const countlength = countHospitalList + 4;\r\n if (sortedData.length >= countHospitalList) {\r\n firstFourHospitalsData = sortedData.slice(countHospitalList, countlength);\r\n firstAvailableSlotTag(firstFourHospitalsData);\r\n }\r\n for (var a = countHospitalList; a < countlength; a++) {\r\n if (sortedData.length >= countHospitalList) {\r\n $(`#hospital-list-lazy-load-` + countHospitalList).removeClass('hidden')\r\n countHospitalList++;\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (ui.$zipcodeInput.val() !== '') {\r\n ui.$hideZipCode.show();\r\n } else {\r\n ui.$hideZipCode.hide();\r\n }\r\n\r\n $('.js-open-coupon-modal').on('click', showFormModal);\r\n if (response.data.result.length === 0) {\r\n showErrorMessage(\"No Results.\");\r\n }\r\n } else {\r\n removeMarkers();\r\n ui.$existLabel.addClass('hidden');\r\n ui.$viewMapBtn.addClass('hidden');\r\n ui.$viewMapBtnList.addClass('hidden');\r\n ui.$loadingSpinner.addClass('hidden');\r\n hideLoader();\r\n ui.$resultsCount.text('0');\r\n showErrorMessage(response.data.error);\r\n }\r\n })\r\n .catch(error => {\r\n ui.$loadingSpinner.addClass('hidden');\r\n showLoader();\r\n ui.$errorMsgContainer.removeClass('hidden');\r\n ui.$resultsCount.text('0');\r\n //handleLocationError(true, infoWindow, ui.$map.getCenter());\r\n console.log(errorMessage, error.response);\r\n });\r\n\r\n }\r\n\r\n function showLoader() {\r\n ui.$oabContainer.css('opacity', '.9').css('pointer-events', 'none');\r\n }\r\n\r\n function hideLoader() {\r\n ui.$oabContainer.css('opacity', '1').css('pointer-events', 'all');\r\n }\r\n\r\n function createCard(hospitals) {\r\n hospitalListFAH = hospitals;\r\n var bounds = new google.maps.LatLngBounds();\r\n for (var a = 0; a < hospitals.length; a++) {\r\n var hospitalHours = hospitals[a].HospitalHours;\r\n var hoursObj = [];\r\n var hospitalTypesTags = hospitals[a].HospitalTypes;\r\n var hospitalPhoneNumbers = hospitals[a].PhoneNumbers;\r\n var parentContainer;\r\n if (a >= 4) {\r\n parentContainer = $(document.createElement('li')).addClass('oab-find-a-hospital__search-item hidden').attr({ 'id': `hospital-list-lazy-load-` + a });\r\n } else {\r\n parentContainer = $(document.createElement('li')).addClass('oab-find-a-hospital__search-item').attr({ 'id': `hospital-list-lazy-load-` + a });\r\n }\r\n var leftContainer = $(document.createElement('div')).addClass('search-item__left oab-left');\r\n var oabTag = $(document.createElement('div')).addClass('')\r\n var rightContainer = $(document.createElement('div')).addClass('search-item__right oab-find-a-hospital__right').attr({ 'id': `cta-tag-appointment-` + a});\r\n var mobileHeaderWrapper = $(document.createElement('div')).addClass('search-item__mobile-header');\r\n var typeTagsWrapper = $(document.createElement('ul')).addClass('search-item__type-tags');\r\n var descContainer = $(document.createElement('div')).addClass('search-item__desc-wrapper oab-desc-wrapper');\r\n var ctaContainer = $(document.createElement('div')).addClass('search-item__cta-container');\r\n var ctaPhoneNumber = $(document.createElement('div')).addClass('find-a-hospital__phone-hours');\r\n var ctaHours = $(document.createElement('div')).addClass('find-a-hospital__hospital-hours');\r\n var btnContainer = $(document.createElement('div')).addClass('search-item__btn-container');\r\n var modalContainer = $(document.createElement('div')).addClass('hours-modal').attr({\r\n 'id': `HoursModal-${a}`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var modalContentWrapper = $(document.createElement('div')).addClass('hours-modal__content modal-content').attr('role', 'document');\r\n var modalHoursWrapper = $(document.createElement('ul')).addClass('hours-modal__hours-list');\r\n var sphmodalContainer = $(document.createElement('div')).addClass('sph-hours-modal').attr({\r\n 'id': `HoursModal-${a}`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var sphmodalContentWrapper = $(document.createElement('div')).addClass('sph-hours-modal__content modal-content').attr('role', 'document');\r\n var sphmodalHoursWrapper = $(document.createElement('ul')).addClass('sph-hours-modal__hours-list');\r\n var emergencymodalContainer = $(document.createElement('div')).addClass('emergency-hours-modal').attr({\r\n 'id': `HoursModal-${a}`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var emergencymodalContentWrapper = $(document.createElement('div')).addClass('emergency-hours-modal__content modal-content').attr('role', 'document');\r\n var emergencymodalHoursWrapper = $(document.createElement('ul')).addClass('emergency-hours-modal__hours-list');\r\n\r\n // Calculate distance \r\n var locationA = {\r\n latitude: hospitals[a].Latitude,\r\n longitude: hospitals[a].Longitude\r\n };\r\n var locationB = {\r\n latitude: ui.$currentLat,\r\n longitude: ui.$currentLng\r\n } //Need to modify this line of code\r\n var calcMiles = (haversine(locationA, locationB) * 0.000621371).toFixed(1);\r\n var distanceApart = `${calcMiles}`;\r\n\r\n // Create Google Map Markers \r\n var marker = new google.maps.marker.AdvancedMarkerElement({\r\n position: { lat: parseFloat(hospitals[a].Latitude), lng: parseFloat(hospitals[a].Longitude) },\r\n map: ui.$map,\r\n id: hospitals[a].HospitalId\r\n });\r\n\r\n ui.$markers.push(marker);\r\n\r\n var label = new google.maps.InfoWindow({\r\n content: hospitals[a].Name,\r\n maxWidth: 200\r\n });\r\n\r\n google.maps.event.addListener(marker, 'click', (function (marker, infowindow) {\r\n return function () {\r\n infowindow.open(ui.$map, marker);\r\n };\r\n })(marker, label));\r\n\r\n // Extend the bounds with the marker's position\r\n bounds.extend(marker.position);\r\n \r\n\r\n // Create hospital type tags (left section)\r\n let imageWrapper = (`<a class='oab-find-a-hospital__image-wrap js-hospital-dl-btn' href='${hospitals[a].Url}' style='background-image:url(${hospitals[a].HospitalImageUrl})'></a>`);\r\n\r\n if (hospitalTypesTags !== null) {\r\n for (var b = 0; b < hospitalTypesTags.length; b++) {\r\n if (hospitalTypesTags[b].RedirectUrl !== null && hospitalTypesTags[b].RedirectUrl !== \"\") {\r\n typeTagsWrapper.append(`<a class='search-item__tag tag-text-decoration ${(hospitalTypesTags[b].DisplayName.includes(\"Primary\") || hospitalTypesTags[b].DisplayName === 'Cat Only')\r\n ? 'pv-tag' : (hospitalTypesTags[b].DisplayName == 'Boarding & Grooming' || hospitalTypesTags[b].DisplayName == 'Boarding' || hospitalTypesTags[b].DisplayName == 'Grooming')\r\n ? 'bg-tag' : hospitalTypesTags[b].DisplayName == 'Urgent Care'\r\n ? 'uc-tag' : hospitalTypesTags[b].DisplayName == 'Emergency Care'\r\n ? 'ec-tag' : (hospitalTypesTags[b].DisplayName == 'Specialty Care' || hospitalTypesTags[b].DisplayName == 'Pet CancerCare Center')\r\n ? 'sc-tag' : ''}' href=\"${hospitalTypesTags[b].RedirectUrl}\">${hospitalTypesTags[b].DisplayName}</a>`);\r\n } else {\r\n typeTagsWrapper.append(`<span class='search-item__tag ${(hospitalTypesTags[b].DisplayName.includes(\"Primary\") || hospitalTypesTags[b].DisplayName === 'Cat Only')\r\n ? 'pv-tag' : (hospitalTypesTags[b].DisplayName == 'Boarding & Grooming' || hospitalTypesTags[b].DisplayName == 'Boarding' || hospitalTypesTags[b].DisplayName == 'Grooming')\r\n ? 'bg-tag' : hospitalTypesTags[b].DisplayName == 'Urgent Care'\r\n ? 'uc-tag' : hospitalTypesTags[b].DisplayName == 'Emergency Care'\r\n ? 'ec-tag' : (hospitalTypesTags[b].DisplayName == 'Specialty Care' || hospitalTypesTags[b].DisplayName == 'Pet CancerCare Center')\r\n ? 'sc-tag' : ''}'>${hospitalTypesTags[b].DisplayName}</span>`);\r\n }\r\n }\r\n }\r\n oabTag.append(typeTagsWrapper)\r\n leftContainer.append(imageWrapper, oabTag);\r\n\r\n // Create right section content\r\n var hospitalName = $(`<a class=\"search-item__header js-hospital-dl-btn\" data-hospital-name=\"${hospitals[a].Name}\" data-hospital-au=\"${hospitals[a].HospitalId}\" href=\"${hospitals[a].Url}\">${hospitals[a].Name}</a> \r\n <a class='oab-find-a-hospital__mob-image-wrap js-hospital-dl-btn' data-hospital-name=\"${hospitals[a].Name}\" data-hospital-au=\"${hospitals[a].HospitalId}\" href='${hospitals[a].Url}' style='background-image:url(${hospitals[a].HospitalImageUrl})'></a>`);\r\n\r\n var ctaContainerEl = $(`\r\n <div class=\"search-item__cta-tags\">\r\n <div class=\"cta-row\">\r\n <span class=\"fah-offer-btn\">\r\n <a class=\"cta-tag ${hospitals[a].HasCareClub == true && hospitals[a].CareClubUrl !== null ? '' : 'hidden'}\" data-care-club=\"${hospitals[a].CareClubLabel}\" data-care-id=\"${hospitals[a].HospitalId}\" href=\"${hospitals[a].CareClubUrl}\">${hospitals[a].CareClubLabel}</a>\r\n <a class=\"cta-tag ${hospitals[a].HasNewClientOffer == true && hospitals[a].NewClientOfferUrl !== null ? '' : 'hidden'}\" data-care-club=\"${hospitals[a].NewClientOfferLabel}\" data-care-id=\"${hospitals[a].HospitalId}\" href=\"${hospitals[a].NewClientOfferUrl}\">${hospitals[a].NewClientOfferLabel}</a>\r\n </span>\r\n </div>\r\n </div>\r\n </div> \r\n `);\r\n\r\n var descContainerEl = $(`<div class=\"search-item__address search-item__wicon\">\r\n <div class=\"search-item__icon\"><img src=\"${ui.locationIcon}\" alt=\"address icon\"/></div>\r\n <div class=\"d-flex align-items-start oab-address-direction\">\r\n <div>\r\n <div>${hospitals[a].AddressLine1}, ${hospitals[a].AddressLine2} </div>\r\n <span>${hospitals[a].City}, ${hospitals[a].State} ${hospitals[a].Zipcode}</span>\r\n <span class=\"search-item__distance-away\">${distanceApart} ${hospitals[a].DistanceUnit}</span>\r\n </div> \r\n </div>\r\n <div class=\"search-item__side pr-4\">\r\n <a class=\"redirect-to-map ${hospitals[a].DirectionUrl == null || hospitals[a].DirectionUrl == '' || hospitals[a].AddressLine1 === '' || hospitals[a].AddressLine1 === null ? 'hidden' : ''}\" data-get-direction=\"Direction\" data-get-id=\"${hospitals[a].HospitalId}\" href=\"${hospitals[a].DirectionUrl}\">\r\n Directions\r\n </a>\r\n </div></div>`);\r\n\r\n var phoneIconEl = $(`\r\n <div class=\"search-item__phone-hours search-item__wicon phone-hour\">\r\n <div class= \"search-item__icon\" > <img src=\"${ui.contactIcon}\" alt=\"phone icon\"/></div>\r\n </div>\r\n `);\r\n\r\n var hoursIconE1 = $(`\r\n <div class=\"search-item__phone-hours search-item__wicon\">\r\n <div class=\"search-item__icon hours-info\"><img src=\"${ui.hoursIcon}\" alt=\"hospital hours icon\"/></div>\r\n </div>\r\n `);\r\n\r\n if (hospitalHours !== null) {\r\n for (var i = 0; i < hospitalHours.length; i++) {\r\n hoursObj = hospitalHours[i].HospitalHoursList;\r\n\r\n ctaHours.append(`\r\n <li class= \"find-a-hospital__hours-label\">\r\n <button class=\"hours-modal-link ${hospitalHours[i].HoursIndex == '0' ? `hours-modal-btn` : hospitalHours[i].HoursIndex == '1' ? 'sph-hours-modal-btn' : `emergency-hours-modal-btn`}\" > ${hospitalHours[i].HoursName}</button>\r\n <span class=\"search-item__status ${hospitalHours[i].IsOpen == true ? `open` : `closed`}\">${hospitalHours[i].IsOpen == true ? `${hospitals[a].OpenLabel}` : `${hospitals[a].CloseLabel}`}</span></li>\r\n `);\r\n\r\n var modalBtnAndTitle = $(`\r\n <button type=\"button\" class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__close-btn close-btn` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__close-btn sph-close-btn` : `emergency-hours-modal__close-btn emergency-close-btn`}\" aria-label=\"close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n <div class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__header` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__header` : `emergency-hours-modal__header`}\">${hospitalHours[i].HoursName}</div>\r\n `);\r\n\r\n var bottomModalSection = $(`\r\n <div class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__divider` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__divider` : `emergency-hours-modal__divider`}\"></div>\r\n <p class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__message` : hospitalHours[i].HoursIndex == '1' ? `emergency-hours-modal__message` : `sph-hours-modal__message`} ${hospitals[a].HoursDisclaimer == null || hospitals[a].HoursDisclaimer == '' ? 'hidden' : ''}\">${hospitals[a].HoursDisclaimer}</p>\r\n <a class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__link` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__link` : `emergency-hours-modal__link`}\" href=\"${hospitalHours[i].HoursPageUrl}\">View hospital info »</a>\r\n `);\r\n\r\n if (hoursObj !== null) {\r\n hoursObj.forEach(function (hourObj) {\r\n if (hourObj.Label !== null && hourObj.Label !== undefined && hourObj.Label.includes(\"_\")) {\r\n return;\r\n }\r\n var day = hourObj.Label; \r\n var isCurrentDay = hourObj.IsCurrentDay;\r\n var isTemporaryHours = hourObj.IsTemporaryHours;\r\n\r\n var filteredObj = (hoursObj).filter((hour) => hour !== null && hour !== undefined && hour.Label !== null && hour.Label !== undefined && hour.Label.includes(day)).map(({ Hours }) => Hours);\r\n\r\n let timeList = bindHoursList(filteredObj, isTemporaryHours);\r\n\r\n if (hospitalHours[i].HoursIndex == '0') {\r\n modalHoursWrapper.append(`<li class=\"${isCurrentDay ? 'active' : ''}\">\r\n <span class=\"day\">${day}</span>\r\n <div class=\"time\">${timeList}</div>\r\n </li>`);\r\n } else if (hospitalHours[i].HoursIndex == '1') {\r\n sphmodalHoursWrapper.append(`<li class=\"${isCurrentDay ? 'active' : ''}\">\r\n <span class=\"day\">${day}</span>\r\n <div class=\"time\">${timeList}</div>\r\n </li>`);\r\n } else {\r\n emergencymodalHoursWrapper.append(`<li class=\"${isCurrentDay ? 'active' : ''}\">\r\n <span class=\"day\">${day}</span>\r\n <div class=\"time\">${timeList}</div>\r\n </li>`);\r\n }\r\n });\r\n if (hospitalHours[i].HoursIndex == '0') {\r\n modalContainer.append(modalContentWrapper);\r\n modalContentWrapper.append(modalBtnAndTitle, modalHoursWrapper, bottomModalSection);\r\n hoursIconE1.append(ctaHours);\r\n parentContainer.append(leftContainer, rightContainer, modalContainer);\r\n } else if (hospitalHours[i].HoursIndex == '1') {\r\n sphmodalContainer.append(sphmodalContentWrapper);\r\n sphmodalContentWrapper.append(modalBtnAndTitle, sphmodalHoursWrapper, bottomModalSection);\r\n hoursIconE1.append(ctaHours);\r\n parentContainer.append(leftContainer, rightContainer, sphmodalContainer);\r\n } else {\r\n emergencymodalContainer.append(emergencymodalContentWrapper);\r\n emergencymodalContentWrapper.append(modalBtnAndTitle, emergencymodalHoursWrapper, bottomModalSection);\r\n hoursIconE1.append(ctaHours);\r\n parentContainer.append(leftContainer, rightContainer, emergencymodalContainer);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (hospitalPhoneNumbers !== null) {\r\n for (var i = 0; i < hospitalPhoneNumbers.length; i++) {\r\n ctaPhoneNumber.append(`<span class= \"find-a-hospital__phone-label\"> ${hospitalPhoneNumbers[i].PhoneLabel}<a class=\"phone-number\" href=\"tel:${hospitalPhoneNumbers[i].PhoneNumber}\">${hospitalPhoneNumbers[i].PhoneNumber}</a></span>`)\r\n }\r\n }\r\n phoneIconEl.append(ctaPhoneNumber);\r\n\r\n var btnContainerEl = $(`\r\n <div class=\"search-item__cta-tags\">\r\n <div class=\"cta-row\">\r\n <button\r\n data-hospital-name=\"${hospitals[a].Name}\"\r\n data-toggle=\"modal\"\r\n data-target=\"NCAFormModal\"\r\n data-hospital-au=\"${hospitals[a].HospitalId}\"\r\n data-hospital-setting=\"${hospitals[a].HospitalSettingsItemId}\"\r\n data-hospital-siteid=\"${hospitals[a].HospitalSiteId}\"\r\n js-open-coupon-modal\" href=\"#\"></button>\r\n </div>\r\n </div> \r\n `);\r\n\r\n var BookApppoinmentContainerEl = $(`\r\n <div class=\"search-item__book-appointment-btn-container\" id=\"book-appointment-id-${a}\">\r\n <a class=\"btn btn-sky book-appointment ${hospitals[a].HasBookAnAppointment == true && hospitals[a].BookAnAppointmentUrl !== null ? '' : 'hidden'}\" data-hospital-name=\"${hospitals[a].BookAnAppointmentLabel}\" data-hospital-au=\"${hospitals[a].HospitalId}\" href=\"${hospitals[a].BookAnAppointmentUrl}\">${hospitals[a].BookAnAppointmentLabel}</a>\r\n </div> \r\n `);\r\n\r\n ctaContainer.append(ctaContainerEl);\r\n descContainer.append(descContainerEl, phoneIconEl, hoursIconE1, ctaContainer);\r\n btnContainer.append(btnContainerEl);\r\n mobileHeaderWrapper.append(hospitalName);\r\n\r\n rightContainer.append(mobileHeaderWrapper, descContainer, BookApppoinmentContainerEl);\r\n // modalContainer.append(modalContentWrapper);\r\n // modalContentWrapper.append(modalBtnAndTitle, modalHoursWrapper, bottomModalSection);\r\n // cardTopContainer.append(leftContainer, rightContainer)\r\n // parentContainer.append(cardTopContainer, oabcardFooter);\r\n // parentContainer.append(leftContainer, rightContainer);\r\n ui.$resultsContainer.append(parentContainer);\r\n // modalWrapper.append(modalContainer);\r\n // ui.$resultsList.append(modalWrapper);\r\n\r\n\r\n\r\n ui.$map.fitBounds(bounds);\r\n }\r\n\r\n //Bind events after dynamic content has been created\r\n ui.$modalBtn = $('.hours-modal-btn');\r\n ui.$hospitalDLPush = $('.js-hospital-dl-btn');\r\n ui.$closeBtn = $('.close-btn');\r\n ui.$modalBtn.on('click', openModal);\r\n ui.$hospitalDLPush.on('click', clickEventDL);\r\n ui.$closeBtn.on('click', closeModal);\r\n ui.$sphmodalBtn = $('.sph-hours-modal-btn');\r\n ui.$sphcloseBtn = $('.sph-close-btn');\r\n ui.$sphmodalBtn.on('click', openSphModal);\r\n ui.$sphcloseBtn.on('click', closeSphModal);\r\n ui.$emergencymodalBtn = $('.emergency-hours-modal-btn');\r\n ui.$emergencycloseBtn = $('.emergency-close-btn');\r\n ui.$emergencymodalBtn.on('click', openEmergencyModal);\r\n ui.$emergencycloseBtn.on('click', closeEmergencyModal);\r\n ui.$viewOnMapBtn = $('[data-control=\"viewOnMapBtnOAB\"]');\r\n ui.$viewOnMapBtn.on('click', function () {\r\n highlightMarker($(this).data('num'))\r\n });\r\n\r\n ui.$careClubAnalystic = $('.fah-offer-btn');\r\n ui.$careClubAnalystic.on('click', careClubDataAnalystic);\r\n ui.$getDirectionAnalystic = $('.redirect-to-map');\r\n ui.$getDirectionAnalystic.on('click', getdirectionDataAnalystic);\r\n ui.$bookAppointmentAnalystic = $('.book-appointment');\r\n ui.$bookAppointmentAnalystic.on('click', bookAppointmentDataAnalystic);\r\n\r\n if (hospitals.length === 1) {\r\n ui.$map.setZoom(15);\r\n }\r\n\r\n if (hospitals.length === 0) {\r\n setDefaultMarker();\r\n }\r\n\r\n if (hospitals.length > 2) {\r\n ui.$nextResult.show();\r\n }\r\n }\r\n\r\n /**\r\n * @method firstAvailableSlotTag\r\n * @description to get the wellness or sick visit details and append the data\r\n */\r\n async function firstAvailableSlotTag(hospitals) {\r\n if (hospitals.length > 0) {\r\n hospitals.forEach(function (hospital) {\r\n if (hospital != undefined && hospital.ShowFirstAvailableAppt && hospital.HospitalId != null && hospital.HospitalId != \"\" && !hospital.IsHybridHospital && hospital.HasBookAnAppointment) {\r\n avalilablSlotPromise.push($.ajax({\r\n url: '/fah-api/get-first-available?hospitalId=' + hospital.HospitalId, type: 'GET',\r\n success: function(returnhtml){ \r\n if(returnhtml.result != \"\") {\r\n const hospitalIndex = sortedData?.findIndex((sortedHospital) => sortedHospital.HospitalId == hospital.HospitalId);\r\n let allAppointmentTypesList = [];\r\n allAppointmentTypesList = returnhtml.result;\r\n if (returnhtml.result.length > 0) {\r\n hospital.AppointmentTypes = allAppointmentTypesList?.filter((appointment) => appointment.HospitalId == hospital.HospitalId);\r\n }\r\n var hospitalVisitType = $(`<div class=\"cta-row search-item__faa-visit ${hospital.IsComingSoonHospital ? `hidden` : ``}\"></div>`);\r\n var schedulewrapper = $(`<div class=\"schedule-appointment-wrapper\"> </div>`);\r\n var scheduleButtonWrapper = $(`<div class=\"schedule-cta\">\r\n <div class=\"Schedule-title\">\r\n <span><img src=\"../../../images-2/hours-fah-icon.svg\" alt=\"schedule icon\"></span>\r\n <span>Schedule</span>\r\n </div>\r\n <a class=\"btn btn-sky book-appointment ${hospital.HasBookAnAppointment == true && hospital.BookAnAppointmentUrl !== null ? '' : 'hidden'}\" data-hospital-name=\"${hospital.BookAnAppointmentLabel}\" data-hospital-au=\"${hospital.HospitalId}\" href=\"${hospital.BookAnAppointmentUrl}\">${hospital.BookAnAppointmentLabel}</a>\r\n </div>`);\r\n var firstAvailablewrapper = $(`<div class=\"first-available-wrapper\">\r\n <div class=\"first-available-title\">\r\n <span><img src=\"../../../images-2/Appointments-Calendar-color-icon.svg\" alt=\"appointment calander icon\"></span>\r\n <span>First Available</span>\r\n </div>\r\n </div>`);\r\n var firstAvailableSlot = $(`<div class=\"first-available-slot\"></div>`);\r\n var appointmentTypeListData = hospital.AppointmentTypes;\r\n var appointmentTypeListCheck = appointmentTypeListData != undefined && appointmentTypeListData != null && appointmentTypeListData != \"\";\r\n if (appointmentTypeListCheck) {\r\n if (appointmentTypeListData.length) {\r\n appointmentTypeListData.forEach((appointmentType, appointmentTypeIndex) => {\r\n var hospitalTimezone = appointmentType.HospitalTimezone;\r\n var newDate = displayDate(appointmentType.Availablity);\r\n var newtTime = new Date(appointmentType.Availablity).toLocaleString('en-us', { hour: 'numeric', minute: 'numeric', timeZone: hospitalTimezone });\r\n var appointmentTypeList = $(`<span class=\"cta-tag faa-modal-btn\" data-available-slot=\"${appointmentTypeIndex}\" data-hospital-index=\"${hospitalIndex}\" data-hospital-name=\"${hospital.Name}\" data-hospital-au=\"${hospital.HospitalId}\">\r\n <span >\r\n <img src=\"${appointmentType.Icon}\" alt=\"appointment type icon\">\r\n </span>\r\n <span class=\"faa-time-slot\" data-available-slot=\"${appointmentTypeIndex}\" data-hospital-index=\"${hospitalIndex}\">\r\n <span class=\"faa-label\" data-available-slot=\"${appointmentTypeIndex}\" data-hospital-index=\"${hospitalIndex}\">${appointmentType.AppointmentTypeLabel}</span>\r\n <span data-available-slot=\"${appointmentTypeIndex}\" data-hospital-index=\"${hospitalIndex}\">${newtTime}</span>\r\n <span class=\"faa-day\" data-available-slot=\"${appointmentTypeIndex}\" data-hospital-index=\"${hospitalIndex}\">${newDate}</span>\r\n </span>`)\r\n firstAvailableSlot.append(appointmentTypeList)\r\n })\r\n }\r\n $('#book-appointment-id-' + hospitalIndex).addClass('hidden');\r\n firstAvailablewrapper.append(firstAvailableSlot);\r\n schedulewrapper.append(scheduleButtonWrapper, firstAvailablewrapper);\r\n hospitalVisitType.append(schedulewrapper);\r\n $('#cta-tag-appointment-' + hospitalIndex).append(hospitalVisitType);\r\n ui.$bookAppointmentAnalystic = $('.book-appointment');\r\n ui.$bookAppointmentAnalystic.on('click', bookAppointmentDataGtm);\r\n ui.$firstAvailableAppointment = $('.faa-modal-btn');\r\n ui.$firstAvailableAppointment.off('click').on('click', openAvailableAppointmentModal);\r\n } \r\n } \r\n },\r\n error: function(jqXHR, textStatus, errorThrown) {\r\n console.error('Error in one of the parallel calls:', errorThrown);\r\n }\r\n }))\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @method openAvailableAppointmentModal\r\n * @description to open the appointment popup, \r\n */\r\n async function openAvailableAppointmentModal(e) {\r\n const selectedHospitalIndex = $(e.target).data('hospital-index');\r\n const availableTimeSlotIndex = $(e.target).data('available-slot');\r\n if(selectedHospitalIndex != undefined && availableTimeSlotIndex != undefined) {\r\n $('.appointment-visit-tag-modal').remove('.appointment-visit-tag-modal')\r\n var appointmentModalContainer = $(document.createElement('div')).addClass('faa-slot appointment-visit-tag-modal').attr({\r\n 'id': `appointment-visit-modal`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var appointmentModalContentWrapper = $(document.createElement('div')).addClass('faa-slot__content modal-content').attr('role', 'document');\r\n var appointmentTypeListWrapper = $(document.createElement('div')).addClass('faa-modal-tab');\r\n var appointmentModalContentCard = $(document.createElement('div')).addClass('faa-modal-card');\r\n var appointmentTypesDateTime = $(document.createElement('div')).addClass('tab-time-slot-wrapper');\r\n var appointmentTypeList = hospitalListFAH[selectedHospitalIndex].AppointmentTypes;\r\n var appointmentTypeReasonButton;\r\n var apptHospitalTimezone;\r\n if(appointmentTypeList != undefined && appointmentTypeList !== null) {\r\n appointmentTypeReasonButton = hospitalListFAH[selectedHospitalIndex].AppointmentTypes[availableTimeSlotIndex].AppointmentReasons;\r\n apptHospitalTimezone = hospitalListFAH[selectedHospitalIndex].AppointmentTypes[availableTimeSlotIndex].HospitalTimezone;\r\n }\r\n let appointmentHeaderText;\r\n var appointmentTimeSlotText = $(document.createElement('div')).addClass('');\r\n var appointmentDateTimeContentCard = $(document.createElement('div')).addClass('tab-time-slots');\r\n let appoinmentTimeSlotsType;\r\n //to selected reason to filter the time slot for the selected hospital\r\n if (appointmentTypeList != undefined && appointmentTypeList != null && appointmentTypeReasonButton != undefined && appointmentTypeReasonButton != null && appointmentTypeReasonButton.length > 0) {\r\n appointmentTypeReasonButton.forEach((appointmentTypeReason, reasonIndex) => {\r\n appointmentHeaderText = appointmentTypeReason.ReasonHeaderText;\r\n appoinmentTimeSlotsType = appointmentTypeReason.TimeSlot;\r\n //to show the dynamic reason button for the selected hospital\r\n appointmentTypeListWrapper.append(`<button type=\"button\" class=\"tab-btn appointment-button-fah\r\n appointment-active-btn-${reasonIndex} ${reasonIndex == 0 ? 'active-tab' : ''}\" \r\n data-appointment-length=\"${appointmentTypeList.length}\" \r\n data-appointment-text=\"${appointmentTypeList[availableTimeSlotIndex].AppointmentTypeId}\"\r\n data-appointment-date-length=\"${appointmentTypeReasonButton.length}\" \r\n data-appointment-slot-id=\"${reasonIndex}\" data-reason-label=\"${appointmentTypeReason.ReasonLabel}\">${appointmentTypeReason.ReasonLabel}</button>`)\r\n if (appoinmentTimeSlotsType.length > 0) {\r\n appointmentTimeSlotText.append(`<div Class=\"time-slot-text date-time-${appointmentTypeList[availableTimeSlotIndex].AppointmentTypeId}-${reasonIndex} ${reasonIndex == 0 ? '' : 'hidden'}\"\"> ${appointmentTypeReason.TimeSlotHeaderText}</div>`);\r\n //to display the appointment time slot depends on appointment reason\r\n appoinmentTimeSlotsType.forEach((appoinmentTimeSlotType) => {\r\n let displayDate = new Date(appoinmentTimeSlotType.StartTime).toLocaleDateString('en-US')\r\n let displayTime = new Date(appoinmentTimeSlotType.StartTime).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', timeZone: apptHospitalTimezone });\r\n let dateTime=displayDate+\", \"+displayTime\r\n appointmentDateTimeContentCard.append(`\r\n <a class=\"cta-tag time-slot date-time-${appointmentTypeList[availableTimeSlotIndex].AppointmentTypeId}-${reasonIndex} ${reasonIndex == 0 ? '' : 'hidden'}\" data-appointment-start-date=\"${dateTime}\" href=\"${hospitalListFAH[selectedHospitalIndex].BookAnAppointmentUrl}?oabid=${appoinmentTimeSlotType.QueryId}&rul=/book-an-appointment\">\r\n <span class=\"faa-day\">${displayTime}</span>\r\n <span>${displayDate}</span>\r\n </a>`);\r\n })\r\n } else {\r\n appointmentTimeSlotText.append(`<div class=\"time-slot-text date-time-${appointmentTypeList[availableTimeSlotIndex].AppointmentTypeId}-${reasonIndex} ${reasonIndex == 0 ? '' : 'hidden'}\"\"></div>`);\r\n appointmentDateTimeContentCard.append(`<span class=\"slot-availability-message date-time-${appointmentTypeList[availableTimeSlotIndex].AppointmentTypeId}-${reasonIndex} ${reasonIndex == 0 ? '' : 'hidden'}\">${appointmentTypeReason.TimeSlotErrorMsg}</span>`);\r\n }\r\n })\r\n }\r\n \r\n var appointmentModalBtnAndTitle = $(`<button type=\"button\" class=\"faa-close-btn\" aria-label=\"close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n <div class=\"faa-modal-head\">\r\n <span class=\"faa-modal-title\">${hospitalListFAH[selectedHospitalIndex].Name}</span>\r\n <span>${appointmentHeaderText}</span>\r\n </div>`);\r\n \r\n //append the available appointment modal\r\n appointmentTypesDateTime.append(appointmentTimeSlotText, appointmentDateTimeContentCard);\r\n appointmentModalContentCard.append(appointmentModalBtnAndTitle, appointmentTypeListWrapper, appointmentTypesDateTime);\r\n appointmentModalContentWrapper.append(appointmentModalContentCard);\r\n appointmentModalContainer.append(appointmentModalContentWrapper);\r\n ui.$oabContainer.append(appointmentModalContainer);\r\n var modal = $('.appointment-visit-tag-modal');\r\n $(modal).css('display', 'block');\r\n ui.$firstAvailableAppointmentCloseModal = $('.faa-close-btn');\r\n ui.$firstAvailableAppointmentCloseModal.on('click', closeSelectedReasonModal);\r\n ui.$firstAvailableAppointmentModal = $('.appointment-button-fah');\r\n ui.$firstAvailableAppointmentModal.on('click', clickSelectedReasonTypes);\r\n \r\n $(document).on('click', '.cta-tag.time-slot', function() {\r\n const $button = $(this).closest('.appointment-visit-tag-modal').find('.appointment-button-fah.active-tab');\r\n const appointmentReasonDisplayText = $button.data('reason-label');\r\n const appointmentStartDate = $(this).data('appointment-start-date');\r\n\r\n const appointmentType = $(e.target).closest('.faa-modal-btn').find('.faa-label').text();\r\n \r\n const data = {\r\n 'event': 'oab-click',\r\n 'oab-location': 'national-booking',\r\n 'oab-type': 'first-available',\r\n 'hospital-type': $(e.target).closest('.faa-modal-btn').data('hospital-au'),\r\n 'hospital-name': $(e.target).closest('.faa-modal-btn').data('hospital-name'),\r\n 'logged-in-status': false,\r\n 'oab-visit-type': appointmentType,\r\n 'appointmentReasonDisplayText': appointmentReasonDisplayText,\r\n 'appointmentStartDate': appointmentStartDate\r\n };\r\n window.dataLayer.push(data);\r\n \r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @method closeSelectedReasonModal\r\n * @description to close the available appointment popup\r\n */\r\n function closeSelectedReasonModal() {\r\n $('.appointment-visit-tag-modal').remove('.appointment-visit-tag-modal')\r\n }\r\n\r\n /**\r\n * @method clickSelectedReasonTypes\r\n * @description to click the selected reason to show the time slot depends on reason\r\n */\r\n function clickSelectedReasonTypes(e) {\r\n const el = $(e.target);\r\n $('.time-slot-text').addClass('hidden');\r\n $('.time-slot').addClass('hidden');\r\n $('.appointment-button-fah').removeClass('active-tab');\r\n $('.date-time-' + el.data('appointment-text') + '-' + el.data('appointment-slot-id')).removeClass('hidden');\r\n $('.appointment-active-btn-' + el.data('appointment-slot-id')).addClass('active-tab');\r\n }\r\n\r\n /**\r\n * @method suspendApiCalls\r\n * @description to cancel the previous api pending call\r\n */\r\n function suspendApiCalls() {\r\n for (let i = 0; i < avalilablSlotPromise.length; i++) {\r\n avalilablSlotPromise[i].abort();\r\n if(i === avalilablSlotPromise.length - 1) {\r\n avalilablSlotPromise = [];\r\n }\r\n }\r\n }\r\n\r\n function bindHoursList(timeList, isTemporaryHours) {\r\n return timeList.map((hourtime) => {\r\n return `\r\n <span>\r\n ${hourtime} \r\n <span class=\"${isTemporaryHours ? '' : 'hidden'}\">*</span>\r\n </span>\r\n `;\r\n }).join('');\r\n }\r\n\r\n function careClubDataAnalystic(e) {\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('care-club'), el.data('care-id'), 'OAB find a hospital');\r\n }\r\n\r\n function getdirectionDataAnalystic(e) {\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('get-direction'), el.data('get-id'), 'OAB find a hospital');\r\n }\r\n\r\n function bookAppointmentDataAnalystic(e) {\r\n suspendApiCalls();\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('hospital-name'), el.data('hospital-au'), 'OAB find a hospital');\r\n }\r\n\r\n \r\n function bookAppointmentDataGtm(e) {\r\n suspendApiCalls();\r\n let el = $(e.target) \r\n window.VCA.ucfahDatalayer.datalayerPushBook(el.data('hospital-name'), el.data('hospital-au'),'national-booking');\r\n }\r\n\r\n function getBounds(lat, lng, radius) {\r\n let ConvertedRadius = radius * 1609.34;\r\n lat = parseFloat(lat);\r\n lng = parseFloat(lng);\r\n\r\n // add to canada site\r\n if (ui.isCanada === 'true') {\r\n ConvertedRadius = radius * 1000;\r\n }\r\n\r\n var circleData = {\r\n center: {\r\n lat,\r\n lng\r\n },\r\n radius: ConvertedRadius\r\n };\r\n\r\n if (window['google']) {\r\n return new window['google'].maps.Circle(circleData).getBounds();\r\n }\r\n }\r\n\r\n function calcMinMaxLatLng(bounds) {\r\n var obj = {\r\n minLat: bounds.getNorthEast().lat(),\r\n maxLat: bounds.getSouthWest().lat(),\r\n minLng: bounds.getNorthEast().lng(),\r\n maxLng: bounds.getSouthWest().lng()\r\n }\r\n return obj;\r\n }\r\n\r\n function closeModal(e) {\r\n e.stopPropagation();\r\n var parentEl = e.target.closest('.hours-modal');\r\n $(parentEl).css('display', 'none');\r\n }\r\n\r\n function closeSphModal(e) {\r\n e.stopPropagation();\r\n var parentEl = e.target.closest('.sph-hours-modal');\r\n $(parentEl).css('display', 'none');\r\n }\r\n\r\n function closeEmergencyModal(e) {\r\n e.stopPropagation();\r\n var parentEl = e.target.closest('.emergency-hours-modal');\r\n $(parentEl).css('display', 'none');\r\n }\r\n\r\n function showFormModal(e) {\r\n let el = $(e.target);\r\n let target = $(e.target)[0];\r\n\r\n if ($(target).hasClass('tooltip-icon') || $(target).hasClass('uc-hero-panel__tooltip')) {\r\n e.preventDefault();\r\n return;\r\n } else {\r\n ui.hospitalName = el.data('hospital-name');\r\n ui.hospitalId = el.data('hospital-au');\r\n ui.hospitalSiteId = el.data('hospital-siteid');\r\n ui.hospitalSettingsItemId = el.data('hospital-setting');\r\n ui.$modalHospitalName.text(ui.hospitalName);\r\n ui.$NCAModal.modal('show');\r\n window.VCA.ucfahDatalayer.datalayerPushClick('hub-join NCA', ui.hospitalId);\r\n }\r\n }\r\n\r\n function openModal(e) {\r\n hidePopup();\r\n e.stopPropagation();\r\n var parentContainer = e.target.closest('.oab-find-a-hospital__search-item');\r\n var modal = $(parentContainer).find('.hours-modal');\r\n $(modal).css('display', 'block');\r\n\r\n // window.VCA.ucfahDatalayer.datalayerPushClick('hub-hours', id);\r\n }\r\n\r\n function openSphModal(e) {\r\n hidePopup();\r\n e.stopPropagation();\r\n var parentContainer = e.target.closest('.oab-find-a-hospital__search-item');\r\n var modal = $(parentContainer).find('.sph-hours-modal');\r\n $(modal).css('display', 'block');\r\n }\r\n\r\n function openEmergencyModal(e) {\r\n hidePopup();\r\n e.stopPropagation();\r\n var parentContainer = e.target.closest('.oab-find-a-hospital__search-item');\r\n var modal = $(parentContainer).find('.emergency-hours-modal');\r\n $(modal).css('display', 'block');\r\n }\r\n\r\n function clickEventDL(e) {\r\n var parentContainer = e.target.closest('.oab-find-a-hospital__search-item');\r\n var hospitalAU = $(parentContainer).find('.js-open-coupon-modal').attr('data-hospital-au');\r\n let action = 'hub-select hospital';\r\n if ($(e.target).hasClass(\"redirect-to-map\") || $(e.target).parent().hasClass(\"redirect-to-map\")) {\r\n action = 'hub-view map';\r\n }\r\n\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('hospital-name'), el.data('hospital-au'), 'OAB find a hospital');\r\n }\r\n\r\n function hidePopup() {\r\n $('.hours-modal').hide();\r\n $('.sph-hours-modal').hide();\r\n $('.emergency-hours-modal').hide();\r\n }\r\n\r\n function removeMarkers() {\r\n for (let i = 0; i < ui.$markers.length; i++) {\r\n ui.$markers[i].setMap(null);\r\n }\r\n }\r\n\r\n function setCurrentDate() {\r\n var dotw = '';\r\n switch (new Date().getDay()) {\r\n case 0:\r\n dotw = \"Sun\";\r\n break;\r\n case 1:\r\n dotw = \"Mon\";\r\n break;\r\n case 2:\r\n dotw = \"Tues\";\r\n break;\r\n case 3:\r\n dotw = \"Wed\";\r\n break;\r\n case 4:\r\n dotw = \"Thurs\";\r\n break;\r\n case 5:\r\n dotw = \"Fri\";\r\n break;\r\n case 6:\r\n dotw = \"Sat\";\r\n }\r\n\r\n return dotw;\r\n }\r\n\r\n function setDefaultMarker() {\r\n var currentLatLng = { lat: parseFloat(ui.$defaultLatitude), lng: parseFloat(ui.$defaultLongitude) };\r\n var marker = new google.maps.marker.AdvancedMarkerElement({\r\n position: currentLatLng,\r\n map: ui.$map,\r\n // animation: google.maps.Animation.DROP,\r\n zoom: 8,\r\n center: currentLatLng\r\n });\r\n }\r\n\r\n function setSearchDefaultRadius() {\r\n ui.$searchRadius.val(ui.$defaultRadius);\r\n if (ui.isCanada === 'true') {\r\n $('.find-search__dropdown-btn').text(`${ui.$defaultRadius} KM`);\r\n } else {\r\n $('.find-search__dropdown-btn').text(`${ui.$defaultRadius} miles`);\r\n }\r\n var radiusOnLoad = $('.find-search__dropdown-list-OAB').find(`[data-value=\"${ui.$defaultRadius}\"]`)[0];\r\n $(radiusOnLoad).addClass('focused selected');\r\n }\r\n\r\n function showErrorMessage(errorMessage) {\r\n ui.$errorMessage.text(errorMessage);\r\n ui.$errorMsgContainer.removeClass('hidden');\r\n }\r\n\r\n function displayDate(date) {\r\n var d = new Date(date),\r\n month = '' + (d.getMonth() + 1),\r\n day = '' + d.getDate(),\r\n year = d.getFullYear();\r\n\r\n if (month.length < 2)\r\n month = '0' + month;\r\n if (day.length < 2)\r\n day = '0' + day;\r\n\r\n return [month, day, year].join('/');\r\n }\r\n\r\n function sortResults(data) {\r\n var results = [...data];\r\n $(results).each(function () {\r\n var hospLat = this.Latitude;\r\n var hospLng = this.Longitude;\r\n var setA = {\r\n latitude: hospLat,\r\n longitude: hospLng\r\n };\r\n var setB = {\r\n latitude: ui.$currentLat,\r\n longitude: ui.$currentLng\r\n }\r\n var miles = (haversine(setA, setB) * 0.000621371).toFixed(1);\r\n this.miles = Number(miles);\r\n });\r\n var sortedArray = results.sort(function (a, b) {\r\n return a.miles - b.miles\r\n });\r\n return sortedArray;\r\n }\r\n\r\n function init() {\r\n if ($('#FindAHospitalMap-OAB').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindEvents();\r\n initPage();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n\r\n if ($('#FindAHospitalMap-OAB').length <= 0) {\r\n return;\r\n }\r\n //check for hiding left arrow in filter pills carousel\r\n let primaryFilter = $('.filter-pills').find('.slick-slide')[0];\r\n let leftArrowBtn = $('.filter-pills').find('.slick-prev.slick-arrow');\r\n let primaryIsSelected = $(primaryFilter).hasClass('slick-active');\r\n if (primaryIsSelected) {\r\n $(leftArrowBtn).hide();\r\n }\r\n\r\n $('.slick-prev').on('click', function (event) {\r\n event.preventDefault();\r\n primaryFilter = $('.filter-pills').find('.slick-slide')[0];\r\n primaryIsSelected = $(primaryFilter).hasClass('slick-active');\r\n\r\n if (primaryIsSelected) {\r\n $(leftArrowBtn).hide();\r\n }\r\n });\r\n\r\n $('.slick-next').on('click', function (event) {\r\n event.preventDefault();\r\n $(leftArrowBtn).show();\r\n });\r\n\r\n const mapEl = document.getElementById('FindAHospitalMap-OAB');\r\n\r\n function checkForGoogleMapsUC() {\r\n setTimeout(() => {\r\n if ('google' in window && typeof google === 'object' && typeof google.maps === 'object' && mapEl) {\r\n VCA.FindAHospitalOAB.init(mapEl);\r\n }\r\n else {\r\n checkForGoogleMapsUC();\r\n }\r\n }, 1000);\r\n }\r\n\r\n checkForGoogleMapsUC();\r\n});\r\n\r\n$(function () {\r\n //nca coupon button datalayer\r\n function bookAppointmentDataAnalystic(){\r\n $('.js-standardcouponbtn').on('click', function(event) {\r\n event.preventDefault(); // Prevent default anchor behavior\r\n window.dataLayer.push({\r\n 'event': 'oab-click',\r\n 'oab-location': 'lead-gen-exit',\r\n 'oab-type': 'standard',\r\n 'logged-in-status': false\r\n });\r\n let el = $(this); // Use `this` to refer to the clicked element\r\n window.location.href = el.attr('href');\r\n \r\n }); \r\n //header datalayer btn \r\n $('.action-btn__book-appt').on('click', function(event) {\r\n event.preventDefault(); // Prevent default anchor behavior\r\n var isloggedin = $(this).data('isloggedin');\r\n var hospitalId = $(this).data('hospitalid');\r\n var hospitalName = $(this).data('hospitalname'); \r\n\t\t\tvar returnParam = $(this).data('returnparam');\r\n \r\n if (hospitalName != null && hospitalName != undefined) {\r\n window.dataLayer.push({\r\n 'event': 'oab-click',\r\n 'oab-location': 'hospital-lp-header',\r\n 'oab-type': 'standard',\r\n 'hospital-AAU': hospitalId,\r\n 'hospital-name': hospitalName,\r\n 'logged-in-status': isloggedin\r\n });\r\n let el = $(this); \r\n if (returnParam != null && returnParam != undefined) {\r\n window.location.href = el.attr('href') + returnParam;\r\n } else {\r\n window.location.href = el.attr('href');\r\n }\r\n } else {\r\n window.dataLayer.push({\r\n 'event': 'oab-click',\r\n 'oab-location': 'vca-header',\r\n 'oab-type': 'standard',\r\n 'logged-in-status': false\r\n }); \r\n let el = $(this); \r\n window.location.href = el.attr('href'); \r\n }\r\n });\r\n }\r\n bookAppointmentDataAnalystic();\r\n});\r\n","import haversine from 'haversine-distance';\r\nimport getFahHospitals from '@api/routes/fah-hospital/fah-hospital';\r\nimport * as submitSpinner from '../custom-forms/form-loading';\r\nimport ApiService from '@api/api-service';\r\nimport { createCustomIconElement } from '../map-frame';\r\n\r\nvar VCA = VCA || {};\r\nVCA.FindAHospital = (function ($) {\r\n var ui = {};\r\n var _urlParams = {};\r\n var hospitalListFAH;\r\n var avalilablSlotPromise = [];\r\n var sortedData = [];\r\n var countHospitalList = 4;\r\n function bindEvents() {\r\n ui.$viewMapBtn.on('click', focusOnMap);\r\n ui.$filterPill.on('click', selectFilter);\r\n ui.$searchBtn.on('click', selectSearch);\r\n ui.$searchValue.on('keypress', function (e) {\r\n if (e.which == 12 || e.key === 'Enter') {\r\n selectSearch();\r\n }\r\n });\r\n ui.$fahContainer.on('click', function (event) {\r\n if (!$('.hours-modal').is(event.target) && $('.hours-modal').has(event.target).length === 0) {\r\n $('.hours-modal').hide();\r\n }\r\n if (!$('.sph-hours-modal').is(event.target) && $('.sph-hours-modal').has(event.target).length === 0) {\r\n $('.sph-hours-modal').hide();\r\n }\r\n if (!$('.emergency-hours-modal').is(event.target) && $('.emergency-hours-modal').has(event.target).length === 0) {\r\n $('.emergency-hours-modal').hide();\r\n }\r\n if (!$('.appointment-visit-tag-modal').is(event.target) && $('.appointment-visit-tag-modal').has(event.target).length === 0 && !$('.wellness-modal-btn').is(event.target) && $('.wellness-modal-btn').has(event.target).length === 0) {\r\n $('.appointment-visit-tag-modal').hide();\r\n }\r\n });\r\n\r\n ui.$searchRadiusUL.on('click', 'li', selectSearch);\r\n ui.$VMRForm.on('submit', validateForm);\r\n ui.$VWRReferralPrimaryVet.hide();\r\n ui.$VWRReferralEmergencyHospital.hide();\r\n $(ui.$VWRReferralSource).on('change', onSelectReferralSource)\r\n }\r\n function focusOnMap() {\r\n $('html,body').animate({\r\n scrollTop: ui.$mapContainer.offset().top\r\n },\r\n 'slow');\r\n }\r\n function cacheUI() {\r\n ui.$filterPill = $('.filter-pills__pill');\r\n ui.$searchBtn = $('.find-search-btn');\r\n ui.$mapContainer = $(\"#FindAHospitalMap\");\r\n ui.$searchInputValue = $('.find-search__input');\r\n ui.$viewMapBtn = $('[data-control=\"fahViewMap\"]');\r\n ui.$fahMapAndList = $(\".search-results-container\")\r\n ui.$loadingSpinner = $('.search-results-container__loading');\r\n ui.$resultsContainer = $('.search-results-container__list');\r\n ui.$fahContainer = $('.bg-color-vca-whisper');\r\n ui.$errorMsgContainer = $('.search-results-container__error-msg-container');\r\n ui.$errorMessage = $('.search-results-container__error-msg');\r\n ui.$searchValue = $('#SearchInput');\r\n ui.$searchRadius = $('#SearchRadius');\r\n ui.$VWRInfoWrapper = $('.FAHVWRInfoWrapper');\r\n ui.$VWRModal = $('#FAHVWRFormModal');\r\n\r\n ui.$vwrModalForm = $('[data-region=\"vwrModalForm\"]');\r\n ui.$vwrModalComfirmation = $('[data-region=\"vwrModalComfirmation\"]');\r\n ui.$VWRFormSubmitBtn = $('#VWRFormSubmit');\r\n ui.$VMRForm = $('.uc-vwr-form');\r\n ui.$VMRFormPhoneNum = $('#VWRPhoneNum');\r\n ui.$InputEl = $('.uc-vwr-modal input');\r\n ui.$SelectEl = $('.uc-vwr-modal select');\r\n ui.$TextAreaEl = $('.uc-vwr-modal textarea');\r\n ui.$VWRReferralPrimaryVet = $('label[for=VWRReferralPrimaryVet], Input#VWRReferralPrimaryVet');\r\n ui.$VWRReferralEmergencyHospital = $('label[for=VWRReferralEmergencyHospital], Input#VWRReferralEmergencyHospital');\r\n ui.$APIErrorMessage = $('.uc-vwr-modal__error-msg');\r\n ui.$VWRReferralSource = $(\"#VWRReferralSource\");\r\n\r\n ui.$searchRadiusUL = $('#SearchRadiusUL');\r\n ui.$defaultRadius = $('#defaultRadius').val();\r\n ui.$defaultLatitude = $(\"#defaultLatitude\").val();\r\n ui.$defaultLongitude = $(\"#defaultLongitude\").val();\r\n ui.$enableCityBasedSearch = $(\"#enableCityBasedSearch\").val();\r\n ui.$defaultCityState = $(\"#defaultCityState\").val();\r\n ui.$defaultFilter = $('.filter-pills__pill.active').attr('data-filter-value');\r\n ui.$countryId = $('#countryId').val();\r\n ui.$dataId = $('#dataId').val();\r\n ui.$tooltipIcon = $('#fahtooltipIcon').val();\r\n ui.$tooltipText = $('#fahtooltipText').val();\r\n ui.$vwButtonText = $('#fahVwButtonText').val();\r\n ui.isCanada = $('[data-iscanada]').attr('data-iscanada');\r\n ui.$map;\r\n ui.$geocoder;\r\n ui.$currentLat;\r\n ui.$currentLng;\r\n ui.$bounds;\r\n ui.$prevSearchValue;\r\n ui.$markers = [];\r\n ui.$selectedFiltersArr = [];\r\n ui.hospitalId;\r\n $(ui.$searchValue).val('');\r\n // for loader\r\n ui.$fahSection = ui.$fahContainer;\r\n }\r\n\r\n // show hide loader overlay\r\n function showLoader() {\r\n ui.$fahSection.css('opacity', '.9').css('pointer-events', 'none');\r\n }\r\n\r\n function hideLoader() {\r\n ui.$fahSection.css('opacity', '1').css('pointer-events', 'all');\r\n }\r\n\r\n function calcMinMaxLatLng(bounds) {\r\n var obj = {\r\n minLat: bounds.getNorthEast().lat(),\r\n maxLat: bounds.getSouthWest().lat(),\r\n minLng: bounds.getNorthEast().lng(),\r\n maxLng: bounds.getSouthWest().lng()\r\n }\r\n return obj;\r\n }\r\n\r\n function closeModal(e) {\r\n e.stopPropagation();\r\n var parentEl = e.target.closest('.hours-modal');\r\n $(parentEl).css('display', 'none');\r\n }\r\n\r\n function closeSphModal(e) {\r\n e.stopPropagation();\r\n var parentEl = e.target.closest('.sph-hours-modal');\r\n $(parentEl).css('display', 'none');\r\n }\r\n\r\n function closeEmergencyModal(e) {\r\n e.stopPropagation();\r\n var parentEl = e.target.closest('.emergency-hours-modal');\r\n $(parentEl).css('display', 'none');\r\n }\r\n\r\n /**\r\n * @method closeSelectedReasonModal\r\n * @description to close the wellness or sick visit popup\r\n */\r\n function closeSelectedReasonModal(e) {\r\n e.stopPropagation();\r\n var parentEl = e.target.closest('.appointment-visit-tag-modal');\r\n $(parentEl).css('display', 'none');\r\n }\r\n\r\n async function createCard(hospitals) {\r\n hospitalListFAH = hospitals;\r\n var bounds = new google.maps.LatLngBounds();\r\n\r\n for (var a = 0; a < hospitals.length; a++) {\r\n var hospitalTypesTags = hospitals[a].HospitalTypes;\r\n var hoursObj = hospitals[a].Hours;\r\n var hospitalHours = hospitals[a].HospitalHours;\r\n var searchImageContainer = $(document.createElement('div')).addClass('search-item__image-container');\r\n var sphmodalContainer = $(document.createElement('div')).addClass('sph-hours-modal').attr({\r\n 'id': `HoursModal-${a}`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var sphmodalContentWrapper = $(document.createElement('div')).addClass('sph-hours-modal__content modal-content').attr('role', 'document');\r\n var sphmodalHoursWrapper = $(document.createElement('ul')).addClass('sph-hours-modal__hours-list');\r\n var emergencymodalContainer = $(document.createElement('div')).addClass('emergency-hours-modal').attr({\r\n 'id': `HoursModal-${a}`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var emergencymodalContentWrapper = $(document.createElement('div')).addClass('emergency-hours-modal__content modal-content').attr('role', 'document');\r\n var emergencymodalHoursWrapper = $(document.createElement('ul')).addClass('emergency-hours-modal__hours-list');\r\n\r\n var parentContainer = $(document.createElement('li')).addClass('search-item');\r\n var leftContainer = $(document.createElement('div')).addClass('search-item__left').css('background-image', `url(${hospitals[a].HospitalImageUrl})`);\r\n var rightContainer = $(document.createElement('div')).addClass('search-item__right');\r\n var typeTagsWrapper = $(document.createElement('ul')).addClass('search-item__type-tags');\r\n var descContainer = $(document.createElement('div')).addClass('search-item__desc-container');\r\n var ctaContainer = $(document.createElement('div')).addClass('search-item__cta-container');\r\n var modalContainer = $(document.createElement('div')).addClass('hours-modal').attr({\r\n 'id': `HoursModal-${a}`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var modalContentWrapper = $(document.createElement('div')).addClass('hours-modal__content modal-content').attr('role', 'document');\r\n var modalHoursWrapper = $(document.createElement('ul')).addClass('hours-modal__hours-list');\r\n\r\n // Calculate distance \r\n var locationA = {\r\n latitude: hospitals[a].Latitude,\r\n longitude: hospitals[a].Longitude\r\n };\r\n var locationB = {\r\n latitude: ui.$currentLat,\r\n longitude: ui.$currentLng\r\n } //Need to modify this line of code\r\n var calcMiles = (haversine(locationA, locationB) * 0.000621371).toFixed(1);\r\n var distanceApart = `${calcMiles}`;\r\n\r\n // Create Google Map Markers \r\n var marker = new google.maps.Marker({\r\n position: new google.maps.LatLng(hospitals[a].Latitude, hospitals[a].Longitude),\r\n map: ui.$map,\r\n animation: google.maps.Animation.DROP\r\n });\r\n\r\n ui.$markers.push(marker);\r\n\r\n var label = new google.maps.InfoWindow({\r\n content: hospitals[a].Name,\r\n maxWidth: 200\r\n });\r\n\r\n google.maps.event.addListener(marker, 'click', (function (marker, infowindow) {\r\n return function () {\r\n infowindow.open(ui.$map, marker);\r\n };\r\n })(marker, label));\r\n bounds.extend(marker.getPosition());\r\n\r\n // Create hospital type tags (left section)\r\n if (hospitalTypesTags !== null) {\r\n for (var b = 0; b < hospitalTypesTags.length; b++) {\r\n typeTagsWrapper.append(`<li class='search-item__tag'>${hospitalTypesTags[b].DisplayName}</li>`);\r\n }\r\n }\r\n leftContainer.append(typeTagsWrapper);\r\n\r\n // Create right section content\r\n var hospitalName = $(`<a class=\"search-item__title\" href=\"${hospitals[a].Url}\">${hospitals[a].Name}</a>`);\r\n var descContainerEl = $(`\r\n <div class=\"search-item__details\">\r\n <div class=\"search-item__icon\"><img src=\"../../../images-2/location-color-icon.svg\" alt=\"address icon\"></div>\r\n <div class=\"search-item__address-container\">\r\n <div>${hospitals[a].AddressLine1} ${hospitals[a].AddressLine2}</div>\r\n <span>${hospitals[a].City}, ${hospitals[a].State} ${hospitals[a].Zipcode}</span>\r\n </div>\r\n </div>\r\n <div class=\"search-item__side\">\r\n <span class=\"search-item__distance-away\">${distanceApart} ${hospitals[a].DistanceUnit}</span>\r\n </div>\r\n `);\r\n\r\n var ctaContainerEl = $(`\r\n <div class=\"search-item__cta-tags\">\r\n <div class=\"cta-row fah-contact\">\r\n <div class=\"fah-contact-icon\">\r\n <img src=\"../../../images-2/contact-fah-icon.svg\" alt=\"phone icon\">\r\n </div>\r\n ${!hospitals[a].PhoneNumbers?.length ? \"\" : \r\n `${hospitals[a].PhoneNumbers.length > 0 ? hospitals[a].PhoneNumbers.map((phoneNumber) => `<li class=\"cta-ph-label\"> <span class= \"fah-ph-label\">${phoneNumber.PhoneLabel}</span><a class=\"fah-ph-number\" href=\"tel:${phoneNumber.PhoneNumber}\">${phoneNumber.PhoneNumber}</a></li>`) : ``}\r\n `\r\n }\r\n </div>\r\n <div class=\"cta-row fah-hours-container\" id=\"hours-appt-${a}\"></div>\r\n <div class=\"cta-row\">\r\n <a class=\"cta-tag ${hospitals[a].HasCareClub == true && hospitals[a].CareClubUrl !== null ? '' : 'hidden'}\" href=\"${hospitals[a].CareClubUrl}\">${hospitals[a].CareClubLabel}</a>\r\n <a class=\"cta-tag ${hospitals[a].HasNewClientOffer == true && hospitals[a].NewClientOfferUrl !== null ? '' : 'hidden'}\" href=\"${hospitals[a].NewClientOfferUrl}\">${hospitals[a].NewClientOfferLabel}</a>\r\n </div>\r\n <div class=\"cta-row fappt-btn-wrapper\">\r\n <div class=\"cta-row fapp-btn\">\r\n <a class=\"btn book-appointment ${hospitals[a].HasBookAnAppointment == true && hospitals[a].BookAnAppointmentUrl !== null ? '' : 'hidden'}\" href=\"${hospitals[a].BookAnAppointmentUrl}\">${hospitals[a].BookAnAppointmentLabel}</a>\r\n <a class=\"redirect-to-map ${hospitals[a].DirectionUrl == null || hospitals[a].DirectionUrl == '' ? 'hidden' : ''}\" href=\"${hospitals[a].DirectionUrl}\" target=\"_blank\">\r\n <img src=\"${hospitals[a].DirectionImageUrl}\" alt=\"Direction Image\">\r\n </a>\r\n </div>\r\n <div class=\"cta-row\" id=\"cta-tag-appointment-${a}\">\r\n </div>\r\n </div>\r\n </div> \r\n `);\r\n var ctaHoursEl = $(`\r\n <div class=\"cta-row fah-hours ${hospitals[a].IsComingSoonHospital == true ? `hidden` : ``}\">\r\n <img src=\"../../../images-2/hours-fah-icon.svg\" alt=\"hospital hours icon\">\r\n </div>`);\r\n if (hospitalHours !== null) {\r\n var ctaHours = $(document.createElement('div')).addClass('fah-hours-container');\r\n\r\n for (var i = 0; i < hospitalHours.length; i++) {\r\n hoursObj = hospitalHours[i].HospitalHoursList;\r\n\r\n ctaHours.append(`\r\n <li class=\"cta-hours-label ${hospitals[a].IsComingSoonHospital == true ? `hidden` : ``}\">\r\n <span class=\"cta-tag ${hospitalHours[i].HoursIndex == '0' ? `hours-modal-btn` : hospitalHours[i].HoursIndex == '1' ? 'sph-hours-modal-btn' : `emergency-hours-modal-btn`}\" > ${hospitalHours[i].HoursName}</span>\r\n <span class=\"search-item__status ${hospitalHours[i].IsOpen == true ? `open` : `closed`}\">${hospitalHours[i].IsOpen == true ? `${hospitals[a].OpenLabel}` : `${hospitals[a].CloseLabel}`}</span>\r\n </li>\r\n `);\r\n\r\n var modalBtnAndTitle = $(`\r\n <button type=\"button\" class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__close-btn close-btn` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__close-btn sph-close-btn` : `emergency-hours-modal__close-btn emergency-close-btn`}\" aria-label=\"close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n <div class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__header` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__header` : `emergency-hours-modal__header`}\">${hospitalHours[i].HoursName}</div>\r\n `);\r\n\r\n let hoursDisclaimerText = '';\r\n if (hospitals[a].HoursDisclaimer != null && hospitals[a].HoursDisclaimer != '') {\r\n hoursDisclaimerText = \"<p class='hours-modal__message'>\" + hospitals[a].HoursDisclaimer + \"</p>\";\r\n } else if (hospitalHours[i] != null && hospitalHours[i].HoursDisclaimer != null && hospitalHours[i].HoursDisclaimer != '') {\r\n hoursDisclaimerText = \"<p class='hours-modal__message'>\" + hospitalHours[i].HoursDisclaimer + \"</p>\";\r\n }\r\n\r\n var bottomModalSection = $(`\r\n <div class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__divider` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__divider` : `emergency-hours-modal__divider`}\"></div>\r\n ${hoursDisclaimerText}\r\n <a class=\"${hospitalHours[i].HoursIndex == '0' ? `hours-modal__link` : hospitalHours[i].HoursIndex == '1' ? `sph-hours-modal__link` : `emergency-hours-modal__link`}\" href=\"${hospitalHours[i].HoursPageUrl}\">View hospital info »</a>\r\n `);\r\n\r\n if (hoursObj !== null) {\r\n hoursObj.forEach(function (hourObj) {\r\n if (hourObj.Label !== null && hourObj.Label !== undefined && hourObj.Label.includes(\"_\")) {\r\n return;\r\n }\r\n var day = hourObj.Label; \r\n var isCurrentDay = hourObj.IsCurrentDay;\r\n var isTemporaryHours = hourObj.IsTemporaryHours;\r\n var filteredObj = (hoursObj).filter((hour) => hour !== null && hour !== undefined && hour.Label !== null && hour.Label !== undefined && hour.Label.includes(day)).map(({ Hours }) => Hours);\r\n\r\n let timeList = bindHoursList(filteredObj, isTemporaryHours);\r\n\r\n if (hospitalHours[i].HoursIndex == '0') { \r\n modalHoursWrapper.append(`<li class=\"${isCurrentDay ? 'active' : ''}\">\r\n <span class=\"day\">${day}</span>\r\n <div class=\"time\">${timeList}</div>\r\n </li>`);\r\n } else if (hospitalHours[i].HoursIndex == '1') { \r\n sphmodalHoursWrapper.append(`<li class=\"${isCurrentDay ? 'active' : ''}\">\r\n <span class=\"day\">${day}</span>\r\n <div class=\"time\">${timeList}</div>\r\n </li>`);\r\n } else { \r\n emergencymodalHoursWrapper.append(`<li class=\"${isCurrentDay ? 'active' : ''}\">\r\n <span class=\"day\">${day}</span>\r\n <div class=\"time\">${timeList}</div>\r\n </li>`);\r\n }\r\n });\r\n if (hospitalHours[i].HoursIndex == '0') {\r\n modalContainer.append(modalContentWrapper);\r\n modalContentWrapper.append(modalBtnAndTitle, modalHoursWrapper, bottomModalSection);\r\n ctaHoursEl.append(ctaHours);\r\n parentContainer.append(searchImageContainer, rightContainer, modalContainer);\r\n } else if (hospitalHours[i].HoursIndex == '1') {\r\n sphmodalContainer.append(sphmodalContentWrapper);\r\n sphmodalContentWrapper.append(modalBtnAndTitle, sphmodalHoursWrapper, bottomModalSection);\r\n ctaHoursEl.append(ctaHours);\r\n parentContainer.append(searchImageContainer, rightContainer, sphmodalContainer);\r\n } else {\r\n emergencymodalContainer.append(emergencymodalContentWrapper);\r\n emergencymodalContentWrapper.append(modalBtnAndTitle, emergencymodalHoursWrapper, bottomModalSection);\r\n ctaHoursEl.append(ctaHours);\r\n parentContainer.append(searchImageContainer, rightContainer, emergencymodalContainer);\r\n }\r\n }\r\n }\r\n }\r\n ctaContainerEl.find(`#hours-appt-${a}`).append(ctaHoursEl);\r\n \r\n rightContainer.append(hospitalName);\r\n descContainer.append(descContainerEl);\r\n ctaContainer.append(ctaContainerEl);\r\n rightContainer.append(descContainer, ctaContainer);\r\n\r\n\r\n // Create Modal\r\n var modalBtnAndTitle = $(`\r\n <button type=\"button\" class=\"hours-modal__close-btn close-btn\" aria-label=\"close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n <div class=\"hours-modal__header\">HOURS</div>\r\n `);\r\n\r\n var bottomModalSection = $(`\r\n <div class=\"hours-modal__divider\"></div>\r\n <p class=\"hours-modal__message ${hospitals[a].HoursDisclaimer == null || hospitals[a].HoursDisclaimer == '' ? 'hidden' : ''}\">*${hospitals[a].HoursDisclaimer}</p>\r\n <a class=\"hours-modal__link\" href=\"${hospitals[a].HoursPageUrl}\">View hospital info »</a>\r\n `);\r\n\r\n \r\n\r\n modalContainer.append(modalContentWrapper);\r\n parentContainer.append(leftContainer, rightContainer, modalContainer);\r\n ui.$resultsContainer.append(parentContainer);\r\n\r\n //Bind events after dynamic content has been created\r\n ui.$modalBtn = $('.hours-modal-btn');\r\n ui.$closeBtn = $('.close-btn');\r\n ui.$modalBtn.on('click', openModal);\r\n ui.$closeBtn.on('click', closeModal);\r\n\r\n ui.$map.fitBounds(bounds);\r\n }\r\n\r\n if (hospitals.length === 0) {\r\n setDefaultMarker();\r\n }\r\n }\r\n\r\n function bindHoursList(timeList, isTemporaryHours) {\r\n return timeList.map((hourtime) => {\r\n return `<span>\r\n ${hourtime} \r\n <span class=\"${isTemporaryHours ? '' : 'hidden'}\">*</span>\r\n </span>`;\r\n }).join('');\r\n }\r\n\r\n /**\r\n * @method clickSelectedReasonTypes\r\n * @description to click the selected reason to show the time slot depends on reason\r\n */\r\n function clickSelectedReasonTypes(e) {\r\n let el = $(e.target);\r\n for (let i = 0; i < el.data('appointment-length'); i++) {\r\n for (let j = 0; j < el.data('appointment-date-length'); j++) {\r\n if (el.data('appointment-slot-id') == j) {\r\n $('.date-time-' + el.data('appointment-text') + '-' + el.data('appointment-slot-id')).removeClass('hidden');\r\n $('.appointment-active-btn-' + j).addClass('active-tab');\r\n } else {\r\n $('.date-time-' + el.data('appointment-text') + '-' + j).addClass('hidden');\r\n $('.appointment-active-btn-' + j).removeClass('active-tab');\r\n }\r\n }\r\n }\r\n }\r\n\r\n function getTickToHours(time) {\r\n let num = time;\r\n let hours = (num / 60);\r\n let rhours = Math.floor(hours);\r\n let minutes = (hours - rhours) * 60;\r\n let rminutes = Math.round(minutes);\r\n\r\n if (rhours < 1) {\r\n return `${rminutes} minutes`;\r\n } else if (rhours == 1) {\r\n return `${rhours} hour and ${rminutes} minutes`;\r\n } else {\r\n return `${rhours} hours and ${rminutes} minutes`;\r\n }\r\n }\r\n\r\n function hospitalNameDataAnalystic(e) {\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('hospital-name'), el.data('hospital-au'), 'find a hospital');\r\n }\r\n\r\n function careClubDataAnalystic(e) {\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('care-club'), el.data('care-id'), 'find a hospital');\r\n }\r\n\r\n function bookAppointmentDataAnalystic(e) {\r\n suspendApiCalls();\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('hospital-name'), el.data('hospital-au'), 'find a hospital');\r\n //window.location.href = el.attr('href');\r\n }\r\n\r\n let bookAppointmentTimeout;\r\n\r\n function bookAppointmentDataGtm(e) {\r\n e.preventDefault();\r\n // Prevent multiple triggers within the delay period\r\n if (bookAppointmentTimeout) {\r\n clearTimeout(bookAppointmentTimeout);\r\n }\r\n\r\n // Set a delay before executing the function logic\r\n bookAppointmentTimeout = setTimeout(function () {\r\n suspendApiCalls();\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushBook(el.data('hospital-name'), el.data('hospital-au'), 'hospital-locator');\r\n window.location.href = el.attr('href');\r\n }, 300); \r\n }\r\n\r\n\r\n function getdirectionDataAnalystic(e) {\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('get-direction'), el.data('get-id'), 'find a hospital');\r\n }\r\n\r\n function getBounds(lat, lng, radius) {\r\n let ConvertedRadius = radius * 1609.34;\r\n\r\n // add to canada site\r\n if (ui.isCanada === 'true') {\r\n ConvertedRadius = radius * 1000;\r\n }\r\n\r\n var circleData = {\r\n center: {\r\n lat,\r\n lng\r\n },\r\n radius: ConvertedRadius\r\n };\r\n\r\n if (window['google']) {\r\n return new window['google'].maps.Circle(circleData).getBounds();\r\n }\r\n }\r\n\r\n function getFAHSearchParams() {\r\n var address = '';\r\n if ($(ui.$searchValue).val() !== undefined || $(ui.$searchValue).val() !== null || $(ui.$searchValue).val() !== '') {\r\n address = $(ui.$searchValue).val();\r\n }\r\n\r\n if (address == '') {\r\n if (_urlParams.hasSearchText) {\r\n address = _urlParams.searchText;\r\n } else if (_urlParams.hasZipCode) {\r\n address = _urlParams.zipCode;\r\n }\r\n }\r\n\r\n var hospitalType;\r\n if (ui.$selectedFiltersArr.includes('A')) {\r\n hospitalType = _urlParams.hasHospitalType ? _urlParams.hospitalType : ui.$defaultFilter;\r\n } else {\r\n hospitalType = ui.$selectedFiltersArr;\r\n }\r\n\r\n if (ui.$selectedFiltersArr) {\r\n hospitalType = [...new Set(ui.$selectedFiltersArr)];\r\n }\r\n\r\n let radiusValue = $(ui.$searchRadius).val()\r\n\r\n ui.$bounds = getBounds(ui.$currentLat, ui.$currentLng, radiusValue);\r\n let minMaxValues = calcMinMaxLatLng(ui.$bounds);\r\n\r\n let fahSearchParams = {\r\n CurrentLat: ui.$currentLat,\r\n CurrentLng: ui.$currentLng,\r\n MinLatitude: minMaxValues.minLat,\r\n MaxLatitude: minMaxValues.maxLat,\r\n MinLongitude: minMaxValues.minLng,\r\n MaxLongitude: minMaxValues.maxLng,\r\n Radius: radiusValue,\r\n SearchText: address,\r\n HospitalType: hospitalType,\r\n HospitalTypeDisplayName: _urlParams.hasHospitalTypeDisplayName ? unescape(_urlParams.hospitalTypeDisplayName) : null,\r\n Country: ui.$countryId,\r\n DataItemId: ui.$dataId,\r\n HospitalIdsItemId: _urlParams.hospitalIds\r\n }\r\n return fahSearchParams; \r\n }\r\n\r\n async function getSearchResults(errorMessage, blResetFilters) {\r\n ui.$resultsContainer.empty();\r\n ui.$resultsContainer.addClass('hidden');\r\n ui.$errorMsgContainer.addClass('hidden');\r\n ui.$loadingSpinner.removeClass('hidden');\r\n showLoader()\r\n let fahSearchParams = getFAHSearchParams();\r\n ui.$bounds = getBounds(fahSearchParams.CurrentLat, fahSearchParams.CurrentLng, fahSearchParams.Radius);\r\n ui.$searchBtn.attr('disabled', true);\r\n ui.$searchInputValue.attr('disabled', true);\r\n hospitalListFAH = [];\r\n sortedData = [];\r\n\r\n await getFahHospitals.post(fahSearchParams)\r\n .then(response => {\r\n if (response.data.OK) {\r\n if (blResetFilters) {\r\n let activeFilter = $('.filter-pills__wrapper').find('.filter-pills__pill.active');\r\n let primaryFilter = $('.filter-pills__wrapper').find('.filter-pills__pill')[0];\r\n $(activeFilter).removeClass('active');\r\n $(primaryFilter).addClass('active');\r\n }\r\n let data = response.data.result;\r\n ui.$searchBtn.removeAttr('disabled');\r\n ui.$searchInputValue.removeAttr('disabled');\r\n sortedData = sortResults(data);\r\n removeMarkers();\r\n createCard(sortedData);\r\n\r\n //User story: 32701 [FAH - OAB] Hospital Locator + First Available Appointment\r\n countHospitalList = 4;\r\n let firstFourHospitalsData = sortedData.slice(0, 4)\r\n if (sortedData != \"\" && sortedData.length > 0) {\r\n for (let j = 0; j < 4; j++) {\r\n if (j > sortedData.length) {\r\n break;\r\n }\r\n }\r\n firstAvailableSlotTag(firstFourHospitalsData);\r\n }\r\n\r\n //desktop device\r\n $('.search-results-container__list').on('scroll', function () {\r\n let div = $(this).get(0);\r\n if (div.scrollTop + div.clientHeight + 10 >= div.scrollHeight) {\r\n let countlength = countHospitalList + 4;\r\n if (sortedData.length >= countHospitalList) {\r\n firstFourHospitalsData = sortedData.slice(countHospitalList, countlength);\r\n firstAvailableSlotTag(firstFourHospitalsData);\r\n }\r\n for (var a = countHospitalList; a < countlength; a++) {\r\n if (sortedData.length >= countHospitalList) {\r\n $(`#hospital-list-lazy-load-` + countHospitalList).removeClass('hidden')\r\n countHospitalList++;\r\n }\r\n }\r\n }\r\n });\r\n ui.$loadingSpinner.addClass('hidden');\r\n hideLoader()\r\n ui.$resultsContainer.removeClass('hidden');\r\n $('.FAHVWRInfoWrapper').on('click', showFormModal);\r\n if (response.data.result.length === 0) {\r\n showErrorMessage(\"No Results.\");\r\n }\r\n } else {\r\n removeMarkers();\r\n ui.$loadingSpinner.addClass('hidden');\r\n hideLoader()\r\n ui.$searchBtn.removeAttr('disabled');\r\n ui.$searchInputValue.removeAttr('disabled');\r\n showErrorMessage(response.data.error);\r\n }\r\n })\r\n .catch(error => {\r\n ui.$loadingSpinner.addClass('hidden');\r\n hideLoader()\r\n ui.$errorMsgContainer.removeClass('hidden');\r\n ui.$searchBtn.removeAttr('disabled');\r\n ui.$searchInputValue.removeAttr('disabled');\r\n });\r\n }\r\n\r\n function handleLocationError(browserHasGeolocation, infoWindow, pos) {\r\n infoWindow.setPosition(pos);\r\n infoWindow.setContent(\r\n browserHasGeolocation ?\r\n \"Error: The Geolocation service failed.\" :\r\n \"Error: Your browser doesn't support geolocation.\"\r\n );\r\n infoWindow.open(ui.$map);\r\n ui.$loadingSpinner.addClass('hidden');\r\n hideLoader()\r\n if (ui.isCanada) {\r\n showErrorMessage('Please provide address or postal code.');\r\n } else {\r\n showErrorMessage('Please provide address or zipcode.');\r\n }\r\n }\r\n\r\n /**\r\n * @method firstAvailableSlotTag\r\n * @description to get the wellness or sick visit details and append the data\r\n */\r\n async function firstAvailableSlotTag(hospitals) {\r\n hospitals.forEach(function (hospital) {\r\n if (hospital != undefined && hospital.ShowFirstAvailableAppt && hospital.HospitalId != null && hospital.HospitalId != \"\" && hospital.HasBookAnAppointment) {\r\n avalilablSlotPromise.push($.ajax({\r\n url: '/fah-api/get-first-available?hospitalId=' + hospital.HospitalId, type: 'GET',\r\n success: function (returnhtml) {\r\n if (returnhtml.result != \"\") {\r\n const hospitalIndex = sortedData?.findIndex((sortedHospital) => sortedHospital.HospitalId == hospital.HospitalId);\r\n let allAppointmentTypesList = [];\r\n allAppointmentTypesList = returnhtml.result;\r\n if (allAppointmentTypesList.length > 0) {\r\n hospital.AppointmentTypes = allAppointmentTypesList.filter((appointment) => appointment.HospitalId == hospital.HospitalId);\r\n }\r\n var hospitalVisitType = $(`<div class=\"cta-row search-item__wellness-visit ${hospital.IsComingSoonHospital ? `hidden` : ``} ${\r\n hospital.IsHybridHospital ? 'border-top-color-vca-dusk' : ''\r\n }\"></div>`);\r\n var schedulewrapper = $(`<div class=\"schedule-appointment-wrapper\"> </div>`);\r\n var firstAvailablewrapper = $(`<div class=\"first-available-wrapper\">\r\n <div class=\"first-available-title\">\r\n <span><img src=\"../../../images-2/Appointments-Calendar-color-icon.svg\" alt=\"appointment calander icon\"></span>\r\n <span>First Available</span>\r\n </div>\r\n </div>`);\r\n var firstAvailableSlot = $(`<div class=\"first-available-slot\"></div>`);\r\n var appointmentTypeListData = hospital.AppointmentTypes;\r\n var appointmentTypeListCheck = appointmentTypeListData != undefined && appointmentTypeListData != null && appointmentTypeListData != \"\";\r\n if (appointmentTypeListCheck) {\r\n if (appointmentTypeListData.length) {\r\n appointmentTypeListData.forEach((appointmentType, appointmentTypeIndex) => {\r\n var hospitalTimezone = appointmentType.HospitalTimezone;\r\n var newDate = displayDate(appointmentType.Availablity);\r\n var newtTime = new Date(appointmentType.Availablity).toLocaleString('en-us', { hour: 'numeric', minute: 'numeric', timeZone: hospitalTimezone });\r\n var appointmentTypeList = $(`<span class=\"cta-tag wellness-modal-btn\" data-available-slot=\"${appointmentTypeIndex}\" data-hospital-index=\"${hospitalIndex}\" data-hospital-name=\"${hospital.Name}\" data-hospital-au=\"${hospital.HospitalId}\">\r\n <span >\r\n <img src=\"${appointmentType.Icon}\" alt=\"appointment type icon\">\r\n </span>\r\n <span class=\"wellness-time-slot\" data-available-slot=\"${appointmentTypeIndex}\" data-hospital-index=\"${hospitalIndex}\">\r\n <span class=\"wellness-label\" data-available-slot=\"${appointmentTypeIndex}\" data-hospital-index=\"${hospitalIndex}\">${appointmentType.AppointmentTypeLabel}</span>\r\n <span data-available-slot=\"${appointmentTypeIndex}\" data-hospital-index=\"${hospitalIndex}\">${newtTime}</span>\r\n <span class=\"wellness-day\" data-available-slot=\"${appointmentTypeIndex}\" data-hospital-index=\"${hospitalIndex}\">${newDate}</span>\r\n </span>`)\r\n firstAvailableSlot.append(appointmentTypeList)\r\n })\r\n }\r\n $('#book-appointment-id-' + hospitalIndex).addClass('hidden');\r\n firstAvailablewrapper.append(firstAvailableSlot);\r\n schedulewrapper.append(firstAvailablewrapper);\r\n \r\n if(hospital.IsHybridHospital){\r\n let horizontalLine = $(`<span class=\"search-item__booking-title\">Primary Care Online Booking Available</span>`);\r\n hospitalVisitType.append(horizontalLine,schedulewrapper);\r\n }else{\r\n hospitalVisitType.append(schedulewrapper);\r\n }\r\n $('#cta-tag-appointment-' + hospitalIndex)\r\n .addClass(\"fappt-content\")\r\n .append(hospitalVisitType); \r\n \r\n ui.$bookAppointmentAnalystic = $('.book-appointment');\r\n ui.$bookAppointmentAnalystic.on('click', bookAppointmentDataGtm);\r\n ui.$wellnessBtn = $('.wellness-modal-btn');\r\n ui.$wellnessBtn.off('click').on('click', openAvailableAppointmentModal);\r\n }\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n console.error('Error in one of the parallel calls:', errorThrown);\r\n }\r\n }))\r\n }\r\n });\r\n }\r\n\r\n function hasSearchParams() {\r\n return _urlParams.hasHospitalType || _urlParams.hasRadius || _urlParams.hasZipCode || _urlParams.hasSearchText || _urlParams.hasHospitalTypeDisplayName;\r\n }\r\n\r\n function initDefaultSelectedFilter() {\r\n //include default selected filter on page load to ui.$selectedFiltersArr\r\n let defaultFilter = $('.filter-pills').find('.slick-slide')[0];\r\n let defaultFilterValue = $(defaultFilter).find('.filter-pills__pill.active').data('filter-value');\r\n ui.$selectedFiltersArr.push(defaultFilterValue);\r\n }\r\n\r\n function showFormModal(e) {\r\n let el = $(e.target);\r\n let target = $(e.target)[0];\r\n\r\n if ($(target).hasClass('tooltip-icon') || $(target).hasClass('uc-hero-panel__tooltip')) {\r\n e.preventDefault();\r\n return;\r\n } else {\r\n ui.hospitalName = el.data('hospital-name');\r\n ui.hospitalId = el.data('hospital-au');\r\n loadIssueTypes();\r\n ui.$VWRModal.modal('show');\r\n\r\n ui.$VWRModal.find('#VWRPhoneNum').on('input', function () {\r\n let value = $(this).val();\r\n $(this).val(value.replace(/\\D/g, ''));\r\n });\r\n \r\n ui.$VWRModal.find('#VWRPhoneNum').on('keydown', function (e) {\r\n if (\r\n e.key !== 'Backspace' &&\r\n e.key !== 'Tab' &&\r\n e.key !== 'ArrowLeft' &&\r\n e.key !== 'ArrowRight' &&\r\n e.key !== 'Delete' &&\r\n !/^\\d$/.test(e.key)\r\n ) {\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n window.VCA.ucfahDatalayer.datalayerPushClick('hub-join vwr', ui.hospitalId, 'find a hospital');\r\n }\r\n }\r\n\r\n async function loadIssueTypes() {\r\n const url = `/urgentcare-api/virtualline/issuetypes?id=${ui.hospitalId}`;\r\n let api = new ApiService(url);\r\n\r\n const { data, success, error } = await api.get();\r\n\r\n if (!success || (error !== null && error !== '')) {\r\n } else {\r\n let results = data;\r\n\r\n if (results == null || results == undefined) {\r\n } else {\r\n //SUCCESS\r\n $('#VWRIssueType').html('<option selected=\"\" disabled=\"\" hidden=\"\"></option>');\r\n $(results).each((idx, item) => {\r\n let option = `<option value=\"${item.issueTypeId}\" data-mapping-id=\"${item.issueMappingId}\">${item.issueTypeName}</option>`;\r\n $('#VWRIssueType').append(option);\r\n });\r\n }\r\n }\r\n }\r\n\r\n function initPage() {\r\n ui.$fahMapAndList.addClass(\"col-lg-7 col-12 -fah-list\").removeClass(\"col-lg-6\");\r\n if ($('#FindAHospitalMap').length <= 0) {\r\n return;\r\n }\r\n setCurrentDate();\r\n setSearchDefaultRadius();\r\n submitSpinner.setupLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n\r\n ui.$geocoder = new google.maps.Geocoder();\r\n ui.$map = new google.maps.Map(document.getElementById('FindAHospitalMap'), {\r\n mapId: \"ddfa8e9020e47824\",\r\n center: { lat: parseFloat(ui.$defaultLatitude), lng: parseFloat(ui.$defaultLongitude) },\r\n zoom: 12 //1 (furthest) to 20 (closest)\r\n });\r\n\r\n var infoWindow = new google.maps.InfoWindow();\r\n if(_urlParams.hasHospitalType) {\r\n _urlParams.hospitalType.split(',').forEach((selectedType) => {\r\n let selectedPill = $(`.filter-pills__pill[data-filter-value=\"${selectedType}\" i]`);\r\n if (selectedPill) {\r\n selectPill(selectedPill, selectedType);\r\n }\r\n });\r\n }\r\n\r\n if (ui.$enableCityBasedSearch == \"true\") {\r\n selectSearch();\r\n selectFilterOnLoad();\r\n } else {\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(\r\n (position) => {\r\n var pos = {\r\n lat: position.coords.latitude,\r\n lng: position.coords.longitude,\r\n };\r\n ui.$currentLat = position.coords.latitude;\r\n ui.$currentLng = position.coords.longitude;\r\n if (_urlParams.hasRadius) {\r\n paramsUrlRadius();\r\n }\r\n zipCodeLocation(_urlParams.searchText, false);\r\n $(ui.$searchValue).val(_urlParams.searchText);\r\n $(ui.$searchValue).text(_urlParams.searchText);\r\n\r\n ui.$map.setCenter(pos);\r\n // If coming from the home page search field,\r\n // getHospitalsData() will return before getSearchResults() does\r\n // and will show a \"No results\" message before valid results are shown.\r\n },\r\n () => {\r\n if ((_urlParams.hasSearchText || _urlParams.hasHospitalType || _urlParams.hasRadius) && _urlParams.searchText) {\r\n queryOnInitValidation()\r\n } else {\r\n handleLocationError(true, infoWindow, ui.$map.getCenter());\r\n }\r\n }\r\n );\r\n } else {\r\n // Browser doesn't support Geolocation\r\n handleLocationError(false, infoWindow, ui.$map.getCenter());\r\n }\r\n }\r\n \r\n document.addEventListener('scroll', function () {\r\n if (isInViewport(ui.$resultsContainer)) {\r\n ui.$viewMapBtn.addClass('-active');\r\n } else {\r\n ui.$viewMapBtn.removeClass('-active');\r\n }\r\n }, {\r\n passive: true\r\n });\r\n }\r\n\r\n function zipCodeLocation(address, paramsBoolean) {\r\n let countryAddress = address;\r\n if (ui.isCanada === 'true') {\r\n countryAddress = address + ', Canada';\r\n } else {\r\n countryAddress = address + ', USA';\r\n }\r\n ui.$geocoder.geocode({\r\n 'address': countryAddress\r\n }, function (results, status) {\r\n if (status == 'OK') { \r\n if(address) {\r\n ui.$currentLat = results[0].geometry.location.lat();\r\n ui.$currentLng = results[0].geometry.location.lng();\r\n } \r\n } else {\r\n console.log('Geocode was not successful for the following reason: ' + status);\r\n }\r\n if(paramsBoolean) {\r\n getSearchResults('Error: ', !(_urlParams.hasHospitalType || _urlParams.hasHospitalTypeDisplayName));\r\n } else {\r\n getSearchResults('Error: ', false);\r\n }\r\n });\r\n }\r\n \r\n function isInViewport(el) {\r\n\r\n if (typeof jQuery === \"function\" && el instanceof jQuery) {\r\n el = el[0];\r\n }\r\n const rect = el.getBoundingClientRect();\r\n const mapRect = ui.$mapContainer[0].getBoundingClientRect();\r\n\r\n return (\r\n rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&\r\n rect.bottom >= 0 &&\r\n mapRect.top >= (window.innerHeight - 200)\r\n );\r\n }\r\n\r\n function initParams() {\r\n\r\n if (ui.$enableCityBasedSearch == \"true\") {\r\n initCityBasedParams();\r\n } else {\r\n let urlParams = new URL(window.location);\r\n _urlParams.hasHospitalType = urlParams.searchParams.has('ht');\r\n _urlParams.hospitalType = urlParams.searchParams.get('ht');\r\n if (_urlParams.hasHospitalType) {\r\n if (_urlParams.hospitalType == undefined || _urlParams.hospitalType == null || _urlParams.hospitalType == '') {\r\n _urlParams.hasHospitalType = false;\r\n }\r\n }\r\n\r\n _urlParams.hasRadius = urlParams.searchParams.has('radius');\r\n _urlParams.radius = urlParams.searchParams.get('radius');\r\n if (_urlParams.hasRadius) {\r\n if (_urlParams.radius == undefined || _urlParams.radius == null || _urlParams.radius == '') {\r\n _urlParams.hasRadius = false;\r\n }\r\n }\r\n\r\n _urlParams.hasSearchText = urlParams.searchParams.has('text');\r\n _urlParams.searchText = urlParams.searchParams.get('text');\r\n if (_urlParams.hasSearchText) {\r\n if (_urlParams.searchText == undefined || _urlParams.searchText == null || _urlParams.searchText == '') {\r\n _urlParams.hasSearchText = false;\r\n }\r\n }\r\n\r\n _urlParams.hasHospitalTypeDisplayName = urlParams.searchParams.has('type');\r\n _urlParams.hospitalTypeDisplayName = urlParams.searchParams.get('type');\r\n if (_urlParams.hasHospitalTypeDisplayName) {\r\n if (_urlParams.hospitalTypeDisplayName == undefined || _urlParams.hospitalTypeDisplayName == null || _urlParams.hospitalTypeDisplayName == '') {\r\n _urlParams.hasHospitalTypeDisplayName = false;\r\n }\r\n }\r\n\r\n _urlParams.hasHospitalIds = urlParams.searchParams.has('hosp');\r\n _urlParams.hospitalIds = urlParams.searchParams.get('hosp');\r\n\r\n if (_urlParams.hasHospitalIds) {\r\n if (!_urlParams.hospitalIds) {\r\n _urlParams.hasHospitalIds = false;\r\n } else {\r\n _urlParams.hospitalIds = _urlParams.hospitalIds;\r\n }\r\n }\r\n\r\n _urlParams.hasZipCode = urlParams.searchParams.has('t');\r\n _urlParams.zipCode = urlParams.searchParams.get('t');\r\n if (_urlParams.hasZipCode) {\r\n if (_urlParams.zipCode == undefined || _urlParams.zipCode == null || _urlParams.zipCode == '') {\r\n _urlParams.hasZipCode = false;\r\n }\r\n }\r\n }\r\n }\r\n function initCityBasedParams() {\r\n let urlParams = new URL(window.location);\r\n _urlParams.hasHospitalType = urlParams.searchParams.has('ht');\r\n _urlParams.hospitalType = urlParams.searchParams.get('ht');\r\n if (_urlParams.hasHospitalType) {\r\n if (_urlParams.hospitalType == undefined || _urlParams.hospitalType == null || _urlParams.hospitalType == '') {\r\n _urlParams.hasHospitalType = false;\r\n } else {\r\n _urlParams.hospitalType = _urlParams.hospitalType.replaceAll('-', ',');\r\n _urlParams.hasHospitalType = true;\r\n }\r\n }\r\n \r\n _urlParams.hospitalType = _urlParams.hospitalType;\r\n\r\n _urlParams.hasRadius = true;\r\n _urlParams.radius = ui.$defaultRadius;\r\n\r\n _urlParams.hasSearchText = true;\r\n _urlParams.searchText = ui.$defaultCityState;\r\n\r\n if (_urlParams.hasSearchText) {\r\n $(ui.$searchValue).val(_urlParams.searchText);\r\n $(ui.$searchValue).text(_urlParams.searchText); \r\n }\r\n }\r\n function openModal(e) {\r\n hidePopup();\r\n e.stopPropagation();\r\n var parentContainer = e.target.closest('.search-item');\r\n var modal = $(parentContainer).find('.hours-modal');\r\n $(modal).css('display', 'block');\r\n }\r\n\r\n function openSphModal(e) {\r\n hidePopup();\r\n e.stopPropagation();\r\n var parentContainer = e.target.closest('.search-item');\r\n var modal = $(parentContainer).find('.sph-hours-modal');\r\n $(modal).css('display', 'block');\r\n }\r\n\r\n function openEmergencyModal(e) {\r\n hidePopup();\r\n e.stopPropagation();\r\n var parentContainer = e.target.closest('.search-item');\r\n var modal = $(parentContainer).find('.emergency-hours-modal');\r\n $(modal).css('display', 'block');\r\n }\r\n\r\n /**\r\n * @method openAvailableAppointmentModal\r\n * @description to open the appointment popup\r\n */\r\n async function openAvailableAppointmentModal(e) {\r\n //let changed to const\r\n let selectedHospitalIndex = $(e.target).data('hospital-index');\r\n let availableTimeSlotIndex = $(e.target).data('available-slot');\r\n if (selectedHospitalIndex != undefined && availableTimeSlotIndex != undefined) {\r\n $('.appointment-visit-tag-modal').remove('.appointment-visit-tag-modal')\r\n var appointmentModalContainer = $(document.createElement('div')).addClass('wellness-visit-modal appointment-visit-tag-modal').attr({\r\n 'id': `appointment-visit-modal`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var appointmentModalContentWrapper = $(document.createElement('div')).addClass('wellness-visit-modal__content modal-content').attr('role', 'document');\r\n var appointmentTypeListWrapper = $(document.createElement('div')).addClass('wellness-modal-tab');\r\n var appointmentModalContentCard = $(document.createElement('div')).addClass('wellness-model-card');\r\n var appointmentTypesDateTime = $(document.createElement('div')).addClass('tab-time-slot-wrapper');\r\n var appointmentTypeList = hospitalListFAH[selectedHospitalIndex].AppointmentTypes;\r\n var appointmentTypeReasonButton;\r\n var apptHospitalTimezone;\r\n if (appointmentTypeList != undefined && appointmentTypeList !== null) {\r\n appointmentTypeReasonButton = hospitalListFAH[selectedHospitalIndex].AppointmentTypes[availableTimeSlotIndex].AppointmentReasons;\r\n apptHospitalTimezone = hospitalListFAH[selectedHospitalIndex].AppointmentTypes[availableTimeSlotIndex].HospitalTimezone;\r\n }\r\n let appointmentHeaderText;\r\n let timeSlotHeaderText;\r\n var appointmentTimeSlotText = $(document.createElement('div')).addClass('');\r\n var appointmentDateTimeContentCard = $(document.createElement('div')).addClass('tab-time-slots');\r\n let appoinmentTimeSlotType;\r\n //to selected reason to filter the time slot\r\n // change appointmentTypeReasonButton into appointmentTypeReasons\r\n if (appointmentTypeList != undefined && appointmentTypeList != null && appointmentTypeReasonButton != undefined && appointmentTypeReasonButton != null && appointmentTypeReasonButton.length > 0) {\r\n for (var j = 0; j < appointmentTypeReasonButton.length; j++) {\r\n if(appointmentTypeReasonButton[j].ReasonLabel != 'The Reason is Not Listed') {\r\n appointmentHeaderText = appointmentTypeReasonButton[j].ReasonHeaderText;\r\n timeSlotHeaderText = appointmentTypeReasonButton[j].TimeSlotHeaderText;\r\n appoinmentTimeSlotType = appointmentTypeReasonButton[j].TimeSlot;\r\n //to show the dynamic reason button\r\n appointmentTypeListWrapper.append(`<button type=\"button\" class=\"tab-btn appointment-button-fah\r\n appointment-active-btn-${j} ${j == 0 ? 'active-tab' : ''}\" \r\n data-appointment-length=\"${appointmentTypeList.length}\" \r\n data-appointment-text=\"${appointmentTypeList[availableTimeSlotIndex].AppointmentTypeId}\"\r\n data-appointment-date-length=\"${appointmentTypeReasonButton.length}\" \r\n data-appointment-slot-id=\"${j}\" data-reason-label=\"${appointmentTypeReasonButton[j].ReasonLabel}\">${appointmentTypeReasonButton[j].ReasonLabel}</button>`)\r\n // if condition != into > \r\n if (appoinmentTimeSlotType.length != 0) {\r\n appointmentTimeSlotText.append(`<div Class=\"time-slot-text date-time-${appointmentTypeList[availableTimeSlotIndex].AppointmentTypeId}-${j} ${j == 0 ? '' : 'hidden'}\"\"> ${timeSlotHeaderText}</div>`);\r\n //to display the appointment time slot\r\n for (var k = 0; k < appoinmentTimeSlotType.length; k++) {\r\n let displayDate = new Date(appointmentTypeReasonButton[j].TimeSlot[k].StartTime).toLocaleDateString('en-US')\r\n let displayTime = new Date(appointmentTypeReasonButton[j].TimeSlot[k].StartTime).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', timeZone: apptHospitalTimezone });\r\n let appointmentStartDate = displayDate+\", \"+displayTime;\r\n \r\n appointmentDateTimeContentCard.append(`\r\n <a class=\"cta-tag time-slot date-time-${appointmentTypeList[availableTimeSlotIndex].AppointmentTypeId}-${j} ${j == 0 ? '' : 'hidden'}\" data-appointment-start-date=\"${appointmentStartDate}\" \r\n href=\"${hospitalListFAH[selectedHospitalIndex].IsHybridHospital ? \r\n `${hospitalListFAH[selectedHospitalIndex].BookAnAppointmentUrl}/book-an-appointment?oabid=${appoinmentTimeSlotType[k].QueryId}` : \r\n `${hospitalListFAH[selectedHospitalIndex].BookAnAppointmentUrl}?oabid=${appoinmentTimeSlotType[k].QueryId}`}\">\r\n \r\n <span class=\"wellness-day\">${displayTime}</span>\r\n <span>${displayDate}</span>\r\n </a>`);\r\n }\r\n } else {\r\n appointmentTimeSlotText.append(`<div class=\"time-slot-text date-time-${appointmentTypeList[availableTimeSlotIndex].AppointmentTypeId}-${j} ${j == 0 ? '' : 'hidden'}\"\"></div>`);\r\n appointmentDateTimeContentCard.append(`<span class=\"slot-availability-message date-time-${appointmentTypeList[availableTimeSlotIndex].AppointmentTypeId}-${j} ${j == 0 ? '' : 'hidden'}\">${appointmentTypeReasonButton[j].TimeSlotErrorMsg}</span>`);\r\n } \r\n }\r\n }\r\n }\r\n\r\n var wellnessModalBtnAndTitle = $(`<button type=\"button\" class=\"wellness-close-btn\" aria-label=\"close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n <div class=\"wellness-modal-head\">\r\n <span class=\"wellness-modal-title\">${hospitalListFAH[selectedHospitalIndex].Name}</span>\r\n <span class=\"wellness-modal-sub-text\">${appointmentHeaderText}</span>\r\n </div>`);\r\n\r\n //append the available appointment modal\r\n appointmentTypesDateTime.append(appointmentTimeSlotText, appointmentDateTimeContentCard);\r\n appointmentModalContentCard.append(wellnessModalBtnAndTitle, appointmentTypeListWrapper, appointmentTypesDateTime);\r\n appointmentModalContentWrapper.append(appointmentModalContentCard);\r\n appointmentModalContainer.append(appointmentModalContentWrapper);\r\n ui.$fahSection.append(appointmentModalContainer);\r\n var modal = $('.appointment-visit-tag-modal');\r\n $(modal).css('display', 'block');\r\n ui.$wellnesscloseBtn = $('.wellness-close-btn');\r\n ui.$wellnesscloseBtn.on('click', closeSelectedReasonModal);\r\n ui.$wellnessBtnModal = $('.appointment-button-fah');\r\n ui.$wellnessBtnModal.on('click', clickSelectedReasonTypes);\r\n\r\n $(document).on('click', '.cta-tag.time-slot', function () {\r\n const $button = $(this).closest('.appointment-visit-tag-modal').find('.appointment-button-fah.active-tab');\r\n const appointmentReasonDisplayText = $button.data('reason-label');\r\n const appointmentStartDate = $(this).data('appointment-start-date');\r\n\r\n const appointmentType = $(e.target).closest('.wellness-modal-btn').find('.wellness-label').text();\r\n\r\n const data = {\r\n 'event': 'oab-click',\r\n 'oab-location': 'hospital-locator',\r\n 'oab-type': 'first-available',\r\n 'hospital-type': $(e.target).closest('.wellness-modal-btn').data('hospital-au'),\r\n 'hospital-name': $(e.target).closest('.wellness-modal-btn').data('hospital-name'),\r\n 'logged-in-status': false,\r\n 'oab-visit-type': appointmentType,\r\n 'appointmentReasonDisplayText': appointmentReasonDisplayText,\r\n 'appointmentStartDate': appointmentStartDate\r\n };\r\n window.dataLayer.push(data);\r\n });\r\n }\r\n\r\n }\r\n\r\n function hidePopup() {\r\n $('.hours-modal').hide();\r\n $('.sph-hours-modal').hide();\r\n $('.emergency-hours-modal').hide();\r\n }\r\n\r\n function queryOnInitValidation() {\r\n if (hasSearchParams()) {\r\n if (_urlParams.hasRadius) {\r\n paramsUrlRadius();\r\n }\r\n if (_urlParams.hasHospitalType || _urlParams.hasHospitalTypeDisplayName) {\r\n selectFilterOnLoad();\r\n }\r\n if (_urlParams.hasSearchText) {\r\n $(ui.$searchValue).val(_urlParams.searchText);\r\n $(ui.$searchValue).text(_urlParams.searchText);\r\n selectSearch();\r\n } else if (_urlParams.hasZipCode) {\r\n $(ui.$searchValue).val(_urlParams.zipCode);\r\n $(ui.$searchValue).text(_urlParams.zipCode);\r\n selectSearch();\r\n } else {\r\n getSearchResults('Error: ', false);\r\n }\r\n } else {\r\n setDefaultMarker();\r\n return;\r\n }\r\n }\r\n\r\n function paramsUrlRadius() {\r\n $('.js-vca-dropdown-button')[0].innerText = _urlParams.radius + \" miles\";\r\n $(ui.$searchRadius).val(_urlParams.radius)\r\n $('.js-vca-dropdown-list li').removeClass('selected');\r\n $('.js-vca-dropdown-list li').each(function () {\r\n if ($(this).data('value') == _urlParams.radius) {\r\n $(this).addClass('selected');\r\n }\r\n });\r\n }\r\n\r\n function removeMarkers() {\r\n for (let i = 0; i < ui.$markers.length; i++) {\r\n ui.$markers[i].setMap(null);\r\n }\r\n }\r\n\r\n function displayDate(date) {\r\n var d = new Date(date),\r\n month = '' + (d.getMonth() + 1),\r\n day = '' + d.getDate(),\r\n year = d.getFullYear();\r\n\r\n if (month.length < 2)\r\n month = '0' + month;\r\n if (day.length < 2)\r\n day = '0' + day;\r\n\r\n return [month, day, year].join('/');\r\n }\r\n\r\n function selectFilter(e) {\r\n if (e !== undefined) {\r\n e.preventDefault();\r\n }\r\n suspendApiCalls();\r\n\r\n var selectedFilter = $(e.target).data('filter-value');\r\n\r\n // Disable the default filter, if another filter has been selected\r\n if ($(e.target).attr('id') === undefined || $(e.target).attr('id') !== 'defaultFilter') {\r\n $('#defaultFilter').removeClass('active');\r\n\r\n // Make sure the default filter value is not in the ui.$selectedFiltersArr\r\n var indexOfDefaultFilter = ui.$selectedFiltersArr.indexOf($('#defaultFilter').data('filter-value'));\r\n if (indexOfDefaultFilter > -1) {\r\n ui.$selectedFiltersArr.splice(indexOfDefaultFilter, 1);\r\n }\r\n } else {\r\n // If the default filter has been selected, clear all other filter pills\r\n ui.$selectedFiltersArr.length = 0;\r\n $('.filter-pills__pill').each(function (index, item) {\r\n item.classList.remove('active');\r\n ui.$selectedFiltersArr.splice(indexOfDefaultFilter, 1);\r\n });\r\n }\r\n\r\n //Check if selected filter exists in ui.$selectedFiltersArr\r\n if (ui.$selectedFiltersArr.includes(selectedFilter)) {\r\n ui.$selectedFiltersArr = ui.$selectedFiltersArr.filter(e => e !== selectedFilter);\r\n $(e.target).removeClass('active');\r\n } else {\r\n ui.$selectedFiltersArr.push(selectedFilter);\r\n $(e.target).addClass('active');\r\n }\r\n\r\n // If no filters are selected, enable the default filter\r\n if ($(\".filter-pills__pill.active\").length === 0) {\r\n $('#defaultFilter').addClass('active');\r\n ui.$selectedFiltersArr.push($('#defaultFilter').data('filter-value'));\r\n }\r\n\r\n if (ui.$currentLat == undefined || ui.$currentLng == undefined) {\r\n return;\r\n }\r\n\r\n ui.$resultsContainer.empty();\r\n ui.$errorMsgContainer.addClass('hidden');\r\n ui.$loadingSpinner.removeClass('hidden');\r\n showLoader()\r\n ui.$bounds = getBounds(ui.$currentLat, ui.$currentLng, ui.$defaultRadius);\r\n\r\n getSearchResults('Error on filter pill: ', false);\r\n }\r\n\r\n function selectFilterOnLoad() {\r\n if (_urlParams.hasHospitalType) {\r\n _urlParams.hospitalType.split(',').forEach((selectedType) => {\r\n let selectedPill = $(`.filter-pills__pill[data-filter-value=\"${selectedType}\" i]`);\r\n if (selectedPill) {\r\n selectPill(selectedPill, selectedType);\r\n }\r\n });\r\n }\r\n\r\n if (_urlParams.hasHospitalTypeDisplayName) {\r\n _urlParams.hospitalTypeDisplayName.split(',').forEach((selectedType) => {\r\n var unescapedSelectedType = unescape(selectedType);\r\n let selectedPill = $(`.filter-pills__pill[data-filter-display-name=\"${unescapedSelectedType}\" i]`);\r\n if (selectedPill) {\r\n // In this case the \"selectedType\" value is the display name.\r\n // We need the data-filter-value value instead.\r\n selectPill(selectedPill, selectedPill.attr(\"data-filter-value\"));\r\n }\r\n });\r\n }\r\n\r\n if (ui.$currentLat == undefined || ui.$currentLng == undefined) {\r\n return;\r\n }\r\n\r\n ui.$resultsContainer.empty();\r\n ui.$errorMsgContainer.addClass('hidden');\r\n ui.$loadingSpinner.removeClass('hidden');\r\n showLoader()\r\n ui.$bounds = getBounds(ui.$currentLat, ui.$currentLng, ui.$defaultRadius);\r\n\r\n getSearchResults('Error on filter pill: ', false);\r\n }\r\n\r\n function selectPill(selectedPill, selectedType) {\r\n $('#defaultFilter').removeClass('active');\r\n\r\n // Make sure the default filter value is not in the ui.$selectedFiltersArr\r\n var indexOfDefaultFilter = ui.$selectedFiltersArr.indexOf($('#defaultFilter').data('filter-value'));\r\n if (indexOfDefaultFilter > -1) {\r\n ui.$selectedFiltersArr.splice(indexOfDefaultFilter, 1);\r\n }\r\n\r\n ui.$selectedFiltersArr.push(selectedType);\r\n selectedPill.addClass('active');\r\n }\r\n\r\n function selectSearch(e) {\r\n if (e !== undefined) {\r\n e.preventDefault();\r\n }\r\n let address = $(ui.$searchValue).val();\r\n\r\n // Check for when no current location and address have been provided\r\n if (address == '' && ui.$currentLat == undefined && ui.$currentLng == undefined) {\r\n return;\r\n }\r\n\r\n if (address !== ui.$prevSearchValue && address !== '') {\r\n ui.$currentLat = undefined;\r\n ui.$currentLng = undefined;\r\n }\r\n ui.$prevSearchValue = address;\r\n\r\n // Check for when address is not provided but current location and selected radius are\r\n if (address == '' && ui.$currentLat && ui.$currentLng) {\r\n suspendApiCalls();\r\n getSearchResults('Error on search button: ', !(_urlParams.hasHospitalType || _urlParams.hasHospitalTypeDisplayName));\r\n\r\n // Check for when address is provided but current location is not \r\n } else if (address !== '' && ui.$currentLat == undefined && ui.$currentLng == undefined) {\r\n let countryAddress = address;\r\n if (ui.isCanada === 'true') {\r\n countryAddress = address + ', Canada';\r\n } else {\r\n countryAddress = address + ', USA';\r\n }\r\n suspendApiCalls();\r\n zipCodeLocation(countryAddress, true);\r\n\r\n // Check for when both address current location have been provided\r\n } else if (address !== '' && ui.$currentLat && ui.$currentLng) {\r\n suspendApiCalls();\r\n getSearchResults('Error on search button: ', !(_urlParams.hasHospitalType || _urlParams.hasHospitalTypeDisplayName));\r\n }\r\n }\r\n\r\n function suspendApiCalls() {\r\n for (let i = 0; i < avalilablSlotPromise.length; i++) {\r\n avalilablSlotPromise[i].abort();\r\n }\r\n avalilablSlotPromise = [];\r\n }\r\n\r\n function setCurrentDate() {\r\n var dotw = '';\r\n switch (new Date().getDay()) {\r\n case 0:\r\n dotw = \"Sun\";\r\n break;\r\n case 1:\r\n dotw = \"Mon\";\r\n break;\r\n case 2:\r\n dotw = \"Tues\";\r\n break;\r\n case 3:\r\n dotw = \"Wed\";\r\n break;\r\n case 4:\r\n dotw = \"Thurs\";\r\n break;\r\n case 5:\r\n dotw = \"Fri\";\r\n break;\r\n case 6:\r\n dotw = \"Sat\";\r\n }\r\n\r\n return dotw;\r\n }\r\n\r\n function setDefaultMarker() {\r\n var currentLatLng = { lat: parseFloat(ui.$defaultLatitude), lng: parseFloat(ui.$defaultLongitude) };\r\n var marker = new google.maps.marker.AdvancedMarkerElement({\r\n position: currentLatLng,\r\n map: ui.$map,\r\n //animation: google.maps.Animation.DROP,\r\n zoom: 8,\r\n center: currentLatLng\r\n });\r\n }\r\n\r\n function setSearchDefaultRadius() {\r\n ui.$searchRadius.val(ui.$defaultRadius);\r\n if (ui.isCanada === 'true') {\r\n $('.find-search__dropdown-btn').text(`${ui.$defaultRadius} KM`);\r\n } else {\r\n $('.find-search__dropdown-btn').text(`${ui.$defaultRadius} miles`);\r\n }\r\n var radiusOnLoad = $('.find-search__dropdown-list').find(`[data-value=\"${ui.$defaultRadius}\"]`)[0];\r\n $(radiusOnLoad).addClass('focused selected');\r\n }\r\n\r\n function showErrorMessage(errorMessage) {\r\n ui.$errorMessage.text(errorMessage);\r\n ui.$errorMsgContainer.removeClass('hidden');\r\n }\r\n\r\n function sortResults(data) {\r\n var results = [...data];\r\n $(results).each(function () {\r\n var hospLat = this.Latitude;\r\n var hospLng = this.Longitude;\r\n var setA = {\r\n latitude: hospLat,\r\n longitude: hospLng\r\n };\r\n var setB = {\r\n latitude: ui.$currentLat,\r\n longitude: ui.$currentLng\r\n }\r\n var miles = (haversine(setA, setB) * 0.000621371).toFixed(1);\r\n this.miles = Number(miles);\r\n });\r\n var sortedArray = results.sort(function (a, b) {\r\n return a.miles - b.miles\r\n });\r\n return sortedArray;\r\n }\r\n\r\n function validateForm(evt) {\r\n evt.preventDefault();\r\n ui.$APIErrorMessage.hide();\r\n submitSpinner.startLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n\r\n if (!checkForm()) {\r\n submitSpinner.stopLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n return;\r\n } else {\r\n initPostForm();\r\n }\r\n }\r\n\r\n function checkForm() {\r\n let phoneReg = /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/;\r\n let valid = true;\r\n\r\n $('.uc-vwr-form input').each(function (index) {\r\n let el = $(this);\r\n var elmId = el.attr('id');\r\n var referralSourceValue = ui.$VWRReferralSource.val();\r\n if (elmId == 'VWRReferralPrimaryVet') {\r\n if (referralSourceValue == 15 && el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else if (elmId == 'VWRReferralEmergencyHospital') {\r\n if (referralSourceValue == 16 && el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else if (elmId == 'VWRPhoneNum') {\r\n let phone = ui.$VMRFormPhoneNum.val();\r\n if (!phoneReg.test(phone)) {\r\n ui.$VMRFormPhoneNum.addClass('error');\r\n ui.$VMRFormPhoneNum.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n ui.$VMRFormPhoneNum.removeClass('error');\r\n ui.$VMRFormPhoneNum.closest('.form-label-group').removeClass('error');\r\n }\r\n } else {\r\n if (el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n });\r\n $('.uc-vwr-form select').each(function (index) {\r\n let el = $(this);\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n });\r\n\r\n $('.uc-vwr-form textarea').each(function (index) {\r\n let el = $(this);\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n });\r\n return valid;\r\n }\r\n\r\n async function initPostForm() {\r\n const url = '/urgentcare-api/virtualline/waitlistqueuerequest';\r\n let api = new ApiService(url);\r\n\r\n let $FirstName = ui.$VMRForm.find('#VWRFirstName').val();\r\n let $LastName = ui.$VMRForm.find('#VWRLastName').val();\r\n let $PetName = ui.$VMRForm.find('#VWRPetName').val();\r\n let $PetSpecies = ui.$VMRForm.find('#VWRPetSpecies').val();\r\n let $IssueType = ui.$VMRForm.find('#VWRIssueType').val();\r\n let $PhoneNum = ui.$VMRForm.find('#VWRPhoneNum').val();\r\n let $Description = ui.$VMRForm.find('#VWRBriefDesc').val();\r\n let $ReferralSource = ui.$VMRForm.find('#VWRReferralSource').val();\r\n let $ReferralPrimaryVet = ui.$VMRForm.find('#VWRReferralPrimaryVet').val();\r\n let $ReferralEmergencyHospital = ui.$VMRForm.find('#VWRReferralEmergencyHospital').val();\r\n\r\n let payload = {\r\n \"firstName\": $FirstName,\r\n \"lastName\": $LastName,\r\n \"petName\": $PetName,\r\n \"speciesType\": $PetSpecies,\r\n \"issueTypeId\": $IssueType,\r\n \"phoneNumber\": $PhoneNum,\r\n \"briefDesc\": $Description,\r\n 'hospitalName': ui.hospitalName,\r\n 'hospitalId': ui.hospitalId,\r\n \"referralSource\": $ReferralSource,\r\n }\r\n\r\n if ($ReferralSource == \"15\") {\r\n payload['referralHospital'] = $ReferralPrimaryVet;\r\n } else if ($ReferralSource == \"16\") {\r\n payload['referralHospital'] = $ReferralEmergencyHospital;\r\n }\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n\r\n let axiosConfig = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\r\n }\r\n }\r\n\r\n const { data, success, error } = await api.post(searchParams(payload), axiosConfig);\r\n\r\n if (success) {\r\n if (data.success) {\r\n let hospitalName = ui.$VWRInfoWrapper.data('hospital-name');\r\n\r\n //google analytics\r\n window.dataLayer.push({\r\n event: 'clickevent',\r\n category: 'vca urgent care',\r\n action: 'join vwr success',\r\n label: hospitalName\r\n });\r\n\r\n ui.$vwrModalForm.hide();\r\n ui.$vwrModalComfirmation.show();\r\n } else {\r\n if (data.errorMessage !== null || data.errorMessage !== '') {\r\n ui.$APIErrorMessage.find('.vwr-form-errormsg').text(data.errorMessage);\r\n ui.$APIErrorMessage.show();\r\n submitSpinner.stopLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n }\r\n }\r\n } else {\r\n ui.$APIErrorMessage.find('.vwr-form-errormsg').text(error);\r\n ui.$APIErrorMessage.show();\r\n submitSpinner.stopLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n }\r\n }\r\n\r\n function onSelectReferralSource() {\r\n if ($(this).val() == 15) {\r\n ui.$VWRReferralEmergencyHospital.hide();\r\n $('#VWRReferralPrimaryVet').val('');\r\n ui.$VWRReferralPrimaryVet.show();\r\n ui.$VWRReferralEmergencyHospital.removeClass('error');\r\n ui.$VWRReferralEmergencyHospital.closest('.form-label-group').removeClass('error');\r\n }\r\n else if ($(this).val() == 16) {\r\n ui.$VWRReferralPrimaryVet.hide();\r\n $('#VWRReferralEmergencyHospital').val('');\r\n ui.$VWRReferralEmergencyHospital.show();\r\n ui.$VWRReferralPrimaryVet.removeClass('error');\r\n ui.$VWRReferralPrimaryVet.closest('.form-label-group').removeClass('error');\r\n }\r\n else {\r\n ui.$VWRReferralPrimaryVet.hide();\r\n ui.$VWRReferralEmergencyHospital.hide();\r\n ui.$VWRReferralEmergencyHospital.removeClass('error');\r\n ui.$VWRReferralEmergencyHospital.closest('.form-label-group').removeClass('error');\r\n ui.$VWRReferralPrimaryVet.removeClass('error');\r\n ui.$VWRReferralPrimaryVet.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n function init() {\r\n cacheUI();\r\n bindEvents();\r\n initParams();\r\n initDefaultSelectedFilter();\r\n initPage();\r\n window.VCA.LocationAccordion.bindScreenSize();\r\n window.VCA.LocationAccordion.windowResize();\r\n window.VCA.LocationAccordion.bindMobieToggleClick();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n\r\n if ($('#FindAHospitalMap').length <= 0) {\r\n return;\r\n }\r\n //check for hiding left arrow in filter pills carousel\r\n let primaryFilter = $('.filter-pills').find('.slick-slide')[0];\r\n let leftArrowBtn = $('.filter-pills').find('.slick-prev.slick-arrow');\r\n let rightArrowBtn = $('.filter-pills').find('.slick-next.slick-arrow');\r\n let lengthFInd = $(`[data-slick-index]`).length\r\n let primaryIsSelected = $(primaryFilter).hasClass('slick-active');\r\n if (primaryIsSelected) {\r\n $(leftArrowBtn).hide();\r\n }\r\n let widthCount = 0;\r\n for (let i = 1; i < $(`[data-slick-index]`).length; i++) {\r\n widthCount = widthCount + $(`[data-slick-index=${i}]`).width();\r\n }\r\n\r\n if (widthCount > 100) {\r\n $(rightArrowBtn).show();\r\n } else {\r\n $(rightArrowBtn).hide();\r\n }\r\n $('.slick-prev').on('click', function (event) {\r\n event.preventDefault();\r\n $(rightArrowBtn).show();\r\n primaryFilter = $('.filter-pills').find('.slick-slide')[0];\r\n primaryIsSelected = $(primaryFilter).hasClass('slick-active');\r\n if (primaryIsSelected) {\r\n $(leftArrowBtn).hide();\r\n }\r\n });\r\n\r\n $('.slick-next').on('click', function (event) {\r\n event.preventDefault();\r\n $(leftArrowBtn).show();\r\n primaryFilter = $('.filter-pills').find('.slick-slide')[lengthFInd - 7];\r\n primaryIsSelected = $(primaryFilter).hasClass('slick-active');\r\n if (primaryIsSelected) {\r\n $(rightArrowBtn).hide();\r\n }\r\n });\r\n\r\n const mapEl = document.getElementById('FindAHospitalMap');\r\n function checkForGoogleMaps() {\r\n setTimeout(() => {\r\n if ('google' in window && typeof google === 'object' && typeof google.maps === 'object' && mapEl) {\r\n VCA.FindAHospital.init(mapEl);\r\n }\r\n else {\r\n checkForGoogleMaps();\r\n }\r\n }, 1000);\r\n }\r\n\r\n checkForGoogleMaps();\r\n});","import keyCodes from '@utils/key-codes';\r\n\r\n$(() => {\r\n const $dropdownInput = $('#findHospitalDropdownInput');\r\n const $input = $('#findHospitalText');\r\n const $search = $('#btn-find-hospital');\r\n\r\n const redirectUrl = $search.data('redirect');\r\n const query = $search.data('query') || 'text';\r\n const separator = $search.data('query-separator') || '?';\r\n\r\n const defaultParam = $search.data('query-default') ? `&${$search.data('query-default')}` : '';\r\n\r\n $input.on('keyup', function (event) {\r\n const key = event.which ? event.which : event.keyCode;\r\n if (key === keyCodes.ENTER) {\r\n event.preventDefault();\r\n $search.trigger('click');\r\n }\r\n });\r\n\r\n $search.on('click', function (event) {\r\n event.preventDefault();\r\n\r\n const searchText = $input.val();\r\n const categoryParam = $dropdownInput.val() && $dropdownInput.val() !== 'allcategories' ? `&f:Species=[${$dropdownInput.val()}]` : '';\r\n const queryParam = `${query}=${searchText}`;\r\n\r\n location.href = redirectUrl + separator + queryParam + defaultParam + categoryParam;\r\n });\r\n});\r\n","import axios from 'axios';\r\nimport ApiService from '@api/api-service';\r\nimport haversine from 'haversine-distance';\r\nimport getHospitals from '@api/routes/findAHospital/findAHospital';\r\nimport * as submitSpinner from '../custom-forms/form-loading';\r\nimport { createCustomIconElement } from '../map-frame';\r\n// import json from '../../../_patterns/01-components/Find-A-Hopsital/fah-mock-response.json';\r\n\r\nvar VCA = VCA || {};\r\n// var mockData = json;\r\n\r\nVCA.FindAHospitalUC = (function ($) {\r\n var ui = {};\r\n var _urlParams = {};\r\n\r\n function bindEvents() {\r\n ui.$viewMapBtn.on('click', focusOnMap);\r\n ui.$VMRForm.on('submit', validateForm);\r\n ui.$VWRReferralPrimaryVet.hide();\r\n ui.$VWRReferralEmergencyHospital.hide();\r\n $(ui.$VWRReferralSource).on('change', onSelectReferralSource)\r\n\r\n ui.$ucContainer.on('click', function (event) {\r\n if (!$('.hours-modal').is(event.target) && $('.hours-modal').has(event.target).length === 0) {\r\n $('.hours-modal').hide();\r\n }\r\n });\r\n }\r\n\r\n function cacheUI() {\r\n ui.$filterPill = $('.filter-pills__pill');\r\n ui.$searchBtn = $('.find-search-btn');\r\n ui.$mapContainer = $(\"#FindAHospitalMap-UC\");\r\n ui.$ucContainer = $('.uc-section');\r\n ui.$loadingSpinner = $('.search-results-container__loading');\r\n ui.$resultsContainer = $('.search-results-container__list');\r\n ui.$errorMsgContainer = $('.search-results-container__error-msg-container');\r\n ui.$errorMessage = $('.search-results-container__error-msg');\r\n ui.$viewMapBtn = $('[data-control=\"viewmap\"]');\r\n ui.$searchValue = $('#SearchInput');\r\n ui.$searchRadius = $('#SearchRadius');\r\n ui.$zipcode = $('#zipcode').val();\r\n ui.$vwButtonText = $('#vwButtonText').val();\r\n ui.$tooltipIcon = $('#tooltipIcon').val();\r\n ui.$tooltipText = $('#tooltipText').val();\r\n ui.$searchRadiusUL = $('#SearchRadiusUL');\r\n ui.$defaultRadius = $('#defaultRadius').val();\r\n ui.$defaultLatitude = $(\"#defaultLatitude\").val();\r\n ui.$defaultLongitude = $(\"#defaultLongitude\").val();\r\n ui.$defaultFilter = $('.filter-pills__pill.active').attr('data-filter-value');\r\n ui.$countryId = $('#countryId').val();\r\n ui.$dataId = $('#dataId').val();\r\n ui.isCanada = $('[data-iscanada]').attr('data-iscanada');\r\n ui.$VWRInfoWrapper = $('.VWRInfoWrapper');\r\n ui.$VWRModal = $('#VWRFormModal');\r\n ui.$vwrModalForm = $('[data-region=\"vwrModalForm\"]');\r\n ui.$vwrModalComfirmation = $('[data-region=\"vwrModalComfirmation\"]');\r\n ui.$VWRFormSubmitBtn = $('#VWRFormSubmit');\r\n ui.$VMRForm = $('.uc-vwr-form');\r\n ui.$APIErrorMessage = $('.uc-vwr-modal__error-msg');\r\n ui.$VMRFormPhoneNum = $('#VWRPhoneNum');\r\n ui.$InputEl = $('.uc-vwr-modal input');\r\n ui.$SelectEl = $('.uc-vwr-modal select');\r\n ui.$TextAreaEl = $('.uc-vwr-modal textarea');\r\n ui.$VWRReferralPrimaryVet = $('label[for=VWRReferralPrimaryVet], Input#VWRReferralPrimaryVet');\r\n ui.$VWRReferralEmergencyHospital = $('label[for=VWRReferralEmergencyHospital], Input#VWRReferralEmergencyHospital');\r\n ui.$VWRReferralSource = $(\"#VWRReferralSource\");\r\n ui.$map;\r\n ui.$geocoder;\r\n ui.$currentLat;\r\n ui.$currentLng;\r\n ui.$bounds;\r\n ui.$prevSearchValue;\r\n ui.$markers = [];\r\n ui.$selectedFiltersArr = [];\r\n\r\n ui.hospitalName;\r\n ui.hospitalId;\r\n }\r\n\r\n function onSelectReferralSource() {\r\n if ($(this).val() == 15) {\r\n ui.$VWRReferralEmergencyHospital.hide();\r\n $('#VWRReferralPrimaryVet').val('');\r\n ui.$VWRReferralPrimaryVet.show();\r\n ui.$VWRReferralEmergencyHospital.removeClass('error');\r\n ui.$VWRReferralEmergencyHospital.closest('.form-label-group').removeClass('error');\r\n }\r\n else if ($(this).val() == 16) {\r\n ui.$VWRReferralPrimaryVet.hide();\r\n $('#VWRReferralEmergencyHospital').val('');\r\n ui.$VWRReferralEmergencyHospital.show();\r\n ui.$VWRReferralPrimaryVet.removeClass('error');\r\n ui.$VWRReferralPrimaryVet.closest('.form-label-group').removeClass('error');\r\n }\r\n else {\r\n ui.$VWRReferralPrimaryVet.hide();\r\n ui.$VWRReferralEmergencyHospital.hide();\r\n ui.$VWRReferralEmergencyHospital.removeClass('error');\r\n ui.$VWRReferralEmergencyHospital.closest('.form-label-group').removeClass('error');\r\n ui.$VWRReferralPrimaryVet.removeClass('error');\r\n ui.$VWRReferralPrimaryVet.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n\r\n function initPage() {\r\n if ($('#FindAHospitalMap-UC').length <= 0) {\r\n return;\r\n }\r\n\r\n setCurrentDate();\r\n setSearchDefaultRadius();\r\n submitSpinner.setupLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n\r\n ui.$geocoder = new google.maps.Geocoder();\r\n ui.$map = new google.maps.Map(document.getElementById('FindAHospitalMap-UC'), {\r\n mapId: \"ddfa8e9020e47824\",\r\n center: new google.maps.LatLng(ui.$defaultLatitude, ui.$defaultLongitude),\r\n zoom: 12, //1 (furthest) to 20 (closest)\r\n minZoom: 8\r\n });\r\n\r\n ui.$currentLat = ui.$defaultLatitude;\r\n ui.$currentLng = ui.$defaultLongitude;\r\n\r\n var infoWindow = new google.maps.InfoWindow();\r\n //if (navigator.geolocation) {\r\n // navigator.geolocation.getCurrentPosition(\r\n // (position) => {\r\n // var pos = {\r\n // lat: position.coords.latitude,\r\n // lng: position.coords.longitude,\r\n // };\r\n // ui.$currentLat = position.coords.latitude;\r\n // ui.$currentLng = position.coords.longitude;\r\n // ui.$map.setCenter(pos);\r\n // // If coming from the home page search field,\r\n // // getHospitalsData() will return before getSearchResults() does\r\n // // and will show a \"No results\" message before valid results are shown.\r\n // if (window.location.search.length === 0) {\r\n // getSearchResults('Error: ', false);\r\n // } else {\r\n // queryOnInitValidation();\r\n // }\r\n // },\r\n // () => {\r\n // handleLocationError(true, infoWindow, ui.$map.getCenter());\r\n // }\r\n // );\r\n //} else {\r\n // // Browser doesn't support Geolocation\r\n // handleLocationError(false, infoWindow, ui.$map.getCenter());\r\n //}\r\n\r\n if (ui.$zipcode) {\r\n ui.$geocoder.geocode({\r\n 'address': ui.$zipcode\r\n }, function (results, status) {\r\n if (status == 'OK') {\r\n ui.$currentLat = results[0].geometry.location.lat();\r\n ui.$currentLng = results[0].geometry.location.lng();\r\n getSearchResults('Error: ', false);\r\n } else {\r\n console.log('Geocode was not successful for the following reason: ' + status);\r\n }\r\n });\r\n } else {\r\n getSearchResults('Error: ', false);\r\n }\r\n\r\n document.addEventListener('scroll', function () {\r\n if (isInViewport(ui.$resultsContainer)) {\r\n ui.$viewMapBtn.addClass('-active');\r\n } else {\r\n ui.$viewMapBtn.removeClass('-active');\r\n }\r\n }, {\r\n passive: true\r\n });\r\n }\r\n\r\n function getFAHSearchParams() {\r\n\r\n let radiusValue = ui.$defaultRadius;\r\n ui.$bounds = getBounds(ui.$currentLat, ui.$currentLng, radiusValue);\r\n let minMaxValues = calcMinMaxLatLng(ui.$bounds);\r\n let fahSearchParams = {\r\n CurrentLat: ui.$currentLat,\r\n CurrentLng: ui.$currentLng,\r\n MinLatitude: minMaxValues.minLat,\r\n MaxLatitude: minMaxValues.maxLat,\r\n MinLongitude: minMaxValues.minLng,\r\n MaxLongitude: minMaxValues.maxLng,\r\n Radius: radiusValue,\r\n SearchText: null,\r\n HospitalType: [\r\n \"U\"\r\n ],\r\n HospitalTypeDisplayName: null,\r\n Country: ui.$countryId,\r\n DataItemId: ui.$dataId\r\n }\r\n\r\n return fahSearchParams;\r\n }\r\n\r\n function focusOnMap() {\r\n $('html,body').animate({\r\n scrollTop: ui.$mapContainer.offset().top\r\n },\r\n 'slow');\r\n }\r\n\r\n async function getSearchResults(errorMessage, blResetFilters) {\r\n ui.$resultsContainer.empty();\r\n ui.$resultsContainer.addClass('hidden');\r\n ui.$errorMsgContainer.addClass('hidden');\r\n ui.$loadingSpinner.removeClass('hidden');\r\n let fahSearchParams = getFAHSearchParams();\r\n\r\n ui.$bounds = getBounds(fahSearchParams.CurrentLat, fahSearchParams.CurrentLng, fahSearchParams.Radius);\r\n\r\n await getHospitals.post(fahSearchParams)\r\n .then(response => {\r\n // console.log('2',response);\r\n // console.log('3',response.data.OK);\r\n if (response.data.OK) {\r\n let data = response.data.result;\r\n let sortedData = sortResults(data);\r\n removeMarkers();\r\n createCard(sortedData);\r\n ui.$loadingSpinner.addClass('hidden');\r\n ui.$resultsContainer.removeClass('hidden');\r\n // console.log('ui.$VWRInfoWrapper', ui.$VWRInfoWrapper);\r\n $('.VWRInfoWrapper').on('click', showFormModal);\r\n if (response.data.result.length === 0) {\r\n showErrorMessage(\"No Results.\");\r\n }\r\n } else {\r\n removeMarkers();\r\n ui.$loadingSpinner.addClass('hidden');\r\n showErrorMessage(response.data.error);\r\n }\r\n })\r\n .catch(error => {\r\n var infoWindow = new google.maps.InfoWindow()\r\n ui.$loadingSpinner.addClass('hidden');\r\n ui.$errorMsgContainer.removeClass('hidden');\r\n handleLocationError(true, infoWindow, ui.$map.getCenter());\r\n console.log(errorMessage, error.response);\r\n });\r\n }\r\n\r\n function createCard(hospitals) {\r\n var bounds = new google.maps.LatLngBounds();\r\n //let allComingSoonHospitals = hospitals.every((hospital) => hospital.IsComingSoonHospital == true);\r\n //let activeHospital = hospitals.filter((hospital) => hospital.IsComingSoonHospital != true);\r\n\r\n for (var a = 0; a < hospitals.length; a++) {\r\n var hoursObj = hospitals[a].HospitalHours[0].HospitalHoursList;\r\n var parentContainer = $(document.createElement('li')).addClass('search-item');\r\n var imgTitleContainer = hospitals[a].IsComingSoonHospital === true ? $(document.createElement('div')).addClass('search-item__mob-hospital-image').css('background-image', `url(${hospitals[a].HospitalImageUrl})`) :\r\n $(document.createElement('a')).addClass('search-item__mob-hospital-image').attr('href', hospitals[a].Url).css('background-image', `url(${hospitals[a].HospitalImageUrl})`);\r\n var leftContainer = hospitals[a].IsComingSoonHospital === true ? $(document.createElement('div')).addClass('search-item__left search-item__uc-hospital-image -thumb js-hospital-dl-btn').css('background-image', `url(${hospitals[a].HospitalImageUrl})`) :\r\n $(document.createElement('a')).addClass('search-item__left search-item__uc-hospital-image -thumb js-hospital-dl-btn').attr('href', hospitals[a].Url).css('background-image', `url(${hospitals[a].HospitalImageUrl})`);\r\n var imageTagContainer = $(document.createElement('div')).addClass('search-item__image-container');\r\n var rightContainer = $(document.createElement('div')).addClass('search-item__right');\r\n var descContainer = $(document.createElement('div')).addClass('search-item__desc-wrapper');\r\n var ctaContainer = $(document.createElement('div')).addClass('search-item__cta-container');\r\n var modalContainer = $(document.createElement('div')).addClass('hours-modal').attr({\r\n 'id': `HoursModal-${a}`,\r\n 'tab-index': '-1',\r\n 'role': 'dialog'\r\n });\r\n var modalContentWrapper = $(document.createElement('div')).addClass('hours-modal__content modal-content').attr('role', 'document');\r\n var modalHoursWrapper = $(document.createElement('ul')).addClass('hours-modal__hours-list');\r\n var typeTagsWrapper = $(document.createElement('div')).addClass('search-item__type-tags');\r\n\r\n // Calculate distance\r\n var locationA = {\r\n latitude: hospitals[a].Latitude,\r\n longitude: hospitals[a].Longitude\r\n };\r\n var locationB = {\r\n latitude: ui.$currentLat,\r\n longitude: ui.$currentLng\r\n } //Need to modify this line of code\r\n var calcMiles = (haversine(locationA, locationB) * 0.000621371).toFixed(1);\r\n var distanceApart = `${calcMiles}`;\r\n\r\n // Create Google Map Markers\r\n // Customized google map marker icon size\r\n var customIcon = {\r\n url: '../../../images-2/uc-marker-icon.svg', // url\r\n scaledSize: new google.maps.Size(40, 40), // size\r\n };\r\n\r\n var marker = new google.maps.marker.AdvancedMarkerElement({\r\n position: { lat: parseFloat(hospitals[a].Latitude), lng: parseFloat(hospitals[a].Longitude) },\r\n map: ui.$map,\r\n content: hospitals[a].HospitalTypes[0].DisplayName === 'Urgent Care'\r\n ? createCustomIconElement(customIcon.url) : null,\r\n //animation: google.maps.Animation.DROP\r\n });\r\n ui.$markers.push(marker);\r\n\r\n if (hospitals[a].IsComingSoonHospital === true && (hospitals[a].AddressLine1 == '' || hospitals[a].AddressLine1 == null)) {\r\n if (ui.$markers[a] != null) {\r\n ui.$markers[a].setMap(null);\r\n }\r\n }\r\n\r\n var label = new google.maps.InfoWindow({\r\n content: hospitals[a].Name,\r\n maxWidth: 200\r\n });\r\n\r\n google.maps.event.addListener(marker, 'click', (function (marker, infowindow) {\r\n return function () {\r\n infowindow.open(ui.$map, marker);\r\n };\r\n })(marker, label));\r\n\r\n // Extend the bounds with the marker's position\r\n bounds.extend(marker.position);\r\n\r\n let waitTime = getTickToHours(hospitals[a].WaitTimes.waitingTimeInMinutes);\r\n\r\n // Create right section content\r\n var hospitalName = hospitals[a].IsComingSoonHospital === true ? $(`<div class=\"uc-hospital-image\"><span class=\"search-item__coming-soon-header js-hospital-dl-btn\"\">${hospitals[a].Name}</span></div>`) :\r\n $(`<div class=\"uc-hospital-image\"><a class=\"search-item__header js-hospital-dl-btn\" href=\"${hospitals[a].Url}\">${hospitals[a].Name}</a></div>`);\r\n var waitingTimes = '';\r\n if (hospitals[a].WaitTimes.isOpen) {\r\n waitingTimes = $(`<div class=\"d-flex flex-row search-item__waitingTime__wrapper ${hospitals[a].IsComingSoonHospital === true ? 'hidden' : ''}\">\r\n <div class=\"search-item__waitingTime -open\">\r\n Estimated Wait: ${waitTime}\r\n </div>\r\n <button class=\"uc-hero-panel__tooltip\">\r\n <img class=\"tooltip-icon\" src=\"${ui.$tooltipIcon}\" alt=\"Tooltip Icon\">\r\n <div class=\"uc-msg-tooltip -right\">\r\n <p>${ui.$tooltipText}</p>\r\n </div>\r\n </button>\r\n </div>`);\r\n } else {\r\n waitingTimes = $(`<div class=\"search-item__waitingTime__wrapper ${hospitals[a].IsComingSoonHospital === true ? 'hidden' : ''}\">\r\n <div class=\"search-item__waitingTime -closed\">\r\n ${hospitals[a].WaitTimes.message}\r\n </div></div>`);\r\n }\r\n\r\n var descContainerEl = $(`<div class=\"search-item__hospital-location-info\">\r\n <div>\r\n <div class=\"search-item__icon\"><img src=\"../../../images-2/location-color-icon.svg\" alt=\"address icon\"></div>\r\n </div>\r\n <div>\r\n <div class=\"search-item__address d-flex flex-column\"><span>${hospitals[a].AddressLine1} ${hospitals[a].AddressLine2}</span><span>${hospitals[a].City}, ${hospitals[a].State} ${hospitals[a].Zipcode}</span></div>\r\n <div class=\"search-item__distance-unit\">${distanceApart} ${hospitals[a].DistanceUnit}</div>\r\n </div>\r\n <div class=\"search-item__cta-tags search-item__uc-cta-tags\"> \r\n <a class=\"redirect-to-map-view redirect-to-map ${hospitals[a].DirectionUrl == null || hospitals[a].DirectionUrl == '' || (hospitals[a].IsComingSoonHospital === true && (hospitals[a].AddressLine1 === '' || hospitals[a].AddressLine1 === null)) ? 'hidden' : ''}\" data-get-direction=\"Direction\" data-get-id=\"${hospitals[a].HospitalId}\" href=\"${hospitals[a].DirectionUrl}\" target=\"_blank\">\r\n Directions </a>\r\n </div>\r\n </div>\r\n <div class=\"search-item__hospital-hours-info ${hospitals[a].IsComingSoonHospital === true ? 'hidden' : ''}\">\r\n <img src=\"../../../images-2/hours-fah-icon.svg\" alt=\"Hospital hours icon\">\r\n <div class=\"search-item__distance\">\r\n <button class=\"cta-tag hours-modal-btn hospital-hours-btn\">${hospitals[a].HoursLabel} </button> <span class=\"search-item__status ${hospitals[a].IsOpen == true ? `open` : `closed`}\">${hospitals[a].IsOpen == true ? `${hospitals[a].OpenLabel}` : `${hospitals[a].CloseLabel}`}</span>\r\n </div>\r\n </div>`);\r\n\r\n var ctaContainerEl = $(`<div class=\"search-item__cta-tags search-item__cta-btn-right\">\r\n <div class=\"cta-row\">\r\n <button\r\n data-hospital-name=\"${hospitals[a].Name}\"\r\n data-toggle=\"modal\"\r\n data-target=\"VWRFormModal\"\r\n data-hospital-au=\"${hospitals[a].HospitalId}\"\r\n class=\"VWRInfoWrapper btn btn-sky book-appointment uc-book-appointment ${(hospitals[a].WaitTimes.isOpen == true && hospitals[a].WaitTimes.waitingTimeInMinutes !== null) && hospitals[a].IsComingSoonHospital === false ? '' : 'hidden'}\" href=\"#\">${ui.$vwButtonText}</button> \r\n </div></div>`);\r\n\r\n typeTagsWrapper.append(`<span class='search-item__tag ${hospitals[a].IsComingSoonHospital == true\r\n ? 'coming-soon-tag' : 'hidden'}'>Coming Soon</span>`);\r\n\r\n hospitalName.append(imgTitleContainer);\r\n rightContainer.append(hospitalName);\r\n rightContainer.append(waitingTimes);\r\n descContainer.append(descContainerEl);\r\n ctaContainer.append(ctaContainerEl);\r\n rightContainer.append(descContainer, ctaContainer);\r\n\r\n // Create Modal\r\n var modalBtnAndTitle = $(`<button type=\"button\" class=\"hours-modal__close-btn close-btn\" aria-label=\"close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n <div class=\"hours-modal__header\">HOURS</div>`);\r\n\r\n var bottomModalSection = $(`<div class=\"hours-modal__divider\"></div>\r\n <p class=\"hours-modal__message ${hospitals[a].HoursDisclaimer == null || hospitals[a].HoursDisclaimer == '' ? 'hidden' : ''}\">*${hospitals[a].HoursDisclaimer}</p>\r\n <a class=\"hours-modal__link\" href=\"${hospitals[a].HoursPageUrl}\">View hospital info »</a>`);\r\n\r\n var currentDate = setCurrentDate();\r\n \r\n hoursObj.forEach(function (hourObj) {\r\n\r\n if (hourObj.Label !== null && hourObj.Label !== undefined && hourObj.Label.includes(\"_\")) {\r\n return;\r\n }\r\n\r\n var day = hourObj.Label;\r\n var isTemporaryHours = hourObj.IsTemporaryHours;\r\n\r\n var filteredObj = (hoursObj).filter((hour) => hour !== null && hour !== undefined && hour.Label !== null && hour.Label !== undefined && hour.Label.includes(day)).map(({ Hours }) => Hours);\r\n\r\n let timeList = bindHoursList(filteredObj, isTemporaryHours);\r\n\r\n modalHoursWrapper.append(`\r\n <li class=\"${currentDate.toLocaleLowerCase() == day.toLocaleLowerCase() ? 'active' : ''}\">\r\n <span class=\"day\">${day}</span>\r\n <div class=\"time\">${timeList}</div>\r\n </li>`);\r\n });\r\n\r\n modalContainer.append(modalContentWrapper);\r\n modalContentWrapper.append(modalBtnAndTitle, modalHoursWrapper, bottomModalSection);\r\n imageTagContainer.append(leftContainer, typeTagsWrapper);\r\n parentContainer.append(imageTagContainer, rightContainer, modalContainer);\r\n ui.$resultsContainer.append(parentContainer);\r\n ui.$map.fitBounds(bounds);\r\n }\r\n\r\n //Bind events after dynamic content has been created\r\n ui.$modalBtn = $('.hours-modal-btn');\r\n ui.$hospitalDLPush = $('.js-hospital-dl-btn');\r\n ui.$closeBtn = $('.close-btn');\r\n ui.$modalBtn.on('click', openModal);\r\n ui.$hospitalDLPush.on('click', clickEventDL);\r\n ui.$closeBtn.on('click', closeModal);\r\n\r\n ui.$getDirectionAnalystic = $('.redirect-to-map');\r\n ui.$getDirectionAnalystic.on('click', getdirectionDataAnalystic);\r\n\r\n if (hospitals.length === 1) {\r\n ui.$map.setZoom(10);\r\n }\r\n\r\n if (hospitals.length === 0) {\r\n setDefaultMarker();\r\n }\r\n }\r\n\r\n function bindHoursList(timeList, isTemporaryHours) {\r\n return timeList.map((hourtime) => {\r\n return `<span>\r\n ${hourtime} \r\n <span class=\"${isTemporaryHours ? '' : 'hidden'}\">*</span>\r\n </span>`;\r\n }).join('');\r\n }\r\n\r\n function getdirectionDataAnalystic(e) {\r\n let el = $(e.target);\r\n window.VCA.ucfahDatalayer.datalayerPushClick(el.data('get-direction'), el.data('get-id'), 'UC find a hospital');\r\n }\r\n\r\n function getTickToHours(time) {\r\n let num = time;\r\n let hours = (num / 60);\r\n let rhours = Math.floor(hours);\r\n let minutes = (hours - rhours) * 60;\r\n let rminutes = Math.round(minutes);\r\n\r\n if (rhours < 1) {\r\n return `${rminutes} minutes`;\r\n } else if (rhours == 1) {\r\n return `${rhours} hour and ${rminutes} minutes`;\r\n } else {\r\n return `${rhours} hours and ${rminutes} minutes`;\r\n }\r\n }\r\n\r\n function getBounds(lat, lng, radius) {\r\n let ConvertedRadius = radius * 1609.34;\r\n lat = parseFloat(lat);\r\n lng = parseFloat(lng);\r\n\r\n // add to canada site\r\n if (ui.isCanada === 'true') {\r\n ConvertedRadius = radius * 1000;\r\n }\r\n\r\n var circleData = {\r\n center: {\r\n lat,\r\n lng\r\n },\r\n radius: ConvertedRadius\r\n };\r\n\r\n if (window['google']) {\r\n return new window['google'].maps.Circle(circleData).getBounds();\r\n }\r\n }\r\n\r\n function calcMinMaxLatLng(bounds) {\r\n var obj = {\r\n minLat: bounds.getNorthEast().lat(),\r\n maxLat: bounds.getSouthWest().lat(),\r\n minLng: bounds.getNorthEast().lng(),\r\n maxLng: bounds.getSouthWest().lng()\r\n }\r\n return obj;\r\n }\r\n\r\n function closeModal(e) {\r\n e.stopPropagation();\r\n var parentEl = e.target.closest('.hours-modal');\r\n $(parentEl).css('display', 'none');\r\n }\r\n\r\n function showFormModal(e) {\r\n let el = $(e.target);\r\n let target = $(e.target)[0];\r\n\r\n if ($(target).hasClass('tooltip-icon') || $(target).hasClass('uc-hero-panel__tooltip')) {\r\n e.preventDefault();\r\n return;\r\n } else {\r\n ui.hospitalName = el.data('hospital-name');\r\n ui.hospitalId = el.data('hospital-au');\r\n loadIssueTypes();\r\n ui.$VWRModal.modal('show');\r\n\r\n ui.$VWRModal.find('#VWRPhoneNum').on('input', function () {\r\n let value = $(this).val();\r\n $(this).val(value.replace(/\\D/g, ''));\r\n });\r\n\r\n ui.$VWRModal.find('#VWRPhoneNum').on('keydown', function (e) {\r\n if (\r\n e.key !== 'Backspace' &&\r\n e.key !== 'Tab' &&\r\n e.key !== 'ArrowLeft' &&\r\n e.key !== 'ArrowRight' &&\r\n e.key !== 'Delete' &&\r\n !/^\\d$/.test(e.key)\r\n ) {\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n // console.log('id', ui.hospitalName, ui.hospitalId);\r\n\r\n window.VCA.ucfahDatalayer.datalayerPushClick('hub-join vwr', ui.hospitalId, 'UC find a hospital');\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n function handleLocationError(browserHasGeolocation, infoWindow, pos) {\r\n infoWindow.setPosition(pos);\r\n infoWindow.setContent(\r\n browserHasGeolocation ?\r\n \"Error: The Geolocation service failed.\" :\r\n \"Error: Your browser doesn't support geolocation.\"\r\n );\r\n infoWindow.open(ui.$map);\r\n ui.$loadingSpinner.addClass('hidden');\r\n showErrorMessage('Please provide address or zipcode.');\r\n }\r\n\r\n function isInViewport(el) {\r\n\r\n\r\n if (typeof jQuery === \"function\" && el instanceof jQuery) {\r\n el = el[0];\r\n }\r\n const rect = el.getBoundingClientRect();\r\n const mapRect = ui.$mapContainer[0].getBoundingClientRect();\r\n\r\n return (\r\n rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&\r\n rect.bottom >= 0 &&\r\n mapRect.top >= (window.innerHeight - 200)\r\n );\r\n }\r\n\r\n function openModal(e) {\r\n $('.hours-modal').hide();\r\n e.stopPropagation();\r\n var parentContainer = e.target.closest('.search-item');\r\n var modal = $(parentContainer).find('.hours-modal');\r\n var hospitalAU = $(parentContainer).find('.VWRInfoWrapper').attr('data-hospital-au');\r\n $(modal).css('display', 'block');\r\n $(parentContainer).find('.hours-modal').find('.hours-modal__close-btn').trigger('focus');\r\n\r\n window.VCA.ucfahDatalayer.datalayerPushClick('hub-hours', hospitalAU, 'UC find a hospital');\r\n }\r\n\r\n function clickEventDL(e) {\r\n var parentContainer = e.target.closest('.search-item');\r\n var hospitalAU = $(parentContainer).find('.VWRInfoWrapper').attr('data-hospital-au');\r\n let action = 'hub-select hospital';\r\n if ($(e.target).hasClass(\"redirect-to-map\") || $(e.target).parent().hasClass(\"redirect-to-map\")) {\r\n action = 'hub-view map';\r\n }\r\n\r\n window.VCA.ucfahDatalayer.datalayerPushClick(action, hospitalAU, 'UC find a hospital');\r\n }\r\n\r\n function removeMarkers() {\r\n for (let i = 0; i < ui.$markers.length; i++) {\r\n ui.$markers[i].setMap(null);\r\n }\r\n }\r\n\r\n function setCurrentDate() {\r\n var dotw = '';\r\n switch (new Date().getDay()) {\r\n case 0:\r\n dotw = \"Sun\";\r\n break;\r\n case 1:\r\n dotw = \"Mon\";\r\n break;\r\n case 2:\r\n dotw = \"Tues\";\r\n break;\r\n case 3:\r\n dotw = \"Wed\";\r\n break;\r\n case 4:\r\n dotw = \"Thurs\";\r\n break;\r\n case 5:\r\n dotw = \"Fri\";\r\n break;\r\n case 6:\r\n dotw = \"Sat\";\r\n }\r\n\r\n return dotw;\r\n }\r\n\r\n function setDefaultMarker() {\r\n var currentLatLng = { lat: parseFloat(ui.$defaultLatitude), lng: parseFloat(ui.$defaultLongitude) };\r\n var marker = new google.maps.marker.AdvancedMarkerElement({\r\n position: currentLatLng,\r\n map: ui.$map,\r\n //animation: google.maps.Animation.DROP,\r\n zoom: 8,\r\n center: currentLatLng\r\n });\r\n }\r\n\r\n function setSearchDefaultRadius() {\r\n ui.$searchRadius.val(ui.$defaultRadius);\r\n if (ui.isCanada === 'true') {\r\n $('.find-search__dropdown-btn').text(`${ui.$defaultRadius} KM`);\r\n } else {\r\n $('.find-search__dropdown-btn').text(`${ui.$defaultRadius} miles`);\r\n }\r\n var radiusOnLoad = $('.find-search__dropdown-list').find(`[data-value=\"${ui.$defaultRadius}\"]`)[0];\r\n $(radiusOnLoad).addClass('focused selected');\r\n }\r\n\r\n function showErrorMessage(errorMessage) {\r\n ui.$errorMessage.text(errorMessage);\r\n ui.$errorMsgContainer.removeClass('hidden');\r\n }\r\n\r\n function sortResults(data) {\r\n var results = [...data];\r\n $(results).each(function () {\r\n var hospLat = this.Latitude;\r\n var hospLng = this.Longitude;\r\n var setA = {\r\n latitude: hospLat,\r\n longitude: hospLng\r\n };\r\n var setB = {\r\n latitude: ui.$currentLat,\r\n longitude: ui.$currentLng\r\n }\r\n var miles = (haversine(setA, setB) * 0.000621371).toFixed(1);\r\n this.miles = Number(miles);\r\n });\r\n var sortedArray = results.sort(function (a, b) {\r\n return a.miles - b.miles\r\n });\r\n return sortedArray;\r\n }\r\n\r\n\r\n function validateForm(evt) {\r\n evt.preventDefault();\r\n ui.$APIErrorMessage.hide();\r\n submitSpinner.startLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n\r\n if (!checkForm()) {\r\n submitSpinner.stopLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n return;\r\n } else {\r\n initPostForm();\r\n }\r\n }\r\n\r\n function checkForm() {\r\n let phoneReg = /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/;\r\n let valid = true;\r\n\r\n $('.uc-vwr-form input').each(function (index) {\r\n let el = $(this);\r\n var elmId = el.attr('id');\r\n console.log('input', elmId);\r\n var referralSourceValue = ui.$VWRReferralSource.val();\r\n if (elmId == 'VWRReferralPrimaryVet') {\r\n if (referralSourceValue == 15 && el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else if (elmId == 'VWRReferralEmergencyHospital') {\r\n if (referralSourceValue == 16 && el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else if (elmId == 'VWRPhoneNum') {\r\n let phone = ui.$VMRFormPhoneNum.val();\r\n if (!phoneReg.test(phone)) {\r\n ui.$VMRFormPhoneNum.addClass('error');\r\n ui.$VMRFormPhoneNum.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n ui.$VMRFormPhoneNum.removeClass('error');\r\n ui.$VMRFormPhoneNum.closest('.form-label-group').removeClass('error');\r\n }\r\n } else {\r\n if (el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n });\r\n $('.uc-vwr-form select').each(function (index) {\r\n let el = $(this);\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n });\r\n\r\n $('.uc-vwr-form textarea').each(function (index) {\r\n let el = $(this);\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n });\r\n return valid;\r\n }\r\n\r\n async function initPostForm() {\r\n const url = '/urgentcare-api/virtualline/waitlistqueuerequest';\r\n let api = new ApiService(url);\r\n\r\n let $FirstName = ui.$VMRForm.find('#VWRFirstName').val();\r\n let $LastName = ui.$VMRForm.find('#VWRLastName').val();\r\n let $PetName = ui.$VMRForm.find('#VWRPetName').val();\r\n let $PetSpecies = ui.$VMRForm.find('#VWRPetSpecies').val();\r\n let $IssueType = ui.$VMRForm.find('#VWRIssueType').val();\r\n let $PhoneNum = ui.$VMRForm.find('#VWRPhoneNum').val();\r\n let $Description = ui.$VMRForm.find('#VWRBriefDesc').val();\r\n let $ReferralSource = ui.$VMRForm.find('#VWRReferralSource').val();\r\n let $ReferralPrimaryVet = ui.$VMRForm.find('#VWRReferralPrimaryVet').val();\r\n let $ReferralEmergencyHospital = ui.$VMRForm.find('#VWRReferralEmergencyHospital').val();\r\n\r\n let payload = {\r\n \"firstName\": $FirstName,\r\n \"lastName\": $LastName,\r\n \"petName\": $PetName,\r\n \"speciesType\": $PetSpecies,\r\n \"issueTypeId\": $IssueType,\r\n \"phoneNumber\": $PhoneNum,\r\n \"briefDesc\": $Description,\r\n 'hospitalName': ui.hospitalName,\r\n 'hospitalId': ui.hospitalId,\r\n \"referralSource\": $ReferralSource,\r\n }\r\n\r\n console.log('payload', payload);\r\n if ($ReferralSource == \"15\") {\r\n payload['referralHospital'] = $ReferralPrimaryVet;\r\n } else if ($ReferralSource == \"16\") {\r\n payload['referralHospital'] = $ReferralEmergencyHospital;\r\n }\r\n console.log('payload', payload);\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n\r\n let axiosConfig = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\r\n }\r\n }\r\n\r\n const { data, success, error } = await api.post(searchParams(payload), axiosConfig);\r\n\r\n if (success) {\r\n if (data.success) {\r\n let hospitalName = ui.$VWRInfoWrapper.data('hospital-name');\r\n\r\n //google analytics\r\n window.dataLayer.push({\r\n event: 'clickevent',\r\n category: 'vca urgent care',\r\n action: 'join vwr success',\r\n label: hospitalName\r\n });\r\n\r\n ui.$vwrModalForm.hide();\r\n ui.$vwrModalComfirmation.show();\r\n } else {\r\n if (data.errorMessage !== null || data.errorMessage !== '') {\r\n ui.$APIErrorMessage.find('.vwr-form-errormsg').text(data.errorMessage);\r\n ui.$APIErrorMessage.show();\r\n submitSpinner.stopLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n }\r\n }\r\n } else {\r\n ui.$APIErrorMessage.find('.vwr-form-errormsg').text(error);\r\n ui.$APIErrorMessage.show();\r\n submitSpinner.stopLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n console.log(`Virtual Waiting Room Form API Error: ${error}`);\r\n }\r\n }\r\n\r\n async function loadIssueTypes() {\r\n const url = `/urgentcare-api/virtualline/issuetypes?id=${ui.hospitalId}`;\r\n let api = new ApiService(url);\r\n\r\n const { data, success, error } = await api.get();\r\n\r\n if (!success || (error !== null && error !== '')) {\r\n console.log(\"API Issue Type Error: \", error);\r\n } else {\r\n let results = data;\r\n\r\n if (results == null || results == undefined) {\r\n console.log(\"Error: API results are empty, null, or undefined.\");\r\n } else {\r\n //SUCCESS\r\n $('#VWRIssueType').html('<option selected=\"\" disabled=\"\" hidden=\"\"></option>');\r\n $(results).each((idx, item) => {\r\n let option = `<option value=\"${item.issueTypeId}\" data-mapping-id=\"${item.issueMappingId}\">${item.issueTypeName}</option>`;\r\n $('#VWRIssueType').append(option);\r\n });\r\n }\r\n }\r\n }\r\n\r\n function init() {\r\n if ($('#defaultRadius').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindEvents();\r\n initPage();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n\r\n if ($('#FindAHospitalMap-UC').length <= 0) {\r\n return;\r\n }\r\n //check for hiding left arrow in filter pills carousel\r\n let primaryFilter = $('.filter-pills').find('.slick-slide')[0];\r\n let leftArrowBtn = $('.filter-pills').find('.slick-prev.slick-arrow');\r\n let primaryIsSelected = $(primaryFilter).hasClass('slick-active');\r\n if (primaryIsSelected) {\r\n $(leftArrowBtn).hide();\r\n }\r\n\r\n $('.slick-prev').on('click', function (event) {\r\n event.preventDefault();\r\n primaryFilter = $('.filter-pills').find('.slick-slide')[0];\r\n primaryIsSelected = $(primaryFilter).hasClass('slick-active');\r\n\r\n if (primaryIsSelected) {\r\n $(leftArrowBtn).hide();\r\n }\r\n });\r\n\r\n $('.slick-next').on('click', function (event) {\r\n event.preventDefault();\r\n $(leftArrowBtn).show();\r\n });\r\n\r\n const mapEl = document.getElementById('FindAHospitalMap-UC');\r\n\r\n function checkForGoogleMapsUC() {\r\n setTimeout(() => {\r\n if ('google' in window && typeof google === 'object' && typeof google.maps === 'object' && mapEl) {\r\n console.log('google', google);\r\n VCA.FindAHospitalUC.init(mapEl);\r\n }\r\n else {\r\n checkForGoogleMapsUC();\r\n }\r\n }, 1000);\r\n }\r\n\r\n checkForGoogleMapsUC();\r\n});","(function (window) {\r\n\r\n var sitefooter = function () {\r\n var menuStack = [];\r\n var ui = {};\r\n var isMobile;\r\n var SHOW_CSS = 'open';\r\n var OVERLAY = 'overlay';\r\n var NO_SCROLL = 'noscroll';\r\n var MEDIA_QUERY = '(max-width: 767px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$footerLinkToggle = $('.js-footer-links-title')\r\n ui.$footerlists = $('.js-footer-link-list');\r\n }\r\n\r\n function toggleFooterLinkCol(e) {\r\n if(mql.matches) {\r\n e.preventDefault();\r\n $(e.target).prop(\"disabled\", true);\r\n $(e.target).toggleClass('active');\r\n $(e.target).next().slideToggle('slow', function(){\r\n $(e.target).prop(\"disabled\", false);\r\n });\r\n }\r\n }\r\n\r\n function handleMediaQueryChange(mql) {\r\n isMobile = mql.matches ? true : false;\r\n if (!isMobile) {\r\n ui.$footerlists.removeAttr(\"style\");\r\n ui.$footerLinkToggle.removeClass('active');\r\n }\r\n }\r\n\r\n function bindEvents() {\r\n ui.$footerLinkToggle.on('click', toggleFooterLinkCol);\r\n mql.addEventListener(\"change\", () => {\r\n handleMediaQueryChange(mql);\r\n });\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n bindEvents();\r\n handleMediaQueryChange(mql);\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n };\r\n\r\n var footer = sitefooter();\r\n footer.init();\r\n})(window);\r\n","\r\nmodule.exports = {\r\n grabber: function(){\r\n const slider = document.querySelectorAll('.js-grabber');\r\n let isDown = false;\r\n let startX;\r\n let scrollLeft;\r\n \r\n slider.forEach(element => {\r\n \r\n element.addEventListener('mousedown', (e) => {\r\n isDown = true;\r\n element.classList.add('active');\r\n startX = e.pageX - element.offsetLeft;\r\n scrollLeft = element.scrollLeft;\r\n });\r\n element.addEventListener('mouseleave', () => {\r\n isDown = false;\r\n element.classList.remove('active');\r\n });\r\n element.addEventListener('mouseup', () => {\r\n isDown = false;\r\n element.classList.remove('active');\r\n });\r\n element.addEventListener('mousemove', (e) => {\r\n if (!isDown) return;\r\n e.preventDefault();\r\n const x = e.pageX - element.offsetLeft;\r\n const walk = (x - startX) * 2; //scroll-fast\r\n element.scrollLeft = scrollLeft - walk;\r\n // console.log(walk);\r\n });\r\n \r\n });\r\n }\r\n }","let VCA = VCA || {};\r\n\r\nVCA.RedirectDeviceType = (function ($) {\r\n\r\n let isMobileDevice = false;\r\n\r\n function checkElementExists() {\r\n if ($('.mobile-redirect').length > 0) {\r\n detectOnLoad();\r\n }\r\n }\r\n\r\n function detectOnLoad() {\r\n let os = getMobileOperatingSystem();\r\n let IOSUrl = mobileIOSAppStoreUrl;\r\n let AndroidUrl = mobileAndroidAppStoreUrl;\r\n\r\n if (os == 'Android' || os == 'iOS') { \r\n isMobileDevice = true;\r\n $('.mobile-redirect').attr('href', ''); //remove href \r\n\r\n if (os == 'Android') {\r\n $('.mobile-redirect').attr({\r\n href: AndroidUrl,\r\n target: '_blank'\r\n });\r\n } else if ( os == 'iOS') {\r\n $('.mobile-redirect').attr({\r\n href: IOSUrl,\r\n target: '_blank'\r\n });\r\n }\r\n\r\n } else {\r\n isMobileDevice = false;\r\n return;\r\n }\r\n }\r\n\r\n function getMobileOperatingSystem() {\r\n let userAgent = navigator.userAgent || navigator.vendor || window.opera;\r\n \r\n if (/android/i.test(userAgent)) {\r\n return \"Android\";\r\n }\r\n \r\n if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\r\n return \"iOS\";\r\n }\r\n \r\n return \"Not a mobile device\";\r\n }\r\n \r\n function init() {\r\n checkElementExists();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.RedirectDeviceType.init();\r\n});\r\n\r\n","var VCA = VCA || {};\r\n\r\n\r\nVCA.HospitalActionPanel = (function ($) {\r\n\r\n var ui = {};\r\n\r\n function init() {\r\n if ($('.hospital-action-panel').length <= 0) {\r\n return;\r\n }\r\n bindGalleryClick();\r\n bindGalleryCloseClick();\r\n }\r\n\r\n function bindGalleryClick() {\r\n $('.js-open-gallery-modal').on('click', function (e) {\r\n e.preventDefault();\r\n $('#gallery-modal .js-article-image-slider').css(\"visibility\", \"hidden\");\r\n $('#gallery-modal').modal('show');\r\n $('#gallery-modal').on('shown.bs.modal', function (e) {\r\n window.dispatchEvent(new Event('resize'));\r\n $('#gallery-modal .js-article-image-slider').css(\"visibility\", \"visible\");\r\n });\r\n });\r\n }\r\n\r\n function bindGalleryCloseClick() {\r\n $('.vca-modal__close').on('click', function (e) {\r\n var vimeoPlayerIFrame = $('#modal-carousel-vimeo-iframe');\r\n if (vimeoPlayerIFrame && vimeoPlayerIFrame.length > 0) {\r\n Array.from(vimeoPlayerIFrame).forEach((vimeoPlayerIFrameElement) => {\r\n var vimeoPlayer = new Vimeo.Player(vimeoPlayerIFrameElement);\r\n if (vimeoPlayer) {\r\n vimeoPlayer.unload();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.HospitalActionPanel.init();\r\n});","import FocusTrap from '@utils/focus-trap';\r\nimport isFn from '@utils/is-function';\r\nimport keyCodes from '@utils/key-codes';\r\nimport sharedParent from '@utils/shared-parent';\r\nimport ApiService from '@api/api-service';\r\n\r\nconst EVENT_KEY = '_headerModals_';\r\nconst EVENT_CLICK = `click.${EVENT_KEY}`;\r\nconst EVENT_KEYUP = `keyup.${EVENT_KEY}`;\r\nconst EVENT_KEYUP_ESC = `${EVENT_KEYUP}.esc`;\r\nconst EVENT_MOUSE_ENTER = `mouseenter.${EVENT_KEY}`;\r\nconst EVENT_MOUSE_LEAVE = `mouseleave.${EVENT_KEY}`;\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.HeaderModals = (function ($) {\r\n\r\n const ui = {};\r\n\r\n let activeModalId = null;\r\n let focusTrap = null;\r\n let hidingModalTimeout = null\r\n let queuedHideModalFn = null;\r\n let isStatic = false;\r\n let emergencyModalIsLoaded = false;\r\n\r\n function cacheUI() {\r\n ui.$document = $(document);\r\n ui.$headerModals = $('.header-btn-modals');\r\n ui.$loggedInModal = $('#myVCALoggedInModal');\r\n ui.$emergencyBtn;\r\n\r\n ui.$headerModalElements = $.map(ui.$headerModals.toArray(), (...[, index]) => {\r\n const $this = ui.$headerModals.eq(index);\r\n const id = '#' + $this.data('modal_id');\r\n const $modalEl = $(id);\r\n let $parent = sharedParent($this, $modalEl);\r\n let $hoverEl = $parent.length ? $parent : $this;\r\n if(id === \"#myVCALoginModal\"){\r\n $hoverEl = $this;\r\n }\r\n\r\n const $triggerEl = $this.is('button') ? $this : null;\r\n return {\r\n id,\r\n $modalEl,\r\n $hoverEl,\r\n ...($triggerEl && { $triggerEl } || { $triggerEl: $() })\r\n };\r\n });\r\n }\r\n\r\n function bindEvents() {\r\n addHoverListeners();\r\n\r\n ui.$headerModalElements.forEach((modal) => {\r\n modal.$triggerEl.on(EVENT_CLICK, () => toggleStaticModal(modal));\r\n modal.$triggerEl.on(EVENT_KEYUP, (evt) => onTriggerKeyup(evt, modal));\r\n });\r\n\r\n $(window).on('resize', detectWindowHeight);\r\n }\r\n\r\n function unbindEvents() {\r\n ui.$headerModalElements.forEach((modal) => {\r\n modal.$triggerEl.unbind();\r\n modal.$hoverEl.unbind();\r\n });\r\n }\r\n\r\n function addHoverListeners() {\r\n ui.$headerModalElements.forEach((modal) => {\r\n modal.$hoverEl\r\n .on(EVENT_MOUSE_ENTER, () => showModal(modal))\r\n .on(EVENT_MOUSE_LEAVE, () => queueModalTimeout(modal));\r\n });\r\n }\r\n\r\n function removeHoverListeners() {\r\n ui.$headerModalElements.forEach(({ $hoverEl }) => {\r\n $hoverEl\r\n .off(EVENT_MOUSE_ENTER)\r\n .off(EVENT_MOUSE_LEAVE);\r\n });\r\n }\r\n\r\n function onClickOut(evt) {\r\n if(hidingModalTimeout) {\r\n skipTimeout();\r\n return;\r\n }\r\n\r\n const $target = $(evt.target);\r\n const { $hoverEl } = ui.$headerModalElements.find(({ id }) => id === activeModalId) || {};\r\n\r\n if ($hoverEl) {\r\n if (!$target.closest($hoverEl).length) {\r\n if($($hoverEl).attr('id') == 'myVCALoginModal'){\r\n if (!$target.closest('#myVCALoginBtn').length){\r\n hideStaticModal();\r\n }\r\n }else{\r\n hideStaticModal();\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n function onTriggerKeyup(evt, modal) {\r\n if (isStatic) {\r\n return true;\r\n }\r\n\r\n const $target = $(evt.target);\r\n const key = evt.which ? evt.which : evt.keyCode;\r\n const keyIndex = [ keyCodes.ARROW_UP, keyCodes.ARROW_DOWN ].indexOf(key);\r\n\r\n if (keyIndex > -1) {\r\n showStaticModal(modal);\r\n\r\n if(keyIndex && focusTrap?.$current.is($target)) {\r\n focusTrap.next();\r\n } else {\r\n focusTrap.last();\r\n }\r\n }\r\n }\r\n\r\n function toggleStaticModal({ id }) {\r\n if (activeModalId !== id || !isStatic) {\r\n showStaticModal(...arguments)\r\n } else {\r\n hideStaticModal();\r\n }\r\n }\r\n\r\n function showStaticModal(modal) {\r\n isStatic = true;\r\n showModal(modal);\r\n removeHoverListeners();\r\n\r\n focusTrap = new FocusTrap(modal.$hoverEl, {\r\n allowBreakout: true,\r\n nextKeys: [keyCodes.ARROW_DOWN],\r\n prevKeys: [keyCodes.ARROW_UP],\r\n onBreakout() {\r\n hideStaticModal();\r\n }\r\n });\r\n\r\n focusTrap.$focusable.on(EVENT_KEYUP_ESC, (evt) => {\r\n const key = evt.which ? evt.which : evt.keyCode;\r\n if (key === keyCodes.ESCAPE) {\r\n focusTrap.$focusable.off(EVENT_KEYUP_ESC);\r\n hideStaticModal();\r\n }\r\n });\r\n\r\n queuedHideModalFn = () => {\r\n addHoverListeners();\r\n hideModal(modal);\r\n };\r\n }\r\n\r\n function hideStaticModal() {\r\n isStatic = false;\r\n activeModalId = null;\r\n focusTrap?.destroy();\r\n focusTrap = null;\r\n\r\n if (isFn(queuedHideModalFn)) {\r\n queuedHideModalFn();\r\n }\r\n }\r\n\r\n function showModal({ id, $modalEl }) {\r\n activeModalId = id;\r\n\r\n skipTimeout();\r\n\r\n $modalEl.fadeIn('fast');\r\n\r\n ui.$document.on(EVENT_CLICK, (evt) => onClickOut(evt));\r\n }\r\n\r\n function hideModal({ id, $modalEl }) {\r\n if (activeModalId !== id) {\r\n $modalEl.fadeOut('fast', () => {\r\n if (activeModalId === null) {\r\n ui.$document.off(EVENT_CLICK);\r\n }\r\n });\r\n }\r\n\r\n ui.$closingModal = null;\r\n queuedHideModalFn = null;\r\n hidingModalTimeout = null;\r\n }\r\n\r\n function queueModalTimeout(modal) {\r\n ui.$closingModal = modal.$modalEl;\r\n activeModalId = null;\r\n\r\n queuedHideModalFn = () => hideModal(modal);\r\n hidingModalTimeout = setTimeout(queuedHideModalFn, 500);\r\n }\r\n\r\n function skipTimeout() {\r\n if (hidingModalTimeout) {\r\n clearTimeout(hidingModalTimeout);\r\n }\r\n\r\n if (isFn(queuedHideModalFn)) {\r\n queuedHideModalFn();\r\n queuedHideModalFn = null;\r\n }\r\n }\r\n\r\n function createDesktopEmergencyInfoModal() {\r\n let emergencyContainer = $('#emergencyModalContainer');\r\n if (!emergencyContainer.length) {\r\n return;\r\n }\r\n\r\n emergencyContainer.append(\r\n ` <button \r\n type=\"button\" \r\n id=\"EmergencyBtn\"\r\n class=\"header-btn-modals action-btn__emergencyBtn\" \r\n aria-label=\"Emergency\"\r\n data-modal_id=\"EmergencyModal\">\r\n <img class=\"hover-off\" src=\"/images-2/emergency-default.png\" alt=\"Emergency Icon\">\r\n <img class=\"hover-on\" src=\"/images-2/emergency-hover.png\" alt=\"Emergency Icon\">\r\n </button>`\r\n );\r\n\r\n bindEmergencyBtn();\r\n }\r\n\r\n function bindEmergencyBtn() {\r\n ui.$emergencyBtn = $('#EmergencyBtn');\r\n\r\n ui.$emergencyBtn.on('click', function (e) {\r\n e.preventDefault();\r\n getEmergencyModalInfo();\r\n });\r\n }\r\n\r\n async function getEmergencyModalInfo() {\r\n if (emergencyModalIsLoaded) {\r\n return;\r\n }\r\n\r\n let emergencyContainer = $('#emergencyModalContainer');\r\n\r\n ui.$emergencyBtn.prop('disabled', true);\r\n emergencyContainer.find('#EmergencyModal').remove();\r\n\r\n let api = new ApiService('/emergency-api/get-emergency-modal');\r\n\r\n var pathName = '';\r\n let currentUrl = new URL(document.URL); \r\n if(currentUrl !== null)\r\n {\r\n pathName = currentUrl.pathname;\r\n }\r\n\r\n let query = {\r\n contextItemId: emergencyContainer.data('context-item'),\r\n emergencyCTAItemId: emergencyContainer.data('emergency-cta-item'),\r\n urlPath: pathName \r\n }\r\n const { data, success, error } = await api.query(query);\r\n\r\n if (success) {\r\n if (data) {\r\n\r\n var phones = '';\r\n $.each(data.phone, function (i, item) {\r\n if(item !== '')\r\n {\r\n if(i != 0) {\r\n phones += `<div><a class=\"emergency-modal__tel\" href=\"tel:${item}\">Alt: ${item}</a></div>`;\r\n }else{\r\n phones += `<div><a class=\"emergency-modal__tel\" href=\"tel:${item}\">${item}</a></div>`;\r\n }\r\n }\r\n });\r\n\r\n emergencyContainer.append(\r\n `<div \r\n id=\"EmergencyModal\" \r\n class=\"header-modal emergency header-btn-modals\"\r\n data-modal_id=\"EmergencyModal\" \r\n aria-labelledby=\"EmergencyBtn\">\r\n\r\n <div class=\"emergency-modal\">\r\n <img class=\"emergency-modal__logo\" src=\"${data.iconUrl}\" alt=\"Emergency Care Icon\"></img>\r\n <div class=\"emergency-modal__title\">${data.title}</div>\r\n ${phones}\r\n <div class=\"emergency-modal__details\">${data.message}</div>\r\n </div>\r\n </div>`\r\n );\r\n emergencyModalIsLoaded = true;\r\n }\r\n ui.$emergencyBtn.prop('disabled', false);\r\n } else {\r\n emergencyContainer.append(`\r\n <div \r\n id=\"EmergencyModal\" \r\n class=\"header-modal emergency header-btn-modals\"\r\n data-modal_id=\"EmergencyModal\" \r\n aria-labelledby=\"EmergencyBtn\">\r\n\r\n <div class=\"emergency-modal\">\r\n <div class=\"desktop-emergency-error\">${error}</div>\r\n </div>\r\n </div>\r\n `);\r\n ui.$emergencyBtn.prop('disabled', false);\r\n console.log(\"Error retrieving emergency modal information: \", error);\r\n }\r\n cacheUI();\r\n unbindEvents();\r\n bindEvents();\r\n }\r\n\r\n function detectWindowHeight() {\r\n let windowHeight = $(window).height();\r\n \r\n if (windowHeight < 700) {\r\n ui.$loggedInModal.find('.myvca-loggedin-modal').addClass('-short');\r\n }\r\n }\r\n\r\n function init() {\r\n createDesktopEmergencyInfoModal();\r\n cacheUI();\r\n bindEvents();\r\n detectWindowHeight();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.HeaderModals.init();\r\n});\r\n","import uniqid from 'uniqid';\r\nimport keyCodes from '@utils/key-codes';\r\nimport sharedParent from '@utils/shared-parent';\r\nimport FocusTrap from '@utils/focus-trap';\r\nimport { mobileMegaNav } from '../hospital-header/mobile-header-nav';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.HeaderSiteSearch = (function ($) {\r\n\r\n const ui = {};\r\n\r\n function cacheUI() {\r\n ui.$body = $(document.body);\r\n ui.$close = $('.header-sitesearch__close-btn');\r\n ui.$desktopIcon = $('#SiteSearchDesktopIcon');\r\n ui.$desktopSearch = $('#HeaderSiteSearchDesktop');\r\n ui.$mobileSearch = $('.header-sitesearch__mobile');\r\n ui.$icon = $('.site-search-icon');\r\n ui.$iconActive = $('.site-search-icon-active');\r\n ui.$mobileIcon = $('#SiteSearchMobileIcon');\r\n ui.$searchBtn = $('.header-sitesearch__search-btn');\r\n ui.$desktopSearchInput = $('#DesktopSiteSearchText');\r\n ui.$mobileSearchInput = $('#MobileSiteSearchText');\r\n ui.$mobileSearchInputMegaNav = $('#MobileSiteSearchTextMegaNav');\r\n\r\n // abstract UI\r\n ui.focusTrap = null;\r\n }\r\n\r\n function bindEvents() {\r\n ui.$desktopIcon.on('click', toggleDesktopSearchBar);\r\n ui.$desktopIcon.on('keyup', onDesktopIconKeyup);\r\n ui.$mobileIcon.on('click', displayMobileSearchBar);\r\n ui.$close.on('click', hideMobileSearchBar);\r\n ui.$searchBtn.on('click', initSearch);\r\n ui.$desktopSearchInput.on('keyup', initSearchOnEnter);\r\n ui.$mobileSearchInput.on('keyup', initSearchOnEnter);\r\n ui.$mobileSearchInputMegaNav.on('keyup', initSearchOnEnter);\r\n }\r\n\r\n function onDesktopIconKeyup(event) {\r\n if(!ui.focusTrap) {\r\n const key = event.which ? event.which : event.keyCode;\r\n if(key === keyCodes.ARROW_DOWN) {\r\n displayDesktopSearchBar();\r\n if(ui.focusTrap.$current.is(ui.$desktopIcon)) {\r\n ui.focusTrap.next();\r\n }\r\n } else if(key === keyCodes.ARROW_UP) {\r\n displayDesktopSearchBar();\r\n ui.focusTrap.last();\r\n }\r\n }\r\n }\r\n\r\n function toggleDesktopSearchBar() {\r\n const isActive = ui.$desktopSearch.hasClass('active');\r\n\r\n if (isActive) {\r\n hideDesktopSearchBar();\r\n } else {\r\n displayDesktopSearchBar();\r\n }\r\n }\r\n\r\n function displayDesktopSearchBar() {\r\n ui.$desktopSearch.addClass('active').fadeIn('fast');\r\n ui.$desktopIcon.attr('aria-expanded', true);\r\n ui.$iconActive.show();\r\n ui.$icon.hide();\r\n\r\n $(document).on('click.siteSearch', checkOutsideClick);\r\n\r\n const $parentEl = sharedParent(ui.$desktopIcon, ui.$desktopSearch);\r\n\r\n initFocusTrap($parentEl);\r\n }\r\n\r\n function hideDesktopSearchBar() {\r\n ui.$desktopSearch.removeClass('active').fadeOut('fast');\r\n ui.$desktopIcon.attr('aria-expanded', false);\r\n ui.$iconActive.hide();\r\n ui.$icon.show();\r\n\r\n $(document).off('click.siteSearch');\r\n\r\n ui.focusTrap?.$focusable.off('keyup.siteSearch');\r\n ui.focusTrap = ui.focusTrap?.destroy() || null;\r\n }\r\n\r\n function displayMobileSearchBar() {\r\n ui.$body.addClass('noscroll');\r\n ui.$mobileSearch.show();\r\n ui.$mobileIcon.attr('aria-expanded', true);\r\n\r\n initFocusTrap(ui.$mobileSearch);\r\n }\r\n\r\n function hideMobileSearchBar() {\r\n ui.$body.removeClass('noscroll');\r\n ui.$mobileSearch.hide();\r\n ui.$mobileIcon.attr('aria-expanded', false);\r\n\r\n ui.focusTrap = ui.focusTrap?.destroy() || null;\r\n }\r\n\r\n function initFocusTrap($rootEl, allowBreakout = true) {\r\n ui.focusTrap = new FocusTrap($rootEl, {\r\n allowBreakout,\r\n nextKeys: [ keyCodes.ARROW_DOWN ],\r\n prevKeys: [ keyCodes.ARROW_UP ],\r\n onBreakout() {\r\n hideDesktopSearchBar();\r\n }\r\n });\r\n\r\n ui.focusTrap.$focusable.on('keyup.siteSearch', checkInnerKeyup);\r\n }\r\n\r\n function initSearch(event) {\r\n event.preventDefault();\r\n let btn = $(event.currentTarget);\r\n\r\n let isMobile = $(event.currentTarget).closest('.header-sitesearch__container').hasClass('mobile');\r\n $('[data-control=\"mobileClose\"]').trigger('click');\r\n if (isMobile) {\r\n mobileSearch(btn);\r\n } else {\r\n desktopSearch(btn);\r\n }\r\n }\r\n\r\n function initSearchOnEnter(event) {\r\n if (event.keyCode === keyCodes.ENTER) {\r\n event.preventDefault();\r\n let btn = $(event.currentTarget);\r\n let isMobile = $(event.currentTarget).closest('.header-sitesearch__container').hasClass('mobile');\r\n\r\n if (isMobile) {\r\n mobileSearch(btn);\r\n } else {\r\n desktopSearch(btn);\r\n }\r\n }\r\n }\r\n function mobileSearch(btn) {\r\n\r\n let redirectUrl = btn.closest('.header-sitesearch__container').find('.header-sitesearch__search-btn').data('redirect');\r\n let searchText = btn.closest('.header-sitesearch__container').find('.header-sitesearch__search-input').val();\r\n\r\n if (searchText) {\r\n location.href = redirectUrl + \"#q=\" + searchText;\r\n hideMobileSearchBar()\r\n }\r\n }\r\n\r\n function desktopSearch(btn) {\r\n let redirectUrl = btn.closest('.header-sitesearch__container').find('.header-sitesearch__search-btn').data('redirect');\r\n const searchText = ui.$desktopSearchInput.val();\r\n\r\n if (searchText) {\r\n location.href = redirectUrl + \"#q=\" + searchText;\r\n }\r\n }\r\n\r\n function checkInnerKeyup(event) {\r\n const key = event.which ? event.which : event.keyCode;\r\n if(key === keyCodes.ESCAPE) {\r\n hideDesktopSearchBar();\r\n hideMobileSearchBar();\r\n }\r\n }\r\n\r\n function checkOutsideClick(event) {\r\n const target = $(event.target);\r\n\r\n if (target.closest(ui.$desktopIcon).length === 0 &&\r\n target.closest(ui.$desktopSearch).length === 0 &&\r\n !target.is(ui.$desktopIcon)) {\r\n\r\n hideDesktopSearchBar();\r\n }\r\n }\r\n\r\n function setupAccessibility() {\r\n const id = uniqid.time('siteSearch_');\r\n const desktopId = `${id}_desktop`;\r\n const mobileId = `${id}_mobile`;\r\n\r\n ui.$desktopSearch.attr('id', desktopId);\r\n ui.$mobileSearch.attr('id', mobileId);\r\n\r\n ui.$desktopIcon.attr({ 'aria-expanded': false, 'aria-controls': desktopId });\r\n ui.$mobileIcon.attr({ 'aria-expanded': false, 'aria-controls': mobileId });\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n setupAccessibility();\r\n bindEvents();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.HeaderSiteSearch.init();\r\n});\r\n","import ApiService from '@api/api-service';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.HospitalMobileNav = (function ($) {\r\n\r\n let MEDIA_QUERY = '(max-width: 991px)';\r\n let mql = window.matchMedia(MEDIA_QUERY);\r\n let elPresent = false;\r\n let emergencyInfoIsLoaded = false;\r\n\r\n function bindEvents() {\r\n $(window).on('resize',() => {\r\n if (elPresent && mql.matches) {\r\n $('body').css('margin','0 0 75px 0');\r\n } else {\r\n $('body').css('margin','0');\r\n }\r\n });\r\n $(document).on('click', checkOutsideClick);\r\n // $('.hospital-mobile-nav__item').on('click', toggleContainer);\r\n }\r\n\r\n // function toggleContainer(e) {\r\n // let selectedItem = e.currentTarget;\r\n // let contentItem = $(selectedItem).data('item');\r\n // let selectedItemIsActive = $(selectedItem).hasClass('active');\r\n // let contentContainer = $('.hospital-mobile-nav__content');\r\n\r\n // if ((contentItem == undefined) == false) {\r\n // $('.hospital-mobile-nav__item').each((index,el) => {\r\n // let isActive = $(el).hasClass('active');\r\n // if (el == selectedItem) {\r\n // return;\r\n // } else if (isActive) {\r\n // $(el).removeClass('active');\r\n // }\r\n // });\r\n \r\n // $('.hospital-mobile-nav__content-item').each((index,el) => {\r\n // let id = $(el).attr('id');\r\n // let isActive = $(el).hasClass('active');\r\n \r\n // if (id == contentItem && !isActive) {\r\n // $(el).addClass('active');\r\n // } else {\r\n // $(el).removeClass('active');\r\n // }\r\n // });\r\n \r\n // if (selectedItemIsActive) {\r\n // $(selectedItem).removeClass('active');\r\n // $(contentContainer).removeClass('opened');\r\n // } else {\r\n // $(selectedItem).addClass('active');\r\n // $(contentContainer).addClass('opened');\r\n // }\r\n // }\r\n // }\r\n\r\n function checkOutsideClick(e) {\r\n let item = $('.hospital-mobile-nav__item');\r\n let contentEl = $('.hospital-mobile-nav__content');\r\n let contentItem = $('.hospital-mobile-nav__content-item');\r\n\r\n\r\n if ( $(e.target).closest(item).length === 0 && \r\n $(e.target).closest(contentEl).length === 0 &&\r\n $(e.target).closest(contentItem).length === 0) {\r\n $(contentEl).removeClass('opened');\r\n\r\n $(item).each((index,el) => {\r\n if ($(el).hasClass('active')) {\r\n $(el).removeClass('active')\r\n $(contentEl).removeClass('opened');\r\n }\r\n });\r\n $(contentItem).each((index,el) => {\r\n if ($(el).hasClass('active')) {\r\n $(el).removeClass('active')\r\n $(contentEl).removeClass('opened');\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n function highlightCurrentDay() {\r\n // Highlight the current day in hospital modal *@\r\n var today = new Date().toDateString().substr(0, 3);\r\n var dayXPath = \".//span[contains(@class, 'day') and contains(., '\" + today + \"')]\";\r\n var daySpanTags = document.evaluate(dayXPath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);\r\n for(let i=0; i<daySpanTags.snapshotLength; i++){\r\n var daySpanTag=daySpanTags.snapshotItem(i);\r\n daySpanTag.parentNode.classList.add(\"active\");\r\n }\r\n }\r\n\r\n function createMobileEmergencyInfo() {\r\n let emergencyContainer = $('#MobileEmergencyInfoContent');\r\n if (!emergencyContainer.length) {\r\n return;\r\n }\r\n\r\n bindEmergencyBtn();\r\n }\r\n\r\n function bindEmergencyBtn() {\r\n $('.mobile-emergency-info').on('click', function (e) {\r\n e.preventDefault();\r\n getEmergencyModalInfo();\r\n });\r\n }\r\n\r\n async function getEmergencyModalInfo() {\r\n if (emergencyInfoIsLoaded) {\r\n return;\r\n }\r\n \r\n let emergencyContainer = $('#MobileEmergencyInfoContent');\r\n\r\n emergencyContainer.find('.mobile-emergency-error').remove();\r\n emergencyContainer.append(`\r\n <div class=\"emergency-modal__loader\">\r\n <img src=\"/images-2/VCA_LoadingDog.gif\" alt=\"Loader Icon\"/>\r\n </div>\r\n `);\r\n \r\n let api = new ApiService('/emergency-api/get-emergency-modal');\r\n let query = {\r\n contextItemId: emergencyContainer.data('context-item'),\r\n emergencyCTAItemId: emergencyContainer.data('emergency-cta-item')\r\n }\r\n const { data, success, error } = await api.query(query);\r\n\r\n if (success) {\r\n if (data) {\r\n emergencyContainer.find('.emergency-modal__loader').remove();\r\n var phones = '';\r\n $.each(data.phone, function (i, item) { \r\n\r\n if (item !== '') {\r\n if (i != 0) {\r\n phones += `<div><a class=\"emergency-modal__tel\" href=\"tel:${item}\">Alt: ${item}</a></div>`;\r\n } else {\r\n phones += `<div><a class=\"emergency-modal__tel\" href=\"tel:${item}\">${item}</a></div>`;\r\n } \r\n }\r\n \r\n });\r\n\r\n emergencyContainer.append(`\r\n <img class=\"emergency-modal__logo\" src=\"${data.iconUrl}\" alt=\"Emergency Care Icon\"></img>\r\n <div class=\"emergency-modal__title\">${data.title}</div>\r\n ${phones}\r\n <div class=\"emergency-modal__details\">${data.message}</div>\r\n `);\r\n emergencyInfoIsLoaded = true;\r\n }\r\n } else {\r\n emergencyContainer.find('.emergency-modal__loader').remove();\r\n emergencyContainer.append(`<div class=\"mobile-emergency-error\">${error}</div>`)\r\n console.log(\"Error retrieving emergency modal information: \", error);\r\n }\r\n }\r\n\r\n function init() {\r\n if (process.env.NODE_ENV !== 'development') {\r\n bindEvents();\r\n }\r\n createMobileEmergencyInfo();\r\n highlightCurrentDay();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.HospitalMobileNav.init();\r\n});","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\nlet VCA = VCA || {};\r\n\r\nVCA.HospitalThreeCardCarousel = (function ($) {\r\n let ui = {};\r\n let MEDIA_QUERY = '(max-width: 991px)';\r\n let mql = window.matchMedia(MEDIA_QUERY);\r\n let isExperienceEditor = $('#sitecore-page-mode').attr('data-attribute');\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$cardSlider = $('.js-card-slider');\r\n }\r\n\r\n function initCarouselSlider(e) {\r\n var cardSlider = ui.$cardSlider.each(function (index, element) {\r\n $(this).addClass('js-card-slider' + index);\r\n var item_length = $('.js-card-slider' + index + ' > div').length;\r\n if (item_length > 3 && !isExperienceEditor) {\r\n $('.js-card-slider' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: true,\r\n dots: false,\r\n slidesToShow: 3,\r\n rows: 0,\r\n slidesToScroll: 1,\r\n draggable: false,\r\n responsive: [{\r\n breakpoint: 1280,\r\n settings: {\r\n slidesToShow: 3,\r\n dots: true,\r\n arrows: false,\r\n accessibility: true,\r\n draggable: true\r\n }\r\n },\r\n {\r\n breakpoint: 991,\r\n settings: {\r\n slidesToShow: 2,\r\n dots: true,\r\n arrows: false,\r\n focusOnChange: true,\r\n accessibility: true,\r\n draggable: true\r\n }\r\n },\r\n {\r\n breakpoint: 600,\r\n settings: {\r\n slidesToShow: 1,\r\n dots: true,\r\n arrows: false,\r\n focusOnChange: true,\r\n accessibility: true,\r\n draggable: true\r\n }\r\n }\r\n ]\r\n });\r\n } else if (mql.matches && item_length > 1 && !isExperienceEditor) {\r\n $('.js-card-slider' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: false,\r\n dots: false,\r\n slidesToShow: 2,\r\n slidesToScroll: 2,\r\n rows: 0,\r\n draggable: false,\r\n responsive: [{\r\n breakpoint: 1024,\r\n settings: \"unslick\"\r\n },\r\n {\r\n breakpoint: 991,\r\n settings: {\r\n slidesToShow: 2,\r\n slidesToScroll: 2,\r\n dots: true,\r\n arrows: false,\r\n focusOnChange: true,\r\n accessibility: true,\r\n draggable: true\r\n }\r\n },\r\n {\r\n breakpoint: 600,\r\n settings: {\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n dots: true,\r\n arrows: false,\r\n focusOnChange: true,\r\n accessibility: true,\r\n draggable: true\r\n }\r\n }\r\n ]\r\n });\r\n }\r\n });\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n initCarouselSlider();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.HospitalThreeCardCarousel.init();\r\n});","var VCA = VCA || {};\r\n\r\nVCA.HowToVideos = (function ($) {\r\n\r\n var ui = {};\r\n\r\n // stops video play when modal is closed by stripping src from iframe\r\n function init() {\r\n $('.how-to-videos__col').each(function() {\r\n $(this).on('hide.bs.modal', function (e) {\r\n $('iframe', this).attr(\"src\", $('iframe', this).attr(\"src\"));\r\n });\r\n });\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.HowToVideos.init();\r\n});","const DEFAULT_OPTIONS = {\r\n query: 'q',\r\n redirect: '',\r\n separator: '?'\r\n};\r\n\r\nclass InlineSearch {\r\n constructor($el, options) {\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n\r\n this.$el = $el;\r\n\r\n this.$form = this.$el.find('[data-control=\"form\"]');\r\n this.$input = this.$el.find('[data-control=\"input\"]');\r\n this.$submit = this.$el.find('[data-control=\"submit\"]');\r\n\r\n Object.assign(this, options);\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.setupListeners();\r\n }\r\n\r\n onSearchClick(evt) {\r\n evt.preventDefault();\r\n\r\n if(this.$input.val()) {\r\n this.onSearchSubmit();\r\n } else {\r\n this.$input.get(0).focus();\r\n }\r\n }\r\n\r\n onSearchSubmit(evt) {\r\n evt?.preventDefault();\r\n\r\n const value = this.$input.val();\r\n if(!value) return;\r\n\r\n location.href = `${this.redirect}${this.separator}${this.query}=${value}`;\r\n }\r\n\r\n setupListeners() {\r\n this.$form.on('submit', (evt) => this.onSearchSubmit(evt));\r\n this.$submit.on('click', (evt) => this.onSearchClick(evt));\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-inline-search');\r\n rootEls.forEach((el) => {\r\n const $el = $(el);\r\n \r\n const options = {\r\n query: $el.data('query') || DEFAULT_OPTIONS.query,\r\n redirect: $el.data('redirect') || DEFAULT_OPTIONS.redirect,\r\n separator: $el.data('separator') || DEFAULT_OPTIONS.separator\r\n };\r\n\r\n new InlineSearch($el, options);\r\n });\r\n});\r\n","var VCA = VCA || {};\r\n\r\nVCA.JoinOurNewsletter = (function ($) {\r\n\r\n const _inputErrorClass = 'input-validation-error';\r\n const _mailRegex = /^[a-zA-Z][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$/i;\r\n const _nameRegex = /^[a-z ,.'-]+$/i;\r\n\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n ui.$email = $('.newsletter-signup-email-field');\r\n ui.$firstName = $('.newsletter-signup-firstname-field');\r\n ui.$joinOurNewsletterBtn = $('.join-our-newsletter-signup-btn');\r\n ui.$joinOurNewsletterEmailInput = $('.join-our-newsletter-signup-input')\r\n ui.$lastName = $('.newsletter-signup-lastname-field');\r\n ui.$newsletterForm = $('.newsletter-signup');\r\n ui.$submitBtn = $('.newsletter-signup-btn');\r\n }\r\n\r\n function bindEnableSubmitButton() {\r\n ui.$email.on('focusout', function (e) {\r\n evaluateSubmitButtonState();\r\n });\r\n\r\n ui.$email.on('input', function (e) {\r\n evaluateSubmitButtonState();\r\n });\r\n\r\n ui.$firstName.on('focusout', function (e) {\r\n evaluateSubmitButtonState();\r\n });\r\n\r\n ui.$firstName.on('input', function (e) {\r\n evaluateSubmitButtonState();\r\n });\r\n\r\n ui.$lastName.on('focusout', function (e) {\r\n evaluateSubmitButtonState();\r\n });\r\n\r\n ui.$lastName.on('input', function (e) {\r\n evaluateSubmitButtonState();\r\n });\r\n }\r\n\r\n // The button in the footer that opens the newsletter subscription form modal\r\n function bindJoinOurNewsletterClick() {\r\n ui.$joinOurNewsletterBtn.on('click', function (e) {\r\n e.preventDefault();\r\n let newsletterSignupElement = $(this).closest('.js-newsletter-signup');\r\n let email = ui.$joinOurNewsletterEmailInput.val();\r\n if (!_mailRegex.test(email)) {\r\n newsletterSignupElement.addClass(_inputErrorClass);\r\n newsletterSignupElement.find('.join-our-newsletter-signup-input').triggerHandler(\"focus\");\r\n return;\r\n } else {\r\n let email = ui.$joinOurNewsletterEmailInput.val();\r\n $('#Newsletter').find('input.newsletter-signup-email-field').val(email);\r\n evaluateSubmitButtonState();\r\n $('#Newsletter').modal('show');\r\n }\r\n });\r\n }\r\n\r\n function evaluateSubmitButtonState() {\r\n if (validateForm()) {\r\n ui.$submitBtn.removeAttr('disabled');\r\n } else {\r\n // Disable the button until all fields have valid data\r\n ui.$submitBtn.attr('disabled', true);\r\n }\r\n }\r\n\r\n // Assure that there's no data in the hidden newsletter form\r\n function initForm() {\r\n ui.$email.val('');\r\n ui.$firstName.val('');\r\n ui.$joinOurNewsletterEmailInput.val('');\r\n ui.$lastName.val('');\r\n }\r\n\r\n function validateEmail() {\r\n if (ui.$email === undefined) {\r\n return false;\r\n }\r\n\r\n let email = ui.$email.val();\r\n return validateFieldValue(_mailRegex, email, ui.$email);\r\n }\r\n\r\n function validateFirstName() {\r\n if (ui.$firstName === undefined) {\r\n return false;\r\n }\r\n\r\n let firstName = ui.$firstName.val();\r\n return validateFieldValue(_nameRegex, firstName, ui.$firstName);\r\n }\r\n\r\n function validateForm() {\r\n let emailIsValid = validateEmail();\r\n let firstNameIsValid = validateFirstName();\r\n let lastNameIsValid = validateLastName();\r\n\r\n return emailIsValid && firstNameIsValid && lastNameIsValid;\r\n }\r\n\r\n function validateFieldValue(regex, fieldValue, fieldObj)\r\n {\r\n if(fieldValue === undefined)\r\n {\r\n return false;\r\n }\r\n\r\n let blRegexResult = regex.test(fieldValue);\r\n if (!blRegexResult || fieldValue.trim() == '') {\r\n fieldObj.addClass(_inputErrorClass);\r\n return false;\r\n }\r\n else if (blRegexResult && fieldValue.trim() !== '') {\r\n fieldObj.removeClass(_inputErrorClass);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function validateLastName() {\r\n if (ui.$lastName === undefined) {\r\n return false;\r\n }\r\n\r\n let lastName = ui.$lastName.val();\r\n return validateFieldValue(_nameRegex, lastName, ui.$lastName);\r\n }\r\n\r\n function init() {\r\n if ($('.js-newsletter-form').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n initForm();\r\n bindEnableSubmitButton();\r\n bindJoinOurNewsletterClick();\r\n evaluateSubmitButtonState();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.JoinOurNewsletter.init();\r\n});","\r\n\r\n(function (window) {\r\n\r\n var customDropdown = function () {\r\n var menuStack = [];\r\n var ui = {};\r\n var isMobile;\r\n var SHOW_FULL_TEXT = 'collapsed';\r\n var MEDIA_QUERY = '(max-width: 991px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$seletButton = $('.js-vca-dropdown-button');\r\n ui.$list = $('.js-vca-dropdown-list');\r\n ui.$listItem = $('.js-vca-dropdown-list li a');\r\n ui.$coveoSeletButton = $('.js-vca-coveo-dropdown-button');\r\n ui.$coveoList = $('.js-vca-coveo-dropdown-list');\r\n ui.$coveoListItem = $('.js-vca-coveo-dropdown-list div');\r\n }\r\n\r\n function openDropdown(e) {\r\n e.preventDefault();\r\n if (this.getAttribute(\"aria-expanded\") === 'true') {\r\n hideListbox(this);\r\n return;\r\n }\r\n var $button = this;\r\n var $list = $(this).next(\".js-vca-dropdown-list\");\r\n $list.removeClass('hidden');\r\n $button.setAttribute('aria-expanded', 'true');\r\n $list.trigger('focus');\r\n }\r\n\r\n function itemSelected(e) {\r\n var item;\r\n if (this === undefined) {\r\n item = e.parent();\r\n } else {\r\n item = $(this).parent();\r\n }\r\n let parent = $(item).closest('.js-vca-dropdown-list');\r\n if(!parent.hasClass('js-link-list')){\r\n e.preventDefault();\r\n }\r\n $(item).siblings().removeClass('focused selected');\r\n $(item).addClass('focused selected');\r\n updateSelectValue($(item));\r\n hideListbox($(item).closest('.js-vca-dropdown-list'));\r\n }\r\n\r\n function updateSelectValue(e) {\r\n var item = e;\r\n var itemText = $(item).find('a').html();\r\n var itemValue = $(item).attr('data-value');\r\n var input = $(item).closest('.vca-dropdown-select').find('.js-vca-dropdown-input');\r\n var button = $(item).closest('.vca-dropdown-select').find('.js-vca-dropdown-button');\r\n input.val(itemValue).trigger('change');\r\n $(button).html(itemText)\r\n input.trigger('keypress');\r\n }\r\n\r\n function checkShow(e) {\r\n e.preventDefault();\r\n var key = e.which || e.keyCode;\r\n\r\n var first = $(this).find('.focused').is(':first-child');\r\n var last = $(this).find('.focused').is(':last-child');\r\n\r\n switch (key) {\r\n case 40: //down arrow\r\n if (!last) {\r\n $(this).find('.focused').removeClass('focused').next().addClass('focused');\r\n }\r\n e.stopPropagation();\r\n break;\r\n case 38: // up arrow\r\n if (!first) {\r\n $(this).find('.focused').removeClass('focused').prev().addClass('focused');\r\n }\r\n e.stopPropagation();\r\n break;\r\n case 27: // esc\r\n case 9: // tab\r\n hideListbox($(this));\r\n e.stopPropagation();\r\n break;\r\n case 32: // space bar\r\n case 13: // enter key\r\n $(this).find('.focused').addClass('selected');\r\n $(this).find('.focused a').trigger('click');\r\n updateSelectValue($(this).find('.focused'));\r\n hideListbox($(this));\r\n e.stopPropagation();\r\n break;\r\n }\r\n }\r\n\r\n function hideListbox(e) {\r\n var item;\r\n\r\n if (this === undefined) {\r\n item = e;\r\n } else {\r\n item = $(e);\r\n }\r\n\r\n var parent = $(item).closest('.vca-dropdown-select');\r\n var list = $(parent).find('.js-vca-dropdown-list');\r\n var button = $(parent).find(\".js-vca-dropdown-button\");\r\n list.addClass('hidden');\r\n button.attr('aria-expanded', 'false');\r\n }\r\n\r\n function openCoveoDropdown(e) {\r\n e.preventDefault();\r\n if (this.getAttribute(\"aria-expanded\") === 'true') {\r\n hideCoveoListbox(this);\r\n return;\r\n }\r\n var $button = this;\r\n var $list = $(this).next(\".js-vca-coveo-dropdown-list\");\r\n $list.removeClass('hidden');\r\n $button.setAttribute('aria-expanded', 'true');\r\n $list.trigger('focus');\r\n }\r\n\r\n function itemSelectedCoveo(e) {\r\n var item;\r\n if (this === undefined) {\r\n item = e;\r\n } else {\r\n item = $(this);\r\n }\r\n // console.log(item);\r\n // console.log(e);\r\n\r\n let selectedElement = $(item).find('.CoveoSort');\r\n let caption = $(selectedElement).data('caption');\r\n $('.js-vca-coveo-dropdown-button').html(`Sort By: ${caption}`);\r\n\r\n $(item).siblings().removeClass('focused selected');\r\n $(item).addClass('focused selected');\r\n hideCoveoListbox($(item).closest('.js-vca-coveo-dropdown-list'));\r\n }\r\n\r\n function hideCoveoListbox(e) {\r\n var item;\r\n\r\n if (this === undefined) {\r\n item = e;\r\n } else {\r\n item = $(e);\r\n }\r\n\r\n var parent = $(item).closest('.vca-dropdown-select');\r\n var list = $(parent).find('.js-vca-coveo-dropdown-list');\r\n var button = $(parent).find(\".js-vca-coveo-dropdown-button\");\r\n list.addClass('hidden');\r\n button.attr('aria-expanded', 'false');\r\n }\r\n\r\n\r\n function bindEvents() {\r\n ui.$seletButton.on('click', openDropdown);\r\n ui.$listItem.on('click', itemSelected);\r\n //ui.$list.on('blur', hideListbox);\r\n ui.$list.bind('keydown', checkShow);\r\n if ($('.js-vca-coveo-dropdown-button').length > 0) {\r\n ui.$coveoSeletButton.on('click', openCoveoDropdown);\r\n ui.$coveoListItem.on('click', itemSelectedCoveo);\r\n }\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n bindEvents();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n };\r\n\r\n var select = customDropdown();\r\n select.init();\r\n\r\n\r\n})(window);\r\n","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.LocationAccordion = (function ($) {\r\n\r\n function init() {\r\n selectScrollState();\r\n bindMobieToggleClick();\r\n bindScreenSize();\r\n windowResize()\r\n }\r\n\r\n function selectScrollState() {\r\n $('[data-region=\"filterStateList\"]').on('change', function (e) {\r\n $('.location-accordion__state').find('[data-region=\"collapseState\"]').removeClass('show');\r\n $('.location-accordion__btn').addClass('collapsed');\r\n $('.location-accordion__state').find('[data-target=\"#' + $(this).val() + '\"]').removeClass('collapsed');\r\n $('.location-accordion__state').find('#' + $(this).val()).addClass('show');\r\n let targetElement = $('.location-accordion__state').find('[data-target=\"#' + $(this).val() + '\"]');\r\n if (targetElement.length) {\r\n $('html, body').animate({\r\n scrollTop: targetElement.offset().top - 180\r\n }, 1000);\r\n }\r\n });\r\n }\r\n\r\n \r\n \r\n function bindScreenSize() {\r\n $(window).on('resize', windowResize);\r\n }\r\n\r\n function windowResize() {\r\n let viewportWidth = $(window).width();\r\n if (viewportWidth > 767) {\r\n $('.find-a-hospital__directory-btn').show();\r\n } else {\r\n $('.find-a-hospital__directory-btn').hide();\r\n }\r\n }\r\n\r\n // search by location directory\r\n\r\n function bindMobieToggleClick() {\r\n $('.js-more-less-btn').off('click').on('click', function(e) {\r\n let $btn = $(this).find('.find-care__location-directory'); \r\n let text = $btn.find('span').text().trim(); \r\n \r\n if (text === 'more') {\r\n $('.find-a-hospital__directory-btn').show();\r\n $(this).find('.-less-icon-mobile').show();\r\n $(this).find('.-more-icon-mobile').hide();\r\n text = text.replace(text, 'less');\r\n \r\n } else {\r\n $('.find-a-hospital__directory-btn').hide();\r\n $(this).find('.-less-icon-mobile').hide();\r\n $(this).find('.-more-icon-mobile').show();\r\n text = text.replace(text, 'more');\r\n }\r\n $btn.find('span').text(text);\r\n });\r\n }\r\n\r\n return {\r\n init: init,\r\n bindMobieToggleClick: bindMobieToggleClick,\r\n bindScreenSize: bindScreenSize,\r\n windowResize: windowResize\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.LocationAccordion.init();\r\n});","import ApiService from '@api/api-service';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.MyVCALogin = (function ($) {\r\n \r\n const password = $('.login-password-input');\r\n const loginErrMessage = $('.validation-summary-errors');\r\n const loginErrorMessage = $('.login-error');\r\n const loginModal = $('#LoginRedirectModal');\r\n const duration = $('#LoginRedirectModal').data('duration');\r\n const loginHelpModal = $('#loginHelpModal');\r\n \r\n function bindEvents() {\r\n $('#togglePassword').on('click', togglePassword);\r\n $('.login-btn[type=\"submit\"]').on('click', displayLoadingSpinner);\r\n $('.js-account-step').find('.js-sign-up-google').on('click', clickSignWithGoogle); \r\n $('.js-account-step').find('.js-login-help-btn').on('click', helpModal);\r\n hideLoginModal();\r\n }\r\n\r\n function checkErrorMessage() {\r\n if (loginErrMessage.length > 0) { \r\n let listedItemEl = $(loginErrMessage).find('ul li')[0];\r\n let elHasHttps = $(listedItemEl).html().includes('https');\r\n let redirectPath = $(listedItemEl).html();\r\n let durationInMilliseconds = duration * 1000;\r\n\r\n if (elHasHttps) {\r\n $(loginModal).modal('show');\r\n\r\n setTimeout(() => {\r\n $(loginModal).modal('hide');\r\n window.location.href = redirectPath;\r\n }, durationInMilliseconds);\r\n\r\n } else {\r\n loginErrorMessage.html($(listedItemEl).html());\r\n loginErrorMessage.show();\r\n window.VCA.AccountDatalayer.dataLayerLoginFailure();\r\n } \r\n }\r\n }\r\n \r\n function helpModal(e) {\r\n e.preventDefault();\r\n $('#loginHelpModal').modal('show');\r\n }\r\n\r\n function hideLoginModal() {\r\n $('#loginHelpModal').on('hide.bs.modal', function () {\r\n const getUrl = $('#loginHelpModal').find('iframe').attr('src');\r\n $('#loginHelpModal').find('iframe').removeAttr('src');\r\n $('#loginHelpModal').find('iframe').attr('src', getUrl);\r\n });\r\n }\r\n\r\n function togglePassword() {\r\n const type = $(password).attr('type') === 'password' ? 'text' : 'password';\r\n $(password).attr('type', type);\r\n $(this).toggleClass('fa-eye-slash');\r\n }\r\n\r\n function displayLoadingSpinner() {\r\n let email = $('.login-email-input').val();\r\n let emailRegex = /(^[a-zA-Z0-9_.]+[@]{1}[a-zA-Z0-9\\-]+[\\.][a-zA-Z]+$)/;\r\n let validateEmail = emailRegex.test(email);\r\n let passwordLength = $('.login-password-input').val().length > 5;\r\n\r\n $('.login-error').hide();\r\n\r\n if (!validateEmail || !passwordLength) {\r\n return\r\n }\r\n $('.js-account-step').css('pointer-events', 'none');\r\n $('.login-loadingspinner-wrapper').show();\r\n }\r\n\r\n function checkLoginState() {\r\n let isFacebookSDKLoaded = typeof FB !== 'undefined';\r\n if (isFacebookSDKLoaded){\r\n FB.getLoginStatus(function(response) {\r\n statusChangeCallback(response);\r\n });\r\n }\r\n }\r\n \r\n async function clickSignWithGoogle() { \r\n\r\n const url = '/myvca-api/googlelogin';\r\n let api = new ApiService(url);\r\n\r\n const { success, data, error } = await api.query();\r\n\r\n if (success) {\r\n window.VCA.AccountDatalayer.datalayerPushSignWithGoogle(\"sign_in_with_google\",\"sign_in\",\"Sign In with Google\")\r\n\r\n if (data !== null && data !== '') {\r\n window.location.href = data;\r\n }\r\n }\r\n } \r\n\r\n function init() {\r\n if ($('.myvca-login-page').length <= 0) {\r\n return;\r\n }\r\n checkLoginState();\r\n checkErrorMessage();\r\n bindEvents();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.MyVCALogin.init();\r\n});\r\n\r\nwindow.statusChangeCallback = async function(response) {\r\n \r\n if (response.status === 'connected') {\r\n // User is logged in with Facebook\r\n var accessToken = response.authResponse.accessToken;\r\n console.log('accessToken', accessToken);\r\n const url = '/myvca-api/facebooklogin';\r\n let api = new ApiService(url);\r\n let userEmail = '';\r\n\r\n FB.api('/me', { fields: 'id,first_name,last_name,email,link,gender,locale,picture' }, function(apiResponse) {\r\n console.log(apiResponse);\r\n userEmail = apiResponse.eamil;\r\n });\r\n\r\n let query = {\r\n 'facebookToken': accessToken,\r\n 'email': userEmail\r\n };\r\n\r\n const {data} = await api.post(query);\r\n if (data.success) {\r\n if (data.RedirectUrl) {\r\n window.location.href = data.RedirectUrl;\r\n } else {\r\n location.reload();\r\n }\r\n } else if (data.error) {\r\n $('.login-error').html(data.error);\r\n $('.login-error').show();\r\n window.VCA.AccountDatalayer.dataLayerLoginFailure();\r\n }\r\n }\r\n};","export default class MapFrame {\r\n constructor(hospitalMapDetail) {\r\n this.hospitalMapDetail = hospitalMapDetail;\r\n }\r\n\r\n constructMapFrame() {\r\n var encodedHospitalName = encodeURIComponent(this.hospitalMapDetail.hospitalName);\r\n var mapUrl = `https://maps.google.com/maps?ll=${this.hospitalMapDetail.latitude},${this.hospitalMapDetail.longitude}&q=${encodedHospitalName}&hl=en&z=14&output=embed`;\r\n let iframe = document.createElement('iframe');\r\n iframe.setAttribute('src', mapUrl);\r\n iframe.setAttribute('width', '100%');\r\n iframe.setAttribute('height', '100%');\r\n iframe.setAttribute('style', 'border:0;');\r\n iframe.setAttribute('allowfullscreen', '');\r\n iframe.setAttribute('loading', 'lazy');\r\n iframe.setAttribute('referrerpolicy', 'no-referrer-when-downgrade');\r\n return iframe;\r\n }\r\n}\r\n\r\nexport function createCustomIconElement(iconUrl) {\r\n let iconElement = document.createElement('img');\r\n iconElement.src = iconUrl;\r\n iconElement.style.width = '40px'; // You can adjust based on the scaled size\r\n iconElement.style.height = '40px';\r\n return iconElement;\r\n }\r\n\r\n$(function() {\r\n\r\n function addExternalLinkIndicator() {\r\n // Select all social share buttons \r\n $('.st-btn').each(function() {\r\n // Get the network name from the data-network attribute\r\n const networkName = $(this).data('network') || '';\r\n \r\n if (!$(this).find('.fa-external-link-alt').length) { \r\n // Create the external link icon element\r\n const externalLinkIcon = $('<i></i>')\r\n .addClass('fas fa-external-link-alt fa-xs st-new-window-icon')\r\n .attr('aria-hidden', 'true');\r\n \r\n\r\n $(this).append(externalLinkIcon);\r\n }\r\n \r\n \r\n $(this).find('img').attr('aria-label', `${networkName} opens in a new window`);\r\n });\r\n }\r\n\r\n setTimeout(function() {\r\n addExternalLinkIndicator(); \r\n }, 1000);\r\n});\r\n","import uniqid from 'uniqid';\r\nimport isFunction from '@utils/is-function';\r\nimport { screenLgMin, screenLgMax } from '@utils/match-media';\r\nimport FocusTrap from '@utils/focus-trap';\r\nimport keyCodes from '@utils/key-codes';\r\nimport requestAnimationFrame from '@utils/request-animation-frame';\r\nimport { toggleSelector, menuSelector } from './mega-nav';\r\nimport { mobileMegaNav } from './mobile-mega-nav';\r\n\r\nconst $body = $(document.body);\r\nconst $window = $(window);\r\n\r\nconst CLASS_NAME_ACTIVE_TOGGLE = '-active';\r\nconst CLASS_NAME_ACTIVE_MENU = '-active';\r\n\r\nconst EVENT_KEY = '_megaNavItem_';\r\nconst EVENT_CLICK = `click.${EVENT_KEY}`;\r\nconst EVENT_KEYDOWN = `keydown.${EVENT_KEY}`;\r\nconst EVENT_RESIZE = `resize.${EVENT_KEY};`\r\n\r\nconst FOCUS_TRAP_OPTIONS = {\r\n allowBreakout: true,\r\n preventFocusOrigin: true,\r\n nextKeys: [ keyCodes.ARROW_RIGHT ],\r\n prevKeys: [ keyCodes.ARROW_LEFT ]\r\n}\r\n\r\nexport default class MegaNavItem {\r\n #active = false;\r\n #focusTrap = null;\r\n #toggleKey = null;\r\n\r\n constructor({ $toggle, $menu, matchHeight, transitionTime, topLevel }) {\r\n this.$toggle = $toggle;\r\n this.$menu = $menu;\r\n\r\n this.$parentMenu = this.$toggle.closest(menuSelector);\r\n this.$childToggles = this.$menu.find(toggleSelector);\r\n this.$childMenus = this.$menu.find(menuSelector);\r\n\r\n this.subscribers = {};\r\n\r\n this.id = uniqid.time('megaNavItem_');\r\n this.toggleId = `toggle_${this.id}`;\r\n\r\n this.EVENT_CLICK_INSTANCE = `${EVENT_CLICK}.${this.id}`;\r\n this.EVENT_KEYDOWN_INSTANCE = `${EVENT_KEYDOWN}.${this.id}`;\r\n this.EVENT_RESIZE_INSTANCE = `${EVENT_RESIZE}.${this.id}`;\r\n\r\n this.matchHeight = matchHeight || false;\r\n this.transitionTime = transitionTime || 0;\r\n this.topLevel = topLevel || false;\r\n\r\n this.init();\r\n }\r\n\r\n get active() {\r\n return this.#active;\r\n }\r\n\r\n set active(active) {\r\n this.#active = active;\r\n\r\n if(active) {\r\n this.$toggle.addClass(CLASS_NAME_ACTIVE_TOGGLE);\r\n this.$menu.addClass(CLASS_NAME_ACTIVE_MENU);\r\n\r\n this.toggleHeight();\r\n\r\n $body.on(this.EVENT_CLICK_INSTANCE, evt => this.onBodyClick(evt));\r\n $body.on(this.EVENT_KEYDOWN_INSTANCE, evt => this.onBodyKeydown(evt));\r\n\r\n this.afterTransition(() => {\r\n this.#focusTrap = new FocusTrap(this.$menu, {\r\n ...FOCUS_TRAP_OPTIONS,\r\n initialFocusIndex: this.#toggleKey === keyCodes.ARROW_UP ? -1 : 0,\r\n onBreakout: (evt, focusTrap) => this.onBreakout(evt, focusTrap)\r\n });\r\n\r\n this.toggleTopLevel();\r\n });\r\n } else {\r\n this.$menu.removeAttr('style');\r\n\r\n this.#focusTrap = this.#focusTrap?.destroy();\r\n\r\n $body.off(this.EVENT_CLICK_INSTANCE);\r\n $body.off(this.EVENT_KEYDOWN_INSTANCE);\r\n $window.off(this.EVENT_RESIZE_INSTANCE);\r\n\r\n this.afterTransition(() => {\r\n this.$toggle.removeClass(CLASS_NAME_ACTIVE_TOGGLE)\r\n this.$menu.removeClass(CLASS_NAME_ACTIVE_MENU);\r\n });\r\n }\r\n\r\n this.setupAccessibility();\r\n this.#publish();\r\n }\r\n\r\n afterTransition(callback) {\r\n if(isFunction(callback)) {\r\n const duration = screenLgMax.matches ? this.transitionTime : 0;\r\n setTimeout(callback, duration);\r\n }\r\n }\r\n\r\n init() {\r\n this.setupAccessibility();\r\n this.setupListeners();\r\n }\r\n\r\n hide(focusOrigin = false) {\r\n if(focusOrigin) {\r\n this.$toggle.get(0).focus();\r\n }\r\n\r\n this.active = false;\r\n }\r\n\r\n onBodyClick(evt) {\r\n const $origin = $(evt.target);\r\n if($origin.data('modal') == true) {\r\n evt.preventDefault();\r\n $('#menu-modal').modal('show');\r\n }\r\n if(!$origin.closest(this.$menu).length && !$origin.closest(this.$toggle).length) {\r\n if(screenLgMax.matches) {\r\n mobileMegaNav.afterTransition(() => this.hide());\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n }\r\n\r\n onBodyKeydown(evt) {\r\n const key = evt.which ? evt.which : evt.keyCode;\r\n if(key === keyCodes.ESCAPE) {\r\n const matches = this.#focusTrap.$focusable.filter((...[,el]) => el === evt.target );\r\n if(matches.length > 0) {\r\n this.hide(true);\r\n }\r\n }\r\n }\r\n\r\n onBreakout() {\r\n this.hide();\r\n }\r\n\r\n onToggleClick() {\r\n this.active = !this.active;\r\n }\r\n\r\n onToggleKeydown(evt) {\r\n this.#toggleKey = evt.which ? evt.which : evt.keyCode;\r\n if(this.#toggleKey === keyCodes.SPACE || this.#toggleKey === keyCodes.ARROW_DOWN || this.#toggleKey === keyCodes.ARROW_UP) {\r\n evt.preventDefault();\r\n\r\n this.show();\r\n }\r\n }\r\n\r\n onResize() {\r\n console.log(this, $window.outerHeight());\r\n }\r\n\r\n setupAccessibility() {\r\n this.$toggle.attr({\r\n 'aria-controls': this.id,\r\n 'aria-expanded': this.active,\r\n 'id': this.toggleId\r\n });\r\n\r\n this.$menu.attr({\r\n 'aria-hidden': !this.active,\r\n 'aria-labelledby': this.toggleId,\r\n 'id': this.id,\r\n 'role': 'region'\r\n });\r\n }\r\n\r\n setupListeners() {\r\n this.$toggle.on(EVENT_CLICK, evt => this.onToggleClick(evt));\r\n this.$toggle.on(EVENT_KEYDOWN, evt => this.onToggleKeydown(evt));\r\n }\r\n\r\n show() {\r\n this.active = true;\r\n }\r\n\r\n subscribe(fn) {\r\n if(!isFunction(fn)) {\r\n return null;\r\n }\r\n\r\n const id = uniqid.time('subscriber_');\r\n this.subscribers[id] = fn;\r\n\r\n return function() {\r\n delete this.subscribers[id];\r\n }.bind(this); // need to bind scope to MegaNavItem instance for unsubscriber\r\n }\r\n\r\n toggleHeight() {\r\n if(this.matchHeight && screenLgMin.matches) {\r\n const menu = this.$menu.get(0);\r\n const height = menu.offsetHeight;\r\n const scrollHeight = menu.scrollHeight;\r\n const matchedHeight = Math.max(height, scrollHeight);\r\n if(matchedHeight > 1){\r\n this.$parentMenu.outerHeight(matchedHeight);\r\n }\r\n\r\n const updateMenuHeight = () => {\r\n const offsetY = menu.getBoundingClientRect().top;\r\n const viewportY = $window.outerHeight();\r\n this.$parentMenu.css('max-height', viewportY - offsetY);\r\n\r\n // add scrollbar height if applicable\r\n const scrollbarHeight = menu.offsetHeight - menu.clientHeight;\r\n if(matchedHeight > 1){\r\n this.$parentMenu.outerHeight(matchedHeight + scrollbarHeight);\r\n }\r\n \r\n };\r\n\r\n updateMenuHeight();\r\n\r\n $window.on(this.EVENT_RESIZE_INSTANCE, () => requestAnimationFrame(() => updateMenuHeight()));\r\n }\r\n }\r\n\r\n toggleTopLevel() {\r\n if(this.topLevel && screenLgMin.matches) {\r\n this.$childToggles.eq(0).trigger('click');\r\n }\r\n }\r\n\r\n #publish() {\r\n Object.values(this.subscribers).forEach(fn => {\r\n fn(this); // pass this instance in sub function so parent has access\r\n });\r\n }\r\n}\r\n","import bsUtils from 'bootstrap/js/src/util';\r\nimport { screenLgMax } from '@utils/match-media';\r\nimport MegaNavItem from './mega-nav-item';\r\nimport * as templates from './tempates';\r\n\r\nconst EVENT_KEY = '_megaMenu_';\r\nconst EVENT_CLICK = `click.${EVENT_KEY}`;\r\n\r\nconst DATA_TOGGLE_SELECTOR = `[data-control=\"toggle\"]`;\r\nconst DATA_MENU_SELECTOR = `[data-region=\"menu\"]`;\r\n\r\nexport {\r\n DATA_TOGGLE_SELECTOR as toggleSelector,\r\n DATA_MENU_SELECTOR as menuSelector\r\n};\r\n\r\nexport default class MegaNav {\r\n #activeItems = [];\r\n\r\n constructor({ $el, data }) {\r\n this.$el = $el;\r\n\r\n this.data = data?.Data || {};\r\n this.labels = data.Labels || {};\r\n this.items = [];\r\n\r\n this.renderLazyNavItems();\r\n\r\n // ui controls\r\n this.$back = this.$el.find('[data-control=\"back\"]')\r\n this.$toggle = this.$el.find(DATA_TOGGLE_SELECTOR);\r\n\r\n // dynamic regions\r\n this.$inner = this.$el.find('[data-region=\"inner\"]');\r\n this.$menu = this.$el.find(DATA_MENU_SELECTOR);\r\n this.$nav = this.$el.find('[data-region=\"nav\"]');\r\n\r\n this.init();\r\n }\r\n\r\n get activeItems() {\r\n return this.#activeItems;\r\n }\r\n\r\n set activeItems(val) {\r\n this.#activeItems = val;\r\n\r\n this.updateState();\r\n }\r\n\r\n get isActive() {\r\n return this.#activeItems.length > 0;\r\n }\r\n\r\n init() {\r\n this.setupNavItems();\r\n this.setupListeners();\r\n this.checkListedItem();\r\n }\r\n\r\n checkListedItem() {\r\n let submenuList = $('.mega-nav__item.mega-nav__item-ul');\r\n\r\n submenuList.each((idx,list) => {\r\n let numOfListedItems = $(list).children('li').length;\r\n let item = $(list).find('li.mega-nav__submenu-item');\r\n\r\n if (numOfListedItems <= 3) {\r\n // VCA Canada has requested that all menus use the compact layout\r\n if (numOfListedItems == 1 || window.location.href.indexOf('vcacanada') > -1 || window.location.href.indexOf('vca.dev.ca') > -1) {\r\n $(item).addClass('single-col');\r\n } else if (numOfListedItems >= 2) {\r\n $(item).addClass('multi-col');\r\n }\r\n $(list).find('ul').addClass('d-flex flex-wrap list-unstyled flex-column adjust-max-height');\r\n $(list).find('ul li').addClass('add-margin');\r\n }\r\n });\r\n }\r\n\r\n onBackClick() {\r\n this.activeItems.at(-1).hide();\r\n }\r\n\r\n onNavItemToggle(megaNavItem) {\r\n const activeItems = [ ...this.activeItems ];\r\n if(megaNavItem.active) {\r\n activeItems.push(megaNavItem);\r\n } else {\r\n activeItems.pop();\r\n }\r\n this.activeItems = activeItems;\r\n }\r\n\r\n setupNavItems() {\r\n const transitionTime = bsUtils.getTransitionDurationFromElement(this.$inner.eq(0));\r\n this.$toggle.each(index => {\r\n this.items.push(\r\n new MegaNavItem({\r\n $toggle: this.$toggle.eq(index),\r\n $menu: this.$menu.eq(index),\r\n matchHeight: this.$toggle.eq(index).data('match-height') ?? false,\r\n topLevel: this.$toggle.eq(index).data('top-level') ?? false,\r\n transitionTime\r\n })\r\n );\r\n this.items[index].subscribe(navItem => this.onNavItemToggle(navItem));\r\n });\r\n }\r\n\r\n setupListeners() {\r\n this.$back.on(EVENT_CLICK, () => this.onBackClick());\r\n }\r\n\r\n renderLazyNavItems() {\r\n const $navItems = this.$el.find('[data-placeholder=\"navItem\"]');\r\n $navItems.each(index => {\r\n const $item = $navItems.eq(index);\r\n const prop = $item.data('property');\r\n const rootData = this.data[prop];\r\n\r\n if(rootData) {\r\n let navLevel = 0;\r\n\r\n /**\r\n * recursively render navigation items based on a consistently named parent -> children schema\r\n */\r\n const transformNavItems = ({ navItem, prevItemName }) => {\r\n let link = '';\r\n let submenu = '';\r\n\r\n if(navItem.Children && navItem.Children.length) {\r\n link = templates.subNavToggle({\r\n levelMod: navLevel ? `-l${navLevel}` : '',\r\n text: navItem.DisplayName,\r\n url: navItem.Url\r\n });\r\n\r\n let items = '';\r\n\r\n navLevel++;\r\n\r\n navItem.Children.forEach(item => {\r\n items += transformNavItems({\r\n navItem: item,\r\n prevItemName: navItem.DisplayName\r\n });\r\n });\r\n\r\n const subMenuContents = `\r\n ${templates.backNavItem({ text: prevItemName })}\r\n ${templates.headingNavItem({\r\n levelMod: navLevel ? `-l${navLevel}` : '',\r\n text: navItem.DisplayName,\r\n url: navItem.Url\r\n })}\r\n ${items}\r\n `;\r\n\r\n\r\n submenu = templates.subNav({\r\n content: subMenuContents,\r\n levelMod: navLevel ? `-l${navLevel}` : ''\r\n });\r\n\r\n navLevel--;\r\n } else if(navItem.Url) {\r\n link = templates.navItemLink({\r\n levelMod: navLevel ? `-l${navLevel}` : '',\r\n target: navItem.Target,\r\n text: navItem.DisplayName,\r\n url: navItem.Url\r\n });\r\n }\r\n\r\n return templates.navItem(\r\n link + submenu\r\n );\r\n }\r\n\r\n const markup = transformNavItems({\r\n navItem: rootData,\r\n prevItemName: this.labels.MainMenu\r\n });\r\n $item.replaceWith(markup);\r\n }\r\n });\r\n }\r\n\r\n updateState() {\r\n const count = this.activeItems.length;\r\n if(count && screenLgMax.matches) {\r\n this.$inner.css('transform', `translateX(-${count * 100}%)`);\r\n } else {\r\n this.$inner.removeAttr('style');\r\n }\r\n }\r\n}\r\n\r\nlet nav = null;\r\n\r\nconst el = document.querySelector('.js-mega-nav');\r\nif(el) {\r\n const dataId = el.dataset.id;\r\n const dataEl = document.getElementById(dataId);\r\n const data = dataEl ? JSON.parse(dataEl.innerHTML) : {};\r\n nav = new MegaNav({\r\n $el: $(el),\r\n data\r\n });\r\n}\r\n\r\nconst megaNavActive = () => nav.isActive;\r\n\r\nexport {\r\n megaNavActive\r\n};\r\n","import uniqid from 'uniqid';\r\nimport bsUtils from 'bootstrap/js/src/util';\r\nimport keyCodes from '@utils/key-codes';\r\nimport isFunction from '@utils/is-function';\r\nimport forceAsync from '@utils/force-async';\r\nimport FocusTrap from '@utils/focus-trap';\r\nimport { screenLgMax } from '@utils/match-media';\r\nimport { megaNavActive } from './mega-nav';\r\n\r\nconst $body = $('body');\r\n\r\nconst CLASS_NAME_OPEN = '-open';\r\nconst CLASS_NAME_NOSCROLL = 'noscroll';\r\n\r\nconst EVENT_KEY = '_mobileNav_';\r\nconst EVENT_CLICK = `click.${EVENT_KEY}`;\r\nconst EVENT_KEYDOWN = `keydown.${EVENT_KEY}`;\r\n\r\nconst FOCUS_TRAP_OPTIONS = {\r\n nextKeys: [ keyCodes.ARROW_RIGHT ],\r\n prevKeys: [ keyCodes.ARROW_LEFT ]\r\n};\r\n\r\nexport default class MobileMegaNav {\r\n #isOpen = false;\r\n #focusTrap = null;\r\n\r\n constructor({ $el }) {\r\n this.$el = $el;\r\n\r\n this.$toggle = this.$el.find('[data-control=\"mobileToggle\"]');\r\n this.$close = this.$el.find('[data-control=\"mobileClose\"]');\r\n\r\n this.id = uniqid.time('megaMenu_');\r\n this.isOpen = false;\r\n this.originEl = null;\r\n\r\n this.init();\r\n }\r\n\r\n get isOpen() {\r\n return this.#isOpen;\r\n }\r\n\r\n set isOpen(val) {\r\n this.#isOpen = val;\r\n\r\n if(val) {\r\n this.$el.addClass('d-block');\r\n\r\n // force DOM to reflow so next class added will trigger animation\r\n bsUtils.reflow(this.$el.get(0));\r\n this.$el.addClass(CLASS_NAME_OPEN);\r\n $body.addClass(CLASS_NAME_NOSCROLL);\r\n this.#focusTrap = new FocusTrap(this.$el, FOCUS_TRAP_OPTIONS);\r\n\r\n if ($('.hospital-header.header').length) {\r\n $('.hospital-header.header').css({'position':'relative', 'z-index':'unset'});\r\n }\r\n \r\n // force async to prevent possible issues with click event propagating right after this is set\r\n forceAsync(() => {\r\n $body.on(EVENT_CLICK, evt => this.onBodyClick(evt));\r\n });\r\n } else {\r\n this.$el.removeClass(CLASS_NAME_OPEN);\r\n $body.removeClass(CLASS_NAME_NOSCROLL);\r\n $body.off(EVENT_CLICK);\r\n this.#focusTrap = this.#focusTrap?.destroy();\r\n\r\n if ($('.hospital-header.header').length) {\r\n $('.hospital-header.header').css({'position':'sticky', 'z-index':'15'});\r\n }\r\n\r\n // wait until transition is finished to set focus and fully hide element\r\n this.afterTransition(() => {\r\n this.$el.removeClass('d-block');\r\n if(this.originEl) {\r\n this.originEl.focus();\r\n this.originEl = null;\r\n }\r\n });\r\n }\r\n\r\n this.$toggle.attr('aria-expanded', val);\r\n }\r\n\r\n afterTransition(callback) {\r\n if(isFunction(callback)) {\r\n const duration = bsUtils.getTransitionDurationFromElement(this.$el.get(0));\r\n setTimeout(callback, duration);\r\n }\r\n }\r\n\r\n addToggle($toggle) {\r\n this.$toggle.off(EVENT_CLICK);\r\n this.$toggle.push.apply(this.$toggle, $toggle);\r\n\r\n this.$toggle.on(EVENT_CLICK, evt => this.open(evt.currentTarget));\r\n this.setupAccessibility();\r\n }\r\n\r\n close() {\r\n this.isOpen = false;\r\n }\r\n\r\n init() {\r\n this.setupListeners();\r\n this.setupAccessibility();\r\n }\r\n\r\n onBodyClick(evt) {\r\n const $origin = $(evt.target);\r\n if(!$origin.closest(this.$el).length) {\r\n this.close();\r\n }\r\n }\r\n\r\n onBodyKeydown(evt) {\r\n const key = evt.which ? evt.which : evt.keyCode;\r\n if(key === keyCodes.ESCAPE && this.isOpen && !megaNavActive()) {\r\n this.close();\r\n }\r\n }\r\n\r\n /** only activate body level functionality while on a mobile device */\r\n onScreenChange(evt) {\r\n if(this.isOpen) {\r\n if(evt.matches) {\r\n this.$el.addClass(CLASS_NAME_OPEN);\r\n $body.addClass(CLASS_NAME_NOSCROLL);\r\n $body.on(EVENT_CLICK, evt => this.onBodyClick(evt));\r\n $body.on(EVENT_KEYDOWN, evt => this.onBodyKeydown(evt));\r\n } else {\r\n this.$el.removeClass(CLASS_NAME_OPEN);\r\n $body.removeClass(CLASS_NAME_NOSCROLL);\r\n $body.off(EVENT_CLICK);\r\n $body.off(EVENT_CLICK);\r\n }\r\n }\r\n }\r\n\r\n open(originEl) {\r\n // store element that triggered the nav\r\n if(originEl) {\r\n this.originEl = originEl;\r\n }\r\n\r\n this.isOpen = true;\r\n }\r\n\r\n setupAccessibility() {\r\n this.$el.attr('id', this.id);\r\n this.$toggle.attr({\r\n 'aria-expanded': this.isOpen,\r\n 'aria-controls': this.id\r\n });\r\n }\r\n\r\n setupListeners() {\r\n this.$close.on(EVENT_CLICK, () => this.close());\r\n screenLgMax.addEventListener('change', evt => this.onScreenChange(evt));\r\n\r\n if(screenLgMax.matches) {\r\n $body.on(EVENT_KEYDOWN, evt => this.onBodyKeydown(evt));\r\n }\r\n }\r\n}\r\n\r\nlet mobileMegaNav = null;\r\nconst el = document.querySelector('.js-mega-nav');\r\nif(el) {\r\n mobileMegaNav = new MobileMegaNav({\r\n $el: $(el)\r\n });\r\n \r\n const $toggler = $('.js-mega-nav-toggler');\r\n mobileMegaNav.addToggle($toggler);\r\n}\r\n\r\nexport {\r\n mobileMegaNav\r\n};\r\n","const backNavItem = ({ text }) => `\r\n <li class=\"mega-nav__header -subnav\">\r\n <button type=\"button\" class=\"mega-nav__back\" data-control=\"back\">\r\n ${text}\r\n </button>\r\n </li>\r\n`;\r\n\r\nconst headingNavItem = ({ levelMod, text, url }) => {\r\n const modifier = levelMod || '';\r\n const element = url ? 'a' : 'span';\r\n const href = url ? `href=\"${url}\"` : '';\r\n\r\n return `\r\n <li \r\n class=\"mega-nav__item -heading ${url ? '-isAnchor' : ''}\" \r\n ${!url ? 'aria-hidden=\"true\"' : ''}>\r\n\r\n <${element} \r\n ${href} \r\n class=\"mega-nav__link -heading ${modifier}\">\r\n\r\n ${text}\r\n </${element}>\r\n </li>\r\n `;\r\n};\r\n\r\nconst navItem = content => `\r\n <li class=\"mega-nav__item\">\r\n ${content}\r\n </li>\r\n`;\r\n\r\nconst navItemLink = ({ levelMod, target, text, url }) => {\r\n const modifier = levelMod || '';\r\n\r\n const attributes = [\r\n `href=\"${url}\"`,\r\n `class=\"mega-nav__link ${modifier}\"`,\r\n `target=\"${target || '_self'}\"`\r\n ].join(' ');\r\n\r\n return `\r\n <a ${attributes}>\r\n ${text}\r\n </a>\r\n `;\r\n};\r\n\r\nconst subNav = ({ content, levelMod } = {}) => {\r\n const modifier = levelMod || '';\r\n\r\n return `\r\n <div class=\"mega-nav__subnav ${modifier}\" data-region=\"menu\">\r\n <ul>\r\n ${content}\r\n </ul>\r\n </div>\r\n `;\r\n};\r\n\r\nconst subNavToggle = ({ levelMod, text, url }) => {\r\n const modifiers = [\r\n levelMod || '',\r\n url ? '-hasAnchor': ''\r\n ].join(' ');\r\n\r\n return `\r\n <button\r\n type=\"button\"\r\n class=\"mega-nav__link -subnav ${modifiers}\"\r\n data-control=\"toggle\">\r\n\r\n ${text}\r\n </button>`\r\n};\r\n\r\nexport {\r\n backNavItem,\r\n headingNavItem,\r\n navItem,\r\n navItemLink,\r\n subNav,\r\n subNavToggle\r\n};\r\n","(function (window) {\r\n\r\n var adaptiveMenu = function () {\r\n var menuStack = [];\r\n var ui = {};\r\n var isMobile;\r\n var SHOW_CSS = 'open';\r\n var OVERLAY = 'overlay';\r\n var NO_SCROLL = 'noscroll';\r\n var MEDIA_QUERY = '(max-width: 991px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$nav = $('.js-menu-wrap');\r\n ui.$hamburger = $('.js-mobile-menu-toggler');\r\n ui.$closeBtn = $('.js-close-btn');\r\n ui.$navToggler = $('.js-submenu-toggler');\r\n ui.$mobileClicktoggler = $('.has-children');\r\n ui.$backBtn = $('.js-black-btn');\r\n ui.$sidebar = $('.mega-menu-sidebar');\r\n ui.$megaSidebarNavItem = $('.js-sidebar-item');\r\n ui.$megaPanel = $('.mega-menu-panel');\r\n ui.$sidebarNavToggler = $('.js-sidebar-toggler');\r\n ui.$megaMenu = $('.mega-menu');\r\n ui.$bodyOpen = $('body.noscroll');\r\n ui.$simpleToggler = $('.mega-simple-dropdown .js-simplemenu-item');\r\n ui.$simpleDropDown = $('.mega-simple-dropdown .submenu-dropdown');\r\n }\r\n\r\n function showMobileMenu() {\r\n event.stopPropagation();\r\n ui.$nav.addClass(SHOW_CSS);\r\n ui.$body.addClass(NO_SCROLL);\r\n }\r\n\r\n function hideMobileMenu() {\r\n ui.$nav.removeClass(SHOW_CSS);\r\n ui.$body.removeClass(NO_SCROLL);\r\n ui.$nav.find('.active').removeClass('active');\r\n ui.$bodyOpen.off('click', hideMobileMenu);\r\n }\r\n\r\n function checkMenuOpen (e) {\r\n if(!ui.$body.hasClass(NO_SCROLL)) {\r\n return;\r\n }\r\n if (!$(e.target).closest(ui.$nav).length) {\r\n hideMobileMenu()\r\n }\r\n }\r\n\r\n function toggleSubNav(e) {\r\n if(e.which == 13) {\r\n var $target = $(e.target);\r\n var $parent = $target.closest('li');\r\n if ($parent.hasClass('active')){\r\n ui.$nav.find('.active').removeClass('active');\r\n }else {\r\n ui.$nav.find('.active').removeClass('active');\r\n $parent.addClass('active');\r\n }\r\n }\r\n }\r\n\r\n function closeMegaMenu(e) {\r\n ui.$nav.find('.active').removeClass('active');\r\n }\r\n\r\n function toggleSidebarPanel(e) {\r\n if(e.which == 13) {\r\n e.preventDefault();\r\n var targetData = $(e.target).attr(\"data-panel\");\r\n var $target = ui.$megaPanel.find(\"div[data-panel='\" + targetData + \"']\");\r\n var $sideBarItem = ui.$sidebar.find(\"a[data-panel='\" + targetData + \"']\");\r\n if ($target.hasClass('active')){\r\n ui.$megaSidebarNavItem.removeClass('active');\r\n ui.$megaPanel.find(\"div.panel-item\").removeClass('active');\r\n }else {\r\n ui.$megaPanel.find(\"div.panel-item\").removeClass('active');\r\n ui.$megaSidebarNavItem.removeClass('active');\r\n $sideBarItem.addClass('active');\r\n $target.addClass('active');\r\n }\r\n }\r\n }\r\n\r\n function toggleMobileSubNav(e) {\r\n if(mql.matches) {\r\n e.preventDefault();\r\n var $target = $(e.target);\r\n if(!$target.hasClass('js-sidebar-item')) {\r\n $target.siblings('.submenu-dropdown').addClass('active');\r\n }else {\r\n var targetData = $(e.target).attr(\"data-panel\");\r\n var $target = ui.$megaPanel.find(\"div[data-panel='\" + targetData + \"']\");\r\n console.log($target);\r\n $target.addClass('active');\r\n }\r\n }\r\n }\r\n\r\n function toggleMegaSimple(e) {\r\n if(!mql.matches) {\r\n e.preventDefault();\r\n var $target = $(e.target);\r\n $target.closest('li').toggleClass('active');\r\n $target.siblings('.submenu-dropdown').toggleClass('active');\r\n }\r\n }\r\n\r\n function mobileBackBtn(e) {\r\n if(mql.matches) {\r\n e.preventDefault();\r\n var $target = $(e.target);\r\n $target.closest('.submenu-dropdown').removeClass('active');\r\n }\r\n }\r\n\r\n function toggleSubPanel(e) {\r\n if(!mql.matches) {\r\n e.preventDefault();\r\n var target = $(e.target).attr(\"data-panel\");\r\n ui.$megaPanel.find(\"div.panel-item\").removeClass('active');\r\n ui.$megaSidebarNavItem.removeClass('active');\r\n $(e.target).addClass('active');\r\n ui.$megaPanel.find(\"div[data-panel='\" + target + \"']\").addClass('active');\r\n }\r\n }\r\n\r\n\r\n\r\n function handleMediaQueryChange(mql) {\r\n isMobile = mql.matches ? true : false;\r\n if (isMobile) {\r\n ui.$nav.find('.active').removeClass('active');\r\n } else {\r\n hideMobileMenu();\r\n }\r\n }\r\n\r\n function bindEvents() {\r\n ui.$hamburger.on('click', showMobileMenu);\r\n ui.$closeBtn.on('click', hideMobileMenu);\r\n ui.$body.on('click', checkMenuOpen);\r\n ui.$navToggler.on('keypress', toggleSubNav);\r\n ui.$sidebarNavToggler.on('keypress', toggleSidebarPanel);\r\n ui.$mobileClicktoggler.on('click', toggleMobileSubNav);\r\n ui.$backBtn.on('click', mobileBackBtn);\r\n ui.$megaSidebarNavItem.on('mouseenter', toggleSubPanel);\r\n ui.$simpleToggler.on('click', toggleMegaSimple)\r\n mql.addListener(handleMediaQueryChange);\r\n ui.$megaMenu.on('focusout', function(e) {\r\n if(!mql.matches) {\r\n var $currentMega = $(e.target).closest('.mega-menu');\r\n if ($currentMega.has(e.relatedTarget).length == 1) {\r\n // don't react to this\r\n return;\r\n }\r\n closeMegaMenu();\r\n }\r\n });\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n if(ui.$navToggler.length && ui.$megaMenu.length) {\r\n bindEvents();\r\n handleMediaQueryChange(mql);\r\n }\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n };\r\n\r\n var menu = adaptiveMenu();\r\n menu.init();\r\n})(window);\r\n","import MetadataUtils from \"../../utils/metadata-utils\";\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.CanonicalUrl = (function ($) {\r\n\r\n\tfunction setCanonicalUrl() {\r\n\t\tvar canonicalUrlTag = document.querySelector(\"link[rel='canonical']\");\r\n\t\tif(canonicalUrlTag === null)\r\n\t\t{\r\n\t\t\tlet metadataUtilsObj = new MetadataUtils();\r\n\t\t\tcanonicalUrlTag = metadataUtilsObj.CreateCanonicalUrlMetaElement();\r\n\t\t}\r\n\r\n\t\tif (canonicalUrlTag) {\r\n\t\t\tvar documentUrl = document.URL;\r\n\t\t\tif (documentUrl.includes(\"?utm_source\")) {\r\n\t\t\t\tcanonicalUrlTag.setAttribute(\"href\", documentUrl.split('?')[0]);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcanonicalUrlTag.setAttribute(\"href\", documentUrl);\r\n\t\t\t}\t\t\t\t\t\t \t\t\t\r\n\t\t}\t\r\n\r\n\t\t//35786: [SEO] Update Canonical Tags of Hospital-Level Know Your Pet Pages\r\n\t\tif (window.location.pathname.length > 1) {\r\n\t\t\tvar pathname = window.location.pathname;\r\n\t\t\tif (pathname.includes('/know-your-pet') && !pathname.startsWith('/know-your-pet')) {\r\n\t\t\t\tvar canonicalTag = document.querySelectorAll(\"link[rel='canonical']\");\r\n\t\t\t\tfor (var i = 0; i < canonicalTag.length; i++) {\r\n\t\t\t\t\tcanonicalTag[i].setAttribute(\"href\", window.location.origin + pathname.replace(pathname.substring(0, pathname.indexOf(\"/know-your-pet\")), \"\"));\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tsetCanonicalUrl: setCanonicalUrl\r\n\t};\r\n})(jQuery);\r\n\r\n// $(function (){\r\n// \tVCA.CanonicalUrl.setCanonicalUrl();\r\n// });","const context = {\r\n CartSubtotal: 'Cart Subtotal',\r\n CheckoutLink: {\r\n Url: '/shop/cart',\r\n Text: 'Checkout'\r\n },\r\n EmptyCartPrice: '-',\r\n Flavor: 'Flavor:',\r\n Items: '({0} items)',\r\n Packaging: 'Packaging:',\r\n Quantity: 'Qty',\r\n Remove: 'Remove',\r\n RxForm: 'Rx Form:',\r\n StrengthSize: 'Strength / Size:',\r\n StrengthSizeSupplies: 'Strength / Size Supplies:',\r\n Subscribe: 'Subscribe With Never Forget®',\r\n YourShoppingCartEmpty: 'Your Shopping Cart is Empty'\r\n};\r\n\r\nexport {\r\n context\r\n};\r\n","import priceString from '@utils/price-string';\r\nimport { context as defaultContext } from './mini-cart-defaults';\r\nimport template, { listItem } from './templates/mini-cart-line';\r\nimport store from '@stores/cart/cart-store';\r\nimport { exceptionBehaviorValues } from '../../stores/cart/cart-store';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n replaceOriginEl: false\r\n};\r\n\r\nexport default class MiniCartLine {\r\n constructor($originEl, context, data, options) {\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n\r\n this.context = { ...defaultContext, ...context };\r\n\r\n const $parsed = $( $.parseHTML(template) );\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n this.$quantityLabel = this.$el.find('[data-label=\"quantity\"]');\r\n this.$removeLabel = this.$el.find('[data-label=\"remove\"]');\r\n\r\n this.$attributes = this.$el.find('[data-region=\"attributes\"]');\r\n this.$autoship = this.$el.find('[data-region=\"autoship\"]');\r\n this.$autoshipIcon = this.$el.find('[data-region=\"autoshipIcon\"]');\r\n this.$image = this.$el.find('[data-region=\"image\"]');\r\n this.$name = this.$el.find('[data-region=\"name\"]');\r\n this.$link = this.$el.find('[data-region=\"link\"]');\r\n this.$price = this.$el.find('[data-region=\"price\"]');\r\n this.$strikethrough = this.$el.find('[data-region=\"strikethrough\"]');\r\n this.$quantity = this.$el.find('[data-region=\"quantity\"]');\r\n this.$subscribe = this.$el.find('[data-region=\"subscribe\"]');\r\n\r\n this.$removeCtrl = this.$el.find('[data-control=\"remove\"]');\r\n\r\n // backorder\r\n this.$outofstockLabel = this.$el.find('[data-label=\"outofstock\"]');\r\n this.$outofstockIcon = this.$el.find('[data-label=\"outofstockicon\"]');\r\n this.$outofstockRegion = this.$el.find('[data-region=\"outofstockregion\"]');\r\n\r\n this.data = data || {};\r\n this.lineId = data.lineId;\r\n\r\n // console.log('data1', data);\r\n // console.log('data2', data.backOrdered);\r\n this.backorder = data.backOrdered;\r\n // console.log('data3', this.backorder);\r\n\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderRegions();\r\n this.setupListeners();\r\n }\r\n\r\n onRemove() {\r\n store.actions.removeLine(this.lineId);\r\n }\r\n\r\n renderAttributes() {\r\n const attrs = store.getters.lineAttributes(this.lineId, {\r\n flavor: this.context.Flavor,\r\n packaging: this.context.Packaging,\r\n strengthSize: this.context.StrengthSize,\r\n strengthSizeSupplies: this.context.StrengthSizeSupplies,\r\n rxForm: this.context.RxForm\r\n });\r\n\r\n let attrsHtmlStr =\r\n attrs\r\n .map((attr) => listItem(attr.label, attr.value))\r\n .join('');\r\n\r\n const parsed = $.parseHTML(attrsHtmlStr);\r\n this.$attributes.html(parsed);\r\n }\r\n\r\n renderAutoship() {\r\n const iconUrl = this.context.AutoshipIcon;\r\n\r\n if(iconUrl) {\r\n const icon = document.createElement('img');\r\n icon.src = iconUrl;\r\n icon.alt = '';\r\n icon.setAttribute('aria-hidden', true);\r\n this.$autoshipIcon.html(icon);\r\n } else {\r\n this.$autoshipIcon.hide();\r\n }\r\n\r\n this.$subscribe.html(this.context.Subscribe);\r\n\r\n this.updateAutoship();\r\n }\r\n\r\n renderDetails() {\r\n const formattedPrice = priceString(this.data.listPrice);\r\n const formattedExceptionPrice = priceString(this.data.exceptionAmount);\r\n\r\n switch(this.data.exceptionBehavior) {\r\n case exceptionBehaviorValues.STRIKE_THROUGH:\r\n this.$price.html(formattedExceptionPrice);\r\n this.$strikethrough.html(formattedPrice);\r\n break;\r\n case exceptionBehaviorValues.REPLACE:\r\n this.$price.html(formattedExceptionPrice);\r\n this.$strikethrough.hide();\r\n break;\r\n default:\r\n this.$price.html(formattedPrice);\r\n this.$strikethrough.hide();\r\n }\r\n\r\n this.$quantity.html(this.data.quantity);\r\n }\r\n\r\n renderImages() {\r\n const imageUrl = this.data.image?.constrainedUrl;\r\n if(imageUrl) {\r\n const img = document.createElement('img');\r\n img.src = imageUrl;\r\n img.alt = this.data.image.alt;\r\n\r\n this.$image.html(img);\r\n }\r\n }\r\n\r\n renderLabels() {\r\n this.$quantityLabel.html(this.context.Quantity);\r\n this.$removeLabel.html(this.context.Remove);\r\n\r\n if(!this.backorder){\r\n this.$outofstockRegion.hide();\r\n }\r\n if(this.backorder){\r\n this.$removeLabel.addClass('text-color-vca-red');\r\n }\r\n this.$outofstockLabel.html(this.context.OutOfStock);\r\n let img = document.createElement('img');\r\n img.src = this.context.OutOfStockIcon;\r\n this.$outofstockIcon.html(img);\r\n }\r\n\r\n renderRegions() {\r\n this.$name.html(this.data.displayName);\r\n\r\n if(this.$link.is('a')) {\r\n this.$link.attr('href', this.data.productUrl);\r\n }\r\n\r\n this.renderAutoship();\r\n this.renderAttributes();\r\n this.renderDetails();\r\n this.renderImages();\r\n }\r\n\r\n setupListeners() {\r\n this.$removeCtrl.on('click', () => this.onRemove());\r\n }\r\n\r\n update(line) {\r\n const isAutoshipUpdated = this.data.autoshipFrequency !== line.autoshipFrequency;\r\n const isQtyUpdated = this.data.quantity !== line.quantity;\r\n\r\n this.data = line;\r\n\r\n if(isAutoshipUpdated)\r\n this.updateAutoship();\r\n if(isQtyUpdated)\r\n this.renderDetails();\r\n }\r\n\r\n updateAutoship() {\r\n if(this.data.autoshipFrequency) {\r\n this.$autoship.show();\r\n } else {\r\n this.$autoship.hide();\r\n }\r\n }\r\n}\r\n","import uniqid from 'uniqid';\r\nimport ReactiveComponent, { watch } from '@utils/reactive-component';\r\nimport FocusTrap from '@utils/focus-trap';\r\nimport keyCodes from '@utils/key-codes';\r\nimport parseRenderingContext from '@utils/parse-rendering-context';\r\nimport { countEl } from './templates/mini-cart-toggle';\r\nimport { context as defaultContext } from './mini-cart-defaults';\r\nimport MiniCart from './mini-cart';\r\nimport cartStore from '@stores/cart/cart-store';\r\nimport * as miniCartDatalayer from '@datalayer/components/mini-cart-datalayer';\r\n\r\nconst $document = $(document);\r\n\r\nconst CLASS_NAME_COUNT_VISIBLE = '-visible';\r\n\r\nconst EVENT_KEY = '_miniCartToggle_';\r\nconst EVENT_CLICK = `click.${EVENT_KEY}`;\r\nconst EVENT_KEYUP_ESCAPE = `keyup.${EVENT_KEY}`;\r\n\r\nconst DEFAULT_FOCUS_TRAP_OPTIONS = {\r\n allowBreakout: true,\r\n nextKeys: [ keyCodes.ARROW_DOWN ],\r\n prevKeys: [ keyCodes.ARROW_UP ]\r\n};\r\n\r\nexport default class MiniCartToggle extends ReactiveComponent {\r\n #focusTrap = null;\r\n\r\n constructor($el, context) {\r\n super();\r\n\r\n this.context = { ...defaultContext, ...context };\r\n\r\n this.$el = $el;\r\n this.$count = $(countEl);\r\n this.$menu = this.$el.find('[data-region=\"menu\"]');\r\n this.$toggleCtrl = this.$el.find('[data-control=\"toggle\"]');\r\n this.$miniCartPlaceholder = this.$el.find('[data-placeholder=\"miniCart\"]');\r\n\r\n this.id = uniqid.time('miniCartToggle_');\r\n this.miniCart = null;\r\n\r\n this.initialFocus = true;\r\n\r\n this.reactive({\r\n visible: false\r\n });\r\n }\r\n\r\n [watch]() {\r\n return {\r\n visible() {\r\n this.visible ? this.showMenu() : this.hideMenu();\r\n this.$toggleCtrl.attr('aria-expanded', this.visible);\r\n }\r\n }\r\n }\r\n\r\n init() {\r\n this.renderCount();\r\n this.setupAccessibility();\r\n this.setupMenu();\r\n this.setupListeners();\r\n }\r\n\r\n onKeyupEsc(key) {\r\n if(key === keyCodes.ESCAPE) {\r\n this.hide();\r\n }\r\n }\r\n\r\n onClickOut(evt) {\r\n const $target = $(evt.target);\r\n if(!$target.closest(this.$el).length) {\r\n this.hide();\r\n }\r\n }\r\n\r\n onToggleClick() {\r\n this.toggle();\r\n\r\n if(this.visible) {\r\n miniCartDatalayer.sendImpression();\r\n }\r\n }\r\n\r\n onToggleKeyup(key) {\r\n const keyIndex = [ keyCodes.ARROW_UP, keyCodes.ARROW_DOWN ].indexOf(key);\r\n if(keyIndex > -1 && !this.visible) {\r\n this.show();\r\n miniCartDatalayer.sendImpression();\r\n\r\n if(keyIndex) {\r\n if(this.#focusTrap?.$current.is(this.$toggleCtrl)) {\r\n this.#focusTrap.next();\r\n }\r\n } else {\r\n this.#focusTrap?.last();\r\n }\r\n }\r\n }\r\n\r\n renderCount() {\r\n this.$toggleCtrl.append(this.$count);\r\n }\r\n\r\n setFocusTrap() {\r\n this.#focusTrap = new FocusTrap(this.$el, {\r\n ...DEFAULT_FOCUS_TRAP_OPTIONS,\r\n initialFocus: this.initialFocus,\r\n onBreakout: () => this.hide()\r\n });\r\n }\r\n\r\n setupAccessibility() {\r\n this.$toggleCtrl.attr({ 'id': this.id, 'aria-expanded': false });\r\n }\r\n\r\n setupListeners() {\r\n this.$toggleCtrl.on('click', () => this.onToggleClick());\r\n this.$toggleCtrl.on('keyup', (evt) => this.onToggleKeyup(evt.which || evt.keyCode));\r\n\r\n cartStore.watch('lines', () => this.updateCount());\r\n }\r\n\r\n setupMenu() {\r\n this.miniCart = new MiniCart(this.$miniCartPlaceholder, this.context, {\r\n ariaLabelElementId: this.id,\r\n replaceOriginEl: true\r\n });\r\n\r\n this.miniCart.init();\r\n this.miniCart.render();\r\n }\r\n\r\n updateCount() {\r\n if(cartStore.getters.lines.length) {\r\n this.$count.addClass(CLASS_NAME_COUNT_VISIBLE).html(cartStore.getters.linesCount);\r\n } else {\r\n this.$count.removeClass(CLASS_NAME_COUNT_VISIBLE);\r\n }\r\n }\r\n\r\n focus(productInfo) {\r\n this.initialFocus = false;\r\n\r\n this.show();\r\n this.miniCart.focus(productInfo);\r\n\r\n this.initialFocus = true;\r\n }\r\n\r\n show() {\r\n this.visible = true\r\n }\r\n\r\n hide() {\r\n this.visible = false;\r\n }\r\n\r\n toggle() {\r\n this.visible = !this.visible;\r\n }\r\n\r\n showMenu() {\r\n this.$menu.fadeIn('fast');\r\n this.setFocusTrap();\r\n this.#focusTrap?.$focusable.on(EVENT_KEYUP_ESCAPE, (evt) => this.onKeyupEsc(evt.which || evt.keyCode));\r\n\r\n $document.on(EVENT_CLICK, (evt) => this.onClickOut(evt));\r\n }\r\n\r\n hideMenu() {\r\n this.$menu.fadeOut('fast');\r\n\r\n this.#focusTrap?.$focusable.off(EVENT_KEYUP_ESCAPE);\r\n this.#focusTrap = this.#focusTrap?.destroy() || null;\r\n\r\n $document.off(EVENT_CLICK);\r\n }\r\n}\r\n\r\nlet miniCartToggle = null;\r\n\r\n$(() => {\r\n const el = document.querySelector('.js-mini-cart-toggle');\r\n if(el) {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n miniCartToggle = new MiniCartToggle($el, renderingContext);\r\n miniCartToggle.init();\r\n const currentUrl = window.location.href;\r\n if (currentUrl.includes(\"/shop/checkout/\")) {\r\n $el.remove();\r\n }\r\n }\r\n});\r\n\r\nexport {\r\n miniCartToggle\r\n};\r\n","import AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport { context as defaultContext } from './mini-cart-defaults';\r\nimport template from './templates/mini-cart';\r\nimport store from '@stores/cart/cart-store';\r\nimport MiniCartLine from './mini-cart-line';\r\nimport forceAsync from '@utils/force-async';\r\nimport * as miniCartDatalayer from '@datalayer/components/mini-cart-datalayer';\r\n\r\nconst CLASS_NAME_IS_OVERFLOW = '-is-overflow';\r\n\r\nconst DATA_ATTRIBUTE_REFERENCE = 'data-ref';\r\nconst DATA_ATTRIBUTE_REGION = 'data-region';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n ariaLabelElementId: '',\r\n replaceOriginEl: false\r\n};\r\n\r\nconst LINE_ATTRIBUTE_VALUE = 'line';\r\n\r\nconst LINE_REFERENCE_SELECTOR = `[${DATA_ATTRIBUTE_REFERENCE}=${LINE_ATTRIBUTE_VALUE}]`;\r\nconst LINE_REGION_SELECTOR = `[${DATA_ATTRIBUTE_REGION}=${LINE_ATTRIBUTE_VALUE}]`;\r\n\r\nconst SCROLL_DURATION = 250;\r\n\r\nexport default class MiniCart {\r\n constructor($originEl, context, options) {\r\n options = { ...DEFAULT_OPTIONS, ...options};\r\n\r\n this.context = { ...defaultContext, ...context };\r\n\r\n const $parsed = $( $.parseHTML(template) );\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n this.$emptyLabel = this.$el.find('[data-label=\"empty\"]');\r\n this.$subtotalLabel = this.$el.find('[data-label=\"subtotal\"]');\r\n\r\n this.$checkout = this.$el.find('[data-region=\"checkout\"]');\r\n this.$empty = this.$el.find('[data-region=\"empty\"]');\r\n this.$items = this.$el.find('[data-region=\"items\"]');\r\n this.$lines = this.$el.find('[data-region=\"lines\"]');\r\n this.$price = this.$el.find('[data-region=\"price\"]');\r\n this.$loader = this.$el.find('[data-region=\"loader\"]');\r\n this.$scroll = this.$el.find('[data-region=\"scroll\"]');\r\n this.$upsell = this.$el.find('[data-region=\"upsell\"]');\r\n\r\n this.$lineRef = this.$el.find(LINE_REFERENCE_SELECTOR);\r\n\r\n this.$priceLoaderPlaceholder = this.$el.find('[data-placeholder=\"priceLoader\"]');\r\n\r\n this.isOverflow = false;\r\n this.loader = null;\r\n this.priceLoader = null;\r\n\r\n this.lines = [];\r\n this.lineItemNode = this.$lineRef.removeAttr(DATA_ATTRIBUTE_REFERENCE).get(0) || document.createElement('li');\r\n\r\n this.ariaLabelElementId = options.ariaLabelElementId;\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n }\r\n\r\n get itemsText() {\r\n return this.context.Items.replace('{0}', store.getters.linesCount);\r\n }\r\n\r\n async init() {\r\n this.$lineRef.remove();\r\n\r\n this.renderLabels();\r\n this.renderLinks();\r\n this.setupAccessibility();\r\n this.setupLoaders();\r\n await this.loadCart();\r\n\r\n this.setupListeners();\r\n }\r\n\r\n checkForScroll() {\r\n this.isOverflow = this.$scroll.get(0).scrollHeight > this.$scroll.height();\r\n\r\n if(this.isOverflow) {\r\n this.$el.addClass(CLASS_NAME_IS_OVERFLOW);\r\n } else {\r\n this.$el.removeClass(CLASS_NAME_IS_OVERFLOW);\r\n }\r\n }\r\n\r\n focus(productInfo) {\r\n const { productId, variantId } = productInfo || {};\r\n const index = store.state.rawLines.findIndex((line) => line.Product?.ProductId === productId && line.Product?.ProductVariantId === variantId);\r\n\r\n let focusEl = this.$checkout.get(0);\r\n\r\n if(index > -1) {\r\n focusEl = this.lines[index]?.$link?.get(0);\r\n if(focusEl) {\r\n forceAsync(() => {\r\n if(this.isOverflow) {\r\n this.$scroll.scrollTop(focusEl.offsetTop);\r\n }\r\n });\r\n }\r\n }\r\n var quickshop = document.getElementById('pdpQuickview');\r\n if(!!quickshop){\r\n focusEl?.focus();\r\n }else {\r\n $('html,body').animate({ scrollTop: 0 }, SCROLL_DURATION, () => {\r\n focusEl?.focus();\r\n });\r\n }\r\n }\r\n\r\n async loadCart() {\r\n if(!store.state.loaded) {\r\n const unsubscribe = store.watch('loaded', (...[,,loaded]) => {\r\n if(loaded) {\r\n this.onCartLoaded();\r\n unsubscribe();\r\n }\r\n });\r\n\r\n await store.actions.getCart();\r\n } else {\r\n this.onCartLoaded();\r\n }\r\n }\r\n\r\n onCartLoaded() {\r\n this.toggleEmptyCart();\r\n this.setupLines();\r\n this.renderLines();\r\n this.updateLineCount();\r\n this.updatePrice();\r\n this.updateLoadingState();\r\n this.updateUpsell();\r\n\r\n this.loader.active = false;\r\n this.$loader.hide();\r\n }\r\n\r\n removeDeletedLines(deletedLines = []) {\r\n const deleteAnimation = deletedLines.map((component) => {\r\n const $line = component.$el.closest(LINE_REGION_SELECTOR);\r\n $line.css('position', 'relative');\r\n\r\n return new Promise((resolve) => {\r\n $line.animate({ opacity: 0, right: $line.width() }, 'fast', () => {\r\n $line.slideUp('fast', () => {\r\n $line.remove();\r\n resolve();\r\n });\r\n });\r\n });\r\n });\r\n\r\n return new Promise((resolve) => {\r\n Promise.all(deleteAnimation).then(resolve);\r\n });\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n if(this.replaceOriginEl) {\r\n this.$originEl.replaceWith(this.$el);\r\n } else {\r\n this.$originEl.html(this.$el);\r\n }\r\n }\r\n\r\n return this.$el;\r\n }\r\n\r\n renderAddedLines() {\r\n store.getters.linesAdded.forEach((id) => {\r\n const index = store.getters.lineIds.indexOf(id);\r\n const prevIndex = index - 1;\r\n const component = this.lines[index];\r\n const lineItem = this.lineItemNode.cloneNode(false);\r\n\r\n component.init();\r\n lineItem.appendChild(component.$el.get(0));\r\n\r\n if (prevIndex > -1) {\r\n const prevComponent = this.lines[prevIndex];\r\n const $line = prevComponent.$el.closest(LINE_REGION_SELECTOR);\r\n $line.after(lineItem);\r\n } else {\r\n this.$lines.prepend(lineItem);\r\n }\r\n });\r\n }\r\n\r\n renderLabels() {\r\n this.$emptyLabel.html(this.context.YourShoppingCartEmpty);\r\n this.$items.html(this.itemsText);\r\n this.$subtotalLabel.html(this.context.CartSubtotal);\r\n }\r\n\r\n renderLines() {\r\n if(this.lines.length) {\r\n const fragment = document.createDocumentFragment();\r\n\r\n this.lines.forEach((component) => {\r\n const lineItem = this.lineItemNode.cloneNode(false);\r\n\r\n lineItem.appendChild(component.$el.get(0));\r\n fragment.appendChild(lineItem);\r\n });\r\n\r\n this.$lines.html(fragment);\r\n\r\n this.showLines();\r\n }\r\n }\r\n\r\n renderLinks() {\r\n if(this.context.CheckoutLink?.Url) {\r\n this.$checkout\r\n .attr('href', this.context.CheckoutLink.Url)\r\n .text(this.context.CheckoutLink.Text);\r\n } else {\r\n this.$checkout.hide();\r\n }\r\n }\r\n\r\n setupAccessibility() {\r\n this.$el.attr('aria-live', 'polite');\r\n if(this.ariaLabelElementId) {\r\n this.$lines.attr('aria-labelledby', this.ariaLabelElementId);\r\n }\r\n }\r\n\r\n setupLines() {\r\n store.getters.lines.forEach(line => {\r\n const component = new MiniCartLine(null, this.context, line);\r\n component.init();\r\n\r\n this.lines.push(component);\r\n });\r\n }\r\n\r\n setupListeners() {\r\n this.$checkout.on('click', () => miniCartDatalayer.sendCheckoutClick());\r\n\r\n store.watch('formattedMiniCartTotal', () => this.updatePrice());\r\n store.watch('freeShippingText', () => this.updateUpsell());\r\n store.watch('loadingLine', () => this.updateLoadingState());\r\n store.watch('rawLines', () => this.updateLineState());\r\n }\r\n\r\n setupLoaders() {\r\n this.loader = new AjaxLoader(this.$loader, {\r\n aria: false,\r\n replaceOriginEl: false,\r\n size: 'sm',\r\n visible: true\r\n });\r\n\r\n this.priceLoader = new AjaxLoader(this.$priceLoaderPlaceholder, {\r\n aria: false,\r\n size: 'xs',\r\n visible: true\r\n });\r\n }\r\n\r\n showLines() {\r\n if(this.$el.is(':visible')) {\r\n this.$lines.slideDown('fast', () => {\r\n this.checkForScroll();\r\n });\r\n } else {\r\n this.$lines.css('display', 'block');\r\n forceAsync(() => this.checkForScroll());\r\n }\r\n }\r\n\r\n toggleEmptyCart() {\r\n if(store.getters.isEmpty) {\r\n this.$empty.show();\r\n } else {\r\n this.$empty.hide();\r\n }\r\n } \r\n\r\n updateLineCount() {\r\n this.$items.html(this.itemsText);\r\n }\r\n\r\n updateUpsell() {\r\n if(store.state.freeShippingText) {\r\n this.$upsell.show().html(store.state.freeShippingText);\r\n } else {\r\n this.$upsell.hide();\r\n }\r\n }\r\n\r\n async updateLines() {\r\n const deletedLines = store.getters.linesRemoved.map((id) => {\r\n const index = store.state.cachedLineIds.indexOf(id);\r\n return this.lines[index];\r\n });\r\n\r\n this.lines =\r\n store.getters.lines\r\n .map((line) => {\r\n const prevLine = this.lines.find((prevLine) => prevLine.lineId === line.lineId);\r\n prevLine?.update(line);\r\n return prevLine || new MiniCartLine(null, this.context, line);\r\n });\r\n\r\n this.renderAddedLines();\r\n await this.removeDeletedLines(deletedLines);\r\n }\r\n\r\n async updateLineState() {\r\n this.updateLineCount();\r\n await this.updateLines();\r\n\r\n if(store.state.rawLines.length) {\r\n this.showLines();\r\n } else {\r\n this.$lines.hide();\r\n }\r\n\r\n this.toggleEmptyCart();\r\n }\r\n\r\n updateLoadingState() {\r\n const loading = !!store.state.loadingLine;\r\n if(loading) {\r\n this.$price.empty();\r\n }\r\n this.priceLoader.active = loading;\r\n }\r\n\r\n updatePrice() {\r\n const price = store.state.miniCartTotalFormatted ? store.getters.formattedMiniCartTotal : this.context.EmptyCartPrice;\r\n this.$price.html(price);\r\n }\r\n}\r\n","import template from './mini-cart-line.html';\r\n\r\nexport const listItem = (name, value) => {\r\n const title = name ? `\r\n <span class=\"mini-cart-line__title\">\r\n ${name}\r\n </span>\r\n `: '';\r\n\r\n return `\r\n <li class=\"mini-cart-line__item\">\r\n ${title}\r\n <span class=\"mini-cart-line__desc\">\r\n ${value}\r\n </span>\r\n </li>\r\n `;\r\n};\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"mini-cart-line\\\"> <a class=\\\"mini-cart-line__link\\\" data-region=\\\"link\\\"> <div class=\\\"mini-cart-line__header\\\"> <div class=\\\"mini-cart-line__img\\\" data-region=\\\"image\\\"></div> <div class=\\\"mini-cart-line__name\\\" data-region=\\\"name\\\"></div> </div> <div class=\\\"mini-cart-line__attributes\\\" data-region=\\\"attributes\\\"></div> <div class=\\\"mini-cart-line__autoship\\\" data-region=\\\"autoship\\\"> <span class=\\\"mini-cart-line__autoship-icon\\\" data-region=\\\"autoshipIcon\\\"></span> <span data-region=\\\"subscribe\\\"></span> </div> <div data-region=\\\"outofstockregion\\\"> <div class=\\\"out-of-stock-flag mb-3\\\"> <span class=\\\"out-of-stock-flag__icon\\\" data-label=\\\"outofstockicon\\\"></span> <span data-label=\\\"outofstock\\\"></span> </div> </div> <div class=\\\"mini-cart-line__details\\\"> <span class=\\\"mini-cart-line__price-wrapper\\\"> <span class=\\\"mini-cart-line__price\\\" data-region=\\\"price\\\"></span> <span class=\\\"mini-cart-line__strikethrough\\\" data-region=\\\"strikethrough\\\"></span> </span> <span class=\\\"mini-cart-line__qty\\\" data-label=\\\"quantity\\\"></span> <span data-region=\\\"quantity\\\"></span> </div> </a> <button type=\\\"button\\\" class=\\\"mini-cart-line__remove\\\" data-control=\\\"remove\\\"> <span data-label=\\\"remove\\\"></span> </button> </div> \";\n// Exports\nmodule.exports = code;","export const countEl = `<span class=\"mini-cart-toggle__count\"></span>`;\r\n","import template from './mini-cart.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"mini-cart\\\"> <div class=\\\"mini-cart__body\\\"> <div class=\\\"mini-cart__scroll\\\" data-region=\\\"scroll\\\"> <h2 class=\\\"mini-cart__empty\\\" data-region=\\\"empty\\\"> <span data-label=\\\"empty\\\"></span> </h2> <div class=\\\"mini-cart__loader\\\" data-region=\\\"loader\\\"></div> <ul class=\\\"mini-cart__lines\\\" data-region=\\\"lines\\\"> <li class=\\\"mini-cart__line\\\" data-ref=\\\"line\\\" data-region=\\\"line\\\"></li> </ul> </div> <hr class=\\\"mini-cart__divider\\\"/> <p class=\\\"mini-cart__subtotal\\\" aria-live=\\\"polite\\\" aria-atomic=\\\"true\\\"> <span class=\\\"mini-cart__subtotal-text\\\" role=\\\"text\\\"> <span class=\\\"mini-cart__title\\\"> <span data-label=\\\"subtotal\\\"></span> <span data-region=\\\"items\\\"></span> </span> <span class=\\\"mini-cart__price\\\"> <span data-placeholder=\\\"priceLoader\\\"></span> <span data-region=\\\"price\\\"></span> </span> </span> </p> </div> <div class=\\\"mini-cart__footer\\\"> <a class=\\\"mini-cart__btn btn btn-sky\\\" data-region=\\\"checkout\\\"> </a> <div class=\\\"mini-cart__upsell\\\" data-region=\\\"upsell\\\"> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\nvar VCA = VCA || {};\r\n\r\n\r\nVCA.mobilePeekSlider = (function ($) {\r\n\r\n var ui = {};\r\n var MEDIA_QUERY = '(max-width: 767px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n var started = false;\r\n\r\n function init() {\r\n cacheUI();\r\n mobilePeekSlider();\r\n mobilePeekSliderKyp();\r\n }\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$statsSlider = $('.js-mobile-peek');\r\n ui.$statsSliderKyp = $('.js-mobile-peek-kyp')\r\n }\r\n\r\n function mobilePeekSlider() { \r\n if (mql.matches) {\r\n var statsSlider = ui.$statsSlider.each(function (index, element) {\r\n $(this).addClass('js-mobile-peek' + index);\r\n var item_length = $('.js-mobile-peek' + index + ' > div').length;\r\n if (item_length > 1 && !isExperienceEditor) {\r\n $('.js-mobile-peek' + index).slick({\r\n autoplay: false,\r\n infinite: true,\r\n arrows: false,\r\n dots: false,\r\n initialSlide: 0,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n adaptiveHeight: true,\r\n focusOnChange: true,\r\n accessibility: true,\r\n mobileFirst: true,\r\n responsive: [{\r\n breakpoint: 767,\r\n settings: \"unslick\"\r\n }]\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n function mobilePeekSliderKyp() { \r\n if (mql.matches) {\r\n var statsSliderKyp = ui.$statsSliderKyp.each(function (index, element) {\r\n $(this).addClass('js-mobile-peek-kyp' + index);\r\n var item_length = $('.js-mobile-peek-kyp' + index + ' > div').length;\r\n if (item_length > 1 && !isExperienceEditor) {\r\n $('.js-mobile-peek-kyp' + index).slick({\r\n autoplay: false,\r\n infinite: true,\r\n arrows: false,\r\n dots: false,\r\n initialSlide: 0,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n adaptiveHeight: true,\r\n variableWidth: true,\r\n focusOnChange: true,\r\n accessibility: true,\r\n mobileFirst: true,\r\n responsive: [{\r\n breakpoint: 767,\r\n settings: \"unslick\"\r\n }]\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.mobilePeekSlider.init();\r\n});","$(function () {\r\n // Iterate over each promo wrapper\r\n \r\n $('.js-promo-wrapper').each(function () {\r\n \r\n const $wrapper = $(this);\r\n const $nextBtn = $wrapper.find('.js-multi-nxt-btn');\r\n const $prevBtn = $wrapper.find('.js-multi-prev-btn');\r\n const $carousel = $wrapper.find('.js-multi-carousel');\r\n\r\n function debounce(func, delay) {\r\n let timeout;\r\n return function () {\r\n const context = this;\r\n const args = arguments;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => func.apply(context, args), delay);\r\n };\r\n }\r\n\r\n const debounceUpdateButtonVisibility = debounce(updateButtonVisibility, 100);\r\n\r\n $carousel.on('scroll', debounceUpdateButtonVisibility);\r\n\r\n $nextBtn.on('click', function () {\r\n $carousel.animate({\r\n scrollLeft: '+=' + 300\r\n }, 1000, function () {\r\n updateButtonVisibility();\r\n });\r\n });\r\n\r\n $prevBtn.on('click', function () {\r\n $carousel.animate({\r\n scrollLeft: '-=' + 300\r\n }, 1000, function () {\r\n updateButtonVisibility();\r\n });\r\n });\r\n\r\n function updateButtonVisibility() {\r\n let viewportWidth = $(window).width();\r\n if (viewportWidth > 767) {\r\n if ($carousel.scrollLeft() === 0) {\r\n $prevBtn.hide();\r\n } else {\r\n $prevBtn.show();\r\n }\r\n \r\n if ($carousel.scrollLeft() >= $carousel.prop('scrollWidth') - $carousel.outerWidth() - 1) {\r\n $nextBtn.hide();\r\n } else {\r\n $nextBtn.show();\r\n }\r\n } else {\r\n $prevBtn.hide();\r\n $nextBtn.hide();\r\n }\r\n }\r\n\r\n let viewportWidth = $(window).width();\r\n if (viewportWidth < 767) {\r\n $prevBtn.hide();\r\n $nextBtn.hide();\r\n return;\r\n }\r\n\r\n $(window).on('resize', updateButtonVisibility);\r\n\r\n updateButtonVisibility();\r\n });\r\n});","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\nvar VCA = VCA || {};\r\n\r\n\r\nVCA.mutliPromo = (function ($) {\r\n\r\n var ui = {};\r\n\r\n var MEDIA_QUERY = '(max-width: 767px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n var isExperienceEditor = $('#sitecore-page-mode').attr('data-attribute');\r\n\r\n function init() {\r\n cacheUI();\r\n initmutliPromoMobileSlider();\r\n }\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$multiPromoSlider = $('.js-multi-promo');\r\n }\r\n\r\n function initmutliPromoMobileSlider() {\r\n if (mql.matches) {\r\n var promoSlider = ui.$multiPromoSlider.each(function (index, element) {\r\n $(this).addClass('js-multi-promo' + index);\r\n var item_length = $('.js-multi-promo' + index + ' > div').length;\r\n var startItem = 1;\r\n if (item_length > 1 && !isExperienceEditor) {\r\n $('.js-multi-promo' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: false,\r\n dots: false,\r\n initialSlide: startItem,\r\n centerMode: true,\r\n centerPadding: '20px',\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n focusOnChange: true,\r\n accessibility: true,\r\n mobileFirst: true,\r\n responsive: [{\r\n breakpoint: 767,\r\n settings: \"unslick\"\r\n }]\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.mutliPromo.init();\r\n});","import getHospitals from '@api/routes/myvca-api/get-hospitals'\r\nimport getChallenge from '@api/routes/myvca-api/get-challenge';\r\nimport confirmChallenge from '@api/routes/myvca-api/confirm-challenge';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.AccountChangeHospital = (function ($) {\r\n\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n // controls\r\n ui.$hospitalSerachBtn = $('[data-control=\"hospitalSerachBtn\"]');\r\n ui.$selectHospitalBtn = $('[data-control=\"selectHospitalBtn\"]');\r\n ui.$setHopital = $('[data-control=\"setHopital\"]');\r\n ui.$submitChallenge = $('[data-control=\"submitChallenge\"]');\r\n ui.$editHospitalSelection = $('[data-control=\"editHospitalSelection\"]');\r\n ui.$loader = $('[data-control=\"loader\"]');\r\n //regions\r\n ui.$challengeAddress = $('[data-region=\"challengeAddress\"]');\r\n ui.$challengeAddress = $('[data-region=\"challengeAddress\"]');\r\n ui.$missingAddressWrapper = $('[ data-region=\"missingAddressWrapper\"]');\r\n ui.$petSelectorBox = $('[data-region=\"petSelectorBox\"]');\r\n ui.$hospitalResults = $('[data-region=\"hospitalResults\"]');\r\n ui.$hospitalName = $('[data-region=\"hospitalName\"]');\r\n // message areas\r\n ui.$noTesultsFound = $('[data-message=\"noTesultsFound\"]');\r\n // inputs\r\n ui.$missingAddresInput = $('[data-input=\"missingAddresInput\"]');\r\n ui.$hospitalSearchInput = $('[data-input=\"hospitalSearchInput\"]');\r\n // sections\r\n ui.$hopitalSections = $('.myvca-account-box');\r\n ui.$selectHospitalSec = $('[data-seciton=\"selectHospital\"]');\r\n ui.$verifyHospitalSec = $('[data-seciton=\"verifyHospital\"]');\r\n ui.$hospitalSuccessSec = $('[data-seciton=\"hospitalSuccess\"]');\r\n ui.$changeErrorSec = $('[data-seciton=\"changeError\"]');\r\n\r\n\r\n //other\r\n ui.token = $('input[name=\"__RequestVerificationToken\"]').val();\r\n ui.$DataSourceId = $('input[name=\"DatasourceId\"]').val();\r\n ui.isCanada = $('[data-iscanada]').attr('data-iscanada');\r\n ui.$Step1Radius = accountFAHRadius;\r\n ui.$Step1Geocoder;\r\n ui.$Step1CurrentLat;\r\n ui.$Step1CurrentLng;\r\n ui.$Step1Bounds;\r\n ui.$Step1Coordinates = {};\r\n ui.$Fired = true;\r\n ui.$SelectedHospitalName;\r\n ui.SelectedHospitalID;\r\n\r\n //challenge \r\n\r\n ui.clientId;\r\n ui.challengeResponseId;\r\n ui.addressChallengeId;\r\n ui.addressChallengeAnswer;\r\n ui.petNameChallengeId;\r\n ui.petNameChallengeAnswer;\r\n\r\n }\r\n\r\n function init() {\r\n if ($('.js-myvca-change-hospital').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n let statusValue = urlParams.get(\"status\");\r\n\r\n if(window.location.href.match(/\\?./) && statusValue == 'success'){\r\n ui.$hopitalSections.hide();\r\n ui.$hospitalSuccessSec.show();\r\n cancelLoader();\r\n }\r\n else{\r\n ui.$hopitalSections.hide();\r\n ui.$selectHospitalSec.show();\r\n bindListeners();\r\n bindHospitalSelect();\r\n bindPetSelect();\r\n }\r\n \r\n }\r\n\r\n function bindListeners() {\r\n ui.$hospitalSerachBtn.on('click', () => {startSearch()});\r\n ui.$hospitalSearchInput.on('keyup', (e) => {checkForEnter(e)});\r\n ui.$selectHospitalBtn.on('click', () => {checkIfUserExisit()});\r\n ui.$submitChallenge.on('click', () => {postChallengeAnswers()});\r\n ui.$editHospitalSelection.on('click', () => {editHospital()});\r\n }\r\n\r\n function checkForEnter(e) {\r\n if (e.keyCode === 13) {\r\n startSearch();\r\n }\r\n }\r\n\r\n function startSearch() {\r\n let address = ui.$hospitalSearchInput.val();\r\n\r\n let countryAddress = address;\r\n if (isCanada) {\r\n countryAddress = address + ', Canada';\r\n } else {\r\n countryAddress = address + ', USA';\r\n }\r\n\r\n // ui.$hospitalSearchInput.removeClass('error');\r\n // ui.$hospitalSearchInput.parent().find('.input-error-text').hide();\r\n\r\n initGeocoder(countryAddress);\r\n }\r\n function initGeocoder(address) {\r\n let lookUpAddress = address;\r\n\r\n ui.$noTesultsFound.hide();\r\n ui.$selectHospitalBtn.addClass('disabled');\r\n // ui.$Step1AcctFahContainer.css('border', 'none').show();\r\n // ui.$Step1LoaderSpinner.show();\r\n\r\n //****** GEOCODER *******\r\n ui.$Step1Geocoder = new google.maps.Geocoder();\r\n ui.$Step1Geocoder.geocode({\r\n 'address': lookUpAddress\r\n }, function (results, status) {\r\n if (status == 'OK') {\r\n ui.$Step1CurrentLat = results[0].geometry.location.lat();\r\n ui.$Step1CurrentLng = results[0].geometry.location.lng();\r\n ui.$Step1Coordinates = getSearchBounds();\r\n getHospitalsList(ui.$Step1Coordinates);\r\n } else {\r\n console.log('Geocode was not successful for the following reason: ' + status);\r\n ui.$hospitalResults.html('').hide();\r\n ui.$noTesultsFound.show();\r\n // ui.$Step1AcctFahInvalidZipCodeErrMsg.show();\r\n ui.$Fired = true;\r\n }\r\n });\r\n }\r\n\r\n function getSearchBounds() {\r\n ui.$Step1Bounds = getBounds(ui.$Step1CurrentLat, ui.$Step1CurrentLng, ui.$Step1Radius);\r\n let coordinatesResult = calcMinMaxLatLng(ui.$Step1Bounds);\r\n\r\n return coordinatesResult;\r\n }\r\n\r\n function getBounds(lat, lng, radius) {\r\n let ConvertedRadius = radius * 1609.34;\r\n\r\n // add to canada site\r\n if(ui.isCanada === 'true'){\r\n ConvertedRadius = radius * 1000;\r\n }\r\n\r\n var circleData = {\r\n center: {\r\n lat,\r\n lng\r\n },\r\n radius: ConvertedRadius\r\n };\r\n\r\n if (window['google']) {\r\n return new window['google'].maps.Circle(circleData).getBounds();\r\n }\r\n }\r\n\r\n function calcMinMaxLatLng(bounds) {\r\n var obj = {\r\n minLat: bounds.getNorthEast().lat(),\r\n maxLat: bounds.getSouthWest().lat(),\r\n minLng: bounds.getNorthEast().lng(),\r\n maxLng: bounds.getSouthWest().lng()\r\n }\r\n return obj;\r\n }\r\n\r\n async function getHospitalsList(coordinates) {\r\n\r\n searchLoading();\r\n\r\n let payload = {\r\n minLat: coordinates.minLat,\r\n maxLat: coordinates.maxLat,\r\n minLong: coordinates.minLng,\r\n maxLong: coordinates.maxLng,\r\n }\r\n\r\n const { success, data, error } = await getHospitals.query(payload);\r\n let hosptialList = data\r\n console.log('Response: ',hosptialList);\r\n if(!success){\r\n ui.$hopitalSections.hide();\r\n cancelLoader();\r\n ui.$changeErrorSec.show();\r\n console.log('failed', error);\r\n return;\r\n }else if(hosptialList === undefined || hosptialList == null || hosptialList.length <= 0){\r\n ui.$hospitalResults.html('').hide();\r\n ui.$noTesultsFound.show();\r\n cancelLoader()\r\n }else{\r\n let hospitalsAry = '';\r\n $.each(hosptialList, function (i, item) {\r\n hospitalsAry += `\r\n <div class=\"myvca-change-hospital__hospital-list__item form-check custom-radio\">\r\n <input data-hospitalid=\"${item.HospitalId}\" data-name=\"${item.DisplayName}\" name=\"hospital-result\" id=\"${item.HospitalId}\" value=\"${item.DisplayName}\" class=\"form-check-input custom-control-input js-hospital-item\" type=\"radio\">\r\n <label class=\"form-check-label\" for=\"${item.HospitalId}\">\r\n ${item.DisplayName}\r\n </label>\r\n </div>\r\n `;\r\n });\r\n ui.$hospitalResults.html(hospitalsAry).show();\r\n cancelLoader()\r\n }\r\n }\r\n\r\n async function checkIfUserExisit() {\r\n startLoader();\r\n let payload = {\r\n hospitalId: ui.SelectedHospitalID\r\n }\r\n const { success, data, error } = await getChallenge.query(payload);\r\n if(!success){\r\n ui.$hopitalSections.hide();\r\n cancelLoader();\r\n console.log('failed', error);\r\n\r\n if(error != null || error != '') {\r\n ui.$changeErrorSec.find('h5').text(error);\r\n }\r\n ui.$changeErrorSec.show();\r\n return;\r\n }\r\n let response = data\r\n // console.log('challenge' , response);\r\n if (response.ChallengeResponse != null && response.ChallengeResponse.petNameChallenge != null) {\r\n if(response.ChallengeResponse.addressChallenge != null){\r\n ui.addressChallengeId = response.ChallengeResponse.addressChallenge.id;\r\n let n = response.ChallengeResponse.addressChallenge.gapLength;\r\n let spaces = new Array(++n).join('*');\r\n let address = response.ChallengeResponse.addressChallenge.preGap + spaces + response.ChallengeResponse.addressChallenge.postGap;\r\n ui.$challengeAddress.text(address);\r\n }else{\r\n ui.$missingAddresInput.val('null');\r\n ui.$missingAddressWrapper.hide();\r\n }\r\n ui.clientId = response.ClientId;\r\n ui.challengeResponseId = response.ChallengeResponse.id;\r\n ui.petNameChallengeId = response.ChallengeResponse.petNameChallenge.id;\r\n\r\n //console.log('pet' , response.petNameChallenge.choices);\r\n\r\n ui.$petSelectorBox.empty();\r\n let petsChoices = response.ChallengeResponse.petNameChallenge.choices\r\n let petInputs = '';\r\n $.each(petsChoices, function (i, name) {\r\n petInputs += `\r\n <div class=\"form-label-group\">\r\n <div class=\"form-check custom-radio\">\r\n <input class=\"form-check-input custom-control-input\" type=\"radio\" name=\"petName\" id=\"${name}\" value=\"${name}\">\r\n <label class=\"form-check-label\" for=\"${name}\">\r\n ${name}\r\n </label>\r\n </div>\r\n </div>\r\n `;\r\n });\r\n ui.$petSelectorBox.html(petInputs);\r\n\r\n ui.$hopitalSections.hide();\r\n ui.$verifyHospitalSec.show();\r\n cancelLoader();\r\n\r\n \r\n }else{\r\n ui.$hopitalSections.hide();\r\n cancelLoader();\r\n console.log('failed', error);\r\n\r\n if(error != null || error != '') {\r\n ui.$changeErrorSec.find('h5').text(error);\r\n }\r\n ui.$changeErrorSec.show();\r\n console.log('failed', error);\r\n return;\r\n }\r\n\r\n }\r\n\r\n async function postChallengeAnswers() {\r\n startLoader();\r\n\r\n let axiosConfig = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\r\n }\r\n }\r\n\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n\r\n let payload = {\r\n hospitalId: ui.SelectedHospitalID,\r\n clientId: ui.clientId,\r\n challengeSetId: ui.challengeResponseId,\r\n addressChallengeId: ui.addressChallengeId,\r\n addressChallengeAnswer: ui.addressChallengeAnswer,\r\n petNameChallengeId: ui.petNameChallengeId,\r\n petNameChallengeAnswer: ui.petNameChallengeAnswer,\r\n '__RequestVerificationToken': ui.token\r\n }\r\n console.log('payload post',payload);\r\n const { success, data, error } = await confirmChallenge.post(searchParams(payload), axiosConfig);\r\n let response = data;\r\n\r\n if(!success){\r\n ui.$hopitalSections.hide();\r\n cancelLoader();\r\n if(error != null || error != '') {\r\n ui.$changeErrorSec.find('h5').text(error);\r\n }\r\n ui.$changeErrorSec.show();\r\n console.log('failed', error);\r\n return;\r\n }\r\n else {\r\n var newUrl = window.location.href + \"&status=success\";\r\n window.location.href = newUrl;\r\n }\r\n }\r\n\r\n function editHospital() {\r\n ui.$hopitalSections.hide();\r\n ui.$selectHospitalSec.show();\r\n ui.$submitChallenge.addClass('disabled');\r\n ui.$missingAddresInput.val('');\r\n }\r\n\r\n function bindHospitalSelect() {\r\n ui.$hospitalResults.on('click', 'input', function (e) {\r\n if ($(e.target).is(':checked')) {\r\n ui.$hospitalName.text(e.target.value);\r\n ui.$SelectedHospitalName = e.target.value;\r\n ui.SelectedHospitalID = e.target.dataset.hospitalid;\r\n ui.$selectHospitalBtn.removeClass('disabled');\r\n }else{\r\n return;\r\n }\r\n });\r\n }\r\n\r\n function bindPetSelect() {\r\n ui.$verifyHospitalSec.on('change keyup', 'input', function (e) {\r\n if (ui.$missingAddresInput.val().length == '') {\r\n ui.$submitChallenge.addClass('disabled');\r\n }else if(ui.$petSelectorBox.find('input:checked').length <= 0){\r\n ui.$submitChallenge.addClass('disabled');\r\n }else{\r\n ui.$submitChallenge.removeClass('disabled');\r\n ui.addressChallengeAnswer = ui.$missingAddresInput.val();\r\n ui.petNameChallengeAnswer = ui.$petSelectorBox.find('input:checked').val();\r\n }\r\n });\r\n }\r\n\r\n function searchLoading() {\r\n ui.$noTesultsFound.hide();\r\n ui.$selectHospitalBtn.addClass('disabled');\r\n ui.$hospitalResults.html('').hide();\r\n startLoader();\r\n }\r\n\r\n function startLoader() {\r\n ui.$loader.show();\r\n ui.$hopitalSections.addClass('-loading');\r\n }\r\n\r\n function cancelLoader() {\r\n ui.$loader.hide();\r\n ui.$hopitalSections.removeClass('-loading');\r\n }\r\n\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.AccountChangeHospital.init();\r\n});","import updatePrimary from '@api/routes/myvca-api/update-primary-contact';\r\nimport updateAddress from '@api/routes/myvca-api/update-primary-address';\r\nimport updateEmergency from '@api/routes/myvca-api/update-emergency-contact';\r\nimport resetPassword from '@api/routes/myvca-api/send-password-reset';\r\nimport ApiService from '@api/api-service';\r\n\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.AccountPreferences = (function ($) {\r\n\r\n var ui = {};\r\n let generalPwFinalValue = '';\r\n let haveOneNumValid = false;\r\n let haveOneUppercaseValid = false;\r\n var isUserManagement = false;\r\n let haveOneLowercaseValid = false;\r\n let haveOneSpecialCharValid = false;\r\n let have8MinCharValid = false;\r\n let confirmPwFinalValue = '';\r\n let passwordValidAndMatched = false;\r\n let config = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\r\n }\r\n }\r\n\r\n function cacheUI() {\r\n ui.$tabswrapper = $('.js-myvca-tabs');\r\n ui.$editBtn = $('.js-edit-info');\r\n ui.$cancelBtn = $('.js-cancel-edits');\r\n ui.$submitBtn = $('.js-submit-password');\r\n ui.$changePasswordBtn = $('.js-change-password');\r\n ui.token = $('input[name=\"__RequestVerificationToken\"]').val();\r\n ui.dataSourcedId = window.datasourceId;\r\n ui.loader = $('.ajax-loader');\r\n ui.$confirmPassword = $('.js-mismatch-password');\r\n ui.$confirmPasswordModal = $('.js-comfrim-update-password');\r\n ui.$changePasswordInput = $('.change-password-input');\r\n ui.$PasswordEyeIcon = $('.password-eye-icon');\r\n }\r\n\r\n function init() {\r\n ui.$IsChangePwdFeatureEnabled = $('#IsChangePwdFeatureEnabled').val();\r\n isUserManagement = (ui.$IsChangePwdFeatureEnabled == \"1\");\r\n if ($('.myvca-account-pref').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindEditItem();\r\n bindEvents();\r\n bindCancelItem();\r\n bindChangePassword();\r\n bindsubmititem();\r\n closeConfirmationPopup();\r\n hideAccountPassword();\r\n }\r\n\r\n function bindEvents() {\r\n ui.$changePasswordInput.on('focus', showTooltipModal);\r\n ui.$changePasswordInput.on('blur', hideTooltipModal);\r\n ui.$changePasswordInput.on('input', validatePassword);\r\n ui.$changePasswordInput.on('paste', function (e) {\r\n e.preventDefault();\r\n });\r\n ui.$PasswordEyeIcon.on('click', togglePassword);\r\n }\r\n\r\n function validatePassword() {\r\n let currentPassword = $('#currentPassword').val();\r\n let password = $('#newPassword').val();\r\n let confirmPassword = $('#confirmPassword').val();\r\n if(currentPassword == '' || password == '' || confirmPassword == '') {\r\n ui.$submitBtn.addClass('disabled');\r\n } else {\r\n ui.$submitBtn.removeClass('disabled');\r\n }\r\n let passwordInput = this;\r\n let inputType = $(passwordInput).data('type');\r\n if (inputType == 'general-password'){\r\n let generalPwValue = $(passwordInput).val();\r\n $(passwordInput).attr('value', generalPwValue);\r\n generalPwFinalValue = generalPwValue;\r\n\r\n // Have one number\r\n const oneNumRegex = /\\d/;\r\n const hasOneNum = generalPwValue.match(oneNumRegex);\r\n let hasOneNumCircle = $('#PwOneNumber').siblings('.fill-circle');\r\n\r\n if (hasOneNum) {\r\n $(hasOneNumCircle).addClass('active');\r\n haveOneNumValid = true;\r\n } else {\r\n $(hasOneNumCircle).removeClass('active'); \r\n haveOneNumValid = false;\r\n }\r\n\r\n //Have one uppercase character\r\n const oneUppercaseChar = /[A-Z]/;\r\n const hasOneUppercaseChar = generalPwValue.match(oneUppercaseChar);\r\n let hasOneUppercaseCircle = $('#PwOneUppercaseChar').siblings('.fill-circle');\r\n\r\n if (hasOneUppercaseChar) {\r\n $(hasOneUppercaseCircle).addClass('active');\r\n haveOneUppercaseValid = true;\r\n } else {\r\n $(hasOneUppercaseCircle).removeClass('active');\r\n haveOneUppercaseValid = false;\r\n }\r\n\r\n //Have one lowercase character\r\n const oneLowercaseChar = /[a-z]/;\r\n const hasOneLowercaseChar = generalPwValue.match(oneLowercaseChar);\r\n let hasOneLowercaseCircle = $('#PwOneLowercaseChar').siblings('.fill-circle');\r\n\r\n if (hasOneLowercaseChar) {\r\n $(hasOneLowercaseCircle).addClass('active');\r\n haveOneLowercaseValid = true;\r\n } else {\r\n $(hasOneLowercaseCircle).removeClass('active');\r\n haveOneLowercaseValid = false;\r\n }\r\n\r\n //Have one special chracter\r\n const oneSpecialChar = /[ `!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?~]/;\r\n const hasOneSpecialChar = generalPwValue.match(oneSpecialChar);\r\n let hasOneSpecialCircle = $('#PwOneSpecialChar').siblings('.fill-circle');\r\n\r\n if (hasOneSpecialChar) {\r\n $(hasOneSpecialCircle).addClass('active');\r\n haveOneSpecialCharValid = true;\r\n } else {\r\n $(hasOneSpecialCircle).removeClass('active');\r\n haveOneSpecialCharValid = false;\r\n }\r\n\r\n //Have 8 characters min\r\n const min8Char = /^(?=.*\\d).{8,}$/;\r\n const hasMin8Char = generalPwValue.match(min8Char);\r\n let hasMin8CharCircle = $('#PwMin8Char').siblings('.fill-circle');\r\n\r\n if (hasMin8Char) {\r\n $(hasMin8CharCircle).addClass('active');\r\n have8MinCharValid = true;\r\n } else {\r\n $(hasMin8CharCircle).removeClass('active');\r\n have8MinCharValid = false;\r\n }\r\n\r\n //Use case to see if passwords match\r\n let pwMatchCircle = $('#PasswordsMatch').siblings('.fill-circle');\r\n if (confirmPwFinalValue.trim() !== '' && generalPwFinalValue.trim() !== '' && confirmPwFinalValue == generalPwFinalValue) {\r\n $(pwMatchCircle).addClass('active');\r\n\r\n if (haveOneNumValid && haveOneUppercaseValid && haveOneLowercaseValid && haveOneSpecialCharValid && have8MinCharValid) {\r\n ui.$Password = generalPwValue;\r\n passwordValidAndMatched = true;\r\n }\r\n } else {\r\n $(pwMatchCircle).removeClass('active');\r\n passwordValidAndMatched = false;\r\n }\r\n } \r\n\r\n if (inputType == 'confirm-password'){\r\n let confirmPwValue = $(passwordInput).val();\r\n let passwordsMatchCircle = $('#PasswordsMatch').siblings('.fill-circle');\r\n $(passwordInput).attr('value', confirmPwValue);\r\n confirmPwFinalValue = confirmPwValue;\r\n\r\n if (confirmPwFinalValue.trim() !== '' && generalPwFinalValue.trim() !== '' && confirmPwFinalValue == generalPwFinalValue) {\r\n $(passwordsMatchCircle).addClass('active');\r\n\r\n if (haveOneNumValid && haveOneUppercaseValid && haveOneLowercaseValid && haveOneSpecialCharValid && have8MinCharValid) {\r\n ui.$Password = confirmPwValue;\r\n passwordValidAndMatched = true;\r\n }\r\n } else {\r\n $(passwordsMatchCircle).removeClass('active');\r\n passwordValidAndMatched = false;\r\n }\r\n }\r\n \r\n }\r\n\r\n function togglePassword() {\r\n // toggle the type attribute\r\n let passwordInput = $(this).closest('.form-label-group').find('.change-password-input');\r\n const type = $(passwordInput).attr('type') === 'password' ? 'text' : 'password';\r\n console.log(type,'type')\r\n $(passwordInput).attr('type', type);\r\n // toggle the eye slash icon\r\n $(this).toggleClass('fa-eye-slash');\r\n }\r\n\r\n\r\n function hideAccountPassword() {\r\n document.querySelectorAll('.toggle-password').forEach(item => {\r\n item.addEventListener('click', function () {\r\n const target = this.getAttribute('data-target');\r\n const passwordField = document.getElementById(target);\r\n const type = passwordField.getAttribute('type') === 'password' ? 'text' : 'password';\r\n passwordField.setAttribute('type', type);\r\n this.textContent = type === 'password' ? 'ðŸ‘ï¸' : 'ðŸ‘ï¸â€ðŸ—¨ï¸';\r\n });\r\n });\r\n }\r\n\r\n function bindEditItem() {\r\n ui.$tabswrapper.on('click', '.js-edit-info', function (e) {\r\n e.preventDefault();\r\n $(this).hide();\r\n parent = $(this).closest('.js-myvca-account-box');\r\n parent.find('.js-myvca-account').hide();\r\n parent.find('.js-myvca-account-error-message').hide();\r\n parent.find('.js-myvca-account-contact-form').show();\r\n parent.find('.js-submit-edits').show();\r\n parent.find('.js-cancel-edits').show();\r\n });\r\n }\r\n\r\n function updateInputAfterCancel(editBtn) {\r\n let parent = $(editBtn).closest('.myvca-account-box');\r\n $(parent).find('.form-label-group').each((idx,el) => {\r\n let originalValue = $(el).find('input.acctpref-hidden-input').val();\r\n $(el).find('.js-required').val(originalValue);\r\n $(el).find('.js-required').html(originalValue);\r\n });\r\n }\r\n\r\n function removeErrorMessages(cancelBtn) {\r\n let parent = $(cancelBtn).closest('.myvca-account-box');\r\n $(parent).find('.form-label-group').each((idx,el) => {\r\n $(el).removeClass('error');\r\n $(el).find('input.js-required').removeClass('error');\r\n });\r\n }\r\n\r\n function bindCancelItem() {\r\n ui.$tabswrapper.on('click', '.js-cancel-edits', function (e) {\r\n e.preventDefault();\r\n $(this).hide();\r\n parent = $(this).closest('.js-myvca-account-box');\r\n parent.find('.js-myvca-account-contact-form').hide();\r\n updateInputAfterCancel(this);\r\n removeErrorMessages(this);\r\n parent.find('.js-submit-edits').hide();\r\n parent.find('.js-myvca-account').show();\r\n parent.find('.js-edit-info').show();\r\n parent.find('.js-myvca-password').show();\r\n parent.find('.js-change-password').show();\r\n parent.find('.js-myvca-account-error-message').hide();\r\n document.querySelector('#currentPassword').type = 'password';\r\n document.querySelector('#newPassword').type = 'password';\r\n document.querySelector('#confirmPassword').type = 'password';\r\n });\r\n }\r\n\r\n function bindChangePassword() {\r\n let currentPassword = $('#currentPassword').val();\r\n let password = $('#newPassword').val();\r\n let confirmPassword = $('#confirmPassword').val();\r\n if(currentPassword == '' || password == '' || confirmPassword == '') {\r\n ui.$submitBtn.addClass('disabled');\r\n } else {\r\n ui.$submitBtn.removeClass('disabled');\r\n }\r\n ui.$tabswrapper.on('click', '.js-change-password', function (e) {\r\n e.preventDefault();\r\n let parent = $(this).closest('.js-myvca-account-box');\r\n parent.find('.js-change-password').hide();\r\n parent.find('.js-myvca-account-contact-form').hide();\r\n parent.find('.js-cancel-edits').show();\r\n parent.find('.js-submit-edits').show();\r\n parent.find('.js-myvca-password').hide();\r\n parent.find('.js-myvca-account-error-message').hide();\r\n ui.$confirmPassword.html('Please enter valid confirm password');\r\n if(isUserManagement) {\r\n parent.find('.js-myvca-account-contact-form').show();\r\n parent.find('.notIsUsermgmt').hide();\r\n $('.input-label-wrapper').find('.password-eye-icon').addClass('fa-eye-slash');\r\n } else {\r\n parent.find('.js-myvca-account-contact-form').hide();\r\n parent.find('.js-submit-edits').hide();\r\n parent.find('.notIsUsermgmt').show();\r\n parent.find('.js-myvca-account').show();\r\n parent.find('.js-edit-info').show();\r\n parent.find('.js-myvca-password').show();\r\n parent.find('.js-change-password').show();\r\n sendChangePasswordEmail(parent);\r\n }\r\n });\r\n }\r\n\r\n function bindsubmititem() {\r\n ui.$tabswrapper.on('click', '.js-submit-edits', function (e) {\r\n e.preventDefault();\r\n parent = $(this).closest('.js-myvca-account-box');\r\n if(!checkform(parent)){\r\n return;\r\n }\r\n else {\r\n parent.append(ui.loader);\r\n ui.loader.show();\r\n if(parent.data('type') == 'primary'){\r\n updatePrimaryContact(parent);\r\n }else if(parent.data('type') == 'address'){\r\n updatePrimaryAddress(parent);\r\n }else if(parent.data('type') == 'accountPassword'){\r\n updateAccountPassword(parent);\r\n document.querySelector('#currentPassword').type = 'password';\r\n document.querySelector('#newPassword').type = 'password';\r\n document.querySelector('#confirmPassword').type = 'password';\r\n $('.input-label-wrapper').find('.password-eye-icon').addClass('fa-eye-slash');\r\n }else{\r\n updateEmergencyContact(parent);\r\n }\r\n\r\n }\r\n });\r\n }\r\n\r\n function checkform(parent) {\r\n var mailFormat = /(^[a-zA-Z0-9_.]+[@]{1}[a-zA-Z0-9\\-]+[\\.][a-zA-Z]+$)/;\r\n var phoneReg = /^(?:((\\s?\\(\\d{3}\\)\\s?|\\s?\\d{3}\\s?)\\-?\\d{3}\\s?\\-?\\d{4}$))/;\r\n var textReg = /^[a-zA-Z0-9 -]{2,60}$/;\r\n var zipReg = /^(\\d{5})(?:-?(\\d{4}))?$/;\r\n var passwordReg = /^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!%#@])[a-zA-Z\\d!%#@]{8,}$/;\r\n\r\n let valid = true;\r\n let newPasswordVal;\r\n let confirmPasswordVal;\r\n\r\n parent.find('input').each(function(index) {\r\n let el = $(this);\r\n var elmId = el.attr(\"name\");\r\n if (el.hasClass('js-required')) {\r\n if (elmId == 'phone') {\r\n let phone = el.val();\r\n if (!phoneReg.test(phone)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else if (elmId == 'email') {\r\n let email = el.val();\r\n if (!mailFormat.test(email)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else if (elmId == 'firstName' || elmId == 'lastName') {\r\n let inputText = el.val();\r\n if (!textReg.test(inputText)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }else if (elmId == 'zip') {\r\n let inputZip = el.val();\r\n if (!zipReg.test(inputZip)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else if (elmId == 'newPassword' || elmId == 'confirmPassword') {\r\n let inputPassword = el.val();\r\n if(elmId == 'newPassword') {\r\n newPasswordVal = el.val();\r\n } else if (elmId == 'confirmPassword') {\r\n confirmPasswordVal = el.val();\r\n }\r\n if (!passwordReg.test(inputPassword)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n if(newPasswordVal !== confirmPasswordVal) {\r\n if (elmId == 'confirmPassword') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n ui.$confirmPassword.html('Password does not match');\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n } else {\r\n if (el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n }\r\n });\r\n parent.find('select').each(function(index) {\r\n let el = $(this);\r\n if (el.hasClass('js-required')) {\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n });\r\n\r\n return valid;\r\n }\r\n\r\n function showTooltipModal(e) {\r\n let pwInputEl = $(e.currentTarget);\r\n pwInputEl.closest('.form-label-group').find('.password-tooltip').show(); \r\n }\r\n\r\n function hideTooltipModal(e) {\r\n let pwInputEl = $(e.currentTarget);\r\n pwInputEl.closest('.form-label-group').find('.password-tooltip').hide(); \r\n }\r\n\r\n function updateInfo(parent) {\r\n let updateItems = parent.find('.js-myvca-account');\r\n parent.find('input').each(function(index) {\r\n let elValue = $(this).val();\r\n let elName = $(this).data('item');\r\n updateItems.find('[data-item=\"' + elName +'\"]').text(elValue);\r\n });\r\n parent.find('select').each(function(index) {\r\n let elValue = $(this).val();\r\n let elName = $(this).data('item');\r\n updateItems.find('[data-item=\"' + elName +'\"]').text(elValue);\r\n });\r\n parent.find('.js-myvca-account-contact-form').hide();\r\n parent.find('.js-cancel-edits').hide();\r\n parent.find('.js-submit-edits').hide();\r\n parent.find('.js-myvca-account').show();\r\n parent.find('.js-edit-info').show();\r\n ui.loader.hide();\r\n }\r\n\r\n function failedUpdate(parent) {\r\n parent.find('.js-myvca-account-contact-form').hide();\r\n parent.find('.js-submit-edits').hide();\r\n parent.find('.js-cancel-edits').hide();\r\n parent.find('.js-myvca-account').show();\r\n parent.find('.js-edit-info').show();\r\n parent.find('.js-myvca-account-error-message').show();\r\n ui.loader.hide();\r\n }\r\n\r\n async function sendChangePasswordEmail(parent) {\r\n const url = '/myvca-api/send-password-reset';\r\n let api = new ApiService(url);\r\n let params = {\r\n '__RequestVerificationToken': ui.token,\r\n 'datasourceId': ui.dataSourcedId\r\n };\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n\r\n params = searchParams(params);\r\n //(params);\r\n\r\n parent.append(ui.loader);\r\n ui.loader.show();\r\n\r\n const { success, data, error } = await api.post(params, config);\r\n //(data);\r\n\r\n if(!success || !data){\r\n ('failed', error);\r\n parent.find('.js-myvca-account-error-message').show();\r\n ui.loader.hide();\r\n\t\t return;\r\n }\r\n //(params);\r\n //(success);\r\n ui.loader.hide();\r\n }\r\n\r\n async function updateAccountPassword(parent) {\r\n parent.find('.js-myvca-account-error-message').hide();\r\n let params = {\r\n '__RequestVerificationToken': ui.token,\r\n 'datasourceId': ui.dataSourcedId\r\n };\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n params.currentPassword = parent.find('#currentPassword').val();\r\n params.password = parent.find('#newPassword').val();\r\n params = searchParams(params);\r\n //(params);\r\n\r\n parent.append(ui.loader);\r\n ui.loader.show();\r\n\r\n const { success, data, error } = await resetPassword.post(params, config);\r\n\r\n //(data);\r\n\r\n if(!success || !data){\r\n ('failed', error);\r\n parent.find('.js-myvca-account-error-message').show();\r\n parent.find('.js-myvca-account-error-message').find('[data-region=\"passwordResponseMsg\"]').html(error)\r\n ui.loader.hide();\r\n\t\t return;\r\n }\r\n //(params);\r\n //(success);\r\n ui.loader.hide();\r\n $('#update-account-password').modal('show');\r\n parent.find('.js-submit-edits').hide();\r\n parent.find('.js-cancel-edits').hide();\r\n parent.find('.js-myvca-account-contact-form').hide();\r\n parent.find('.js-myvca-password').show();\r\n parent.find('.js-change-password').show();\r\n parent.find('#currentPassword').val('');\r\n parent.find('#newPassword').val('');\r\n parent.find('#confirmPassword').val('');\r\n $(this).toggleClass('fa-eye-slash');\r\n }\r\n\r\n async function updatePrimaryContact(parent) {\r\n let params = getPrarms(parent);\r\n\r\n // ('params', params);\r\n\r\n const { success, data, error } = await updatePrimary.post(params, config);\r\n\r\n // (data);\r\n\r\n if(!success || !data){\r\n ('failed', error);\r\n failedUpdate(parent);\r\n\t\t return;\r\n }\r\n // (params);\r\n // (success);\r\n updateInfo(parent);\r\n\r\n }\r\n\r\n async function updatePrimaryAddress(parent) {\r\n let params = getPrarms(parent);\r\n\r\n const { success, data, error } = await updateAddress.post(params, config);\r\n // (data);\r\n\r\n if(!success || !data){\r\n failedUpdate(parent);\r\n\t\t return;\r\n }\r\n // (params);\r\n // (success);\r\n updateInfo(parent);\r\n }\r\n\r\n function closeConfirmationPopup() {\r\n ui.$confirmPasswordModal.on('click', function (e) {\r\n e.preventDefault();\r\n $('#update-account-password').modal('hide');\r\n $('.js-myvca-account-error-message').hide();\r\n\r\n });\r\n }\r\n\r\n async function updateEmergencyContact(parent) {\r\n let params = getPrarms(parent);\r\n\r\n const { success, data, error } = await updateEmergency.post(params, config);\r\n\r\n // (data);\r\n\r\n if(!success || !data){\r\n failedUpdate(parent);\r\n\t\t return;\r\n }\r\n // (params);\r\n // (success);\r\n updateInfo(parent);\r\n }\r\n\r\n function getPrarms(parent) {\r\n let params = {\r\n '__RequestVerificationToken': ui.token\r\n };\r\n parent.find('input').each(function (index) {\r\n let elValue = $(this).val();\r\n let elName = $(this).attr('name');\r\n if(elName == 'phone') {\r\n elValue = elValue.replace(/[()-\\s]/g, '');\r\n }\r\n params[elName] = elValue;\r\n });\r\n parent.find('select').each(function (index) {\r\n let elValue = $(this).val();\r\n let elName = $(this).attr('name');\r\n params[elName] = elValue;\r\n });\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n\r\n params = searchParams(params)\r\n\r\n return params;\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.AccountPreferences.init();\r\n});","import Invoices from '@api/routes/myvca-api/careclub-invoices';\r\nimport ApiService from '@api/api-service';\r\n//import mock from './mock-pdf-response.json';\r\n\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.CareclubInvoice = (function ($) {\r\n var ui = {};\r\n let page = 0;\r\n let invoiceCount = 0;\r\n let invoiceTotal = 0;\r\n\r\n function cacheUI() {\r\n ui.$invoiceWrapper = $('.js-careclub-invoices');\r\n ui.$loadMore = $('.js-load-more-invoices');\r\n ui.$invoiceList = $('.js-invoice-list');\r\n ui.$invoiceListError = $('.js-invoice-list-error');\r\n ui.$invoiceListEmpty = $('.js-invoice-list-empty');\r\n ui.loader = $('.ajax-loader');\r\n }\r\n\r\n function init() {\r\n if ($('.js-careclub-invoices').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n initGetInvoices();\r\n bindloadMoreClick();\r\n bindGetInvoiceClick();\r\n }\r\n\r\n async function initGetInvoices() {\r\n\r\n ui.loader.show();\r\n var params = {\"Page\": page};\r\n \r\n const { success, data, error } = await Invoices.post(params);\r\n if(!success){\r\n console.log('failed', error);\r\n $('.js-error-message-text').text(error);\r\n ui.$invoiceListError.show();\r\n ui.loader.hide();\r\n return;\r\n }\r\n else if(data.TotalCount == 0) {\r\n ui.loader.hide();\r\n ui.$invoiceListEmpty.show();\r\n }else{\r\n invoiceTotal = data.TotalCount;\r\n page = data.CurrentPage + 1;\r\n createInvoiceList(data.Invoices);\r\n }\r\n\r\n };\r\n\r\n\r\n function createInvoiceList(invoices) {\r\n\r\n let invoiceList = '';\r\n\r\n var count = Object.keys(invoices).length;\r\n invoiceCount += count;\r\n\r\n $.each(invoices, function (i, item) {\r\n\r\n invoiceList += `\r\n <div class=\"myvca-account-list__item\" data-invoiceid=\"${item.Id}\">\r\n <div class=\"myvca-account-list__item__date\">\r\n ${item.Date}\r\n </div>\r\n <div class=\"myvca-account-list__item__desc\">\r\n ${item.PetName}\r\n </div>\r\n <div class=\"myvca-account-list__item__total\">\r\n ${item.Amount}\r\n </div>\r\n <button class=\"myvca-account-list__item__icon hidden js-inoice-btn\" data-invoiceid=\"${item.Id}\">\r\n <svg width=\"100%\" height=\"auto\" viewBox=\"0 0 48 68\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <title>PDF Icon</title>\r\n <g id=\"UI-Kit\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g id=\"UI-Kit---Icons\" transform=\"translate(-1096.000000, -5073.000000)\" fill-rule=\"nonzero\">\r\n <g id=\"VCA_Iconography-KIT-RGB_download-pdf\" transform=\"translate(1096.000000, 5073.000000)\">\r\n <path d=\"M47.1395278,18.8481009 L47.1395278,18.8133259 C47.0477443,18.6445807 46.9471439,18.4807826 46.838144,18.3226112 C46.7879134,18.2491972 46.7299549,18.1796471 46.6758604,18.1062331 C46.6217659,18.0328191 46.5483519,17.92463 46.4749379,17.8396244 C46.4015239,17.7546187 46.324246,17.6734769 46.250832,17.5923351 C46.177418,17.5111933 46.1271873,17.4570988 46.0615011,17.3914125 L46.0151344,17.3450458 L32.7619748,2.32222231 C32.6537857,2.19084988 32.5378689,2.06334135 32.4180881,1.93583281 L32.3949047,1.90878555 L32.3949047,1.90878555 L32.2944435,1.80446039 L32.2326212,1.73877417 C32.1592072,1.66922406 32.0819293,1.61126564 32.0085152,1.54557943 C31.9351012,1.47989321 31.9003262,1.44511816 31.8423678,1.39875142 L31.5255284,1.16305383 L31.3632448,1.04713698 C31.2473279,0.969859081 31.1314111,0.900308972 31.0116304,0.830758863 L30.8493468,0.738025385 C30.7257021,0.672339171 30.6020575,0.614380747 30.4629573,0.556422323 L30.2929459,0.479144424 C30.1693013,0.425049895 30.0379288,0.382547051 29.9065564,0.336180312 L29.7210894,0.274357993 C29.5935809,0.235719044 29.4622085,0.204807884 29.3347,0.173896725 C29.2686842,0.153529398 29.2016113,0.136761178 29.1337774,0.123666091 C28.9946772,0.0966188261 28.855577,0.0772993515 28.7164768,0.0579798768 L28.523282,0.0309326123 C28.3184956,0.0309326123 28.1137092,1.06888912e-05 27.9050588,1.06888912e-05 L6.26724721,1.06888912e-05 C4.60747745,-0.00305536159 3.01452154,0.653600545 1.83907475,1.82542389 C0.663627954,2.99724723 0.00205713957,4.58816822 4.80063603e-06,6.24793956 L4.80063603e-06,6.24793956 L4.80063603e-06,57.34795 C-0.00205366607,59.0096924 0.657951603,60.6037985 1.83406897,61.7777405 C3.01018634,62.9516826 4.60551148,63.6087356 6.26724721,63.6035959 L19.0181005,63.6035959 L22.9979123,67.5911355 C23.5476962,68.1362882 24.4341703,68.1362882 24.9839543,67.5911355 L28.963766,63.6035959 L41.7146193,63.6035959 C45.1468616,63.5717949 47.9123068,60.7803397 47.9123068,57.34795 L47.9123068,21.8503473 C47.9123068,20.8004417 47.6461883,19.7676644 47.1395278,18.8481009 Z M34.1259297,8.57014041 L40.3081616,15.6178848 L36.2974386,15.6178848 C35.0990324,15.6136275 34.129786,14.6409257 34.1297936,13.4425119 L34.1259297,8.57014041 Z M44.8211908,57.34795 C44.8211908,59.0914037 43.4078424,60.5047522 41.6643887,60.5047522 L32.0046514,60.5047522 L34.4736802,58.0318595 C35.0184894,57.4870503 34.8330224,57.0388385 34.0641074,57.0388385 L32.8740277,57.0388385 C32.0993965,57.0388385 31.4714339,56.4108758 31.4714339,55.6362446 L31.4714339,47.1936342 C31.4672104,46.4207591 30.841715,45.7952638 30.06884,45.7910403 L17.8318847,45.7910403 C17.0581345,45.7931631 16.4314137,46.419884 16.4292909,47.1936342 L16.4292909,55.6362446 C16.4271681,56.4099948 15.8004472,57.0367157 15.026697,57.0388385 L13.8366174,57.0388385 C13.0638384,57.0388385 12.8822353,57.4870503 13.4270445,58.0318595 L15.8960734,60.5047522 L6.23633605,60.5047522 C4.49652568,60.5004893 3.08898822,59.0877643 3.09112314,57.34795 L3.09112314,41.9348732 L44.8211908,41.9348732 L44.8211908,57.34795 Z M9.25017409,38.6041957 L9.25017409,26.4367906 L13.6897894,26.4367906 C16.313374,26.4367906 17.9787127,27.5341367 17.9787127,30.061124 C17.9787127,32.5881113 16.313374,33.6815936 13.6897894,33.6815936 L11.5916944,33.6815936 L11.5916944,38.5964679 L9.25017409,38.6041957 Z M19.7020099,38.6041957 L19.7020099,26.4367906 L23.7204606,26.4367906 C26.9352212,26.4367906 29.1530969,28.22191 29.1686316,32.5185612 C29.1840081,36.8152124 26.9352212,38.5964679 23.7204606,38.5964679 L19.7020099,38.6041957 Z M37.3020513,31.2937065 L37.3020513,33.225654 L33.2488255,33.225654 L33.2488255,38.5810124 L30.9304886,38.5810124 L30.9304886,26.4367906 L38.6582784,26.4367906 L38.6582784,28.3919214 L33.2488255,28.3919214 L33.2488255,31.2859787 L37.3020513,31.2937065 Z M44.8211908,23.1138409 L3.09112557,23.1138409 L3.09112557,6.24793956 C3.09112557,5.40699407 3.42623408,4.60071515 4.0223209,4.00752899 C4.61840772,3.41434283 5.42631177,3.0831613 6.26724721,3.08723566 L28.2914483,3.08723566 L28.5000986,3.11818466 L28.6160155,3.14909582 C28.6786081,3.15492471 28.7398928,3.17057186 28.7976186,3.19546256 L28.9212632,3.23796541 L29.0835468,3.29978773 L29.2033275,3.35774615 L29.3540194,3.473663 L29.4738002,3.54321311 L29.6129004,3.62821879 L29.7249533,3.70936059 L29.8563258,3.80595796 L29.9606509,3.89869144 L30.06884,3.99915271 L30.3740877,4.34690325 C30.800546,4.90034696 31.0303258,5.58016903 31.0270859,6.27885072 L31.0270859,13.4231925 C31.0219469,14.8239663 31.5750689,16.1690744 32.564121,17.1610269 C33.5531731,18.1529795 34.8966557,18.7100379 36.2974386,18.7090007 L41.6643887,18.7090007 C42.4717377,18.7098439 43.2478464,19.0211174 43.8320337,19.5783771 C43.8745366,19.617016 43.9170394,19.6595189 43.9556784,19.7020217 C43.9943173,19.7445246 44.0213646,19.7677079 44.0522758,19.8063469 L44.1604648,19.9377193 L44.2454705,20.0536362 L44.338204,20.1966003 L44.411618,20.3202449 L44.4927598,20.4748007 C44.5159431,20.5173035 44.5352626,20.5598064 44.5545821,20.6023092 C44.5739016,20.6448121 44.6009488,20.7143622 44.6202683,20.7723206 C44.6395878,20.830279 44.6550434,20.8573263 44.666635,20.8998291 C44.6782267,20.942332 44.705274,21.0234738 44.7207296,21.0852961 C44.7274001,21.1285984 44.7377411,21.1712549 44.7516407,21.2128046 C44.7516407,21.2553075 44.7748241,21.3557687 44.7864158,21.4253189 C44.7925426,21.4611217 44.7925426,21.4977051 44.7864158,21.5335079 C44.7986263,21.6451546 44.8050746,21.7573563 44.8057353,21.8696668 L44.8211908,23.1138409 Z\" id=\"Shape\" fill=\"#174A94\"></path>\r\n <path d=\"M15.6565119,30.0688518 C15.6565119,28.9908251 15.1696611,28.333963 13.4231806,28.333963 L11.5916944,28.333963 L11.5916944,31.8114684 L13.4425001,31.8114684 C15.1542056,31.7998768 15.6565119,31.1430146 15.6565119,30.0688518 Z\" id=\"Path\" fill=\"#174A94\"></path>\r\n <path d=\"M23.5697687,28.3996492 L22.0242107,28.3996492 L22.0242107,36.6529288 L23.5697687,36.6529288 C26.2281284,36.6529288 26.8502155,34.697798 26.8502155,32.526289 C26.8502155,30.35478 26.2281284,28.3996492 23.5697687,28.3996492 Z\" id=\"Path\" fill=\"#174A94\"></path>\r\n <path d=\"M15.8960734,60.5047522 L13.4270445,58.0318595 C12.8822353,57.4870503 13.0638384,57.0388385 13.8366174,57.0388385 L15.026697,57.0388385 C15.8004472,57.0367157 16.4271681,56.4099948 16.4292909,55.6362446 L16.4292909,47.1936342 C16.4314137,46.419884 17.0581345,45.7931631 17.8318847,45.7910403 L30.06884,45.7910403 C30.841715,45.7952638 31.4672104,46.4207591 31.4714339,47.1936342 L31.4714339,55.6439724 C31.4714339,56.4186036 32.0993965,57.0465662 32.8740277,57.0465662 L34.0641074,57.0465662 C34.8368863,57.0465662 35.0184894,57.4947781 34.4736802,58.0395872 L32.0046514,60.51248 L28.9444466,63.6035959 L24.9646348,67.5911355 C24.4148508,68.1362882 23.5283768,68.1362882 22.9785928,67.5911355 L19.0181005,63.6035959 L15.8960734,60.5047522 Z\" id=\"Path\" fill=\"#3CC4E5\"></path>\r\n </g>\r\n </g>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n `;\r\n });\r\n ui.$invoiceList.append(invoiceList);\r\n if(invoiceTotal > invoiceCount){\r\n ui.$loadMore.show();\r\n }else{ui.$loadMore.hide();}\r\n\r\n\r\n ui.loader.hide();\r\n\r\n }\r\n\r\n function bindloadMoreClick() {\r\n ui.$invoiceWrapper.on('click', '.js-load-more-invoices', function (e) {\r\n e.preventDefault();\r\n ui.loader.show();\r\n initGetInvoices();\r\n });\r\n }\r\n\r\n async function getInvoice(invoiceid) {\r\n const url = 'myvca-api/invoice/getinvoice/' + invoiceid;\r\n let api = new ApiService(url);\r\n const { data, success, error } = await api.post();\r\n\r\n if (!success || (error !== null && error !== '')) {\r\n alert(`Sorry, this document is not available. ${error}`);\r\n console.log(`Status: ${error}`);\r\n } else { \r\n //let response = data.Result;\r\n let response = data.Result;\r\n var pdfWindow = window.open(\"\");\r\n if (!pdfWindow) {\r\n alert(\"Popup blocked! Please allow popups for this website.\");\r\n return;\r\n }\r\n \r\n pdfWindow.document.write(`\r\n <!DOCTYPE html>\r\n <html lang=\"en\">\r\n <head>\r\n <meta charset=\"UTF-8\">\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n <title>${titleOfPDF}</title>\r\n <style>\r\n body {\r\n margin: 0;\r\n }\r\n iframe {\r\n width: 100%;\r\n height: 100vh;\r\n border: none;\r\n }\r\n </style>\r\n </head>\r\n <body>\r\n <iframe src=\"${response}\" type=\"application/pdf\">\r\n <p>Your browser does not support PDFs. \r\n <a href=\"${response}\" target=\"_blank\" rel=\"noopener\">Download the PDF</a>.</p>\r\n </iframe>\r\n </body>\r\n </html>\r\n `);\r\n pdfWindow.document.close();\r\n }\r\n }\r\n\r\n function bindGetInvoiceClick() {\r\n ui.$invoiceWrapper.on('click', '.js-inoice-btn', function (e) {\r\n e.preventDefault();\r\n let invoiceid = $(this).data('invoiceid');\r\n getInvoice(invoiceid);\r\n });\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.CareclubInvoice.init();\r\n});\r\n\r\n\r\n","import ApiService from '@api/api-service';\r\n\r\nlet VCA = VCA || {};\r\n\r\nVCA.CareClubPetPage = (function ($) {\r\n\r\n let ui = {};\r\n\r\n function cacheUI() {\r\n ui.$PaymentMethodsUpdateButton = $('#PaymentMethodsUpdateBtn');\r\n ui.$PaymentMethodsCancelButton = $('#PaymentMethodsCancelBtn');\r\n ui.$PaymentMethodsIframe = $('.petpage-care-club__iframe-container');\r\n ui.$PaymentMethodsUserCardInfoContainer = $('.petpage-care-club__pm-content');\r\n ui.$RenewalStatus = $('#CareClubRenewalStatus');\r\n ui.$RenewalApplyBtn = $('#CareClubApplyBtn');\r\n ui.$MainContentWrapper = $('.petpage-care-club__mr-wrapper');\r\n ui.$SuccessMessage = $('.petpage-care-club__mr-success-msg');\r\n ui.$RenewalErrorMessage = $('.petpage-care-club__mr-error-msg');\r\n ui.$PatientId = $('#CareClubApplyBtn').data('patientid');\r\n ui.$isRenewalOn = false;\r\n }\r\n\r\n function bindEvents() {\r\n ui.$PaymentMethodsUpdateButton.on('click', displayIframe);\r\n ui.$PaymentMethodsCancelButton.on('click', hideIframe);\r\n ui.$RenewalStatus.on('change', toggleApplyBtn);\r\n ui.$RenewalApplyBtn.on('click', () => updateRenewalStatus(ui.$isRenewalOn));\r\n }\r\n\r\n function displayIframe() {\r\n ui.$PaymentMethodsUpdateButton.addClass('active');\r\n ui.$PaymentMethodsIframe.show();\r\n ui.$PaymentMethodsUserCardInfoContainer.hide();\r\n }\r\n\r\n function hideIframe() {\r\n ui.$PaymentMethodsUpdateButton.removeClass('active');\r\n ui.$PaymentMethodsIframe.hide();\r\n ui.$PaymentMethodsUserCardInfoContainer.show();\r\n }\r\n\r\n function renewalStatusOnLoad() {\r\n let renewalStatus = ui.$RenewalStatus.data('value');\r\n\r\n if (renewalStatus) {\r\n ui.$RenewalStatus.prop('checked', true);\r\n } else {\r\n ui.$RenewalStatus.prop('checked', false);\r\n }\r\n }\r\n\r\n function toggleApplyBtn() {\r\n ui.$isRenewalOn = ui.$RenewalStatus.is(':checked');\r\n ui.$RenewalApplyBtn.prop('disabled', false);\r\n }\r\n \r\n function resetSuccessErrorMsgs() {\r\n ui.$SuccessMessage.hide();\r\n ui.$RenewalErrorMessage.hide();\r\n }\r\n\r\n async function updateRenewalStatus(renewalStatus) {\r\n ui.$SuccessMessage.hide();\r\n\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n\r\n let payload = {\r\n 'PatientId': ui.$PatientId,\r\n 'RenewalStatus': renewalStatus\r\n }\r\n \r\n let axiosConfig = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\r\n }\r\n }\r\n \r\n const url = '/api/careclub/renew';\r\n let api = new ApiService(url);\r\n const { success, data, error } = await api.post(searchParams(payload), axiosConfig);\r\n\r\n resetSuccessErrorMsgs();\r\n\r\n if (success) {\r\n ui.$SuccessMessage.show();\r\n } else {\r\n ui.$MainContentWrapper.hide();\r\n ui.$RenewalErrorMessage.show();\r\n }\r\n }\r\n\r\n function init() {\r\n if ($('.petpage-care-club').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n bindEvents();\r\n renewalStatusOnLoad();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n $(document).ready(function() {\r\n VCA.CareClubPetPage.init();\r\n });\r\n});\r\n","let VCA = VCA || {};\r\n\r\nVCA.ExpertGuidancePetPage = (function ($) {\r\n\r\n let ui = {};\r\n\r\n function cacheUI() {\r\n ui.$TabBtn = $('.js-expert-guidance-btn');\r\n ui.$TabContent = $('.petpage-expert-guidance__content');\r\n ui.$DisplayTitle = $('.petpage-expert-guidance__title');\r\n }\r\n\r\n function bindEvents() {\r\n ui.$TabBtn.on('click', displayContent);\r\n }\r\n\r\n function displayContent(e) {\r\n e.preventDefault();\r\n\r\n const btn = $(e.currentTarget);\r\n const tabNumber = btn.data('nav');\r\n const tabName = btn.data('name');\r\n const contentContainer = $('.petpage-expert-guidance__content-container');\r\n const contentToActivate = $(contentContainer).find(`.petpage-expert-guidance__content[data-nav-content=\"${tabNumber}\"]`)[0];\r\n let tabBtnIsActive = btn.hasClass('active');\r\n\r\n if (tabBtnIsActive) {\r\n return;\r\n }\r\n\r\n ui.$TabBtn.each((idx,btn) => {\r\n $(btn).removeClass('active');\r\n });\r\n\r\n ui.$TabContent.each((idx,content) => {\r\n $(content).removeClass('active');\r\n });\r\n\r\n btn.addClass('active');\r\n $(contentToActivate).addClass('active');\r\n ui.$DisplayTitle.text(tabName);\r\n }\r\n\r\n\r\n function init() {\r\n if ($('.petpage-expert-guidance').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n bindEvents();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n $(document).ready(function() {\r\n VCA.ExpertGuidancePetPage.init();\r\n });\r\n});\r\n","import ApiService from '@api/api-service';\r\n\r\nlet VCA = VCA || {};\r\n\r\nVCA.IndividualPetProfile = (function ($) {\r\n\r\n let ui = {};\r\n\r\n function cacheUI() {\r\n ui.$ApplyUpdatesBtn = $('#ApplyPetProfileChangesBtn');\r\n ui.$CancelBtn = $('#CancelPetProfileChangesBtn');\r\n ui.$EditBtn = $('.petpage-pet-profile__edit-btn');\r\n ui.$EditableContainer = $('#EditablePetProfile');\r\n ui.$RequestVerificationToken = $('input[name=\"__RequestVerificationToken\"]').val();\r\n ui.$DateOfBirth = $('#PetProfileDatepicker').data('date');\r\n ui.$InputEl = $('input');\r\n ui.$SelectEl = $('select');\r\n ui.$EditableMainContent = $('.petpage-pet-profile__right-main');\r\n ui.$Loader = $('.petpage-pet-profile__loader');\r\n ui.$ErrorMessage = $('#PetProfileAPIErrorMsg');\r\n\r\n //Select Option Elements\r\n ui.$SpeciesInput = $('#PetProfileSpecies');\r\n ui.$DatePickerInput = $('#PetProfileDatepicker');\r\n ui.$PrimaryBreedInput = $('#PetProfilePrimaryBreed');\r\n ui.$SecondaryBreedInput = $('#PetProfileSecondaryBreed');\r\n\r\n //Updated Selected Input data-names\r\n ui.$UpdatedSpeciesValue;\r\n ui.$UpdatedDOB;\r\n ui.$UpdatedPrimaryBreedValue;\r\n ui.$UpdatedSecondaryBreedValue;\r\n\r\n //Item Info Values Elements\r\n ui.$PetProfileSpeciesText = $('#PetProfileSpeciesText');\r\n ui.$PetProfileDOBText = $('#PetProfileDOBText');\r\n ui.$PetProfilePrimaryBreedText = $('#PetProfilePrimaryBreedText');\r\n ui.$PetProfileSecondaryBreedText = $('#PetProfileSecondaryBreedText');\r\n\r\n //Selected Option Elements on Load\r\n ui.$SpeciesOnLoadValue;\r\n ui.$DateOnLoadValue;\r\n ui.$PrimaryBreedOnLoadValue;\r\n ui.$SecondaryBreedOnLoadValue;\r\n }\r\n\r\n function bindEvents() {\r\n ui.$EditBtn.on('click', initEditInputFields);\r\n ui.$ApplyUpdatesBtn.on('click', applyUpdates);\r\n ui.$InputEl.on('change', hideDOBErrorMessage);\r\n ui.$SelectEl.on('change', hideSelectErrorMessages);\r\n ui.$CancelBtn.on('click', resetMainContainer);\r\n ui.$SpeciesInput.on('change', changeSpecies);\r\n ui.$PrimaryBreedInput.on('change', changePrimaryBeed);\r\n }\r\n\r\n function saveSelectedValuesOnLoad() {\r\n ui.$SpeciesOnLoadValue = ui.$SpeciesInput.find(':selected').val();\r\n ui.$PrimaryBreedOnLoadValue = ui.$PrimaryBreedInput.find(':selected').val();\r\n ui.$SecondaryBreedOnLoadValue = ui.$SecondaryBreedInput.find(':selected').val();\r\n ui.$DateOnLoadValue = ui.$DatePickerInput.data('date');\r\n }\r\n\r\n function hideDOBErrorMessage(e) {\r\n const target = $(e.currentTarget);\r\n let el = $(target)[0];\r\n let dynamicDateInputEl = $('.flatpickr.petpage-pet-profile__dob-input.form-control.input');\r\n\r\n ui.$ApplyUpdatesBtn.addClass('active');\r\n dynamicDateInputEl.removeClass('error');\r\n $(el).closest('.petpage-pet-profile__input-wrapper').find('.input-error-text').hide();\r\n }\r\n\r\n function hideSelectErrorMessages(e) {\r\n const el = $(e.currentTarget);\r\n\r\n ui.$ApplyUpdatesBtn.addClass('active');\r\n el.removeClass('error');\r\n el.closest('.petpage-pet-profile__input-wrapper').find('.input-error-text').hide();\r\n }\r\n\r\n function changeSpecies() {\r\n sortBreedsBySpeciesPri();\r\n sortBreedsBySpeciesSec();\r\n clearBreedsOnSpeciesChange();\r\n }\r\n\r\n function changePrimaryBeed() {\r\n let selectedPrimaryBreed = ui.$PrimaryBreedInput.find(':selected').val();\r\n let selectedSecondaryBreedType = ui.$SecondaryBreedInput.find(':selected').val();\r\n\r\n\r\n if(selectedPrimaryBreed == selectedSecondaryBreedType){\r\n $('#PetProfileSecondaryBreed').find(`option[value=\"0\"]`).prop('selected', true);\r\n }\r\n sortBreedsBySpeciesSec();\r\n ui.$SecondaryBreedInput.find('option[value=\"' + selectedPrimaryBreed + '\"]').hide();\r\n\r\n }\r\n\r\n function sortBreedsBySpeciesPri() {\r\n let selectedSpeciesType = ui.$SpeciesInput.find(':selected').val();\r\n\r\n\r\n $('#PetProfilePrimaryBreed option').each(function() {\r\n if ($(this).attr('data-species') !== selectedSpeciesType && $(this).attr('data-species') !== '0') {\r\n $(this).hide();\r\n }else{\r\n $(this).show();\r\n }\r\n });\r\n }\r\n\r\n function sortBreedsBySpeciesSec() {\r\n let selectedSpeciesType = ui.$SpeciesInput.find(':selected').val();\r\n\r\n\r\n $('#PetProfileSecondaryBreed option').each(function() {\r\n if ($(this).attr('data-species') !== selectedSpeciesType && $(this).attr('data-species') !== '0') {\r\n $(this).hide();\r\n }else{\r\n $(this).show();\r\n }\r\n });\r\n }\r\n\r\n function clearBreedsOnSpeciesChange() {\r\n if ($('#PetProfilePrimaryBreed option[value=\"\"]').length <= 0) {\r\n $('#PetProfilePrimaryBreed').prepend('<option value=\"\" selected=\"selected\" data-species=\"0\"></option>');\r\n }\r\n \r\n $('#PetProfilePrimaryBreed').find(`option[value=\"\"]`).prop('selected', true);\r\n $('#PetProfileSecondaryBreed').find(`option[value=\"0\"]`).prop('selected', true);\r\n }\r\n\r\n\r\n function initEditInputFields() {\r\n ui.$ErrorMessage.hide();\r\n ui.$EditBtn.hide();\r\n ui.$ApplyUpdatesBtn.show();\r\n ui.$CancelBtn.show();\r\n\r\n //Hide item-info containers\r\n ui.$EditableContainer.find('.item-info').each((idx,el) => {\r\n $(el).hide();\r\n });\r\n\r\n //Show input-wrapper containers\r\n ui.$EditableContainer.find('.petpage-pet-profile__input-wrapper').each((idx,el) => {\r\n $(el).show();\r\n });\r\n }\r\n\r\n function initDatePicker() {\r\n ui.$DatePickerInput.flatpickr({\r\n altInput: true,\r\n altFormat: \"m/d/Y\",\r\n dateFormat: \"Y-m-d\",\r\n maxDate: 'today',\r\n disableMobile: true,\r\n defaultDate: [ui.$DateOfBirth]\r\n });\r\n }\r\n\r\n function applyUpdates() {\r\n ui.$ApplyUpdatesBtn.removeClass('active');\r\n\r\n let speciesValue = ui.$SpeciesInput.val();\r\n let dateValue = ui.$DatePickerInput.val();\r\n let primaryBreedValue = ui.$PrimaryBreedInput.val();\r\n let secondaryBreedValue = ui.$SecondaryBreedInput.val();\r\n\r\n ui.$UpdatedSpeciesValue = ui.$SpeciesInput.find('option:selected').data('name');\r\n ui.$UpdatedPrimaryBreedValue = ui.$PrimaryBreedInput.find('option:selected').data('name');\r\n ui.$UpdatedSecondaryBreedValue = ui.$SecondaryBreedInput.find('option:selected').data('name');\r\n\r\n let dynamicDateInputEl = $('.flatpickr.petpage-pet-profile__dob-input.form-control.input');\r\n\r\n let speciesValid = false;\r\n let dateValid = false;\r\n let primaryBreedValid = false;\r\n let secondaryBreedValid = true;\r\n\r\n \r\n //validate species value\r\n if (speciesValue.trim() == '') {\r\n ui.$SpeciesInput.addClass('error');\r\n ui.$SpeciesInput.closest('.petpage-pet-profile__input-wrapper').find('.input-error-text').show();\r\n speciesValid = false;\r\n } else {\r\n ui.$SpeciesInput.removeClass('error');\r\n ui.$SpeciesInput.closest('.petpage-pet-profile__input-wrapper').find('.input-error-text').hide();\r\n speciesValid = true;\r\n }\r\n\r\n //validate date value\r\n if (dateValue.trim() == '') {\r\n dynamicDateInputEl.addClass('error');\r\n dynamicDateInputEl.closest('.petpage-pet-profile__input-wrapper').find('.input-error-text').show();\r\n dateValid = false;\r\n } else {\r\n dynamicDateInputEl.removeClass('error');\r\n dynamicDateInputEl.closest('.petpage-pet-profile__input-wrapper').find('.input-error-text').hide();\r\n dateValid = true;\r\n }\r\n\r\n //validate primary breed value\r\n if (ui.$PrimaryBreedInput.children().length == 0) {\r\n primaryBreedValid = true;\r\n primaryBreedValue = 0;\r\n } else {\r\n if (primaryBreedValue.trim() == '') {\r\n ui.$PrimaryBreedInput.addClass('error');\r\n ui.$PrimaryBreedInput.closest('.petpage-pet-profile__input-wrapper').find('.input-error-text').show();\r\n primaryBreedValid = false;\r\n } else {\r\n ui.$PrimaryBreedInput.removeClass('error');\r\n ui.$PrimaryBreedInput.closest('.petpage-pet-profile__input-wrapper').find('.input-error-text').hide();\r\n primaryBreedValid = true;\r\n }\r\n }\r\n\r\n //validate secondary breed value\r\n if (ui.$SecondaryBreedInput.length == 0) {\r\n secondaryBreedValue = 0;\r\n return;\r\n } \r\n\r\n ui.$SpeciesInput.attr('value',speciesValue);\r\n ui.$DatePickerInput.attr('value',dateValue);\r\n ui.$PrimaryBreedInput.attr('value', primaryBreedValue);\r\n ui.$SecondaryBreedInput.attr('value', secondaryBreedValue);\r\n\r\n\r\n if (speciesValid && dateValid && primaryBreedValid && secondaryBreedValid) {\r\n \r\n let payload = {\r\n petId: petId,\r\n speciesId: speciesValue,\r\n primaryBreedId: primaryBreedValue,\r\n secondaryBreedId: secondaryBreedValue,\r\n dob: dateValue,\r\n datasourceId: datasourceId,\r\n '__RequestVerificationToken': ui.$RequestVerificationToken\r\n }\r\n\r\n updatePetProfileAPI(payload);\r\n }\r\n\r\n }\r\n\r\n async function updatePetProfileAPI(payload) {\r\n ui.$Loader.show();\r\n ui.$EditableMainContent.hide();\r\n\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n \r\n let axiosConfig = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\r\n }\r\n }\r\n \r\n const url = `/myvca-api/update-pet-profile`;\r\n let api = new ApiService(url);\r\n const { data, success, error } = await api.post(searchParams(payload), axiosConfig);\r\n\r\n\r\n if (!success || (error !== null && error !== '')) {\r\n resetMainContainer();\r\n ui.$ErrorMessage.html(error).show();\r\n } else { \r\n let htmlPartialRendering = data;\r\n\r\n ui.$EditableContainer.empty();\r\n ui.$EditableContainer.html(htmlPartialRendering); \r\n\r\n //unbind events\r\n ui.$EditBtn.unbind('click');\r\n ui.$ApplyUpdatesBtn.unbind('click');\r\n ui.$InputEl.unbind('change');\r\n ui.$SelectEl.unbind('change');\r\n ui.$CancelBtn.unbind('click');\r\n ui.$SpeciesInput.unbind('change');\r\n ui.$PrimaryBreedInput.unbind('change');\r\n\r\n //rebind events \r\n cacheUI();\r\n ui.$EditBtn.on('click', initEditInputFields);\r\n ui.$ApplyUpdatesBtn.on('click', applyUpdates);\r\n ui.$InputEl.on('change', hideDOBErrorMessage);\r\n ui.$SelectEl.on('change', hideSelectErrorMessages);\r\n ui.$CancelBtn.on('click', resetMainContainer);\r\n ui.$SpeciesInput.on('change', changeSpecies);\r\n ui.$PrimaryBreedInput.on('change', changePrimaryBeed);\r\n initDatePicker(); \r\n saveSelectedValuesOnLoad();\r\n sortBreedsBySpeciesPri();\r\n sortBreedsBySpeciesSec();\r\n }\r\n }\r\n\r\n function resetToSelectedValues() {\r\n ui.$SpeciesInput.find('option:selected').removeAttr('selected');\r\n ui.$SpeciesInput.find(`option[value=\"${ui.$SpeciesOnLoadValue}\"]`).prop('selected', true);\r\n\r\n ui.$PrimaryBreedInput.find('option:selected').removeAttr('selected');\r\n ui.$PrimaryBreedInput.find(`option[value=\"${ui.$PrimaryBreedOnLoadValue}\"]`).prop('selected', true);\r\n\r\n ui.$SecondaryBreedInput.find('option:selected').removeAttr('selected');\r\n ui.$SecondaryBreedInput.find(`option[value=\"${ui.$SecondaryBreedOnLoadValue}\"]`).prop('selected', true);\r\n\r\n initDatePicker();\r\n }\r\n\r\n function resetMainContainer() {\r\n ui.$Loader.hide();\r\n ui.$EditBtn.show();\r\n ui.$ApplyUpdatesBtn.hide();\r\n ui.$CancelBtn.hide();\r\n resetToSelectedValues();\r\n\r\n //Show item-info containers\r\n ui.$EditableContainer.find('.item-info').each((idx,el) => {\r\n $(el).show();\r\n });\r\n\r\n //Hide input-wrapper containers\r\n ui.$EditableContainer.find('.petpage-pet-profile__input-wrapper').each((idx,el) => {\r\n $(el).hide();\r\n });\r\n\r\n ui.$EditableMainContent.show();\r\n }\r\n\r\n function init() {\r\n if ($('.petpage-pet-profile').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n bindEvents();\r\n initDatePicker();\r\n saveSelectedValuesOnLoad();\r\n sortBreedsBySpeciesPri();\r\n sortBreedsBySpeciesSec();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n $(document).ready(function() {\r\n VCA.IndividualPetProfile.init();\r\n });\r\n});\r\n","import Invoices from '@api/routes/myvca-api/invoices';\r\nimport ApiService from '@api/api-service';\r\n//import mock from './mock-pdf-response.json';\r\n\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.InvoiceHistory = (function ($) {\r\n var ui = {};\r\n let page = 0;\r\n let invoiceCount = 0;\r\n let invoiceTotal = 0;\r\n\r\n function cacheUI() {\r\n ui.$invoiceWrapper = $('.myvca-invoice-history');\r\n ui.$loadMore = $('.js-load-more-invoices');\r\n ui.$invoiceList = $('.js-invoice-list');\r\n ui.$invoiceListError = $('.js-invoice-list-error');\r\n ui.$invoiceListEmpty = $('.js-invoice-list-empty');\r\n ui.loader = $('.ajax-loader');\r\n }\r\n\r\n function init() {\r\n if ($('.myvca-invoice-history').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n initGetInvoices();\r\n bindloadMoreClick();\r\n bindGetInvoiceClick();\r\n }\r\n\r\n async function initGetInvoices() {\r\n\r\n ui.loader.show();\r\n var params = {\"Page\": page};\r\n \r\n const { success, data, error } = await Invoices.post(params);\r\n if(!success){\r\n console.log('failed', error);\r\n $('.js-error-message-text').text(error);\r\n ui.$invoiceListError.show();\r\n ui.loader.hide();\r\n return;\r\n }\r\n else if(data.TotalCount == 0) {\r\n ui.loader.hide();\r\n ui.$invoiceListEmpty.show();\r\n }else{\r\n invoiceTotal = data.TotalCount;\r\n page = data.CurrentPage + 1;\r\n createInvoiceList(data.Invoices);\r\n }\r\n\r\n };\r\n\r\n\r\n function createInvoiceList(invoices) {\r\n\r\n let invoiceList = '';\r\n\r\n var count = Object.keys(invoices).length;\r\n invoiceCount += count;\r\n\r\n $.each(invoices, function (i, item) {\r\n\r\n invoiceList += `\r\n <div class=\"myvca-account-list__item\" data-invoiceid=\"${item.Id}\">\r\n <div class=\"myvca-account-list__item__date\">\r\n ${item.Date}\r\n </div>\r\n <div class=\"myvca-account-list__item__desc\">\r\n ${item.PetName}\r\n </div>\r\n <button class=\"myvca-account-list__item__icon js-inoice-btn\" data-invoiceid=\"${item.Id}\">\r\n <svg width=\"100%\" height=\"auto\" viewBox=\"0 0 48 68\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <title>PDF Icon</title>\r\n <g id=\"UI-Kit\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g id=\"UI-Kit---Icons\" transform=\"translate(-1096.000000, -5073.000000)\" fill-rule=\"nonzero\">\r\n <g id=\"VCA_Iconography-KIT-RGB_download-pdf\" transform=\"translate(1096.000000, 5073.000000)\">\r\n <path d=\"M47.1395278,18.8481009 L47.1395278,18.8133259 C47.0477443,18.6445807 46.9471439,18.4807826 46.838144,18.3226112 C46.7879134,18.2491972 46.7299549,18.1796471 46.6758604,18.1062331 C46.6217659,18.0328191 46.5483519,17.92463 46.4749379,17.8396244 C46.4015239,17.7546187 46.324246,17.6734769 46.250832,17.5923351 C46.177418,17.5111933 46.1271873,17.4570988 46.0615011,17.3914125 L46.0151344,17.3450458 L32.7619748,2.32222231 C32.6537857,2.19084988 32.5378689,2.06334135 32.4180881,1.93583281 L32.3949047,1.90878555 L32.3949047,1.90878555 L32.2944435,1.80446039 L32.2326212,1.73877417 C32.1592072,1.66922406 32.0819293,1.61126564 32.0085152,1.54557943 C31.9351012,1.47989321 31.9003262,1.44511816 31.8423678,1.39875142 L31.5255284,1.16305383 L31.3632448,1.04713698 C31.2473279,0.969859081 31.1314111,0.900308972 31.0116304,0.830758863 L30.8493468,0.738025385 C30.7257021,0.672339171 30.6020575,0.614380747 30.4629573,0.556422323 L30.2929459,0.479144424 C30.1693013,0.425049895 30.0379288,0.382547051 29.9065564,0.336180312 L29.7210894,0.274357993 C29.5935809,0.235719044 29.4622085,0.204807884 29.3347,0.173896725 C29.2686842,0.153529398 29.2016113,0.136761178 29.1337774,0.123666091 C28.9946772,0.0966188261 28.855577,0.0772993515 28.7164768,0.0579798768 L28.523282,0.0309326123 C28.3184956,0.0309326123 28.1137092,1.06888912e-05 27.9050588,1.06888912e-05 L6.26724721,1.06888912e-05 C4.60747745,-0.00305536159 3.01452154,0.653600545 1.83907475,1.82542389 C0.663627954,2.99724723 0.00205713957,4.58816822 4.80063603e-06,6.24793956 L4.80063603e-06,6.24793956 L4.80063603e-06,57.34795 C-0.00205366607,59.0096924 0.657951603,60.6037985 1.83406897,61.7777405 C3.01018634,62.9516826 4.60551148,63.6087356 6.26724721,63.6035959 L19.0181005,63.6035959 L22.9979123,67.5911355 C23.5476962,68.1362882 24.4341703,68.1362882 24.9839543,67.5911355 L28.963766,63.6035959 L41.7146193,63.6035959 C45.1468616,63.5717949 47.9123068,60.7803397 47.9123068,57.34795 L47.9123068,21.8503473 C47.9123068,20.8004417 47.6461883,19.7676644 47.1395278,18.8481009 Z M34.1259297,8.57014041 L40.3081616,15.6178848 L36.2974386,15.6178848 C35.0990324,15.6136275 34.129786,14.6409257 34.1297936,13.4425119 L34.1259297,8.57014041 Z M44.8211908,57.34795 C44.8211908,59.0914037 43.4078424,60.5047522 41.6643887,60.5047522 L32.0046514,60.5047522 L34.4736802,58.0318595 C35.0184894,57.4870503 34.8330224,57.0388385 34.0641074,57.0388385 L32.8740277,57.0388385 C32.0993965,57.0388385 31.4714339,56.4108758 31.4714339,55.6362446 L31.4714339,47.1936342 C31.4672104,46.4207591 30.841715,45.7952638 30.06884,45.7910403 L17.8318847,45.7910403 C17.0581345,45.7931631 16.4314137,46.419884 16.4292909,47.1936342 L16.4292909,55.6362446 C16.4271681,56.4099948 15.8004472,57.0367157 15.026697,57.0388385 L13.8366174,57.0388385 C13.0638384,57.0388385 12.8822353,57.4870503 13.4270445,58.0318595 L15.8960734,60.5047522 L6.23633605,60.5047522 C4.49652568,60.5004893 3.08898822,59.0877643 3.09112314,57.34795 L3.09112314,41.9348732 L44.8211908,41.9348732 L44.8211908,57.34795 Z M9.25017409,38.6041957 L9.25017409,26.4367906 L13.6897894,26.4367906 C16.313374,26.4367906 17.9787127,27.5341367 17.9787127,30.061124 C17.9787127,32.5881113 16.313374,33.6815936 13.6897894,33.6815936 L11.5916944,33.6815936 L11.5916944,38.5964679 L9.25017409,38.6041957 Z M19.7020099,38.6041957 L19.7020099,26.4367906 L23.7204606,26.4367906 C26.9352212,26.4367906 29.1530969,28.22191 29.1686316,32.5185612 C29.1840081,36.8152124 26.9352212,38.5964679 23.7204606,38.5964679 L19.7020099,38.6041957 Z M37.3020513,31.2937065 L37.3020513,33.225654 L33.2488255,33.225654 L33.2488255,38.5810124 L30.9304886,38.5810124 L30.9304886,26.4367906 L38.6582784,26.4367906 L38.6582784,28.3919214 L33.2488255,28.3919214 L33.2488255,31.2859787 L37.3020513,31.2937065 Z M44.8211908,23.1138409 L3.09112557,23.1138409 L3.09112557,6.24793956 C3.09112557,5.40699407 3.42623408,4.60071515 4.0223209,4.00752899 C4.61840772,3.41434283 5.42631177,3.0831613 6.26724721,3.08723566 L28.2914483,3.08723566 L28.5000986,3.11818466 L28.6160155,3.14909582 C28.6786081,3.15492471 28.7398928,3.17057186 28.7976186,3.19546256 L28.9212632,3.23796541 L29.0835468,3.29978773 L29.2033275,3.35774615 L29.3540194,3.473663 L29.4738002,3.54321311 L29.6129004,3.62821879 L29.7249533,3.70936059 L29.8563258,3.80595796 L29.9606509,3.89869144 L30.06884,3.99915271 L30.3740877,4.34690325 C30.800546,4.90034696 31.0303258,5.58016903 31.0270859,6.27885072 L31.0270859,13.4231925 C31.0219469,14.8239663 31.5750689,16.1690744 32.564121,17.1610269 C33.5531731,18.1529795 34.8966557,18.7100379 36.2974386,18.7090007 L41.6643887,18.7090007 C42.4717377,18.7098439 43.2478464,19.0211174 43.8320337,19.5783771 C43.8745366,19.617016 43.9170394,19.6595189 43.9556784,19.7020217 C43.9943173,19.7445246 44.0213646,19.7677079 44.0522758,19.8063469 L44.1604648,19.9377193 L44.2454705,20.0536362 L44.338204,20.1966003 L44.411618,20.3202449 L44.4927598,20.4748007 C44.5159431,20.5173035 44.5352626,20.5598064 44.5545821,20.6023092 C44.5739016,20.6448121 44.6009488,20.7143622 44.6202683,20.7723206 C44.6395878,20.830279 44.6550434,20.8573263 44.666635,20.8998291 C44.6782267,20.942332 44.705274,21.0234738 44.7207296,21.0852961 C44.7274001,21.1285984 44.7377411,21.1712549 44.7516407,21.2128046 C44.7516407,21.2553075 44.7748241,21.3557687 44.7864158,21.4253189 C44.7925426,21.4611217 44.7925426,21.4977051 44.7864158,21.5335079 C44.7986263,21.6451546 44.8050746,21.7573563 44.8057353,21.8696668 L44.8211908,23.1138409 Z\" id=\"Shape\" fill=\"#174A94\"></path>\r\n <path d=\"M15.6565119,30.0688518 C15.6565119,28.9908251 15.1696611,28.333963 13.4231806,28.333963 L11.5916944,28.333963 L11.5916944,31.8114684 L13.4425001,31.8114684 C15.1542056,31.7998768 15.6565119,31.1430146 15.6565119,30.0688518 Z\" id=\"Path\" fill=\"#174A94\"></path>\r\n <path d=\"M23.5697687,28.3996492 L22.0242107,28.3996492 L22.0242107,36.6529288 L23.5697687,36.6529288 C26.2281284,36.6529288 26.8502155,34.697798 26.8502155,32.526289 C26.8502155,30.35478 26.2281284,28.3996492 23.5697687,28.3996492 Z\" id=\"Path\" fill=\"#174A94\"></path>\r\n <path d=\"M15.8960734,60.5047522 L13.4270445,58.0318595 C12.8822353,57.4870503 13.0638384,57.0388385 13.8366174,57.0388385 L15.026697,57.0388385 C15.8004472,57.0367157 16.4271681,56.4099948 16.4292909,55.6362446 L16.4292909,47.1936342 C16.4314137,46.419884 17.0581345,45.7931631 17.8318847,45.7910403 L30.06884,45.7910403 C30.841715,45.7952638 31.4672104,46.4207591 31.4714339,47.1936342 L31.4714339,55.6439724 C31.4714339,56.4186036 32.0993965,57.0465662 32.8740277,57.0465662 L34.0641074,57.0465662 C34.8368863,57.0465662 35.0184894,57.4947781 34.4736802,58.0395872 L32.0046514,60.51248 L28.9444466,63.6035959 L24.9646348,67.5911355 C24.4148508,68.1362882 23.5283768,68.1362882 22.9785928,67.5911355 L19.0181005,63.6035959 L15.8960734,60.5047522 Z\" id=\"Path\" fill=\"#3CC4E5\"></path>\r\n </g>\r\n </g>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n `;\r\n });\r\n ui.$invoiceList.append(invoiceList);\r\n if(invoiceTotal > invoiceCount){\r\n ui.$loadMore.show();\r\n }else{ui.$loadMore.hide();}\r\n\r\n\r\n ui.loader.hide();\r\n\r\n }\r\n\r\n function bindloadMoreClick() {\r\n ui.$invoiceWrapper.on('click', '.js-load-more-invoices', function (e) {\r\n e.preventDefault();\r\n ui.loader.show();\r\n initGetInvoices();\r\n });\r\n }\r\n \r\n async function getInvoice(invoiceid) {\r\n const url = '/myvca-api/invoice/getinvoice/' + invoiceid;\r\n let api = new ApiService(url);\r\n const { data, success, error } = await api.post();\r\n\r\n if (!success || (error !== null && error !== '')) {\r\n alert(`Sorry, this document is not available. ${error}`);\r\n console.log(`Status: ${error}`);\r\n } else { \r\n //let response = data.Result;\r\n let response = data.Result;\r\n var pdfWindow = window.open(\"\");\r\n\r\n if (!pdfWindow) {\r\n alert(\"Popup blocked! Please allow popups for this website.\");\r\n return;\r\n }\r\n\r\n pdfWindow.document.write(`<!DOCTYPE html>\r\n <html>\r\n <head>\r\n <title>Invoice</title>\r\n <style>\r\n body { margin: 0; }\r\n iframe { width: 100%; height: 100vh; border: none; }\r\n </style>\r\n </head>\r\n <body>\r\n <iframe src=\"${response}\" type=\"application/pdf\"></iframe>\r\n </body>\r\n </html>`);\r\n pdfWindow.document.close();\r\n }\r\n }\r\n\r\n function bindGetInvoiceClick() {\r\n ui.$invoiceWrapper.on('click', '.js-inoice-btn', function (e) {\r\n e.preventDefault();\r\n let invoiceid = $(this).data('invoiceid');\r\n getInvoice(invoiceid);\r\n });\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.InvoiceHistory.init();\r\n});\r\n\r\n\r\n","import GetPetSub from '@api/routes/myvca-api/get-pet-subscriptions';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.ManageSubscriptionList = (function ($) {\r\n\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n ui.$petSelector = $('[data-control=\"petselector\"]');\r\n ui.$listContainer = $('[data-region=\"sublist\"]');\r\n ui.loader = $('.ajax-loader');\r\n\r\n ui.outofstockicon = $('#outofstockicon').val();\r\n ui.outofstocklabel = $('#outofstocklabel').val();\r\n }\r\n\r\n function init() {\r\n if ($('.subscription-list__cards-wrapper').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindPetSelector();\r\n }\r\n\r\n function bindPetSelector() {\r\n ui.$petSelector.on('change', function (e) {\r\n e.preventDefault();\r\n ui.loader.show();\r\n ui.$listContainer.addClass('loading');\r\n let petId = ui.$petSelector.val();\r\n let petName = ui.$petSelector.children(\"option\").filter(\":selected\").text();\r\n getPetResults(petId, petName);\r\n \r\n });\r\n }\r\n\r\n async function getPetResults(petId, petName) {\r\n let params = {\r\n \"petId\":petId\r\n }\r\n const { success, data, error } = await GetPetSub.query(params);\r\n //console.log('data', data);\r\n console.log('data',data)\r\n if (!success || !data) {\r\n console.log('failed', error);\r\n ui.loader.hide();\r\n ui.$listContainer.removeClass('loading');\r\n return;\r\n }\r\n else if(data === null || data.length === 0) {\r\n let noResuts = `\r\n <div class=\"bg-color-vca-sky-tint-2 subscription-list__empty-state w-100\">\r\n <div class=\"subscription-list__empty-state__desc\">You currently have no Subscriptions for ${petName}</div>\r\n </div>`\r\n ui.$listContainer.html(noResuts);\r\n ui.loader.hide();\r\n ui.$listContainer.removeClass('loading');\r\n return;\r\n }\r\n else {\r\n createCard(data);\r\n }\r\n }\r\n\r\n function createCard(subItem) {\r\n ui.$listContainer.html('');\r\n\r\n let backorderedFlag;\r\n\r\n for (var a = 0; a < subItem.length; a++) {\r\n var cardContainer = $(document.createElement('div')).addClass('subscription-list__card');\r\n if(subItem[a].IsBackordered){\r\n backorderedFlag = `<div class=\"out-of-stock-flag -manage-sublist-oos\">\r\n <span class=\"out-of-stock-flag__icon\" data-label=\"outofstockicon\"><img src=\"${ui.outofstockicon}\" alt=\"out of stock icon\"></span>\r\n <span data-label=\"outofstock\">${ui.outofstocklabel}</span>\r\n </div>`\r\n }else{\r\n backorderedFlag = '';\r\n }\r\n\r\n\r\n var innerCard = $(`\r\n <a href=\"/myvca/subscription-details?id=${subItem[a].Id}\" class=\"subscription-list__subscription-image\">\r\n <img src=\"${subItem[a].ProductImage}\" alt=\"${subItem[a].ProductImageAlt}\">\r\n </a>\r\n <div class=\"subscription-list__info-wrapper\">\r\n <a href=\"/myvca/subscription-details?id=${subItem[a].Id}\" class=\"subscription-list__presc-title\">${subItem[a].ProductName}</a>\r\n <div class=\"subscription-list__middle\">${subItem[a].Brand}</div>\r\n <div class=\"subscription-list__lower\">\r\n <img class=\"pet-profile-img\" src=\"/-/media/2/project/common/no_img_pet.svg\" data-petid=\"${subItem[a].PetId}\" alt=\"Pet Image Icon\" title=\"${subItem[a].PetName}\">\r\n <div class=\"pet-name\">${subItem[a].PetName}</div>\r\n </div>\r\n ${backorderedFlag}\r\n </div>\r\n <div class=\"subscription-list__details-btn-wrapper\">\r\n <a href=\"/myvca/subscription-details?id=${subItem[a].Id}\" class=\"\">\r\n <span class=\"sr-only\">view details</span>\r\n <i class=\"far fa-chevron-right\"></i>\r\n </a>\r\n </div>\r\n `);\r\n\r\n cardContainer.append(innerCard);\r\n ui.$listContainer.append(cardContainer);\r\n }\r\n \r\n getPetIconFromStorage();\r\n ui.loader.hide();\r\n ui.$listContainer.removeClass('loading');\r\n\r\n\r\n }\r\n\r\n function getPetIconFromStorage() {\r\n let $petPhoto = ui.$listContainer.find('img[data-petid]');\r\n const defaultPetIcon = localStorage.getItem('defaultPetIcon');\r\n let $petPhotoArr = [];\r\n if ($petPhoto.length>0) {\r\n\r\n \r\n\r\n $($petPhoto).each((count,el) => {\r\n let petId = $(el).data('petid');\r\n\r\n if (petId == '') {\r\n return;\r\n }\r\n\r\n if ($petPhotoArr.includes(petId) == true) {\r\n return;\r\n }else{\r\n $petPhotoArr.push(petId);\r\n }\r\n\r\n if (petId in localStorage) {\r\n let imgBlob = localStorage.getItem(petId);\r\n\r\n if (imgBlob !== '') {\r\n $(`img[data-petid=\"${petId}\"]`).each((idx,element) => {\r\n $(element).attr('src','');\r\n $(element).attr('src',imgBlob);\r\n });\r\n } \r\n if (imgBlob == '') {\r\n $(`img[data-petid=\"${petId}\"]`).each((idx,element) => {\r\n $(element).attr('src','');\r\n $(element).attr('src',defaultPetIcon);\r\n });\r\n }\r\n } else {\r\n $(`img[data-petid=\"${petId}\"]`).each((idx,element) => {\r\n $(element).attr('src','');\r\n $(element).attr('src',defaultPetIcon);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n \r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.ManageSubscriptionList.init();\r\n});\r\n\r\n\r\n","import updateSubAPI from '@api/routes/myvca-api/update-subscription';\r\nimport updateAddressAPI from '@api/routes/myvca-api/update-subscription-address';\r\nimport updatePaymentAPI from '@api/routes/myvca-api/update-subscription-payment';\r\nimport ApiService from '@api/api-service';\r\nimport * as submitSpinner from '../custom-forms/form-loading';\r\n\r\nconst DATA_PAYMENT_ID = 'payment-id';\r\nconst DATA_VETSOURCE_ADDRESS_ID = 'vetsource-address-id';\r\n\r\nexport const dataProperties = {\r\n paymentId: DATA_PAYMENT_ID,\r\n vetsourceAddressId: DATA_VETSOURCE_ADDRESS_ID\r\n};\r\n\r\nvar VCA = VCA || {};\r\nvar shipmentDate;\r\nvar isOrderNow = false;\r\nvar isSkipOrderClicked = false;\r\nvar frequencyChanged;\r\nvar getFrequencyValue;\r\nVCA.ManageSubscriptions = (function ($) {\r\n\r\n var ui = {};\r\n function cacheUI() {\r\n ui.$sectionwrapper = $('.js-sub-section');\r\n ui.$popupSection = $('.js-popup-section');\r\n ui.$editBtn = $('.js-edit-info');\r\n ui.$cancelBtn = $('.js-cancel-edits');\r\n ui.$submitBtn = $('.js-subscription-submit-edits');\r\n ui.$changePasswordBtn = $('.js-change-password');\r\n ui.token = $('input[name=\"__RequestVerificationToken\"]').val();\r\n ui.dataSourcedId = window.datasourceId;\r\n ui.loader = $('.ajax-loader');\r\n ui.loaderPopup = $('.update-loader');\r\n ui.$cancel = $('#cancel-content');\r\n ui.$skipOrder = $('#skip-order');\r\n ui.$closeToasterModal = $('.close-toaster-subscription');\r\n ui.$sectionStep = $('.js-subscription-section');\r\n ui.$orderNowLoader = $('.skip-order-loading');\r\n }\r\n function init() {\r\n submitSpinner.setupLoadingSpinner(ui.$orderNowLoader);\r\n if ($('.subscription-details').length <= 0) {\r\n return;\r\n }\r\n $('#subscription-apply-updates').attr('disabled', true);\r\n shipmentDate = $('#shipmentdate').data('input');\r\n getFrequencyValue = $('.js-frequency-select').find('option:selected').val()\r\n cacheUI();\r\n bindEditItem();\r\n bindCancelItem();\r\n bindCancelSkipClick();\r\n bindReasonChangeItem();\r\n bindSkipOrderNowClick();\r\n bindReasonMessage();\r\n bindupdateClick();\r\n // bindSkipCancelItem();\r\n bindCancelSubscriptionComfirmClick();\r\n /* skip-order and order Now */\r\n getSkipOrderValue();\r\n getOrderNowValue();\r\n closeToasterPayment();\r\n }\r\n function closeToasterPayment() {\r\n ui.$closeToasterModal.on('click', '.close-toaster-payment', function (e) {\r\n $('.js-show-toaster').addClass('hidden');\r\n });\r\n }\r\n function bindAddClass() {\r\n if (isOrderNow || isSkipOrderClicked) {\r\n $('.js-popup-section').addClass('skip-order-popup')\r\n } else {\r\n $('.js-popup-section').removeClass('skip-order-popup')\r\n }\r\n }\r\n\r\n function showLoader() {\r\n ui.$sectionStep.css('opacity', '.3').css('pointer-events', 'none');\r\n ui.loaderPopup.show();\r\n }\r\n\r\n function hideLoader() {\r\n ui.$sectionStep.css('opacity', '1').css('pointer-events', 'all');\r\n ui.loaderPopup.hide();\r\n }\r\n\r\n // skip functionality\r\n $('.js-sub-details-edit').on('change', function () {\r\n let changedShipmentDate = $('#shipmentdate').val();\r\n if ((shipmentDate !== changedShipmentDate) || frequencyChanged) {\r\n $('#subscription-apply-updates').removeAttr('disabled');\r\n } else {\r\n $('#subscription-apply-updates').attr('disabled', true);\r\n }\r\n });\r\n function bindEditItem() {\r\n ui.$sectionwrapper.on('click', '.js-edit-info', function (e) {\r\n e.preventDefault();\r\n let frequency = ($('.js-frequency-select').find('option:selected').val());\r\n let frequencyLabel = $('.js-frequency').text();\r\n if (frequencyLabel != \"\" && frequencyLabel.trim() == frequency) {\r\n $('#subscription-apply-updates').attr('disabled', true);\r\n } else {\r\n $('#subscription-apply-updates').removeAttr('disabled');\r\n }\r\n $('.js-edit-info').addClass('disabled');\r\n parent = $(this).closest('.js-sub-section');\r\n parent.find('.js-sub-details-info').hide();\r\n parent.find('.js-sub-details-edit').show();\r\n $('[data-error]').hide();\r\n var tomorrow = new Date();\r\n tomorrow.setDate(tomorrow.getDate() + 1);\r\n let editSeciton = $(this).data('edit');\r\n if (editSeciton == 'details') {\r\n let currentDate = $('#shipmentdate').data('input');\r\n var shipmentflatpickrdate = $('#shipmentdate').flatpickr({\r\n altInput: true,\r\n altFormat: \"m/d/y\",\r\n dateFormat: \"m/d/y\",\r\n disableMobile: true,\r\n defaultDate: currentDate\r\n });\r\n shipmentflatpickrdate.set('minDate', tomorrow); \r\n }\r\n if (editSeciton == 'address') {\r\n let addressId = $('div[data-info=\"address\"]').attr('data-addressName');\r\n let addressIndex = parent.find('.select-box__select option').toArray().findIndex(\r\n option => $(option).text().replace(/\\s+/g, '').includes(addressId.replace(/\\s+/g, ''))\r\n );\r\n if (addressIndex === -1) {\r\n addressIndex = 1;\r\n } else {\r\n parent.find('.select-box__select').attr('data-value', addressId);\r\n } \r\n parent.find('.select-box__select').prop(\"selectedIndex\", addressIndex); \r\n }\r\n if (editSeciton == 'payment') {\r\n let paymentId = $('div[data-info=\"payment\"]').attr('data-paymentText');\r\n let paymentIndex = parent.find('.select-box__select option').toArray().findIndex(\r\n option => $(option).text().replace(/\\s+/g, '').includes(paymentId.replace(/\\s+/g, ''))\r\n );\r\n if(paymentIndex === -1) {\r\n paymentIndex = 1\r\n } else {\r\n parent.find('.select-box__select').attr('data-value', paymentId);\r\n }\r\n parent.find('.select-box__select').prop(\"selectedIndex\", paymentIndex);\r\n }\r\n });\r\n }\r\n function hideSection() {\r\n $('.js-sub-details-edit').hide();\r\n $('.js-sub-details-info').show();\r\n $('.js-edit-info').removeClass('disabled');\r\n }\r\n function bindCancelItem() {\r\n ui.$sectionwrapper.on('click', '.js-cancel-edits', function (e) {\r\n hideSection(); \r\n $('.js-frequency-select').find('option[value=\"' + getFrequencyValue + '\"]').prop('selected', true);\r\n });\r\n }\r\n\r\n $('.js-frequency-select').on('change', function () {\r\n frequencyChanged = $('.js-frequency-select').find('option:selected').data('id');\r\n });\r\n\r\n function bindupdateClick() {\r\n ui.$sectionwrapper.on('click', '.js-submit-edits, .js-subscription-submit-edits', function (evt) {\r\n evt.preventDefault();\r\n isSkipOrderClicked = false;\r\n isOrderNow = false;\r\n const $targetEl = $(evt.target);\r\n const section = $(this).data('edit');\r\n\r\n switch (section) {\r\n case 'details':\r\n if (!$('.js-shipment-date').val()) return;\r\n updateDetails();\r\n break;\r\n case 'address':\r\n updateAddress($targetEl);\r\n break;\r\n case 'payment':\r\n updatePayment($targetEl);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n // userstory: 27979 - Skip functionality\r\n function bindSkipOrderNowClick() {\r\n ui.$popupSection.on('click', '.js-skip-order-btn, .js-order-now-btn', function (e) {\r\n submitSpinner.setupLoadingSpinner(ui.$orderNowLoader);\r\n submitSpinner.startLoadingSpinner(ui.$orderNowLoader);\r\n updateDetails();\r\n });\r\n }\r\n function getSkipOrderValue() {\r\n shipmentDate = $('#shipmentdate').data('input');\r\n let nextShipmentDate = $('.js-next-shipments').text();\r\n let nextDate = nextShipmentDate.split(',');\r\n $('#next-shipment-date').text('Your next shipment is scheduled for' + ' ' + nextDate[0] + '.');\r\n $('#skipped-date').text('Your' + ' ' + shipmentDate + ' ' + 'shipment will be skipped.');\r\n $('.skip-next-order-date').show();\r\n $('.subscription-order-now').hide();\r\n \r\n bindAddClass();\r\n }\r\n function getOrderNowValue() {\r\n let newDate = new Date();\r\n var curr_date = newDate.getDate() + 1;\r\n var curr_month = newDate.getMonth() + 1 < 10 ? '0' + (newDate.getMonth() + 1) : (newDate.getMonth() + 1);\r\n var curr_year = newDate.getFullYear();\r\n let orderShipmentDate = curr_month + \"/\" + curr_date + \"/\" + curr_year;\r\n $('#current-order-date').text(orderShipmentDate);\r\n let frequencyLabel = $('.js-frequency').text();\r\n $('.subscription-order-now').show();\r\n $('.skip-next-order-date').hide();\r\n $('#order-frequency').text(frequencyLabel);\r\n let nextShipmentDate = [];\r\n let hndSubscriptionFrequency = $('#hndSubscriptionFrequency').val();\r\n for (var i = 1; i <= 4; i++) {\r\n var result = new Date(orderShipmentDate);\r\n result.setDate(result.getDate() + 1 + (hndSubscriptionFrequency * i));\r\n var setDate = [(result.getMonth() + 1 < 10 ? '0' + (result.getMonth() + 1) : (result.getMonth() + 1)), result.getDate(), result.getFullYear()].join('/')\r\n if (i == 1) {\r\n $('#order-next-shipment').text(setDate);\r\n } else {\r\n nextShipmentDate.push(setDate);\r\n }\r\n }\r\n $('#next-shipment-dates').text(nextShipmentDate);\r\n bindAddClass();\r\n }\r\n function bindCancelSkipClick() {\r\n $('.subscription-details').on('click', '.js-cancel-subcription, .js-skip-next-order,.js-order-now', function (e) {\r\n e.preventDefault();\r\n randomizeDropdownList();\r\n $('#cancel-subscription').modal('show');\r\n if (e.target.id.includes('cancelSubscription')) {\r\n $('.js-popup-section').removeClass('skip-order-popup')\r\n ui.$cancel.show();\r\n ui.$skipOrder.hide();\r\n $('#skip-order').hide();\r\n } else {\r\n if (e.target.id.includes('skipNextOrder')) {\r\n // Slip Order Analytics \r\n window.VCA.SubscriptionsDatalayer.datalayerSkipOrder('skip_order_click', 'Skip Order')\r\n isSkipOrderClicked = true;\r\n getSkipOrderValue();\r\n\r\n } else {\r\n //Order Now Analytics\r\n window.VCA.SubscriptionsDatalayer.datalayerSkipOrder('order_now_click','Order Now')\r\n isOrderNow = true;\r\n getOrderNowValue();\r\n }\r\n ui.$skipOrder.show();\r\n ui.$cancel.show();\r\n $('#cancel-content').hide();\r\n }\r\n });\r\n }\r\n function randomizeDropdownList() {\r\n let selector = $('.select-box__select.js-cancel-reason option').not(':first');\r\n for (var i = 0; i < selector.length; i++) {\r\n var target = Math.floor(Math.random() * selector.length - 1) + 1;\r\n var target2 = Math.floor(Math.random() * selector.length - 1) + 1;\r\n selector.eq(target).before(selector.eq(target2));\r\n }\r\n }\r\n function bindReasonChangeItem() {\r\n $('#cancel-subscription').on('change', '.js-cancel-reason', function (e) {\r\n e.preventDefault();\r\n let value = $(this).val().toLowerCase();\r\n if (value == 'other') {\r\n $('.js-cancelmessage').show();\r\n $('.js-comfrim-cancel').addClass('disabled');\r\n } else if (value == '') {\r\n $('.js-cancelmessage').hide();\r\n $('.js-cancelmessage').val('');\r\n $('.js-comfrim-cancel').addClass('disabled');\r\n } else {\r\n $('.js-cancelmessage').hide();\r\n $('.js-cancelmessage').val('');\r\n $('.js-comfrim-cancel').removeClass('disabled');\r\n }\r\n });\r\n }\r\n function bindCancelSubscriptionComfirmClick() {\r\n $('#cancel-subscription').on('click', '.js-comfrim-cancel', function (e) {\r\n e.preventDefault();\r\n $('#cancel-subscription').modal('hide');\r\n\r\n let vetsourceid = $(this).data('vetsourceid');\r\n cancelSubscription(vetsourceid);\r\n });\r\n }\r\n function bindReasonMessage() {\r\n $('#cancel-subscription').on('keyup change', '.js-cancelmessage', function (e) {\r\n if ($(this).val().length != '') {\r\n $('.js-comfrim-cancel').removeClass('disabled');\r\n } else {\r\n $('.js-comfrim-cancel').addClass('disabled');\r\n }\r\n });\r\n }\r\n async function updateDetails() {\r\n\r\n if (!isOrderNow && !isSkipOrderClicked) {\r\n ui.loader.show();\r\n }\r\n \r\n let vetid = $('[data-vetsourceid]').data('vetsourceid');\r\n\r\n let next = $('.js-shipment-date').val();\r\n if (isOrderNow) {\r\n //OrderNow Analytics \r\n window.VCA.SubscriptionsDatalayer.datalayerSkipOrder('confirm_order_now','Confirm Order Now');\r\n let newDate = new Date();\r\n next = [newDate.getMonth() + 1, newDate.getDate() + 1, newDate.getFullYear()].join('/'); \r\n }\r\n\r\n let nextShipmentDate = $('.js-next-shipments').text();\r\n if (isSkipOrderClicked) {\r\n // Skip Next Order Analytics\r\n window.VCA.SubscriptionsDatalayer.datalayerSkipOrder('confirm_skip_order', 'Confirm Skip Order');\r\n if (nextShipmentDate != null && nextShipmentDate != undefined && nextShipmentDate != \"\") {\r\n let nextDate = nextShipmentDate.split(',');\r\n if (nextDate[0] != null && nextDate[0] != \"\") {\r\n next = $.trim(nextDate[0]);\r\n }\r\n } \r\n }\r\n\r\n let frequency = $('.js-frequency-select').find('option:selected').data('id');\r\n var params = {\r\n \"Id\": vetid,\r\n \"Frequency\": frequency,\r\n \"NextShipmentDate\": next\r\n };\r\n \r\n const { success, data, error } = await updateSubAPI.post(params);\r\n if (!success || !data) {\r\n $('[data-error=\"details\"]').text(error).show();\r\n $('[data-form=\"details\"]').hide();\r\n $('[data-info=\"details\"]').show();\r\n $('.js-edit-info').removeClass('disabled');\r\n hideLoader();\r\n return;\r\n }\r\n else {\r\n if(isOrderNow || isSkipOrderClicked) {\r\n $('.js-show-toaster').removeClass('hidden');\r\n window.scrollTo({ top: 0, behavior: 'smooth' });\r\n window.setTimeout(function () {\r\n location.reload();\r\n }, 3000);\r\n } else {\r\n $('.js-show-toaster').addClass('hidden');\r\n location.reload();\r\n }\r\n isOrderNow ? $('#OrderNowSuccessMsg').text('Confirmed! Your order has been scheduled to ship as soon as possible.') : $('#OrderNowSuccessMsg').text('Confirmed! Your' + ' ' + shipmentDate + ' ' + 'shipment will be skipped. Your next shipment is scheduled for' + ' ' + next + '.');\r\n isOrderNow ? $('.subscription-details__sub-details').addClass('details-bg-color') : '';\r\n $('js-show-toaster:not(hidden)') ? ui.loader.show() : '';\r\n $('#cancel-subscription').modal('hide');\r\n submitSpinner.stopLoadingSpinner(ui.$orderNowLoader);\r\n }\r\n };\r\n\r\n async function updateAddress($targetEl) {\r\n ui.loader.show();\r\n\r\n const vetid = $('[data-vetsourceid]').data('vetsourceid');\r\n const addressId = $targetEl.data(DATA_VETSOURCE_ADDRESS_ID);\r\n\r\n const params = {\r\n Id: vetid,\r\n VetSourceAddressId: addressId\r\n };\r\n\r\n const { success, data, error } = await updateAddressAPI.post(params);\r\n\r\n if (success && data) {\r\n location.reload();\r\n } else {\r\n $('[data-error=\"address\"]').text(error).show();\r\n $('[data-form=\"address\"]').hide();\r\n $('[data-info=\"address\"]').show();\r\n $('.js-edit-info').removeClass('disabled');\r\n }\r\n\r\n ui.loader.hide();\r\n };\r\n async function updatePayment($targetEl) {\r\n ui.loader.show();\r\n\r\n const vetid = $('[data-vetsourceid]').data('vetsourceid');\r\n const paymentId = $targetEl.data(DATA_PAYMENT_ID);\r\n\r\n const params = {\r\n \"Id\": vetid,\r\n \"PaymentId\": paymentId\r\n };\r\n\r\n const { success, data, error } = await updatePaymentAPI.post(params);\r\n\r\n if (success && data) {\r\n location.reload();\r\n } else {\r\n $('[data-error=\"payment\"]').text(error).show();\r\n $('[data-form=\"payment\"]').hide();\r\n $('[data-info=\"payment\"]').show();\r\n $('.js-edit-info').removeClass('disabled');\r\n }\r\n\r\n ui.loader.hide();\r\n };\r\n async function cancelSubscription(vetsourceid) {\r\n let reason = $('.js-cancel-reason').val();\r\n let otherMessage = $('.js-cancelmessage').val();\r\n let params = {\r\n \"Id\": vetsourceid,\r\n \"Reason\": reason,\r\n \"OtherDetails\": otherMessage\r\n }\r\n\r\n const url = '/myvca-api/subscriptions/delete';\r\n let api = new ApiService(url);\r\n const { data, success, error } = await api.post(params);\r\n\r\n if (!success || !data) {\r\n alert(`Sorry, There was an error. ${error}`);\r\n } else {\r\n window.VCA.SubscriptionsDatalayer.datalayerPushSubCancel(params);\r\n var redirect = $('#redirectlink').val();\r\n window.location.assign(redirect);\r\n ui.loader.hide();\r\n }\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.ManageSubscriptions.init();\r\n});","let VCA = VCA || {};\r\n\r\nVCA.MyVCANavigationTabs = (function ($) {\r\n\r\n let ui = {};\r\n\r\n function cacheUI() {\r\n ui.$TabButton = $('.js-myvca-nav-tabs');\r\n ui.$TabContent = $('.js-myvca-tab-content');\r\n ui.$SelectBox = $('.js-myvca-nav-selectbox');\r\n ui.$MobileTigger = $('.js-myvca-tab-tigger');\r\n }\r\n\r\n function bindEvents() {\r\n ui.$TabButton.on('click', displayContentDesktop);\r\n ui.$SelectBox.on('change', displayContentMobile);\r\n ui.$MobileTigger.on('click', toggleMobile);\r\n }\r\n\r\n function toggleMobile() {\r\n let parent = $(this).closest('.myvca-left-nav__tabs-sidebar');\r\n parent.toggleClass('open');\r\n }\r\n\r\n function displayContentDesktop(e) {\r\n const btn = $(e.currentTarget);\r\n const sideBar = btn.parent('.myvca-left-nav__tabs-sidebar')[0];\r\n const tabsContainer = $(sideBar).parent('.myvca-left-nav__tabs')[0];\r\n const tabNumber = btn.data('for-tab');\r\n const tabToActivate = $(tabsContainer).find(`.myvca-left-nav__tab-content[data-tab=\"${tabNumber}\"]`)[0];\r\n const mobileDropdownSelectToActivate = $('.myvca-left-nav__selectbox-select');\r\n let tabBtnIsActive = btn.hasClass('active');\r\n\r\n\r\n if (tabBtnIsActive) {\r\n return;\r\n }\r\n\r\n if(!tabToActivate){\r\n return;\r\n }\r\n\r\n ui.$TabButton.each((idx,btn) => {\r\n $(btn).removeClass('active');\r\n });\r\n\r\n ui.$TabContent.each((idx,contentContainer) => {\r\n $(contentContainer).removeClass('active');\r\n });\r\n\r\n btn.addClass('active');\r\n $(tabToActivate).addClass('active');\r\n mobileDropdownSelectToActivate.val(tabNumber);\r\n }\r\n\r\n function displayContentMobile(e) {\r\n const selectOption = $(e.currentTarget);\r\n const selectOptionValue = $(selectOption).val();\r\n const tabsParentContainer = selectOption.closest('.myvca-left-nav__tabs')[0];\r\n const tabToActivateMobile = $(tabsParentContainer).find(`.myvca-left-nav__tab-content[data-tab=\"${selectOptionValue}\"]`)[0];\r\n\r\n ui.$TabContent.each((idx,contentContainer) => {\r\n $(contentContainer).removeClass('active');\r\n });\r\n\r\n ui.$TabButton.each((idx,btn) => {\r\n $(btn).removeClass('active');\r\n });\r\n\r\n $(ui.$SelectBox).attr('data-value', selectOptionValue);\r\n $(tabToActivateMobile).addClass('active');\r\n $(tabsParentContainer).find(`.myvca-left-nav__tabs-btn[data-for-tab=\"${selectOptionValue}\"]`).addClass('active');\r\n }\r\n\r\n function init() {\r\n if ($('.myvca-left-nav').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n bindEvents();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n $(document).ready(function() {\r\n VCA.MyVCANavigationTabs.init();\r\n });\r\n});\r\n\r\n","import ApiService from '@api/api-service';\r\n\r\nlet VCA = VCA || {};\r\n\r\nVCA.PatientDocumentsPetPage = (function ($) {\r\n\r\n let ui = {};\r\n let embedTag = \"\";\r\n\r\n\r\n function cacheUI() {\r\n ui.$TabBtn = $('.js-patient-docs-btn');\r\n ui.$TabContent = $('.petpage-patient-docs__content');\r\n ui.$DisplayTitle = $('.petpage-patient-docs__title');\r\n ui.$CareInstructionsPdfBtn = $('.petpage-patient-docs__pdf-download.care-instructions');\r\n ui.$VaccineRecordsPdfBtn = $('.petpage-patient-docs__pdf-download.vaccine-records');\r\n ui.$MedialRecordsPdfBtn = $('.petpage-patient-docs__pdf-download.medical-records');\r\n ui.$TestResultsPdfBtn = $('.petpage-patient-docs__pdf-download.test-results');\r\n ui.$LoadingSpinner = $('.petpage-patient-docs__loading-spinner');\r\n ui.$PetId = petId;\r\n }\r\n\r\n function bindEvents() {\r\n ui.$TabBtn.on('click', displayContent);\r\n ui.$CareInstructionsPdfBtn.on('click', initCareInstructionsBtn);\r\n ui.$VaccineRecordsPdfBtn.on('click', initVaccineRecordsBtn);\r\n ui.$MedialRecordsPdfBtn.on('click', initMedicalRecordsBtn);\r\n ui.$TestResultsPdfBtn.on('click', initTestResultsBtn);\r\n\r\n const userAgent = navigator.userAgent || navigator.vendor || window.opera;\r\n if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\r\n embedTag = \"iframe\";\r\n } else {\r\n embedTag = \"embed\";\r\n }\r\n }\r\n\r\n function displayContent(e) {\r\n e.preventDefault();\r\n\r\n const btn = $(e.currentTarget);\r\n const tabNumber = btn.data('nav');\r\n const tabName = btn.data('name');\r\n const contentContainer = $('.petpage-patient-docs__content-container');\r\n const contentToActivate = $(contentContainer).find(`.petpage-patient-docs__content[data-nav-content=\"${tabNumber}\"]`)[0];\r\n let tabBtnIsActive = btn.hasClass('active');\r\n\r\n if (tabBtnIsActive) {\r\n return;\r\n }\r\n\r\n ui.$TabBtn.each((idx,btn) => {\r\n $(btn).removeClass('active');\r\n });\r\n\r\n ui.$TabContent.each((idx,content) => {\r\n $(content).removeClass('active');\r\n });\r\n\r\n btn.addClass('active');\r\n $(contentToActivate).addClass('active');\r\n ui.$DisplayTitle.text(tabName);\r\n }\r\n\r\n function resetBtnAndLoader() {\r\n $('.petpage-patient-docs__pdf-download').each((idx,btn) => {\r\n $(btn).show();\r\n });\r\n\r\n ui.$LoadingSpinner.each((idx,loader) => {\r\n $(loader).hide();\r\n });\r\n }\r\n\r\n function initCareInstructionsBtn(e) {\r\n let btn = $(e.currentTarget);\r\n let documentId = btn.data('documentid');\r\n let titleOfPDF = btn.data('title');\r\n let loadingSpinner = btn.closest('.info').find('.petpage-patient-docs__loading-spinner');\r\n\r\n btn.hide();\r\n loadingSpinner.show();\r\n downloadCareInstructionsPdf(documentId,titleOfPDF);\r\n }\r\n\r\n function initVaccineRecordsBtn(e) {\r\n let btn = $(e.currentTarget);\r\n let documentId = btn.data('documentid');\r\n let titleOfPDF = btn.data('title');\r\n let loadingSpinner = btn.closest('.info').find('.petpage-patient-docs__loading-spinner');\r\n let url = '/myvca-api/get-vaccine-record-document';\r\n\r\n btn.hide();\r\n loadingSpinner.show();\r\n downloadPdf(url,petId,documentId,titleOfPDF);\r\n }\r\n\r\n function initMedicalRecordsBtn(e) {\r\n let btn = $(e.currentTarget);\r\n let documentId = btn.data('documentid');\r\n let titleOfPDF = btn.data('title');\r\n let loadingSpinner = btn.closest('.info').find('.petpage-patient-docs__loading-spinner');\r\n let url = '/myvca-api/get-medical-record-document';\r\n\r\n btn.hide();\r\n loadingSpinner.show();\r\n downloadPdf(url,petId,documentId,titleOfPDF);\r\n }\r\n\r\n function initTestResultsBtn(e) {\r\n let btn = $(e.currentTarget);\r\n let documentId = btn.data('documentid');\r\n let titleOfPDF = btn.data('title');\r\n let loadingSpinner = btn.closest('.info').find('.petpage-patient-docs__loading-spinner');\r\n let url = '/myvca-api/get-diagnostic-document';\r\n\r\n btn.hide();\r\n loadingSpinner.show();\r\n downloadPdf(url,petId,documentId,titleOfPDF);\r\n } \r\n\r\n async function downloadCareInstructionsPdf(documentId, titleOfPDF) {\r\n const url = '/myvca-api/get-care-instruction-document';\r\n let api = new ApiService(url);\r\n let query = { documentId };\r\n const { data, success, error } = await api.query(query);\r\n \r\n if (!success || (error !== null && error !== '')) {\r\n resetBtnAndLoader();\r\n alert(`Sorry, this document is not available. ${error}`);\r\n console.log(`Status: ${error}`);\r\n } else {\r\n resetBtnAndLoader();\r\n \r\n let response = data;\r\n var pdfWindow = window.open(\"\");\r\n if (!pdfWindow) {\r\n alert(\"Popup blocked! Please allow popups for this website.\");\r\n return;\r\n }\r\n \r\n const base64String = response.replace(\"data:application/pdf;base64,\", \"\");\r\n const byteArray = Uint8Array.from(atob(base64String), c => c.charCodeAt(0));\r\n const blob = new Blob([byteArray], { type: 'application/pdf' });\r\n \r\n const objectUrl = URL.createObjectURL(blob);\r\n \r\n // Generate the HTML content with the embed tag directly in the body\r\n pdfWindow.document.write(`\r\n <!DOCTYPE html>\r\n <html lang=\"en\">\r\n <head>\r\n <meta charset=\"UTF-8\">\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n <title>${titleOfPDF}</title>\r\n <style>\r\n body {\r\n margin: 0;\r\n }\r\n ${embedTag} {\r\n width: 100%;\r\n height: 100vh;\r\n border: none;\r\n }\r\n </style> \r\n </head>\r\n <body>\r\n <${embedTag} id=\"viewer\" src=\"${objectUrl}\" type=\"application/pdf\">\r\n <p>Your browser does not support PDFs.</p>\r\n </${embedTag}>\r\n </body>\r\n </html>`);\r\n \r\n pdfWindow.document.close();\r\n }\r\n }\r\n\r\n async function downloadPdf(urlPath, petId, documentId, titleOfPDF) {\r\n const url = urlPath;\r\n let api = new ApiService(url);\r\n let query = { petId, documentId };\r\n const { data, success, error } = await api.query(query);\r\n\r\n if (!success || (error !== null && error !== '')) {\r\n resetBtnAndLoader();\r\n alert(`Sorry, this document is not available. ${error}`);\r\n console.log(`Status: ${error}`);\r\n } else { \r\n resetBtnAndLoader();\r\n\r\n let response = data;\r\n var pdfWindow = window.open(\"\");\r\n if (!pdfWindow) {\r\n alert(\"Popup blocked! Please allow popups for this website.\");\r\n return;\r\n }\r\n \r\n const base64String = response.replace(\"data:application/pdf;base64,\", \"\");\r\n const byteArray = Uint8Array.from(atob(base64String), c => c.charCodeAt(0));\r\n const blob = new Blob([byteArray], { type: 'application/pdf' });\r\n \r\n const objectUrl = URL.createObjectURL(blob);\r\n \r\n // Generate the HTML content with the embed tag directly in the body\r\n pdfWindow.document.write(`\r\n <!DOCTYPE html>\r\n <html lang=\"en\">\r\n <head>\r\n <meta charset=\"UTF-8\">\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n <title>${titleOfPDF}</title>\r\n <style>\r\n body {\r\n margin: 0;\r\n }\r\n ${embedTag} {\r\n width: 100%;\r\n height: 100vh;\r\n border: none;\r\n }\r\n </style> \r\n </head>\r\n <body>\r\n <${embedTag} id=\"viewer\" src=\"${objectUrl}\" type=\"application/pdf\">\r\n <p>Your browser does not support PDFs.</p>\r\n </${embedTag}>\r\n </body>\r\n </html>`);\r\n \r\n pdfWindow.document.close();\r\n }\r\n }\r\n\r\n function init() {\r\n if ($('.petpage-patient-docs').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n bindEvents();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n $(document).ready(function() {\r\n VCA.PatientDocumentsPetPage.init();\r\n });\r\n});\r\n","import removePaymentMethod from '@api/routes/account/RemovePaymentMethod';\r\nimport getPaymentMethods from '@api/routes/account/GetPaymentMethods';\r\nimport addNewPaymentMethod from '@api/routes/account/AddNewPaymentMethod';\r\nimport setDefaultPaymentMethod from '@api/routes/account/SetDefaultPaymentMethod';\r\nimport AddPaymentWithaddress from '../add-payment-with-address';\r\nimport UpdatePaymentMethod from '../../../api/routes/account/UpdatePaymentMethod';\r\n\r\n\r\nvar VCA = VCA || {};\r\nvar paymentListCard = [];\r\nvar paymentCardId = '';\r\nvar paymentFailureFF = false;\r\n\r\nVCA.PaymentManagement = (function ($) {\r\n\r\n var ui = {};\r\n let config = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\r\n }\r\n }\r\n\r\n function cacheUI() {\r\n ui.$tabswrapper = $('.payment-management');\r\n ui.$setDefaultBtn = $('.js-set-cc-default');\r\n ui.$deleteBtn = $('.js-delete-cc');\r\n ui.$cancelBtn = $('.js-cancel-add-payment');\r\n ui.$submitBtn = $('.js-submit-new-payment');\r\n ui.$paymentList = $('.js-payment-list');\r\n ui.$paymentForm = $('.js-add-payment-form');\r\n ui.$errorMessateSection = $('.js-error-message');\r\n ui.token = $('#request-verification-token').val();\r\n ui.loader = $('.payment-management .ajax-loader');\r\n ui.$noPayment = $('.js-no-payments');\r\n ui.$updateAddressForm = $('.js-update-wrapper');\r\n ui.$updatePaymentModal = $('#update-payment-management-modal');\r\n ui.$closeToasterModal = $('.close-toaster-payment');\r\n ui.$addNewPaymentCTA = $('.js-add-payment-method');\r\n ui.$toasterMsgPayment = $('[data-region=\"addPaymentToasterMsg\"]');\r\n ui.$paymentManagementTabContent = $('.js-myvca-tab-content');\r\n }\r\n\r\n function init() {\r\n if ($('.js-payment-management').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n initGetpayments();\r\n bindSetDefaultClick();\r\n bindDeleteClick();\r\n bindComfirmDeleteClick();\r\n bindAddPaymentClick();\r\n bindCancelPaymentClick();\r\n bindUpdateAdrress();\r\n saveUpdateAddressForm();\r\n cancelUpdateAddressForm();\r\n continueUpdatePayment();\r\n cancelEditUpdatePayment();\r\n closeToasterPayment();\r\n disabledSavePayment();\r\n bindSaveNewPaymentClick();\r\n }\r\n\r\n function bindUpdateAdrress() {\r\n ui.$tabswrapper.on('click', '.js-update-payment-cc', function (e) {\r\n e.preventDefault();\r\n $(window).scrollTop(0);\r\n paymentCardId = $(this).data('paymentid');\r\n parent = $(this).closest('.js-myvca-account-box');\r\n $('.js-payment-management').hide();\r\n ui.$updateAddressForm.show();\r\n const cardListIndex = paymentListCard.findIndex((paymentIndexId) => paymentIndexId.Id == paymentCardId);\r\n const cardDetails = paymentListCard[cardListIndex];\r\n ui.$updateAddressForm.find('[data-region=\"creditNumber\"]').html(cardDetails.CardName + \" \" + \"****\" + cardDetails.LastDigits);\r\n ui.$updateAddressForm.find('#is-default-update').prop('checked', cardDetails.IsDefault);\r\n if(cardDetails.Address != null) {\r\n ui.$updateAddressForm.find('[data-item=\"nameOnCard\"]').val(cardDetails.Address.FirstName);\r\n ui.$updateAddressForm.find('[data-item=\"updateAddress\"]').val(cardDetails.Address.Address1);\r\n ui.$updateAddressForm.find('[data-item=\"updateAddress1\"]').val(cardDetails.Address.Address2);\r\n ui.$updateAddressForm.find('[data-item=\"updateCity\"]').val(cardDetails.Address.City);\r\n ui.$updateAddressForm.find('[data-item=\"updateState\"]').val(cardDetails.Address.State);\r\n ui.$updateAddressForm.find('[data-item=\"updateZip\"]').val(cardDetails.Address.ZipPostalCode);\r\n }\r\n $('.js-update-payment-address-form').attr('disabled', true);\r\n $('.js-myvca-account-box').find('input').each(function(index) {\r\n let el = $(this);\r\n if (el.hasClass('js-required')) {\r\n if (el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n });\r\n\r\n $('.js-myvca-account-box').find('select').each(function(index) {\r\n let el = $(this);\r\n console.log('element', el.val())\r\n if (el.hasClass('js-required')) {\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n function bindSaveNewPaymentClick() {\r\n window.addEventListener('successAddPayment', (evt) => {\r\n ui.$paymentForm.hide();\r\n ui.$paymentList.show();\r\n initGetpayments();\r\n $('.js-toaster-visible').removeClass('hidden');\r\n $(window).scrollTop(0);\r\n ui.$toasterMsgPayment.html('Your payment method has been added');\r\n var iframe = document.getElementById('paymentFrame');\r\n iframe.remove();\r\n clearAddNewPaymentDetails();\r\n window.removeEventListener('successAddPayment', bindSaveNewPaymentClick);\r\n }); \r\n }\r\n\r\n function clearAddNewPaymentDetails() {\r\n $('.was-validated').removeClass('was-validated');\r\n $('#active-subscriptions').prop('checked', false);\r\n $('#savePayment').attr('disabled', true).addClass('disabled');\r\n ui.$addNewPaymentCTA.show();\r\n $('#addPaymentContainer').find('[data-control=\"cardHolderName\"]').val('');\r\n $('#addPaymentContainer').find('[data-control=\"address\"]').val('');\r\n $('#addPaymentContainer').find('[data-control=\"address2\"]').val('');\r\n $('#addPaymentContainer').find('[data-control=\"city\"]').val('');\r\n $('#addPaymentContainer').find('[data-control=\"select\"]').val('');\r\n $('#addPaymentContainer').find('[data-control=\"select\"]').attr('data-value', '');\r\n $('#addPaymentContainer').find('[data-control=\"zip\"]').val('');\r\n }\r\n\r\n function disabledSavePayment() {\r\n $('.js-myvca-account-box').find('input').each((idx,el) => {\r\n $(el).on('change keyup', () => {\r\n disableSaveValidation($(el))\r\n });\r\n });\r\n\r\n $('.js-myvca-account-box').find('select').each((idx,el) => {\r\n $(el).on('change keyup', () => {\r\n disableSaveValidation($(el));\r\n });\r\n });\r\n }\r\n\r\n function disableSaveValidation(el) {\r\n let zipReg = /^\\d{5}$/;\r\n let zipValue = ui.$updateAddressForm.find('[data-item=\"updateZip\"]').val();\r\n const validAddress = ui.$updateAddressForm.find('[data-item=\"nameOnCard\"]').val() !== '' &&\r\n ui.$updateAddressForm.find('[data-item=\"updateAddress\"]').val() !== '' && \r\n ui.$updateAddressForm.find('[data-item=\"updateCity\"]').val() !== '' &&\r\n ui.$updateAddressForm.find('[data-item=\"updateState\"]').val() !== '' &&\r\n ui.$updateAddressForm.find('[data-item=\"updateState\"]').val() !== null &&\r\n zipValue !== '' && zipReg.test(zipValue);\r\n if ((el.val() == '' || el.val() == null || (el.attr(\"name\") == 'updateZip' && !zipReg.test(zipValue))) && el.hasClass('js-required')) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n if(validAddress) {\r\n ui.$paymentManagementTabContent.find('.js-update-payment-address-form').removeAttr('disabled');\r\n } else {\r\n ui.$paymentManagementTabContent.find('.js-update-payment-address-form').attr('disabled', true);\r\n }\r\n }\r\n\r\n function saveUpdateAddressForm() {\r\n ui.$updateAddressForm.on('click', '.js-update-payment-address-form', async function (e) {\r\n e.preventDefault();\r\n parent = $(this).closest('.js-myvca-account-box');\r\n if(!checkform(parent)){\r\n return;\r\n }\r\n ui.loader.show();\r\n let payload = constructUpdatePayload();\r\n const { success, data, error } = await UpdatePaymentMethod.post(payload);\r\n ui.$updateAddressForm.find('[data-region=\"errorUpdatePayment]').remove();\r\n if(!success){\r\n console.log('failed', error);\r\n ui.loader.hide();\r\n return;\r\n }else{\r\n if(data?.result) {\r\n $('.js-toaster-visible').removeClass('hidden');\r\n $(window).scrollTop(0);\r\n initGetpayments();\r\n $('.js-payment-management').show();\r\n ui.$updateAddressForm.show();\r\n ui.$updateAddressForm.hide();\r\n ui.$toasterMsgPayment.html('Your payment method has been updated');\r\n } else {\r\n ui.$updateAddressForm.find('.js-update-payment-buttons').prepend(\r\n `<span class=\"text-color-vca-red\" data-region=\"errorUpdatePayment\" style=\"display: block; text-align: center;\">${data?.Error}</span>`\r\n )\r\n }\r\n }\r\n });\r\n }\r\n\r\n function constructUpdatePayload() {\r\n const isDefault = ui.$updateAddressForm.find('#is-default-update').length ? ui.$updateAddressForm.find('#is-default-update')[0].checked : false;\r\n let payload = {\r\n paymentId: paymentCardId,\r\n name: ui.$updateAddressForm.find('[data-item=\"nameOnCard\"]').val(),\r\n address1: ui.$updateAddressForm.find('[data-item=\"updateAddress\"]').val(),\r\n address2: ui.$updateAddressForm.find('[data-item=\"updateAddress1\"]').val(),\r\n city: ui.$updateAddressForm.find('[data-item=\"updateCity\"]').val(),\r\n state: ui.$updateAddressForm.find('[data-item=\"updateState\"]').val(),\r\n zip: ui.$updateAddressForm.find('[data-item=\"updateZip\"]').val(),\r\n isDefault: isDefault,\r\n }\r\n return payload;\r\n }\r\n\r\n function continueUpdatePayment() {\r\n $('.js-continue-update-payment').on('click', function (e) {\r\n e.preventDefault();\r\n ui.$updatePaymentModal.modal('hide');\r\n });\r\n }\r\n\r\n function cancelEditUpdatePayment() {\r\n $('.js-edit-cancel-update-payment').on('click', function (e) {\r\n e.preventDefault();\r\n $('.js-payment-management').show();\r\n ui.$updateAddressForm.hide();\r\n ui.$updatePaymentModal.modal('hide');\r\n });\r\n }\r\n\r\n function closeToasterPayment() {\r\n ui.$closeToasterModal.on('click', function (e) {\r\n $('.js-toaster-visible').addClass('hidden');\r\n });\r\n }\r\n\r\n function checkform(parent) {\r\n var zipReg = /^\\d{5}$/;\r\n\r\n let valid = true\r\n parent.find('input').each(function(index) {\r\n let el = $(this);\r\n let elmId = el.attr(\"name\");\r\n let inputText = el.val();\r\n if (el.hasClass('js-required')) {\r\n if (elmId == 'updateZip') {\r\n if(!zipReg.test(inputText)) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n }\r\n }\r\n else if (el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n });\r\n parent.find('select').each(function(index) {\r\n let el = $(this);\r\n if (el.hasClass('js-required')) {\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n });\r\n\r\n return valid;\r\n }\r\n\r\n function cancelUpdateAddressForm() {\r\n ui.$updateAddressForm.on('click', '.js-cancel-payment-address-form', function (e) {\r\n e.preventDefault();\r\n ui.$updatePaymentModal.modal('show');\r\n });\r\n }\r\n\r\n async function initGetpayments() {\r\n $('#savePayment').prop('disabled', true);\r\n ui.loader.show();\r\n const { success, data, error, IsPaymentFailureFF } = await getPaymentMethods.get();\r\n paymentFailureFF = IsPaymentFailureFF;\r\n if(!success){\r\n console.log('failed', error);\r\n $('.js-error-message-text').text(error);\r\n ui.$errorMessateSection.show();\r\n ui.loader.hide();\r\n return;\r\n }else{\r\n createPaymentList(data);\r\n }\r\n\r\n };\r\n\r\n\r\n function createPaymentList(paymentList) {\r\n paymentListCard = paymentList;\r\n \r\n ui.$paymentList.empty();\r\n\r\n if(paymentList == null || paymentList.length < 1){\r\n ui.$noPayment.removeClass(\"hidden\");\r\n }\r\n\r\n $.each(paymentList, function (i, item) {\r\n let Default = '';\r\n let defaultUpdateButton;\r\n let defaultUpdateTag;\r\n const validAddressForm = (item.Address !== null && item.Address.FirstName && item.Address.Address1 && item.Address.ZipPostalCode && item.Address.State && item.Address.City) || !paymentFailureFF;\r\n\r\n if(item.IsDefault) {\r\n Default = 'js-default-card';\r\n }\r\n\r\n if(validAddressForm) {\r\n defaultUpdateButton = `\r\n <button data-paymentid=\"${item.Id}\" id=\"delete-payment-${i}\" data-target=\"#delete-payment\" class=\"js-set-cc-default myvca-account-box__edit-btn p2\">\r\n <img src=\"../../../images-2/credit-card-default-dark.svg\" alt=\"Set as Default icon\">\r\n Set as Default\r\n </button>`\r\n defaultUpdateTag = `<div class=\"flag flag-sm bg-color-vca-sky text-color-vca-mud \">Default</div>`\r\n } else {\r\n defaultUpdateButton = `\r\n <button data-paymentid=\"${item.Id}\" data-target=\"#update-payment\" class=\"js-update-payment-cc myvca-account-box__edit-btn p2\">\r\n <img src=\"../../../images-2/update-payment-Alert-icon.svg\" alt=\"Update icon\">\r\n Update\r\n </button>`\r\n defaultUpdateTag = `<div class=\"status-stamp bg-color-vca-sunset-tint-2 text-color-vca-mud\">Update</div>`\r\n Default = 'js-status-update'\r\n }\r\n\r\n var date = new Date(parseInt(item.Expiration.substr(6)));\r\n let month = date.getMonth() + 1;\r\n let year = date.getFullYear().toString().slice(-2);\r\n\r\n let paymentCarditem = `\r\n <div class=\"myvca-account-box ${Default}\" data-paymentid=\"${item.Id}\">\r\n <div class=\"myvca-account-box__cc-info\">\r\n <img class=\"myvca-account-box__cc-info__card-img\" src=\"${item.Icon}\" alt=\"credit card icon\">\r\n <div class=\"myvca-account-box__cc-info__desc\">${item.CardName} *****${item.LastDigits} Exp ${month}/${year}</div>\r\n ${defaultUpdateTag}\r\n </div>\r\n <div class=\"myvca-account-box__action-btns\">\r\n <div class=\"d-flex\">\r\n ${defaultUpdateButton}\r\n <button data-paymentid=\"${item.Id}\" class=\"js-delete-cc myvca-account-box__edit-btn p2\">\r\n <img src=\"../../../images-2/delete-dark.svg\" alt=\"Delete icon\">\r\n Delete\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n\r\n if(item.IsDefault) {\r\n ui.$paymentList.prepend(paymentCarditem);\r\n }else{\r\n ui.$paymentList.append(paymentCarditem);\r\n }\r\n\r\n });\r\n ui.loader.hide();\r\n\r\n }\r\n\r\n function bindSetDefaultClick() {\r\n ui.$tabswrapper.on('click', '.js-set-cc-default', function (e) {\r\n e.preventDefault();\r\n ui.loader.show();\r\n let paymentId = $(this).data('paymentid');\r\n let el = $(this);\r\n SetDefaultClick(el,paymentId)\r\n });\r\n }\r\n\r\n async function SetDefaultClick(el,paymentId) {\r\n var params = {\"PaymentId\":paymentId};\r\n const { success, data, error } = await setDefaultPaymentMethod.post(params);\r\n console.log('success', success);\r\n console.log('data', data);\r\n console.log('error', error);\r\n if(!success){\r\n console.log('failed', error);\r\n $('.js-error-message-text').text(error);\r\n ui.$errorMessateSection.show();\r\n ui.loader.hide();\r\n return;\r\n }else{\r\n // createPaymentList(data.SavedPayments);\r\n ui.loader.hide();\r\n ui.$tabswrapper.find('.js-default-card').removeClass('js-default-card');\r\n let defaultBox = el.closest('.myvca-account-box');\r\n defaultBox.parent().prepend(defaultBox);\r\n defaultBox.addClass('js-default-card');\r\n }\r\n }\r\n\r\n function bindDeleteClick() {\r\n ui.$tabswrapper.on('click', '.js-delete-cc', function (e) {\r\n e.preventDefault();\r\n let paymentId = $(this).data('paymentid');\r\n let el = $(this);\r\n let card = $(this).closest('.myvca-account-box').find('.myvca-account-box__cc-info');\r\n $('#delete-payment').modal('show');\r\n $('#delete-payment .js-delete-payment').empty();\r\n $('#delete-payment .js-comfrim-delete').attr( \"data-paymentid\", paymentId );\r\n card.clone().appendTo('#delete-payment .js-delete-payment');\r\n });\r\n }\r\n\r\n function bindComfirmDeleteClick() {\r\n ui.$tabswrapper.on('click', '.js-comfrim-delete', function (e) {\r\n e.preventDefault();\r\n var paymentIdtoDelete = $(this).attr('data-paymentid');\r\n let card = $('.js-payment-list').find('.myvca-account-box[data-paymentid=\"' + paymentIdtoDelete + '\"]');\r\n $('#delete-payment').modal('hide');\r\n ui.loader.show();\r\n deletePaymentClick(card,paymentIdtoDelete);\r\n });\r\n }\r\n\r\n async function deletePaymentClick(card,paymentId) {\r\n var params = {\"PaymentId\":paymentId};\r\n const { success, data, error } = await removePaymentMethod.post(params);\r\n console.log('success', success);\r\n console.log('data', data);\r\n console.log('error', error);\r\n if(!success){\r\n console.log('failed', error);\r\n $('.js-error-message-text').text(error);\r\n ui.$errorMessateSection.show();\r\n ui.loader.hide();\r\n return;\r\n }else{\r\n if(data.SavedPayments === null || data.SavedPayments.length === 0) {\r\n ui.$noPayment.removeClass(\"hidden\");\r\n }\r\n ui.loader.hide();\r\n card.remove();\r\n }\r\n }\r\n\r\n function bindAddPaymentClick() {\r\n ui.$tabswrapper.on('click', '.js-add-payment-method', function (e) {\r\n e.preventDefault();\r\n ui.$paymentList.hide();\r\n ui.$noPayment.addClass(\"hidden\");\r\n ui.$paymentForm.show();\r\n ui.$addNewPaymentCTA.hide();\r\n\r\n let getpaymentform = new AddPaymentWithaddress({\r\n containerId: '#addpayment-form-wrapper',\r\n formId: '#form-wrapper',\r\n paymentFrameContainerId: 'paymentFrameContainer',\r\n savePaymentId: '#savePayment',\r\n paymentLoaderId: '#paymentLoader',\r\n settingsId: '#paymentSettings',\r\n updateAutoshipCheckboxId: '#active-subscriptions',\r\n urlPath: '/api/account/AddNewPaymentMethod'\r\n });\r\n ui.$tabswrapper.find('[data-control=\"cancel\"]').remove();\r\n ui.$tabswrapper.find('[data-label=\"heading\"]').html('Billing Address');\r\n $('.js-payment-management').find('#is-default').prop('checked', false);\r\n $('[data-region=\"methodForm\"]').find('[data-control=\"select\"]').addClass('rounded-0');\r\n });\r\n }\r\n\r\n function bindCancelPaymentClick() {\r\n ui.$tabswrapper.on('click', '.js-cancel-add-payment', function (e) {\r\n e.preventDefault();\r\n ui.$paymentForm.hide();\r\n ui.$paymentList.show();\r\n ui.$addNewPaymentCTA.show();\r\n var iframe = document.getElementById('paymentFrame');\r\n iframe.remove();\r\n clearAddNewPaymentDetails();\r\n if(paymentListCard.length < 1){\r\n ui.$noPayment.removeClass(\"hidden\");\r\n }\r\n });\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.PaymentManagement.init();\r\n});","import postPetProfileImage from '@api/routes/myvca-api/update-pet-profile-image';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.ChangePetImageModal = (function ($) {\r\n\r\n var ui = {};\r\n let fileSizeLimit = 100; // In KB\r\n let config = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n }\r\n } \r\n\r\n function cacheUI() {\r\n ui.$changeIconBtn = $('[data-control=\"changeProfileImage\"]');\r\n ui.$uploadImageBtn = $('[data-control=\"uploadImageBtn\"]');\r\n ui.$sameImage = $('[data-control=\"sameImage\"]');\r\n ui.$removeImage = $('[data-control=\"removeImage\"]');\r\n ui.$uploadImageInput = $('[data-control=\"uploadImageInput\"]');\r\n ui.$liveImage = $('[data-control=\"liveImage\"]');\r\n ui.$originalAvatar = $('[data-control=\"originalAvatar\"]');\r\n ui.$currentImage = $('[data-control=\"currentImage\"]');\r\n ui.$modalContent = $('[data-region=\"modalContent\"]');\r\n ui.$modalMessages = $('[data-region=\"messages\"]');\r\n ui.$changeIconModal = $('#changePetImageModal');\r\n\r\n ui.loader = $('[data-region=\"loader\"]');\r\n ui.liveImage = ui.$liveImage.val();\r\n ui.newImageData = '';\r\n\r\n ui.petId = '3333'\r\n ui.uploadedFile;\r\n ui.originalAvatarURL = '';\r\n ui.token = $('input[name=\"__RequestVerificationToken\"]').val();\r\n }\r\n\r\n function init() {\r\n if ($('#changePetImageModal').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindChangePetImageClick();\r\n bindSavePetImageClick();\r\n }\r\n\r\n function bindSavePetImageClick() {\r\n ui.$sameImage.on('click', function (e) {\r\n e.preventDefault();\r\n if(ui.$sameImage.hasClass('disabled')) {\r\n return\r\n }\r\n uploadFile();\r\n });\r\n }\r\n\r\n function bindRemovePetImageClick() {\r\n ui.$removeImage.on('click', function (e) {\r\n e.preventDefault();\r\n let liveImage = ui.$liveImage.val();\r\n ui.$currentImage.attr(\"src\",ui.originalAvatarURL);\r\n if(ui.originalAvatarURL == liveImage) {\r\n ui.$sameImage.prop('disabled', true).addClass('disabled');\r\n ui.$removeImage.hide();\r\n }else{\r\n ui.$sameImage.prop('disabled', false).removeClass('disabled');\r\n ui.$removeImage.hide();\r\n ui.uploadedFile = null;\r\n }\r\n });\r\n }\r\n\r\n function bindChangePetImageClick() {\r\n ui.$changeIconBtn.on('click', function (e) {\r\n e.preventDefault();\r\n ui.$modalMessages.hide();\r\n ui.petId = $(this).attr(\"data-petid\") || $(e.target).closest('[data-control=\"changeProfileImage\"]').attr(\"data-petid\");\r\n ui.$changeIconModal.on('show.bs.modal', function (e) {\r\n\r\n ui.originalAvatarURL = ui.$originalAvatar.val();\r\n let currentImage = ui.$currentImage.attr('src');\r\n let liveImage = ui.$liveImage.val();\r\n ui.$liveImage.val(currentImage);\r\n\r\n // Check for the various File API support.\r\n if (window.File && window.FileList && window.FileReader) {\r\n InitUpload();\r\n } else {\r\n document.getElementById('file-drag').style.display = 'none';\r\n }\r\n ui.$uploadImageBtn.on('click', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n ui.$uploadImageInput.trigger( \"click\" );\r\n });\r\n });\r\n\r\n ui.$changeIconModal.on('hidden.bs.modal', function (e) {\r\n let imageSrc = ui.$liveImage.val();\r\n ui.$currentImage.attr(\"src\",imageSrc);\r\n ui.$sameImage.prop('disabled', true).addClass('disabled');\r\n ui.$uploadImageBtn.addClass('btn-sky');\r\n ui.$sameImage.removeClass('btn-sky');\r\n ui.$uploadImageBtn.removeClass('btn-sky-outline-alt');\r\n ui.$sameImage.addClass('btn-sky-outline-alt');\r\n });\r\n\r\n ui.$changeIconModal.modal('show');\r\n });\r\n }\r\n\r\n function InitUpload() {\r\n\r\n var fileSelect = document.getElementById('file-upload'),\r\n fileDrag = document.getElementById('file-drag')\r\n\r\n fileSelect.addEventListener('change', fileSelectHandler, false);\r\n // Is XHR2 available?\r\n var xhr = new XMLHttpRequest();\r\n if (xhr.upload) {\r\n // File Drop\r\n fileDrag.addEventListener('dragover', fileDragHover, false);\r\n fileDrag.addEventListener('dragleave', fileDragHover, false);\r\n fileDrag.addEventListener('drop', fileSelectHandler, false);\r\n }\r\n }\r\n\r\n function fileDragHover(e) {\r\n var fileDrag = document.getElementById('file-drag');\r\n\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n fileDrag.className = (e.type === 'dragover' ? 'hover' : 'modal-body file-upload');\r\n }\r\n\r\n function fileSelectHandler(e) {\r\n // Fetch FileList object\r\n var file = e.target.files || e.dataTransfer.files;\r\n\r\n // Cancel event and hover styling\r\n fileDragHover(e);\r\n\r\n // Process all File objects\r\n if (!file || file.length === 0) {\r\n return;\r\n }\r\n parseFile(file[0]);\r\n ui.uploadedFile = file[0];\r\n }\r\n\r\n // Output\r\n function output(msg) {\r\n // Response\r\n var m = document.getElementById('messages');\r\n m.innerHTML = msg;\r\n ui.$modalMessages.removeClass('hidden');\r\n }\r\n\r\n function parseFile(file) {\r\n showUploadLoader()\r\n ui.$modalMessages.hide();\r\n\r\n var imageName = file.name;\r\n var tobig = file.size <= fileSizeLimit * 1024;\r\n var isGood = (/\\.(?=gif|jpg|png|jpeg)/gi).test(imageName);\r\n \r\n console.log(file.name, file.size);\r\n console.log(fileSizeLimit * 1024);\r\n\r\n if(!tobig) {\r\n output('Please upload file size less than 100 KB');\r\n hideUploadLoader();\r\n ui.$modalMessages.show();\r\n return;\r\n }\r\n if (isGood) {\r\n let reader = new FileReader();\r\n var baseString;\r\n reader.onloadend = function () {\r\n baseString = reader.result;\r\n ui.newImageData = baseString;\r\n };\r\n reader.readAsDataURL(file);\r\n document.getElementById('response').classList.remove(\"hidden\");\r\n document.getElementById('notimage').classList.add(\"hidden\");\r\n // Thumbnail Preview\r\n document.getElementById('file-image').classList.remove(\"hidden\");\r\n document.getElementById('file-image').src = URL.createObjectURL(file);\r\n ui.$sameImage.prop('disabled', false).removeClass('disabled');\r\n ui.$uploadImageBtn.removeClass('btn-sky');\r\n ui.$sameImage.addClass('btn-sky');\r\n ui.$uploadImageBtn.addClass('btn-sky-outline-alt');\r\n ui.$sameImage.removeClass('btn-sky-outline-alt');\r\n } else {\r\n document.getElementById('notimage').classList.remove(\"hidden\");\r\n document.getElementById('response').classList.add(\"hidden\");\r\n document.getElementById(\"file-upload-form\").reset();\r\n ui.$sameImage.prop('disabled', true).addClass('disabled');\r\n ui.$uploadImageBtn.addClass('btn-sky');\r\n ui.$sameImage.removeClass('btn-sky');\r\n ui.$uploadImageBtn.removeClass('btn-sky-outline-alt');\r\n ui.$sameImage.addClass('btn-sky-outline-alt');\r\n output('Please upload correct file format: gif,jpg,png,jpeg');\r\n ui.$modalMessages.show();\r\n }\r\n hideUploadLoader();\r\n }\r\n\r\n async function uploadFile() {\r\n showUploadLoader()\r\n \r\n //console.log('file',ui.uploadedFile);\r\n let formData = new FormData(); \r\n\r\n if (ui.uploadedFile === null) {\r\n formData.append('photo', null);\r\n }\r\n else {\r\n let reader = new FileReader();\r\n var baseString;\r\n reader.onloadend = function () {\r\n baseString = reader.result;\r\n ui.newImageData = baseString;\r\n };\r\n reader.readAsDataURL(ui.uploadedFile);\r\n\r\n formData.append('photo', ui.uploadedFile);\r\n // console.log('name', ui.uploadedFile.name);\r\n //console.log('size', ui.uploadedFile.size);\r\n }\r\n formData.append('petId', ui.petId);\r\n formData.append('__RequestVerificationToken', ui.token);\r\n\r\n //console.log('formData',formData);\r\n\r\n const { success, data, error } = await postPetProfileImage.post(formData, config);\r\n if(!success){\r\n console.log('failed', error);\r\n output ('Something went wrong, please try again.');\r\n ui.$modalMessages.show();\r\n hideUploadLoader();\r\n return;\r\n }\r\n hideUploadLoader();\r\n\r\n if(ui.uploadedFile === null) {\r\n $(`img[data-petid=\"${ui.petId}\"]`).each((idx,el) => {\r\n $(el).attr('src','');\r\n $(el).attr('src',ui.originalAvatarURL);\r\n });\r\n ui.$liveImage.val(ui.originalAvatarURL);\r\n localStorage.removeItem(petId);\r\n }else{\r\n $(`img[data-petid=\"${ui.petId}\"]`).each((idx,el) => {\r\n $(el).attr('src','');\r\n $(el).attr('src',baseString);\r\n });\r\n ui.$liveImage.val(baseString);\r\n localStorage.setItem(ui.petId, baseString);\r\n }\r\n\r\n ui.$changeIconModal.modal('hide');\r\n\r\n /* var xhr = new XMLHttpRequest(),\r\n fileInput = document.getElementById('class-roster-file'),\r\n fileSizeLimit = 1024; // In MB\r\n if (xhr.upload) {\r\n // Check if file is less than x MB\r\n if (file.size <= fileSizeLimit * 1024 * 1024) {\r\n\r\n // File received / failed\r\n xhr.onreadystatechange = function (e) {\r\n if (xhr.readyState == 4) {\r\n // Everything is good!\r\n\r\n // progress.className = (xhr.status == 200 ? \"success\" : \"failure\");\r\n // document.location.reload(true);\r\n }\r\n };\r\n\r\n // Start upload\r\n xhr.open('POST', document.getElementById('file-upload-form').action, true);\r\n xhr.setRequestHeader('X-File-Name', file.name);\r\n xhr.setRequestHeader('X-File-Size', file.size);\r\n xhr.setRequestHeader('Content-Type', 'multipart/form-data');\r\n xhr.send(file);\r\n } else {\r\n output('Please upload a smaller file (< ' + fileSizeLimit + ' MB).');\r\n }\r\n } */\r\n }\r\n\r\n function showUploadLoader() {\r\n ui.$modalContent.css('opacity', '.3').css('pointer-events', 'none');\r\n ui.loader.show();\r\n }\r\n function hideUploadLoader() {\r\n ui.loader.hide();\r\n ui.$modalContent.css('opacity', '1').css('pointer-events', 'all');\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.ChangePetImageModal.init();\r\n});","var VCA = VCA || {};\r\n\r\nVCA.DbCardsCarousel = (function ($) {\r\n\r\n function bindEvents() {\r\n $(window).on('resize', onWindowResize);\r\n }\r\n\r\n function onWindowResize() {\r\n let viewportWidth = $(window).width();\r\n if (viewportWidth > 767) {\r\n initCarousel();\r\n }\r\n }\r\n\r\n function initCarousel() {\r\n document.querySelectorAll('.clickable-1').forEach(item => {\r\n var urlStatus = item.getAttribute('url-status');\r\n \r\n if (urlStatus === 'true') {\r\n item.addEventListener('click', event => {\r\n var url = item.getAttribute('data-url');\r\n if (url !== \"\" && url !== undefined) {\r\n \r\n //navigation\r\n } else {\r\n \r\n event.preventDefault();\r\n }\r\n });\r\n } else {\r\n item.classList.remove('nav-pointer');\r\n \r\n }\r\n });\r\n \r\n \r\n }\r\n\r\n function init() {\r\n bindEvents();\r\n initCarousel();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.DbCardsCarousel.init();\r\n});","var VCA = VCA || {};\r\n\r\nVCA.NewsLetterCTA = (function ($) {\r\n\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n ui.$signUpBtn = $('.js-newsletter-signup-btn');\r\n ui.$newsLetterForm = $('.js-newsletter-form');\r\n ui.$newsThankYou = $('.js-newsletter-thankyou');\r\n ui.$newserror = $('.js-newsletter-error');\r\n ui.submitBtn =$('.js-submit-btn');\r\n }\r\n\r\n function init() {\r\n if ($('.js-newsletter-signup').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindSignUpClick();\r\n bindSubmitClick();\r\n }\r\n\r\n function bindSignUpClick() {\r\n ui.$signUpBtn.on('click', function (e) {\r\n e.preventDefault();\r\n let mailFormat = /^[a-zA-Z][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$/;\r\n let item = $(this).closest('.js-newsletter-signup');\r\n let email = item.find('.js-newsletter-signup-input').val();\r\n console.log(email);\r\n if (!mailFormat.test(email)) {\r\n item.addClass('input-validation-error');\r\n item.find('.js-newsletter-signup-input').triggerHandler( \"focus\" );\r\n return;\r\n } else {\r\n item.removeClass('input-validation-error');\r\n $('#Newsletter').modal('show');\r\n $('#Newsletter').find('input.newsletter-signup-email-field').val(email);\r\n }\r\n });\r\n }\r\n\r\n function bindSubmitClick() {\r\n ui.submitBtn.on('click', function (e) {\r\n ui.$newsLetterForm.hide();\r\n ui.$newsThankYou.show();\r\n });\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.NewsLetterCTA.init();\r\n});","import getNewsletters from '@api/routes/newsletter-archive/GetNewsletters/';\r\n\r\nlet VCA = VCA || {};\r\n\r\nVCA.NewsletterStories = (function ($) {\r\n var ui = {};\r\n let activePage = 1;\r\n let totalPagesOnLoad = '';\r\n let dataId = $('#dataId').val();\r\n\r\n function cacheUI() {\r\n ui.loader = $('.newsletters-list__loader');\r\n }\r\n\r\n function initNewsletterGet(params) {\r\n if ($('#newsletters').length <= 0) {\r\n return;\r\n }\r\n\r\n if(window.location.href.match(/\\?./)){\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n\r\n for(const [ key, value ] of urlParams.entries()){\r\n if(key == 'page'){\r\n activePage = value;\r\n }\r\n }\r\n }\r\n\r\n totalPagesOnLoad = $('#TotalPages').data('total-page');\r\n getAPIData(activePage);\r\n }\r\n\r\n function selectPage(e) {\r\n e.preventDefault();\r\n let selectedPage = $(e.currentTarget).data('page');\r\n $('#newsletters')[0].scrollIntoView({ behavior: 'smooth' })\r\n getAPIData(selectedPage);\r\n }\r\n\r\n function updateURL(page) {\r\n if ('URLSearchParams' in window) {\r\n var searchParams = new URLSearchParams(window.location.search)\r\n searchParams.set(\"page\", page);\r\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString();\r\n history.pushState(null, '', newRelativePathQuery);\r\n }\r\n }\r\n\r\n async function getAPIData(selectedPage) {\r\n let errMsgContainer = $('.newsletter-list-error');\r\n let errorMessage = $('.newsletter-list-error__error-msg');\r\n let paginationBar = $('.vca-voice-current__pagination-container');\r\n ui.loader.show();\r\n\r\n $(errMsgContainer).addClass('hidden');\r\n\r\n let params = {\r\n \"page\": selectedPage,\r\n \"DataItemId\": dataId\r\n }\r\n const { data, success, error } = await getNewsletters.post(params);\r\n\r\n if(!success || data.IsSuccess == false ){\r\n emptyResultsContainer();\r\n $(paginationBar).addClass('hidden');\r\n $(errorMessage).text('No results were found.')\r\n $(errMsgContainer).removeClass('hidden');\r\n ui.loader.hide();\r\n return;\r\n }else{\r\n let totalPages = data.TotalPages;\r\n let stories = data.NewsletterArticles;\r\n $(paginationBar).removeClass('hidden');\r\n emptyResultsContainer();\r\n $('#VoiceTotalPagesNum').html(totalPages);\r\n createCards(stories, totalPages, selectedPage);\r\n updateURL(selectedPage);\r\n ui.loader.hide();\r\n }\r\n }\r\n\r\n function emptyResultsContainer() {\r\n $('#newsletters .newsletters-list__list').empty();\r\n }\r\n\r\n function createCards(results, totalPages, selectedPage) {\r\n\r\n let articles = results;\r\n let totalNumOfPages = totalPages;\r\n\r\n let element = document.querySelector(\"#CurrentStoriesPagination ul\");\r\n let page = selectedPage;\r\n element.innerHTML = createPagination(totalNumOfPages, page);\r\n $('.pagination-bar__pagination-btn').each(function () {\r\n $(this).on('click', selectPage);\r\n });\r\n\r\n for (let i = 0; i < articles.length; i++) {\r\n let story = articles[i];\r\n let hasImage = \"\";\r\n let hasDescription = \"\";\r\n let target = \"_self\";\r\n let adaClass = \"\";\r\n if(story.ImageUrl == null || story.ImageUrl == '' ) {\r\n hasImage = 'hidden';\r\n }\r\n if(story.Description == null || story.Description == '' ) {\r\n hasDescription = 'hidden';\r\n }\r\n if(story.IsPdf){\r\n target = \"_blank\";\r\n adaClass = \"custom-ada-placement\";\r\n }\r\n let storyCard = $(`\r\n <li>\r\n <a class=\"newsletters-list__item bg-color-vca-whisper ${adaClass}\" href=\"${story.URL}\" target=\"${target}\">\r\n <div class=\"newsletters-list__item__image ${hasImage}\">\r\n <img alt=\"${story.ImageAlt}\" src=\"${story.ImageUrl}\" />\r\n </div>\r\n <div class=\"newsletters-list__item__content\">\r\n <div class=\"newsletters-list__item__title h4\">${story.Title} | ${story.Date}</div>\r\n <div class=\"newsletters-list__item__desc ${hasDescription}\">${story.Description}</div>\r\n </div>\r\n </a>\r\n </li>\r\n `);\r\n\r\n $('#newsletters .newsletters-list__list').append(storyCard);\r\n }\r\n }\r\n\r\n function createPagination(totalPages, pages) {\r\n let liTag = '';\r\n let active;\r\n let page = parseInt(pages);\r\n let beforePage = parseInt(pages) - 1;\r\n let afterPage = parseInt(pages) + 1;\r\n let element = document.querySelector(\"#CurrentStoriesPagination ul\");\r\n let path = 'press-center/vca-news';\r\n\r\n if (page > 1) {\r\n liTag += `<li><a href=\"/${path}?page=${page - 1}\" class=\"pagination-bar__pagination-btn prev-btn prev\" data-page=\"${page - 1}\"><span>Prev</span></a></li>`;\r\n } else if (page == 1) {\r\n liTag += `<li><a href=\"/${path}?page=${page}\" class=\"pagination-bar__pagination-btn prev-btn prev disabled\" data-page=\"${page}\"><span>Prev</span></a></li>`;\r\n }\r\n\r\n if(page > 2){ \r\n if (totalPages >= 5) {\r\n liTag += `<li><a href=\"/${path}?page=1\" class=\"pagination-bar__pagination-btn first numb\" data-page=\"1\"><span>1</span></a></li>`;\r\n }\r\n if(page > 3 && totalPages > 5){ \r\n liTag += `<li class=\"vca-voice-current__dots dots\"><span>...</span></li>`;\r\n }\r\n }\r\n // how many pages or li show before the current li\r\n if (page == totalPages) {\r\n beforePage = beforePage - 2;\r\n } else if (page == totalPages - 1) {\r\n beforePage = beforePage - 1; \r\n }\r\n\r\n if (beforePage < 0) {\r\n beforePage = 0;\r\n }\r\n // how many pages or li show after the current li\r\n if (page == 1) {\r\n afterPage = afterPage + 2;\r\n } else if (page == 2) {\r\n afterPage = afterPage + 1;\r\n }\r\n for (let plength = beforePage; plength <= afterPage; plength++) {\r\n if (plength > totalPages) { //if plength is greater than totalPage length then continue\r\n continue;\r\n }\r\n if (plength == 0) { //if plength is 0 than add +1 in plength value\r\n plength = plength + 1;\r\n }\r\n if (page == plength) { //if page is equal to plength than assign active string in the active variable\r\n active = \"active\";\r\n } else { //else leave empty to the active variable\r\n active = \"\";\r\n }\r\n liTag += `<li><a href=\"/${path}?page=${plength}\" class=\"pagination-bar__pagination-btn numb ${active}\"data-page=\"${plength}\"><span>${plength}</span></a></li>`;\r\n }\r\n\r\n if (page < totalPages - 1) { //if page value is less than totalPage value by -1 then show the last li or page \r\n if (page < totalPages - 2 && totalPages > 5) { //if page value is less than totalPage value by -2 then add this (...) before the last li or page \r\n liTag += `<li class=\"vca-voice-current__dots dots\"><span>...</span></li>`;\r\n }\r\n if (totalPages >= 5) {\r\n liTag += `<li><a href=\"/${path}?page=${totalPages}\" class=\"pagination-bar__pagination-btn last numb\" data-page=\"${totalPages}\"><span>${totalPages}</span></a></li>`;\r\n }\r\n }\r\n\r\n if (page <= totalPages) { //show the next button if the page value is less than totalPage \r\n if (page < totalPages) { \r\n liTag += `<li><a href=\"/${path}?page=${page + 1}\" class=\"pagination-bar__pagination-btn next-btn next\" data-page=\"${page + 1}\"><span>Next</span></a></li>`;\r\n } else if (page == totalPages) { \r\n liTag += `<li><a href=\"/${path}?page=${page}\" class=\"pagination-bar__pagination-btn next-btn next disabled\" data-page=\"${page}\"><span>Next</span></a></li>`;\r\n }\r\n }\r\n\r\n element.innerHTML = liTag; //add li tag inside ul tag\r\n $('#VoiceCurrentPageNum').text(page);\r\n return liTag; \r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n initNewsletterGet();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.NewsletterStories.init();\r\n});\r\n\r\n","import AddPaymentWithaddress from \"../add-payment-with-address\";\r\nimport getPaymentMethods from '@api/routes/account/GetPaymentMethods';\r\nimport updateOrderDetails from \"../../../api/routes/orders/update-order-details\";\r\nimport UpdatePaymentMethod from \"../../../api/routes/account/UpdatePaymentMethod\";\r\nimport SelectBox from \"../select-box/select-box\";\r\nimport uniqid from 'uniqid';\r\nimport states from '@utils/states';\r\nimport AjaxLoader from \"../ajax-loader/ajax-loader\";\r\nimport UpdateVetSourceOrderId from \"../../../api/routes/account/UpdateVetSourceOrderId\";\r\n\r\nvar VCA = VCA || {};\r\n\r\nvar getPaymentMethodsList = [];\r\nvar paymentCardId = '';\r\nvar methodSelector = null;\r\n\r\nVCA.OrderFulfillment = (function ($) {\r\n var ui = {};\r\n function cacheUI() {\r\n ui.$updatePaymentModal = $(\".js-update-payment-modal\");\r\n ui.$addOrderDetailsForm = $(\".js-add-payment-form-select-address\");\r\n ui.$cancelPaymentOrderForm = $(\".js-cancel-add-payment-order-details\");\r\n ui.$updatePaymentBtn = $(\".update-order-history-btn\");\r\n ui.$cancelPaymentBtn = $(\".js-cancel-order-history-btn\");\r\n ui.$changePaymentMethod = $('.js-select-payment-method');\r\n ui.$addNewPaymentMethod = ui.$changePaymentMethod.find('[data-region=\"addNew\"]');\r\n ui.$updateAddressForm = $('.js-select-payment-method').find('.js-update-wrapper');\r\n ui.$savePayment = $('.js-new-add-save-payment');\r\n ui.$continueUpdatePayment = $('.js-continue-update-payment');\r\n ui.$cancelUpdatePayment = $('.js-cancel-update-payment');\r\n ui.$closeToasterModal = $('.js-close-toaster-payment');\r\n ui.loader = $('[data-region=\"order-ajax-loader\"]');\r\n ui.$methodPaymentDropdown = ui.$changePaymentMethod.find('[data-placeholder=\"billingPaymentMethod\"]');\r\n ui.$paymentLoader = new AjaxLoader(ui.$updateAddressForm.find('[data-placeholder=\"loader\"]'), {\r\n aria: false,\r\n size: 'xs'\r\n });\r\n ui.$paymentLoader.render();\r\n ui.$savePaymentLoader = new AjaxLoader(ui.$savePayment.find('[data-placeholder=\"loader\"]'), {\r\n aria: false,\r\n size: 'xs'\r\n });\r\n ui.$savePaymentLoader.render();\r\n }\r\n\r\n function initPage() {\r\n changePaymentMethod();\r\n disabledSavePayment();\r\n orderDetailsFeatureFlag();\r\n selectDropdownList();\r\n updatePaymentModalHide();\r\n }\r\n\r\n function updatePaymentModalHide() {\r\n $('#add-payment-modal').on('hide.bs.modal', function () {\r\n $('[data-region=\"js-payment-selector\"]').find('.select-box').remove();\r\n $('[data-region=\"js-payment-selector\"]').find('.payment-method-selector').append(\r\n `<div data-placeholder=\"billingPaymentMethod\"></div>`\r\n )\r\n ui.$methodPaymentDropdown = ui.$changePaymentMethod.find('[data-placeholder=\"billingPaymentMethod\"]');\r\n });\r\n }\r\n\r\n function orderDetailsFeatureFlag() {\r\n if(ui.$paymentFailureFF == \"True\" && (ui.$IsPaymentDetailsMissing == \"True\" || (ui.$isPaymentFailureStatus == \"True\" && ui.$isUpdatePaymentMethodFF == \"True\") )) {\r\n $('.order-details-fulfillment').find('[data-region=\"update-card-details-outline\"]').addClass('-declined');\r\n $('.order-details-fulfillment').find('[data-region=\"update-error-card-details\"]').removeClass('hidden');\r\n } else {\r\n $('#add-payment-modal').remove();\r\n }\r\n }\r\n\r\n function bindPaymentSelectBox() {\r\n let paymentId = uniqid.time('');\r\n methodSelector = new SelectBox(ui.$methodPaymentDropdown, {\r\n id: `billingMethod_${paymentId}`\r\n });\r\n methodSelector.render();\r\n }\r\n\r\n function bindPaymentDropdownValue(cardId) {\r\n const methodOptions = getPaymentMethodsList.map(method => {\r\n const text = parseMethodText(method);\r\n return {\r\n text, \r\n value: method.Id\r\n };\r\n });\r\n\r\n const options = {\r\n options: methodOptions,\r\n unselectedText: 'Select'\r\n };\r\n\r\n methodSelector.setOptions(options);\r\n methodSelector.enable();\r\n methodSelector.setValue(cardId);\r\n }\r\n\r\n function parseMethodText(method) {\r\n const postfix = method.LastDigits;\r\n const text = `${method.CardName} ****${postfix}`;\r\n return text;\r\n }\r\n\r\n function bindEvents() {\r\n ui.$updatePaymentModal.on('click', openOrderDetailsFormModal);\r\n ui.$cancelPaymentOrderForm.on('click', cancelOrderDetailsFormModal);\r\n ui.$updatePaymentBtn.on('click', updateOrderHistoryPayment);\r\n ui.$cancelPaymentBtn.on('click', closePaymentModal);\r\n ui.$addNewPaymentMethod.on('click', addNewPaymentModal);\r\n ui.$savePayment.on('click', saveNewPaymentMethod);\r\n ui.$continueUpdatePayment.on('click', continueUpdatePayment);\r\n ui.$cancelUpdatePayment.on('click', cancelUpdatePayment);\r\n ui.$paymentFailureFF = $('[data-region=\"IsOHPaymentFailureFF\"').attr('data-attr-isohpaymentfailureff');\r\n ui.$IsPaymentDetailsMissing = $('[data-region=\"IsPaymentDetailsMissing\"').attr('data-attr-ispaymentdetailsmissing');\r\n ui.$isPaymentFailureStatus = $('[data-region=\"IsPaymentFailureStatus\"').attr('data-attr-ispaymentfailurestatus');\r\n ui.$isUpdatePaymentMethodFF = $('[data-region=\"IsUpdatePaymentMethodForPaymentFailureOrderStatusFF\"').attr('data-attr-isupdatepaymentmethodforpaymentfailureorderstatus');\r\n ui.$orderPaymentMethodId = $('[data-region=\"orderPaymentMethodId\"').attr('data-attr-orderPaymentMethodId');\r\n ui.$orderId = $('[data-region=\"orderId\"').attr('data-attr-orderId');\r\n ui.$closeToasterModal.on('click', closeToasterPayment)\r\n\r\n }\r\n\r\n /**\r\n * @method initGetpayments\r\n * @description to get the payment method service call, the value to bind on the selected new payment method dropdown\r\n */\r\n async function initGetpayments() {\r\n ui.loader.removeClass('hidden');\r\n createPaymentForm();\r\n bindPaymentSelectBox();\r\n const { success, data, error } = await getPaymentMethods.get();\r\n if (!success) {\r\n $('#add-payment-modal').modal('show');\r\n ui.loader.addClass('hidden');\r\n return;\r\n } else {\r\n $('#add-payment-modal').modal('show');\r\n ui.loader.addClass('hidden');\r\n getPaymentMethodsList = data;\r\n ui.$orderPaymentMethodId = $('[data-region=\"orderPaymentMethodId\"').attr('data-attr-orderPaymentMethodId');\r\n const orderPaymentMethodValue = data.find((cardId) => cardId.Id == ui.$orderPaymentMethodId);\r\n if(!orderPaymentMethodValue) {\r\n const defaultCard = data.find((defaultCard) => defaultCard.IsDefault === true);\r\n if(defaultCard) {\r\n ui.$orderPaymentMethodId = defaultCard.Id;\r\n } else {\r\n if(data.length > 0) {\r\n ui.$orderPaymentMethodId = data[0].Id;\r\n }\r\n }\r\n }\r\n bindPaymentDropdownValue(ui.$orderPaymentMethodId);\r\n cardDetailSetValue(ui.$orderPaymentMethodId);\r\n }\r\n };\r\n\r\n /**\r\n * @method changePaymentMethod\r\n * @description to change the dropdown value, the card detail value to set the payment form field\r\n */\r\n function changePaymentMethod() {\r\n ui.$changePaymentMethod.on('change', '[data-region=\"js-payment-selector\"] [data-control=\"select\"]', function (e) {\r\n e.preventDefault();\r\n let el = $(this);\r\n ui.$updateAddressForm.find('.text-color-vca-red').remove();\r\n cardDetailSetValue(el.val())\r\n });\r\n }\r\n\r\n /**\r\n * @method selectDropdownList\r\n * @description to get the state code of US and binding on select dropdown\r\n */\r\n function selectDropdownList() {\r\n const $select = ui.$changePaymentMethod.find('#updateState');\r\n $select.append(new Option('', '', true, true));\r\n states.forEach(item => {\r\n $select.append(new Option(item.text, item.value));\r\n });\r\n }\r\n\r\n /**\r\n * @method saveNewPaymentMethod\r\n * @description to save the new payment method, the value to be set on the update payment dropdown\r\n */\r\n function saveNewPaymentMethod() {\r\n ui.$savePaymentLoader.active = true;\r\n window.addEventListener('successAddPayment', (evt) => {\r\n getPaymentMethodsList = evt.detail.SavedPayments;\r\n const getCardId = getPaymentMethodsList.find((cardId) => cardId.Id == evt.detail.PaymentMethodResultModel.PaymentMethodId);\r\n ui.$orderPaymentMethodId = getCardId.Id;\r\n bindPaymentDropdownValue(ui.$orderPaymentMethodId);\r\n methodSelector.setValue(ui.$orderPaymentMethodId);\r\n cardDetailSetValue(ui.$orderPaymentMethodId);\r\n ui.$changePaymentMethod.find('.js-add-new-payment-method').addClass('hidden');\r\n ui.$changePaymentMethod.find('.js-update-payment-method-section').removeClass('hidden');\r\n });\r\n window.setTimeout(function () {\r\n ui.$savePaymentLoader.active = false;\r\n }, 3000);\r\n }\r\n\r\n /**\r\n * @method cardDetailSetValue\r\n * @description to change the dropdown value, the card detail value to set the payment form field\r\n */\r\n function cardDetailSetValue(cardId) {\r\n paymentCardId = cardId;\r\n ui.$orderPaymentMethodId = cardId;\r\n const cardListIndex = getPaymentMethodsList.findIndex((paymentIndexId) => paymentIndexId.Id == cardId);\r\n const cardDetails = getPaymentMethodsList[cardListIndex]\r\n if (cardDetails != undefined && cardDetails !== null) {\r\n ui.$updateAddressForm.find('[data-region=\"creditNumber\"]').html(cardDetails.CardName + \" \" + \"****\" + cardDetails.LastDigits)\r\n ui.$updateAddressForm.find('[data-item=\"nameOnCard\"]').val(cardDetails.Address.FirstName);\r\n ui.$updateAddressForm.find('[data-item=\"updateAddress\"]').val(cardDetails.Address.Address1);\r\n ui.$updateAddressForm.find('[data-item=\"updateAddress1\"]').val(cardDetails.Address.Address2);\r\n ui.$updateAddressForm.find('[data-item=\"updateCity\"]').val(cardDetails.Address.City);\r\n ui.$updateAddressForm.find('[data-item=\"updateState\"]').val(cardDetails.Address.State);\r\n ui.$updateAddressForm.find('[data-item=\"updateZip\"]').val(cardDetails.Address.ZipPostalCode);\r\n }\r\n const validAddress = ui.$updateAddressForm.find('[data-item=\"nameOnCard\"]').val() !== '' &&\r\n ui.$updateAddressForm.find('[data-item=\"updateAddress\"]').val() !== '' &&\r\n ui.$updateAddressForm.find('[data-item=\"updateCity\"]').val() !== '' &&\r\n ui.$updateAddressForm.find('[data-item=\"updateState\"]').val() !== '' &&\r\n ui.$updateAddressForm.find('[data-item=\"updateZip\"]').val() !== '';\r\n\r\n if(validAddress) {\r\n ui.$changePaymentMethod.find('.js-update-payment-tag').addClass('hidden');\r\n ui.$changePaymentMethod.find('.js-update-payment-address-form').removeAttr('disabled');\r\n $('.js-update-payment-tag').remove();\r\n } else {\r\n ui.$changePaymentMethod.find('.js-update-payment-tag').removeClass('hidden');\r\n ui.$changePaymentMethod.find('.js-update-payment-address-form').attr('disabled', true);\r\n // if(cardId) {\r\n // $('[data-region=\"js-payment-selector\"]').find('.select-box').append(\r\n // `<div class=\"select-box__card-status status-stamp bg-color-vca-salmon js-update-payment-tag\">Update</div>`\r\n // )\r\n // }\r\n }\r\n $('.js-myvca-account-box').find('input, select').each(function (index) {\r\n let el = $(this);\r\n if (el.hasClass('js-required')) {\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @method disabledSavePayment\r\n * @description to disable or enable the 'update payment' button when enter the all field\r\n */\r\n function disabledSavePayment() {\r\n ui.$changePaymentMethod.find('.js-myvca-account-box').find('input').each((idx,el) => {\r\n $(el).on('change keyup', () => {\r\n disableSaveValidation($(el))\r\n });\r\n });\r\n\r\n ui.$changePaymentMethod.find('.js-myvca-account-box').find('select').each((idx,el) => {\r\n $(el).on('change keyup', () => {\r\n disableSaveValidation($(el));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * @method disableSaveValidation\r\n * @description to disable or enable the 'update payment' button when enter the all field\r\n */\r\n function disableSaveValidation(el) {\r\n let zipReg = /^(\\d{5})(?:-?(\\d{4}))?$/;\r\n let zipValue = ui.$updateAddressForm.find('[data-item=\"updateZip\"]').val();\r\n const validAddress = ui.$updateAddressForm.find('[data-item=\"nameOnCard\"]').val() !== '' &&\r\n ui.$updateAddressForm.find('[data-item=\"updateAddress\"]').val() !== '' && \r\n ui.$updateAddressForm.find('[data-item=\"updateCity\"]').val() !== '' &&\r\n ui.$updateAddressForm.find('[data-item=\"updateState\"]').val() !== '' &&\r\n ui.$updateAddressForm.find('[data-item=\"updateState\"]').val() !== null &&\r\n zipValue !== '' && zipReg.test(zipValue);\r\n if ((el.val() == '' || el.val() == null || (el.attr(\"name\") == 'updateZip' && !zipReg.test(zipValue))) && el.hasClass('js-required')) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n if(validAddress) {\r\n ui.$changePaymentMethod.find('.js-update-payment-address-form').removeAttr('disabled');\r\n } else {\r\n ui.$changePaymentMethod.find('.js-update-payment-address-form').attr('disabled', true);\r\n }\r\n }\r\n\r\n /**\r\n * @method continueUpdatePayment\r\n * @description to click the continue to update the payment modal\r\n */\r\n function continueUpdatePayment() {\r\n ui.$updateAddressForm.find('[data-region=\"errorUpdatePayment\"]').remove();\r\n ui.$changePaymentMethod.find('.js-update-payment-method-section').removeClass('hidden');\r\n ui.$changePaymentMethod.find('[data-region=\"js-payment-selector\"]').removeClass('hidden');\r\n ui.$changePaymentMethod.find('.js-update-payment-confirmation').addClass('hidden');\r\n }\r\n\r\n /**\r\n * @method continueUpdatePayment\r\n * @description to close the update payment modal\r\n */\r\n function cancelUpdatePayment() {\r\n ui.$changePaymentMethod.find('.js-update-payment-confirmation').addClass('hidden');\r\n ui.$changePaymentMethod.find('.js-update-payment-method-section').removeClass('hidden');\r\n ui.$changePaymentMethod.find('[data-region=\"js-payment-selector\"]').removeClass('hidden');\r\n $('#add-payment-modal').modal('hide');\r\n }\r\n\r\n /**\r\n * @method openOrderDetailsFormModal\r\n * @description to open the update payment modal\r\n */\r\n function openOrderDetailsFormModal() {\r\n ui.$updateAddressForm.find('[data-region=\"errorUpdatePayment\"]').remove();\r\n initGetpayments()\r\n // $('#paymentMethod').val(ui.$orderPaymentMethodId);\r\n cancelOrderDetailsFormModal()\r\n }\r\n\r\n /**\r\n * @method closePaymentModal\r\n * @description to click the 'cancel' button, to open the update payment or not modal\r\n */\r\n function closePaymentModal() {\r\n ui.$changePaymentMethod.find('.js-update-payment-method-section').addClass('hidden');\r\n ui.$changePaymentMethod.find('[data-region=\"js-payment-selector\"]').addClass('hidden');\r\n ui.$changePaymentMethod.find('.js-update-payment-confirmation').removeClass('hidden');\r\n }\r\n\r\n /**\r\n * @method closePaymentModal\r\n * @description to update the payment details for the online order history\r\n */\r\n function updateOrderHistoryPayment() {\r\n ui.$paymentLoader.active = true;\r\n let payload = constructUpdatePayload();\r\n \r\n apiUpdatePaymentDetails(payload);\r\n \r\n }\r\n\r\n /**\r\n * @method apiUpdateOrderDetails\r\n * @description to call the api for update the order details\r\n */\r\n async function apiUpdateOrderDetails(payloadOrder) {\r\n let apiPayloadResponse;\r\n if (ui.$isPaymentFailureStatus == \"True\" && ui.$isUpdatePaymentMethodFF == \"True\") {\r\n apiPayloadResponse = UpdateVetSourceOrderId;\r\n } else {\r\n apiPayloadResponse = updateOrderDetails;\r\n }\r\n const { success, data, error } = await apiPayloadResponse.post(payloadOrder);\r\n ui.$paymentLoader.active = false;\r\n if(data?.Result?.Success){\r\n $('#add-payment-modal').modal('hide').on('hidden.bs.modal', function () {\r\n $('#add-payment-modal').remove();\r\n $('.order-details-page-order-status').text(data.Result.OrderStatus);\r\n $('.order-details-fulfillment').find('[data-region=\"update-card-details-outline\"]').removeClass('-declined');\r\n $('.order-details-fulfillment').find('[data-region=\"update-error-card-details\"]').addClass('hidden');\r\n $('.js-toaster-visible').removeClass('hidden');\r\n window.scrollTo({ top: 0, behavior: 'smooth' });\r\n const getCardId = getPaymentMethodsList.find((cardId) => cardId.Id == ui.$orderPaymentMethodId);\r\n const carrierIconHtml = `<img src=\"${getCardId.Icon}\" alt=\"payment-card icon\" aria-hidden=\"true\" />`;\r\n const carrierTextHtml = `${getCardId.CardName} ****${getCardId.LastDigits}`;\r\n $('[data-region=\"update-card-details-outline\"]').find('.order-details-fulfillment__payment-icon').html(carrierIconHtml);\r\n $('[data-region=\"update-card-details-outline\"]').find('.order-details-fulfillment__text').text(carrierTextHtml);\r\n ui.$updateAddressForm.find('.js-update-payment-address-form').prop('disabled', false);\r\n });\r\n }\r\n else\r\n {\r\n ui.$updateAddressForm.find('.text-color-vca-red').remove();\r\n ui.$updateAddressForm.find('.update-payment-modal-cta').prepend(\r\n `<span class=\"text-color-vca-red\" data-region=\"errorUpdatePayment\" style=\"display: block; text-align: center;\">${ui.$isPaymentFailureStatus == \"True\" && ui.$isUpdatePaymentMethodFF == \"True\" ? data?.Result?.SitecoreConfigurableErrorMessage : data?.Result?.ErrorMessage }</span>`\r\n )\r\n ui.$updateAddressForm.find('.update-payment-modal-footer .ajax-loader__main').removeClass(\"-active\");\r\n ui.$updateAddressForm.find('.js-update-payment-address-form').prop('disabled', true);\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * @method apiUpdatePaymentDetails\r\n * @description to call the api for update the payment management\r\n */\r\n async function apiUpdatePaymentDetails(payload) {\r\n ui.$paymentLoader.active = true;\r\n const { success, data, error } = await UpdatePaymentMethod.post(payload);\r\n ui.$updateAddressForm.find('[data-region=\"errorUpdatePayment\"]').remove();\r\n if(success)\r\n {\r\n if(data?.result) {\r\n let payLoadOrderhistory = null;\r\n if(ui.$isPaymentFailureStatus == \"True\" && ui.$isUpdatePaymentMethodFF == \"True\") {\r\n payLoadOrderhistory = constructUpdateVetSourceOrderPayload()\r\n } else {\r\n payLoadOrderhistory = constructUpdateOrderPayload();\r\n }\r\n apiUpdateOrderDetails(payLoadOrderhistory);\r\n } else {\r\n ui.$paymentLoader.active = false;\r\n ui.$updateAddressForm.find('.update-payment-modal-cta').prepend(\r\n `<span class=\"text-color-vca-red\" data-region=\"errorUpdatePayment\" style=\"display: block; text-align: center;\">${data?.Error}</span>`\r\n )\r\n }\r\n }\r\n if(!success){\r\n ui.$paymentLoader.active = false;\r\n ui.$updateAddressForm.find('.update-payment-modal-cta').prepend(\r\n `<span class=\"text-color-vca-red\">${error}</span>`\r\n )\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * @method constructUpdatePayload\r\n * @description to construct the payload for the update payment method\r\n */\r\n function constructUpdatePayload() {\r\n let payload = {\r\n paymentId: paymentCardId,\r\n name: ui.$updateAddressForm.find('[data-item=\"nameOnCard\"]').val(),\r\n address1: ui.$updateAddressForm.find('[data-item=\"updateAddress\"]').val(),\r\n address2: ui.$updateAddressForm.find('[data-item=\"updateAddress1\"]').val(),\r\n city: ui.$updateAddressForm.find('[data-item=\"updateCity\"]').val(),\r\n state: ui.$updateAddressForm.find('[data-item=\"updateState\"]').val(),\r\n zip: ui.$updateAddressForm.find('[data-item=\"updateZip\"]').val(),\r\n }\r\n return payload;\r\n }\r\n\r\n /**\r\n * @method constructUpdateOrderPayload\r\n * @description to construct the payload for the online order details\r\n */\r\n function constructUpdateOrderPayload() {\r\n let payload = {\r\n paymentMethodId: paymentCardId,\r\n orderId: ui.$orderId,\r\n }\r\n return payload;\r\n }\r\n\r\n /**\r\n * @method constructUpdateVetSourceOrderPayload\r\n * @description to construct the payload for the online order details\r\n */\r\n function constructUpdateVetSourceOrderPayload() {\r\n const defaultOrders = ui.$changePaymentMethod.find('#defaultFutureOrder').length ? ui.$changePaymentMethod.find('#defaultFutureOrder')[0].checked : false;\r\n const activeSubscription = ui.$changePaymentMethod.find('#allActiveSubscription').length ? ui.$changePaymentMethod.find('#allActiveSubscription')[0].checked : false;\r\n let payload = {\r\n DefaultForFutureOrders: defaultOrders,\r\n UpdateActiveAutoships:activeSubscription,\r\n orderId: ui.$orderId,\r\n paymentMethodId: paymentCardId,\r\n }\r\n return payload;\r\n }\r\n\r\n /**\r\n * @method cancelOrderDetailsFormModal\r\n * @description to cancel the add new payment method modal\r\n */\r\n function cancelOrderDetailsFormModal() {\r\n ui.$changePaymentMethod.find('.js-add-new-payment-method').addClass('hidden');\r\n ui.$changePaymentMethod.find('.js-update-payment-confirmation').addClass('hidden');\r\n ui.$changePaymentMethod.find('[data-region=\"js-payment-selector\"]').removeClass('hidden');\r\n ui.$changePaymentMethod.find('.js-update-payment-method-section').removeClass('hidden');\r\n }\r\n\r\n /**\r\n * @method addNewPaymentModal\r\n * @description to open the add new payment method modal\r\n */\r\n function addNewPaymentModal() {\r\n var iframe = document.getElementById('paymentFrame');\r\n iframe.remove();\r\n createPaymentForm();\r\n clearAddNewPaymentDetails();\r\n ui.$changePaymentMethod.find('.js-add-new-payment-method').removeClass('hidden');\r\n ui.$changePaymentMethod.find('.js-update-payment-method-section').addClass('hidden');\r\n $('#savePayment').prop('disabled', true);\r\n }\r\n\r\n /**\r\n * @method clearAddNewPaymentDetails\r\n * @description to clear the new paymnet details\r\n */\r\n function clearAddNewPaymentDetails() {\r\n $('.was-validated').removeClass('was-validated');\r\n // $('#active-subscriptions').prop('checked', false);\r\n $('#savePayment').attr('disabled', true).addClass('disabled');\r\n $('#addPaymentContainer').find('[data-control=\"cardHolderName\"]').val('');\r\n $('#addPaymentContainer').find('[data-control=\"address\"]').val('');\r\n $('#addPaymentContainer').find('[data-control=\"address2\"]').val('');\r\n $('#addPaymentContainer').find('[data-control=\"city\"]').val('');\r\n $('#addPaymentContainer').find('[data-control=\"select\"]').val('');\r\n $('#addPaymentContainer').find('[data-control=\"select\"]').attr('data-value', '');\r\n $('#addPaymentContainer').find('[data-control=\"zip\"]').val('');\r\n }\r\n\r\n /**\r\n * @method createPaymentForm\r\n * @description to create the payment selector dropdown menu using AddPaymentWithaddress service file\r\n */\r\n function createPaymentForm() {\r\n new AddPaymentWithaddress({\r\n containerId: '#addpayment-form-wrapper',\r\n formId: '#form-wrapper',\r\n paymentFrameContainerId: 'paymentFrameContainer',\r\n savePaymentId: '#savePayment',\r\n paymentLoaderId: '#paymentLoader',\r\n settingsId: '#paymentSettings',\r\n //updateAutoshipCheckboxId: '#active-subscriptions',\r\n urlPath: '/api/account/AddNewPaymentMethod'\r\n });\r\n ui.$changePaymentMethod.find('[data-control=\"cancel\"]').remove(); \r\n ui.$changePaymentMethod.find('[data-label=\"heading\"]').html('Billing Address');\r\n }\r\n\r\n /**\r\n * @method closeToasterPayment\r\n * @description to close the toaster message\r\n */\r\n function closeToasterPayment() {\r\n $('.js-toaster-visible').addClass('hidden');\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n bindEvents();\r\n initPage();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n}\r\n)(jQuery);\r\n\r\n$(function () {\r\n VCA.OrderFulfillment.init();\r\n});","const context = {\r\n DateRangeDefault: '3',\r\n DateRangeOptions: [\r\n {\r\n Text: 'Past 3 Months',\r\n Value: '3'\r\n },\r\n {\r\n Text: 'Past 6 Months',\r\n Value: '6'\r\n },\r\n {\r\n Text: 'Past Year',\r\n Value: '12'\r\n },\r\n {\r\n Text: 'Past 2 Years',\r\n Value: '24'\r\n }\r\n ],\r\n ItemsInOrder: 'Items in Order ({0})',\r\n OrderNumber: 'Order Number',\r\n OrderNumberPending: '-',\r\n OrderPlaced: 'Order Placed',\r\n OrderTotal: 'Order Total',\r\n StatusOptions: [\r\n {\r\n Class: 'bg-color-vca-egg',\r\n Text: 'Cancelled'\r\n },\r\n {\r\n Class: 'bg-color-vca-mauve',\r\n Text: 'Delivered'\r\n },\r\n {\r\n Class: 'bg-color-vca-sky',\r\n Text: 'In Progress'\r\n }\r\n ]\r\n};\r\n\r\nexport {\r\n context\r\n};\r\n","import template, { item as itemTemplate } from './templates/order-history-line';\r\nimport { context as defaultContext } from './order-history-defaults';\r\n\r\n/**\r\n * @typedef {Object} LineData\r\n * @property {string} date\r\n * @property {Array<string>} items\r\n * @property {string} link\r\n * @property {string} orderNumber\r\n * @property {string} total\r\n * @property {string} status\r\n */\r\n\r\nexport default class OrderHistoryLine {\r\n /**\r\n * \r\n * @param {JQuery?} $rootEl \r\n * @param {LineData} data \r\n * @param {Object<string,any>} context \r\n */\r\n \r\n constructor($rootEl, data, context, orderDetailsListingFF) {\r\n context = { ...defaultContext, ...context };\r\n\r\n const $parsed = $($.parseHTML(template));\r\n this.$el = $parsed;\r\n this.$rootEl = $rootEl?.length ? $rootEl : null;\r\n\r\n this.$dateLabel = this.$el.find('[data-label=\"date\"]');\r\n this.$itemsLabel = this.$el.find('[data-label=\"items\"]');\r\n this.$orderNumberLabel = this.$el.find('[data-label=\"orderNumber\"]');\r\n this.$totalLabel = this.$el.find('[data-label=\"total\"]');\r\n\r\n this.$date = this.$el.find('[data-region=\"date\"]');\r\n this.$items = this.$el.find('[data-region=\"items\"]');\r\n this.$link = this.$el.find('[data-region=\"link\"]');\r\n this.$orderNumber = this.$el.find('[data-region=\"orderNumber\"]');\r\n this.$status = this.$el.find('[data-region=\"status\"]');\r\n this.$total = this.$el.find('[data-region=\"total\"]');\r\n\r\n this.data = data;\r\n this.context = context;\r\n this.orderDetailsListingFF = orderDetailsListingFF;\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderData();\r\n }\r\n\r\n render() {\r\n this.$rootEl?.html(this.$el);\r\n return this.$el;\r\n }\r\n\r\n renderLabels() {\r\n this.$dateLabel.html(this.context.OrderPlaced);\r\n this.$itemsLabel.html(this.context.ItemsInOrder?.replace('{0}', this.data.items?.length) || '');\r\n this.$orderNumberLabel.html(this.context.OrderNumber);\r\n this.$totalLabel.html(this.context.OrderTotal);\r\n }\r\n\r\n renderData() {\r\n this.$date.html(this.data.date);\r\n this.$orderNumber.html(this.data.orderNumber || this.context.OrderNumberPending);\r\n this.$total.html(this.data.total);\r\n\r\n this.renderItems();\r\n this.renderLink();\r\n this.renderStatus();\r\n this.renderPaymentFailureMsg();\r\n }\r\n\r\n renderPaymentFailureMsg() {\r\n if((this.data.status === \"Pending\" && this.data.isPaymentDetailsMissing) || (this.data.isPaymentFailureStatus && this.orderDetailsListingFF)) {\r\n this.$el.addClass('-declined');\r\n this.$el.find('.order-history-line__link').append(`\r\n <div class=\"payment-failure-tag-container\">\r\n <span class=\"payment-failure-tag-container__card-failure-tag bg-color-vca-sunset-tint-2\">\r\n <img src=\"../../images-2/error-red.svg\" alt=\"payment failure icon\"> \r\n <span class=\"card-failure-tag-text\"> Update Payment Method</span>\r\n </span>\r\n </div>\r\n `);\r\n }\r\n }\r\n\r\n renderItems() {\r\n const fragment = document.createDocumentFragment();\r\n\r\n this.data.items.forEach((name) => {\r\n const itemHtmlStr = itemTemplate(name);\r\n const [ itemNode ] = $.parseHTML(itemHtmlStr);\r\n fragment.appendChild(itemNode);\r\n });\r\n\r\n this.$items.html(fragment);\r\n }\r\n\r\n renderLink() {\r\n if(this.$link.is('a')) {\r\n this.$link.attr('href', this.data.link);\r\n }\r\n }\r\n\r\n renderStatus() {\r\n let status = this.data.status;\r\n const config = this.context.StatusOptions?.find((option) => option.Text === this.data.status);\r\n\r\n if(config) {\r\n status = config.Text;\r\n this.$status.addClass(config.Class);\r\n }\r\n\r\n this.$status.html(status);\r\n }\r\n}\r\n","import ReactiveComponent, { filter, watch } from '@utils/reactive-component';\r\nimport OrderHistoryLine from './order-history-line';\r\nimport OrderSelectBox from './order-select-box';\r\nimport parseRenderingContext from '@utils/parse-rendering-context';\r\nimport orderHistoryService from '@api/routes/orders/orderlisting';\r\nimport { context as defaultContext } from './order-history-defaults';\r\n\r\nexport default class OrderHistory extends ReactiveComponent {\r\n constructor($originEl, context) {\r\n super();\r\n\r\n context = { ...defaultContext, ...context };\r\n\r\n this.$el = $originEl;\r\n\r\n this.$lines = this.$el.find('[data-region=\"lines\"]');\r\n this.$loader = this.$el.find('[data-region=\"loader\"]');\r\n\r\n this.$dateRangePlaceholder = this.$el.find('[data-placeholder=\"dateRange\"]');\r\n\r\n this.dateRangeSelector = null;\r\n\r\n this.context = context;\r\n\r\n this.orderDetailsListingFF = false;\r\n\r\n this.reactive({\r\n dateRangeValue: Number(this.context.DateRangeDefault) || this.context.DateRangeDefault,\r\n loading: true,\r\n orderLines: []\r\n });\r\n\r\n this.init();\r\n }\r\n\r\n [filter]() {\r\n return {\r\n dateRangeValue(value) {\r\n return Number(value) || value;\r\n },\r\n orderLines(lines) {\r\n return lines?.map((line) => ({\r\n date: line.Date,\r\n items: line.ItemsInOrder,\r\n link: line.DetailsLink,\r\n orderNumber: line.OrderNumber,\r\n total: line.OrderTotal,\r\n status: line.Status,\r\n isPaymentDetailsMissing: line.IsPaymentDetailsMissing,\r\n isPaymentFailureStatus: line.IsPaymentFailureStatus,\r\n })) || [];\r\n }\r\n }\r\n }\r\n\r\n [watch]() {\r\n return {\r\n dateRangeValue() {\r\n this.getOrderHistory();\r\n },\r\n loading(loading) {\r\n if(loading) {\r\n this.$loader.show();\r\n this.$lines.hide();\r\n } else {\r\n this.$loader.hide();\r\n this.$lines.show();\r\n }\r\n },\r\n orderLines() {\r\n this.renderLines();\r\n }\r\n }\r\n }\r\n\r\n init() {\r\n this.setupDateRange();\r\n this.setupListeners();\r\n }\r\n\r\n async getOrderHistory() {\r\n this.loading = true;\r\n\r\n this.removeErrorMessage();\r\n\r\n const response = await orderHistoryService.post({\r\n HistoryInMonths: this.dateRangeValue\r\n });\r\n if(response.success) {\r\n this.orderDetailsListingFF = response.data.IsUpdatePaymentMethodForPaymentFailureOrderStatusFF;\r\n this.orderLines = response.data.Orders || [];\r\n } else {\r\n let errorMessage = response.error;\r\n this.$el.append(`<div class=\"order-history__err-msg\"></div>`);\r\n this.$el.find('.order-history__err-msg').append(`<div class=\"font-weight-bold\">${errorMessage}</div>`);\r\n }\r\n\r\n this.loading = false;\r\n }\r\n\r\n onDateRangeChange(value) {\r\n this.dateRangeValue = value;\r\n }\r\n\r\n renderLines() {\r\n\r\n this.removeErrorMessage();\r\n\r\n if(this.orderLines.length !== 0) {\r\n const fragment = document.createDocumentFragment();\r\n this.orderLines.forEach((line) => {\r\n const component = new OrderHistoryLine(null, line, this.context, this.orderDetailsListingFF);\r\n\r\n fragment.appendChild(component.render()?.get(0));\r\n });\r\n\r\n this.$lines.html(fragment);\r\n } else {\r\n this.$el.append(`<div class=\"order-history__err-msg\"></div>`);\r\n this.$el.find('.order-history__err-msg').append(`<div class=\"font-weight-bold\">No Invoices to View</div>`);\r\n }\r\n }\r\n\r\n removeErrorMessage() {\r\n let errMessageContainer = this.$el.find('.order-history__err-msg');\r\n\r\n if (errMessageContainer) {\r\n $(errMessageContainer).remove();\r\n }\r\n }\r\n\r\n setupDateRange() {\r\n const options = this.context.DateRangeOptions?.map((option) => ({\r\n text: option.Text,\r\n value: option.Value\r\n }));\r\n\r\n this.dateRangeSelector = new OrderSelectBox(this.$dateRangePlaceholder, {\r\n name: 'DateRange',\r\n options,\r\n value: this.context.DateRangeDefault\r\n });\r\n\r\n this.dateRangeSelector.render();\r\n }\r\n\r\n setupListeners() {\r\n this.dateRangeSelector.watchValue((value) => this.onDateRangeChange(value));\r\n }\r\n}\r\n\r\n$(async () => {\r\n const el = document.querySelector('.js-order-history');\r\n\r\n if(el) {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n const history = new OrderHistory($el, renderingContext);\r\n history.getOrderHistory();\r\n }\r\n});\r\n","import SelectBox from \"../select-box/select-box\";\r\n\r\nexport default class OrderSelectBox extends SelectBox {\r\n constructor($originEl, options) {\r\n options = options || {};\r\n options.className = 'order-select-box';\r\n\r\n super($originEl, options);\r\n }\r\n}\r\n","import template from './order-history-line.html';\r\n\r\nexport const item = (name) => `\r\n <li class=\"order-history-line__item\">\r\n ${name}\r\n </li>\r\n`.trim();\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"order-history-line\\\"> <a href=\\\"#\\\" class=\\\"order-history-line__link\\\" data-region=\\\"link\\\"> <div class=\\\"order-history-line__container\\\"> <div class=\\\"order-history-line__status\\\"> <span class=\\\"status-stamp\\\" data-region=\\\"status\\\"> </span> </div> <div class=\\\"order-history-line__details\\\"> <div class=\\\"order-history-line__col\\\"> <div class=\\\"order-history-line__title\\\" data-label=\\\"date\\\"></div> <div class=\\\"order-history-line__desc\\\" data-region=\\\"date\\\"></div> </div> <div class=\\\"order-history-line__col\\\"> <div class=\\\"order-history-line__title\\\" data-label=\\\"orderNumber\\\"></div> <div class=\\\"order-history-line__desc\\\" data-region=\\\"orderNumber\\\"></div> </div> <div class=\\\"order-history-line__col\\\"> <div class=\\\"order-history-line__title\\\" data-label=\\\"total\\\"></div> <div class=\\\"order-history-line__desc\\\" data-region=\\\"total\\\"></div> </div> </div> <div class=\\\"order-history-line__items\\\"> <div class=\\\"order-history-line__title\\\" data-label=\\\"items\\\"></div> <ul data-region=\\\"items\\\"></ul> </div> </div> </a> </div> \";\n// Exports\nmodule.exports = code;","import ApiService from '@api/api-service';\r\nimport * as submitSpinner from '../custom-forms/form-loading';\r\nimport MapFrame from '../map-frame';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.PaidMedia = (function ($) {\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n ui.$mapContainer = $(\"#hospital-map-pm\");\r\n ui.$hospitalNamePM = $(\"#hospitalNamePM\").val();\r\n ui.$updatePopup = $('#js-paid-popup');\r\n ui.$updateAddressForm = $('.update-address-form');\r\n ui.$paidFormSubmitBtn = $('#PAIDFormSubmit');\r\n ui.$videopopup = $('.js-video-modal');\r\n ui.$doctVideoModal= $('#doctVideoModal');\r\n // ui.$thanksPopup = $('#js-thanks-popup'); //can be used in future dev\r\n }\r\n\r\n function initPage() {\r\n submitSpinner.setupLoadingSpinner(ui.$paidFormSubmitBtn);\r\n const hospitalMapDetail = {\r\n hospitalName: ui.$hospitalNamePM,\r\n latitude: '',\r\n longitude: ''\r\n }\r\n let iframeStructure = new MapFrame(hospitalMapDetail);\r\n const iframe = iframeStructure.constructMapFrame();\r\n ui.$mapContainer.empty();\r\n ui.$mapContainer.append(iframe);\r\n }\r\n\r\n function cancelUpdateAddressForm() {\r\n $('.js-open-popup-btn').on('click', function (e) {\r\n e.preventDefault();\r\n ui.$updatePopup.modal('show');\r\n });\r\n $('.js-cancel-popup').on('click', function (e) {\r\n e.preventDefault();\r\n resetErrorMessages();\r\n ui.$updatePopup.modal('hide');\r\n });\r\n\r\n //can be used in future dev\r\n // $('#closePopupBottomBtn').on('click', function(e) {\r\n // e.preventDefault();\r\n // ui.$thanksPopup.modal('hide');\r\n // });\r\n }\r\n\r\n function validateForm() {\r\n var isValid = true;\r\n\r\n var firstname = document.getElementById('v_firstname');\r\n var lastname = document.getElementById('v_lastname');\r\n var email = document.getElementById('v_email');\r\n var zip = document.getElementById('v_zip');\r\n var phone = document.getElementById('v_phone1');\r\n\r\n var emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n var zipPattern = /^\\d{5}$/;\r\n var phonePattern = /^[2-9]\\d{9}$/; ///^\\d{10}$/ \r\n\r\n resetErrorMessages();\r\n\r\n if (firstname.value.trim() === '') {\r\n showError(firstname, 'v_firstname_error');\r\n isValid = false;\r\n }\r\n if (lastname.value.trim() === '') {\r\n showError(lastname, 'v_lastname_error');\r\n isValid = false;\r\n }\r\n if (!emailPattern.test(email.value.trim())) {\r\n showError(email, 'v_email_error');\r\n isValid = false;\r\n }\r\n if (!zipPattern.test(zip.value.trim())) {\r\n showError(zip, 'v_zip_error');\r\n isValid = false;\r\n }\r\n if (!phonePattern.test(phone.value.trim())) {\r\n showError(phone, 'v_phone1_error');\r\n isValid = false;\r\n }\r\n\r\n return isValid;\r\n }\r\n\r\n function showError(element, errorElementId) {\r\n element.parentNode.classList.add('invalid');\r\n document.getElementById(errorElementId).style.display = 'block';\r\n }\r\n\r\n function resetErrorMessages() {\r\n var errorElements = document.querySelectorAll('.form-error');\r\n errorElements.forEach(function (errorElement) {\r\n errorElement.style.display = 'none';\r\n });\r\n var formGroups = document.querySelectorAll('.form-group');\r\n formGroups.forEach(function (formGroup) {\r\n formGroup.classList.remove('invalid');\r\n });\r\n }\r\n\r\n async function handleFormSubmit(event) {\r\n submitSpinner.startLoadingSpinner(ui.$paidFormSubmitBtn);\r\n const url = '/api/NCA/SubmitNCAForm';\r\n let api = new ApiService(url);\r\n event.preventDefault();\r\n\r\n let $ShowOabFaa = $('#hospital-showoabfaa').val(); \r\n\r\n if (!validateForm()) {\r\n submitSpinner.stopLoadingSpinner(ui.$paidFormSubmitBtn);\r\n return;\r\n }\r\n var $refUrl = document.referrer;\r\n var $currUrl = window.location.href;\r\n\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n const myParam = urlParams.get('utm_source');\r\n\r\n var payload = {\r\n \"firstName\": document.getElementById('v_firstname').value,\r\n \"lastName\": document.getElementById('v_lastname').value,\r\n \"email\": document.getElementById('v_email').value,\r\n \"phone\": document.getElementById('v_phone1').value,\r\n \"zip\": document.getElementById('v_zip').value,\r\n \"refUrl\": $refUrl,\r\n \"currUrl\": $currUrl,\r\n \"RedirectionUrl\": document.getElementById('paidmedia-redirectlink').value,\r\n \"HospitaSettinglId\": document.getElementById('paidhospital-settingId') != undefined ? document.getElementById('paidhospital-settingId').value: \"\",\r\n \"hospitalSiteId\": document.getElementById('paidhospital-siteId') != undefined ? document.getElementById('paidhospital-siteId').value : \"\", \r\n \"HospitalMapped\": document.getElementById('paidmedia-hospitalmapped') != undefined ? document.getElementById('paidmedia-hospitalmapped').value == \"1\" : true,\r\n \"MediaReachOfferId\": document.getElementById('paidmedia-offerId').value,\r\n \"EnableCouponCTA\": true, //It is hardcoded. Because if the flag is enabled, then only the button will be shown.\r\n \"UtmSource\": (myParam != null && myParam != \"\") ? myParam : urlParams.get('utmsource'),\r\n \"ShowOabFaa\": $ShowOabFaa\r\n };\r\n\r\n const { data, success, error } = await api.post(payload);\r\n \r\n if (success) {\r\n submitSpinner.stopLoadingSpinner(ui.$paidFormSubmitBtn);\r\n ui.$updatePopup.modal('hide');\r\n if (data.LeadId != '' && data.LeadId != null) {\r\n localStorage.setItem('expiry', new Date().getTime() + 15 * 60 * 1000);\r\n localStorage.setItem('NcaUserDetails', JSON.stringify(payload)); \r\n\r\n //google analytics\r\n window.dataLayer.push({\r\n event: 'clickevent',\r\n category: 'Paid Media Local - Get Coupon',\r\n action: 'Get coupon',\r\n label: ui.hospitalName\r\n });\r\n window.location.assign(data.CouponUrl); \r\n } else {\r\n window.location.assign(data.CouponUrl); \r\n }\r\n } else {\r\n submitSpinner.stopLoadingSpinner(ui.$paidFormSubmitBtn);\r\n }\r\n }\r\n\r\n function openVideoModal(){\r\n ui.$videopopup.on('click', function (e) {\r\n const videoURL = $(this).attr('data-video-url');\r\n ui.$doctVideoModal.find('.js-video-iframe').attr('src',videoURL + '?autoplay=1');\r\n e.preventDefault();\r\n ui.$doctVideoModal.modal('show');\r\n });\r\n\r\n ui.$doctVideoModal.find('.js-close-video-modal').on('click', function (e) {\r\n e.preventDefault();\r\n ui.$doctVideoModal.modal('hide'); \r\n });\r\n\r\n ui.$doctVideoModal.on('hide.bs.modal', function () {\r\n ui.$doctVideoModal.find('.js-video-iframe').attr('src','');\r\n }); \r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n initPage();\r\n cancelUpdateAddressForm();\r\n openVideoModal();\r\n\r\n var form = document.getElementById('hz-lead-form');\r\n if (form) {\r\n form.addEventListener('submit', handleFormSubmit);\r\n }\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.PaidMedia.init();\r\n});\r\n","import api from '@api/routes/cart/addline';\r\nimport ReactiveComponent, {\r\n computed,\r\n filter,\r\n watch,\r\n} from '@utils/reactive-component';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport template from './templates/pdp-add-to-cart-freq';\r\nimport { defaults } from './pdp-mappings';\r\nimport cartStore from '@stores/cart/cart-store';\r\n\r\nconst parsedTemplate = $.parseHTML(template);\r\n\r\nconst CLASS_NAME_DISABLED = 'disabled';\r\n\r\nconst EVENT_KEY = `_addToCart_`;\r\nconst EVENT_CLICK = `click.${EVENT_KEY}`;\r\nconst EVENT_CHANGE = `change.${EVENT_KEY}`;\r\n\r\nconst DEFAULT_OPTIONS = {\r\n purchaseType: null,\r\n quantity: 1,\r\n variantId: 0,\r\n};\r\n\r\nexport default class PdpAddToCartFreq extends ReactiveComponent {\r\n constructor($el, labels, product, options, data, currentProduct) {\r\n super();\r\n\r\n options = {\r\n ...DEFAULT_OPTIONS,\r\n ...options,\r\n };\r\n\r\n $el.replaceWith(parsedTemplate);\r\n this.$el = $(parsedTemplate);\r\n this.data = data;\r\n this.price = 0.0;\r\n this.currentProduct = currentProduct;\r\n this.$cartLabel = this.$el.find('[data-label=\"cart\"]');\r\n this.$favoriteLabel = this.$el.find('[data-label=\"favorite\"]');\r\n this.$purchaseLabel = this.$el.find('[data-label=\"purchase\"]');\r\n this.$subscribeLabel = this.$el.find('[data-label=\"subscribe\"]');\r\n\r\n this.$success = this.$el.find('[data-region=\"success\"]');\r\n this.$error = this.$el.find('[data-region=\"error\"]');\r\n\r\n this.$cartCtrl = this.$el.find('[data-control=\"cart\"]');\r\n this.$radioCtrl = this.$el.find('[data-control=\"radio\"]');\r\n\r\n this.$loaderPlaceholder = this.$el.find('[data-placeholder=\"loader\"]');\r\n this.$loadingSpinner = $('.js-bundle-loader');\r\n\r\n this.loader = null;\r\n\r\n this.catalogName = options.catalogName || 'VCA_Master';\r\n this.brand = options.brand;\r\n\r\n this.anonymous = options.anonymous;\r\n this.documentPosition = options.documentPosition;\r\n this.searchQueryUid = options.searchQueryUid;\r\n this.sourceName = options.sourceName;\r\n this.permanentid = options.permanentid;\r\n this.category = options.category;\r\n\r\n this.displayName = options.displayName;\r\n (this.exceptionAmount = options.exceptionAmount ?? 0),\r\n (this.exceptionBehavior = options.exceptionBehavior || null),\r\n (this.productId = options.productId);\r\n\r\n this.products = product;\r\n\r\n this.labels = {\r\n ...defaults,\r\n ...labels,\r\n };\r\n\r\n const radioValue = this.$radioCtrl.filter(':checked').val();\r\n\r\n this.reactive({\r\n loading: false,\r\n quantity: options.quantity,\r\n variantId: options.variantId,\r\n radioValue: Number(radioValue) ?? radioValue,\r\n });\r\n\r\n this.init();\r\n }\r\n\r\n [computed]() {\r\n return {\r\n enabled() {\r\n const radioValue = this.radioValue ?? null;\r\n const validPayload = !!(\r\n this.quantity &&\r\n radioValue !== null &&\r\n this.variantId\r\n );\r\n return validPayload && !this.loading;\r\n },\r\n };\r\n }\r\n\r\n [filter]() {\r\n return {\r\n radioValue(newValue) {\r\n return Number(newValue) ?? newValue;\r\n },\r\n };\r\n }\r\n\r\n [watch]() {\r\n return {\r\n enabled: this.updateState,\r\n loading: this.updateLoadingState,\r\n };\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderLoader();\r\n this.setupListeners();\r\n this.updateState();\r\n }\r\n\r\n async onCartClick() {\r\n if (this.enabled) {\r\n this.loading = true;\r\n let dPrice = this.price.replace(/\\$/g, '');\r\n const newoptions = {\r\n VariantId: this.variantId,\r\n Quantity: this.quantity,\r\n ProductId: this.productId,\r\n AutoshipFrequency: 0,\r\n CatalogName: this.catalogName,\r\n ExceptionAmount: this.exceptionAmount,\r\n ExceptionBehavior: this.exceptionBehavior,\r\n Brand: this.currentProduct.Brand,\r\n DocumentPosition: this.products.length + 1,\r\n SearchQueryUid: this.data.SearchQueryUid,\r\n ProductName: this.currentProduct.Name,\r\n DisplayName: this.currentProduct.DisplayName,\r\n Anonymous: !this.data.UserAuthenticated,\r\n SourceName: this.data.SourceName,\r\n Permanentid: this.currentProduct.PermanentId,\r\n Category: this.currentProduct.CategoryList,\r\n Price: dPrice,\r\n };\r\n\r\n let indexInData = this.productIndex - 1;\r\n const index = this.products.findIndex((e, i) => i === indexInData);\r\n if (index === -1) {\r\n this.products.push(newoptions);\r\n } else {\r\n this.products[indexInData] = newoptions;\r\n }\r\n //console.log('product cart', this.products);\r\n\r\n /* const options = {\r\n autoshipFrequency: this.radioValue,\r\n catalogName: this.catalogName,\r\n exceptionAmount: this.exceptionAmount,\r\n exceptionBehavior: this.exceptionBehavior,\r\n quantity: this.quantity\r\n }; */\r\n\r\n this.$loadingSpinner.show();\r\n\r\n //Call Coveo for each product\r\n this.logClickAndAddToCart();\r\n\r\n window.dataLayer.push({\r\n 'event': 'add-to-cart',\r\n 'category_product': 'frequently-bought'\r\n });\r\n\r\n const { error, success } = await cartStore.actions.addMultipleLines(\r\n this.products,\r\n this.productId\r\n );\r\n\r\n this.$loadingSpinner.hide();\r\n $('#bundle-modal').modal('hide');\r\n\r\n if (success) {\r\n cartStore.actions.focusMiniCart({\r\n productId: this.productId,\r\n variantId: this.variantId,\r\n });\r\n } else {\r\n this.$error.html(error);\r\n this.$error.show();\r\n }\r\n this.loading = false;\r\n }\r\n }\r\n\r\n onRadioChange(evt) {\r\n this.radioValue = evt.target.value;\r\n }\r\n\r\n logClickAndAddToCart() {\r\n window.VCA.CoveoAnalytics.initCoveoUa();\r\n this.products.forEach((product, index) => {\r\n let actionCause = 'documentOpen';\r\n if (index > 0) {\r\n actionCause = 'recommendationOpen';\r\n }\r\n\r\n coveoua('send', 'click', {\r\n actionCause: actionCause,\r\n anonymous: product.Anonymous,\r\n documentPosition: product.DocumentPosition,\r\n documentTitle: product.ProductName,\r\n // documentUrl: product.clickUri,\r\n originLevel1: 'FrequentlyBoughtTogether_SearchHub',\r\n searchQueryUid: product.SearchQueryUid,\r\n sourceName: product.SourceName,\r\n customData: {\r\n contentIDKey: 'permanentid',\r\n contentIDValue: product.Permanentid,\r\n },\r\n });\r\n\r\n coveoua('ec:addProduct', {\r\n id: product.ProductId,\r\n name: product.ProductName,\r\n brand: product.Brand,\r\n category: product.Category,\r\n price: product.Price,\r\n quantity: product.Quantity,\r\n variant: product.VariantId,\r\n });\r\n\r\n coveoua('ec:setAction', 'add');\r\n coveoua('send', 'event');\r\n });\r\n }\r\n\r\n renderLabels() {\r\n this.$cartLabel.html(this.labels.AddToCart);\r\n this.$favoriteLabel.html(this.labels.FavoritesSrText);\r\n this.$purchaseLabel.html(this.labels.OneTimePurchase);\r\n this.$subscribeLabel.html(this.labels.Subscribe);\r\n }\r\n\r\n renderLoader() {\r\n this.loader = new AjaxLoader(this.$loaderPlaceholder, {\r\n size: 'xs',\r\n });\r\n this.loader.render();\r\n }\r\n\r\n setQuantity(quantity) {\r\n this.quantity = quantity;\r\n }\r\n\r\n setPrice(price) {\r\n this.price = price;\r\n }\r\n\r\n setVariant({ exceptionAmount, exceptionBehavior, variantId }) {\r\n this.exceptionAmount = exceptionAmount ?? 0;\r\n this.exceptionBehavior = exceptionBehavior ?? null;\r\n this.variantId = variantId;\r\n }\r\n\r\n setupListeners() {\r\n this.$cartCtrl.on(EVENT_CLICK, () => this.onCartClick());\r\n this.$radioCtrl.on(EVENT_CHANGE, evt => this.onRadioChange(evt));\r\n }\r\n\r\n updateLoadingState() {\r\n if (this.loading) {\r\n this.$error.hide();\r\n this.$success.hide();\r\n }\r\n\r\n this.loader.active = this.loading;\r\n this.updateState();\r\n }\r\n\r\n updateState() {\r\n this.$cartCtrl.attr('aria-disabled', !this.enabled);\r\n\r\n if (this.enabled) {\r\n this.$cartCtrl.removeClass(CLASS_NAME_DISABLED);\r\n } else {\r\n this.$cartCtrl.addClass(CLASS_NAME_DISABLED);\r\n }\r\n }\r\n}\r\n","import api from '@api/routes/cart/addline';\r\nimport ReactiveComponent, {\r\n computed,\r\n filter,\r\n watch,\r\n} from '@utils/reactive-component';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport template from './templates/pdp-add-to-cart';\r\nimport { defaults } from './pdp-mappings';\r\nimport cartStore from '@stores/cart/cart-store';\r\n\r\nconst parsedTemplate = $.parseHTML(template);\r\n\r\nconst CLASS_NAME_DISABLED = 'disabled';\r\n\r\nconst EVENT_KEY = `_addToCart_`;\r\nconst EVENT_CLICK = `click.${EVENT_KEY}`;\r\nconst EVENT_CHANGE = `change.${EVENT_KEY}`;\r\n\r\nconst DEFAULT_OPTIONS = {\r\n purchaseType: null,\r\n quantity: 1,\r\n variantId: 0,\r\n backOrdered: false,\r\n brand: null,\r\n};\r\n\r\nexport default class PdpAddToCart extends ReactiveComponent {\r\n constructor($el, labels, options) {\r\n super();\r\n\r\n options = {\r\n ...DEFAULT_OPTIONS,\r\n ...options,\r\n };\r\n\r\n $el.replaceWith(parsedTemplate);\r\n this.$el = $(parsedTemplate);\r\n\r\n this.$cartLabel = this.$el.find('[data-label=\"cart\"]');\r\n this.$favoriteLabel = this.$el.find('[data-label=\"favorite\"]');\r\n this.$purchaseLabel = this.$el.find('[data-label=\"purchase\"]');\r\n this.$subscribeLabel = this.$el.find('[data-label=\"subscribe\"]');\r\n this.$outofstockLabel = this.$el.find('[data-label=\"outofstock\"]');\r\n this.$outofstockIcon = this.$el.find('[data-label=\"outofstockicon\"]');\r\n this.$outofstockRegion = this.$el.find(\r\n '[data-region=\"outofstockregion\"]'\r\n );\r\n this.$radioSubscribe = this.$el.find('[data-region=\"radioSubscribe\"]');\r\n this.$radioPurchase = this.$el.find('[data-region=\"radioPurchase\"]');\r\n this.$cartBtn = this.$el.find('[ data-region=\"cartBtn\"]');\r\n\r\n this.$success = this.$el.find('[data-region=\"success\"]');\r\n this.$error = this.$el.find('[data-region=\"error\"]');\r\n\r\n this.$cartCtrl = this.$el.find('[data-control=\"cart\"]');\r\n this.$radioCtrl = this.$el.find('[data-control=\"radio\"]');\r\n\r\n this.$loaderPlaceholder = this.$el.find('[data-placeholder=\"loader\"]');\r\n\r\n this.loader = null;\r\n\r\n this.catalogName = options.catalogName || 'VCA_Master';\r\n this.brand = options.brand;\r\n this.displayName = options.displayName;\r\n (this.exceptionAmount = options.exceptionAmount ?? 0),\r\n (this.exceptionBehavior = options.exceptionBehavior || null),\r\n (this.productId = options.productId);\r\n\r\n this.labels = {\r\n ...defaults,\r\n ...labels,\r\n };\r\n\r\n const radioValue = this.$radioCtrl.filter(':checked').val();\r\n\r\n this.reactive({\r\n loading: false,\r\n quantity: options.quantity,\r\n variantId: options.variantId,\r\n backOrdered: options.backOrdered,\r\n radioValue: Number(radioValue) ?? radioValue,\r\n });\r\n\r\n this.init();\r\n }\r\n\r\n [computed]() {\r\n return {\r\n isBackOrdered() {\r\n return this.backOrdered;\r\n },\r\n enabled() {\r\n const radioValue = this.radioValue ?? null;\r\n const validPayload = !!(\r\n this.quantity &&\r\n radioValue !== null &&\r\n this.variantId &&\r\n !this.backOrdered\r\n );\r\n return validPayload && !this.loading;\r\n },\r\n };\r\n }\r\n\r\n [filter]() {\r\n return {\r\n radioValue(newValue) {\r\n return Number(newValue) ?? newValue;\r\n },\r\n };\r\n }\r\n\r\n [watch]() {\r\n return {\r\n enabled: this.updateState,\r\n loading: this.updateLoadingState,\r\n };\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderLoader();\r\n this.setupListeners();\r\n this.updateState();\r\n }\r\n\r\n async onCartClick() {\r\n if (this.enabled) {\r\n this.loading = true;\r\n\r\n const options = {\r\n autoshipFrequency: this.radioValue,\r\n catalogName: this.catalogName,\r\n exceptionAmount: this.exceptionAmount,\r\n exceptionBehavior: this.exceptionBehavior,\r\n quantity: this.quantity,\r\n brand: this.brand,\r\n };\r\n\r\n if (this.$cartCtrl.closest('#pdpQuickview').length > 0) {\r\n $('#quickshop-modal').modal('hide');\r\n $('div[data-region=\"main\"]').slick('unslick');\r\n $('div[data-region=\"nav\"]').slick('unslick');\r\n }\r\n\r\n const { error, success } = await cartStore.actions.addLine(\r\n this.productId,\r\n this.variantId,\r\n options\r\n );\r\n // console.log(\"ADD to card from FE\");\r\n\r\n if (success) {\r\n cartStore.actions.focusMiniCart({\r\n productId: this.productId,\r\n variantId: this.variantId,\r\n });\r\n } else {\r\n this.$error.html(error);\r\n this.$error.show();\r\n }\r\n this.loading = false;\r\n }\r\n }\r\n\r\n onRadioChange(evt) {\r\n this.radioValue = evt.target.value;\r\n }\r\n\r\n renderLabels() {\r\n this.$cartLabel.html(this.labels.AddToCart);\r\n this.$favoriteLabel.html(this.labels.FavoritesSrText);\r\n this.$purchaseLabel.html(this.labels.OneTimePurchase);\r\n this.$subscribeLabel.html(this.labels.Subscribe);\r\n this.$outofstockLabel.html(this.labels.OutOfStock);\r\n let img = document.createElement('img');\r\n img.src = this.labels.OutOfStockIcon;\r\n this.$outofstockIcon.html(img);\r\n }\r\n\r\n renderLoader() {\r\n this.loader = new AjaxLoader(this.$loaderPlaceholder, { size: 'xs' });\r\n this.loader.render();\r\n }\r\n\r\n setQuantity(quantity) {\r\n this.quantity = quantity;\r\n }\r\n\r\n setVariant({ exceptionAmount, exceptionBehavior, variantId, backOrdered }) {\r\n this.exceptionAmount = exceptionAmount ?? 0;\r\n this.exceptionBehavior = exceptionBehavior ?? null;\r\n this.variantId = variantId;\r\n if (this.variantId == null) {\r\n this.backOrdered = false;\r\n } else {\r\n this.backOrdered = backOrdered;\r\n }\r\n }\r\n\r\n setupListeners() {\r\n this.$cartCtrl.on(EVENT_CLICK, () => this.onCartClick());\r\n this.$radioCtrl.on(EVENT_CHANGE, evt => this.onRadioChange(evt));\r\n }\r\n\r\n updateLoadingState() {\r\n if (this.loading) {\r\n this.$error.hide();\r\n this.$success.hide();\r\n }\r\n\r\n this.loader.active = this.loading;\r\n this.updateState();\r\n }\r\n\r\n updateState() {\r\n this.$cartCtrl.attr('aria-disabled', !this.enabled);\r\n if (this.isBackOrdered) {\r\n this.$outofstockRegion.show();\r\n this.$cartCtrl.hide();\r\n this.$radioPurchase.hide();\r\n this.$radioSubscribe.hide();\r\n this.$cartBtn.hide();\r\n } else {\r\n this.$outofstockRegion.hide();\r\n this.$cartCtrl.show();\r\n this.$radioPurchase.show();\r\n this.$radioSubscribe.show();\r\n this.$cartBtn.show();\r\n }\r\n\r\n if(this.enabled) {\r\n this.$cartCtrl.removeClass(CLASS_NAME_DISABLED).removeAttr('disabled');\r\n } else {\r\n this.$cartCtrl.addClass(CLASS_NAME_DISABLED).attr('disabled',true);\r\n }\r\n }\r\n}\r\n","import uniqid from 'uniqid';\r\nimport ReactiveComponent, { computed, watch } from '@utils/reactive-component';\r\nimport priceString from '@utils/price-string';\r\nimport { duplicateValuesByProp } from '@utils/filters';\r\nimport template, {\r\n selectBox,\r\n selectLabel,\r\n selectOption,\r\n promoLegend,\r\n mainImage,\r\n nextStep,\r\n backStep,\r\n} from './templates/pdp-freq-bought-item';\r\nimport PdpAddToCartFreq from './pdp-add-to-cart-freq';\r\nimport PdpSlider from './pdp-slider';\r\nimport QuantitySelector from '../quantity-selector/quantity-selector';\r\nimport { defaults } from './pdp-mappings';\r\nimport { exceptionBehaviorValues } from '@stores/cart/cart-store';\r\nimport * as productDatalayer from '@datalayer/components/product-datalayer';\r\nimport * as productDetailsDatalayer from '@datalayer/components/product-details-datalayer';\r\nimport cartStore from '@stores/cart/cart-store';\r\n\r\n/* const mapPromos = (variant) => {\r\n const promoModels = variant.PromotionModels ? [ ...variant.PromotionModels ] : [];\r\n const exception = variant.ProductException ? { ...variant.ProductException } : null;\r\n if(exception && exception.Title) {\r\n promoModels.push({\r\n Id: uniqid.time('', '_exceptionPromo_'),\r\n Name: exception.Title,\r\n Description: exception.Description\r\n });\r\n }\r\n return promoModels || [];\r\n}; */\r\n\r\nconst URL_IMAGE_NOT_AVAILABLE = '/images-2/image-not-available.svg';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n anonymous: true,\r\n searchQueryUid: '',\r\n sourceName: '',\r\n};\r\n\r\nexport default class PdpSelectorFBT extends ReactiveComponent {\r\n #cachedProduct = {};\r\n #isPopState = false;\r\n\r\n constructor($rootEl, data, labels, totalProducts, i, products, options) {\r\n super();\r\n if (data == null) {\r\n return;\r\n }\r\n\r\n options = {\r\n ...DEFAULT_OPTIONS,\r\n ...options,\r\n };\r\n this.data = data;\r\n this.totalProducts = totalProducts;\r\n this.productIndex = i;\r\n this.price = 0.0;\r\n const $parsed = $($.parseHTML(template));\r\n this.$el = $parsed;\r\n this.$rootEl = $rootEl?.length ? $rootEl : null;\r\n\r\n // non-dynamic label regions\r\n this.$priceLabel = this.$el.find('[data-label=\"price\"]');\r\n this.$quantityLabel = this.$el.find('[data-label=\"quantity\"]');\r\n this.$rxLabel = this.$el.find('[data-label=\"prescription\"]');\r\n this.$videoLabel = this.$el.find('[data-label=\"video\"]');\r\n this.$modalTitle = this.$el.find('[data-region=\"modal-title\"]');\r\n this.$nextStepLabel = this.$el.find('[data-label=\"next-step-btn\"]');\r\n this.$navProductsLabel = this.$el.find('[data-label=\"navProducts\"]');\r\n this.$productBunldeTitleLabel = this.$el.find(\r\n '[data-label=\"productBunldeTitle\"]'\r\n );\r\n\r\n // placeholders for other components\r\n this.$addtoCartPlaceholder = this.$el.find('[data-placeholder=\"cart\"]');\r\n this.$nextProductPlaceholder = this.$el.find(\r\n '[data-placeholder=\"next-product\"]'\r\n );\r\n this.$infoTabsPlaceholder = this.$el.find(\r\n '[data-placeholder=\"infoTabs\"]'\r\n );\r\n this.$loginPlaceholder = this.$el.find('[data-placeholder=\"login\"]');\r\n this.$quantityPlaceholder = this.$el.find(\r\n '[data-placeholder=\"quantity\"]'\r\n );\r\n this.$sliderPlaceholder = this.$el.find('[data-placeholder=\"slider\"]');\r\n this.$selectorPlaceholder = this.$el.find(\r\n '[data-placeholder=\"selectors\"]'\r\n );\r\n\r\n // dynamic data regions\r\n // this.$benefits = this.$el.find('[data-region=\"benefits\"]');\r\n this.$brandName = this.$el.find('[data-region=\"brandName\"]');\r\n this.$price = this.$el.find('[data-region=\"price\"]');\r\n this.$productName = this.$el.find('[data-region=\"productName\"]');\r\n this.$rx = this.$el.find('[data-region=\"prescription\"]');\r\n this.$rxStamp = this.$el.find('[data-region=\"prescriptionStamp\"]');\r\n this.$discountPrice = this.$el.find('[data-region=\"discountPrice\"]');\r\n this.$listPrice = this.$el.find('[data-region=\"listPrice\"]');\r\n this.$video = this.$el.find('[data-region=\"video\"]');\r\n this.$videoIframe = this.$el.find('[data-region=\"videoIframe\"]');\r\n this.$promoLegend = this.$el.find('[data-placeholder=\"promoLegend\"]');\r\n this.$productBundleRegion = this.$el.find(\r\n '[data-placeholder=\"frequentlyBoughtTogether\"]'\r\n );\r\n this.$productBundleItem = this.$el.find(\r\n '[data-region=\"productBundleItem\"]'\r\n );\r\n // deferred dynamic data regions\r\n this.$selectorLabels = null; // assigned after selectors are rendered\r\n this.$selectors = null; // assigned after selectors are rendered\r\n\r\n // accessibility regions\r\n this.$ariaLive = this.$el.find('[data-a11y=\"ariaLive\"]');\r\n\r\n // ui controls\r\n this.$quantityControl = this.$el.find('[data-control=\"quantity\"]');\r\n this.$nextStepControl = this.$el.find('[data-control=\"next-step\"]');\r\n this.$prevStepControl = this.$el.find('[data-control=\"backBtn\"]');\r\n this.$pageNumber = this.$el.find('[data-control=\"pageNumber\"]');\r\n this.$pageTotal = this.$el.find('[data-control=\"pageTotal\"]');\r\n\r\n this.$selectorBoxes = null; // assigned after selectors are rendered\r\n\r\n // ui components\r\n this.addToCart = null;\r\n this.quantitySelector = null;\r\n this.login = null;\r\n this.slider = null;\r\n this.freqBought = null;\r\n this.quantity = 1;\r\n this.price = 0.0;\r\n\r\n this.products = products;\r\n\r\n // merge data from backend w/ fe defaults so there is always a value\r\n this.labels = labels\r\n ? {\r\n ...defaults.labels,\r\n ...labels,\r\n }\r\n : defaults.labels;\r\n\r\n // labels\r\n this.pleaseSelect = this.labels.PleaseSelect;\r\n\r\n // data points used for selector logic\r\n this.product = data.Product || {};\r\n this.variants = data.ChildVariants || [];\r\n this.selectorOptions = data.VariantSelectorOptions || [];\r\n\r\n // filter out duplicate select values\r\n this.uiSelectorOptions = this.removeDuplicateSelectorValues();\r\n\r\n // setup pre-selected selectors\r\n this.initialSelectors = this.setupInitialSelectors();\r\n\r\n this.currencyCode = this.product.CurrencyCode || 'USD'; // todo: BE to add currency code to data\r\n\r\n // state props\r\n this.reactive({\r\n /**\r\n * matrix of key/value pairs representing active selectors\r\n * - key is the selector property string\r\n * - value is the selector value string\r\n * @type {Array<Array<string>>}\r\n */\r\n selectors: this.setupSelectors(),\r\n /**\r\n * array of possible variants based on active selectors\r\n * @type {Array<Object<string,any>>}\r\n */\r\n filteredProducts: this.variants,\r\n });\r\n\r\n //on init\r\n this.onInit = false;\r\n\r\n // filter out duplicate promos for legend\r\n this.promos = this.variants.map(this.mapPromos, this).flat() || [];\r\n this.uiPromos = this.removeDuplicatePromoValues();\r\n\r\n this.init();\r\n }\r\n\r\n [computed]() {\r\n return {\r\n activeProduct() {\r\n return this.isVariant ? this.filteredProducts[0] : this.product;\r\n },\r\n activeGAProduct() {\r\n const exceptionBehavior =\r\n this.activeProduct?.ProductException?.PriceTreatment ??\r\n exceptionBehaviorValues.NO_EXCEPTION;\r\n\r\n return productDatalayer.buildProduct({\r\n id: this.activeProduct.ProductId,\r\n variantId: this.activeProduct.VariantId,\r\n name: this.activeProduct.Name,\r\n brand: this.activeProduct.Brand,\r\n category: this.product.CategoryList,\r\n price: this.isVariant\r\n ? this.activeProduct.ListPrice\r\n : undefined,\r\n discount:\r\n exceptionBehavior !==\r\n exceptionBehaviorValues.NO_EXCEPTION,\r\n rxRequired: this.activeProduct.RxRequired,\r\n });\r\n },\r\n activeSelectors() {\r\n return this.selectors.filter(([, value]) => value);\r\n },\r\n isVariant() {\r\n return this.selectors.length === this.activeSelectors.length;\r\n },\r\n slides() {\r\n //console.log(this.activeProduct.Images);\r\n\r\n if (\r\n !this.activeProduct.Images ||\r\n this.activeProduct.Images < 1\r\n ) {\r\n return [\r\n {\r\n url: URL_IMAGE_NOT_AVAILABLE,\r\n thumbnail: URL_IMAGE_NOT_AVAILABLE,\r\n alt: 'Image not available',\r\n },\r\n ];\r\n } else {\r\n return this.activeProduct.Images?.map(image => ({\r\n url: image.Url || image.ConstrainedUrl,\r\n thumbnail: image.ConstrainedUrl || image.Url,\r\n alt: image.Alt || this.product.DisplayName,\r\n }));\r\n }\r\n },\r\n };\r\n }\r\n\r\n [watch]() {\r\n return {\r\n isVariant() {\r\n if (\r\n this.#cachedProduct.VariantId !==\r\n this.activeProduct.VariantId\r\n ) {\r\n this.sendProductViewDatalayer();\r\n }\r\n this.updateAddToCart();\r\n },\r\n filteredProducts() {\r\n this.promos =\r\n this.filteredProducts.map(this.mapPromos, this).flat() ||\r\n [];\r\n this.uiPromos = this.removeDuplicatePromoValues();\r\n },\r\n selectors() {\r\n this.updateState();\r\n this.isPopState();\r\n },\r\n };\r\n }\r\n\r\n init() {\r\n // render all markup that will never be removed from the DOM\r\n this.renderLabels();\r\n this.renderStaticRegions();\r\n if (this.totalProducts == this.productIndex) {\r\n this.renderAddToCart();\r\n }\r\n this.renderNextButton();\r\n this.renderQuantitySelector();\r\n this.renderSelectors();\r\n this.updateRenderedOptions();\r\n this.renderImage();\r\n // this.renderSlider();\r\n this.renderPromoLegend();\r\n // this.renderFrequentlyBoughtTogether();\r\n\r\n // setup initial accessibility state\r\n this.setupAccessibility();\r\n\r\n // setup ui state\r\n this.setupListeners();\r\n\r\n // setup popstate history state object\r\n // this.setupHistoryState();\r\n\r\n // update state based off of any initial selectors\r\n this.updateState();\r\n\r\n this.updateAddToCart();\r\n\r\n this.sendProductViewDatalayer();\r\n }\r\n\r\n render() {\r\n this.$rootEl?.html(this.$el);\r\n return this.$el;\r\n }\r\n\r\n filterProducts(products = this.variants, selectors = this.selectors) {\r\n if (!products.length || !selectors.length) {\r\n return products;\r\n }\r\n\r\n let filteredProducts = [...products];\r\n let index = 0;\r\n let value = '';\r\n\r\n do {\r\n const [selectorProp, selectorFormattedValue] = selectors[index];\r\n // get the \"Value\" prop which will be the true value to compare to\r\n value =\r\n this.uiSelectorOptions[index]?.Values.find(\r\n option => option.FormattedValue === selectorFormattedValue\r\n )?.Value || null;\r\n if (value) {\r\n filteredProducts = filteredProducts.filter(\r\n product => product[selectorProp] === value\r\n );\r\n }\r\n index++;\r\n } while (\r\n value &&\r\n filteredProducts.length > 1 &&\r\n index < selectors.length\r\n );\r\n return filteredProducts;\r\n }\r\n\r\n filterOptions(index, filteredProducts = this.filteredProducts) {\r\n index = Number(index);\r\n if (\r\n isNaN(index) ||\r\n !filteredProducts ||\r\n !Array.isArray(filteredProducts)\r\n ) {\r\n return [];\r\n }\r\n\r\n return (\r\n this.uiSelectorOptions[index]?.Values.filter(option => {\r\n const selectorProp = this.uiSelectorOptions[index].Name;\r\n return filteredProducts.find(\r\n product => product[selectorProp] === option.Value\r\n );\r\n }) || []\r\n );\r\n }\r\n\r\n getSelectorsFromUrl() {\r\n const selectors = {};\r\n const urlParams = new URLSearchParams(window.location.search);\r\n\r\n for (const selector of this.uiSelectorOptions) {\r\n const key = selector.Name;\r\n const value = urlParams.get(key);\r\n const option = selector.Values?.find(\r\n option => option.FormattedValue === value\r\n );\r\n\r\n if (option) {\r\n selectors[key] = value;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return selectors;\r\n }\r\n\r\n onPopState() {\r\n this.#isPopState = true;\r\n\r\n this.initialSelectors = this.getSelectorsFromUrl();\r\n this.selectors = this.setupSelectors();\r\n\r\n if (this.isVariant) {\r\n this.updateRenderedOptions();\r\n }\r\n\r\n this.#isPopState = false;\r\n }\r\n\r\n onSelectorChange(evt) {\r\n const $target = $(evt.target);\r\n const currentIndex = $target.data('index');\r\n const key = $target.attr('name');\r\n const value = $target.val();\r\n\r\n this.#cachedProduct = this.activeProduct;\r\n\r\n let selectors = this.selectors.map((selector, index) => {\r\n const [key] = selector;\r\n return index > currentIndex ? [key, ''] : selector;\r\n });\r\n\r\n selectors[currentIndex] = [key, value];\r\n\r\n this.selectors = this.resetSelectors(selectors, currentIndex + 1);\r\n }\r\n\r\n isPopState() {\r\n if (!this.#isPopState) {\r\n const urlParams = new URLSearchParams(this.activeSelectors);\r\n const queryStr = urlParams.toString();\r\n const url = `${window.location.pathname}?${queryStr}`;\r\n window.history.pushState(null, '', url);\r\n this.login?.setLink();\r\n }\r\n }\r\n\r\n removeDuplicateSelectorValues() {\r\n return this.selectorOptions.map(option => {\r\n const values = duplicateValuesByProp(option.Values, 'Value');\r\n values.sort((first, second) => first.SortOrder - second.SortOrder);\r\n\r\n return { ...option, Values: values };\r\n });\r\n }\r\n\r\n removeDuplicatePromoValues() {\r\n if (!Array.isArray(this.promos) || typeof this.promos[0] !== 'object') {\r\n return [];\r\n }\r\n const values = duplicateValuesByProp(this.promos, 'Id');\r\n return { values };\r\n }\r\n\r\n mapPromos(variant) {\r\n const promoModels = variant.PromotionModels\r\n ? [...variant.PromotionModels]\r\n : [];\r\n if (this.isVariant) {\r\n const exception = variant.ProductException\r\n ? { ...variant.ProductException }\r\n : null;\r\n if (exception && exception.Title) {\r\n promoModels.push({\r\n Id: uniqid.time('', '_exceptionPromo_'),\r\n Name: exception.Title,\r\n Description: exception.Description,\r\n });\r\n }\r\n }\r\n return promoModels || [];\r\n }\r\n\r\n renderAddToCart() {\r\n //console.log('add to cart from FBT Modal');\r\n this.addToCart = new PdpAddToCartFreq(\r\n this.$addtoCartPlaceholder,\r\n this.labels,\r\n this.products,\r\n {\r\n catalogName: this.product.CatalogName,\r\n displayName: this.product.DisplayName,\r\n exceptionAmount: this.product?.ProductException?.DiscountAmount,\r\n exceptionBehavior: this.product?.ProductException\r\n ?.PriceTreatment,\r\n productId: this.product.ProductId,\r\n brand: this.product.Brand,\r\n documentPosition: this.productIndex,\r\n searchQueryUid: this.data.SearchQueryUid,\r\n productName: this.product.Name,\r\n displayName: this.product.DisplayName,\r\n anonymous: !this.data.UserAuthenticated,\r\n sourceName: this.data.SourceName,\r\n permanentid: this.product.PermanentId,\r\n category: this.product.CategoryList,\r\n },\r\n this.data,\r\n this.product\r\n );\r\n //console.log(this.addToCart);\r\n //console.log('FBT modal End ');\r\n }\r\n\r\n renderNextButton() {\r\n if (this.totalProducts != this.productIndex) {\r\n this.$nextProductPlaceholder.show();\r\n } else {\r\n this.$nextProductPlaceholder.remove();\r\n }\r\n if (this.productIndex == 1) {\r\n this.$prevStepControl.hide();\r\n }\r\n }\r\n showNextStep() {\r\n let currentitem = $('[data-region=\"productBundleItem\"]:visible');\r\n currentitem.hide();\r\n currentitem.next('[data-region=\"productBundleItem\"]').show();\r\n let dPrice = this.price.replace(/\\$/g, '');\r\n let indexInData = this.productIndex - 1;\r\n const options = {\r\n VariantId: this.activeProduct.VariantId,\r\n Quantity: this.quantity,\r\n ProductId: this.activeProduct.ProductId,\r\n AutoshipFrequency: 0,\r\n CatalogName: this.product.CatalogName,\r\n ExceptionAmount: this.product?.ProductException?.DiscountAmount,\r\n ExceptionBehavior: null,\r\n Brand: this.product.Brand,\r\n DocumentPosition: this.productIndex,\r\n SearchQueryUid: this.data.SearchQueryUid,\r\n ProductName: this.product.Name,\r\n DisplayName: this.product.DisplayName,\r\n Anonymous: !this.data.UserAuthenticated,\r\n SourceName: this.data.SourceName,\r\n Permanentid: this.product.PermanentId,\r\n Category: this.product.CategoryList,\r\n Price: dPrice,\r\n };\r\n const index = this.products.findIndex((e, i) => i === indexInData);\r\n if (index === -1) {\r\n this.products.push(options);\r\n } else {\r\n this.products[indexInData] = options;\r\n }\r\n //console.log('step products',this.products);\r\n }\r\n showPrevStep() {\r\n let currentitem = $('[data-region=\"productBundleItem\"]:visible');\r\n currentitem.hide();\r\n currentitem.prev('[data-region=\"productBundleItem\"]').show();\r\n }\r\n\r\n renderFrequentlyBoughtTogether() {\r\n this.freqBought = new PdpFrequentlyBoughtTogether(\r\n this.$productBundleRegion,\r\n this.labels,\r\n {\r\n productId: this.product.ProductId,\r\n }\r\n );\r\n }\r\n\r\n /* renderBenefits() {\r\n let header = \"<div class='mt-4 mb-1'><strong>Benefits</strong></div>\";\r\n let showmorebtn = \"<div><button class='underline text-color-vca-blue alt-fancy' data-btn='read-more-benefits'>Read more</button></div>\"\r\n this.$benefits.html(header + '<div class=\"js-benefits-clamp benefits-clamp mb-2\">' + this.activeProduct.Benefits + '</div>' + showmorebtn);\r\n this.showMoreBenefits();\r\n }\r\n\r\n showMoreBenefits() {\r\n let showmorebtn = this.$benefits.find(\"[data-btn='read-more-benefits']\");\r\n let clampWrapper = this.$benefits.find(\".js-benefits-clamp\");\r\n showmorebtn.on('click', function (e) {\r\n e.preventDefault();\r\n if(clampWrapper.hasClass( \"benefits-clamp\" )){\r\n clampWrapper.removeClass('benefits-clamp');\r\n showmorebtn.text('Read less');\r\n }else{\r\n clampWrapper.addClass('benefits-clamp');\r\n showmorebtn.text('Read more');\r\n }\r\n });\r\n } */\r\n\r\n renderLabels() {\r\n this.$priceLabel.html(this.labels.YourPrice);\r\n this.$quantityLabel.html(this.labels.Quantity);\r\n this.$rxLabel.html(this.labels.RxText);\r\n this.$videoLabel.html(this.labels.HowTo);\r\n this.$pageNumber.html(this.productIndex);\r\n this.$pageTotal.html(this.totalProducts);\r\n this.$nextStepLabel.html(this.labels.Comfirm);\r\n this.$navProductsLabel.html(this.labels.Product);\r\n this.$productBunldeTitleLabel.html(this.labels.SelectPackingtoContine);\r\n if (this.totalProducts == this.productIndex) {\r\n this.$productBunldeTitleLabel.text(\r\n this.labels.ConfirmYourselection\r\n );\r\n }\r\n }\r\n\r\n renderQuantitySelector() {\r\n // need to map labels since quantity selector will be used generically around the site\r\n const labels = {\r\n decrement: this.labels.Decrement,\r\n increment: this.labels.Increment,\r\n inputAriaLabel: this.labels.QuantitySelector,\r\n };\r\n\r\n this.quantitySelector = new QuantitySelector(\r\n this.$quantityPlaceholder,\r\n {},\r\n labels\r\n );\r\n\r\n this.quantitySelector.watchValue(value => {\r\n if (this.totalProducts == this.productIndex) {\r\n this.addToCart.setQuantity(value);\r\n this.quantity = value;\r\n } else {\r\n this.quantity = value;\r\n }\r\n });\r\n }\r\n\r\n renderNextOption(index, options = []) {\r\n this.renderSelectorOptions(this.$selectorBoxes.eq(index), options);\r\n\r\n // show the next selector\r\n this.$selectorLabels.eq(index).show();\r\n this.$selectors.eq(index).show();\r\n\r\n // hide any beyond the next one to be selected\r\n this.$selectorLabels.slice(index + 1).hide();\r\n this.$selectors.slice(index + 1).hide();\r\n }\r\n\r\n renderSelectors() {\r\n let selectorHtmlStr = '';\r\n\r\n this.uiSelectorOptions.forEach((option, index) => {\r\n // generate markup string for each selector\r\n const args = {\r\n id: `pdp${option.Name}`,\r\n index,\r\n label: option.DisplayName || option.Name,\r\n name: option.Name,\r\n };\r\n const label = selectLabel(args);\r\n const selector = selectBox(args);\r\n\r\n selectorHtmlStr += label + selector;\r\n });\r\n\r\n this.$selectorPlaceholder.replaceWith($.parseHTML(selectorHtmlStr));\r\n\r\n // assign newly rendered ui elements\r\n this.$selectorBoxes = this.$el.find('[data-control=\"selector\"]');\r\n this.$selectors = this.$el.find('[data-region=\"selector\"]');\r\n this.$selectorLabels = this.$el.find('[data-region=\"selectorLabel\"]');\r\n }\r\n\r\n renderSelectorOptions($selectEl, optionsArr = []) {\r\n let options = selectOption({\r\n disabled: true,\r\n value: '',\r\n name: this.pleaseSelect,\r\n });\r\n\r\n optionsArr.forEach(option => {\r\n options += selectOption({\r\n value: option.FormattedValue || option.Value,\r\n name: option.Value,\r\n });\r\n });\r\n\r\n $selectEl.html($.parseHTML(options));\r\n }\r\n\r\n renderSlider() {\r\n this.slider = new PdpSlider({\r\n $el: this.$sliderPlaceholder,\r\n labels: this.labels,\r\n rx: this.activeProduct.RxRequired,\r\n slides: this.slides,\r\n useTemplate: true,\r\n });\r\n }\r\n\r\n renderImage() {\r\n //console.log(mainImage(this.slides[0]));\r\n this.$sliderPlaceholder.html($.parseHTML(mainImage(this.slides[0])));\r\n }\r\n\r\n renderPromoLegend() {\r\n let promoHtmlStr = [];\r\n if (this.uiPromos.length !== 0) {\r\n this.uiPromos.values.forEach((item, index) => {\r\n const args = {\r\n id: item.Id,\r\n index,\r\n name: item.Name,\r\n desc: item.Description,\r\n iconURL: this.labels.PromoIcon,\r\n };\r\n\r\n const promo = promoLegend(args);\r\n promoHtmlStr += promo;\r\n });\r\n\r\n this.$promoLegend.html($.parseHTML(promoHtmlStr));\r\n\r\n window.VCA.Tooltips.initVCAPromoTooltip();\r\n }\r\n }\r\n\r\n renderStaticRegions() {\r\n this.$productName.append(this.product.DisplayName);\r\n this.$brandName.append(this.product.Brand);\r\n\r\n // this.renderBenefits();\r\n // this.toggleVideo();\r\n }\r\n\r\n renderRadioInputs() {\r\n let isAutoShipOnly = this.activeProduct.AutoShipOnly;\r\n let radioPurchaseElement = document.querySelector(\r\n '.pdp-info__radio.-purchase'\r\n );\r\n let radioSubscribeElement = document.querySelector(\r\n '.pdp-info__radio #purchaseType1'\r\n );\r\n\r\n radioPurchaseElement.style.display = 'block';\r\n\r\n if (isAutoShipOnly) {\r\n radioPurchaseElement.style.display = 'none';\r\n radioSubscribeElement.checked = true;\r\n }\r\n }\r\n\r\n resetSelectors(selectorsArg = this.selectors, nextIndex = 0) {\r\n let selectors = [...selectorsArg];\r\n\r\n for (nextIndex; nextIndex < selectors.length; nextIndex++) {\r\n const filteredProducts = this.filterProducts(\r\n this.variants,\r\n selectors\r\n );\r\n const filteredOptions = this.filterOptions(\r\n nextIndex,\r\n filteredProducts\r\n );\r\n\r\n // automatically select next option if there is only one value\r\n if (filteredOptions.length === 1) {\r\n const [nextKey] = selectors[nextIndex];\r\n const { FormattedValue: nextValue } = filteredOptions[0];\r\n\r\n selectors[nextIndex] = [nextKey, nextValue];\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return selectors.map((selector, index) => {\r\n const [key] = selector;\r\n return index > nextIndex ? [key, ''] : selector;\r\n });\r\n }\r\n\r\n setupAccessibility() {\r\n this.$ariaLive.attr('aria-live', 'polite');\r\n }\r\n\r\n sendProductViewDatalayer() {\r\n productDetailsDatalayer.sendProductDetailView(\r\n this.currencyCode,\r\n this.activeGAProduct\r\n );\r\n }\r\n\r\n setupHistoryState() {\r\n const urlParams = new URLSearchParams(this.activeSelectors);\r\n const queryStr = urlParams.toString();\r\n if (queryStr) {\r\n const url = `${window.location.pathname}?${queryStr}`;\r\n window.history.replaceState(null, '', url);\r\n this.login?.setLink();\r\n }\r\n }\r\n\r\n setupInitialSelectors() {\r\n const initialSelectors = this.getSelectorsFromUrl();\r\n\r\n this.uiSelectorOptions.forEach(option => {\r\n const values = option.Values || [];\r\n if (values.length === 1) {\r\n initialSelectors[option.Name] = values[0].FormattedValue;\r\n }\r\n });\r\n\r\n return initialSelectors;\r\n }\r\n\r\n setupListeners() {\r\n this.$selectorBoxes.on('change', this.onSelectorChange.bind(this));\r\n window.addEventListener('popstate', evt => this.onPopState(evt));\r\n this.$nextStepControl.on('click', this.showNextStep.bind(this));\r\n this.$prevStepControl.on('click', this.showPrevStep.bind(this));\r\n }\r\n\r\n setupSelectors() {\r\n let selectors = this.uiSelectorOptions.map(({ Name: name }) => {\r\n return [name, this.initialSelectors[name] || ''];\r\n });\r\n\r\n const currentIndex = selectors.filter(([, value]) => value).length;\r\n return this.resetSelectors(selectors, currentIndex);\r\n }\r\n\r\n toggleVideo() {\r\n if (this.activeProduct.Video) {\r\n this.$video.show();\r\n this.$videoIframe.attr('src', this.activeProduct.Video);\r\n } else {\r\n this.$video.hide();\r\n }\r\n }\r\n\r\n updateAddToCart() {\r\n this.addToCart?.setVariant({\r\n exceptionAmount: this.activeProduct?.ProductException\r\n ?.DiscountAmount,\r\n exceptionBehavior: this.activeProduct?.ProductException\r\n ?.PriceTreatment,\r\n variantId: this.activeProduct.VariantId ?? null,\r\n });\r\n if (this.isVariant) {\r\n this.$nextStepControl.prop('disabled', false);\r\n } else {\r\n this.$nextStepControl.prop('disabled', true);\r\n }\r\n }\r\n\r\n updatePrescription() {\r\n if (this.activeProduct.RxRequired) {\r\n this.$rx.slideDown('fast');\r\n this.$rxStamp.slideDown('fast');\r\n } else {\r\n this.$rx.slideUp('fast');\r\n this.$rxStamp.slideUp('fast');\r\n }\r\n }\r\n\r\n updateProduct() {\r\n this.filteredProducts = this.filterProducts(\r\n this.variants,\r\n this.selectors\r\n );\r\n }\r\n\r\n updatePromoLegend() {\r\n if (\r\n this.onInit &&\r\n this.isVariant &&\r\n this.activeProduct?.PromotionModels == undefined\r\n ) {\r\n this.$promoLegend.empty();\r\n } else if (\r\n this.onInit &&\r\n this.isVariant &&\r\n this.activeProduct?.PromotionModels.length == 0 &&\r\n (this.onInit &&\r\n this.isVariant &&\r\n this.activeProduct?.ProductException == null)\r\n ) {\r\n this.$promoLegend.empty();\r\n } else if (this.onInit && !this.isVariant) {\r\n this.$promoLegend.empty();\r\n } else {\r\n this.renderPromoLegend();\r\n }\r\n }\r\n\r\n updatePrice() {\r\n this.$price.hide().empty();\r\n this.$listPrice.hide().empty();\r\n this.$discountPrice.hide().empty();\r\n\r\n if (this.isVariant) {\r\n const listPrice = priceString(this.activeProduct.ListPrice);\r\n const exception = this.activeProduct.ProductException;\r\n\r\n if (\r\n exception &&\r\n !exception.IsUserCareClub &&\r\n exception.IsCareClub\r\n ) {\r\n this.$price.show().html(listPrice);\r\n this.price = listPrice;\r\n if (this.totalProducts == this.productIndex) {\r\n this.addToCart.setPrice(listPrice);\r\n }\r\n return;\r\n }\r\n\r\n if (exception && typeof exception.PriceTreatment === 'number') {\r\n const discountPrice = priceString(exception.DiscountAmount);\r\n\r\n if (\r\n exception.PriceTreatment ===\r\n exceptionBehaviorValues.STRIKE_THROUGH\r\n ) {\r\n this.$listPrice.show().html(discountPrice);\r\n this.$discountPrice.show().html(listPrice);\r\n this.price = discountPrice;\r\n if (this.totalProducts == this.productIndex) {\r\n this.addToCart.setPrice(discountPrice);\r\n }\r\n } else {\r\n this.$price.show().html(discountPrice);\r\n this.price = discountPrice;\r\n if (this.totalProducts == this.productIndex) {\r\n this.addToCart.setPrice(discountPrice);\r\n }\r\n }\r\n } else {\r\n this.$price.show().html(listPrice);\r\n this.price = listPrice;\r\n if (this.totalProducts == this.productIndex) {\r\n this.addToCart.setPrice(listPrice);\r\n }\r\n }\r\n } else {\r\n const filteredPrices = this.filteredProducts.map(product => {\r\n //const discountPrice = product.ProductException?.DiscountAmount ?? null;\r\n //return typeof discountPrice === 'number' ? discountPrice : product.ListPrice;\r\n return product.ListPrice;\r\n });\r\n\r\n const priceLow = Math.min(...filteredPrices);\r\n const priceHigh = Math.max(...filteredPrices);\r\n const priceLowFormatted = priceString(priceLow);\r\n const priceHighFormatted = priceString(priceHigh);\r\n\r\n if (priceLow !== priceHigh) {\r\n this.$price\r\n .show()\r\n .html(`${priceLowFormatted} - ${priceHighFormatted}`);\r\n } else {\r\n this.$price.show().html(priceLowFormatted);\r\n }\r\n }\r\n }\r\n\r\n updateRenderedOptions() {\r\n if (\r\n this.activeSelectors &&\r\n Array.isArray(this.activeSelectors) &&\r\n this.activeSelectors.length\r\n ) {\r\n let filteredProducts = [...this.variants];\r\n\r\n this.activeSelectors.forEach((option, index) => {\r\n let selectors = [...this.activeSelectors];\r\n selectors.length = index;\r\n\r\n filteredProducts = this.filterProducts(\r\n filteredProducts,\r\n selectors\r\n );\r\n const options = this.filterOptions(index, filteredProducts);\r\n\r\n this.renderNextOption(index, options);\r\n });\r\n\r\n this.updateSelectorValues();\r\n }\r\n }\r\n\r\n updateState() {\r\n this.updateProduct();\r\n\r\n // update state based off of new active product\r\n this.updatePrescription();\r\n this.updatePrice();\r\n this.updateSelectors();\r\n this.updatePromoLegend();\r\n // this.renderRadioInputs();\r\n this.onInit = true;\r\n\r\n if (this.#cachedProduct.VariantId !== this.activeProduct.VariantId) {\r\n //console.log('slider', this.slides[0]);\r\n if (this.slider) {\r\n this.slider.updateSlides(\r\n this.activeProduct.RxRequired,\r\n this.slides\r\n );\r\n }\r\n // this.$sliderPlaceholder.html($.parseHTML(mainImage(this.slides[0])));\r\n }\r\n }\r\n\r\n updateSelectors(nextActiveIndex = this.activeSelectors.length) {\r\n this.updateRenderedOptions();\r\n\r\n if (!this.isVariant) {\r\n // render options for next active selector\r\n const filteredOptions = this.filterOptions(\r\n nextActiveIndex,\r\n this.filteredProducts\r\n );\r\n\r\n if (filteredOptions.length) {\r\n this.renderNextOption(nextActiveIndex, filteredOptions);\r\n }\r\n }\r\n\r\n this.updateSelectorValues();\r\n }\r\n\r\n updateSelectorValues() {\r\n // set all selectors initial value\r\n this.selectors.forEach((selector, index) => {\r\n const [, value] = selector;\r\n this.$selectorBoxes.eq(index).val(value);\r\n });\r\n }\r\n}\r\n\r\n$(() => {\r\n const el = document.getElementById('pdpSelector');\r\n const dataEl = document.getElementById('pdpSelectorData');\r\n\r\n if (el && dataEl) {\r\n const data = JSON.parse(dataEl.innerHTML);\r\n if (data) {\r\n const $el = $(el);\r\n new PdpSelectorFBT({\r\n $el,\r\n data,\r\n });\r\n }\r\n }\r\n});\r\n","import ReactiveComponent, {\r\n computed,\r\n filter,\r\n watch,\r\n} from '@utils/reactive-component';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport priceString from '@utils/price-string';\r\nimport template from './templates/pdp-freq-bought';\r\nimport { defaults } from './pdp-mappings';\r\nimport cartStore from '@stores/cart/cart-store';\r\nimport relatedProducts from '@api/routes/relatedProducts/getRelatedProducts';\r\nimport PdpSelectorFBT from './pdp-freq-modal-item';\r\n\r\nconst parsedTemplate = $.parseHTML(template);\r\n\r\nconst CLASS_NAME_DISABLED = 'disabled';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n purchaseType: null,\r\n quantity: 1,\r\n variantId: 0,\r\n};\r\n\r\nexport default class PdpFrequentlyBoughtTogether extends ReactiveComponent {\r\n constructor($el, labels, options) {\r\n super();\r\n\r\n options = {\r\n ...DEFAULT_OPTIONS,\r\n ...options,\r\n };\r\n\r\n $el.replaceWith(parsedTemplate);\r\n this.$el = $(parsedTemplate);\r\n\r\n this.$currentItemLabel = this.$el.find('[data-label=\"currentItem\"]');\r\n this.$estTotalLabel = this.$el.find('[data-label=\"estTotal\"]');\r\n this.$FrequentlyBoughtTogether = this.$el.find(\r\n '[data-label=\"FrequentlyBoughtTogether\"]'\r\n );\r\n\r\n this.$addItemCartLabel = this.$el.find('[data-label=\"AddItemsToCart\"]');\r\n this.$productBundle = this.$el.find('[data-region=\"productBundle\"]');\r\n this.$productBundleSpinner = this.$el.find(\r\n '[data-region=\"productBundleSpinner\"]'\r\n );\r\n this.$bundleProducts = this.$el.find('[data-region=\"bundleProducts\"]');\r\n\r\n this.relatedProductsItems = [];\r\n this.checkedItemsData = [];\r\n this.productItem = [];\r\n this.products = [];\r\n\r\n this.productId = options.productId;\r\n\r\n this.labels = {\r\n ...defaults,\r\n ...labels,\r\n };\r\n\r\n this.reactive({});\r\n\r\n this.init();\r\n }\r\n\r\n [computed]() {\r\n return {\r\n enabled() {\r\n return;\r\n },\r\n };\r\n }\r\n\r\n [filter]() {\r\n return {\r\n radioValue(newValue) {\r\n return;\r\n },\r\n };\r\n }\r\n\r\n [watch]() {\r\n return {};\r\n }\r\n\r\n init() {\r\n this.renderLabels();\r\n this.renderProductBundle();\r\n this.setupListeners();\r\n }\r\n\r\n updateSelectorBundle(evt) {\r\n $('#product-bundle__wrapper').css('pointer-events', 'none');\r\n var $target = $(evt.currentTarget);\r\n var productId = $target.data('id');\r\n var item = $('div[data-id=\"' + productId + '\"]');\r\n var input = $('input[data-id=\"' + productId + '\"]');\r\n if (evt.currentTarget.type == 'checkbox') {\r\n if (evt.currentTarget.checked == true) {\r\n item.addClass('product-bundle__item__selected');\r\n } else {\r\n item.removeClass('product-bundle__item__selected');\r\n }\r\n } else {\r\n if (item.hasClass('product-bundle__item__selected')) {\r\n item.removeClass('product-bundle__item__selected');\r\n input.attr('checked', false).prop('checked', false);\r\n } else {\r\n item.addClass('product-bundle__item__selected');\r\n input.attr('checked', true).prop('checked', true);\r\n }\r\n }\r\n this.updateAddToCartBundle();\r\n this.updateEstimatedPrice();\r\n $('#product-bundle__wrapper').css('pointer-events', 'auto');\r\n }\r\n\r\n updateAddToCartBundle() {\r\n var totalBoxesCheck = $('[data-control=\"bundleCheckbox\"]').filter(\r\n ':checked'\r\n ).length;\r\n if (totalBoxesCheck < 1) {\r\n this.$addItemCartLabel.addClass('disabled');\r\n } else {\r\n this.$addItemCartLabel.removeClass('disabled');\r\n }\r\n this.$addItemCartLabel.html(this.labels.ChooseOptions);\r\n }\r\n\r\n updateEstimatedPrice() {\r\n var totalBoxesCheck = $('.product-bundle__item__list input:checked');\r\n var sumLow = 0;\r\n var sumHigh = 0;\r\n let total = '';\r\n $.each(totalBoxesCheck, function(i, item) {\r\n sumLow = sumLow + parseFloat($(item).attr('data-lowp'));\r\n sumHigh = sumHigh + parseFloat($(item).attr('data-highp'));\r\n });\r\n if (sumLow != sumHigh) {\r\n total = '$' + sumLow.toFixed(2) + ' - $' + sumHigh.toFixed(2);\r\n } else {\r\n total = '$' + sumHigh.toFixed(2);\r\n }\r\n $('.product-bundle__total__amount').text(total);\r\n }\r\n\r\n async renderProductBundle() {\r\n this.$productBundle.hide();\r\n const { success, data, error } = await relatedProducts.get(\r\n this.productId\r\n );\r\n if (!success) {\r\n console.log('relatedProducts', error);\r\n return;\r\n }\r\n this.relatedProductsItems = data || [];\r\n if (data == null || data.length < 1) {\r\n return;\r\n }\r\n $.each(this.relatedProductsItems, function(i, item) {\r\n this.anonymous = !item.UserAuthenticated;\r\n this.searchQueryUid = item.SearchQueryUid;\r\n this.sourceName = item.SourceName;\r\n let rxFlag = '';\r\n let currentClass = 'product-bundle__item__current';\r\n let currentlabel =\r\n '<div class=\"product-bundle__item__current__flag\" data-label=\"currentItem\">Current Item</div>';\r\n if (item == null || item == undefined) {\r\n return;\r\n }\r\n\r\n if (item.Product.RxRequired) {\r\n rxFlag =\r\n '<div class=\"rxflag\"><img class=\"icon--sm\" src=\"/images-2/prescription.svg\" alt=\"prescription icon\"></div>';\r\n }\r\n\r\n const filteredPrices = item.ChildVariants.map(child => {\r\n const discountPrice =\r\n child.ProductException?.DiscountAmount ?? null;\r\n return typeof discountPrice === 'number'\r\n ? discountPrice\r\n : child.ListPrice;\r\n });\r\n\r\n const priceLow = Math.min(...filteredPrices);\r\n const priceHigh = Math.max(...filteredPrices);\r\n const priceLowFormatted = priceString(priceLow);\r\n const priceHighFormatted = priceString(priceHigh);\r\n let priceDisplay = '';\r\n\r\n if (priceLow !== priceHigh) {\r\n priceDisplay = priceLowFormatted + ' - ' + priceHighFormatted;\r\n } else {\r\n priceDisplay = priceLowFormatted;\r\n }\r\n\r\n let currentDisplayName =\r\n '<strong data-label=\"currentItem\">Current Item</strong> <span>' +\r\n item.Product.DisplayName +\r\n ' <strong><strong>Adjust Price in Cart';\r\n\r\n if (i > 0) {\r\n currentClass = '';\r\n currentlabel = '';\r\n currentDisplayName =\r\n item.Product.DisplayName + ' <strong>' + priceDisplay;\r\n }\r\n\r\n document.getElementById('product-bundle__imgitems').innerHTML +=\r\n '<div class=\"product-bundle__current-item\"><div data-control=\"productBundleItem\" class=\"product-bundle__item product-bundle__item__selected ' +\r\n currentClass +\r\n '\" data-id=\"' +\r\n item.Product.ProductId +\r\n '\">' +\r\n '<img src=\"' +\r\n item.Product.Images[0].ConstrainedUrl +\r\n '\" alt=\" ' +\r\n item.Product.Images[0].Alt +\r\n '\"/>' +\r\n rxFlag +\r\n '</div>' +\r\n currentlabel +\r\n '</div> </div>';\r\n\r\n document.getElementById('product-bundle__list').innerHTML +=\r\n '<div class=\"product-bundle__item__list\"><div class=\"form-checkbox \"><div class=\"form-checkbox__content\">' +\r\n '<input data-control=\"bundleCheckbox\" class=\"form-check-input custom-control-input\" name=\"' +\r\n item.Product.ProductId +\r\n '\" type=\"checkbox\" id=\"' +\r\n item.Product.ProductId +\r\n '\"data-lowp=\"' +\r\n priceLow +\r\n '\" data-highp=\"' +\r\n priceHigh +\r\n '\" data-id=\"' +\r\n item.Product.ProductId +\r\n '\" checked=\"\">' +\r\n '<label class=\"form-check-label\" for=\"' +\r\n item.Product.ProductId +\r\n '\">' +\r\n currentDisplayName +\r\n '</strong></label>';\r\n ('</div></div></div>');\r\n });\r\n\r\n $('[data-control=\"bundleCheckbox\"]').on(\r\n 'change',\r\n this.updateSelectorBundle.bind(this)\r\n );\r\n $('[data-control=\"productBundleItem\"]').on(\r\n 'click',\r\n this.updateSelectorBundle.bind(this)\r\n );\r\n\r\n this.updateEstimatedPrice();\r\n this.updateAddToCartBundle();\r\n this.$productBundle.show();\r\n }\r\n\r\n createBundleModal() {\r\n let count = 1;\r\n\r\n let checkedItems = [];\r\n $('.product-bundle__item__list input:checked').each(function() {\r\n checkedItems.push($(this).attr('data-id'));\r\n });\r\n let totalProducts = checkedItems.length;\r\n\r\n this.checkedItemsData = this.relatedProductsItems.filter(function(n) {\r\n if (n != null) {\r\n return checkedItems.indexOf(n.Product.ProductId) !== -1;\r\n }\r\n });\r\n\r\n let addToCartModalTextStg = 'Add (#) items to Cart';\r\n let addToCartModalBtnText = addToCartModalTextStg.replace(\r\n /#/,\r\n totalProducts\r\n );\r\n $('#product-bundle-modal-content').empty();\r\n\r\n const fragment = document.createDocumentFragment();\r\n this.checkedItemsData.forEach((product, i) => {\r\n // console.log('product', product);\r\n const component = new PdpSelectorFBT(\r\n null,\r\n product,\r\n this.labels,\r\n totalProducts,\r\n i + 1,\r\n this.products,\r\n {\r\n anonymous: !product.UserAuthenticated,\r\n searchQueryUid: product.SearchQueryUid,\r\n sourceName: product.SourceName,\r\n }\r\n );\r\n\r\n fragment.appendChild(component.render()?.get(0));\r\n });\r\n this.products = [];\r\n // console.log('fragment', fragment);\r\n this.$bundleProducts.html(fragment);\r\n\r\n this.$productBundleSpinner.hide();\r\n $('#bundle-modal').modal('show');\r\n\r\n $('[data-control=\"bundleSelector\"]').on(\r\n 'change',\r\n this.updateOnSizeChange.bind(this)\r\n );\r\n }\r\n\r\n resetSelectors(selectorsArg = this.selectors, nextIndex = 0) {\r\n let selectors = [...selectorsArg];\r\n\r\n for (nextIndex; nextIndex < selectors.length; nextIndex++) {\r\n const filteredProducts = this.filterProducts(\r\n this.variants,\r\n selectors\r\n );\r\n const filteredOptions = this.filterOptions(\r\n nextIndex,\r\n filteredProducts\r\n );\r\n\r\n // automatically select next option if there is only one value\r\n if (filteredOptions.length === 1) {\r\n const [nextKey] = selectors[nextIndex];\r\n const { FormattedValue: nextValue } = filteredOptions[0];\r\n\r\n selectors[nextIndex] = [nextKey, nextValue];\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return selectors.map((selector, index) => {\r\n const [key] = selector;\r\n return index > nextIndex ? [key, ''] : selector;\r\n });\r\n }\r\n\r\n updateOnSizeChange(selector) {\r\n this.$productBundleSpinner.show();\r\n $('.product-bundle-modal-item').addClass('-loading');\r\n\r\n const $target = $(evt.target);\r\n const currentIndex = $target.data('index');\r\n const key = $target.attr('name');\r\n const value = $target.val();\r\n\r\n let selectors = this.selectors.map((selector, index) => {\r\n const [key] = selector;\r\n return index > currentIndex ? [key, ''] : selector;\r\n });\r\n\r\n selectors[currentIndex] = [key, value];\r\n\r\n this.resetSelectors(selectors, currentIndex + 1);\r\n\r\n // console.log(selector);\r\n // console.log(selector.target.value);\r\n\r\n let selectedValue = selector.target.value;\r\n let productItem = $(selector.target).closest(\r\n '.product-bundle-modal__item__attrs'\r\n );\r\n let parentDiv = $(selector.target).closest(\r\n '.product-bundle-modal-item'\r\n );\r\n let newOptions = '<option value=\"\">Please Select Option</option>';\r\n let newVariants = [];\r\n\r\n let itemID = $(selector.target)\r\n .closest('.product-bundle-modal-item')\r\n .attr('data-item');\r\n\r\n newVariants = this.relatedProductsItems.filter(function(n) {\r\n return ProductId.indexOf(n.Product.ProductId) !== -1;\r\n });\r\n\r\n $.each(newVariants.productData.variants, function(i, item) {\r\n //console.log('item');\r\n //console.log(item.selectors.StrengthSize)\r\n //console.log(selectedValue)\r\n //console.log('item VariantId');\r\n //console.log(item.VariantId);\r\n if (item.selectors.StrengthSize === selectedValue) {\r\n let selectOptions = newVariants.variantSelectorOptions[1];\r\n let packaging = item.selectors.Packaging;\r\n var displayName;\r\n\r\n $.each(selectOptions, function(selectItem) {\r\n if (this.value == packaging) {\r\n displayName = this.displayName;\r\n }\r\n });\r\n\r\n newOptions +=\r\n '<option data-id=\"' +\r\n packaging +\r\n '\" value=\"' +\r\n item.VariantId +\r\n '\">' +\r\n displayName +\r\n '</option>';\r\n }\r\n });\r\n\r\n productItem\r\n .find('.pbm-pack-selector')\r\n .empty()\r\n .append(newOptions);\r\n productItem.find('.pbm-ss-item').removeClass('active');\r\n productItem\r\n .find('.pbm-pack-item')\r\n .removeClass('disabled')\r\n .addClass('active');\r\n\r\n endBundleModalSpinner();\r\n }\r\n\r\n renderLabels() {\r\n this.$currentItemLabel.html(this.labels.CurrentItem);\r\n this.$estTotalLabel.html(this.labels.EstTotalPrice);\r\n this.$addItemCartLabel.html(this.labels.AddItemsToCart);\r\n this.$FrequentlyBoughtTogether.html(\r\n this.labels.FrequentlyBoughtTogether\r\n );\r\n }\r\n\r\n setupListeners() {\r\n this.$addItemCartLabel.on('click', this.createBundleModal.bind(this));\r\n }\r\n\r\n updateState() {}\r\n\r\n priceText(ProductId) {\r\n let filteredPrices = [];\r\n\r\n const productV = this.relatedProductsItems.filter(function(n) {\r\n return ProductId.indexOf(n.Product.ProductId) !== -1;\r\n });\r\n\r\n filteredPrices = productV[0].ChildVariants.map(product => {\r\n const discountPrice =\r\n product.ProductException?.DiscountAmount ?? null;\r\n return typeof discountPrice === 'number'\r\n ? discountPrice\r\n : product.ListPrice;\r\n });\r\n\r\n const priceLow = Math.min(...filteredPrices);\r\n const priceHigh = Math.max(...filteredPrices);\r\n const priceLowFormatted = priceString(priceLow);\r\n const priceHighFormatted = priceString(priceHigh);\r\n let priceDisplay = '';\r\n\r\n if (priceLow !== priceHigh) {\r\n priceDisplay = priceLowFormatted + ' - ' + priceHighFormatted;\r\n } else {\r\n priceDisplay = priceLowFormatted;\r\n }\r\n return priceDisplay;\r\n }\r\n}\r\n","import template from './templates/pdp-info-tabs';\r\n\r\nconst parsedTemplate = $.parseHTML(template);\r\n\r\nexport default class PdpInfoTabs {\r\n constructor({ $el, data, labels } = { data: {}, labels: {} }) {\r\n $el.replaceWith(parsedTemplate);\r\n \r\n this.$el = $(parsedTemplate);\r\n\r\n // non-dynamic labels regions\r\n this.$informationLabel = this.$el.find('[data-label=\"information\"]');\r\n this.$ingredientsLabel = this.$el.find('[data-label=\"ingredients\"]');\r\n this.$speciesLabel = this.$el.find('[data-label=\"species\"]');\r\n this.$usageLabel = this.$el.find('[data-label=\"usage\"]');\r\n\r\n // dynamic data regions\r\n this.$information = this.$el.find('[data-region=\"information\"]');\r\n this.$informationContainer = this.$el.find('[data-region=\"informationContainer\"]');\r\n this.$ingredients = this.$el.find('[data-region=\"ingredients\"]');\r\n this.$ingredientsContainer = this.$el.find('[data-region=\"ingredientsContainer\"]');\r\n this.$species = this.$el.find('[data-region=\"species\"]');\r\n this.$speciesContainer = this.$el.find('[data-region=\"speciesContainer\"]');\r\n this.$usage = this.$el.find('[data-region=\"usage\"]');\r\n this.$usageContainer = this.$el.find('[data-region=\"usageContainer\"]');\r\n\r\n // ui controls\r\n this.$informationCtrl = this.$el.find('[data-control=\"information\"]');\r\n this.$ingredientsCtrl = this.$el.find('[data-control=\"ingredients\"]');\r\n this.$speciesCtrl = this.$el.find('[data-control=\"species\"]');\r\n this.$usageCtrl = this.$el.find('[data-control=\"usage\"]');\r\n \r\n this.productInformation = '';\r\n this.ingredients = '';\r\n this.species = '';\r\n this.usage = '';\r\n\r\n this.isHidden = false;\r\n\r\n this.labels = labels;\r\n\r\n this.setData(data);\r\n\r\n this.init();\r\n }\r\n\r\n hideEmptySections() {\r\n if(this.isHidden) {\r\n this.$el.hide();\r\n return;\r\n }\r\n\r\n this.$informationContainer.show();\r\n this.$ingredientsContainer.show();\r\n this.$speciesContainer.show();\r\n this.$usageContainer.show();\r\n\r\n if(!this.productInformation) {\r\n this.$informationContainer.hide();\r\n }\r\n\r\n if(!this.ingredients) {\r\n this.$ingredientsContainer.hide();\r\n }\r\n\r\n if(!this.species) {\r\n this.$speciesContainer.hide();\r\n } \r\n\r\n if(!this.usage) {\r\n this.$usageContainer.hide();\r\n }\r\n\r\n const $first = [\r\n this.$informationContainer,\r\n this.$ingredientsContainer,\r\n this.$speciesContainer,\r\n this.$usageContainer\r\n ].find($container => $container.is(':visible'));\r\n\r\n this.showSection($first);\r\n }\r\n\r\n init() {\r\n this.hideEmptySections();\r\n this.renderLabels();\r\n this.renderRegions();\r\n }\r\n\r\n renderLabels() {\r\n this.$informationLabel.html(this.labels.ProductInformation);\r\n this.$ingredientsLabel.html(this.labels.ActiveIngredients);\r\n this.$speciesLabel.html(this.labels.DevelopedFor);\r\n this.$usageLabel.html(this.labels.UsageGuidelines);\r\n }\r\n\r\n renderRegions() {\r\n this.$information.html(this.productInformation)\r\n this.$ingredients.html(this.ingredients);\r\n this.$species.html(this.species);\r\n this.$usage.html(this.usage);\r\n }\r\n\r\n setData(data) {\r\n this.productInformation = data.productInformation;\r\n this.ingredients = data.ingredients;\r\n this.species = data.species;\r\n this.usage = data.usage;\r\n\r\n this.isHidden = Object.values(data).every(value => !value);\r\n }\r\n\r\n showSection($container) {\r\n $container.addClass('-first');\r\n\r\n $container.each((i, el) => {\r\n const ctrl = el.querySelector('[data-control]');\r\n const type = ctrl?.dataset.toggle;\r\n\r\n if(type === 'tab') {\r\n $(ctrl).tab('show');\r\n } else if (type === 'collapse') {\r\n const $target = $(ctrl.dataset.target);\r\n $target.collapse('show');\r\n }\r\n });\r\n }\r\n\r\n update(data) {\r\n this.setData(data);\r\n this.hideEmptySections();\r\n this.renderRegions();\r\n }\r\n}\r\n","import template from './templates/pdp-login';\r\nimport { redirectParam } from '@utils/login-redirect';\r\n\r\nconst parsedTemplate = $.parseHTML(template);\r\n\r\nexport default class PdpLogin {\r\n constructor($el, labels = {}) {\r\n $el.replaceWith(parsedTemplate);\r\n\r\n this.$el = $(parsedTemplate);\r\n\r\n // non-dynamic label regions\r\n this.$login = this.$el.find('[data-label=\"login\"]');\r\n\r\n // dynamic data regions\r\n this.$description = this.$el.find('[data-region=\"description\"]');\r\n\r\n this.linkText = labels.Login;\r\n this.linkUrl = labels.LoginLink;\r\n this.description = labels.LoginDescription;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.renderLogin();\r\n this.renderDescription();\r\n }\r\n\r\n renderDescription() {\r\n if(this.description) {\r\n this.$description.html(this.description);\r\n } else {\r\n this.$description.hide();\r\n }\r\n }\r\n\r\n renderLogin() {\r\n this.$login.html(this.linkText);\r\n this.setLink();\r\n }\r\n\r\n setLink() {\r\n if(this.linkUrl) {\r\n const redirect = window.location.pathname;\r\n this.$login.attr('href', `${this.linkUrl}?${redirectParam(redirect)}`);\r\n //let testurl = `${this.linkUrl}?${redirectParam(redirect)}`;\r\n //console.log(testurl);\r\n }\r\n }\r\n}\r\n","const defaults = {\r\n labels: {\r\n ActiveIngredients: 'Active Ingredients',\r\n AddToCart: 'Add To Cart',\r\n LoginLink: '/login',\r\n LoginPriceTitle: 'Log In for Pricing',\r\n LoginPriceDescription:\r\n 'You must be logged in to view pricing on this item.',\r\n By: 'By',\r\n Decrement: 'Decrement',\r\n DevelopedFor: 'Developed For',\r\n FavoriteSrText: 'Add to Favorites',\r\n HowTo: 'How-to',\r\n Increment: 'Increment',\r\n LoaderSrText: 'Loading...',\r\n LoginDescription: 'Lorem ipsum dolor sit amet.',\r\n Login: 'Log In',\r\n OneTimePurchase: 'One-time Purchase',\r\n PleaseSelect: 'Please Select',\r\n ProductInformation: 'Product Information',\r\n Quantity: 'Quantity',\r\n QuantitySelector: 'Quantity selector',\r\n RxText:\r\n '<strong>*Prescription Required:</strong> Vetsource, our pharmacy provider may need to contract your veterinary hospital for prescription verification.',\r\n Save: 'Save',\r\n Subscribe: 'Subscribe & Never Forget',\r\n SuccessMessage: '{0} was added to your cart',\r\n UsageGuidelines: 'Usage Guidelines',\r\n YourPrice: 'Your Price',\r\n ZoomSrText: 'Zoom in image',\r\n ChooseOptions: 'Choose Options',\r\n },\r\n};\r\n\r\nexport { defaults };\r\n","import uniqid from 'uniqid';\r\nimport ReactiveComponent, { computed, watch } from '@utils/reactive-component';\r\nimport priceString from '@utils/price-string';\r\nimport { duplicateValuesByProp } from '@utils/filters';\r\nimport { redirectParam } from '@utils/login-redirect';\r\nimport template, {\r\n selectBox,\r\n selectLabel,\r\n selectOption,\r\n promoLegend,\r\n} from './templates/pdp-quickshop';\r\nimport PdpAddToCart from './pdp-add-to-cart';\r\nimport PdpLogin from './pdp-login';\r\nimport AjaxLoader from '../ajax-loader/ajax-loader';\r\nimport PdpSlider from './pdp-slider';\r\nimport QuantitySelector from '../quantity-selector/quantity-selector';\r\nimport { defaults } from './pdp-mappings';\r\nimport { exceptionBehaviorValues } from '@stores/cart/cart-store';\r\nimport * as productDatalayer from '@datalayer/components/product-datalayer';\r\nimport * as productDetailsDatalayer from '@datalayer/components/product-details-datalayer';\r\nimport catalogProduct from '@api/routes/quickview/quickview';\r\n\r\n/* const mapPromos = (variant) => {\r\n const promoModels = variant.PromotionModels ? [ ...variant.PromotionModels ] : [];\r\n const exception = variant.ProductException ? { ...variant.ProductException } : null;\r\n\r\n if(exception && exception.Title) {\r\n promoModels.push({\r\n Id: uniqid.time('', '_exceptionPromo_'),\r\n Name: exception.Title,\r\n Description: exception.Description\r\n });\r\n }\r\n\r\n return promoModels || [];\r\n}; */\r\n\r\nclass PdpSelector extends ReactiveComponent {\r\n #cachedProduct = {};\r\n #isPopState = false;\r\n\r\n constructor({ $el, dataL, data }) {\r\n super();\r\n\r\n const parsed = $.parseHTML(template);\r\n $el.append(parsed);\r\n\r\n this.$el = $el;\r\n\r\n // non-dynamic label regions\r\n this.$priceLabel = this.$el.find('[data-label=\"price\"]');\r\n this.$quantityLabel = this.$el.find('[data-label=\"quantity\"]');\r\n this.$rxLabel = this.$el.find('[data-label=\"prescription\"]');\r\n this.$videoLabel = this.$el.find('[data-label=\"video\"]');\r\n\r\n // placeholders for other components\r\n this.$addtoCartPlaceholder = this.$el.find('[data-placeholder=\"cart\"]');\r\n this.$infoTabsPlaceholder = this.$el.find(\r\n '[data-placeholder=\"infoTabs\"]'\r\n );\r\n this.$loginPlaceholder = this.$el.find('[data-placeholder=\"login\"]');\r\n this.$loginPricePlaceholder = this.$el.find(\r\n '[data-placeholder=\"loginPrice\"]'\r\n );\r\n this.$quantityPlaceholder = this.$el.find(\r\n '[data-placeholder=\"quantity\"]'\r\n );\r\n this.$sliderPlaceholder = this.$el.find('[data-placeholder=\"slider\"]');\r\n this.$selectorPlaceholder = this.$el.find(\r\n '[data-placeholder=\"selectors\"]'\r\n );\r\n\r\n // dynamic data regions\r\n this.$benefits = this.$el.find('[data-region=\"benefits\"]');\r\n this.$brandName = this.$el.find('[data-region=\"brandName\"]');\r\n this.$price = this.$el.find('[data-region=\"price\"]');\r\n this.$loginpriceurl = this.$el.find('[data-label=\"loginpriceurl\"]');\r\n this.$productName = this.$el.find('[data-region=\"productName\"]');\r\n this.$rx = this.$el.find('[data-region=\"prescription\"]');\r\n this.$rxStamp = this.$el.find('[data-region=\"prescriptionStamp\"]');\r\n this.$discountPrice = this.$el.find('[data-region=\"discountPrice\"]');\r\n this.$listPrice = this.$el.find('[data-region=\"listPrice\"]');\r\n this.$video = this.$el.find('[data-region=\"video\"]');\r\n this.$videoIframe = this.$el.find('[data-region=\"videoIframe\"]');\r\n this.$promoLegend = this.$el.find('[data-placeholder=\"promoLegend\"]');\r\n\r\n this.$loaderPlaceholder = this.$el.find('[data-placeholder=\"loader\"]');\r\n\r\n this.loader = null;\r\n\r\n // deferred dynamic data regions\r\n this.$selectorLabels = null; // assigned after selectors are rendered\r\n this.$selectors = null; // assigned after selectors are rendered\r\n\r\n // accessibility regions\r\n this.$ariaLive = this.$el.find('[data-a11y=\"ariaLive\"]');\r\n\r\n // ui controls\r\n this.$quantityControl = this.$el.find('[data-control=\"quantity\"]');\r\n this.$selectorBoxes = null; // assigned after selectors are rendered\r\n\r\n // ui components\r\n this.addToCart = null;\r\n this.quantitySelector = null;\r\n this.login = null;\r\n this.slider = null;\r\n this.tabs = null;\r\n\r\n // merge data from backend w/ fe defaults so there is always a value\r\n this.labels = dataL.Labels\r\n ? {\r\n ...defaults.labels,\r\n ...dataL.Labels,\r\n }\r\n : defaults.labels;\r\n\r\n // labels\r\n this.pleaseSelect = this.labels.PleaseSelect;\r\n this.loginurl = this.labels.LoginLink;\r\n // data points used for selector logic\r\n this.isAuthenticated = data?.UserAuthenticated || false;\r\n this.product = data?.Product || {};\r\n this.variants = data?.ChildVariants || [];\r\n this.selectorOptions = data?.VariantSelectorOptions || [];\r\n\r\n // filter out duplicate select values\r\n this.uiSelectorOptions = this.removeDuplicateSelectorValues();\r\n\r\n // setup pre-selected selectors\r\n this.initialSelectors = this.setupInitialSelectors();\r\n\r\n this.currencyCode = this.product.CurrencyCode || 'USD'; // todo: BE to add currency code to data\r\n\r\n // state props\r\n this.reactive({\r\n /**\r\n * matrix of key/value pairs representing active selectors\r\n * - key is the selector property string\r\n * - value is the selector value string\r\n * @type {Array<Array<string>>}\r\n */\r\n selectors: this.setupSelectors(),\r\n /**\r\n * array of possible variants based on active selectors\r\n * @type {Array<Object<string,any>>}\r\n */\r\n filteredProducts: this.variants,\r\n });\r\n\r\n // filter out duplicate promos for legend\r\n this.promos = this.variants.map(this.mapPromos, this).flat() || [];\r\n this.uiPromos = this.removeDuplicatePromoValues();\r\n\r\n this.init();\r\n }\r\n\r\n [computed]() {\r\n return {\r\n activeProduct() {\r\n return this.isVariant ? this.filteredProducts[0] : this.product;\r\n },\r\n activeGAProduct() {\r\n const exceptionBehavior =\r\n this.activeProduct?.ProductException?.PriceTreatment ??\r\n exceptionBehaviorValues.NO_EXCEPTION;\r\n\r\n return productDatalayer.buildProduct({\r\n id: this.activeProduct.ProductId,\r\n variantId: this.activeProduct.VariantId,\r\n name: this.activeProduct.Name,\r\n brand: this.activeProduct.Brand,\r\n category: this.product.CategoryList,\r\n price: this.isVariant\r\n ? this.activeProduct.ListPrice\r\n : undefined,\r\n discount:\r\n exceptionBehavior !==\r\n exceptionBehaviorValues.NO_EXCEPTION,\r\n rxRequired: this.activeProduct.RxRequired,\r\n });\r\n },\r\n activeSelectors() {\r\n return this.selectors.filter(([, value]) => value);\r\n },\r\n isVariant() {\r\n return this.selectors.length === this.activeSelectors.length;\r\n },\r\n slides() {\r\n return this.activeProduct.Images?.map(image => ({\r\n url: image.Url || image.ConstrainedUrl,\r\n thumbnail: image.ConstrainedUrl || image.Url,\r\n alt: image.Alt || this.product.DisplayName,\r\n }));\r\n },\r\n };\r\n }\r\n\r\n [watch]() {\r\n return {\r\n isVariant() {\r\n if (\r\n this.#cachedProduct.VariantId !==\r\n this.activeProduct.VariantId\r\n ) {\r\n this.sendProductViewDatalayer();\r\n }\r\n\r\n this.tabs?.update({\r\n productInformation: this.activeProduct.ProductInformation,\r\n ingredients: this.activeProduct.Ingredients,\r\n species: this.activeProduct.ForSpecies,\r\n usage: this.activeProduct.Usage,\r\n });\r\n\r\n this.toggleVideo();\r\n },\r\n filteredProducts() {\r\n this.promos =\r\n this.filteredProducts.map(this.mapPromos, this).flat() ||\r\n [];\r\n this.uiPromos = this.removeDuplicatePromoValues();\r\n },\r\n selectors() {\r\n this.updateState();\r\n this.isPopState();\r\n },\r\n };\r\n }\r\n\r\n init() {\r\n // render all markup that will never be removed from the DOM\r\n this.renderLoader();\r\n this.renderLabels();\r\n this.renderStaticRegions();\r\n this.renderAddToCart();\r\n this.renderQuantitySelector();\r\n this.renderSelectors();\r\n this.updateRenderedOptions();\r\n this.resetRadioInputs();\r\n this.renderSlider();\r\n this.renderPromoLegend();\r\n\r\n // setup initial accessibility state\r\n this.setupAccessibility();\r\n\r\n // setup ui state\r\n this.setupListeners();\r\n\r\n // setup popstate history state object\r\n this.setupHistoryState();\r\n\r\n // update state based off of any initial selectors\r\n this.updateState();\r\n\r\n this.sendProductViewDatalayer();\r\n }\r\n\r\n filterProducts(products = this.variants, selectors = this.selectors) {\r\n if (!products.length || !selectors.length) {\r\n return products;\r\n }\r\n\r\n let filteredProducts = [...products];\r\n let index = 0;\r\n let value = '';\r\n\r\n do {\r\n const [selectorProp, selectorFormattedValue] = selectors[index];\r\n // get the \"Value\" prop which will be the true value to compare to\r\n value =\r\n this.uiSelectorOptions[index]?.Values.find(\r\n option => option.FormattedValue === selectorFormattedValue\r\n )?.Value || null;\r\n if (value) {\r\n filteredProducts = filteredProducts.filter(\r\n product => product[selectorProp] === value\r\n );\r\n }\r\n index++;\r\n } while (\r\n value &&\r\n filteredProducts.length > 1 &&\r\n index < selectors.length\r\n );\r\n return filteredProducts;\r\n }\r\n\r\n filterOptions(index, filteredProducts = this.filteredProducts) {\r\n index = Number(index);\r\n if (\r\n isNaN(index) ||\r\n !filteredProducts ||\r\n !Array.isArray(filteredProducts)\r\n ) {\r\n return [];\r\n }\r\n\r\n return (\r\n this.uiSelectorOptions[index]?.Values.filter(option => {\r\n const selectorProp = this.uiSelectorOptions[index].Name;\r\n return filteredProducts.find(\r\n product => product[selectorProp] === option.Value\r\n );\r\n }) || []\r\n );\r\n }\r\n\r\n getSelectorsFromUrl() {\r\n const selectors = {};\r\n const urlParams = new URLSearchParams(window.location.search);\r\n\r\n /* for (const selector of this.uiSelectorOptions) {\r\n const key = selector.Name;\r\n const value = urlParams.get(key);\r\n const option = selector.Values?.find((option) => option.FormattedValue === value);\r\n\r\n if(option) {\r\n selectors[key] = value;\r\n } else {\r\n break;\r\n }\r\n } */\r\n\r\n return selectors;\r\n }\r\n\r\n onPopState() {\r\n this.#isPopState = true;\r\n\r\n this.initialSelectors = this.getSelectorsFromUrl();\r\n this.selectors = this.setupSelectors();\r\n\r\n if (this.isVariant) {\r\n this.updateRenderedOptions();\r\n }\r\n\r\n this.#isPopState = false;\r\n }\r\n\r\n onSelectorChange(evt) {\r\n const $target = $(evt.target);\r\n const currentIndex = $target.data('index');\r\n const key = $target.attr('name');\r\n const value = $target.val();\r\n\r\n this.#cachedProduct = this.activeProduct;\r\n\r\n let selectors = this.selectors.map((selector, index) => {\r\n const [key] = selector;\r\n return index > currentIndex ? [key, ''] : selector;\r\n });\r\n\r\n selectors[currentIndex] = [key, value];\r\n\r\n this.selectors = this.resetSelectors(selectors, currentIndex + 1);\r\n }\r\n\r\n isPopState() {\r\n if (!this.#isPopState) {\r\n const urlParams = new URLSearchParams(this.activeSelectors);\r\n const queryStr = urlParams.toString();\r\n const url = `${window.location.pathname}?${queryStr}`;\r\n //window.history.pushState(null, '', url);\r\n this.login?.setLink();\r\n this.setLoginLink();\r\n }\r\n }\r\n\r\n removeDuplicateSelectorValues() {\r\n return this.selectorOptions.map(option => {\r\n const values = duplicateValuesByProp(option.Values, 'Value');\r\n values.sort((first, second) => first.SortOrder - second.SortOrder);\r\n\r\n return { ...option, Values: values };\r\n });\r\n }\r\n\r\n removeDuplicatePromoValues() {\r\n if (!Array.isArray(this.promos) || typeof this.promos[0] !== 'object') {\r\n return [];\r\n }\r\n const values = duplicateValuesByProp(this.promos, 'Id');\r\n return { values };\r\n }\r\n\r\n mapPromos(variant) {\r\n const promoModels = variant.PromotionModels\r\n ? [...variant.PromotionModels]\r\n : [];\r\n if (this.isVariant) {\r\n const exception = variant.ProductException\r\n ? { ...variant.ProductException }\r\n : null;\r\n if (exception && exception.Title) {\r\n promoModels.push({\r\n Id: uniqid.time('', '_exceptionPromo_'),\r\n Name: exception.Title,\r\n Description: exception.Description,\r\n });\r\n }\r\n }\r\n return promoModels || [];\r\n }\r\n\r\n renderAddToCart() {\r\n this.addToCart = new PdpAddToCart(\r\n this.$addtoCartPlaceholder,\r\n this.labels,\r\n {\r\n catalogName: this.product.CatalogName,\r\n displayName: this.product.DisplayName,\r\n exceptionAmount: this.product?.ProductException?.DiscountAmount,\r\n exceptionBehavior: this.product?.ProductException\r\n ?.PriceTreatment,\r\n backOrdered: false,\r\n productId: this.product.ProductId,\r\n brand: this.product.Brand,\r\n }\r\n );\r\n\r\n const setVariant = () => {\r\n this.addToCart.setVariant({\r\n exceptionAmount: this.activeProduct?.ProductException\r\n ?.DiscountAmount,\r\n exceptionBehavior: this.activeProduct?.ProductException\r\n ?.PriceTreatment,\r\n variantId: this.activeProduct.VariantId ?? null,\r\n backOrdered: this.activeProduct?.BackOrdered,\r\n });\r\n };\r\n\r\n setVariant();\r\n this.watch('isVariant', () => setVariant());\r\n }\r\n\r\n renderLoader() {\r\n this.loader = new AjaxLoader(this.$loaderPlaceholder, { size: 'xs' });\r\n this.loader.render();\r\n }\r\n\r\n renderLabels() {\r\n this.$priceLabel.html(this.labels.YourPrice);\r\n this.$quantityLabel.html(this.labels.Quantity);\r\n this.$rxLabel.html(this.labels.RxText);\r\n this.$videoLabel.html(this.labels.HowTo);\r\n this.$productName.attr(\r\n 'href',\r\n `/shopmyvca/product/${this.product.ProductId}`\r\n );\r\n }\r\n\r\n renderBenefits() {\r\n this.$benefits.html(this.activeProduct.Benefits);\r\n }\r\n\r\n renderQuantitySelector() {\r\n // need to map labels since quantity selector will be used generically around the site\r\n const labels = {\r\n decrement: this.labels.Decrement,\r\n increment: this.labels.Increment,\r\n inputAriaLabel: this.labels.QuantitySelector,\r\n };\r\n\r\n this.quantitySelector = new QuantitySelector(\r\n this.$quantityPlaceholder,\r\n {},\r\n labels\r\n );\r\n\r\n this.quantitySelector.watchValue(value => {\r\n this.addToCart.setQuantity(value);\r\n });\r\n }\r\n\r\n renderNextOption(index, options = []) {\r\n this.renderSelectorOptions(this.$selectorBoxes.eq(index), options);\r\n\r\n // show the next selector\r\n this.$selectorLabels.eq(index).show();\r\n this.$selectors.eq(index).show();\r\n\r\n // hide any beyond the next one to be selected\r\n this.$selectorLabels.slice(index + 1).hide();\r\n this.$selectors.slice(index + 1).hide();\r\n }\r\n\r\n renderSelectors() {\r\n let selectorHtmlStr = '';\r\n\r\n this.uiSelectorOptions.forEach((option, index) => {\r\n // generate markup string for each selector\r\n const args = {\r\n id: `pdp${option.Name}`,\r\n index,\r\n label: option.DisplayName || option.Name,\r\n name: option.Name,\r\n };\r\n const label = selectLabel(args);\r\n const selector = selectBox(args);\r\n\r\n selectorHtmlStr += label + selector;\r\n });\r\n\r\n this.$selectorPlaceholder.replaceWith($.parseHTML(selectorHtmlStr));\r\n\r\n // assign newly rendered ui elements\r\n this.$selectorBoxes = this.$el.find('[data-control=\"selector\"]');\r\n this.$selectors = this.$el.find('[data-region=\"selector\"]');\r\n this.$selectorLabels = this.$el.find('[data-region=\"selectorLabel\"]');\r\n }\r\n\r\n renderSelectorOptions($selectEl, optionsArr = []) {\r\n let options = selectOption({\r\n disabled: true,\r\n value: '',\r\n name: this.pleaseSelect,\r\n });\r\n\r\n optionsArr.forEach(option => {\r\n options += selectOption({\r\n value: option.FormattedValue || option.Value,\r\n name: option.Value,\r\n });\r\n });\r\n\r\n $selectEl.html($.parseHTML(options));\r\n }\r\n\r\n renderSlider() {\r\n this.slider = new PdpSlider({\r\n $el: this.$sliderPlaceholder,\r\n labels: this.labels,\r\n rx: this.activeProduct.RxRequired,\r\n slides: this.slides,\r\n useTemplate: true,\r\n });\r\n }\r\n\r\n renderPromoLegend() {\r\n let promoHtmlStr = [];\r\n if (this.uiPromos.length !== 0) {\r\n this.uiPromos.values.forEach((item, index) => {\r\n const args = {\r\n id: item.Id,\r\n index,\r\n name: item.Name,\r\n desc: item.Description,\r\n iconURL: this.labels.PromoIcon,\r\n };\r\n\r\n const promo = promoLegend(args);\r\n promoHtmlStr += promo;\r\n });\r\n\r\n this.$promoLegend.html($.parseHTML(promoHtmlStr));\r\n\r\n window.VCA.Tooltips.initVCAPromoTooltip();\r\n }\r\n }\r\n\r\n renderStaticRegions() {\r\n this.$productName.append(this.product.DisplayName);\r\n this.$brandName.append(this.product.Brand);\r\n //this.renderBenefits();\r\n this.toggleVideo();\r\n }\r\n\r\n renderRadioInputs() {\r\n let isAutoShipOnly = this.activeProduct.AutoShipOnly;\r\n let radioPurchaseElement = document.querySelector(\r\n '.pdp-info__radio.-purchase'\r\n );\r\n let radioSubscribeElement = document.querySelector(\r\n '.pdp-info__radio #purchaseType1'\r\n );\r\n\r\n radioPurchaseElement.style.display = 'block';\r\n\r\n if (isAutoShipOnly) {\r\n radioPurchaseElement.style.display = 'none';\r\n radioSubscribeElement.checked = true;\r\n }\r\n }\r\n\r\n resetRadioInputs() {\r\n let defaultRadioBtn = document.querySelector(\r\n '.pdp-info__radio.-subscribe'\r\n );\r\n\r\n if (defaultRadioBtn !== undefined || defaultRadioBtn !== null) {\r\n defaultRadioBtn.querySelector('input[type=\"radio\"]').click();\r\n }\r\n }\r\n\r\n resetSelectors(selectorsArg = this.selectors, nextIndex = 0) {\r\n let selectors = [...selectorsArg];\r\n\r\n for (nextIndex; nextIndex < selectors.length; nextIndex++) {\r\n const filteredProducts = this.filterProducts(\r\n this.variants,\r\n selectors\r\n );\r\n const filteredOptions = this.filterOptions(\r\n nextIndex,\r\n filteredProducts\r\n );\r\n\r\n // automatically select next option if there is only one value\r\n if (filteredOptions.length === 1) {\r\n const [nextKey] = selectors[nextIndex];\r\n const { FormattedValue: nextValue } = filteredOptions[0];\r\n\r\n selectors[nextIndex] = [nextKey, nextValue];\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return selectors.map((selector, index) => {\r\n const [key] = selector;\r\n return index > nextIndex ? [key, ''] : selector;\r\n });\r\n }\r\n\r\n setLoginLink() {\r\n if (this.loginurl) {\r\n const redirect = '/shop/product/' + this.product.Name.toLowerCase();\r\n this.$loginpriceurl.attr(\r\n 'href',\r\n `${this.loginurl}?${redirectParam(redirect)}`\r\n );\r\n }\r\n }\r\n setupAccessibility() {\r\n this.$ariaLive.attr('aria-live', 'polite');\r\n }\r\n\r\n sendProductViewDatalayer() {\r\n productDetailsDatalayer.sendProductDetailView(\r\n this.currencyCode,\r\n this.activeGAProduct\r\n );\r\n }\r\n\r\n setupHistoryState() {\r\n const urlParams = new URLSearchParams(this.activeSelectors);\r\n const queryStr = urlParams.toString();\r\n /* if(queryStr) {\r\n const url = `${window.location.pathname}?${queryStr}`;\r\n window.history.replaceState(null, '', url);\r\n this.login?.setLink();\r\n } */\r\n }\r\n\r\n setupInitialSelectors() {\r\n const initialSelectors = this.getSelectorsFromUrl();\r\n\r\n this.uiSelectorOptions.forEach(option => {\r\n const values = option.Values || [];\r\n if (values.length === 1) {\r\n initialSelectors[option.Name] = values[0].FormattedValue;\r\n }\r\n });\r\n\r\n return initialSelectors;\r\n }\r\n\r\n setupListeners() {\r\n this.$selectorBoxes.on('change', this.onSelectorChange.bind(this));\r\n window.addEventListener('popstate', evt => this.onPopState(evt));\r\n $('#quickshop-modal').on('hidden.bs.modal', evt =>\r\n this.sliderdestroy(evt)\r\n );\r\n }\r\n\r\n setupSelectors() {\r\n let selectors = this.uiSelectorOptions.map(({ Name: name }) => {\r\n return [name, this.initialSelectors[name] || ''];\r\n });\r\n\r\n const currentIndex = selectors.filter(([, value]) => value).length;\r\n return this.resetSelectors(selectors, currentIndex);\r\n }\r\n\r\n toggleVideo() {\r\n this.$video.hide();\r\n }\r\n\r\n updatePrescription() {\r\n if (this.activeProduct.RxRequired) {\r\n this.$rx.slideDown('fast');\r\n this.$rxStamp.slideDown('fast');\r\n } else {\r\n this.$rx.slideUp('fast');\r\n this.$rxStamp.slideUp('fast');\r\n }\r\n }\r\n\r\n updateProduct() {\r\n this.filteredProducts = this.filterProducts(\r\n this.variants,\r\n this.selectors\r\n );\r\n }\r\n\r\n updatePromoLegend() {\r\n if (\r\n this.isVariant &&\r\n !this.activeProduct?.PromotionModels &&\r\n (this.isVariant && !this.activeProduct?.ProductException == null)\r\n ) {\r\n this.$promoLegend.empty();\r\n } else {\r\n this.renderPromoLegend();\r\n }\r\n }\r\n\r\n updatePrice() {\r\n this.$price.hide().empty();\r\n this.$listPrice.hide().empty();\r\n this.$discountPrice.hide().empty();\r\n this.$loginPricePlaceholder.hide();\r\n const shouldHidePriceForProduct =\r\n !this.isAuthenticated &&\r\n this.product.Name.toLowerCase() ==\r\n 'simparica-trio-chewables-for-dogs';\r\n\r\n if (this.isVariant) {\r\n const hidePriceVariantsList =\r\n '23013157nf|23013158nf|23013159nf|23013160nf|23013161nf|23013162nf';\r\n const shouldHidePrice =\r\n !this.isAuthenticated &&\r\n hidePriceVariantsList.includes(\r\n this.activeProduct.VariantId.toLowerCase()\r\n );\r\n\r\n const listPrice = priceString(this.activeProduct.ListPrice);\r\n const exception = this.activeProduct.ProductException;\r\n\r\n if (\r\n exception &&\r\n !exception.IsUserCareClub &&\r\n exception.IsCareClub\r\n ) {\r\n //Add check for authentication + product name\r\n if (shouldHidePrice) {\r\n this.$loginPricePlaceholder.show();\r\n this.$price.html(listPrice);\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$price.show().html(listPrice);\r\n }\r\n return;\r\n }\r\n\r\n if (exception && typeof exception.PriceTreatment === 'number') {\r\n const discountPrice = priceString(exception.DiscountAmount);\r\n\r\n if (\r\n exception.PriceTreatment ===\r\n exceptionBehaviorValues.STRIKE_THROUGH\r\n ) {\r\n //Add check for authentication + product name\r\n if (shouldHidePrice) {\r\n this.$loginPricePlaceholder.show();\r\n this.$listPrice.html(discountPrice);\r\n this.$discountPrice.html(listPrice);\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$listPrice.show().html(discountPrice);\r\n this.$discountPrice.show().html(listPrice);\r\n }\r\n } else {\r\n //Add check for authentication + product name\r\n if (shouldHidePrice) {\r\n this.$loginPricePlaceholder.show();\r\n this.$price.html(discountPrice);\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$price.show().html(discountPrice);\r\n }\r\n }\r\n } else {\r\n //Add check for authentication + product name\r\n if (shouldHidePrice) {\r\n this.$loginPricePlaceholder.show();\r\n this.$price.html(listPrice);\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$price.show().html(listPrice);\r\n }\r\n }\r\n } else {\r\n const filteredPrices = this.filteredProducts.map(product => {\r\n //const discountPrice = product.ProductException?.DiscountAmount ?? null;\r\n //return typeof discountPrice === 'number' ? discountPrice : product.ListPrice;\r\n return product.ListPrice;\r\n });\r\n\r\n const priceLow = Math.min(...filteredPrices);\r\n const priceHigh = Math.max(...filteredPrices);\r\n const priceLowFormatted = priceString(priceLow);\r\n const priceHighFormatted = priceString(priceHigh);\r\n\r\n if (priceLow !== priceHigh) {\r\n //Add check for authentication + product name\r\n if (shouldHidePriceForProduct) {\r\n this.$loginPricePlaceholder.show();\r\n this.$price.html(\r\n `${priceLowFormatted} - ${priceHighFormatted}`\r\n );\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$price\r\n .show()\r\n .html(`${priceLowFormatted} - ${priceHighFormatted}`);\r\n }\r\n } else {\r\n if (shouldHidePriceForProduct) {\r\n this.$loginPricePlaceholder.show();\r\n this.$price.html(priceLowFormatted);\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$price.show().html(priceLowFormatted);\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateRenderedOptions() {\r\n if (\r\n this.activeSelectors &&\r\n Array.isArray(this.activeSelectors) &&\r\n this.activeSelectors.length\r\n ) {\r\n let filteredProducts = [...this.variants];\r\n\r\n this.activeSelectors.forEach((option, index) => {\r\n let selectors = [...this.activeSelectors];\r\n selectors.length = index;\r\n\r\n filteredProducts = this.filterProducts(\r\n filteredProducts,\r\n selectors\r\n );\r\n const options = this.filterOptions(index, filteredProducts);\r\n\r\n this.renderNextOption(index, options);\r\n });\r\n\r\n this.updateSelectorValues();\r\n }\r\n }\r\n\r\n updateState() {\r\n this.updateProduct();\r\n\r\n // update state based off of new active product\r\n this.updatePrescription();\r\n this.setLoginLink();\r\n this.updatePrice();\r\n this.updateSelectors();\r\n this.updatePromoLegend();\r\n this.renderRadioInputs();\r\n\r\n if (this.#cachedProduct.VariantId !== this.activeProduct.VariantId) {\r\n this.updateSlider();\r\n }\r\n }\r\n\r\n updateSelectors(nextActiveIndex = this.activeSelectors.length) {\r\n this.updateRenderedOptions();\r\n\r\n if (!this.isVariant) {\r\n // render options for next active selector\r\n const filteredOptions = this.filterOptions(\r\n nextActiveIndex,\r\n this.filteredProducts\r\n );\r\n\r\n if (filteredOptions.length) {\r\n this.renderNextOption(nextActiveIndex, filteredOptions);\r\n }\r\n }\r\n\r\n this.updateSelectorValues();\r\n }\r\n\r\n updateSelectorValues() {\r\n // set all selectors initial value\r\n this.selectors.forEach((selector, index) => {\r\n const [, value] = selector;\r\n this.$selectorBoxes.eq(index).val(value);\r\n });\r\n }\r\n\r\n updateSlider() {\r\n if (this.slider) {\r\n this.slider.updateSlides(\r\n this.activeProduct.RxRequired,\r\n this.slides\r\n );\r\n }\r\n }\r\n\r\n sliderdestroy() {\r\n $('div[data-region=\"main\"]').slick('unslick');\r\n $('div[data-region=\"nav\"]').slick('unslick');\r\n }\r\n}\r\n\r\n$(() => {\r\n $(document).on('click', '[data-control=\"quickShopBtn\"]', function(event) {\r\n event.preventDefault();\r\n const productId = $(this).data('product-id');\r\n bindQuickviewClick(productId);\r\n });\r\n var isGlobalActive = document.getElementById('isSiteMaintananceAlertActive')\r\n ?.value;\r\n if (isGlobalActive == 'true') {\r\n setTimeout(() => {\r\n var btnCart = document.querySelector('.mini-cart-toggle__btn');\r\n btnCart.style.display = 'none';\r\n var btnAddCart = document.getElementById('btnAddToCart');\r\n if (btnAddCart != null) {\r\n btnAddCart.style.display = 'none';\r\n }\r\n var btnCheckOut = document.querySelector('.cart-summary__btn');\r\n if (btnCheckOut != null) {\r\n btnCheckOut.style.display = 'none';\r\n }\r\n }, 600);\r\n }\r\n});\r\n\r\nasync function bindQuickviewClick(productId) {\r\n if (productId == null || productId == '') {\r\n console.log('pdp-quick-view.js - bindQuickviewClick - stop');\r\n }\r\n const el = document.getElementById('pdpQuickview');\r\n const dataEl = document.getElementById('pdpSelectorData');\r\n const dataLabels = document.getElementById('pdpSelectorDataLabels');\r\n $('#quickshop-modal').modal('show');\r\n $('.js-quickshop-loader').show();\r\n $('#pdpQuickview').empty();\r\n\r\n let params = productId;\r\n\r\n const { success, data, error } = await catalogProduct.get(params);\r\n if (success) {\r\n setTimeout(() => {\r\n // setting up dynamic data from product data\r\n let dataToPass = {\r\n Labels: {\r\n LoginLink: '/login',\r\n LoginPriceTitle: 'Log In for Pricing',\r\n LoginPriceDescription:\r\n 'You must be logged in to view pricing on this item.',\r\n ActiveIngredients: 'Active Ingredients',\r\n AddToCart: 'Add To Cart',\r\n By: 'By',\r\n ChatWithVet: 'Chat with Vet',\r\n FavoriteSrText: 'Add to Favorites',\r\n HowTo: 'How-to',\r\n LoaderSrText: 'Loading...',\r\n LoginDescription:\r\n 'You must have a myVCA account to purchase.',\r\n Login: 'Log In',\r\n OneTimePurchase: 'One Time Purchase',\r\n ProductInformation: 'Product Information',\r\n Quantity: 'Quantity',\r\n RxText:\r\n '<strong>*Prescription Required:</strong> Vetsource<sup>®</sup>, our pharmacy provider may need to contract your veterinary hospital for prescription verification.',\r\n Save: 'Save',\r\n Subscribe: 'Subscribe & Never Forget',\r\n UsageGuidelines: 'Usage Guidelines',\r\n YourPrice: 'Your Price',\r\n ZoomSrText: 'Zoom in image',\r\n Product: 'Products',\r\n PromoIcon: '-/media/2/vca/svg/svg/promo-discount.svg',\r\n AddItemsToCart: 'Add (1) Item to Cart',\r\n CurrentItem: 'Current Item',\r\n Comfirm: 'Confirm',\r\n EstTotalPrice: 'Est Total Price',\r\n FrequentlyBoughtTogether: 'Frequently Bought Together',\r\n SelectPackingtoContine: 'Select packaging to continue',\r\n ConfirmYourselection: 'Confirm your selection',\r\n OutOfStock: '',\r\n OutOfStockIcon: '',\r\n },\r\n Data: data,\r\n };\r\n document.getElementById(\r\n 'pdpSelectorData'\r\n ).textContent = JSON.stringify(dataToPass, null, 2);\r\n\r\n {\r\n // below code is to get api calls after open modal\r\n {\r\n setTimeout(() => {\r\n var quickViewModal = document.getElementById(\r\n 'quickViewModal'\r\n )\r\n ? document.getElementById('quickViewModal')\r\n : '';\r\n var obj = JSON.parse(\r\n document.getElementById('pdpSelectorData')\r\n .textContent\r\n );\r\n try {\r\n // api call on add to cart button click\r\n var btn = document.getElementById('btnAddToCart');\r\n btn?.addEventListener(\r\n 'click',\r\n e => {\r\n if (quickViewModal) {\r\n window.VCA.CoveoAnalytics.initCoveoUa();\r\n\r\n var quantity = document.querySelector(\r\n '.quantity-selector__input'\r\n ).ariaValueNow;\r\n var addProduct = {\r\n id: obj?.Data?.Product?.PermanentId,\r\n name: obj?.Data?.Product?.Name,\r\n category:\r\n obj?.Data?.Product?.Category,\r\n quantity: (quantity = null\r\n ? 1\r\n : quantity),\r\n // pr1qt: (quantity = null\r\n // ? 1\r\n // : quantity),\r\n // currencyCode: 'USD',\r\n // cu: 'USD',\r\n price:\r\n obj?.Data?.ChildVariants[0]\r\n ?.SellPrice,\r\n variant:\r\n obj?.Data?.ChildVariants[0]\r\n ?.VariantId,\r\n // context_website: 'Vca',\r\n // website: 'Vca',\r\n };\r\n coveoua('ec:addProduct', addProduct);\r\n coveoua('set', 'custom', {\r\n context_website: 'Vca',\r\n });\r\n coveoua('ec:setAction', `add`);\r\n coveoua('send', `event`);\r\n }\r\n },\r\n { once: true }\r\n );\r\n } catch (error) {\r\n console.error('CoveoUA API request failed', error);\r\n }\r\n\r\n // START Nehem - On Change of Select is not needed.\r\n\r\n // api call on select option change event\r\n\r\n // $('select').on('change', function() {\r\n // try {\r\n // // if (quickViewModal) {\r\n // // (function(c, o, v, e, O, u, a) {\r\n // // a = 'coveoua';\r\n // // c[a] =\r\n // // c[a] ||\r\n // // function() {\r\n // // (c[a].q = c[a].q || []).push(\r\n // // arguments\r\n // // );\r\n // // };\r\n // // c[a].t = Date.now();\r\n // // u = o.createElement(v);\r\n // // u.async = 1;\r\n // // u.src = e;\r\n // // O = o.getElementsByTagName(v)[0];\r\n // // O.parentNode.insertBefore(u, O);\r\n // // })(\r\n // // window,\r\n // // document,\r\n // // 'script',\r\n // // 'https://static.cloud.coveo.com/coveo.analytics.js/2/coveoua.js'\r\n // // );\r\n // // coveoua(\r\n // // 'init',\r\n // // 'xx73f654bb-c90b-45c0-bedd-5a8812afabdd'\r\n // // );\r\n // // coveoua('set', 'currencyCode', 'USD');\r\n // // }\r\n // var quantity = document.querySelector(\r\n // '.quantity-selector__input'\r\n // ).ariaValueNow;\r\n // var addProduct = {\r\n // id: obj?.Data?.Product?.PermanentId,\r\n // name: obj?.Data?.Product?.Name,\r\n // category: obj?.Data?.Product?.Category,\r\n // quantity: (quantity = null ? 1 : quantity),\r\n // pr1qt: (quantity = null ? 1 : quantity),\r\n // currencyCode: 'USD',\r\n // cu: 'USD',\r\n // price:\r\n // obj?.Data?.ChildVariants[0]?.SellPrice,\r\n // variant:\r\n // obj?.Data?.ChildVariants[0]?.VariantId,\r\n // context_website: 'Vca',\r\n // };\r\n // coveoua('set', 'custom', {\r\n // context_website: 'Vca',\r\n // });\r\n // coveoua('ec:addProduct', addProduct);\r\n // coveoua('ec:setAction', `add`);\r\n // //coveoua('send', `event`); // Do not send event on change of dropdown\r\n // } catch (error) {\r\n // console.error('2 - API call failed:', error);\r\n // }\r\n // });\r\n\r\n //END Nehem - On Change of Select is not needed.\r\n }, 1000);\r\n }\r\n }\r\n }, 2000);\r\n }\r\n if (!success) {\r\n console.log('pdp-quick-view.js - failed', error);\r\n return;\r\n }\r\n\r\n if (el) {\r\n // const data = JSON.parse(dataEl.innerHTML);\r\n const dataL = JSON.parse(dataLabels.innerHTML);\r\n $('.js-quickshop-loader').hide();\r\n //console.log(data);\r\n if (data) {\r\n const $el = $(el);\r\n new PdpSelector({\r\n $el,\r\n dataL,\r\n data,\r\n });\r\n }\r\n }\r\n}\r\n","import uniqid from 'uniqid';\r\nimport ReactiveComponent, { computed, watch } from '@utils/reactive-component';\r\nimport priceString from '@utils/price-string';\r\nimport { duplicateValuesByProp } from '@utils/filters';\r\nimport { redirectParam } from '@utils/login-redirect';\r\nimport template, {\r\n selectBox,\r\n selectLabel,\r\n selectOption,\r\n promoLegend,\r\n} from './templates/pdp-selector';\r\nimport PdpAddToCart from './pdp-add-to-cart';\r\nimport PdpInfoTabs from './pdp-info-tabs';\r\nimport PdpLogin from './pdp-login';\r\nimport PdpSlider from './pdp-slider';\r\nimport QuantitySelector from '../quantity-selector/quantity-selector';\r\nimport { defaults } from './pdp-mappings';\r\nimport { exceptionBehaviorValues } from '@stores/cart/cart-store';\r\nimport * as productDatalayer from '@datalayer/components/product-datalayer';\r\nimport * as productDetailsDatalayer from '@datalayer/components/product-details-datalayer';\r\nimport PdpFrequentlyBoughtTogether from './pdp-frequently-bought-together';\r\n\r\n/* const mapPromos = (variant) => {\r\n const promoModels = variant.PromotionModels ? [ ...variant.PromotionModels ] : [];\r\n const exception = variant.ProductException ? { ...variant.ProductException } : null;\r\n if(exception && exception.Title) {\r\n promoModels.push({\r\n Id: uniqid.time('', '_exceptionPromo_'),\r\n Name: exception.Title,\r\n Description: exception.Description\r\n });\r\n }\r\n return promoModels || [];\r\n}; */\r\n\r\nclass PdpSelector extends ReactiveComponent {\r\n #cachedProduct = {};\r\n #isPopState = false;\r\n\r\n constructor({ $el, data }) {\r\n super();\r\n\r\n const parsed = $.parseHTML(template);\r\n $el.append(parsed);\r\n\r\n this.$el = $el;\r\n\r\n // non-dynamic label regions\r\n this.$priceLabel = this.$el.find('[data-label=\"price\"]');\r\n this.$quantityLabel = this.$el.find('[data-label=\"quantity\"]');\r\n this.$rxLabel = this.$el.find('[data-label=\"prescription\"]');\r\n this.$videoLabel = this.$el.find('[data-label=\"video\"]');\r\n\r\n // placeholders for other components\r\n this.$addtoCartPlaceholder = this.$el.find('[data-placeholder=\"cart\"]');\r\n this.$infoTabsPlaceholder = this.$el.find(\r\n '[data-placeholder=\"infoTabs\"]'\r\n );\r\n this.$loginPlaceholder = this.$el.find('[data-placeholder=\"login\"]');\r\n this.$loginPricePlaceholder = this.$el.find(\r\n '[data-placeholder=\"loginPrice\"]'\r\n );\r\n this.$quantityPlaceholder = this.$el.find(\r\n '[data-placeholder=\"quantity\"]'\r\n );\r\n this.$sliderPlaceholder = this.$el.find('[data-placeholder=\"slider\"]');\r\n this.$selectorPlaceholder = this.$el.find(\r\n '[data-placeholder=\"selectors\"]'\r\n );\r\n\r\n // dynamic data regions\r\n this.$benefits = this.$el.find('[data-region=\"benefits\"]');\r\n this.$brandName = this.$el.find('[data-region=\"brandName\"]');\r\n this.$loginpriceurl = this.$el.find('[data-label=\"loginpriceurl\"]');\r\n this.$price = this.$el.find('[data-region=\"price\"]');\r\n this.$productName = this.$el.find('[data-region=\"productName\"]');\r\n this.$rx = this.$el.find('[data-region=\"prescription\"]');\r\n this.$rxStamp = this.$el.find('[data-region=\"prescriptionStamp\"]');\r\n this.$discountPrice = this.$el.find('[data-region=\"discountPrice\"]');\r\n this.$listPrice = this.$el.find('[data-region=\"listPrice\"]');\r\n this.$video = this.$el.find('[data-region=\"video\"]');\r\n this.$videoIframe = this.$el.find('[data-region=\"videoIframe\"]');\r\n this.$promoLegend = this.$el.find('[data-placeholder=\"promoLegend\"]');\r\n this.$productBundleRegion = this.$el.find(\r\n '[data-placeholder=\"frequentlyBoughtTogether\"]'\r\n );\r\n // deferred dynamic data regions\r\n this.$selectorLabels = null; // assigned after selectors are rendered\r\n this.$selectors = null; // assigned after selectors are rendered\r\n\r\n // accessibility regions\r\n this.$ariaLive = this.$el.find('[data-a11y=\"ariaLive\"]');\r\n\r\n // ui controls\r\n this.$quantityControl = this.$el.find('[data-control=\"quantity\"]');\r\n this.$selectorBoxes = null; // assigned after selectors are rendered\r\n\r\n // ui components\r\n this.addToCart = null;\r\n this.quantitySelector = null;\r\n this.login = null;\r\n // this.loginPrice = null;\r\n this.slider = null;\r\n this.tabs = null;\r\n this.freqBought = null;\r\n\r\n // merge data from backend w/ fe defaults so there is always a value\r\n this.labels = data.Labels\r\n ? {\r\n ...defaults.labels,\r\n ...data.Labels,\r\n }\r\n : defaults.labels;\r\n\r\n // labels\r\n this.pleaseSelect = this.labels.PleaseSelect;\r\n this.loginurl = this.labels.LoginLink;\r\n // data points used for selector logic\r\n this.isAuthenticated = data.Data?.UserAuthenticated || false;\r\n this.product = data.Data?.Product || {};\r\n this.variants = data.Data?.ChildVariants || [];\r\n this.selectorOptions = data.Data?.VariantSelectorOptions || [];\r\n\r\n // filter out duplicate select values\r\n this.uiSelectorOptions = this.removeDuplicateSelectorValues();\r\n\r\n // setup pre-selected selectors\r\n this.initialSelectors = this.setupInitialSelectors();\r\n\r\n this.currencyCode = this.product.CurrencyCode || 'USD'; // todo: BE to add currency code to data\r\n\r\n // state props\r\n this.reactive({\r\n /**\r\n * matrix of key/value pairs representing active selectors\r\n * - key is the selector property string\r\n * - value is the selector value string\r\n * @type {Array<Array<string>>}\r\n */\r\n selectors: this.setupSelectors(),\r\n /**\r\n * array of possible variants based on active selectors\r\n * @type {Array<Object<string,any>>}\r\n */\r\n filteredProducts: this.variants,\r\n });\r\n\r\n //on init\r\n this.onInit = false;\r\n\r\n // filter out duplicate promos for legend\r\n this.promos = this.variants.map(this.mapPromos, this).flat() || [];\r\n this.uiPromos = this.removeDuplicatePromoValues();\r\n\r\n this.init();\r\n }\r\n\r\n [computed]() {\r\n return {\r\n activeProduct() {\r\n return this.isVariant ? this.filteredProducts[0] : this.product;\r\n },\r\n activeGAProduct() {\r\n const exceptionBehavior =\r\n this.activeProduct?.ProductException?.PriceTreatment ??\r\n exceptionBehaviorValues.NO_EXCEPTION;\r\n\r\n return productDatalayer.buildProduct({\r\n id: this.activeProduct.ProductId,\r\n variantId: this.activeProduct.VariantId,\r\n name: this.activeProduct.Name,\r\n brand: this.product.Brand,\r\n category: this.product.CategoryList,\r\n price: this.isVariant\r\n ? this.activeProduct.ListPrice\r\n : undefined,\r\n discount:\r\n exceptionBehavior !==\r\n exceptionBehaviorValues.NO_EXCEPTION,\r\n rxRequired: this.activeProduct.RxRequired,\r\n });\r\n },\r\n activeSelectors() {\r\n return this.selectors.filter(([, value]) => value);\r\n },\r\n isVariant() {\r\n return this.selectors.length === this.activeSelectors.length;\r\n },\r\n slides() {\r\n return this.activeProduct.Images?.map(image => ({\r\n url: image.Url || image.ConstrainedUrl,\r\n thumbnail: image.ConstrainedUrl || image.Url,\r\n alt: image.Alt || this.product.DisplayName,\r\n }));\r\n },\r\n };\r\n }\r\n\r\n [watch]() {\r\n return {\r\n isVariant() {\r\n if (\r\n this.#cachedProduct.VariantId !==\r\n this.activeProduct.VariantId\r\n ) {\r\n this.sendProductViewDatalayer();\r\n }\r\n\r\n this.tabs?.update({\r\n productInformation: this.activeProduct.ProductInformation,\r\n ingredients: this.activeProduct.Ingredients,\r\n species: this.activeProduct.ForSpecies,\r\n usage: this.activeProduct.Usage,\r\n });\r\n\r\n this.toggleVideo();\r\n\r\n this.updateAddToCart();\r\n },\r\n filteredProducts() {\r\n this.promos =\r\n this.filteredProducts.map(this.mapPromos, this).flat() ||\r\n [];\r\n this.uiPromos = this.removeDuplicatePromoValues();\r\n },\r\n selectors() {\r\n this.updateState();\r\n this.isPopState();\r\n },\r\n };\r\n }\r\n\r\n init() {\r\n // render all markup that will never be removed from the DOM\r\n this.renderLabels();\r\n this.renderStaticRegions();\r\n this.renderAddToCart();\r\n this.renderQuantitySelector();\r\n this.renderSelectors();\r\n this.updateRenderedOptions();\r\n this.renderSlider();\r\n this.renderPromoLegend();\r\n\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const fbtParam = urlParams.get('fbt');\r\n\r\n const isFbtEnabledValue = document.getElementById('isFbtEnabled')?.value;\r\n if (isFbtEnabledValue === 'true' || fbtParam === 'true') {\r\n this.renderFrequentlyBoughtTogether();\r\n }\r\n\r\n // setup initial accessibility state\r\n this.setupAccessibility();\r\n\r\n // setup ui state\r\n this.setupListeners();\r\n\r\n // setup popstate history state object\r\n this.setupHistoryState();\r\n\r\n // update state based off of any initial selectors\r\n this.updateState();\r\n\r\n this.updateAddToCart();\r\n\r\n this.sendProductViewDatalayer();\r\n\r\n this.createSchemaMarkup();\r\n }\r\n\r\n filterProducts(products = this.variants, selectors = this.selectors) {\r\n if (!products.length || !selectors.length) {\r\n return products;\r\n }\r\n\r\n let filteredProducts = [...products];\r\n let index = 0;\r\n let value = '';\r\n\r\n do {\r\n const [selectorProp, selectorFormattedValue] = selectors[index];\r\n // get the \"Value\" prop which will be the true value to compare to\r\n value =\r\n this.uiSelectorOptions[index]?.Values.find(\r\n option => option.FormattedValue === selectorFormattedValue\r\n )?.Value || null;\r\n if (value) {\r\n filteredProducts = filteredProducts.filter(\r\n product => product[selectorProp] === value\r\n );\r\n }\r\n index++;\r\n } while (\r\n value &&\r\n filteredProducts.length > 1 &&\r\n index < selectors.length\r\n );\r\n return filteredProducts;\r\n }\r\n\r\n filterOptions(index, filteredProducts = this.filteredProducts) {\r\n index = Number(index);\r\n if (\r\n isNaN(index) ||\r\n !filteredProducts ||\r\n !Array.isArray(filteredProducts)\r\n ) {\r\n return [];\r\n }\r\n\r\n return (\r\n this.uiSelectorOptions[index]?.Values.filter(option => {\r\n const selectorProp = this.uiSelectorOptions[index].Name;\r\n return filteredProducts.find(\r\n product => product[selectorProp] === option.Value\r\n );\r\n }) || []\r\n );\r\n }\r\n\r\n getSelectorsFromUrl() {\r\n const selectors = {};\r\n const urlParams = new URLSearchParams(window.location.search);\r\n\r\n for (const selector of this.uiSelectorOptions) {\r\n const key = selector.Name;\r\n const value = urlParams.get(key);\r\n const option = selector.Values?.find(\r\n option => option.FormattedValue === value\r\n );\r\n\r\n if (option) {\r\n selectors[key] = value;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return selectors;\r\n }\r\n\r\n onPopState() {\r\n this.#isPopState = true;\r\n\r\n this.initialSelectors = this.getSelectorsFromUrl();\r\n this.selectors = this.setupSelectors();\r\n\r\n if (this.isVariant) {\r\n this.updateRenderedOptions();\r\n }\r\n\r\n this.#isPopState = false;\r\n }\r\n\r\n onSelectorChange(evt) {\r\n const $target = $(evt.target);\r\n const currentIndex = $target.data('index');\r\n const key = $target.attr('name');\r\n const value = $target.val();\r\n\r\n this.#cachedProduct = this.activeProduct;\r\n\r\n let selectors = this.selectors.map((selector, index) => {\r\n const [key] = selector;\r\n return index > currentIndex ? [key, ''] : selector;\r\n });\r\n\r\n selectors[currentIndex] = [key, value];\r\n\r\n this.selectors = this.resetSelectors(selectors, currentIndex + 1);\r\n }\r\n\r\n isPopState() {\r\n if (!this.#isPopState) {\r\n const urlParams = new URLSearchParams(this.activeSelectors);\r\n const queryStr = urlParams.toString();\r\n const url = `${window.location.pathname}?${queryStr}`;\r\n window.history.pushState(null, '', url);\r\n this.login?.setLink();\r\n this.setLoginLink();\r\n }\r\n }\r\n\r\n removeDuplicateSelectorValues() {\r\n return this.selectorOptions.map(option => {\r\n const values = duplicateValuesByProp(option.Values, 'Value');\r\n values.sort((first, second) => first.SortOrder - second.SortOrder);\r\n\r\n return { ...option, Values: values };\r\n });\r\n }\r\n\r\n removeDuplicatePromoValues() {\r\n if (!Array.isArray(this.promos) || typeof this.promos[0] !== 'object') {\r\n return [];\r\n }\r\n const values = duplicateValuesByProp(this.promos, 'Id');\r\n return { values };\r\n }\r\n\r\n mapPromos(variant) {\r\n const promoModels = variant.PromotionModels\r\n ? [...variant.PromotionModels]\r\n : [];\r\n if (this.isVariant) {\r\n const exception = variant.ProductException\r\n ? { ...variant.ProductException }\r\n : null;\r\n if (exception && exception.Title) {\r\n promoModels.push({\r\n Id: uniqid.time('', '_exceptionPromo_'),\r\n Name: exception.Title,\r\n Description: exception.Description,\r\n });\r\n }\r\n }\r\n return promoModels || [];\r\n }\r\n\r\n renderAddToCart() {\r\n this.addToCart = new PdpAddToCart(\r\n this.$addtoCartPlaceholder,\r\n this.labels,\r\n {\r\n catalogName: this.product.CatalogName,\r\n displayName: this.product.DisplayName,\r\n exceptionAmount: this.product?.ProductException?.DiscountAmount,\r\n exceptionBehavior: this.product?.ProductException\r\n ?.PriceTreatment,\r\n backOrdered: false,\r\n productId: this.product.ProductId,\r\n brand: this.product.Brand,\r\n }\r\n );\r\n }\r\n\r\n renderFrequentlyBoughtTogether() {\r\n if (!this.product.BackOrdered) {\r\n this.freqBought = new PdpFrequentlyBoughtTogether(\r\n this.$productBundleRegion,\r\n this.labels,\r\n {\r\n productId: this.product.ProductId,\r\n }\r\n );\r\n } else {\r\n //Product is backordered. So FBT is not available.\r\n }\r\n }\r\n\r\n renderBenefits() {\r\n let header = \"<div class='mt-4 mb-1'><strong>Benefits</strong></div>\";\r\n let showmorebtn =\r\n \"<div><button class='underline text-color-vca-blue alt-fancy' data-btn='read-more-benefits'>Read more</button></div>\";\r\n this.$benefits.html(\r\n header +\r\n '<div class=\"js-benefits-clamp benefits-clamp mb-2\">' +\r\n this.activeProduct.Benefits +\r\n '</div>' +\r\n showmorebtn\r\n );\r\n this.showMoreBenefits();\r\n }\r\n\r\n showMoreBenefits() {\r\n let showmorebtn = this.$benefits.find(\r\n \"[data-btn='read-more-benefits']\"\r\n );\r\n let clampWrapper = this.$benefits.find('.js-benefits-clamp');\r\n showmorebtn.on('click', function(e) {\r\n e.preventDefault();\r\n if (clampWrapper.hasClass('benefits-clamp')) {\r\n clampWrapper.removeClass('benefits-clamp');\r\n showmorebtn.text('Read less');\r\n } else {\r\n clampWrapper.addClass('benefits-clamp');\r\n showmorebtn.text('Read more');\r\n }\r\n });\r\n }\r\n\r\n renderLabels() {\r\n this.$priceLabel.html(this.labels.YourPrice);\r\n this.$quantityLabel.html(this.labels.Quantity);\r\n this.$rxLabel.html(this.labels.RxText);\r\n this.$videoLabel.html(this.labels.HowTo);\r\n }\r\n\r\n renderInfoTabs() {\r\n this.tabs = new PdpInfoTabs({\r\n $el: this.$infoTabsPlaceholder,\r\n data: {\r\n productInformation: this.activeProduct.ProductInformation,\r\n ingredients: this.activeProduct.Ingredients,\r\n species: this.activeProduct.ForSpecies,\r\n usage: this.activeProduct.Usage,\r\n },\r\n labels: this.labels,\r\n });\r\n }\r\n\r\n renderLogin() {\r\n if (!this.isAuthenticated) {\r\n this.login = new PdpLogin(this.$loginPlaceholder, this.labels);\r\n }\r\n }\r\n\r\n // renderPriceLogin() {\r\n // if (!this.isAuthenticated) {\r\n // this.loginPrice = new PdpPriceLogin(\r\n // this.$loginPricePlaceholder,\r\n // this.labels\r\n // );\r\n // }\r\n // }\r\n\r\n renderQuantitySelector() {\r\n // need to map labels since quantity selector will be used generically around the site\r\n const labels = {\r\n decrement: this.labels.Decrement,\r\n increment: this.labels.Increment,\r\n inputAriaLabel: this.labels.QuantitySelector,\r\n };\r\n\r\n this.quantitySelector = new QuantitySelector(\r\n this.$quantityPlaceholder,\r\n {},\r\n labels\r\n );\r\n\r\n this.quantitySelector.watchValue(value => {\r\n this.addToCart.setQuantity(value);\r\n });\r\n }\r\n\r\n renderNextOption(index, options = []) {\r\n this.renderSelectorOptions(this.$selectorBoxes.eq(index), options);\r\n\r\n // show the next selector\r\n this.$selectorLabels.eq(index).show();\r\n this.$selectors.eq(index).show();\r\n\r\n // hide any beyond the next one to be selected\r\n this.$selectorLabels.slice(index + 1).hide();\r\n this.$selectors.slice(index + 1).hide();\r\n }\r\n\r\n renderSelectors() {\r\n let selectorHtmlStr = '';\r\n\r\n this.uiSelectorOptions.forEach((option, index) => {\r\n // generate markup string for each selector\r\n const args = {\r\n id: `pdp${option.Name}`,\r\n index,\r\n label: option.DisplayName || option.Name,\r\n name: option.Name,\r\n };\r\n const label = selectLabel(args);\r\n const selector = selectBox(args);\r\n\r\n selectorHtmlStr += label + selector;\r\n });\r\n\r\n this.$selectorPlaceholder.replaceWith($.parseHTML(selectorHtmlStr));\r\n\r\n // assign newly rendered ui elements\r\n this.$selectorBoxes = this.$el.find('[data-control=\"selector\"]');\r\n this.$selectors = this.$el.find('[data-region=\"selector\"]');\r\n this.$selectorLabels = this.$el.find('[data-region=\"selectorLabel\"]');\r\n }\r\n\r\n renderSelectorOptions($selectEl, optionsArr = []) {\r\n let options = selectOption({\r\n disabled: true,\r\n value: '',\r\n name: this.pleaseSelect,\r\n });\r\n\r\n optionsArr.forEach(option => {\r\n options += selectOption({\r\n value: option.FormattedValue || option.Value,\r\n name: option.Value,\r\n });\r\n });\r\n\r\n $selectEl.html($.parseHTML(options));\r\n }\r\n\r\n renderSlider() {\r\n this.slider = new PdpSlider({\r\n $el: this.$sliderPlaceholder,\r\n labels: this.labels,\r\n rx: this.activeProduct.RxRequired,\r\n slides: this.slides,\r\n useTemplate: true,\r\n });\r\n }\r\n\r\n renderPromoLegend() {\r\n let promoHtmlStr = [];\r\n if (this.uiPromos.length !== 0) {\r\n this.uiPromos.values.forEach((item, index) => {\r\n const args = {\r\n id: item.Id,\r\n index,\r\n name: item.Name,\r\n desc: item.Description,\r\n iconURL: this.labels.PromoIcon,\r\n };\r\n\r\n const promo = promoLegend(args);\r\n promoHtmlStr += promo;\r\n });\r\n\r\n this.$promoLegend.html($.parseHTML(promoHtmlStr));\r\n\r\n window.VCA.Tooltips.initVCAPromoTooltip();\r\n }\r\n }\r\n\r\n renderStaticRegions() {\r\n this.$productName.append(this.product.DisplayName);\r\n this.$brandName.append(this.product.Brand);\r\n\r\n this.renderBenefits();\r\n this.renderInfoTabs();\r\n this.renderLogin();\r\n // this.renderPriceLogin();\r\n this.toggleVideo();\r\n }\r\n\r\n renderRadioInputs() {\r\n let isAutoShipOnly = this.activeProduct.AutoShipOnly;\r\n let radioPurchaseElement = document.querySelector(\r\n '.pdp-info__radio.-purchase'\r\n );\r\n let radioSubscribeElement = document.querySelector(\r\n '.pdp-info__radio #purchaseType1'\r\n );\r\n\r\n radioPurchaseElement.style.display = 'block';\r\n\r\n if (isAutoShipOnly) {\r\n radioPurchaseElement.style.display = 'none';\r\n radioSubscribeElement.checked = true;\r\n }\r\n }\r\n\r\n resetSelectors(selectorsArg = this.selectors, nextIndex = 0) {\r\n let selectors = [...selectorsArg];\r\n\r\n for (nextIndex; nextIndex < selectors.length; nextIndex++) {\r\n const filteredProducts = this.filterProducts(\r\n this.variants,\r\n selectors\r\n );\r\n const filteredOptions = this.filterOptions(\r\n nextIndex,\r\n filteredProducts\r\n );\r\n\r\n // automatically select next option if there is only one value\r\n if (filteredOptions.length === 1) {\r\n const [nextKey] = selectors[nextIndex];\r\n const { FormattedValue: nextValue } = filteredOptions[0];\r\n\r\n selectors[nextIndex] = [nextKey, nextValue];\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return selectors.map((selector, index) => {\r\n const [key] = selector;\r\n return index > nextIndex ? [key, ''] : selector;\r\n });\r\n }\r\n\r\n setLoginLink() {\r\n if (this.loginurl) {\r\n const redirect = window.location.pathname;\r\n this.$loginpriceurl.attr(\r\n 'href',\r\n `${this.loginurl}?${redirectParam(redirect)}`\r\n );\r\n }\r\n }\r\n\r\n setupAccessibility() {\r\n this.$ariaLive.attr('aria-live', 'polite');\r\n }\r\n\r\n sendProductViewDatalayer() {\r\n productDetailsDatalayer.sendProductDetailView(\r\n this.currencyCode,\r\n this.activeGAProduct\r\n );\r\n }\r\n\r\n createSchemaMarkup() {\r\n // create product schema PDP page only\r\n let productname = this.product.DisplayName;\r\n let image = this.product.Images\r\n \r\n let imgUrl = image && image.length > 0 ? image[0].Url : '';\r\n\r\n let price;\r\n let description = $('div[data-region=\"information\"]:first').text();\r\n let currentUrl = window.location.href;\r\n \r\n let offersArray = [];\r\n \r\n if(this.variants){\r\n \r\n this.variants.forEach((offer) => {\r\n let offerObject = {\r\n '@type': 'Offer',\r\n priceCurrency: 'USD', \r\n price: offer.ListPrice, \r\n availability: 'https://schema.org/InStock', \r\n };\r\n \r\n \r\n offersArray.push(offerObject);\r\n });\r\n\r\n }\r\n \r\n \r\n var productSchema = {\r\n '@context': 'https://schema.org/',\r\n '@type': 'Product',\r\n name: productname,\r\n image: imgUrl, \r\n description: description,\r\n url: currentUrl,\r\n offers: offersArray, \r\n };\r\n \r\n var script = document.createElement('script');\r\n script.type = 'application/ld+json';\r\n script.text = JSON.stringify(productSchema);\r\n document.querySelector('head').appendChild(script);\r\n \r\n // create breadcrumb schema PDP page only\r\n var breadcrumbElements = document.querySelectorAll('.breadcrumbs li');\r\n var itemListElements = [];\r\n\r\n for (var i = 0; i < breadcrumbElements.length; i++) {\r\n var breadcrumbElement = breadcrumbElements[i];\r\n var listItem = {\r\n '@type': 'ListItem',\r\n position: i + 1,\r\n name: breadcrumbElement.innerText.trim(),\r\n };\r\n\r\n var link = breadcrumbElement.querySelector('a');\r\n if (link) {\r\n listItem.item = link.href;\r\n }\r\n \r\n itemListElements.push(listItem);\r\n }\r\n\r\n var breadcrumbListSchema = {\r\n '@context': 'https://schema.org/',\r\n '@type': 'BreadcrumbList',\r\n itemListElement: itemListElements,\r\n };\r\n\r\n var script = document.createElement('script');\r\n script.type = 'application/ld+json';\r\n script.text = JSON.stringify(breadcrumbListSchema);\r\n document.querySelector('head').appendChild(script);\r\n }\r\n\r\n setupHistoryState() {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const queryStr = urlParams.toString();\r\n\r\n if (queryStr) {\r\n const url = `${window.location.pathname}?${queryStr}`;\r\n let modifiedUrl = url.replace('//', '/');\r\n\r\n window.history.replaceState(null, '', modifiedUrl);\r\n this.login?.setLink();\r\n this.setLoginLink();\r\n }\r\n }\r\n\r\n setupInitialSelectors() {\r\n const initialSelectors = this.getSelectorsFromUrl();\r\n\r\n this.uiSelectorOptions.forEach(option => {\r\n const values = option.Values || [];\r\n if (values.length === 1) {\r\n initialSelectors[option.Name] = values[0].FormattedValue;\r\n }\r\n });\r\n\r\n return initialSelectors;\r\n }\r\n\r\n setupListeners() {\r\n this.$selectorBoxes.on('change', this.onSelectorChange.bind(this));\r\n window.addEventListener('popstate', evt => this.onPopState(evt));\r\n }\r\n\r\n setupSelectors() {\r\n let selectors = this.uiSelectorOptions.map(({ Name: name }) => {\r\n return [name, this.initialSelectors[name] || ''];\r\n });\r\n\r\n const currentIndex = selectors.filter(([, value]) => value).length;\r\n return this.resetSelectors(selectors, currentIndex);\r\n }\r\n\r\n toggleVideo() {\r\n if (this.activeProduct.Video) {\r\n this.$video.show();\r\n this.$videoIframe.attr('src', this.activeProduct.Video);\r\n } else {\r\n this.$video.hide();\r\n }\r\n }\r\n\r\n updateAddToCart() {\r\n this.addToCart?.setVariant({\r\n exceptionAmount: this.activeProduct?.ProductException\r\n ?.DiscountAmount,\r\n exceptionBehavior: this.activeProduct?.ProductException\r\n ?.PriceTreatment,\r\n variantId: this.activeProduct.VariantId ?? null,\r\n backOrdered: this.activeProduct?.BackOrdered,\r\n });\r\n }\r\n\r\n updatePrescription() {\r\n if (this.activeProduct.RxRequired) {\r\n this.$rx.slideDown('fast');\r\n this.$rxStamp.slideDown('fast');\r\n } else {\r\n this.$rx.slideUp('fast');\r\n this.$rxStamp.slideUp('fast');\r\n }\r\n }\r\n\r\n updateProduct() {\r\n this.filteredProducts = this.filterProducts(\r\n this.variants,\r\n this.selectors\r\n );\r\n }\r\n\r\n updatePromoLegend() {\r\n if (\r\n this.onInit &&\r\n this.isVariant &&\r\n this.activeProduct?.PromotionModels == undefined\r\n ) {\r\n this.$promoLegend.empty();\r\n } else if (\r\n this.onInit &&\r\n this.isVariant &&\r\n this.activeProduct?.PromotionModels.length == 0 &&\r\n (this.onInit &&\r\n this.isVariant &&\r\n this.activeProduct?.ProductException == null)\r\n ) {\r\n this.$promoLegend.empty();\r\n } else if (this.onInit && !this.isVariant) {\r\n this.$promoLegend.empty();\r\n } else {\r\n this.renderPromoLegend();\r\n }\r\n }\r\n\r\n updatePrice() {\r\n this.$price.hide().empty();\r\n this.$listPrice.hide().empty();\r\n this.$discountPrice.hide().empty();\r\n this.$loginPricePlaceholder.hide();\r\n const shouldHidePriceForProduct =\r\n !this.isAuthenticated &&\r\n this.product.Name.toLowerCase() ==\r\n 'simparica-trio-chewables-for-dogs';\r\n\r\n if (this.isVariant) {\r\n const hidePriceVariantsList =\r\n '23013157nf|23013158nf|23013159nf|23013160nf|23013161nf|23013162nf';\r\n const shouldHidePrice =\r\n !this.isAuthenticated &&\r\n hidePriceVariantsList.includes(\r\n this.activeProduct.VariantId.toLowerCase()\r\n );\r\n const listPrice = priceString(this.activeProduct.ListPrice);\r\n const exception = this.activeProduct.ProductException;\r\n\r\n if (\r\n exception &&\r\n !exception.IsUserCareClub &&\r\n exception.IsCareClub\r\n ) {\r\n //Add check for authentication + product name\r\n if (shouldHidePrice) {\r\n this.$loginPricePlaceholder.show();\r\n this.$price.html(listPrice);\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$price.show().html(listPrice);\r\n }\r\n return;\r\n }\r\n\r\n if (exception && typeof exception.PriceTreatment === 'number') {\r\n const discountPrice = priceString(exception.DiscountAmount);\r\n\r\n if (\r\n exception.PriceTreatment ===\r\n exceptionBehaviorValues.STRIKE_THROUGH\r\n ) {\r\n //Add check for authentication + product name\r\n if (shouldHidePrice) {\r\n this.$loginPricePlaceholder.show();\r\n this.$listPrice.html(discountPrice);\r\n this.$discountPrice.html(listPrice);\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$listPrice.show().html(discountPrice);\r\n this.$discountPrice.show().html(listPrice);\r\n }\r\n } else {\r\n //Add check for authentication + product name\r\n if (shouldHidePrice) {\r\n this.$loginPricePlaceholder.show();\r\n this.$price.html(discountPrice);\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$price.show().html(discountPrice);\r\n }\r\n }\r\n } else {\r\n //Add check for authentication + product name\r\n if (shouldHidePrice) {\r\n this.$loginPricePlaceholder.show();\r\n this.$price.html(listPrice);\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$price.show().html(listPrice);\r\n }\r\n }\r\n } else {\r\n const filteredPrices = this.filteredProducts.map(product => {\r\n //const discountPrice = product.ProductException?.DiscountAmount ?? null;\r\n //return typeof discountPrice === 'number' ? discountPrice : product.ListPrice;\r\n return product.ListPrice;\r\n });\r\n\r\n const priceLow = Math.min(...filteredPrices);\r\n const priceHigh = Math.max(...filteredPrices);\r\n const priceLowFormatted = priceString(priceLow);\r\n const priceHighFormatted = priceString(priceHigh);\r\n\r\n if (priceLow !== priceHigh) {\r\n if (shouldHidePriceForProduct) {\r\n this.$loginPricePlaceholder.show();\r\n this.$price.html(\r\n `${priceLowFormatted} - ${priceHighFormatted}`\r\n );\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$price\r\n .show()\r\n .html(`${priceLowFormatted} - ${priceHighFormatted}`);\r\n }\r\n } else {\r\n if (shouldHidePriceForProduct) {\r\n this.$loginPricePlaceholder.show();\r\n this.$price.html(priceLowFormatted);\r\n } else {\r\n this.$loginPricePlaceholder.hide();\r\n this.$price.show().html(priceLowFormatted);\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateRenderedOptions() {\r\n if (\r\n this.activeSelectors &&\r\n Array.isArray(this.activeSelectors) &&\r\n this.activeSelectors.length\r\n ) {\r\n let filteredProducts = [...this.variants];\r\n\r\n this.activeSelectors.forEach((option, index) => {\r\n let selectors = [...this.activeSelectors];\r\n selectors.length = index;\r\n\r\n filteredProducts = this.filterProducts(\r\n filteredProducts,\r\n selectors\r\n );\r\n const options = this.filterOptions(index, filteredProducts);\r\n\r\n this.renderNextOption(index, options);\r\n });\r\n\r\n this.updateSelectorValues();\r\n }\r\n }\r\n\r\n updateState() {\r\n this.updateProduct();\r\n\r\n // update state based off of new active product\r\n this.updatePrescription();\r\n this.setLoginLink();\r\n this.updatePrice();\r\n this.updateSelectors();\r\n this.updatePromoLegend();\r\n this.renderRadioInputs();\r\n this.onInit = true;\r\n\r\n if (this.#cachedProduct.VariantId !== this.activeProduct.VariantId) {\r\n this.updateSlider();\r\n }\r\n }\r\n\r\n updateSelectors(nextActiveIndex = this.activeSelectors.length) {\r\n this.updateRenderedOptions();\r\n\r\n if (!this.isVariant) {\r\n // render options for next active selector\r\n const filteredOptions = this.filterOptions(\r\n nextActiveIndex,\r\n this.filteredProducts\r\n );\r\n\r\n if (filteredOptions.length) {\r\n this.renderNextOption(nextActiveIndex, filteredOptions);\r\n }\r\n }\r\n\r\n this.updateSelectorValues();\r\n }\r\n\r\n updateSelectorValues() {\r\n // set all selectors initial value\r\n this.selectors.forEach((selector, index) => {\r\n const [, value] = selector;\r\n this.$selectorBoxes.eq(index).val(value);\r\n });\r\n }\r\n\r\n updateSlider() {\r\n if (this.slider) {\r\n this.slider.updateSlides(\r\n this.activeProduct.RxRequired,\r\n this.slides\r\n );\r\n }\r\n }\r\n}\r\n\r\n$(() => {\r\n const el = document.getElementById('pdpSelector');\r\n const dataEl = document.getElementById('pdpSelectorData');\r\n\r\n if (el && dataEl) {\r\n const data = JSON.parse(dataEl.innerHTML);\r\n if (data) {\r\n const $el = $(el);\r\n new PdpSelector({\r\n $el,\r\n data,\r\n });\r\n }\r\n }\r\n});\r\n","import template, { mainSlide, navArrow, navSlide, sliderModal } from './templates/pdp-slider';\r\n\r\nconst URL_IMAGE_NOT_AVAILABLE = '/images-2/image-not-available.svg';\r\n\r\nconst parsedTemplate = $.parseHTML(template);\r\nconst parsedModal = $.parseHTML(sliderModal);\r\n\r\nexport default class PdpSlider {\r\n /**\r\n * @typedef {{ url: string, thumbnail: string?, alt: string }} Slide\r\n * \r\n * @param {Object<>} $el // JQuery element instance \r\n * @param {Object<string,string>} labels // object of label strings\r\n * @param {boolean} rx // prescription icon should display\r\n * @param {Array<Slide>} slides // array of image objects\r\n * @param {boolean} useTempalte // render template markup\r\n */\r\n constructor({ $el, labels, rx, slides, useTemplate }) {\r\n if(useTemplate) {\r\n $el.replaceWith(parsedTemplate);\r\n }\r\n \r\n this.$el = useTemplate ? $(parsedTemplate) : $el;\r\n\r\n // main slider labels\r\n this.$favoriteLabel = this.$el.find('[data-label=\"favorite\"]');\r\n this.$loaderLabel = this.$el.find('[data-label=\"loader\"]');\r\n this.$zoomLabel = this.$el.find('[data-label=\"zoom\"]');\r\n\r\n // main slider regions\r\n this.$main = this.$el.find('[data-region=\"main\"]');\r\n this.$nav = this.$el.find('[data-region=\"nav\"]');\r\n this.$loader = this.$el.find('[data-region=\"loader\"]');\r\n this.$rx = this.$el.find('[data-region=\"rx\"]');\r\n\r\n this.$modal = $(parsedModal);\r\n\r\n // modal labels\r\n this.$modalLoaderLabel = this.$modal.find('[data-label=\"loader\"]');\r\n\r\n // modal regions\r\n this.$modalHeading = this.$modal.find('[data-region=\"modalHeading\"]');\r\n this.$modalImage = this.$modal.find('[data-region=\"modalImage\"]');\r\n this.$modalLoader = this.$modal.find('[data-region=\"modalLoader\"]');\r\n\r\n // main controls (null until they are rendered)\r\n this.$navControl = null;\r\n this.$zoomControl = null;\r\n\r\n this.rx = !!rx;\r\n this.slides = slides || [ ...this.$main.get(0)?.children ] || [];\r\n this.labels = labels || null;\r\n\r\n // need to track this id since bootstrap modal method breaks without\r\n this.modalId = this.$modal.attr('id');\r\n\r\n if(useTemplate) {\r\n this.renderSlides();\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n /**\r\n * remove slick instance from all sliders\r\n * - can be used to update images and reset the slider while avoiding duplicate slick initializations\r\n */\r\n destroy() {\r\n this.$main.slick('unslick');\r\n this.$nav.slick('unslick');\r\n\r\n this.$main.empty();\r\n this.$nav.empty();\r\n }\r\n\r\n init() {\r\n // add modal element to document\r\n $('body').append(this.$modal);\r\n\r\n this.renderLabels();\r\n // setup the rest of the slider\r\n this.setup();\r\n\r\n // setup static listeners\r\n this.setupListeners();\r\n\r\n if(this.rx) this.$rx.show();\r\n else this.$rx.hide();\r\n }\r\n\r\n onNavClick(evt) {\r\n const $target = $(evt.currentTarget);\r\n const index = $target.closest('[data-slick-index]').data('slick-index');\r\n this.$main.slick('slickGoTo', index);\r\n }\r\n\r\n onZoomClick() {\r\n const index = this.$main.slick('slickCurrentSlide');\r\n const currentSlide = this.slides[index];\r\n\r\n this.renderModalInfo(currentSlide);\r\n\r\n $(`#${this.modalId}`).modal();\r\n }\r\n\r\n renderLabels() {\r\n if(this.labels) {\r\n this.$favoriteLabel.html(this.labels.FavoriteSrText);\r\n this.$loaderLabel.html(this.labels.LoaderSrText);\r\n this.$zoomLabel.html(this.labels.ZoomSrText);\r\n this.$modalLoaderLabel.html(this.labels.LoaderSrText);\r\n }\r\n }\r\n\r\n renderModalInfo(currentSlide) {\r\n const src = currentSlide.url || currentSlide.thumbnail;\r\n\r\n // lazy load image while showing loading spinner\r\n this.$modalLoader.show();\r\n this.$modalImage.hide();\r\n const img = new Image();\r\n img.onload = () => {\r\n this.$modalLoader.hide();\r\n this.$modalImage.show();\r\n };\r\n img.src = src;\r\n\r\n this.$modalHeading.html(currentSlide.alt);\r\n this.$modalImage.attr({\r\n alt: currentSlide.alt,\r\n src\r\n });\r\n\r\n this.$modal.one('hidden.bs.modal', () => this.$zoomControl.focus());\r\n }\r\n\r\n /**\r\n * render slides from markup templates\r\n */\r\n renderSlides() {\r\n let mainSlides = '';\r\n let navSlides = '';\r\n\r\n this.slides.forEach((slide, index) => {\r\n mainSlides += mainSlide(slide);\r\n navSlides += navSlide({\r\n ...slide,\r\n isButton: this.slides.length > 1,\r\n srText: `Go to slide ${index + 1}`\r\n });\r\n });\r\n\r\n this.$main.html($.parseHTML(mainSlides));\r\n this.$nav.html($.parseHTML(navSlides));\r\n }\r\n\r\n /**\r\n * initialize slick and toggle thumbnail nav as needed\r\n */\r\n setup() {\r\n this.$main.slick({\r\n arrows: false,\r\n asNavFor: this.$nav.get(),\r\n rows: 0\r\n });\r\n this.$nav.slick({\r\n asNavFor: this.$main.get(),\r\n draggable: false,\r\n infinite: true,\r\n nextArrow: navArrow(),\r\n prevArrow: null,\r\n slidesToShow: this.slides.length < 3 ? this.slides.length : 3,\r\n vertical: true,\r\n responsive: [\r\n {\r\n breakpoint: 992,\r\n settings: {\r\n slidesToShow: 3,\r\n vertical: false\r\n }\r\n }\r\n ]\r\n });\r\n\r\n this.updateSlickTrack();\r\n this.$nav.on('breakpoint', () => this.setupNavListeners());\r\n this.setupNavListeners();\r\n }\r\n\r\n updateSlickTrack() {\r\n if (this.slides.length <= 3) {\r\n let slickTrack = this.$el.find('.slick-track')[0];\r\n $(slickTrack).addClass('modify');\r\n }\r\n }\r\n\r\n setupListeners() {\r\n this.$zoomControl = this.$el.find('[data-control=\"zoom\"]');\r\n this.$zoomControl.on('click', this.onZoomClick.bind(this));\r\n }\r\n\r\n startLoading () {\r\n // prevent jumping\r\n this.$main.height(this.$main.height());\r\n this.$nav.height(this.$nav.height());\r\n this.$loader.addClass('-loading');\r\n }\r\n\r\n stopLoading () {\r\n this.$main.removeAttr('style');\r\n this.$nav.removeAttr('style');\r\n this.$loader.removeClass('-loading');\r\n }\r\n\r\n setupNavListeners() {\r\n this.$navControl = this.$el.find('[data-control=\"nav\"]');\r\n this.$navControl.on('click', this.onNavClick.bind(this));\r\n }\r\n\r\n /**\r\n * update slides and reinitialize slick\r\n * @param {boolean} rx // prescription icon should display\r\n * @param {Array<Slide>} slides // array of slide objects\r\n */\r\n async updateSlides(rx, slides) {\r\n if(!slides || slides.length < 1) {\r\n slides = [{\r\n url: URL_IMAGE_NOT_AVAILABLE,\r\n thumbnail: URL_IMAGE_NOT_AVAILABLE,\r\n alt: 'Image not available'\r\n }];\r\n }\r\n\r\n this.rx = !!rx;\r\n if(this.rx) this.$rx.fadeIn('fast')\r\n else this.$rx.fadeOut('fast')\r\n\r\n this.slides = slides;\r\n\r\n this.startLoading();\r\n this.destroy();\r\n\r\n await this.loadSlides();\r\n\r\n this.renderSlides();\r\n this.setup();\r\n\r\n // make hidden until slick slider overrides inline style\r\n this.$main.css('visibility', 'hidden');\r\n this.$nav.css('visibility', 'hidden');\r\n\r\n setTimeout(() => {\r\n // set position after 200 ms because of incorrect image calculations\r\n this.$nav.slick('setPosition');\r\n this.stopLoading();\r\n this.$main.addClass('-loaded');\r\n }, 200);\r\n }\r\n\r\n /**\r\n * load slides before trying to setup slick\r\n * - prevents slick slider from miscalculating heights/widths when initialized\r\n * @returns {Promise}\r\n */\r\n async loadSlides() {\r\n return new Promise(resolve => {\r\n // array matching slides array indicating which images have loaded\r\n const loadedSlides = this.slides.map(() => false);\r\n\r\n // img.onload event handler\r\n const slideLoaded = index => {\r\n loadedSlides[index] = true;\r\n\r\n // if all items in the loadedSlides array is true, then all images are finished\r\n if(loadedSlides.every(isLoaded => isLoaded)) {\r\n resolve()\r\n }\r\n };\r\n\r\n this.slides.forEach((slide, index) => {\r\n const img = new Image();\r\n img.onload = () => slideLoaded(index);\r\n img.src = slide.thumbnail;\r\n });\r\n });\r\n }\r\n}\r\n\r\n$(() => {\r\n $('.js-pdp-slider').each(function() {\r\n const $el = $(this);\r\n new PdpSlider({\r\n $el\r\n });\r\n });\r\n})\r\n","import template from './pdp-add-to-cart.html';\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"pdp-info__cart\\\"> <div class=\\\"pdp-info__btn-wrapper\\\"> <button class=\\\"pdp-info__btn btn btn-sky\\\" type=\\\"button\\\" aria-live=\\\"polite\\\" data-control=\\\"cart\\\"> <span class=\\\"position-relative\\\" role=\\\"text\\\"> <span data-label=\\\"cart\\\"></span> </span> </button> <div class=\\\"pdp-info__alert\\\" aria-live=\\\"assertive\\\"> <p class=\\\"pdp-info__success\\\" data-region=\\\"success\\\"></p> <p class=\\\"pdp-info__error\\\" data-region=\\\"error\\\"></p> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","import template from './pdp-add-to-cart.html';\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"pdp-info__outofstock__label -outofstock\\\"> <div class=\\\"out-of-stock-flag\\\" data-region=\\\"outofstockregion\\\"> <span class=\\\"pdp-info__outofstock__label__icon\\\" data-label=\\\"outofstockicon\\\"></span> <span data-label=\\\"outofstock\\\"></span> </div> </div> <div class=\\\"pdp-info__radio -subscribe\\\"> <div data-region=\\\"radioSubscribe\\\"> <div class=\\\"form-check pl-0\\\"> <input class=\\\"form-check-input\\\" type=\\\"radio\\\" name=\\\"autoshipFrequency\\\" id=\\\"purchaseType1\\\" value=\\\"7\\\" data-control=\\\"radio\\\" checked=\\\"checked\\\"> <label class=\\\"form-check-label\\\" for=\\\"purchaseType1\\\" data-label=\\\"subscribe\\\"> </label> </div> </div> </div> <div class=\\\"pdp-info__radio -purchase\\\"> <div data-region=\\\"radioPurchase\\\"> <div class=\\\"form-check pl-0\\\"> <input class=\\\"form-check-input\\\" type=\\\"radio\\\" name=\\\"autoshipFrequency\\\" id=\\\"purchaseType2\\\" value=\\\"0\\\" data-control=\\\"radio\\\"> <label class=\\\"form-check-label\\\" for=\\\"purchaseType2\\\" data-label=\\\"purchase\\\"> </label> </div> </div> </div> <div class=\\\"pdp-info__cart\\\"> <div class=\\\"pdp-info__btn-wrapper\\\" data-region=\\\"cartBtn\\\"> <button id=\\\"btnAddToCart\\\" class=\\\"pdp-info__btn btn btn-sky clsBtnAddToCart\\\" type=\\\"button\\\" aria-live=\\\"polite\\\" data-control=\\\"cart\\\"> <span class=\\\"position-relative clsBtnAddToCart\\\" role=\\\"text\\\"> <span class=\\\"pdp-info__loader\\\"> <span data-placeholder=\\\"loader\\\"></span> </span> <span data-label=\\\"cart\\\" class=\\\"clsBtnAddToCart\\\"></span> </span> </button> <div class=\\\"pdp-info__alert\\\" aria-live=\\\"assertive\\\"> <p class=\\\"pdp-info__success\\\" data-region=\\\"success\\\"></p> <p class=\\\"pdp-info__error\\\" data-region=\\\"error\\\"></p> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","import baseTemplate from './pdp-freq-bought-item.html';\r\n\r\n\r\n/**\r\n * generate a promo legend element\r\n * @param {string} id // id string for attribute\r\n * @param {string|number} index // index to indicate which selector this is\r\n * @param {string} name // name string for attribute\r\n * @param {string} desc // descition string for attribute\r\n * @param {string} iconURL // icon url\r\n * @returns {string} // html string representation of a main slide\r\n */\r\n const promoLegend = ({ id, index, name, desc, iconURL }) => `\r\n <div class=\"promo-pill\" data-index=\"${index}\" data-id=\"${id}\" data-toggle=\"popover-hover\" data-target=\"tooltip1\" data-placement=\"top\" title=\"${desc}\">\r\n <img class=\"promo-pill__icon\" src=\"${iconURL}\" alt=\"${name} icon\"/>\r\n <span data-region=\"name\">${name}</span>\r\n <span class=\"promo-pill__chervon fa fa-chevron-down\" aria-hidden=\"true\"></span>\r\n <div id=\"tooltip1\" style=\"display: none;\" data-region=\"description\">${desc}</div>\r\n </div>\r\n`;\r\n\r\n/**\r\n * generate a selector <select> box element\r\n * @param {string} id // id string for attribute\r\n * @param {string|number} index // index to indicate which selector this is\r\n * @param {string} name // name string for attribute\r\n * @returns {string} // html string representation of a main slide\r\n */\r\nconst selectBox = ({ id, index, name }) => `\r\n <div class=\"pdp-info__selector\" data-region=\"selector\">\r\n <div class=\"select-box\">\r\n <select class=\"select-box__select\" name=\"${name}\" id=\"${id}\" data-control=\"selector\" data-index=\"${index}\">\r\n </select>\r\n </div>\r\n </div>\r\n`;\r\n\r\n/**\r\n * generate a selector <label> element\r\n * @param {string} id // id string to bind to <select> box (should match a corresponding selectBox)\r\n * @param {string} label // text to display\r\n * @returns {string} // html string representation of a main slide\r\n */\r\nconst selectLabel = ({ id, label }) => `\r\n <label class=\"pdp-info__label\" for=\"${id}\" data-region=\"selectorLabel\">\r\n ${label}\r\n </label>\r\n`;\r\n\r\n/**\r\n * generate a selector <select> box element\r\n * @param {string} disabled // indicate if option is disabled\r\n * @param {string} name // text to display\r\n * * @param {string} value // value string for attribute\r\n * @returns {string} // html string representation of a main slide\r\n */\r\nconst selectOption = ({ disabled, name, value } = { disabled: false, name: '', value: '' }) => `\r\n <option\r\n value=\"${value}\"\r\n ${disabled ? ' disabled' : ''}>\r\n ${name}\r\n </option>\r\n`;\r\n\r\nconst mainImage = ({ thumbnail, alt }) => `\r\n <div class=\"product-bundle-modal__image\">\r\n <img\r\n class=\"pdp-slider__main-slide\"\r\n src=\"${thumbnail}\"\r\n alt=\"${alt}\" />\r\n </div>\r\n`;\r\n\r\nconst nextStep = ({ index }) => `\r\n<button data-control=\"next-step\" data-index=\"${index}\" class=\"btn btn-sky product-bundle-modal__btn\">Continue</button>\r\n`;\r\n\r\nconst backStep = ({ index }) => `\r\n<button data-control=\"next-step\" data-index=\"${index}\" class=\"btn btn-sky product-bundle-modal__btn\">Continue</button>\r\n`;\r\n\r\nexport {\r\n selectBox,\r\n selectLabel,\r\n selectOption,\r\n promoLegend,\r\n mainImage,\r\n nextStep,\r\n backStep\r\n};\r\n\r\nexport default baseTemplate;\r\n","// Module\nvar code = \"<div class=\\\"container product-bundle-modal-item\\\" data-region=\\\"productBundleItem\\\"> <div class=\\\"row\\\"> <div class=\\\"col-12 mb-4 text-center\\\"> <h2 class=\\\"pdp-info__heading\\\" data-region=\\\"modal-title\\\"> <span data-label=\\\"productBunldeTitle\\\"></span> </h2> </div> <div class=\\\"col-12 d-md-none mt-2\\\"> <h2 class=\\\"pdp-info__heading\\\" data-region=\\\"productName\\\"> </h2> <p data-region=\\\"brandName\\\"> </p> </div> <div class=\\\"col-12 col-md-4\\\"> <div data-placeholder=\\\"slider\\\"></div> </div> <div class=\\\"col-12 col-md-8\\\" data-a11y=\\\"ariaLive\\\"> <div class=\\\"pdp-info mb-0\\\"> <h2 class=\\\"pdp-info__heading -desktop\\\" data-region=\\\"productName\\\"> </h2> <p class=\\\"d-none d-md-block mb-1\\\" data-region=\\\"brandName\\\"> </p> <div style=\\\"display:none\\\" data-region=\\\"prescriptionStamp\\\"> <p class=\\\"icon-stamp my-0 py-2\\\"> <span class=\\\"icon-stamp__icon\\\" aria-hidden=\\\"true\\\"> <img src=\\\"/images-2/prescription.svg\\\" alt=\\\"prescription icon\\\"> </span> <span class=\\\"icon-stamp__text\\\"> * Prescription Required </span> </p> </div> <div class=\\\"pdp-info__promo-legend\\\" data-placeholder=\\\"promoLegend\\\"> </div> <div class=\\\"pdp-info__grid\\\"> <div class=\\\"pdp-info__label -price\\\" data-label=\\\"price\\\"> </div> <div class=\\\"pdp-info__selector -price\\\"> <p class=\\\"pdp-info__price\\\" data-region=\\\"price\\\"> </p> <p class=\\\"pdp-info__price -sell\\\" data-region=\\\"listPrice\\\"> </p> <p class=\\\"pdp-info__price -list\\\" data-region=\\\"discountPrice\\\"> </p> </div> <div data-placeholder=\\\"selectors\\\"></div> <label class=\\\"pdp-info__label -quantity\\\" for=\\\"pdpQuantity\\\" data-label=\\\"quantity\\\"> </label> <div class=\\\"pdp-info__selector -quantity mb-3\\\"> <div data-placeholder=\\\"quantity\\\"></div> </div> <div class=\\\"pdp-info__label\\\"></div> <div class=\\\"\\\"> <div data-placeholder=\\\"cart\\\"></div> <div class=\\\"nextProduct\\\" data-placeholder=\\\"next-product\\\" style=\\\"display:none\\\"> <button data-control=\\\"next-step\\\" class=\\\"btn btn-sky product-bundle-modal__btn\\\" disabled=\\\"disabled\\\"><span data-label=\\\"next-step-btn\\\"></span></button> </div> </div> </div> </div> <div data-placeholder=\\\"login\\\"></div> </div> <div class=\\\"col-12 product-bundle-modal__pager text-center\\\"> <button class=\\\"product-bundle-modal__backbtn\\\" data-control=\\\"backBtn\\\"><</button> <span data-control=\\\"pageNumber\\\"></span> of <span data-control=\\\"pageTotal\\\"></span> <span data-label=\\\"navProducts\\\"></span> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","import template from './pdp-freq-bought.html';\r\nexport default template;\r\n","// Module\nvar code = \"<div data-placeholder=\\\"relatedBundle\\\"> <div class=\\\"container\\\"> <div class=\\\"row\\\"> <div class=\\\"col-md-12\\\"> <div class=\\\"product-bundle__spinner\\\"> <div class=\\\"bundle-spinner dead\\\"> <div class=\\\"lds-ring\\\"><div></div><div></div><div></div><div></div></div> </div> </div> <div class=\\\"product-bundle\\\" id=\\\"product-bundle\\\" data-region=\\\"productBundle\\\" data-dataSourceId=\\\"@Model.Id\\\"> <h2 class=\\\"product-bundle__title\\\" data-label=\\\"FrequentlyBoughtTogether\\\"></h2> <div class=\\\"product-bundle__wrapper\\\" id=\\\"product-bundle__wrapper\\\"> <div class=\\\"row\\\"> <div class=\\\"col\\\"> <div class=\\\"d-flex product-bundle__imgitems\\\" id=\\\"product-bundle__imgitems\\\"> </div> </div> <div class=\\\"col-md-auto product-bundle__list__wrapper\\\"> <div class=\\\"product-bundle__list vca-form\\\" id=\\\"product-bundle__list\\\"> </div> <div class=\\\"product-bundle__footer\\\"> <div class=\\\"mb-3 d-flex align-items-center\\\"> <span class=\\\"product-bundle__total mr-3\\\" data-label=\\\"estTotal\\\"></span> <span class=\\\"product-bundle__total__amount\\\"></span> </div> <button id=\\\"bundle-total\\\" class=\\\"bundle-modal--trigger btn btn-sky\\\" data-label=\\\"AddItemsToCart\\\"></button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div class=\\\"vca-modal modal fade product-bundle-modal\\\" tabindex=\\\"-1\\\" role=\\\"dialog\\\" aria-hidden=\\\"true\\\" id=\\\"bundle-modal\\\"> <div class=\\\"vca-modal__dialog modal-dialog product-bundle-modal__dialog\\\" role=\\\"document\\\"> <div class=\\\"vca-modal__content modal-content\\\"> <button type=\\\"button\\\" class=\\\"vca-modal__close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"> <span class=\\\"vca-modal__close-icon\\\" aria-hidden=\\\"true\\\"></span> </button> <div class=\\\"vca-modal__body modal-body pb-0\\\" data-label=\\\"body\\\"> <div class=\\\"product-bundle-modal__loader js-bundle-loader\\\" data-region=\\\"productBundleSpinner\\\" aria-atomic=\\\"true\\\" aria-live=\\\"assertive\\\"> <span class=\\\"sr-only\\\" data-label=\\\"loader\\\"></span> <img src=\\\"/images-2/VCA_LoadingDog.gif\\\" aria-hidden=\\\"true\\\" alt=\\\"loader image\\\"> </div> <div id=\\\"product-bundle-modal-content\\\" class=\\\"product-bundle-modal__content\\\" data-region=\\\"bundleProducts\\\"> </div> </div> </div> </div> </div>\";\n// Exports\nmodule.exports = code;","import baseTemplate from './pdp-info-tabs.html';\r\n\r\nexport default baseTemplate;\r\n","// Module\nvar code = \"<div class=\\\"bg-color-vca-whisper py-md-5\\\"> <div class=\\\"container\\\"> <div class=\\\"row\\\"> <div class=\\\"pdp-info-tabs product-bundle__pdp-info-tabs\\\"> <div class=\\\"d-lg-none\\\" id=\\\"pdpInfoTabs_Mobile\\\"> <ul class=\\\"pdp-info-tabs__nav nav\\\" role=\\\"tablist\\\"> <li class=\\\"pdp-info-tabs__nav-item nav-item\\\" data-region=\\\"informationContainer\\\"> <button type=\\\"button\\\" class=\\\"pdp-info-tabs__nav-link collapsed\\\" id=\\\"infoToggle_mobile\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#infoContent_mobile\\\" aria-controls=\\\"infoContent_mobile\\\" aria-expanded=\\\"false\\\" data-control=\\\"information\\\"> <h2 class=\\\"pdp-info-tabs__nav-link-text\\\" data-label=\\\"information\\\"> </h2> </button> <div class=\\\"collapse\\\" id=\\\"infoContent_mobile\\\" aria-labelledby=\\\"infoToggle_mobile\\\" data-parent=\\\"#pdpInfoTabs_Mobile\\\"> <div class=\\\"pdp-info-tabs__collapse-content\\\" data-region=\\\"information\\\"> </div> </div> </li> <li class=\\\"pdp-info-tabs__nav-item nav-item\\\" data-region=\\\"ingredientsContainer\\\"> <button type=\\\"button\\\" class=\\\"pdp-info-tabs__nav-link collapsed\\\" id=\\\"ingredientsToggle_mobile\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#ingredientsContent_mobile\\\" aria-controls=\\\"ingredientsContent_mobile\\\" aria-expanded=\\\"false\\\" data-control=\\\"ingredients\\\"> <h2 class=\\\"pdp-info-tabs__nav-link-text\\\" data-label=\\\"ingredients\\\"> </h2> </button> <div class=\\\"collapse\\\" id=\\\"ingredientsContent_mobile\\\" aria-labelledby=\\\"ingredientsToggle_mobile\\\" data-parent=\\\"#pdpInfoTabs_Mobile\\\"> <div class=\\\"pdp-info-tabs__collapse-content\\\" data-region=\\\"ingredients\\\"> </div> </div> </li> <li class=\\\"pdp-info-tabs__nav-item nav-item\\\" data-region=\\\"speciesContainer\\\"> <button type=\\\"button\\\" class=\\\"pdp-info-tabs__nav-link collapsed\\\" id=\\\"pdpTabToggle_2_Mobile\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#pdpTabSection_2_Mobile\\\" aria-controls=\\\"pdpTabSection_2_Mobile\\\" aria-expanded=\\\"false\\\" data-control=\\\"species\\\"> <h2 class=\\\"pdp-info-tabs__nav-link-text\\\" data-label=\\\"species\\\"> </h2> </button> <div class=\\\"collapse\\\" id=\\\"pdpTabSection_2_Mobile\\\" aria-labelledby=\\\"pdpTabToggle_2_Mobile\\\" data-parent=\\\"#pdpInfoTabs_Mobile\\\"> <div class=\\\"pdp-info-tabs__collapse-content\\\" data-region=\\\"species\\\"> </div> </div> </li> <li class=\\\"pdp-info-tabs__nav-item nav-item\\\" data-region=\\\"usageContainer\\\"> <button type=\\\"button\\\" class=\\\"pdp-info-tabs__nav-link collapsed\\\" id=\\\"pdpTabToggle_3_Mobile\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#pdpTabSection_3_Mobile\\\" aria-controls=\\\"pdpTabSection_3_Mobile\\\" aria-expanded=\\\"false\\\" data-control=\\\"usage\\\"> <h2 class=\\\"pdp-info-tabs__nav-link-text\\\" data-label=\\\"usage\\\"> </h2> </button> <div class=\\\"collapse\\\" id=\\\"pdpTabSection_3_Mobile\\\" aria-labelledby=\\\"pdpTabToggle_3_Mobile\\\" data-parent=\\\"#pdpInfoTabs_Mobile\\\"> <div class=\\\"pdp-info-tabs__collapse-content\\\" data-region=\\\"usage\\\"> </div> </div> </li> </ul> </div> <div class=\\\"d-none d-lg-flex\\\" id=\\\"pdpInfoTabs_Desktop\\\"> <ul class=\\\"pdp-info-tabs__nav nav\\\" role=\\\"tablist\\\"> <li class=\\\"pdp-info-tabs__nav-item nav-item\\\" data-region=\\\"informationContainer\\\"> <button type=\\\"button\\\" class=\\\"pdp-info-tabs__nav-link nav-link\\\" id=\\\"infoToggle_desktop\\\" data-toggle=\\\"tab\\\" data-target=\\\"#infoContent_desktop\\\" role=\\\"tab\\\" aria-controls=\\\"infoContent_desktop\\\" aria-selected=\\\"false\\\" data-control=\\\"information\\\"> <h2 class=\\\"pdp-info-tabs__nav-link-text\\\" data-label=\\\"information\\\"> </h2> </button> </li> <li class=\\\"pdp-info-tabs__nav-item nav-item\\\" data-region=\\\"ingredientsContainer\\\"> <button type=\\\"button\\\" class=\\\"pdp-info-tabs__nav-link nav-link\\\" id=\\\"ingredientsToggle_desktop\\\" data-toggle=\\\"tab\\\" data-target=\\\"#ingredientsContent_desktop\\\" role=\\\"tab\\\" aria-controls=\\\"ingredientsContent_desktop\\\" aria-selected=\\\"false\\\" data-control=\\\"ingredients\\\"> <h2 class=\\\"pdp-info-tabs__nav-link-text\\\" data-label=\\\"ingredients\\\"> </h2> </button> </li> <li class=\\\"pdp-info-tabs__nav-item nav-item\\\" data-region=\\\"speciesContainer\\\"> <button type=\\\"button\\\" class=\\\"pdp-info-tabs__nav-link nav-link\\\" id=\\\"speciesToggle_desktop\\\" data-toggle=\\\"tab\\\" data-target=\\\"#speciesContent_desktop\\\" role=\\\"tab\\\" aria-controls=\\\"speciesContent_desktop\\\" aria-selected=\\\"false\\\" data-control=\\\"species\\\"> <h2 class=\\\"pdp-info-tabs__nav-link-text\\\" data-label=\\\"species\\\"> </h2> </button> </li> <li class=\\\"pdp-info-tabs__nav-item nav-item\\\" data-region=\\\"usageContainer\\\"> <button type=\\\"button\\\" class=\\\"pdp-info-tabs__nav-link nav-link\\\" id=\\\"usageToggle_desktop\\\" data-toggle=\\\"tab\\\" data-target=\\\"#usageContent_desktop\\\" role=\\\"tab\\\" aria-controls=\\\"usageContent_desktop\\\" aria-selected=\\\"false\\\" data-control=\\\"usage\\\"> <h2 class=\\\"pdp-info-tabs__nav-link-text\\\" data-label=\\\"usage\\\"> </h2> </button> </li> </ul> <div class=\\\"pdp-info-tabs__tab-content tab-content\\\"> <div class=\\\"pdp-info-tabs__pane tab-pane fade\\\" id=\\\"infoContent_desktop\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"infoToggle_desktop\\\" data-region=\\\"information\\\"> </div> <div class=\\\"pdp-info-tabs__pane tab-pane fade\\\" id=\\\"ingredientsContent_desktop\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"ingredientsToggle_desktop\\\" data-region=\\\"ingredients\\\"> </div> <div class=\\\"pdp-info-tabs__pane tab-pane fade\\\" id=\\\"speciesContent_desktop\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"speciesToggle_desktop\\\" data-region=\\\"species\\\"> </div> <div class=\\\"pdp-info-tabs__pane tab-pane fade\\\" id=\\\"usageContent_desktop\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"usageToggle_desktop\\\" data-region=\\\"usage\\\"> </div> </div> </div> </div> </div> </div> </div>\";\n// Exports\nmodule.exports = code;","import baseTemplate from \"./pdp-login.html\";\r\n\r\nexport default baseTemplate;\r\n","// Module\nvar code = \"<div class=\\\"pdp-login\\\"> <div class=\\\"pdp-login__logo\\\"> <div class=\\\"my-vca\\\"> <?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?> <svg width=\\\"137px\\\" height=\\\"60px\\\" viewBox=\\\"0 0 137 60\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"> <title>VCA-myVCA-logo-white</title> <g id=\\\"myVCA\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\"> <g id=\\\"VCA---myVCA\\\" transform=\\\"translate(-93.000000, -191.000000)\\\" fill-rule=\\\"nonzero\\\"> <g id=\\\"VCA-myVCA-logo-white\\\" transform=\\\"translate(93.000000, 191.000000)\\\"> <path d=\\\"M136.120192,10.1176989 L131.540562,5.53659418 L124.861935,12.2173719 L124.861935,12.2173719 L131.525297,18.8828793 L136.104927,14.3017746 C136.674068,13.7557108 136.997102,13.0018411 137,12.2129765 C137.002859,11.4241119 136.685334,10.6679037 136.120192,10.1176989 L136.120192,10.1176989 Z\\\" id=\\\"Path\\\" fill=\\\"#EB6B4B\\\"></path> <path d=\\\"M118.19094,5.51368866 L113.61131,10.0947934 C113.060824,10.6410008 112.751186,11.3844967 112.751186,12.1601081 C112.751186,12.9357195 113.060824,13.6792154 113.61131,14.2254228 L118.19094,18.8065275 L124.861935,12.2173719 L118.19094,5.51368866 Z\\\" id=\\\"Path\\\" fill=\\\"#A4589B\\\"></path> <path d=\\\"M126.823543,0.818056318 C126.30344,0.294444537 125.596021,0 124.858119,0 C124.120216,0 123.412797,0.294444537 122.892694,0.818056318 L118.19094,5.51368866 L124.861935,12.2173719 L131.525297,5.55186453 L126.823543,0.818056318 Z\\\" id=\\\"Path\\\" fill=\\\"#3CBDDC\\\"></path> <path d=\\\"M31.6206642,16.9052608 L38.4366805,16.9052608 C38.6062807,16.9014217 38.7596385,17.0057386 38.8183163,17.164965 L45.3366566,34.664785 L45.4435147,34.664785 L51.4809938,17.1802354 C51.5392992,17.015269 51.6953458,16.9052608 51.8702624,16.9052608 L58.0222322,16.9052608 C58.3920187,16.9067779 58.7377033,17.0891437 58.9477159,17.3936078 C59.1577285,17.6980719 59.2054758,18.0860807 59.0755472,18.432404 L49.4735892,42.7962459 C49.4140379,42.9513918 49.2657151,43.0543427 49.0995861,43.055868 L41.092866,43.055868 C40.9279793,43.0577265 40.779103,42.9574306 40.7188628,42.8038811 L30.6207783,18.3713226 C30.4925459,18.0407005 30.5353135,17.6681136 30.7351221,17.37517 C30.9349307,17.0822265 31.2661464,16.9065088 31.6206642,16.9052608 Z\\\" id=\\\"Path\\\" fill=\\\"#FFFFFF\\\"></path> <path d=\\\"M82.6835408,39.91015 L80.0120899,37.1004057 L79.9357627,37.024054 L78.5313428,35.451208 C78.1841555,35.1140305 77.6650541,35.0259674 77.2261482,35.229788 C76.6473149,35.6209462 76.0429823,35.9729494 75.4171943,36.283442 C74.8524969,36.4908658 74.2556012,36.5968425 73.6540366,36.5964842 C71.8804999,36.6998898 70.1481998,36.0351176 68.898854,34.7716775 C67.7251988,33.4573862 67.1092349,31.7376089 67.1814926,29.9767879 C67.1124357,28.2210509 67.7282404,26.5071937 68.898854,25.1971686 C70.1481998,23.9337285 71.8804999,23.2689564 73.6540366,23.3723619 C74.320053,23.3685954 74.9798045,23.5011078 75.5927467,23.7617558 L75.5927467,23.7617558 L75.9514844,23.9373648 L77.2566791,24.7543285 C77.6965181,24.9608062 78.2185639,24.8691897 78.5618737,24.5252733 L80.1571115,22.7157369 L80.7829943,22.0285712 L80.7829943,22.0285712 L82.6606427,20.051061 C82.7394263,19.973552 82.7837974,19.8676441 82.7837974,19.7571068 C82.7837974,19.6465695 82.7394263,19.5406615 82.6606427,19.4631525 C81.4919997,18.3370828 80.0708879,17.5071795 78.5160774,17.0428022 C75.0792421,15.9338905 71.3715362,15.9983463 67.9752952,17.2260464 C66.270515,17.8359373 64.7035705,18.7779638 63.3651341,19.9976148 C62.0607192,21.2153407 61.0213762,22.6890838 60.3120473,24.3267587 C59.5362213,26.1079644 59.1485297,28.0340326 59.1747725,29.9767879 C59.1468861,31.9196955 59.5346469,33.8461072 60.3120473,35.626817 C61.0191142,37.2679832 62.058693,38.7446605 63.3651341,39.9635962 C64.7038273,41.1923114 66.2735772,42.142251 67.9829279,42.7580701 C69.8021932,43.4100648 71.7215669,43.7382464 73.6540366,43.7279818 C75.3060424,43.7151267 76.9470718,43.4578292 78.5237101,42.9642198 C80.0859429,42.4777194 81.5077186,41.6212362 82.6682754,40.4675177 C82.817216,40.3138549 82.8238472,40.0717399 82.6835408,39.91015 L82.6835408,39.91015 Z\\\" id=\\\"Path\\\" fill=\\\"#FFFFFF\\\"></path> <path d=\\\"M109.161436,23.9831759 C108.86069,22.4432594 108.204674,20.9948526 107.245624,19.7532892 C106.28568,18.5696487 105.021837,17.6696289 103.589553,17.1496947 C101.716772,16.4975026 99.7402238,16.1947139 97.7581569,16.2563792 C95.6323608,16.2516608 93.5211867,16.6079393 91.5145944,17.3100333 C89.6942629,17.9323658 88.0119563,18.9021427 86.5609611,20.1655886 C86.4797808,20.2433587 86.433874,20.3509208 86.433874,20.4633604 C86.433874,20.5758 86.4797808,20.6833621 86.5609611,20.7611322 L87.507418,21.7384346 L88.3393841,22.6699258 L89.5987824,24.074798 C89.9438608,24.4161122 90.4656986,24.5046395 90.903977,24.296218 L92.2091716,23.4868895 C92.3389278,23.418173 92.5908075,23.2272936 92.926647,23.0058735 C93.5286545,22.5934163 94.1866762,22.269442 94.8806226,22.0438415 C95.6113225,21.8415432 96.3664869,21.741336 97.1246414,21.7460697 C98.4510962,21.7170017 99.7436182,22.166955 100.765447,23.0135087 C101.431436,23.5512069 101.909787,24.2863403 102.131704,25.1131817 L102.131704,25.1131817 C102.252298,25.5407326 102.316448,25.98223 102.322522,26.4264317 L101.879824,26.4264317 C100.887571,26.4264317 99.8113577,26.4264317 98.6664502,26.4798779 C97.3511438,26.5171952 96.0388817,26.626798 94.7356009,26.8081904 C93.4425994,26.9791881 92.166072,27.2575606 90.9192425,27.6404245 C89.7542219,27.9902007 88.6535652,28.5265246 87.6600723,29.2285408 C86.7067952,29.8992004 85.9228059,30.7827795 85.3702572,31.8092298 C84.781531,32.9933302 84.4956706,34.3050387 84.5382911,35.626817 C84.5138741,36.8363157 84.7753981,38.0344813 85.3015628,39.123727 C85.7853327,40.1089094 86.481327,40.9746192 87.3394982,41.6586049 C88.2307769,42.34873 89.2428652,42.8665889 90.3238905,43.1856398 C93.0479067,43.9861283 95.963171,43.8353367 98.590123,42.7580701 C100.068728,42.154341 101.318906,41.0988295 102.162235,39.7421761 L102.291991,39.7421761 L102.291991,42.6206369 C102.291991,42.8441268 102.473107,43.0253012 102.696525,43.0253012 L109.710992,43.0253012 L109.710992,29.7782733 C109.731838,27.8326257 109.547636,25.890198 109.161436,23.9831759 Z M102.291991,32.0001091 L102.291991,33.3133592 C102.307786,34.0629374 102.131748,34.80411 101.780599,35.4664784 C101.446555,36.0747126 100.976323,36.5973607 100.40671,36.9935133 C99.8045599,37.3974776 99.1425865,37.7040931 98.4451014,37.9020991 C97.7019268,38.122687 96.9304817,38.2332964 96.1552863,38.2304666 C95.2487175,38.2260125 94.3591613,37.9838068 93.575428,37.5279755 C92.7763844,37.1153929 92.2927104,36.2731707 92.3389278,35.3748563 C92.2993583,34.5766699 92.625229,33.803883 93.224323,33.2751833 C93.8576718,32.7562536 94.5900264,32.3717735 95.3767492,32.1451774 C96.2336213,31.8901553 97.1174046,31.7364044 98.0100365,31.687067 C98.9259626,31.6336208 99.6892343,31.6107152 100.299852,31.6107152 L102.291991,31.6107152 L102.291991,32.0001091 Z\\\" id=\\\"Shape\\\" fill=\\\"#FFFFFF\\\"></path> <path d=\\\"M134.349402,17.8292252 L133.983032,17.8292252 L133.983032,17.6383458 L134.944754,17.6383458 L134.944754,17.8292252 L134.578384,17.8292252 L134.578384,18.8447034 L134.349402,18.8447034 L134.349402,17.8292252 Z M135.181368,17.6383458 L135.524841,17.6383458 L135.853047,18.5622019 L135.853047,18.5622019 L136.181254,17.6383458 L136.532359,17.6383458 L136.532359,18.8447034 L136.303378,18.8447034 L136.303378,17.8368604 L136.303378,17.8368604 L135.952273,18.8447034 L135.769087,18.8447034 L135.41035,17.8368604 L135.41035,17.8368604 L135.41035,18.8447034 L135.181368,18.8447034 L135.181368,17.6383458 Z\\\" id=\\\"Shape\\\" fill=\\\"#FFFFFF\\\"></path> <path d=\\\"M3.06666995,39.7421761 L4.01312685,38.5816296 C4.8347101,37.5928418 5.80251319,36.7354424 6.88302844,36.0391165 C7.32258766,35.7184446 7.87412864,35.5915493 8.40957184,35.6878984 C8.66349742,35.7104253 8.91891795,35.7104253 9.17284353,35.6878984 C9.33597921,35.6546746 9.50554716,35.6922193 9.63942827,35.7912068 C9.77330937,35.8901942 9.85894117,36.0413362 9.8750535,36.2070903 C9.91702765,36.5508365 9.90155102,36.8991728 9.8292572,37.2378389 C9.66133742,38.0929784 9.44762135,38.9252124 9.27206886,39.7727168 C9.21060798,40.0235097 9.21060798,40.2854414 9.27206886,40.5362343 C9.53158123,40.1926514 9.79109361,39.8643389 10.0353406,39.5131209 C10.9106184,38.2969448 11.8997051,37.1669265 12.989202,36.1383737 C13.0884273,36.0391165 13.1952854,35.9551295 13.2945107,35.8635074 C14.1341096,35.0465438 15.1645264,35.09999 16.1796777,35.3214101 C16.4508516,35.3952019 16.6703087,35.5944175 16.7699766,35.857263 C16.8696445,36.1201085 16.8374715,36.4148007 16.683437,36.6499304 C16.2645849,37.3859715 15.8997967,38.1515079 15.5919585,38.9404828 C15.1229727,39.9760565 14.9209112,41.1126906 15.0042393,42.2465134 C15.0369596,42.7386993 15.2892013,43.1900769 15.6911838,43.4757765 C15.8799228,43.5862267 16.1023846,43.6242203 16.3170666,43.5826689 C17.3278106,43.2886316 18.2574851,42.7661744 19.0343139,42.055634 C21.0111876,40.3453549 22.9651631,38.6121703 24.9344041,36.9018912 C25.2142532,36.7082745 25.4062913,36.4118917 25.4686943,36.0772923 C25.4686943,35.9398592 25.4686943,35.7947909 25.4686943,35.6115467 L25.7587375,35.4817487 C26.7967871,35.0694493 27.2165865,35.3519508 27.0028704,36.4361455 C26.8234571,37.4216526 26.5288477,38.3826445 26.125108,39.299336 C25.7266495,40.2963833 25.3876703,41.3161979 25.1099566,42.3534058 C25.0949049,42.5057382 25.0949049,42.6591839 25.1099566,42.8115163 C25.4746076,42.6637306 25.8246844,42.4822455 26.1556388,42.2694189 C27.3234445,41.3455628 28.4454539,40.3911659 29.6132596,39.4444043 C29.7888121,39.299336 29.9414665,39.1160918 30.1170189,38.9786587 C30.8060826,38.4831722 31.3044795,37.7663275 31.5290716,36.9477022 C31.5748679,36.7415525 31.7275222,36.4437807 31.8801766,36.41324 C32.299976,36.3139827 32.7808372,36.1383737 33.1701057,36.4743214 C33.3051027,36.629088 33.3588905,36.8386451 33.3151274,37.0393243 C33.1561653,37.5387769 32.9675565,38.0282977 32.7503063,38.5052778 C32.2414585,39.7065453 31.7326107,40.9001776 31.2237629,42.0861747 C31.2237629,42.1625264 31.1779666,42.2388782 31.1245376,42.4297576 C31.5748679,42.1396209 31.8878093,41.9029305 32.2847106,41.6662401 C34.1394608,40.5209639 35.9789456,39.3756877 37.8489613,38.2380467 C38.5931859,37.8285304 39.3574114,37.4564875 40.1387763,37.1233112 C40.2849994,37.0686238 40.4434844,37.0554125 40.5967394,37.0851354 C40.8562517,37.0851354 41.1081314,37.1843926 41.443971,37.2531092 L41.0547024,37.4897996 L41.604258,37.8410177 C41.5431963,37.9173694 41.5126654,38.0013563 41.4668691,38.0166267 C40.6913185,38.3174088 39.9494333,38.6987071 39.2533812,39.1542677 C36.2516877,40.5989554 33.4052056,42.3462809 30.7581672,44.3690919 C30.3218528,44.6901036 29.9835479,45.1263402 29.7811794,45.6288957 C28.6095547,48.6624047 27.1848437,51.5919202 25.5221233,54.3864409 C24.7009846,55.675894 23.7931414,56.9079991 22.8048761,58.0742302 C22.1842588,58.7039002 21.4806463,59.2459076 20.7135116,59.685252 C20.3735556,59.9058261 19.9734563,60.0152218 19.5686041,59.9982942 C19.1544981,59.9101079 18.7557882,59.7608652 18.3855329,59.555454 C18.3092058,59.555454 18.248144,59.4638319 18.1718169,59.4409264 C17.683323,59.2882229 17.5535668,59.1431546 17.6527921,58.6315979 C17.7524597,58.0048531 17.918779,57.3905532 18.1489187,56.799156 C19.2736563,54.20994 20.8502423,51.8417142 22.8048761,49.8053362 C24.2539415,48.1976631 25.8370753,46.7161901 27.5371606,45.3769349 C28.0659573,45.0120808 28.4475066,44.4707018 28.6133737,43.8499 C28.8270898,43.0863826 29.1629293,42.3228651 29.4377071,41.5593477 C29.5051198,41.3921886 29.536337,41.2126316 29.5292997,41.0325206 C28.766028,41.6738753 28.0027563,42.2999596 27.2394846,42.9413142 C26.7031536,43.3595708 26.0753929,43.6447706 25.4076326,43.7735483 C25.1167173,43.8661548 24.8003805,43.7459081 24.6443609,43.4834116 C24.526534,43.3028935 24.36679,43.1535764 24.1787651,43.0482067 C23.7030986,42.8295383 23.4476152,42.3056289 23.5681478,41.7960381 C23.6826385,41.1623186 23.804762,40.5285991 23.9268855,39.8719741 C23.2552064,40.4293418 22.59116,41.0172503 21.88895,41.5593477 C20.6982462,42.4908389 19.4999096,43.4223302 18.2557767,44.2927401 C17.1737321,44.9932466 15.7485947,44.8369732 14.8439523,43.9186166 C14.1209434,43.3661307 13.663817,42.5347243 13.584554,41.6280642 C13.5620434,40.3401221 13.8226062,39.0629532 14.3478257,37.8868287 C14.5310109,37.4821645 14.6989306,37.069865 14.8668504,36.6652008 L14.7752578,36.5735787 C14.5028029,36.7506898 14.2472926,36.9526079 14.0119861,37.1767575 C12.9815693,38.3678447 11.9893161,39.5818374 10.9588993,40.7652895 C10.401711,41.4066442 9.79109361,42.0021878 9.18047625,42.5977314 C9.10614258,42.6888798 8.9918713,42.7377982 8.87463344,42.7286599 C8.75739558,42.7195215 8.65207881,42.6534868 8.59275704,42.5519203 C8.44773542,42.3763113 8.28744836,42.2083375 8.12716131,42.0403637 C7.73378212,41.6521931 7.55431936,41.0965343 7.64630014,40.5515046 C7.77605633,39.4978505 7.8981798,38.4365613 8.04320142,37.2683796 C7.55050751,37.5700715 7.08562334,37.9150142 6.65404693,38.2991281 C5.70759002,39.3629624 4.7992967,40.4547924 3.92916697,41.574618 C3.54753112,42.0709043 3.32618232,42.6817183 2.97507734,43.2085454 C2.6256531,43.7166957 2.24319156,44.2013029 1.83016979,44.6592285 C1.69919553,44.7543389 1.52727276,44.7718282 1.37983949,44.7050396 C1.1094517,44.4999012 0.854353456,44.2753424 0.616567793,44.0331442 L0.234931944,43.6361151 C-0.0127840318,43.3695898 -0.0704666728,42.977829 0.0899103211,42.6511776 C1.05747572,39.5182886 2.36807553,36.5019142 3.99786142,33.656942 C4.40776391,32.8709658 5.23425098,32.3921627 6.11975674,32.4276789 C6.29779929,32.4345358 6.4589773,32.5349625 6.5436367,32.6917896 C6.6282961,32.8486167 6.6238422,33.0385134 6.53192346,33.1911964 C6.26936189,33.6612461 5.97879475,34.1150847 5.66179372,34.5502574 C5.55141525,34.6676804 5.44939595,34.7926942 5.35648504,34.924381 C4.93668561,35.6878984 4.51688617,36.4972269 4.11998489,37.2989203 C3.72308361,38.1006136 3.41014221,38.7801441 3.06666995,39.5207561 C3.04176793,39.5802256 3.02135684,39.6414786 3.00560821,39.7040002 L3.06666995,39.7421761 Z M19.0953756,58.677409 L19.2632954,58.7308552 C20.0198067,58.4742352 20.6960574,58.0241337 21.2249037,57.4252403 C21.9530316,56.6093876 22.6310429,55.7501267 23.2552064,54.8521865 C24.73947,52.5842456 26.0167384,50.1873185 27.0715649,47.6903928 C27.0758625,47.6217435 27.0758625,47.5528924 27.0715649,47.4842431 L26.9723395,47.4155265 C25.6060832,48.7516821 24.1863978,50.0496617 22.8735705,51.4468987 C21.1845377,53.1968587 19.9273769,55.3172031 19.2022337,57.6390252 C19.135294,57.9812081 19.0995281,58.3287606 19.0953756,58.677409 L19.0953756,58.677409 Z\\\" id=\\\"Shape\\\" fill=\\\"#FFFFFF\\\"></path> </g> </g> </g> </svg> </div> </div> <p class=\\\"pdp-login__desc\\\" data-region=\\\"description\\\"> </p> <div class=\\\"pdp-login__login\\\"> <a href=\\\"#\\\" class=\\\"pdp-login__btn btn btn-bright-alt-outline\\\" data-label=\\\"login\\\"> </a> </div> </div> \";\n// Exports\nmodule.exports = code;","import baseTemplate from './pdp-selector.html';\r\n\r\n\r\n/**\r\n * generate a promo legend element\r\n * @param {string} id // id string for attribute\r\n * @param {string|number} index // index to indicate which selector this is\r\n * @param {string} name // name string for attribute\r\n * @param {string} desc // descition string for attribute\r\n * @param {string} iconURL // icon url\r\n * @returns {string} // html string representation of a main slide\r\n */\r\nconst promoLegend = ({ id, index, name, desc, iconURL }) => `\r\n <div class=\"promo-pill\" data-index=\"${index}\" data-id=\"${id}\" data-toggle=\"popover-hover\" data-target=\"tooltip1\" data-placement=\"top\" title=\"${desc}\">\r\n <img class=\"promo-pill__icon\" src=\"${iconURL}\" alt=\"${name} icon\"/>\r\n <span data-region=\"name\">${name}</span>\r\n <span class=\"promo-pill__chervon fa fa-chevron-down\" aria-hidden=\"true\"></span>\r\n <div id=\"tooltip1\" style=\"display: none;\" data-region=\"description\">${desc}</div>\r\n </div>\r\n`;\r\n\r\n/**\r\n * generate a selector <select> box element\r\n * @param {string} id // id string for attribute\r\n * @param {string|number} index // index to indicate which selector this is\r\n * @param {string} name // name string for attribute\r\n * @returns {string} // html string representation of a main slide\r\n */\r\nconst selectBox = ({ id, index, name }) => `\r\n <div class=\"pdp-info__selector\" data-region=\"selector\">\r\n <div class=\"select-box\">\r\n <select class=\"select-box__select\" name=\"${name}\" id=\"${id}\" data-control=\"selector\" data-index=\"${index}\">\r\n </select>\r\n </div>\r\n </div>\r\n`;\r\n\r\n/**\r\n * generate a selector <label> element\r\n * @param {string} id // id string to bind to <select> box (should match a corresponding selectBox)\r\n * @param {string} label // text to display\r\n * @returns {string} // html string representation of a main slide\r\n */\r\nconst selectLabel = ({ id, label }) => `\r\n <label class=\"pdp-info__label\" for=\"${id}\" data-region=\"selectorLabel\">\r\n ${label}\r\n </label>\r\n`;\r\n\r\n/**\r\n * generate a selector <select> box element\r\n * @param {string} disabled // indicate if option is disabled\r\n * @param {string} name // text to display\r\n * * @param {string} value // value string for attribute\r\n * @returns {string} // html string representation of a main slide\r\n */\r\nconst selectOption = ({ disabled, name, value } = { disabled: false, name: '', value: '' }) => `\r\n <option\r\n value=\"${value}\"\r\n ${disabled ? ' disabled' : ''}>\r\n ${name}\r\n </option>\r\n`;\r\n\r\nexport {\r\n selectBox,\r\n selectLabel,\r\n selectOption,\r\n promoLegend\r\n};\r\n\r\n\r\nexport default baseTemplate;\r\n","// Module\nvar code = \" <script type=\\\"application/json\\\" id=\\\"pdpSelectorData\\\"></script> <div class=\\\"container mb-5 pt-5\\\" id=\\\"quickViewModal\\\"> <div class=\\\"row\\\"> <div class=\\\"col-12 d-md-none mt-2\\\"> <a class=\\\"pdp-info__heading quickshop-mobile\\\" href=\\\"#\\\" data-region=\\\"productName\\\"> </a> <p data-region=\\\"brandName\\\"></p> </div> <div class=\\\"col-12 col-md-5\\\"> <div data-placeholder=\\\"slider\\\"></div> <div class=\\\"d-none d-md-block col-md-9 offset-md-3\\\"> <div class=\\\"row\\\" data-region=\\\"video\\\"> <h2 class=\\\"h5\\\" data-label=\\\"video\\\"></h2> <div class=\\\"embed-responsive embed-responsive-16by9\\\"> <iframe class=\\\"embed-responsive-item\\\" frameborder=\\\"0\\\" webkitallowfullscree mozallowfullscreen allowfullscreen data-region=\\\"videoIframe\\\"> </iframe> </div> </div> </div> </div> <div class=\\\"col-12 col-md-7\\\" data-a11y=\\\"ariaLive\\\"> <div class=\\\"pdp-info\\\"> <a class=\\\"pdp-info__heading quickshop -desktop h1\\\" href=\\\"#\\\" data-region=\\\"productName\\\"> </a> <p class=\\\"d-none d-md-block mb-1\\\" data-region=\\\"brandName\\\"></p> <div style=\\\"display:none\\\" data-region=\\\"prescriptionStamp\\\"> <p class=\\\"icon-stamp my-0 py-2\\\"> <span class=\\\"icon-stamp__icon\\\" aria-hidden=\\\"true\\\"> <img src=\\\"/images-2/prescription.svg\\\" alt=\\\"prescription icon\\\"/> </span> <span class=\\\"icon-stamp__text\\\"> * Prescription Required </span> </p> </div> <div class=\\\"pdp-info__promo-legend\\\" data-placeholder=\\\"promoLegend\\\"></div> <div class=\\\"pdp-info__grid\\\"> <div class=\\\"pdp-info__label -price\\\" data-label=\\\"price\\\"></div> <div class=\\\"pdp-info__selector -price\\\"> <div class=\\\"pdp-info__price-login\\\" data-placeholder=\\\"loginPrice\\\" style=\\\"display:none\\\"> <p class=\\\"pdp-info__price-title\\\" data-region=\\\"logintitle\\\"> Log In for Pricing </p> <p class=\\\"pdp-info__price-sub-title\\\" data-region=\\\"logindescription\\\"> You must be logged in to view pricing on this item. <a href=\\\"#\\\" data-label=\\\"loginpriceurl\\\">Log In</a> </p> </div> <p class=\\\"pdp-info__price\\\" data-region=\\\"price\\\"></p> <p class=\\\"pdp-info__price -sell\\\" data-region=\\\"listPrice\\\"></p> <p class=\\\"pdp-info__price -list\\\" data-region=\\\"discountPrice\\\"></p> </div> <div data-placeholder=\\\"selectors\\\"></div> <label class=\\\"pdp-info__label -quantity\\\" for=\\\"pdpQuantity\\\" data-label=\\\"quantity\\\"> </label> <div class=\\\"pdp-info__selector -quantity\\\"> <div data-placeholder=\\\"quantity\\\"></div> </div> </div> <div class=\\\"pdp-info__cart__wrapper mt-3\\\"> <div data-placeholder=\\\"cart\\\"></div> </div> </div> <div class=\\\"d-md-none my-5\\\"> <div data-region=\\\"video\\\"> <h2 class=\\\"h5\\\" data-label=\\\"video\\\"></h2> <div class=\\\"embed-responsive embed-responsive-16by9\\\"> <iframe class=\\\"embed-responsive-item\\\" frameborder=\\\"0\\\" webkitallowfullscree mozallowfullscreen allowfullscreen data-region=\\\"videoIframe\\\"> </iframe> </div> </div> </div> </div> </div> <div class=\\\"row justify-content-center\\\"> <div class=\\\"col-10 mt-2\\\"> <div class=\\\"pdp-rx\\\" data-region=\\\"prescription\\\" style=\\\"display:none\\\"> <div class=\\\"pdp-rx__aside\\\"> <img src=\\\"/images-2/prescription.svg\\\" aria-hidden=\\\"true\\\" alt=\\\"prescription icon\\\"/> </div> <p class=\\\"pdp-rx__main\\\" data-label=\\\"prescription\\\"></p> </div> </div> </div> </div> <div data-placeholder=\\\"infoTabs\\\"></div> \";\n// Exports\nmodule.exports = code;","import baseTemplate from './pdp-selector.html';\r\n\r\n\r\n/**\r\n * generate a promo legend element\r\n * @param {string} id // id string for attribute\r\n * @param {string|number} index // index to indicate which selector this is\r\n * @param {string} name // name string for attribute\r\n * @param {string} desc // descition string for attribute\r\n * @param {string} iconURL // icon url\r\n * @returns {string} // html string representation of a main slide\r\n */\r\n const promoLegend = ({ id, index, name, desc, iconURL }) => `\r\n <div class=\"promo-pill\" data-index=\"${index}\" data-id=\"${id}\" data-toggle=\"popover-hover\" data-target=\"tooltip1\" data-placement=\"top\" title=\"${desc}\">\r\n <img class=\"promo-pill__icon\" src=\"${iconURL}\" alt=\"${name} icon\"/>\r\n <span data-region=\"name\">${name}</span>\r\n <span class=\"promo-pill__chervon fa fa-chevron-down\" aria-hidden=\"true\"></span>\r\n <div id=\"tooltip1\" style=\"display: none;\" data-region=\"description\">${desc}</div>\r\n </div>\r\n`;\r\n\r\n/**\r\n * generate a selector <select> box element\r\n * @param {string} id // id string for attribute\r\n * @param {string|number} index // index to indicate which selector this is\r\n * @param {string} name // name string for attribute\r\n * @returns {string} // html string representation of a main slide\r\n */\r\nconst selectBox = ({ id, index, name }) => `\r\n <div class=\"pdp-info__selector\" data-region=\"selector\">\r\n <div class=\"select-box\">\r\n <select class=\"select-box__select\" name=\"${name}\" id=\"${id}\" data-control=\"selector\" data-index=\"${index}\">\r\n </select>\r\n </div>\r\n </div>\r\n`;\r\n\r\n/**\r\n * generate a selector <label> element\r\n * @param {string} id // id string to bind to <select> box (should match a corresponding selectBox)\r\n * @param {string} label // text to display\r\n * @returns {string} // html string representation of a main slide\r\n */\r\nconst selectLabel = ({ id, label }) => `\r\n <label class=\"pdp-info__label\" for=\"${id}\" data-region=\"selectorLabel\">\r\n ${label}\r\n </label>\r\n`;\r\n\r\n/**\r\n * generate a selector <select> box element\r\n * @param {string} disabled // indicate if option is disabled\r\n * @param {string} name // text to display\r\n * * @param {string} value // value string for attribute\r\n * @returns {string} // html string representation of a main slide\r\n */\r\nconst selectOption = ({ disabled, name, value } = { disabled: false, name: '', value: '' }) => `\r\n <option\r\n value=\"${value}\"\r\n ${disabled ? ' disabled' : ''}>\r\n ${name}\r\n </option>\r\n`;\r\n\r\nexport {\r\n selectBox,\r\n selectLabel,\r\n selectOption,\r\n promoLegend\r\n};\r\n\r\nexport default baseTemplate;\r\n","// Module\nvar code = \"<div class=\\\"container mb-5\\\"> <div class=\\\"row\\\"> <div class=\\\"col-12 d-md-none mt-2\\\"> <h1 class=\\\"pdp-info__heading\\\" data-region=\\\"productName\\\"></h1> <p data-region=\\\"brandName\\\"></p> </div> <div class=\\\"col-12 col-md-5\\\"> <div data-placeholder=\\\"slider\\\"></div> <div class=\\\"d-none d-md-block col-md-9 offset-md-3\\\"> <div class=\\\"row\\\" data-region=\\\"video\\\"> <h2 class=\\\"h5\\\" data-label=\\\"video\\\"></h2> <div class=\\\"embed-responsive embed-responsive-16by9\\\"> <iframe class=\\\"embed-responsive-item\\\" frameborder=\\\"0\\\" webkitallowfullscree mozallowfullscreen allowfullscreen data-region=\\\"videoIframe\\\"> </iframe> </div> </div> </div> </div> <div class=\\\"col-12 col-md-7\\\" data-a11y=\\\"ariaLive\\\"> <div class=\\\"pdp-info\\\"> <h1 class=\\\"pdp-info__heading -desktop\\\" data-region=\\\"productName\\\"></h1> <p class=\\\"d-none d-md-block mb-1\\\" data-region=\\\"brandName\\\"></p> <div style=\\\"display:none\\\" data-region=\\\"prescriptionStamp\\\"> <p class=\\\"icon-stamp my-0 py-2\\\"> <span class=\\\"icon-stamp__icon\\\" aria-hidden=\\\"true\\\"> <img src=\\\"/images-2/prescription.svg\\\" alt=\\\"prescription icon\\\"/> </span> <span class=\\\"icon-stamp__text\\\"> * Prescription Required </span> </p> </div> <div class=\\\"pdp-info__promo-legend\\\" data-placeholder=\\\"promoLegend\\\"></div> <div class=\\\"pdp-info__grid\\\"> <div class=\\\"pdp-info__label -price\\\" data-label=\\\"price\\\"></div> <div class=\\\"pdp-info__selector -price\\\"> <div class=\\\"pdp-info__price-login\\\" data-placeholder=\\\"loginPrice\\\" style=\\\"display:none\\\"> <p class=\\\"pdp-info__price-title\\\" data-region=\\\"logintitle\\\"> Log In for Pricing </p> <p class=\\\"pdp-info__price-sub-title\\\" data-region=\\\"logindescription\\\"> You must be logged in to view pricing on this item. <a href=\\\"#\\\" data-label=\\\"loginpriceurl\\\">Log In</a> </p> </div> <p class=\\\"pdp-info__price\\\" data-region=\\\"price\\\"></p> <p class=\\\"pdp-info__price -sell\\\" data-region=\\\"listPrice\\\"></p> <p class=\\\"pdp-info__price -list\\\" data-region=\\\"discountPrice\\\"></p> </div> <div data-placeholder=\\\"selectors\\\"></div> <label class=\\\"pdp-info__label -quantity\\\" for=\\\"pdpQuantity\\\" data-label=\\\"quantity\\\"> </label> <div class=\\\"pdp-info__selector -quantity\\\"> <div data-placeholder=\\\"quantity\\\"></div> </div> <div data-placeholder=\\\"cart\\\"></div> </div> </div> <div class=\\\"d-md-none my-5\\\"> <div data-region=\\\"video\\\"> <h2 class=\\\"h5\\\" data-label=\\\"video\\\"></h2> <div class=\\\"embed-responsive embed-responsive-16by9\\\"> <iframe class=\\\"embed-responsive-item\\\" frameborder=\\\"0\\\" webkitallowfullscree mozallowfullscreen allowfullscreen data-region=\\\"videoIframe\\\"> </iframe> </div> </div> </div> <div class=\\\"pdp-rx\\\" data-region=\\\"prescription\\\"> <div class=\\\"pdp-rx__aside\\\"> <img src=\\\"/images-2/prescription.svg\\\" aria-hidden=\\\"true\\\" alt=\\\"prescription icon\\\"/> </div> <p class=\\\"pdp-rx__main\\\" data-label=\\\"prescription\\\"></p> </div> <div data-placeholder=\\\"login\\\"></div> <div class=\\\"mt-3\\\" data-region=\\\"benefits\\\"></div> </div> </div> </div> <div data-placeholder=\\\"infoTabs\\\"></div> <div data-placeholder=\\\"frequentlyBoughtTogether\\\"></div> \";\n// Exports\nmodule.exports = code;","import baseTemplate from './pdp-slider.html';\r\nimport sliderModal from './pdp-slider-modal.html';\r\n\r\n/** @typedef {{ url: string, thumbnail: string?, alt: string }} Slide */\r\n\r\n/**\r\n * generate a main slide html string\r\n * @param {Object<Slide>} param // normalized slide object\r\n * @returns {string} // html string representation of a main slide\r\n */\r\nconst mainSlide = ({ thumbnail, alt }) => `\r\n <div class=\"pdp-slider__main-item\">\r\n <img\r\n class=\"pdp-slider__main-slide\"\r\n src=\"${thumbnail}\"\r\n alt=\"${alt}\" />\r\n </div>\r\n`;\r\n\r\n/**\r\n * generate html string for a navigation arrow\r\n * @param {string} srText // string to render for screen readers \r\n * @returns {string} // html string representation of a nav slide\r\n */\r\nconst navArrow = (srText = 'Next') => `\r\n <button class=\"pdp-slider__arrow\" type=\"button\">\r\n <span class=\"sr-only\">${srText}</span>\r\n </button>\r\n`;\r\n\r\n/**\r\n * generate a nav slide html string\r\n * @param {Object<Slide>} param // normalized slide object\r\n * @returns {string} // html string representation of a nav slide\r\n */\r\nconst navSlide = ({ alt, isButton, thumbnail, srText }) => {\r\n const navBtn = content => `\r\n <button class=\"pdp-slider__nav-btn\" type=\"button\" data-control=\"nav\">\r\n <span class=\"sr-only\">${srText}</span>\r\n ${content}\r\n </button>\r\n `;\r\n\r\n const image = `\r\n <img\r\n class=\"pdp-slider__nav-slide\"\r\n src=\"${thumbnail}\"\r\n alt=\"${alt}\" />\r\n `;\r\n\r\n return `\r\n <div class=\"pdp-slider__nav-item\">\r\n ${ isButton ? navBtn(image) : image }\r\n </div>\r\n `;\r\n};\r\n\r\nexport {\r\n mainSlide,\r\n navArrow,\r\n navSlide,\r\n sliderModal\r\n};\r\n\r\nexport default baseTemplate;\r\n","// Module\nvar code = \"<div class=\\\"vca-modal modal fade\\\" id=\\\"pdpSliderModal\\\" tabindex=\\\"-1\\\" role=\\\"dialog\\\" aria-labelledby=\\\"pdpSliderModalLabel\\\" aria-hidden=\\\"true\\\"> <div class=\\\"vca-modal__dialog modal-dialog\\\" role=\\\"document\\\"> <div class=\\\"vca-modal__content modal-content\\\"> <div class=\\\"vca-modal__header modal-header\\\"> <h1 class=\\\"vca-modal__heading -h3\\\" id=\\\"pdpSliderModalLabel\\\" data-region=\\\"modalHeading\\\"> </h1> <button type=\\\"button\\\" class=\\\"vca-modal__close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"> <span class=\\\"vca-modal__close-icon\\\" aria-hidden=\\\"true\\\"></span> </button> </div> <div class=\\\"vca-modal__body modal-body text-center\\\" aria-live=\\\"polite\\\"> <div class=\\\"text-center\\\" data-region=\\\"modalLoader\\\"> <span class=\\\"sr-only\\\" data-label=\\\"loader\\\"></span> <img src=\\\"/images-2/ajax-loader.gif\\\" aria-hidden=\\\"true\\\" alt=\\\"loader image\\\"> </div> <img class=\\\"img-fluid\\\" data-region=\\\"modalImage\\\"/> </div> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"<div class=\\\"pdp-slider\\\"> <div class=\\\"pdp-slider__nav\\\"> <div class=\\\"pdp-slider__nav-inner\\\" data-region=\\\"nav\\\"></div> </div> <div class=\\\"pdp-slider__main\\\"> <div data-region=\\\"main\\\" class=\\\"pdp-slider__main__inner\\\"> </div> <div class=\\\"pdp-slider__rx\\\" style=\\\"display:none\\\" data-region=\\\"rx\\\"> <div class=\\\"rx-icon -img\\\"> <img src=\\\"/images-2/prescription.svg\\\" aria-hidden=\\\"true\\\" alt=\\\"prescription icon\\\"/> </div> </div> <div class=\\\"pdp-slider__zoom\\\"> <button class=\\\"zoom-btn\\\" type=\\\"button\\\" data-control=\\\"zoom\\\"> <span class=\\\"sr-only\\\" data-label=\\\"zoom\\\"></span> <span class=\\\"fas fa-search-plus\\\"></span> </button> </div> <div aria-atomic=\\\"true\\\" aria-live=\\\"assertive\\\"> <div class=\\\"pdp-slider__loader\\\" data-region=\\\"loader\\\"> <span class=\\\"sr-only\\\" data-label=\\\"loader\\\"></span> <img src=\\\"/images-2/ajax-loader.gif\\\" aria-hidden=\\\"true\\\" alt=\\\"loader image\\\"> </div> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\nvar VCA = VCA || {};\r\n\r\n\r\nVCA.PillFilters = (function ($) {\r\n\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$pillSlider = $('.js-filter-slider');\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n bindFilterClick();\r\n bindPillFilterSlider();\r\n }\r\n\r\n function bindFilterClick() {\r\n $('.filterOptions li a').on('click', function (e) {\r\n e.preventDefault();\r\n filterValue = $(this).data('filter');\r\n $('.grid li').fadeOut().promise().done(function () {\r\n $('.grid li.' + filterValue).fadeIn();\r\n });\r\n\r\n if ($(this).hasClass('all')) {\r\n $('.grid li').fadeOut().promise().done(function () {\r\n $('.grid li').fadeIn();\r\n });\r\n }\r\n });\r\n }\r\n\r\n function bindPillFilterSlider() {\r\n var pillSlider = ui.$pillSlider.each(function (index, element) {\r\n $(this).addClass('js-filter-slider' + index);\r\n var item_length = $('.js-filter-slider' + index + ' > div').length;\r\n if(item_length > 1 && !isExperienceEditor) {\r\n $('.js-filter-slider' + index).slick({\r\n variableWidth: true,\r\n autoplay: false,\r\n infinite: false,\r\n speed: 100,\r\n arrows: true,\r\n dots: false,\r\n slidesToScroll: 1,\r\n outerEdgeLimit: true,\r\n draggable: true,\r\n swipeToSlide: true\r\n });\r\n }\r\n });\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.PillFilters.init();\r\n});","import axios from 'axios';\r\n// import mockResults from '../../_patterns/01-components/Press-center-news-events/article-listing-mock-response.html'; <!-- Ex of using importing raw html -->\r\n\r\nlet VCA = VCA || {};\r\n\r\nVCA.PressArticleListing = (function ($) {\r\n let numberOfItemsToShow = $('#ArticleListingNumberOfItemsToShow').data('number-of-items-to-show');\r\n let totalPagesOnLoad = $('#ArticleListingTotalPages').data('total-page');\r\n\r\n\r\n function setPaginationOnLoad() {\r\n\r\n if ($('#PressArticleListing').length <= 0) {\r\n return;\r\n }\r\n\r\n $('#ArticleListingTotalPagesNum').html(totalPagesOnLoad);\r\n\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n let page = parseInt(urlParams.get(\"page\"));\r\n if (window.location.href.match(/\\?./) && page) {\r\n let query = `page=${page}&pageSize=${numberOfItemsToShow}`;\r\n getAPIData(query, page);\r\n } else {\r\n createPagination(totalPagesOnLoad, 1);\r\n }\r\n\r\n selectPage();\r\n }\r\n\r\n function selectPage() {\r\n $('#ArticleListingPagination').on('click', '.pagination-bar__pagination-btn', function (e) {\r\n e.preventDefault();\r\n let selectedPage = $(e.currentTarget).data('page');\r\n let query = `page=${selectedPage}&pageSize=${numberOfItemsToShow}`;\r\n $('#PressArticleListing')[0].scrollIntoView({ behavior: 'smooth' })\r\n getAPIData(query, selectedPage);\r\n });\r\n }\r\n\r\n function getAPIData(queryStr, selectedPage) {\r\n let errMsgContainer = $('.vca-voice-current__error-msg-container');\r\n let errorMessage = $('.vca-voice-current__error-msg');\r\n let paginationBar = $('.vca-voice-current__pagination-container');\r\n let aptUrl = $('#PressArticleListing').attr('data-apiurl'); // /news-api/stories\r\n\r\n createPagination(totalPagesOnLoad, selectedPage);\r\n\r\n $(errMsgContainer).addClass('hidden');\r\n\r\n axios.get(aptUrl + '?' + queryStr)\r\n .then(response => {\r\n if (response.data) {\r\n let parsedData = parseHTML(response.data);\r\n let totalNumOfPages = $('#ArticleListingTotalPages').data('total-page');\r\n createPagination(totalNumOfPages,selectedPage);\r\n $('#PressArticleListing').innerHTML = parsedData;\r\n $('#ArticleListingTotalPagesNum').html($('#ArticleListingTotalPages').data('total-page'));\r\n } else {\r\n $(paginationBar).addClass('hidden');\r\n $(errorMessage).text('No results were found.')\r\n $(errMsgContainer).removeClass('hidden');\r\n }\r\n })\r\n .catch(error => {\r\n console.log('Error message: ', error.response);\r\n }); \r\n }\r\n\r\n function createPagination(totalPages, page){\r\n let liTag = '';\r\n let active;\r\n let beforePage = page - 1;\r\n let afterPage = page + 1;\r\n let element = document.querySelector(\"#ArticleListingPagination ul\");\r\n let path = window.location.pathname;\r\n\r\n if (page > 1) {\r\n liTag += `<li><a href=\"${path}?page=${page - 1}\" class=\"pagination-bar__pagination-btn prev-btn prev\" data-page=\"${page - 1}\"><span>Prev</span></a></li>`;\r\n } else if (page == 1) {\r\n liTag += `<li><a href=\"${path}?page=${page}\" class=\"pagination-bar__pagination-btn prev-btn prev disabled\" data-page=\"${page}\"><span>Prev</span></a></li>`;\r\n }\r\n\r\n if(page > 2){ \r\n if (totalPages >= 5) {\r\n liTag += `<li><a href=\"${path}?page=1\" class=\"pagination-bar__pagination-btn first numb\" data-page=\"1\"><span>1</span></a></li>`;\r\n }\r\n if(page > 3 && totalPages > 5){ \r\n liTag += `<li class=\"vca-voice-current__dots dots\"><span>...</span></li>`;\r\n }\r\n }\r\n // how many pages or li show before the current li\r\n if (page == totalPages) {\r\n beforePage = beforePage - 2;\r\n } else if (page == totalPages - 1) {\r\n beforePage = beforePage - 1; \r\n }\r\n\r\n if (beforePage < 0) {\r\n beforePage = 0;\r\n }\r\n // how many pages or li show after the current li\r\n if (page == 1) {\r\n afterPage = afterPage + 2;\r\n } else if (page == 2) {\r\n afterPage = afterPage + 1;\r\n }\r\n for (let plength = beforePage; plength <= afterPage; plength++) {\r\n if (plength > totalPages) { //if plength is greater than totalPage length then continue\r\n continue;\r\n }\r\n if (plength == 0) { //if plength is 0 than add +1 in plength value\r\n plength = plength + 1;\r\n }\r\n if (page == plength) { //if page is equal to plength than assign active string in the active variable\r\n active = \"active\";\r\n } else { //else leave empty to the active variable\r\n active = \"\";\r\n }\r\n liTag += `<li><a href=\"${path}?page=${plength}\" class=\"pagination-bar__pagination-btn numb ${active}\"data-page=\"${plength}\"><span>${plength}</span></a></li>`;\r\n }\r\n\r\n if (page < totalPages - 1) { //if page value is less than totalPage value by -1 then show the last li or page \r\n if (page < totalPages - 2 && totalPages > 5) { //if page value is less than totalPage value by -2 then add this (...) before the last li or page \r\n liTag += `<li class=\"vca-voice-current__dots dots\"><span>...</span></li>`;\r\n }\r\n if (totalPages >= 5) {\r\n liTag += `<li><a href=\"${path}?page=${totalPages}\" class=\"pagination-bar__pagination-btn last numb\" data-page=\"${totalPages}\"><span>${totalPages}</span></a></li>`;\r\n }\r\n }\r\n\r\n if (page <= totalPages) { //show the next button if the page value is less than totalPage \r\n if (page < totalPages) { \r\n liTag += `<li><a href=\"${path}?page=${page + 1}\" class=\"pagination-bar__pagination-btn next-btn next\" data-page=\"${page + 1}\"><span>Next</span></a></li>`;\r\n } else if (page == totalPages) { \r\n liTag += `<li><a href=\"${path}?page=${page}\" class=\"pagination-bar__pagination-btn next-btn next disabled\" data-page=\"${page}\"><span>Next</span></a></li>`;\r\n }\r\n }\r\n element.innerHTML = liTag; //add li tag inside ul tag\r\n $('#ArticleListingCurrentPageNum').text(page);\r\n\r\n\r\n return liTag; \r\n }\r\n \r\n function parseHTML(html) {\r\n let resultsContainer = $('#PressArticleListing')[0];\r\n resultsContainer.innerHTML = html;\r\n \r\n return resultsContainer.childNodes;\r\n }\r\n\r\n function init() {\r\n setPaginationOnLoad();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.PressArticleListing.init();\r\n});\r\n\r\n","/**\r\n * @typedef {Object} PrintState\r\n * @property {Function} initialize setup print state in DOM\r\n * @property {Function} terminate remove all DOM adjustments for print state \r\n * \r\n * @typedef {Object} ExceptionElements\r\n * @property {Node} elements each included element node\r\n * @property {Array<Node>} children all children of each element node\r\n * @property {Array<Node>} parents all children of each element node\r\n */\r\n\r\nconst CLASS_NAME_DISPLAY_EXCEPTION = '--print-display-exception--';\r\nconst CLASS_NAME_SPACING_EXCEPTION = '--print-spacing-exception--';\r\n\r\nconst CSS_SELECTOR_ROOT = ':root *';\r\nconst CSS_SELECTOR_WILDCARD = '*';\r\nconst CSS_SELECTOR_DELIMETER = ',';\r\nconst CSS_SELECTOR_DISPLAY_EXCEPTION = `:not(.${CLASS_NAME_DISPLAY_EXCEPTION})`;\r\nconst CSS_SELECTOR_SPACING_EXCEPTION = `:not(.${CLASS_NAME_SPACING_EXCEPTION})`;\r\n\r\nconst CSS_RULE_DISPLAY_NONE = 'display:none;';\r\nconst CSS_RULE_MARGIN_NONE = 'margin:0;';\r\nconst CSS_RULE_PADDING_NONE = 'padding:0;';\r\nconst CSS_RULE_VISIBILITY_VISIBLE = 'visibility:visible;';\r\nconst CSS_RULE_VISIBILITY_HIDDEN = 'visibility:hidden;';\r\n\r\n/**\r\n * @param {string} str \r\n * @returns {string}\r\n */\r\nconst trim = (str) => str.trim() || '';\r\n\r\n/**\r\n * @param {string} selector \r\n * @param {Array<string>|string} rules \r\n * @returns {string}\r\n */\r\nconst cssRule = (selector, rules) => {\r\n const body = Array.isArray(rules) ? rules.join('') : rules;\r\n return selector ? `${selector}{${body}}` : '';\r\n};\r\n\r\n/**\r\n * @param {string} selector \r\n * @returns {string}\r\n */\r\nconst appendDisplayException = (selector) => selector + CSS_SELECTOR_DISPLAY_EXCEPTION;\r\n\r\n/**\r\n * @param {string} selector \r\n * @returns {string}\r\n */\r\nconst appendSpacingException = (selector) => selector + CSS_SELECTOR_SPACING_EXCEPTION;\r\n\r\n/**\r\n * @param {string} selector \r\n * @returns {Array<string>}\r\n */\r\nconst createWildcardSelector = (selector) => {\r\n const lastChar = selector.substring(selector.length - 1);\r\n const wildcardSelector = lastChar !== CSS_SELECTOR_WILDCARD ? `${selector} ${CSS_SELECTOR_WILDCARD}` : null;\r\n\r\n return [\r\n selector,\r\n ...(wildcardSelector ? [ wildcardSelector ] : [])\r\n ];\r\n};\r\n\r\n/**\r\n * @param {Array<string>} selectors string of user entered selectors to generate variants for\r\n * @return {string}\r\n */\r\nconst createSelector = (selectors) => {\r\n return selectors\r\n .map(createWildcardSelector)\r\n .flat()\r\n .join(CSS_SELECTOR_DELIMETER);\r\n};\r\n\r\n/**\r\n * @param {string} selectors string of user entered selectors to be split\r\n * @returns {Array<string>}\r\n */\r\nconst splitSelectors = (selectors) => selectors?.split(CSS_SELECTOR_DELIMETER)?.map(trim) || [];\r\n\r\n/**\r\n * @param {Array<string>} include css selector for elements to include\r\n * @returns {string}\r\n */\r\nconst includeElementsRule = (include) => {\r\n const selector = createSelector(include);\r\n const rule = cssRule(selector, CSS_RULE_VISIBILITY_VISIBLE);\r\n return rule;\r\n};\r\n\r\n/** \r\n * @param {Array<string>} exclude css selector for elements to exclude\r\n * @return {string}\r\n */\r\nconst excludeElementsRule = (exclude) => {\r\n const selector = createSelector(exclude);\r\n const spacingSelector = selector ? appendSpacingException(selector) : '';\r\n const displaySelector = selector ? appendDisplayException(selector) : '';\r\n\r\n const visibilityRule = cssRule(selector, CSS_RULE_VISIBILITY_HIDDEN);\r\n const spacingRule = cssRule(spacingSelector, [ CSS_RULE_MARGIN_NONE, CSS_RULE_PADDING_NONE ]);\r\n const displayRule = cssRule(displaySelector, CSS_RULE_DISPLAY_NONE);\r\n\r\n return visibilityRule + spacingRule + displayRule;\r\n};\r\n\r\n/**\r\n * @param {Array<string>} include selector for all elements to include\r\n * @param {Array<string>} exclude selector for all element to exclude\r\n * @return {string} string representing a print stylesheet\r\n */\r\nconst createStyles = (include, exclude) => {\r\n let stylesheet = include.length ? excludeElementsRule([ CSS_SELECTOR_ROOT ]) : '';\r\n stylesheet += includeElementsRule(include);\r\n stylesheet += excludeElementsRule(exclude);\r\n return stylesheet;\r\n}\r\n\r\n/**\r\n * @param {string} styles string representing a print stylesheet\r\n * @returns {Object}\r\n */\r\nconst createStylesheet = (styles) => {\r\n let stylesheet = null;\r\n\r\n if(styles) {\r\n stylesheet = document.createElement('style');\r\n stylesheet.media = 'print';\r\n stylesheet.innerHTML = styles;\r\n }\r\n\r\n return stylesheet;\r\n};\r\n\r\n/**\r\n * @param {Node} element \r\n * @returns {Array<Node>}\r\n */\r\nconst getAllParentElements = (element) => {\r\n const parents = [];\r\n\r\n const getParent = (child) => {\r\n const parent = child.parentElement;\r\n\r\n if(parent) {\r\n parents.push(parent);\r\n getParent(parent);\r\n }\r\n };\r\n\r\n getParent(element);\r\n\r\n return parents;\r\n};\r\n\r\n/**\r\n * @param {Array<string>} include array of CSS selector rules\r\n * @returns {ExceptionElements}\r\n */\r\nconst mapExceptionElements = (include) => {\r\n const exceptionElements = {\r\n elements: [],\r\n children: [],\r\n parents: []\r\n };\r\n\r\n include.forEach((selector) => {\r\n document.querySelectorAll(selector).forEach((element) => {\r\n exceptionElements.elements.push(element);\r\n exceptionElements.children.push(...element.querySelectorAll(CSS_SELECTOR_WILDCARD));\r\n exceptionElements.parents.push(...getAllParentElements(element));\r\n });\r\n });\r\n\r\n return exceptionElements;\r\n};\r\n\r\n/**\r\n * \r\n * @param {Node?} stylesheet node representing a style element\r\n * @param {ExceptionElements} exceptionElements array of nodes that need an exception from \"display:none\"\r\n * @returns {PrintState}\r\n */\r\nconst setupPrintState = (stylesheet, exceptionElements) => {\r\n const displayExceptions = Object.values(exceptionElements).flat();\r\n const spacingExceptions = [\r\n ...exceptionElements.elements,\r\n ...exceptionElements.children\r\n ];\r\n\r\n return {\r\n initialize() {\r\n if(stylesheet) {\r\n displayExceptions.forEach((element) => element.classList.add(CLASS_NAME_DISPLAY_EXCEPTION));\r\n spacingExceptions.forEach((element) => element.classList.add(CLASS_NAME_SPACING_EXCEPTION));\r\n document.body.appendChild(stylesheet);\r\n }\r\n },\r\n terminate() {\r\n if(stylesheet) {\r\n displayExceptions.forEach((element) => element.classList.remove(CLASS_NAME_DISPLAY_EXCEPTION));\r\n spacingExceptions.forEach((element) => element.classList.remove(CLASS_NAME_SPACING_EXCEPTION));\r\n document.body.removeChild(stylesheet);\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * @param {Array<string>} include selector for all elements to include\r\n * @param {Array<string>} exclude selector for all elements to exclude\r\n */\r\nexport default function print(include, exclude) {\r\n const styles = createStyles(include, exclude);\r\n const stylesheet = createStylesheet(styles);\r\n const exceptionElements = mapExceptionElements(include);\r\n const printState = setupPrintState(stylesheet, exceptionElements);\r\n\r\n printState.initialize();\r\n window.print();\r\n printState.terminate();\r\n}\r\n\r\nfunction onClickPrintHandler() {\r\n const include = this.dataset.include?.trim() || null;\r\n const exclude = this.dataset.exclude?.trim() || null;\r\n print(\r\n splitSelectors(include),\r\n splitSelectors(exclude)\r\n );\r\n};\r\n\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-print');\r\n rootEls.forEach((el) => {\r\n el.addEventListener('click', onClickPrintHandler);\r\n });\r\n});\r\n","import * as productCardDatalayer from '@datalayer/components/product-card-datalayer';\r\nimport { buildProduct } from '@datalayer/components/product-datalayer';\r\n\r\nfunction bindClickListener($el, product) {\r\n const $link = $el.find('[data-control=\"productLink\"]');\r\n $link.on('click', () => productCardDatalayer.sendClick(\r\n 'USD', // todo: wire up currency code\r\n product\r\n ));\r\n}\r\n\r\nconst getProductData = ($el) => buildProduct({\r\n id: $el.data('product-id'),\r\n variantId: $el.data('variant-id') || undefined,\r\n name: $el.data('name') || undefined,\r\n brand: $el.data('brand') || undefined,\r\n category: $el.data('category') || undefined,\r\n list: $el.data('list') || undefined,\r\n price: $el.data('price'),\r\n discount: $el.data('discount'),\r\n rxRequired: $el.data('rx-required'),\r\n strength: $el.data('strength') || undefined,\r\n packaging: $el.data('packaging') || undefined\r\n});\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-product-card');\r\n let products = [];\r\n\r\n rootEls.forEach((el) => {\r\n const $el = $(el);\r\n const product = getProductData($el);\r\n\r\n products.push(product);\r\n bindClickListener($el, product);\r\n });\r\n\r\n productCardDatalayer.sendImpression(\r\n 'USD', // todo: wire up currency code\r\n products\r\n );\r\n});\r\n","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.ProductWalkthrough = (function ($) {\r\n\r\n let ui = {};\r\n let totalNumOfSteps = 0;\r\n let DATA_WALKTHROUGH_STEP = 'data-walkthrough-step';\r\n\r\n function cacheUI() {\r\n ui.$Modal = $('#ProductWalkthroughModal');\r\n ui.$ContinueToStepsBtn = $('#ContinueToSteps');\r\n ui.$WelcomeStep = $('.welcome-step');\r\n ui.$SectionStep = $('.js-walkthrough-step');\r\n ui.$RemindMeLaterBtn = $('.remind-me-later');\r\n ui.$CloseBtn = $('.walkthrough-modal__close-btn');\r\n }\r\n\r\n function bindEvents() {\r\n ui.$ContinueToStepsBtn.on('click', initWalkthroughSteps);\r\n ui.$RemindMeLaterBtn.on('click', setCookiesToTrue);\r\n ui.$CloseBtn.on('click', setCookiesToFalse);\r\n }\r\n\r\n function walkthroughOnInit() {\r\n ui.$SectionStep.each((idx,section) => {\r\n let currentIdxPos = ++idx;\r\n let btnsContainer = $(section).find('.modal-body__btns');\r\n\r\n $(section).attr(DATA_WALKTHROUGH_STEP, currentIdxPos);\r\n\r\n if ($(section).is(':last-child') == false) {\r\n $(btnsContainer).append(`\r\n <div class=\"walkthrough-modal__nav__btns\">\r\n <button class=\"nav-btn\" data-step=\"${currentIdxPos-1}\"><i class=\"far fa-chevron-left icon nav-icon left\"></i></button>\r\n <div class=\"walkthrough-modal__nav__info\">\r\n <span class=\"walkthrough-current-step\">${currentIdxPos}</span>/<span class=\"walkthrough-total-steps\"></span>\r\n </div>\r\n <button class=\"nav-btn\" data-step=\"${currentIdxPos+1}\"><i class=\"far fa-chevron-right icon nav-icon active\"></i></button>\r\n </div>\r\n `);\r\n } else {\r\n $(btnsContainer).append(`\r\n <div class=\"walkthrough-modal__nav__btns\">\r\n <button class=\"nav-btn\" data-step=\"${currentIdxPos-1}\"><i class=\"far fa-chevron-left icon nav-icon left\"></i></button>\r\n <div class=\"walkthrough-modal__nav__info\">\r\n <span class=\"walkthrough-current-step\">${currentIdxPos}</span>/<span class=\"walkthrough-total-steps\"></span>\r\n </div>\r\n <button class=\"walkthrough-modal__ty btn btn-sky-outline-alt active\">Take A Look</button>\r\n </div>\r\n `);\r\n }\r\n totalNumOfSteps++;\r\n });\r\n //bind btns \r\n $('.walkthrough-modal__nav__btns .nav-btn').on('click', navigateSteps);\r\n $('.walkthrough-modal__ty').on('click', closeModal);\r\n //update totalNumOfSteps\r\n $('.walkthrough-total-steps').html(totalNumOfSteps);\r\n //add \"hide\" class to first section (left icon)\r\n $(`.js-walkthrough-step[${DATA_WALKTHROUGH_STEP}=\"1\"]`).find('.nav-icon.left').hide();\r\n validateLengthOfSections();\r\n }\r\n\r\n function displayModal() {\r\n let cookieResult = getCookie('product-walkthrough');\r\n\r\n if (ui.$Modal.length > 0 && (cookieResult == 'true' || cookieResult == null)) {\r\n ui.$Modal.modal('show');\r\n }\r\n }\r\n\r\n function closeModal() {\r\n setCookiesToFalse();\r\n ui.$Modal.modal('hide');\r\n }\r\n\r\n function initWalkthroughSteps() {\r\n ui.$WelcomeStep.hide();\r\n ui.$SectionStep.hide();\r\n\r\n let step1 = $(`.js-walkthrough-step[${DATA_WALKTHROUGH_STEP}=\"1\"]`);\r\n step1.show();\r\n\r\n lazyLoadImages(step1);\r\n setTimeout(() => {\r\n lazyLoadImages(step1);\r\n }, 100)\r\n }\r\n\r\n function validateLengthOfSections() {\r\n if (ui.$SectionStep.length == 1) {\r\n $(`.js-walkthrough-step[${DATA_WALKTHROUGH_STEP}=\"1\"]`).find('.nav-icon.left').hide();\r\n }\r\n }\r\n\r\n function navigateSteps(evt) {\r\n let step = $(evt.currentTarget).data('step');\r\n let currentStep = $(`.js-walkthrough-step[${DATA_WALKTHROUGH_STEP}=\"${step}\"]`);\r\n ui.$SectionStep.hide();\r\n currentStep.show();\r\n\r\n lazyLoadImages(currentStep);\r\n setTimeout(() => {\r\n lazyLoadImages(currentStep);\r\n }, 100)\r\n }\r\n\r\n function lazyLoadImages(currentStep) {\r\n let image = currentStep.find('.modal-content__image > img');\r\n $(image).attr('src', $(image).data('src'));\r\n $(image).removeAttr('data-src');\r\n }\r\n\r\n function setCookiesToTrue() {\r\n document.cookie = \"product-walkthrough= \" + true;\r\n ui.$Modal.modal('hide');\r\n }\r\n\r\n function setCookiesToFalse() {\r\n document.cookie = \"product-walkthrough= \" + false;\r\n ui.$Modal.modal('hide');\r\n }\r\n\r\n function getCookie(name) {\r\n let match = document.cookie.match(RegExp('(?:^|;\\\\s*)' + name + '=([^;]*)')); \r\n return match ? match[1] : null;\r\n }\r\n\r\n function init() {\r\n if ($('#ProductWalkthroughModal').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindEvents();\r\n walkthroughOnInit();\r\n displayModal();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.ProductWalkthrough.init();\r\n});\r\n","$(document).ready(function () {\r\n const $nextBtn = $('.promo-nxt-btn-js');\r\n const $prevBtn = $('.promo-prev-btn-js');\r\n const $carousel = $('.promo-carousel-js');\r\n\r\n const $navnextBtn = $('.nav-nxt-btn-js');\r\n const $navprevBtn = $('.nav-prev-btn-js');\r\n const $navcarousel = $('.nav-carousel-js');\r\n\r\n //handle scroll event \r\n function debounce(func, delay) {\r\n let timeout;\r\n return function () {\r\n const context = this;\r\n const args = arguments;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => func.apply(context, args), delay);\r\n };\r\n }\r\n \r\n \r\n const debounceUpdateButtonVisibility = debounce(updateButtonVisibility, 100);\r\n\r\n\r\n $carousel.on('scroll', debounceUpdateButtonVisibility);\r\n $navcarousel.on('scroll', debounceUpdateButtonVisibility);\r\n\r\n\r\n $nextBtn.on('click', function () {\r\n \r\n $carousel.animate({\r\n scrollLeft: '+=' + 334\r\n },1000, function () {\r\n updateButtonVisibility();\r\n });\r\n \r\n });\r\n\r\n $prevBtn.on('click', function () {\r\n \r\n $carousel.animate({\r\n scrollLeft: '-=' + 334\r\n }, 1000, function () { \r\n updateButtonVisibility();\r\n });\r\n \r\n });\r\n \r\n //nav-right-click\r\n $navnextBtn.on('click', function () {\r\n\r\n $navcarousel.animate({\r\n scrollLeft: '+=' + 400\r\n },1000, function () {\r\n updateButtonVisibility();\r\n });\r\n \r\n \r\n });\r\n \r\n //nav-prev-button\r\n $navprevBtn.on('click', function () {\r\n \r\n $navcarousel.animate({\r\n scrollLeft: '-=' + 400\r\n }, 1000, function () { \r\n updateButtonVisibility();\r\n });\r\n });\r\n\r\n \r\n let viewportWidth = $(window).width();\r\n if (viewportWidth < 767) {\r\n $prevBtn.hide();\r\n $nextBtn.hide();\r\n $navnextBtn.hide();\r\n $navprevBtn.hide();\r\n return;\r\n }\r\n \r\n $(window).on('resize', updateButtonVisibility);\r\n \r\n \r\n function updateButtonVisibility() {\r\n let viewportWidth = $(window).width();\r\n if (viewportWidth > 767) {\r\n\r\n if ($carousel.scrollLeft() === 0) {\r\n $prevBtn.hide();\r\n } else {\r\n $prevBtn.show();\r\n }\r\n \r\n if ($carousel.scrollLeft() >= $carousel.prop('scrollWidth') - $carousel.outerWidth() - 1) {\r\n $nextBtn.hide();\r\n } else {\r\n $nextBtn.show();\r\n }\r\n \r\n //nav-button\r\n if ($navcarousel.scrollLeft() === 0) {\r\n $navprevBtn.hide();\r\n } else {\r\n $navprevBtn.show();\r\n }\r\n \r\n if ($navcarousel.scrollLeft() >= $navcarousel.prop('scrollWidth') - $navcarousel.outerWidth() - 1) {\r\n $navnextBtn.hide();\r\n } else {\r\n $navnextBtn.show();\r\n }\r\n \r\n } else {\r\n $prevBtn.hide();\r\n $nextBtn.hide();\r\n $navnextBtn.hide();\r\n $navprevBtn.hide();\r\n \r\n }\r\n \r\n\r\n }\r\n \r\n\r\n updateButtonVisibility();\r\n});\r\n\r\n\r\n","import uniqid from 'uniqid';\r\nimport template from './templates';\r\nimport ReactiveComponent, { filter, watch } from '@utils/reactive-component';\r\nimport keyCodes from '@utils/key-codes';\r\nimport isFn from '@utils/is-function';\r\n\r\nconst DEFAULT_OPTIONS = {\r\n min: 1,\r\n max: 100,\r\n replaceOriginEl: false,\r\n value: 1,\r\n useTemplate: true,\r\n};\r\n\r\nconst DEFAULT_LABELS = {\r\n decrement: 'decrement',\r\n increment: 'increment',\r\n inputAriaLabel: 'Quantity Selector',\r\n};\r\n\r\nexport default class QuantitySelector extends ReactiveComponent {\r\n #disabled = false;\r\n #onDisabledFn = null;\r\n\r\n constructor($originEl, options, labels) {\r\n super();\r\n\r\n options = {\r\n ...DEFAULT_OPTIONS,\r\n ...options,\r\n };\r\n\r\n labels = {\r\n ...DEFAULT_LABELS,\r\n ...labels,\r\n };\r\n\r\n const parsed = $.parseHTML(template);\r\n this.$el = options.useTemplate ? $(parsed) : $originEl;\r\n this.$originEl = $originEl;\r\n\r\n this.$decrement = this.$el.find('[data-control=\"decrement\"]');\r\n this.$increment = this.$el.find('[data-control=\"increment\"]');\r\n this.$input = this.$el.find('[data-control=\"input\"]');\r\n this.$quantityWrapper = this.$el;\r\n\r\n this.$decrementLabel = this.$el.find('[data-label=\"decrement\"]');\r\n this.$incrementLabel = this.$el.find('[data-label=\"increment\"]');\r\n\r\n this.id = uniqid.time('quantitySelector_');\r\n\r\n const min = Number(this.$input.data('min'));\r\n const max = Number(this.$input.data('max'));\r\n\r\n this.min = !isNaN(min) ? min : options.min;\r\n this.max = !isNaN(max) ? max : options.max;\r\n this.labels = labels;\r\n this.backOrdered = options.backOrdered ? options.backOrdered : false;\r\n\r\n let val = this.$input.val() || options.value;\r\n const value = !isNaN(Number(val)) && val > this.min ? val : this.min;\r\n\r\n this.$input.val(value);\r\n\r\n this.reactive({\r\n value,\r\n });\r\n\r\n this.init();\r\n\r\n if (this.$originEl && options.useTemplate) {\r\n this.$originEl.replaceWith(parsed);\r\n }\r\n }\r\n\r\n [filter]() {\r\n return { value: this.filterQuantity };\r\n }\r\n\r\n [watch]() {\r\n return { value: this.updateState };\r\n }\r\n\r\n decrement(val = 1) {\r\n let newVal = this.value - val;\r\n if (newVal < this.min) {\r\n newVal = this.min;\r\n }\r\n this.value = newVal;\r\n // this.sendCoveoUAData('remove', newVal);\r\n }\r\n\r\n enable() {\r\n this.#disabled = false;\r\n this.#onDisabledFn = null;\r\n this.$el.removeClass('-disabled');\r\n }\r\n\r\n disable(onDisabledFn) {\r\n this.#disabled = true;\r\n this.$el.addClass('-disabled');\r\n\r\n if (isFn(onDisabledFn)) {\r\n this.#onDisabledFn = onDisabledFn;\r\n }\r\n }\r\n\r\n onDisabledUpdate(deferredValue) {\r\n if (this.#onDisabledFn) {\r\n const deferredUpdateFn = () => (this.value = deferredValue);\r\n this.#onDisabledFn(deferredUpdateFn);\r\n }\r\n }\r\n\r\n filterQuantity(val) {\r\n if (this.#disabled) {\r\n this.onDisabledUpdate(val);\r\n return this.value;\r\n }\r\n\r\n let newVal = Number(val) ?? this.min;\r\n\r\n if (newVal < this.min) {\r\n newVal = this.min;\r\n } else if (newVal > this.max) {\r\n // recursive function to keep splicing the first char of newVal until it's less than the max\r\n const spliceNum = num => {\r\n newVal = Number(`${num}`.substring(1));\r\n if (newVal > this.max) {\r\n spliceNum(newVal);\r\n }\r\n };\r\n\r\n spliceNum(newVal);\r\n }\r\n\r\n return newVal;\r\n }\r\n\r\n increment(val = 1) {\r\n let newVal = this.value + val;\r\n if (newVal > this.max) {\r\n newVal = this.max;\r\n }\r\n this.value = newVal;\r\n // this.sendCoveoUAData('add', newVal);\r\n }\r\n\r\n init() {\r\n this.setupAccessibility();\r\n this.setLabels();\r\n this.setButtonState();\r\n this.setupListeners();\r\n // document.addEventListener('DOMContentLoaded', function() {\r\n // sendCoveoUAData('add', 1);\r\n // });\r\n }\r\n\r\n highlight(isHighlighted = true) {\r\n if (isHighlighted) {\r\n this.$el.addClass('-highlight');\r\n } else {\r\n this.$el.removeClass('-highlight');\r\n }\r\n }\r\n\r\n onButtonFocus() {\r\n this.$input.get(0).focus();\r\n }\r\n\r\n onInput(evt) {\r\n this.value = evt.currentTarget.value;\r\n }\r\n\r\n onKeydown(evt) {\r\n const key = evt.which ? evt.which : evt.keyCode;\r\n\r\n // default action if tab, backspace, a digit, or CTRL is pressed\r\n if (\r\n key === keyCodes.TAB ||\r\n key === keyCodes.BACKSPACE ||\r\n evt.ctrlKey ||\r\n (key > 47 && key < 58) ||\r\n (key > 95 && key < 106)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (key === keyCodes.ARROW_RIGHT || key === keyCodes.ARROW_UP) {\r\n this.increment();\r\n }\r\n\r\n if (key === keyCodes.PAGE_UP) {\r\n this.increment(10);\r\n }\r\n\r\n if (key === keyCodes.ARROW_LEFT || key === keyCodes.ARROW_DOWN) {\r\n this.decrement();\r\n }\r\n\r\n if (key === keyCodes.PAGE_DOWN) {\r\n this.decrement(10);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n parsePdpSelectorData() {\r\n var pdpSelectorDataJSON = '';\r\n var pdpSelectorDataElement = document.querySelector(\r\n \"script[id='pdpSelectorData']\"\r\n );\r\n if (pdpSelectorDataElement !== undefined) {\r\n pdpSelectorDataJSON = pdpSelectorDataElement.textContent;\r\n }\r\n return JSON.parse(pdpSelectorDataJSON);\r\n }\r\n\r\n resetButtons() {\r\n this.$decrement.removeAttr('aria-disabled');\r\n this.$decrement.removeClass('-disabled');\r\n this.$increment.removeAttr('aria-disabled');\r\n this.$increment.removeClass('-disabled');\r\n }\r\n\r\n // sendCoveoUAData(actionString, quantity) {\r\n // // here is the code on quantity add and remove api calls\r\n // setTimeout(() => {\r\n // var productJSONObj = this.parsePdpSelectorData();\r\n // try {\r\n // if (productJSONObj !== null) {\r\n // if (document.getElementById('quickViewModal')) {\r\n // (function(c, o, v, e, O, u, a) {\r\n // a = 'coveoua';\r\n // c[a] =\r\n // c[a] ||\r\n // function() {\r\n // (c[a].q = c[a].q || []).push(arguments);\r\n // };\r\n // c[a].t = Date.now();\r\n // u = o.createElement(v);\r\n // u.async = 1;\r\n // u.src = e;\r\n // O = o.getElementsByTagName(v)[0];\r\n // O.parentNode.insertBefore(u, O);\r\n // })(\r\n // window,\r\n // document,\r\n // 'script',\r\n // 'https://static.cloud.coveo.com/coveo.analytics.js/2/coveoua.js'\r\n // );\r\n // coveoua(\r\n // 'init',\r\n // 'xx73f654bb-c90b-45c0-bedd-5a8812afabdd'\r\n // );\r\n // coveoua('set', 'currencyCode', 'USD');\r\n // }\r\n // var obj = productJSONObj;\r\n // // Use the first child in the productJSONObj Variant Selector array to fetch the value of the corresponding input select element.\r\n // // That value will then be used to find the appropriate product variant to send to Coveo.\r\n // // All HTML input elements are prepended by \"pdp\" in pdp-selector.js, upon creation.\r\n // var childVariantObj = productJSONObj.Data.ChildVariants.find(\r\n // variant =>\r\n // (variant[\r\n // obj.Data.VariantSelectorOptions[0].Name\r\n // ] = document.querySelector(\r\n // \"[id='pdp\" +\r\n // obj.Data.VariantSelectorOptions[0].Name +\r\n // \"']\"\r\n // ).value)\r\n // );\r\n // if (childVariantObj !== null) {\r\n // var coveoProductData = {\r\n // id: productJSONObj?.Data?.Product?.PermanentId,\r\n // name: productJSONObj?.Data?.Product?.Name,\r\n // brand: childVariantObj?.Brand,\r\n // category:\r\n // productJSONObj?.Data?.Product?.CategoryList,\r\n // price: childVariantObj?.SellPrice,\r\n // variant: childVariantObj?.VariantId,\r\n // position: 1,\r\n // quantity: quantity,\r\n // website: 'Vca',\r\n // };\r\n // if (typeof coveoua === 'function') {\r\n // // Call the \"coveoua\" function to send data to Coveo\r\n // coveoua('ec:addProduct', coveoProductData);\r\n // coveoua('set', 'custom', {\r\n // context_website: 'Vca',\r\n // });\r\n // coveoua('ec:setAction', actionString);\r\n // coveoua('send', 'event');\r\n // } else {\r\n // console.error('coveoua is not defined');\r\n // }\r\n // }\r\n // }\r\n // } catch (error) {\r\n // // console.error('API call failed:', error);\r\n // }\r\n // }, 2000);\r\n // }\r\n\r\n setButtonState() {\r\n if (this.value === this.min) {\r\n this.$decrement.attr('aria-disabled', 'true');\r\n this.$decrement.addClass('-disabled');\r\n } else if (this.value === this.max) {\r\n this.$increment.attr('aria-disabled', 'true');\r\n this.$increment.addClass('-disabled');\r\n }\r\n }\r\n\r\n setupAccessibility() {\r\n this.$input.attr({\r\n id: this.id,\r\n 'aria-label': this.labels.inputAriaLabel,\r\n 'aria-valuemin': this.min,\r\n 'aria-valuemax': this.max,\r\n 'aria-valuenow': this.value,\r\n });\r\n\r\n this.$decrement.attr('aria-controls', this.id);\r\n this.$increment.attr('aria-controls', this.id);\r\n }\r\n\r\n setLabels() {\r\n this.$decrementLabel.html(this.labels.increment);\r\n this.$incrementLabel.html(this.labels.increment);\r\n }\r\n\r\n setupListeners() {\r\n this.$decrement.on('click', () => this.decrement());\r\n this.$decrement.on('focus', () => this.onButtonFocus());\r\n this.$increment.on('click', () => this.increment());\r\n this.$increment.on('focus', () => this.onButtonFocus());\r\n this.$input.on('input', evt => this.onInput(evt));\r\n this.$input.on('keydown', evt => this.onKeydown(evt));\r\n if (this.backOrdered) {\r\n this.$quantityWrapper.addClass('-backordered');\r\n this.disable();\r\n }\r\n }\r\n\r\n updateState() {\r\n this.$input.val(this.value);\r\n this.$input.attr('aria-valuenow', this.value);\r\n\r\n this.resetButtons();\r\n this.setButtonState();\r\n }\r\n\r\n watchValue(fn) {\r\n if (isFn(fn)) {\r\n return this.watch('value', fn);\r\n }\r\n }\r\n}\r\n\r\n$(() => {\r\n $('.js-quantity-selector').each(function() {\r\n const $el = $(this);\r\n const options = {\r\n useTemplate: false,\r\n };\r\n\r\n new QuantitySelector($el, options);\r\n });\r\n});\r\n","import baseTemplate from './quantity-selector.html';\r\n\r\nexport default baseTemplate;\r\n","// Module\nvar code = \"<div class=\\\"quantity-selector js-quantity-selector\\\" data-region=\\\"quantitywrapper\\\"> <button class=\\\"quantity-selector__btn -decrement\\\" type=\\\"button\\\" aria-hidden=\\\"true\\\" tabindex=\\\"-1\\\" data-control=\\\"decrement\\\"> <span class=\\\"sr-only\\\" data-label=\\\"decrement\\\"></span> <span class=\\\"fas fa-minus\\\" aria-hidden=\\\"true\\\"></span> </button> <input type=\\\"text\\\" class=\\\"quantity-selector__input\\\" role=\\\"spinbutton\\\" data-control=\\\"input\\\"/> <button class=\\\"quantity-selector__btn -increment\\\" type=\\\"button\\\" aria-hidden=\\\"true\\\" tabindex=\\\"-1\\\" data-control=\\\"increment\\\"> <span class=\\\"sr-only\\\" data-label=\\\"increment\\\"></span> <span class=\\\"fas fa-plus\\\" aria-hidden=\\\"true\\\"></span> </button> </div> \";\n// Exports\nmodule.exports = code;","var VCA = VCA || {};\r\n\r\nVCA.dropDownFilters = (function ($) {\r\n\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n ui.$dropDownInput = $('.js-referral-card-input');\r\n ui.$filterList = $('.js-referral-list');\r\n ui.$filterListitems = $('.referral-cards__item');\r\n ui.$listCTA = $('.referral-cards__item__cta');\r\n }\r\n\r\n function init() {\r\n if ($('.js-referral-card-input').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n bindFilterChange();\r\n }\r\n\r\n function bindFilterChange() {\r\n ui.$dropDownInput.on('change', function (e) {\r\n e.preventDefault();\r\n filterValue = $(this).val();\r\n console.log(filterValue);\r\n if(filterValue == 'all') {\r\n ui.$filterList.find('.referral-cards__item').fadeOut().promise().done(function () {\r\n ui.$filterList.find('.referral-cards__item').fadeIn();\r\n });\r\n }else {\r\n ui.$filterList.find('.referral-cards__item').fadeOut().promise().done(function () {\r\n ui.$filterList.find('[data-value=\"' + filterValue +'\"]').fadeIn();\r\n ui.$listCTA.fadeIn();\r\n });\r\n }\r\n });\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.dropDownFilters.init();\r\n});","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\nvar VCA = VCA || {};\r\n\r\n\r\nVCA.Stats = (function ($) {\r\n\r\n var ui = {};\r\n var MEDIA_QUERY = '(max-width: 767px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n var started = false;\r\n var isExperienceEditor = $('#sitecore-page-mode').attr('data-attribute');\r\n\r\n function init() {\r\n cacheUI();\r\n initMobileSlider();\r\n }\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$statsSlider = $('.js-referral-row');\r\n }\r\n\r\n function initMobileSlider() { \r\n if (mql.matches) {\r\n var statsSlider = ui.$statsSlider.each(function (index, element) {\r\n $(this).addClass('js-referral-row' + index);\r\n var item_length = $('.js-referral-row' + index + ' > div').length;\r\n if (item_length > 1 && !isExperienceEditor) {\r\n $('.js-referral-row' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: false,\r\n dots: true,\r\n initialSlide: 0,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n adaptiveHeight: true,\r\n focusOnChange: true,\r\n accessibility: true,\r\n mobileFirst: true,\r\n responsive: [{\r\n breakpoint: 767,\r\n settings: \"unslick\"\r\n }]\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.Stats.init();\r\n});","import * as templates from './templates';\r\n\r\nconst createDocBtns = (docResource, selectDocBody) => {\r\n var docs = '';\r\n\r\n $.each(docResource, function (i, item) {\r\n docs += `${templates.docR({ displayName:item.ResourceName, docId:item.ResourceID})}`;\r\n });\r\n selectDocBody.append(docs);\r\n}\r\n\r\n\r\nconst createDayTimeOptions = (dayTimeSelector, dayTimeRange) => {\r\n var dayTimeOptions = '';\r\n\r\n $.each(dayTimeSelector, function (i, item) {\r\n dayTimeOptions += `${templates.timeOptions({ displayName:item.DisplayName, value:item.Value })}`;\r\n });\r\n dayTimeRange.append(dayTimeOptions);\r\n}\r\n\r\nexport {\r\n createDocBtns,\r\n createDayTimeOptions\r\n }","import settings from '@api/routes/raa-api/get-reqappt-flow-settings';\r\nimport confirmRequest from '@api/routes/raa-api/confirm-book-appointment';\r\nimport * as templates from './templates';\r\nimport * as createEl from './raa-create-elements';\r\n\r\nvar VCA = VCA || {};\r\n\r\n\r\nVCA.requestAppointmentForm = (function ($) {\r\n\r\n var ui = {};\r\n\r\n var requestInfo = {\r\n 'hospitalIDValue': '',\r\n 'hospitalName': '',\r\n 'hospitalType': '',\r\n 'isVersion2': '',\r\n 'isLoggedIn': '',\r\n 'isExistClient': 'null',\r\n 'isPrimaryHospital': '',\r\n 'petName': 'pet',\r\n 'resourceId': '',\r\n 'resouceName': '',\r\n 'preferredDate1': '',\r\n 'preferredDate2': '',\r\n 'preferredDate3': '',\r\n 'preferredDateDisplay1': '',\r\n 'preferredDateDisplay2': '',\r\n 'preferredDateDisplay3': '',\r\n 'preferredTime1': '',\r\n 'preferredTime2': '',\r\n 'preferredTime3': '',\r\n 'preferredTimeDisplay1': '',\r\n 'preferredTimeDisplay2': '',\r\n 'preferredTimeDisplay3': '',\r\n 'clientType': '',\r\n 'conditionMessage': '',\r\n 'settingsIdValue': '',\r\n 'firstName': '',\r\n 'lastName': '',\r\n 'email': '',\r\n 'phone': '',\r\n 'utm_campaign': '',\r\n 'utm_content': '',\r\n 'utm_medium': '',\r\n 'utm_source': '',\r\n 'utm_term': '',\r\n 'gclid': ''\r\n }\r\n\r\n\r\n\r\n\r\n function cacheUI() {\r\n ui.$reqApptReason = $('section[data-step=\"req-appt-reason\"]');\r\n ui.$errorStep = $('section[data-step=\"error\"]');\r\n ui.$selectDoc = $('section[data-step=\"select-doc\"]');\r\n ui.$apptDateTime = $('section[data-step=\"appt-date-selector\"]');\r\n ui.$apptDetails = $('section[data-step=\"appt-details\"]');\r\n ui.$bookConfirm = $('section[data-step=\"book-confirm\"]');\r\n ui.$progressBar = $('div[data-progress=\"bar\"]');\r\n ui.$sections = $('.js-seciton-step');\r\n ui.$backBtn = $('button[data-btn=\"back\"]');\r\n ui.$abandonLink = $('.js-abandon-link');\r\n ui.loader = $('.js-loader');\r\n }\r\n\r\n function init() {\r\n if ($('.req-appt__wrapper').length <= 0) {\r\n return;\r\n }\r\n\r\n cacheUI();\r\n initRAAForm();\r\n\r\n bindSelectDocClick();\r\n bindDocContinueClick();\r\n bindMessageContinueClick();\r\n bindCheckDateClick();\r\n bindBackBtnClick();\r\n bindClientInfoFormClick();\r\n\r\n // on change\r\n bindfieldUpdate();\r\n showLoader();\r\n\r\n abandonDataLayerPush();\r\n }\r\n\r\n\r\n async function initRAAForm() {\r\n\r\n requestInfo.hospitalIDValue = ui.$reqApptReason.attr('data-attr-hospId');\r\n requestInfo.settingsIdValue = ui.$reqApptReason.attr('data-attr-dsid');\r\n requestInfo.hospitalType = ui.$reqApptReason.attr('data-attr-hospType');\r\n requestInfo.hospitalName = ui.$reqApptReason.attr('data-attr-hospName');\r\n\r\n var params = {\r\n hospitalId: requestInfo.hospitalIDValue,\r\n settingsId: requestInfo.settingsIdValue\r\n };\r\n\r\n if(window.location.href.match(/\\?./)){\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n\r\n for(const [ key, value ] of urlParams.entries()){\r\n requestInfo[key] = value;\r\n\r\n if (key == 'returnUrl' && -1 === value.toLowerCase().indexOf(\"javascript\") && -1 === value.toLowerCase().indexOf(\"script\")) {\r\n ui.$abandonLink.attr(\"href\", value);\r\n }\r\n }\r\n }\r\n\r\n const {\r\n success,\r\n data,\r\n error\r\n } = await settings.query(params);\r\n if (!success) {\r\n console.log('failed', error);\r\n let targetValue = 'error';\r\n $('.js-error-message').text(error);\r\n updateSeciton(targetValue);\r\n return;\r\n }\r\n let response = data\r\n\r\n let docResource = response.ResourceList;\r\n let dayTimeRange = response.DayTimeRangeOptions;\r\n let clientInfo = response.Client;\r\n requestInfo.isLoggedIn = response.IsLoggedIn;\r\n\r\n //console.log(response);\r\n\r\n let selectDocBody = ui.$selectDoc.find(\".js-req-appt-doc-list\");\r\n if (response.IsLoggedIn) {\r\n populateClinetForm(clientInfo);\r\n }\r\n createEl.createDocBtns(docResource, selectDocBody);\r\n\r\n //createPetTypeBtns(petTypes);\r\n let dayTimeSelector = ui.$apptDateTime.find(\".select-box select\");\r\n createEl.createDayTimeOptions(dayTimeRange, dayTimeSelector);\r\n\r\n ui.$sections.hide();\r\n ui.$reqApptReason.show();\r\n ui.$progressBar.show();\r\n updateProgresBar('req-appt-reason');\r\n\r\n setTimeout(function () {\r\n $('#prefDate-1').flatpickr({\r\n minDate: \"today\",\r\n altInput: true,\r\n altFormat: \"l, M j, Y\",\r\n dateFormat: \"Y-m-d\",\r\n disableMobile: true\r\n });\r\n $('#prefDate-2').flatpickr({\r\n minDate: \"today\",\r\n altInput: true,\r\n altFormat: \"l, M j, Y\",\r\n dateFormat: \"Y-m-d\",\r\n disableMobile: true\r\n });\r\n $('#prefDate-3').flatpickr({\r\n minDate: \"today\",\r\n altInput: true,\r\n altFormat: \"l, M j, Y\",\r\n dateFormat: \"Y-m-d\",\r\n disableMobile: true\r\n });\r\n }, 100);\r\n\r\n setTimeout(function () {\r\n $('.flatpickr-prev-month').attr('role', 'button').attr('tabindex', '0');\r\n $('.flatpickr-next-month').attr('role', 'button').attr('tabindex', '0');\r\n $('.flatpickr-day.today').attr('tabindex', '0');\r\n // console.log('make calendar ADA');\r\n }, 1000);\r\n\r\n hideLoader();\r\n\r\n window.VCA.raaDatalayer.datalayerPushPageLoad(requestInfo);\r\n\r\n };\r\n\r\n function updateSeciton(targetValue) {\r\n ui.$sections.hide();\r\n $('section[data-step=\"' + targetValue + '\"').show();\r\n hideLoader();\r\n updateProgresBar(targetValue);\r\n }\r\n\r\n function updateProgresBar(targetValue) {\r\n var progressValue = $('section[data-step=\"' + targetValue + '\"').attr('data-progress');\r\n if (targetValue === \"entry\") {\r\n ui.$progressBar.hide();\r\n }\r\n if (targetValue === \"select-pet\" || targetValue === \"select-exist-pet\") {\r\n ui.$progressBar.show();\r\n }\r\n $('.progress-bar').css('width', progressValue + '%').attr('aria-valuenow', progressValue);\r\n }\r\n\r\n function bindBackBtnClick() {\r\n ui.$backBtn.on('click', function (e) {\r\n e.preventDefault();\r\n var targetValue = $(this).attr('data-target');\r\n updateSeciton(targetValue);\r\n });\r\n }\r\n\r\n function bindCheckDateClick() {\r\n $('.js-seciton-step').on('click', '.js-select-appt-continue', function (e) {\r\n e.preventDefault();\r\n\r\n if (!checkApptTimes()) {\r\n return;\r\n }\r\n var targetValue = $(this).attr('data-target');\r\n buildrequestDetialsPage(targetValue);\r\n\r\n window.VCA.raaDatalayer.datalayerPushStepChange(requestInfo, targetValue,'appt-date-selector' );\r\n });\r\n }\r\n\r\n async function sendBookConfirmation(targetValue) {\r\n\r\n var params = {\r\n hospitalId: requestInfo.hospitalIDValue,\r\n clientType: requestInfo.clientType,\r\n resourceId: requestInfo.resourceId,\r\n resourceName: requestInfo.resouceName,\r\n isExisting: requestInfo.isExistClient,\r\n IsV2: requestInfo.isVersion2,\r\n firstName: requestInfo.firstName,\r\n lastName: requestInfo.lastName,\r\n petName: requestInfo.petName,\r\n email: requestInfo.email,\r\n phone: requestInfo.phone,\r\n conditionMessage: requestInfo.conditionMessage,\r\n isPrimaryHospital: requestInfo.isPrimaryHospital,\r\n preferredDate1: requestInfo.preferredDate1,\r\n preferredDate2: requestInfo.preferredDate2,\r\n preferredDate3: requestInfo.preferredDate3,\r\n preferredTime1: requestInfo.preferredTime1,\r\n preferredTime2: requestInfo.preferredTime2,\r\n preferredTime3: requestInfo.preferredTime3,\r\n ReferrerUrl: document.referrer,\r\n TrackingUrl: window.location.href,\r\n TrackingMedium: requestInfo.utmMedium,\r\n TrackingSource: requestInfo.utmSource,\r\n TrackingCampaign: requestInfo.utmCampaign,\r\n TrackingTerm: requestInfo.utmTerm,\r\n TrackingContent: requestInfo.utmContent,\r\n GClid: requestInfo.gclid\r\n };\r\n\r\n //console.log(params);\r\n\r\n const {\r\n success,\r\n data,\r\n error\r\n } = await confirmRequest.query(params);\r\n //console.log(data);\r\n if (!success || !data) {\r\n console.log('failed', error);\r\n let targetValue = 'error';\r\n $('.js-error-message').text(error);\r\n updateSeciton(targetValue);\r\n return;\r\n } else {\r\n createConfirmStepInfo(targetValue);\r\n window.VCA.raaDatalayer.datalayerPushPostSubmit(requestInfo);\r\n }\r\n }\r\n\r\n function createConfirmStepInfo(targetValue) {\r\n $('.js-pet-name').text(requestInfo.petName);\r\n updateSeciton(targetValue);\r\n }\r\n\r\n function buildrequestDetialsPage(targetValue) {\r\n $('.js-req-date-1').text(requestInfo.preferredDateDisplay1);\r\n $('.js-req-time-1').text(requestInfo.preferredTimeDisplay1);\r\n $('.js-req-date-2').text(requestInfo.preferredDateDisplay2);\r\n $('.js-req-time-2').text(requestInfo.preferredTimeDisplay2);\r\n $('.js-req-date-3').text(requestInfo.preferredDateDisplay3);\r\n $('.js-req-time-3').text(requestInfo.preferredTimeDisplay3);\r\n $('.js-selected-doc').text(requestInfo.resouceName);\r\n $('.js-confirmation-comment').text(requestInfo.conditionMessage);\r\n // console.log(data);\r\n //console.log(requestInfo);\r\n updateSeciton(targetValue);\r\n }\r\n\r\n function checkApptTimes() {\r\n\r\n let valid = true\r\n $('.js-day-time-fields').find('.date-wrapper').removeClass('error');\r\n $('.js-day-time-fields').find('.select-box').removeClass('error');\r\n\r\n $('.js-day-time-fields .flatpickr-input').each(function (index) {\r\n let el = $(this);\r\n let elTime = el.closest('.form-label-group').find('.select-box__select');\r\n let elTimeWrapper = el.closest('.form-label-group').find('.select-box');\r\n let elmId = el.attr(\"id\");\r\n index = index + 1;\r\n\r\n if (elmId == 'prefDate-1') {\r\n if (el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.date-wrapper').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.date-wrapper').removeClass('error');\r\n let pkey = 'preferredDate' + index;\r\n let dkey = 'preferredDateDisplay' + index;\r\n requestInfo[pkey] = el.val();\r\n requestInfo[dkey] = el.next('input').val();\r\n }\r\n } else {\r\n if (el.val() != '' && elTime.val() == null) {\r\n elTimeWrapper.addClass('error');\r\n valid = false;\r\n } else {\r\n elTimeWrapper.removeClass('error');\r\n let pkey = 'preferredDate' + index;\r\n let dkey = 'preferredDateDisplay' + index;\r\n requestInfo[pkey] = el.val();\r\n requestInfo[dkey] = el.next('input').val();\r\n }\r\n }\r\n });\r\n\r\n $('.js-day-time-fields .select-box__select').each(function (index) {\r\n let el = $(this);\r\n let elDay = el.closest('.form-label-group').find('.flatpickr');\r\n let elDateWrapper = el.closest('.form-label-group').find('.date-wrapper');\r\n let elmId = el.attr(\"id\");\r\n index = index + 1;\r\n\r\n if (elmId == 'preferred-time-1') {\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.select-box').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.select-box').removeClass('error');\r\n let pkeyv = 'preferredTime' + index;\r\n let pkey = 'preferredTimeDisplay' + index;\r\n requestInfo[pkeyv] = el.val();\r\n requestInfo[pkey] = el.find(':selected').data('name');\r\n }\r\n } else {\r\n if (el.val() != null && elDay.val() == '') {\r\n elDateWrapper.addClass('error');\r\n valid = false;\r\n } else {\r\n elDateWrapper.removeClass('error');\r\n let pkeyv = 'preferredTime' + index;\r\n let pkey = 'preferredTimeDisplay' + index;\r\n requestInfo[pkeyv] = el.val();\r\n requestInfo[pkey] = el.find(':selected').data('name');\r\n }\r\n }\r\n });\r\n\r\n\r\n return valid;\r\n }\r\n\r\n\r\n function checkChform() {\r\n var mailFormat = /(^[a-zA-Z0-9_.]+[@]{1}[a-zA-Z0-9\\-]+[\\.][a-zA-Z]+$)/;\r\n var phoneReg = /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/;\r\n var textReg = /^[a-zA-Z -]{2,60}$/;\r\n\r\n $('.js-client-form').find('.form-label-group').removeClass('error');\r\n\r\n let valid = true\r\n\r\n $('.js-client-form input.js-required').each(function (index) {\r\n let el = $(this);\r\n let elmId = el.attr(\"id\");\r\n if (elmId == 'phone') {\r\n let phone = $('#phone').val();\r\n if (!phoneReg.test(phone)) {\r\n $('#phone').addClass('error');\r\n $('#phone').closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n $('#phone').removeClass('error');\r\n $('#phone').closest('.form-label-group').removeClass('error');\r\n requestInfo.phone = $('#phone').val();\r\n }\r\n } else if (elmId == 'email') {\r\n let email = $('#email').val();\r\n if (!mailFormat.test(email)) {\r\n $('#email').addClass('error');\r\n $('#email').closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n $('#email').removeClass('error');\r\n $('#email').closest('.form-label-group').removeClass('error');\r\n requestInfo.email = $('#email').val();\r\n }\r\n } else {\r\n if (!textReg.test(el.val())) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n requestInfo[elmId] = el.val();\r\n }\r\n }\r\n });\r\n $('.js-client-form .select-box__select').each(function (index) {\r\n let el = $(this);\r\n let elmId = el.attr(\"id\");\r\n\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n requestInfo[elmId] = el.val();\r\n }\r\n\r\n });\r\n\r\n return valid;\r\n }\r\n\r\n function populateClinetForm(clientInfo) {\r\n let primaryEmail = '';\r\n $.each(clientInfo.ClientEmails, function (i, email) {\r\n if(email.IsPrimary) {\r\n primaryEmail = email.Email;\r\n }\r\n });\r\n let primaryPhone = '';\r\n $.each(clientInfo.ClientPhones, function (i, phone) {\r\n if(phone.IsPrimaryContact) {\r\n primaryPhone = phone.PhoneNumber;\r\n }\r\n });\r\n $('.js-client-form').find('#firstName').val(clientInfo.FirstName);\r\n $('.js-client-form').find('#lastName').val(clientInfo.LastName);\r\n $('.js-client-form').find('#email').val(primaryEmail);\r\n $('.js-client-form').find('#phone').val(primaryPhone);\r\n }\r\n\r\n function bindClientInfoFormClick() {\r\n $('.js-seciton-step').on('click', '.js-client-info-form', function (e) {\r\n e.preventDefault();\r\n\r\n if (!checkChform()) {\r\n return;\r\n }\r\n //console.log(requestInfo);\r\n showLoader();\r\n var targetValue = $(this).attr('data-target');\r\n sendBookConfirmation(targetValue);\r\n window.VCA.raaDatalayer.datalayerPushComfirm(requestInfo);\r\n });\r\n }\r\n\r\n function bindSelectDocClick() {\r\n $('.js-seciton-step').on('click', '.js-doc-select', function (e) {\r\n e.preventDefault();\r\n requestInfo.resourceId = $(this).attr('data-resouce-id');\r\n requestInfo.resouceName = $(this).attr('data-resouce-name');\r\n $('.js-req-appt-doc-list').find('.active').removeClass('active');\r\n $(this).addClass('active');\r\n var wrap = $(this).closest('.req-appt__form__body');\r\n wrap.find('.js-btn-required').removeClass('disabled');\r\n });\r\n }\r\n\r\n function bindMessageContinueClick() {\r\n $('.js-seciton-step').on('click', '.js-select-btn-condition', function (e) {\r\n e.preventDefault();\r\n var wrap = $(this).closest('.req-appt__form__body');\r\n if (wrap.find('.js-required').val() === '') {\r\n wrap.find('.js-required').trigger('focus');\r\n return;\r\n }\r\n var newMessage = wrap.find('.js-conditionmessage').val();\r\n requestInfo.conditionMessage = newMessage;\r\n var targetValue = $(this).attr('data-target');\r\n updateSeciton(targetValue);\r\n window.VCA.raaDatalayer.datalayerPushStepChange(requestInfo, targetValue, 'req-appt-reason');\r\n });\r\n }\r\n\r\n function bindDocContinueClick() {\r\n $('.js-seciton-step').on('click', '.js-doc-btn-condition', function (e) {\r\n e.preventDefault();\r\n if ($('.js-req-appt-doc-list .active').length < 1) {\r\n return;\r\n }\r\n var targetValue = $(this).attr('data-target');\r\n updateSeciton(targetValue);\r\n window.VCA.raaDatalayer.datalayerPushStepChange(requestInfo, targetValue, 'select-doc');\r\n //console.log(requestInfo);\r\n });\r\n }\r\n\r\n function bindfieldUpdate() {\r\n $('.js-conditionmessage').on('keyup', function (e) {\r\n e.preventDefault();\r\n var wrap = $(this).closest('.req-appt__form__body');\r\n var counter = wrap.find('.js-limit-counter');\r\n if ($(this).val() !== '') {\r\n wrap.find('.js-btn-required').removeClass('disabled');\r\n } else if ($(this).val() === '') {\r\n wrap.find('.js-btn-required').addClass('disabled');\r\n }\r\n\r\n if (this.value.length > 256) {\r\n return false;\r\n }\r\n counter.html(256 - this.value.length);\r\n });\r\n }\r\n\r\n function abandonDataLayerPush() {\r\n $('.js-seciton-step').on('click', '.js-abandon-link', function (e) {\r\n let backStepValue = $(this).closest('section[data-step]').attr('data-step');\r\n window.VCA.raaDatalayer.datalayerPushAbandon(requestInfo, backStepValue);\r\n });\r\n }\r\n\r\n function showLoader() {\r\n ui.$sections.css('opacity', '.3').css('pointer-events', 'none');\r\n ui.loader.show();\r\n }\r\n\r\n function hideLoader() {\r\n ui.$sections.css('opacity', '1').css('pointer-events', 'all');\r\n ui.loader.hide();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.requestAppointmentForm.init();\r\n});","\r\nconst docR = ({ displayName, docId }) => `\r\n <button data-resouce-id=\"${docId}\" data-resouce-name=\"${displayName}\" class=\"btn btn-dusk-outline btn-selecter btn-selecter--thumb js-doc-select\">\r\n ${displayName}\r\n </button>\r\n`;\r\n\r\n\r\n\r\nconst timeOptions = ({ displayName, value }) => `\r\n <option value=\"${value}\" data-name=\"${displayName}\">${displayName}</option>\r\n`;\r\n\r\n\r\n\r\n\r\nexport {\r\n docR,\r\n timeOptions\r\n};\r\n","import template from './templates';\r\nimport getFocusable from '@utils/get-focusable';\r\n\r\nconst SCROLL_DURATION = 500;\r\n\r\nlet isActive = window.scrollY >= 50;\r\nconst $backToTop = $($.parseHTML(template));\r\n\r\nwindow.addEventListener('scroll', () => {\r\n if(window.scrollY >= 50 && !isActive) {\r\n isActive = true;\r\n $backToTop.show();\r\n } else if(window.scrollY < 50 && isActive) {\r\n isActive = false;\r\n $backToTop.hide();\r\n }\r\n});\r\n\r\n$backToTop.on('click', evt => {\r\n evt.preventDefault();\r\n\r\n $('html,body').animate({ scrollTop: 0, }, SCROLL_DURATION, () => {\r\n const $focusable = getFocusable(document.documentElement);\r\n $focusable.get(0)?.focus();\r\n });\r\n});\r\n\r\nif(process.env.NODE_ENV !== 'development') {\r\n $(document.body).append($backToTop);\r\n\r\n if(isActive) {\r\n $backToTop.show();\r\n }\r\n}\r\n","// Module\nvar code = \"<a href=\\\"#\\\" class=\\\"back-to-top\\\" aria-label=\\\"return to top\\\"> <span class=\\\"sr-only\\\">return to top</span> <svg aria-hidden=\\\"true\\\" width=\\\"50px\\\" height=\\\"50px\\\" viewBox=\\\"0 0 50 50\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"> <title>Return to Top</title> <g id=\\\"UI-Kit\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\"> <g id=\\\"UI-Kit---Color\\\" transform=\\\"translate(-989.000000, -1812.000000)\\\" fill-rule=\\\"nonzero\\\"> <g id=\\\"Group\\\" transform=\\\"translate(989.000000, 1812.000000)\\\"> <circle id=\\\"Oval-Copy\\\" fill=\\\"#f37020\\\" cx=\\\"25\\\" cy=\\\"25\\\" r=\\\"25\\\"></circle> <g transform=\\\"translate(17.000000, 20.000000)\\\" fill=\\\"#FFFFFF\\\" id=\\\"icon/arrow-right-copy\\\"> <path d=\\\"M7.51749475,-2.82847915 L3.27209634,0.783449864 C2.94416368,1.08520614 2.91757455,1.56070042 3.1657398,1.8716008 C3.41390505,2.19164503 3.91909859,2.23736556 4.22044214,1.98133007 L7.24274042,-0.588168721 L7.24274042,12.2227494 C7.24274042,12.6525232 7.57953619,13 7.99609922,13 C8.41266224,13 8.74945802,12.6525232 8.74945802,12.2227494 L8.74945802,-0.588168721 L11.7717562,1.98133007 C12.0819627,2.23736556 12.5782932,2.18250092 12.8353215,1.8716008 C13.1012131,1.56070042 13.0303086,1.03948535 12.7289652,0.783449864 L8.47470368,-2.82847915 C8.15563395,-3.06622637 7.82770145,-3.04793813 7.51749475,-2.82847915 Z\\\" id=\\\"Path\\\" transform=\\\"translate(8.000000, 5.000000) rotate(90.000000) translate(-8.000000, -5.000000) \\\"></path> </g> </g> </g> </g> </svg> </a> \";\n// Exports\nmodule.exports = code;","import template from './back-to-top.html';\r\nexport default template.trim();\r\n","\r\nimport isExperienceEditor from '@utils/is-experience-editor';\r\n \r\nconst DISABLED_CLASS_NAME = '-disabled';\r\n \r\nexport default class RotatingCarousel {\r\n constructor({ $el }) {\r\n this.$el = $el;\r\n \r\n this.$slider = this.$el.find('[data-region=\"slider\"]');\r\n \r\n this.$pauseLabel = this.$el.find('[data-label=\"pause\"]');\r\n this.$playLabel = this.$el.find('[data-label=\"play\"]');\r\n \r\n this.$next = this.$el.find('[data-control=\"next\"]');\r\n this.$prev = this.$el.find('[data-control=\"prev\"]');\r\n this.$playPause = this.$el.find('[data-control=\"playPause\"]');\r\n \r\n this.init();\r\n }\r\n \r\n init() {\r\n this.setupSlider();\r\n this.setupListeners();\r\n }\r\n \r\n onBeforeChange({ slideCount }, nextSlide) {\r\n this.$prev.removeAttr('aria-disabled').removeClass(DISABLED_CLASS_NAME);\r\n this.$next.removeAttr('aria-disabled').removeClass(DISABLED_CLASS_NAME);\r\n \r\n if(nextSlide === 0) {\r\n this.$prev.attr('aria-disabled', true).addClass(DISABLED_CLASS_NAME);\r\n } else if ((nextSlide + 1) === slideCount) {\r\n this.$next.attr('aria-disabled', true).addClass(DISABLED_CLASS_NAME);\r\n }\r\n }\r\n \r\n onNext() {\r\n this.$slider.slick('slickNext');\r\n }\r\n \r\n onPrev() {\r\n this.$slider.slick('slickPrev');\r\n }\r\n \r\n onPlayPause() {\r\n const slick = this.$slider.slick('getSlick');\r\n const paused = slick.paused;\r\n \r\n paused ? this.play() : this.pause();\r\n }\r\n \r\n pause() {\r\n this.$slider.slick('slickPause');\r\n this.$playPause.removeClass('-pause').addClass('-play');\r\n }\r\n \r\n play() {\r\n this.$slider.slick('slickPlay');\r\n this.$playPause.removeClass('-play').addClass('-pause');\r\n }\r\n \r\n setupSlider() {\r\n const $controls = this.$el.find('.story-carousel__dot-controls');\r\n \r\n \r\n \r\n this.$slider.slick({\r\n arrows: false,\r\n autoplay: true,\r\n autoplaySpeed: 3000,\r\n infinite: true,\r\n fade: true,\r\n pauseOnHover: false,\r\n speed: 1000,\r\n dots: true, // Enable dots\r\n customPaging: function(slider, i) {\r\n return `<button>${i + 1}</button>`; // Customize dot button\r\n },\r\n appendDots: $controls, // Append dots to controls container\r\n });\r\n \r\n \r\n this.$prev.attr('aria-disabled', true).addClass(DISABLED_CLASS_NAME);\r\n }\r\n \r\n \r\n \r\n setupListeners() {\r\n this.$next.on('click', () => this.onNext());\r\n this.$prev.on('click', () => this.onPrev());\r\n this.$playPause.on('click', () => this.onPlayPause());\r\n this.$slider.on('beforeChange', (...[,slick,,nextSlide]) => this.onBeforeChange(slick, nextSlide));\r\n this.$slider.on('focus', 'a[href], button, input, textarea, select, details,[tabindex]:not([tabindex=\"-1\"])', () => this.pause());\r\n }\r\n}\r\n \r\n$('.js-rotating-banner').each(function() {\r\n const $el = $(this)\r\n if(!isExperienceEditor) {\r\n new RotatingCarousel({\r\n $el\r\n });\r\n } else {\r\n $el.addClass('-isExperienceEditor');\r\n }\r\n});\r\n \r\n","var VCA = VCA || {};\r\n\r\n\r\nVCA.ScrollTo = (function ($) {\r\n\r\n var ui = {};\r\n\r\n function init() {\r\n window.onload = setTimeout(function (e) { \r\n \r\n if (window.location.hash) {\r\n var hash = window.location.hash; \r\n if ($(hash).length) {\r\n $('html, body').animate({\r\n scrollTop: $(hash).offset().top-180\r\n }, 200);\r\n }\r\n }\r\n }, 200);\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.ScrollTo.init();\r\n});\r\n","import ReactiveComponent, { watch } from '@utils/reactive-component';\r\nimport template, { items as selectOptions } from './templates';\r\nimport isFn from '@utils/is-function';\r\n\r\nconst CLASS_NAME_DISABLED = '-disabled';\r\nconst CLASS_NAME_INVALID = 'is-invalid';\r\nconst CLASS_NAME_HIGHLIGHT = '-highlight';\r\nconst CLASS_NAME_VALID = 'is-valid';\r\n\r\nconst EVENT_KEY = '_selectBox_';\r\nconst EVENT_CHANGE = `change.${EVENT_KEY}`;\r\nconst EVENT_VALIDATION = `${EVENT_CHANGE}_validate`;\r\n\r\nconst OPTION_DATA_SELECTOR = 'data-option';\r\n\r\n/**\r\n * @typedef {{ text: string, value: string }} Option\r\n * \r\n * @typedef {Object} DefaultOptions\r\n * @property {string?} ariaLabel\r\n * @property {string?} className\r\n * @property {id?} id\r\n * @property {string?} mods\r\n * @property {Array<Option>} options\r\n * @property {boolean} replaceOriginEl\r\n * @property {string?} unselectedText\r\n * @property {string} value\r\n */\r\n\r\n/** @type {DefaultOptions} */\r\nconst DEFAULT_OPTIONS = {\r\n ariaLabel: null,\r\n className: null,\r\n id: null,\r\n mods: '',\r\n name: null,\r\n options: [],\r\n replaceOriginEl: true,\r\n unselectedText: null,\r\n value: ''\r\n};\r\n\r\nexport default class SelectBox extends ReactiveComponent {\r\n #disabled = false;\r\n #onDisabledFn = null;\r\n\r\n /**\r\n * @param {JQuery} $originEl \r\n * @param {DefaultOptions} options \r\n */\r\n constructor($originEl, options) {\r\n super();\r\n\r\n const value = options.value ?? DEFAULT_OPTIONS.value;\r\n options = {\r\n ...DEFAULT_OPTIONS,\r\n ...options,\r\n value: `${value}`\r\n };\r\n\r\n const parsedTemplate = $.parseHTML(template(options));\r\n\r\n this.$el = $(parsedTemplate);\r\n this.$originEl = $originEl;\r\n\r\n this.$select = this.$el.find('[data-control=\"select\"]')\r\n\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n\r\n this.reactive({\r\n value: options.value\r\n });\r\n\r\n if(options.options && options.options.length === 0) {\r\n this.disableElement();\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n [watch]() {\r\n return { value: this.updateState };\r\n }\r\n\r\n init() {\r\n this.setupListeners();\r\n this.updateState();\r\n }\r\n\r\n focus() {\r\n this.$select.get(0).focus();\r\n }\r\n\r\n enable() {\r\n this.#disabled = false;\r\n this.#onDisabledFn = null;\r\n this.$el.removeClass(CLASS_NAME_DISABLED);\r\n }\r\n\r\n enableElement() {\r\n this.$select.attr('disabled', null);\r\n }\r\n\r\n disable(onDisabledFn) {\r\n this.#disabled = true;\r\n this.$el.addClass(CLASS_NAME_DISABLED);\r\n\r\n if(isFn(onDisabledFn)) {\r\n this.#onDisabledFn = onDisabledFn;\r\n }\r\n }\r\n\r\n disableElement() {\r\n this.$select.attr('disabled', true);\r\n }\r\n\r\n highlight(isHighlighted = true) {\r\n if(isHighlighted) {\r\n this.$el.addClass(CLASS_NAME_HIGHLIGHT);\r\n } else {\r\n this.$el.removeClass(CLASS_NAME_HIGHLIGHT);\r\n }\r\n }\r\n\r\n onDisabledUpdate(deferredValue) {\r\n if(this.#onDisabledFn) {\r\n const deferredUpdateFn = () => {\r\n this.$select.val(deferredValue);\r\n this.value = deferredValue;\r\n };\r\n\r\n this.#onDisabledFn(deferredUpdateFn);\r\n }\r\n\r\n this.$select.val(this.value);\r\n }\r\n\r\n onSelectChange(evt) {\r\n const value = evt.target.value;\r\n\r\n if(!this.#disabled) {\r\n this.value = value;\r\n } else {\r\n this.onDisabledUpdate(value);\r\n }\r\n }\r\n\r\n onValidationChange(evt) {\r\n const $el = $(evt.target);\r\n if($el.val()) {\r\n this.$select.addClass(CLASS_NAME_VALID);\r\n this.$select.removeClass(CLASS_NAME_INVALID);\r\n } else {\r\n this.$select.removeClass(CLASS_NAME_VALID);\r\n this.$select.addClass(CLASS_NAME_INVALID);\r\n }\r\n }\r\n\r\n setOptions({ options, unselectedText }) {\r\n if(!options || !Array.isArray(options) || options.length === 0) {\r\n return;\r\n }\r\n\r\n const optionsHtmlStr = selectOptions({ options, unselectedText });\r\n\r\n this.$select.empty();\r\n this.$select.html(optionsHtmlStr);\r\n this.$select.val(this.value);\r\n\r\n this.enableElement();\r\n }\r\n\r\n setValue(value) {\r\n const newVal = value ?? `${value}`;\r\n if(this.value !== newVal) {\r\n this.value = newVal;\r\n }\r\n }\r\n\r\n setInvalid() {\r\n this.$select.addClass(CLASS_NAME_INVALID);\r\n this.$select.on(EVENT_VALIDATION, (evt) => this.onValidationChange(evt));\r\n }\r\n\r\n setValid() {\r\n this.$select.addClass(CLASS_NAME_VALID);\r\n this.$select.on(EVENT_VALIDATION, (evt) => this.onValidationChange(evt));\r\n }\r\n\r\n removeValidation() {\r\n this.$select.removeClass(CLASS_NAME_INVALID);\r\n this.$select.removeClass(CLASS_NAME_VALID);\r\n this.$select.off(EVENT_VALIDATION);\r\n }\r\n\r\n setupListeners() {\r\n this.$select.on('change', evt => this.onSelectChange(evt));\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n if(this.replaceOriginEl) {\r\n this.$originEl.replaceWith(this.$el);\r\n } else {\r\n this.$originEl.html(this.$el);\r\n }\r\n }\r\n\r\n return this.$el;\r\n }\r\n\r\n watchValue(fn) {\r\n if(isFn(fn)) {\r\n return this.watch('value', fn);\r\n }\r\n }\r\n\r\n updateState() {\r\n this.$select.val(this.value).attr('data-value', this.value);\r\n }\r\n}\r\n\r\n$(() => {\r\n $('.js-select-box').each(function() {\r\n const $el = $(this);\r\n\r\n /** @type {DefaultOptions} */\r\n const ariaLabel = $el.data('aria-label') || DEFAULT_OPTIONS.ariaLabel;\r\n const className = $el.data('class-name') || DEFAULT_OPTIONS.className;\r\n const id = $el.data('id') || DEFAULT_OPTIONS.id;\r\n const mods = $el.data('mods') || DEFAULT_OPTIONS.mods;\r\n const replaceOriginEl = typeof $el.data('replace-origin-element') === 'boolean' ? $el.data('replace-origin-element') : DEFAULT_OPTIONS.replaceOriginEl;\r\n const unselectedText = $el.data('unselected-text') || DEFAULT_OPTIONS.unselectedText;\r\n const value = $el.data('value') || DEFAULT_OPTIONS.value;\r\n\r\n const $options = $el.find(`[${OPTION_DATA_SELECTOR}],option`);\r\n const options = $options.map((index) => ({\r\n text: $options.eq(index).text(),\r\n value: $options.eq(index).attr('value')\r\n })).toArray();\r\n\r\n const select = new SelectBox($el, {\r\n ariaLabel,\r\n className,\r\n id,\r\n mods,\r\n options,\r\n replaceOriginEl,\r\n unselectedText,\r\n value\r\n });\r\n\r\n select.render();\r\n });\r\n});\r\n","const DEFAULT_ROOT_CLASS_NAME = 'select-box';\r\n\r\nconst item = ({ disabled, selected, text, value }) => {\r\n const attributes = [\r\n `value=\"${value || ''}\"`,\r\n selected ? 'selected': '',\r\n disabled ? 'disabled': ''\r\n ].join(' ');\r\n\r\n return `<option ${attributes}>${text}</option>`;\r\n};\r\n\r\nexport const items = ({ options, unselectedText }) => {\r\n let items = unselectedText ? item({ disabled: true, selected: true, text: unselectedText, value: '' }) : '';\r\n\r\n options?.forEach(option => {\r\n items += item({ text: option.text, value: option.value })\r\n });\r\n\r\n return items;\r\n};\r\n\r\nconst template = ({ ariaLabel, className, id, mods, name, options, required, unselectedText }) => {\r\n const rootClass = className || DEFAULT_ROOT_CLASS_NAME;\r\n\r\n const selectAttributes = [\r\n ariaLabel ? `aria-label=\"${ariaLabel}\"` : '',\r\n id ? `id=\"${id}\"` : '',\r\n name ? `name=\"${name}\"` : '',\r\n required ? 'required': ''\r\n ].join(' ');\r\n\r\n const inner = items({ options, unselectedText });\r\n\r\n return `\r\n <div class=\"${rootClass} ${mods}\">\r\n <select class=\"${rootClass}__select\" data-control=\"select\" ${selectAttributes}>\r\n ${inner}\r\n </select>\r\n </div>\r\n `};\r\n\r\nexport default template;\r\n","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\n(function (window) {\r\n\r\n var serviceSlider = function () {\r\n var menuStack = [];\r\n var ui = {};\r\n var isMobile;\r\n var SHOW_FULL_TEXT = 'collapsed';\r\n var MEDIA_QUERY = '(max-width: 991px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$serviceSlider = $('.js-service-slider-filler');\r\n ui.$clientSliderFilter = $('.js-vca-dropdown-list');\r\n ui.$clientSlider = $('.js-service-slider');\r\n ui.$serviceSliderFilter = document.querySelector('.js-slider-filter .js-vca-dropdown-input');\r\n ui.$serviceSliderFilter2 = $('.js-slider-filter .js-vca-dropdown-input');\r\n }\r\n function initSliderFilter(e) {\r\n ui.$clientSliderFilter.each(function (index, element) {\r\n $(this).find('a').each(function (ind, ele) {\r\n var filtervalue = $(this).data(\"filter\");\r\n if ($(this).data('filter') != undefined) {\r\n $(this).attr('data-filter-'+ index, filtervalue);\r\n }\r\n });\r\n });\r\n }\r\n function initServiceSlider(e) {\r\n\r\n const $carousel = $('.js-service-slider-filler');\r\n const showCount = Number($carousel.data('show-count'));\r\n const slidesPerRow = !isNaN(showCount) ? showCount : 5;\r\n \r\n var serviceSlider = ui.$serviceSlider.each(function (index, element) {\r\n $(this).addClass('js-service-slider-filler' + index);\r\n var item_length = $('.js-service-slider-filler' + index + ' > div').length;\r\n if (item_length > 0 && !isExperienceEditor) {\r\n $('.js-service-slider-filler' + index).slickFilterable({\r\n filterName: 'filter-' + index,\r\n filter: function (category, slider, settings) {\r\n return $(this).hasClass(category); \r\n },\r\n slick: {\r\n dots: true,\r\n arrows: true,\r\n infinite: false,\r\n slidesPerRow,\r\n rows: 2,\r\n responsive: [\r\n {\r\n breakpoint: 1279,\r\n settings: {\r\n slidesPerRow: 4\r\n }\r\n },\r\n {\r\n breakpoint: 991,\r\n settings: {\r\n slidesPerRow: 3\r\n }\r\n },\r\n {\r\n breakpoint: 767,\r\n settings: {\r\n slidesPerRow: 2,\r\n arrows: false\r\n }\r\n },\r\n {\r\n breakpoint: 575,\r\n settings: \"unslick\"\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n function initClientSlider(e) {\r\n const $carousel = $('.js-service-slider');\r\n const showCount = Number($carousel.data('show-count'));\r\n const slidesPerRow = !isNaN(showCount) ? showCount : 5;\r\n \r\n var clientSlider = ui.$clientSlider.each(function (index, element) {\r\n $(this).addClass('js-service-slider' + index);\r\n var item_length = $('.js-service-slider' + index + ' > div').length;\r\n if (item_length > 0 && !isExperienceEditor) {\r\n $('.js-service-slider' + index).slick({\r\n dots: true,\r\n arrows: true,\r\n infinite: false,\r\n slidesPerRow,\r\n rows: 2,\r\n responsive: [\r\n {\r\n breakpoint: 1279,\r\n settings: {\r\n slidesPerRow: 4\r\n }\r\n },\r\n {\r\n breakpoint: 991,\r\n settings: {\r\n slidesPerRow: 3\r\n }\r\n },\r\n {\r\n breakpoint: 767,\r\n settings: {\r\n slidesPerRow: 2,\r\n arrows: false\r\n }\r\n },\r\n {\r\n breakpoint: 575,\r\n settings: \"unslick\"\r\n }\r\n ]\r\n });\r\n }\r\n });\r\n }\r\n\r\n\r\n function bindEvents() {\r\n //console.log('thing ',ui.$serviceSliderFilter);\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n bindEvents();\r\n initSliderFilter();\r\n initServiceSlider();\r\n initClientSlider();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n };\r\n\r\n var serviceSlider = serviceSlider();\r\n serviceSlider.init();\r\n})(window);","import { screenMdMax } from '@utils/match-media';\r\n\r\nconst SLICK_OPTIONS = {\r\n arrows: false,\r\n dots: true,\r\n rows: 0\r\n};\r\n\r\nexport default class Shop50Promo {\r\n constructor($el) {\r\n this.$el = $el;\r\n this.$carousel = this.$el.find('[data-region=\"carousel\"]');\r\n \r\n this.isSlicked = false;\r\n }\r\n\r\n init() {\r\n this.setupCarousel();\r\n this.setupListeners();\r\n }\r\n\r\n setupCarousel() {\r\n if(screenMdMax.matches) {\r\n this.$carousel.slick(SLICK_OPTIONS);\r\n this.isSlicked = true;\r\n } else if(this.isSlicked) {\r\n this.$carousel.slick('unslick');\r\n this.isSlicked = false;\r\n }\r\n }\r\n\r\n setupListeners() {\r\n screenMdMax.addEventListener('change', () => this.setupCarousel());\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-shop-50-50');\r\n rootEls?.forEach((el) => {\r\n const $el = $(el);\r\n const shopPromo = new Shop50Promo($el);\r\n shopPromo.init();\r\n });\r\n});\r\n","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\n(function (window) {\r\n\r\n var imageSlider = function () {\r\n var menuStack = [];\r\n var ui = {};\r\n var isMobile;\r\n var SHOW_FULL_TEXT = 'collapsed';\r\n var MEDIA_QUERY = '(max-width: 991px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n var isExperienceEditor = $('#sitecore-page-mode').attr('data-attribute');\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$imageSlider = $('.js-single-slide-slider');\r\n }\r\n\r\n function initImageSlider(e) {\r\n var imageSlider = ui.$imageSlider.each(function (index, element) {\r\n $(this).addClass('js-single-slide-slider' + index);\r\n var item_length = $('.js-single-slide-slider' + index + ' > div').length;\r\n if(item_length > 1 && !isExperienceEditor) {\r\n $('.js-single-slide-slider' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: false,\r\n dots: true,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n adaptiveHeight: true,\r\n focusOnChange: true,\r\n accessibility: true\r\n });\r\n }\r\n });\r\n }\r\n\r\n\r\n function bindEvents() {}\r\n\r\n function init() {\r\n cacheUI();\r\n bindEvents();\r\n initImageSlider();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n };\r\n\r\n var imageSlide = imageSlider();\r\n imageSlide.init();\r\n})(window);","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\nvar VCA = VCA || {};\r\n\r\n\r\nVCA.Stats = (function ($) {\r\n\r\n var ui = {};\r\n var MEDIA_QUERY = '(max-width: 767px)';\r\n var mql = window.matchMedia(MEDIA_QUERY);\r\n var started = false;\r\n\r\n function init() {\r\n setTextTwoActive();\r\n bindTextHover();\r\n cacheUI();\r\n initStatMobileSlider();\r\n }\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$statsSlider = $('.js-stat-row');\r\n }\r\n\r\n function bindTextHover() {\r\n $(document).on('mouseover', '.stats__item', function (e) {\r\n var element = $(this);\r\n var isActive = $(this);\r\n e.stopPropagation();\r\n if (!started) {\r\n if (!mql.matches && !$(this).hasClass('active')) {\r\n started = true;\r\n var targetID = $(this).attr(\"data-text\");\r\n var $target = $('.js-item-text[data-peek=\"' + targetID + '\"]');\r\n $('.js-interactive-text').removeClass('active');\r\n $(this).children('.js-interactive-text').addClass('active');\r\n $('.js-item-text').fadeOut(\"fast\").promise().done(function () {\r\n $target.fadeIn(\"fast\");\r\n started = false;\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n function initStatMobileSlider() {\r\n if (mql.matches) {\r\n var statsSlider = ui.$statsSlider.each(function (index, element) {\r\n $(this).addClass('js-stat-row' + index);\r\n var item_length = $('.js-stat-row' + index + ' > div').length;\r\n var startItem = 0;\r\n if ($(this).hasClass('js-stats-interactive')) {\r\n startItem = 1;\r\n }\r\n if (item_length > 1 && !isExperienceEditor) {\r\n $('.js-stat-row' + index).slick({\r\n autoplay: false,\r\n infinite: false,\r\n arrows: false,\r\n dots: true,\r\n initialSlide: startItem,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n adaptiveHeight: true,\r\n focusOnChange: true,\r\n accessibility: true,\r\n mobileFirst: true,\r\n responsive: [{\r\n breakpoint: 767,\r\n settings: \"unslick\"\r\n }]\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n function setTextTwoActive() {\r\n if (!mql.matches) {\r\n $('[data-text=\"text-two\"]').children('.js-interactive-text').addClass('active');\r\n $('.js-item-text[data-peek=\"text-two\"]').fadeIn(\"fast\");\r\n }\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.Stats.init();\r\n});","import isExperienceEditor from '@utils/is-experience-editor';\r\n\r\nconst DISABLED_CLASS_NAME = '-disabled';\r\n\r\nexport default class StoryCarousel {\r\n constructor({ $el }) {\r\n this.$el = $el;\r\n\r\n this.$slider = this.$el.find('[data-region=\"slider\"]');\r\n\r\n this.$pauseLabel = this.$el.find('[data-label=\"pause\"]');\r\n this.$playLabel = this.$el.find('[data-label=\"play\"]');\r\n\r\n this.$next = this.$el.find('[data-control=\"next\"]');\r\n this.$prev = this.$el.find('[data-control=\"prev\"]');\r\n this.$playPause = this.$el.find('[data-control=\"playPause\"]');\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.setupSlider();\r\n this.setupListeners();\r\n }\r\n\r\n onBeforeChange({ slideCount }, nextSlide) {\r\n this.$prev.removeAttr('aria-disabled').removeClass(DISABLED_CLASS_NAME);\r\n this.$next.removeAttr('aria-disabled').removeClass(DISABLED_CLASS_NAME);\r\n\r\n if(nextSlide === 0) {\r\n this.$prev.attr('aria-disabled', true).addClass(DISABLED_CLASS_NAME);\r\n } else if ((nextSlide + 1) === slideCount) {\r\n this.$next.attr('aria-disabled', true).addClass(DISABLED_CLASS_NAME);\r\n }\r\n }\r\n\r\n onNext() {\r\n this.$slider.slick('slickNext');\r\n }\r\n\r\n onPrev() {\r\n this.$slider.slick('slickPrev');\r\n }\r\n\r\n onPlayPause() {\r\n const slick = this.$slider.slick('getSlick');\r\n const paused = slick.paused;\r\n\r\n paused ? this.play() : this.pause();\r\n }\r\n\r\n pause() {\r\n this.$slider.slick('slickPause');\r\n this.$playPause.removeClass('-pause').addClass('-play');\r\n }\r\n\r\n play() {\r\n this.$slider.slick('slickPlay');\r\n this.$playPause.removeClass('-play').addClass('-pause');\r\n }\r\n\r\n setupSlider() {\r\n this.$slider.slick({\r\n arrows: false,\r\n autoplay: true,\r\n autoplaySpeed: 3000,\r\n infinite: false,\r\n fade: true,\r\n pauseOnHover: false,\r\n speed: 1000,\r\n });\r\n\r\n this.$prev.attr('aria-disabled', true).addClass(DISABLED_CLASS_NAME);\r\n }\r\n\r\n setupListeners() {\r\n this.$next.on('click', () => this.onNext());\r\n this.$prev.on('click', () => this.onPrev());\r\n this.$playPause.on('click', () => this.onPlayPause());\r\n this.$slider.on('beforeChange', (...[,slick,,nextSlide]) => this.onBeforeChange(slick, nextSlide));\r\n this.$slider.on('focus', 'a[href], button, input, textarea, select, details,[tabindex]:not([tabindex=\"-1\"])', () => this.pause());\r\n }\r\n}\r\n\r\n$('.js-story-carousel').each(function() {\r\n const $el = $(this);\r\n if(!isExperienceEditor) {\r\n new StoryCarousel({\r\n $el\r\n });\r\n } else {\r\n $el.addClass('-isExperienceEditor');\r\n }\r\n});\r\n","import template from './templates/delivery-address';\r\nimport parseRenderingContext from '@utils/parse-rendering-context';\r\nimport CheckoutShipping from '../checkout/checkout-shipping.js';\r\nimport { dataProperties } from '../myVCA/manage-subscriptions';\r\n\r\nexport default class DeliveryAddress extends CheckoutShipping.extendTemplate(template) {\r\n constructor($originEl, context) {\r\n super($originEl, context, {\r\n checkoutFormClassList: 'bg-transparent padding-0'\r\n });\r\n\r\n this.$submitCtrl = this.$el.find('[data-control=\"submit\"]');\r\n\r\n this.watch('selectedAddressValue', () => this.onAddressChange());\r\n }\r\n\r\n onAddressChange() {\r\n this.$submitCtrl.attr(`data-${dataProperties.vetsourceAddressId}`, this.selectedAddressInfo.AddressName);\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-delivery-address');\r\n rootEls.forEach((el) => {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n const shipping = new DeliveryAddress($el, renderingContext);\r\n shipping.init();\r\n });\r\n});\r\n","import template from './templates/payment-method';\r\nimport parseRenderingContext from '@utils/parse-rendering-context';\r\nimport CheckoutBilling from '../checkout/checkout-billing.js';\r\nimport { dataProperties } from '../myVCA/manage-subscriptions';\r\n\r\nexport default class PaymentMethod extends CheckoutBilling.extendTemplate(template) {\r\n constructor($originEl, context) {\r\n super($originEl, context, {\r\n addPaymentFormClassList: 'bg-transparent p-0'\r\n });\r\n\r\n this.$submitCtrl = this.$el.find('[data-control=\"submit\"]');\r\n\r\n this.watch('selectedMethodValue', () => this.onPaymentChange());\r\n }\r\n\r\n onPaymentChange() {\r\n this.$submitCtrl.attr(`data-${dataProperties.paymentId}`, this.selectedMethodValue);\r\n }\r\n}\r\n\r\n$(() => {\r\n const rootEls = document.querySelectorAll('.js-payment-method');\r\n rootEls.forEach((el) => {\r\n const $el = $(el);\r\n const renderingContext = parseRenderingContext(el);\r\n\r\n const shipping = new PaymentMethod($el, renderingContext);\r\n shipping.init();\r\n });\r\n});\r\n","// Module\nvar code = \"<div> <div class=\\\"d-md-flex align-items-center mb-3 mb-md-0\\\"> <div class=\\\"subscription-details__section__value subscription-details__section__dropdown form-label-group mb-md-0 mr-0 mr-md-3\\\"> <div data-placeholder=\\\"address\\\"></div> </div> <div data-region=\\\"controls\\\"> <button type=\\\"button\\\" class=\\\"underline text-color-vca-mud\\\" data-control=\\\"edit\\\"> Edit Existing Address </button> | <button type=\\\"button\\\" class=\\\"underline text-color-vca-mud\\\" data-control=\\\"add\\\"> Add New </button> </div> </div> <div class=\\\"subscription-details__form\\\" data-region=\\\"form\\\"> <br/> <div data-placeholder=\\\"form\\\"></div> </div> <div data-region=\\\"hidden-on-form\\\"> <div class=\\\"subscription-details__action-btns\\\"> <div class=\\\"d-flex\\\"> <button class=\\\"js-submit-edits btn btn-sky-outline-alt\\\" data-control=\\\"submit\\\" data-edit=\\\"address\\\">Apply Updates</button> <button class=\\\"js-cancel-edits\\\">Cancel</button> </div> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","import template from './delivery-address.html';\r\n\r\nexport default template;\r\n","import template from './payment-method.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"checkout-step\\\"> <div class=\\\"mb-4\\\"> <div class=\\\"d-md-flex align-items-center mb-3 mb-md-0\\\"> <div class=\\\"subscription-details__section__value subscription-details__section__dropdown form-label-group mb-md-0 mr-0 mr-md-3\\\"> <div data-placeholder=\\\"method\\\"></div> </div> <button type=\\\"button\\\" class=\\\"underline text-color-vca-mud\\\" data-control=\\\"addMethod\\\"> Add New </button> </div> <div data-region=\\\"hidden-on-form\\\"> <div class=\\\"subscription-details__action-btns\\\"> <div class=\\\"d-flex\\\"> <button class=\\\"js-submit-edits btn btn-sky-outline-alt\\\" data-control=\\\"submit\\\" data-edit=\\\"payment\\\">Apply Updates</button> <button class=\\\"js-cancel-edits\\\">Cancel</button> </div> </div> </div> </div> <div class=\\\"checkout-step__form\\\" data-region=\\\"methodForm\\\"> <div id=\\\"addPaymentContainer\\\" class=\\\"checkout-address-form\\\"> <h2 class=\\\"checkout-address-form__heading\\\" data-label=\\\"heading\\\"></h2> <ul class=\\\"d-flex list-inline\\\" data-region=\\\"ccList\\\"> <li data-region=\\\"visa\\\"></li> <li data-region=\\\"discover\\\"></li> <li data-region=\\\"mastercard\\\"></li> <li data-region=\\\"amex\\\"></li> </ul> <div id=\\\"paymentFrameContainer\\\"></div> <h2 class=\\\"checkout-selector__label\\\" data-label=\\\"heading-card-name\\\"></h2> <div class=\\\"checkout-address-form__row row mb-4\\\"> <div class=\\\"checkout-address-form__field col-12 col-xl-8\\\"> <label class=\\\"sr-only\\\" data-label=\\\"cardHolderName\\\"> </label> <input class=\\\"checkout-address-form__input\\\" type=\\\"text\\\" aria-required=\\\"true\\\" autofill=\\\"given-name\\\" required data-control=\\\"cardHolderName\\\"/> <div class=\\\"checkout-address-form__error\\\" data-region=\\\"cardHolderNameError\\\"> <span class=\\\"far fa-exclamation-circle mr-2\\\" aria-hidden=\\\"true\\\"></span> <span data-label=\\\"cardHolderNameError\\\"></span> </div> </div> </div> <label class=\\\"checkout-selector__label\\\" data-region=\\\"address\\\"> <span data-label=\\\"address\\\"></span> </label> <div class=\\\"checkout-selector__wrapper\\\"> <div class=\\\"checkout-selector__selector\\\"> <div data-placeholder=\\\"address\\\"></div> <div class=\\\"checkout-selector__loader\\\"> <div data-placeholder=\\\"addressLoader\\\"></div> </div> </div> <div class=\\\"checkout-selector__controls\\\"> <ul class=\\\"checkout-selector__list\\\" data-region=\\\"controls\\\" aria-labelledby=\\\"billingAddress\\\"> <li class=\\\"checkout-selector__list-item\\\"> <button type=\\\"button\\\" class=\\\"checkout-selector__btn\\\" data-control=\\\"addAddress\\\" aria-expanded=\\\"true\\\" aria-controls=\\\"addressForm_l51mys4m\\\"> <span data-label=\\\"add\\\">Add New</span> </button> </li> </ul> </div> </div> <div class=\\\"checkout-step__form\\\" data-region=\\\"addressForm\\\"> <div data-placeholder=\\\"addressForm\\\"></div> </div> <div class=\\\"form-check pl-1 my-3\\\"> <input name=\\\"active-subscriptions\\\" type=\\\"checkbox\\\" id=\\\"active-subscriptions\\\" class=\\\"form-check-input\\\"/> <label for=\\\"active-subscriptions\\\" class=\\\"form-check-label\\\" data-label=\\\"subscriptions\\\">Update current subscriptions to this payment method</label> </div> <div class=\\\"form-check pl-1 my-3\\\"> <input name=\\\"default-payment\\\" type=\\\"checkbox\\\" id=\\\"default-payment\\\" class=\\\"form-check-input\\\"/> <label for=\\\"default-payment\\\" class=\\\"form-check-label\\\" data-label=\\\"payment\\\">Set as default payment method</label> </div> <div class=\\\"col-md-7 d-flex flex-column p-0 flex-sm-row mt-3\\\"> <button type=\\\"button\\\" class=\\\"checkout-address-form__submit btn btn-sky-outline-alt text-nowrap\\\" id=\\\"savePayment\\\"> <span role=\\\"text\\\" class=\\\"position-relative\\\"> <span class=\\\"position-absolute ml-n4\\\" id=\\\"paymentLoader\\\"></span> <span data-label=\\\"submit\\\"></span> </span> </button> <button type=\\\"button\\\" class=\\\"checkout-address-form__submit btn btn-sky-outline-alt ml-sm-3\\\" data-control=\\\"methodCancel\\\"> <span data-label=\\\"cancel\\\"></span> </button> </div> <p role=\\\"alert\\\" class=\\\"text-color-vca-red p-body-small mt-3 mb-0\\\" id=\\\"addPaymentFailure\\\" style=\\\"display:none\\\"></p> </div> </div> </div> \";\n// Exports\nmodule.exports = code;","$(function() {\r\n const $desktopButtons = $('.fifty-fifty__secondcol').find('.js-carat-btn');\r\n const $mobileButtons = $('.caret__mob-container').find('.js-carat-btn');\r\n \r\n function showContentForActiveButton($buttons, containerClass) {\r\n const $activeButton = $buttons.filter('.active');\r\n // Get the data-caret-id of the active button\r\n const caretId = $activeButton.closest('.caret__shape-container').data('caret-id');\r\n \r\n $(containerClass).find('.js-tab-caret').addClass('hidden');\r\n \r\n // Show the content div with the matching data-caret-id\r\n const $contentToShow = $(`${containerClass} .js-tab-caret[data-target-id=\"${caretId}\"]`);\r\n \r\n if ($contentToShow.length) {\r\n $contentToShow.removeClass('hidden');\r\n }\r\n }\r\n\r\n $desktopButtons.on('click', function() {\r\n $desktopButtons.removeClass('active');\r\n $(this).addClass('active');\r\n showContentForActiveButton($desktopButtons, '.fifty-fifty__firstcol');\r\n });\r\n\r\n $mobileButtons.on('click', function() {\r\n $mobileButtons.removeClass('active');\r\n $(this).addClass('active');\r\n $('.js-caret-modal').addClass('show');\r\n showContentForActiveButton($mobileButtons, '.vca-modal__body');\r\n });\r\n\r\n $('.js-caret-modal-close').on('click', function() {\r\n $('.js-caret-modal').removeClass('show');\r\n $mobileButtons.removeClass('active');\r\n });\r\n\r\n});\r\n","$(function() {\r\n var tabContents = document.getElementsByClassName(\"tabcontent-js\");\r\n var currentTabId = '';\r\n var startX = 0;\r\n var startY = 0;\r\n var isInitialLoad = true; // Flag to indicate if it's the initial load\r\n var viewportWidth = window.innerWidth\r\n\r\n\r\n function handleTouchStart(event) {\r\n if (event && event.touches && event.touches[0]) {\r\n startX = event.touches[0].clientX;\r\n startY = event.touches[0].clientY;\r\n }\r\n }\r\n\r\n function handleTouchMove(event) {\r\n \r\n if (!startX || !startY) {\r\n return;\r\n }\r\n\r\n if (event && event.touches && event.touches[0]) {\r\n var xDiff = startX - event.touches[0].clientX;\r\n var yDiff = startY - event.touches[0].clientY;\r\n\r\n if (Math.abs(xDiff) > Math.abs(yDiff)) {\r\n var tablinks = document.getElementsByClassName(\"tablinks\");\r\n var currentIndex = Array.from(tablinks).findIndex(link => link.getAttribute('data-tab-id') === currentTabId);\r\n \r\n let newIndex = currentIndex;\r\n\r\n if (xDiff > 0) { // Swiping left\r\n if (currentIndex < tablinks.length - 1 && tablinks[currentIndex + 1].getAttribute('data-check') === tablinks[currentIndex].getAttribute('data-check')) {\r\n newIndex++;\r\n }\r\n } else { // Swiping right\r\n if (currentIndex > 0 && tablinks[currentIndex - 1].getAttribute('data-check') === tablinks[currentIndex].getAttribute('data-check')) {\r\n newIndex--;\r\n }\r\n }\r\n\r\n if (newIndex !== currentIndex) {\r\n let checkId = tablinks[newIndex].getAttribute('data-check');\r\n openTab(tablinks[newIndex].getAttribute('data-tab-id'), checkId);\r\n }\r\n }\r\n\r\n startX = 0;\r\n startY = 0;\r\n }\r\n }\r\n\r\n\r\n function openTab(tabId, check = \"\") {\r\n let tablinks = document.getElementsByClassName(\"tablinks\");\r\n let tabContents = document.getElementsByClassName(\"tabcontent-js\");\r\n\r\n // Ensure tabId is valid\r\n if (!tabId || !document.getElementById(tabId)) {\r\n return;\r\n }\r\n\r\n currentTabId = tabId;\r\n\r\n \r\n\r\n for (let i = 0; i < tablinks.length; i++) {\r\n const tabCheck = tablinks[i].getAttribute(\"data-check\");\r\n if (tabCheck === check) {\r\n tablinks[i].setAttribute(\"aria-selected\", \"false\");\r\n tablinks[i].classList.remove(\"active\")\r\n var tabData = tablinks[i].getAttribute(\"data-classModifiers\");\r\n if (tabData) {\r\n tabData = tabData.split(\",\");\r\n tabData.forEach((data) => {\r\n tablinks[i].classList.remove(data);\r\n });\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < tabContents.length; i++) {\r\n \r\n const contentCheck = tablinks[i].getAttribute(\"data-check\");\r\n if (contentCheck === check) {\r\n tabContents[i].classList.add(\"hidden\");\r\n }\r\n }\r\n\r\n // Add content to active tab\r\n var activeTabContent = document.getElementById(tabId);\r\n if (activeTabContent) {\r\n activeTabContent.classList.remove(\"hidden\");\r\n }\r\n\r\n var activeTabLink = document.querySelector(`.tablinks[data-tab-id=\"${tabId}\"]`);\r\n if (activeTabLink) {\r\n activeTabLink.setAttribute(\"aria-selected\", \"true\");\r\n activeTabLink.classList.add(\"active\")\r\n\r\n // Add separate tab color\r\n let tabClass = activeTabLink.getAttribute(\"data-classModifiers\");\r\n if (tabClass) {\r\n tabClass = tabClass.split(\",\");\r\n tabClass.forEach((data) => {\r\n activeTabLink.classList.add(data);\r\n });\r\n }\r\n\r\n if (!isInitialLoad && viewportWidth < 767) {\r\n activeTabLink.scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' });\r\n }\r\n\r\n }\r\n }\r\n\r\n var tablinks = document.getElementsByClassName(\"tablinks\");\r\n var isTabSelected = false;\r\n\r\n if (tablinks) {\r\n for (let i = 0; i < tablinks.length; i++) {\r\n tablinks[i].addEventListener(\"click\", function (event) {\r\n let tabId = event.target.getAttribute('data-tab-id');\r\n let checkId = event.target.getAttribute('data-check');\r\n if (tabId) {\r\n openTab(tabId, checkId);\r\n }\r\n });\r\n\r\n var tabstatus = tablinks[i].getAttribute(\"aria-selected\");\r\n var checkId = tablinks[i].getAttribute('data-check');\r\n // Choose first selected tab\r\n if (tabstatus === 'true') {\r\n openTab(tablinks[i].getAttribute('data-tab-id'), checkId);\r\n isTabSelected = true;\r\n }\r\n }\r\n\r\n if (!isTabSelected && tablinks.length > 0) {\r\n let checkId = tablinks[0].getAttribute('data-check');\r\n openTab(tablinks[0].getAttribute('data-tab-id'), checkId);\r\n }\r\n isInitialLoad = false;\r\n }\r\n \r\n for (let i = 0; i < tabContents.length; i++) {\r\n tabContents[i].addEventListener(\"touchstart\", handleTouchStart, false);\r\n tabContents[i].addEventListener(\"touchmove\", handleTouchMove, false);\r\n }\r\n \r\n \r\n});\r\n","$(function() { \r\n \r\n clickTabContent();\r\n\r\n $(document).on('click', '.pdp-info-tabs__nav-item', function () {\r\n var defaultValue = $(this).attr('default-color');\r\n var activeValue = $(this).attr('active-color');\r\n var borderValue = $(this).attr('active-border-color');\r\n var mobBorderValue = $(this).attr('active-border-color');\r\n checkActiveClass(defaultValue, activeValue, borderValue);\r\n checkmobActiveClass(defaultValue, activeValue, mobBorderValue);\r\n });\r\n \r\n function checkActiveClass(defaultValue, activeValue, borderValue) {\r\n $('#TabNavDesktop').find('button.active').removeClass(defaultValue).addClass(activeValue + ' ' + borderValue);\r\n $('#TabNavDesktop').find('button:not(.active)').each(function () {\r\n var defaultValue = $(this).parent('.pdp-info-tabs__nav-item').attr('default-color');\r\n var activeValue = $(this).parent('.pdp-info-tabs__nav-item').attr('active-color');\r\n var borderValue = $(this).parent('.pdp-info-tabs__nav-item').attr('active-border-color');\r\n $(this).addClass(defaultValue).removeClass(activeValue + ' ' + borderValue);\r\n });\r\n }\r\n\r\n function checkmobActiveClass(defaultValue, activeValue, mobBorderValue) { \r\n $('#TabNavMobile').find('button:not(.collapsed)').removeClass(defaultValue).addClass(activeValue + ' ' + mobBorderValue);\r\n $('#TabNavMobile').find('button.collapsed').each(function () {\r\n var defaultValue = $(this).parent('.pdp-info-tabs__nav-item').attr('default-color');\r\n var activeValue = $(this).parent('.pdp-info-tabs__nav-item').attr('active-color');\r\n var mobBorderValue = $(this).parent('.pdp-info-tabs__nav-item').attr('active-border-color');\r\n $(this).addClass(defaultValue).removeClass(activeValue + ' ' + mobBorderValue);\r\n }); \r\n }\r\n\r\n function clickTabContent() {\r\n $('#pdpInfoTabs_Mobile').find('.pdp-info-tabs__nav-link').on('click', function (e) {\r\n e.preventDefault();\r\n let targetElementOffset = $('#TabNavMobile').offset().top - 180;\r\n $('html, body').animate({\r\n scrollTop: targetElementOffset\r\n }, 20);\r\n });\r\n }\r\n});\r\n","\r\nwindow.VCA = window.VCA || {};\r\n\r\nwindow.VCA.Tooltips = (function ($) {\r\n\r\n var ui = {};\r\n\r\n function init() {\r\n hightLightDay();\r\n initVCATooltip();\r\n initVCAPromoTooltip();\r\n\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n\r\n $('html').on('click', function (e) {\r\n $('[data-toggle=\"popover\"]').each(function () {\r\n if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {\r\n $(this).popover('hide');\r\n }\r\n });\r\n });\r\n }\r\n\r\n function hightLightDay() {\r\n var d = new Date();\r\n var day = new Date().toLocaleString('en-us', { weekday: 'short' })\r\n $('div[data-day=\"' + day + '\"').addClass('current-day');\r\n }\r\n\r\n function initVCATooltip() { \r\n $('*[data-toggle=\"popover\"]').each(function () {\r\n $(this).popover(\r\n {\r\n html: true,\r\n trigger: 'click',\r\n title: $('#' + $(this).data('target')).html(),\r\n template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"popover-header\"></div></div>',\r\n placement: 'auto'\r\n });\r\n });\r\n }\r\n\r\n function initVCAPromoTooltip() { \r\n $('*[data-toggle=\"popover-hover\"]').each(function () {\r\n $(this).popover(\r\n {\r\n html: true,\r\n trigger: 'hover',\r\n title: $('#' + $(this).data('target')).html(),\r\n template: '<div class=\"promo-pill__tooltip tooltip\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"popover-header tooltip-inner\"></div></div>',\r\n placement: $(this).data('placement')\r\n });\r\n });\r\n } \r\n\r\n\r\n return {\r\n init: init,\r\n initVCAPromoTooltip: initVCAPromoTooltip\r\n };\r\n\r\n \r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n window.VCA.Tooltips.init();\r\n});\r\n\r\n","$(document).ready(function() {\r\n var $searchButton = $(\"#js-search-button\");\r\n var $searchInput = $(\"#js-search-input\");\r\n selectedValue = 10; // Default value\r\n $searchRadius = $('#careTypeSearchRadius').val();\r\n $('.careType__filter').text(`${$searchRadius} miles`);\r\n\r\n // Function to handle search button click or Enter key press\r\n function handleSearch() {\r\n selectedValue = $('.selected').attr('data-value') ?? 10 // Ensure selectedValue has a fallback\r\n var searchInputValue = $searchInput.val().trim();\r\n var careType = $(\"#type-search\").attr(\"care-type\");\r\n var baseUrl = $searchButton.data('redirect');\r\n const hospitalIds = $(\"#type-search\").attr(\"care-hospital-id\");\r\n let url = `${baseUrl}?text=${searchInputValue}&radius=${selectedValue}&ht=${careType}&hosp=${hospitalIds}`;\r\n $searchInput.val('');\r\n window.location.href = url;\r\n \r\n }\r\n\r\n // Handle search button click\r\n if ($searchButton.length) {\r\n $searchButton.on(\"click\", handleSearch);\r\n }\r\n\r\n // Handle Enter key press on the search input\r\n if ($searchInput.length) {\r\n $searchInput.on(\"keypress\", function(event) {\r\n if (event.which === 13) {\r\n event.preventDefault(); // Prevent the default action, like form submission\r\n handleSearch();\r\n }\r\n });\r\n }\r\n\r\n \r\n\r\n\r\n\r\n});","import template from './ups-copyright.html';\r\n\r\nexport default template;\r\n","// Module\nvar code = \"<div class=\\\"ups-copyright\\\"> <div class=\\\"ups-copyright__logo\\\" data-region=\\\"logo\\\"> </div> <p class=\\\"m-0\\\" data-region=\\\"text\\\"></p> </div> \";\n// Exports\nmodule.exports = code;","import template from './templates';\r\n\r\nconst DEFAULT_CONTEXT = {\r\n logo: {\r\n alt: 'UPS'\r\n },\r\n text: 'UPS, the UPS brand mark, and the Color Brown are trademarks of United Parcel Service of America, Inc. All Rights Reserved'\r\n};\r\n\r\nconst DEFAULT_OPTIONS = {\r\n replaceOriginEl: false\r\n};\r\n\r\nexport default class UpsCopyright {\r\n constructor($originEl, options, context) {\r\n options = { ...DEFAULT_OPTIONS, ...options };\r\n context = { ...DEFAULT_CONTEXT, ...context };\r\n\r\n const $parsed = $($.parseHTML(template));\r\n this.$el = $parsed;\r\n this.$originEl = $originEl;\r\n\r\n this.$logo = this.$el.find('[data-region=\"logo\"]');\r\n this.$text = this.$el.find('[data-region=\"text\"]');\r\n\r\n this.replaceOriginEl = options.replaceOriginEl;\r\n\r\n this.context = context;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.renderRegions();\r\n }\r\n\r\n render() {\r\n if(this.$originEl) {\r\n if(this.replaceOriginEl) {\r\n this.$originEl.replaceWith(this.$el);\r\n } else {\r\n this.$originEl.html(this.$el);\r\n }\r\n }\r\n\r\n return this.$el;\r\n }\r\n\r\n renderRegions() {\r\n if(this.context.logo.url) {\r\n const img = document.createElement('img');\r\n img.alt = this.context.logo.alt;\r\n img.src = this.context.logo.url;\r\n this.$logo.html(img);\r\n } else {\r\n this.$logo.hide();\r\n }\r\n\r\n this.$text.html(this.context.text);\r\n }\r\n}\r\n","import ApiService from '@api/api-service';\r\nimport * as submitSpinner from '../custom-forms/form-loading';\r\n\r\nvar VCA = VCA || {};\r\n\r\nVCA.UrgentCareVWRForm = (function ($) {\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n ui.$VWRInfoWrapper = $('#VWRInfoWrapper');\r\n ui.$VWRChatWrapper = $('#VWRChatWrapper');\r\n ui.$VWR = $('#VirtualWaitingRoomLabel');\r\n ui.$VWRModal = $('#VWRFormModal');\r\n ui.$VMRForm = $('.uc-vwr-form');\r\n ui.$VMRFormPhoneNum = $('#VWRPhoneNum');\r\n ui.$InputEl = $('.uc-vwr-modal input');\r\n ui.$SelectEl = $('.uc-vwr-modal select');\r\n ui.$TextAreaEl = $('.uc-vwr-modal textarea');\r\n ui.$APIErrorMessage = $('.uc-vwr-modal__error-msg');\r\n ui.$VWRFormSubmitBtn = $('#VWRFormSubmit');\r\n ui.$VWRChatCTA = $('.vwr-chat-cta');\r\n ui.$VWRReferralPrimaryVet = $('label[for=VWRReferralPrimaryVet], Input#VWRReferralPrimaryVet');\r\n ui.$VWRReferralEmergencyHospital = $('label[for=VWRReferralEmergencyHospital], Input#VWRReferralEmergencyHospital');\r\n ui.$VWRReferralSource = $(\"#VWRReferralSource\");\r\n\r\n //helpshift\r\n ui.$HelpshiftChatBubbleBtn = $('.chat_bubble_button');\r\n ui.$HelpshiftAlertContainer = $('#alert');\r\n ui.$HelpshiftCloseBtn = $('#closebtn');\r\n ui.hospitalId = $('#VCAHospitalID').data('hospital-au');\r\n }\r\n\r\n function bindEvents() {\r\n ui.$VWRInfoWrapper.on('click', showFormModal);\r\n ui.$VWRChatWrapper.on('click', initHelpshiftChat);\r\n ui.$VMRForm.on('submit', validateForm);\r\n $(ui.$InputEl).on('keyup change', hideErrors);\r\n $(ui.$SelectEl).on('change', hideErrors);\r\n $(ui.$TextAreaEl).on('keyup change', hideErrors);\r\n ui.$HelpshiftChatBubbleBtn.on('click', openHelpshiftChat);\r\n ui.$HelpshiftAlertContainer.on('click', openHelpshiftChat);\r\n ui.$HelpshiftCloseBtn.on('click', helpshiftCloseBtn);\r\n ui.$VWRReferralPrimaryVet.hide();\r\n ui.$VWRReferralEmergencyHospital.hide();\r\n submitSpinner.setupLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n $(ui.$VWRReferralSource).on('change', onSelectReferralSource)\r\n }\r\n\r\n \r\n function onSelectReferralSource(){\r\n if($(this).val() == 15) {\r\n ui.$VWRReferralEmergencyHospital.hide();\r\n $('#VWRReferralPrimaryVet').val('');\r\n ui.$VWRReferralPrimaryVet.show();\r\n ui.$VWRReferralEmergencyHospital.removeClass('error');\r\n ui.$VWRReferralEmergencyHospital.closest('.form-label-group').removeClass('error');\r\n }\r\n else if($(this).val() == 16) {\r\n ui.$VWRReferralPrimaryVet.hide();\r\n $('#VWRReferralEmergencyHospital').val('');\r\n ui.$VWRReferralEmergencyHospital.show();\r\n ui.$VWRReferralPrimaryVet.removeClass('error');\r\n ui.$VWRReferralPrimaryVet.closest('.form-label-group').removeClass('error');\r\n }\r\n else{\r\n ui.$VWRReferralPrimaryVet.hide();\r\n ui.$VWRReferralEmergencyHospital.hide();\r\n ui.$VWRReferralEmergencyHospital.removeClass('error');\r\n ui.$VWRReferralEmergencyHospital.closest('.form-label-group').removeClass('error');\r\n ui.$VWRReferralPrimaryVet.removeClass('error');\r\n ui.$VWRReferralPrimaryVet.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n\r\n function hideErrors(e) {\r\n let el = $(e.currentTarget);\r\n $(el).removeClass('error');\r\n $(el).closest('.form-label-group').removeClass('error');\r\n }\r\n\r\n function showFormModal(e) {\r\n let el = $(e.target);\r\n let target = $(e.target)[0];\r\n\r\n if ($(target).hasClass('tooltip-icon') || $(target).hasClass('uc-hero-panel__tooltip')) {\r\n e.preventDefault();\r\n return;\r\n } else {\r\n let hospitalName = el.data('hospital-name'); \r\n ui.$VWRModal.modal('show');\r\n\r\n ui.$VWRModal.find('#VWRPhoneNum').on('input', function () {\r\n let value = $(this).val();\r\n $(this).val(value.replace(/\\D/g, ''));\r\n });\r\n \r\n ui.$VWRModal.find('#VWRPhoneNum').on('keydown', function (e) {\r\n if (\r\n e.key !== 'Backspace' &&\r\n e.key !== 'Tab' &&\r\n e.key !== 'ArrowLeft' &&\r\n e.key !== 'ArrowRight' &&\r\n e.key !== 'Delete' &&\r\n !/^\\d$/.test(e.key)\r\n ) {\r\n e.preventDefault();\r\n }\r\n });\r\n \r\n //google analytics\r\n window.dataLayer.push({\r\n event:'clickevent',\r\n category:'vca urgent care',\r\n action:'join vwr',\r\n label: hospitalName\r\n });\r\n }\r\n\r\n }\r\n\r\n function validateForm(evt) {\r\n evt.preventDefault();\r\n ui.$APIErrorMessage.hide();\r\n submitSpinner.startLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n\r\n if (!checkForm()) {\r\n submitSpinner.stopLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n return;\r\n } else {\r\n initPostForm();\r\n }\r\n }\r\n\r\n function checkForm() {\r\n let phoneReg = /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/;\r\n let valid = true;\r\n\r\n $('.uc-vwr-form input').each(function (index) {\r\n let el = $(this);\r\n var elmId = el.attr('id');\r\n console.log('input', elmId);\r\n var referralSourceValue = ui.$VWRReferralSource.val();\r\n if (elmId == 'VWRReferralPrimaryVet') {\r\n if (referralSourceValue == 15 && el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else if (elmId == 'VWRReferralEmergencyHospital') {\r\n if (referralSourceValue == 16 && el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n } else if (elmId == 'VWRPhoneNum') {\r\n let phone = ui.$VMRFormPhoneNum.val();\r\n if (!phoneReg.test(phone)) {\r\n ui.$VMRFormPhoneNum.addClass('error');\r\n ui.$VMRFormPhoneNum.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n ui.$VMRFormPhoneNum.removeClass('error');\r\n ui.$VMRFormPhoneNum.closest('.form-label-group').removeClass('error');\r\n }\r\n } else {\r\n if (el.val() == '') {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n }\r\n });\r\n $('.uc-vwr-form select').each(function (index) {\r\n let el = $(this);\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n });\r\n\r\n $('.uc-vwr-form textarea').each(function (index) {\r\n let el = $(this);\r\n if (el.val() == '' || el.val() == null) {\r\n el.addClass('error');\r\n el.closest('.form-label-group').addClass('error');\r\n valid = false;\r\n } else {\r\n el.removeClass('error');\r\n el.closest('.form-label-group').removeClass('error');\r\n }\r\n });\r\n return valid;\r\n }\r\n\r\n async function initPostForm() {\r\n const url = '/urgentcare-api/virtualline/waitlistqueuerequest';\r\n let api = new ApiService(url);\r\n\r\n let $FirstName = ui.$VMRForm.find('#VWRFirstName').val();\r\n let $LastName = ui.$VMRForm.find('#VWRLastName').val();\r\n let $PetName = ui.$VMRForm.find('#VWRPetName').val();\r\n let $PetSpecies = ui.$VMRForm.find('#VWRPetSpecies').val();\r\n let $IssueType = ui.$VMRForm.find('#VWRIssueType').val();\r\n let $PhoneNum = ui.$VMRForm.find('#VWRPhoneNum').val();\r\n let $Description = ui.$VMRForm.find('#VWRBriefDesc').val();\r\n let $ReferralSource = ui.$VMRForm.find('#VWRReferralSource').val();\r\n let $ReferralPrimaryVet = ui.$VMRForm.find('#VWRReferralPrimaryVet').val();\r\n let $ReferralEmergencyHospital = ui.$VMRForm.find('#VWRReferralEmergencyHospital').val();\r\n \r\n let payload = {\r\n \"firstName\": $FirstName,\r\n \"lastName\": $LastName,\r\n \"petName\": $PetName,\r\n \"speciesType\": $PetSpecies,\r\n \"issueTypeId\": $IssueType,\r\n \"phoneNumber\": $PhoneNum,\r\n \"briefDesc\": $Description,\r\n \"hospitalId\": ui.hospitalId,\r\n \"referralSource\": $ReferralSource,\r\n }\r\n \r\n if($ReferralSource == \"15\"){\r\n payload['referralHospital'] = $ReferralPrimaryVet;\r\n } else if($ReferralSource == \"16\"){\r\n payload['referralHospital'] = $ReferralEmergencyHospital;\r\n }\r\n console.log('payload',payload);\r\n const searchParams = params => Object.keys(params).map((key) => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n }).join('&');\r\n \r\n let axiosConfig = {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\r\n }\r\n }\r\n\r\n const { data, success, error } = await api.post(searchParams(payload), axiosConfig);\r\n\r\n if (success) {\r\n if (data.success) {\r\n let hospitalName = ui.$VWRInfoWrapper.data('hospital-name');\r\n\r\n //google analytics\r\n window.dataLayer.push({\r\n event:'clickevent',\r\n category:'vca urgent care',\r\n action:'join vwr success',\r\n label: hospitalName\r\n });\r\n\r\n window.location.href = data.dataRedirect;\r\n } else {\r\n if (data.errorMessage !== null || data.errorMessage !== '') {\r\n ui.$APIErrorMessage.find('.vwr-form-errormsg').text(data.errorMessage);\r\n ui.$APIErrorMessage.show(); \r\n submitSpinner.stopLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n }\r\n }\r\n } else {\r\n ui.$APIErrorMessage.find('.vwr-form-errormsg').text(error);\r\n ui.$APIErrorMessage.show();\r\n submitSpinner.stopLoadingSpinner(ui.$VWRFormSubmitBtn);\r\n console.log(`Virtual Waiting Room Form API Error: ${error}`);\r\n }\r\n }\r\n\r\n async function loadIssueTypes() {\r\n const url = `/urgentcare-api/virtualline/issuetypes?id=${ui.hospitalId}`;\r\n let api = new ApiService(url);\r\n\r\n const { data, success, error } = await api.get();\r\n\r\n if (!success || (error !== null && error !== '')) {\r\n console.log(\"API Issue Type Error: \", error);\r\n } else { \r\n let results = data;\r\n\r\n if (results == null || results == undefined) {\r\n console.log(\"Error: API results are empty, null, or undefined.\");\r\n } else {\r\n //SUCCESS\r\n $(results).each((idx,item) => {\r\n let option = `<option value=\"${item.issueTypeId}\" data-mapping-id=\"${item.issueMappingId}\">${item.issueTypeName}</option>`;\r\n $('#VWRIssueType').append(option);\r\n });\r\n }\r\n }\r\n }\r\n\r\n function initHelpshiftChat(e) {\r\n let el = $(e.currentTarget);\r\n let hospitalName = el.data('hospital-name');\r\n\r\n Helpshift('show');\r\n Helpshift('open');\r\n\r\n //google analytics\r\n window.dataLayer.push({\r\n event:'clickevent',\r\n category:'vca urgent care',\r\n action:'chat',\r\n label: hospitalName\r\n });\r\n }\r\n\r\n function openHelpshiftChat() {\r\n Helpshift('show');\r\n Helpshift('open');\r\n }\r\n\r\n function helpshiftCloseBtn(event) {\r\n event.stopPropagation();\r\n }\r\n\r\n function waitForElm(selector) {\r\n return new Promise(resolve => {\r\n if (document.querySelector(selector)) {\r\n return resolve(document.querySelector(selector));\r\n }\r\n \r\n const observer = new MutationObserver(mutations => {\r\n if (document.querySelector(selector)) {\r\n resolve(document.querySelector(selector));\r\n observer.disconnect();\r\n }\r\n });\r\n \r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n });\r\n }\r\n\r\n function init() {\r\n let isUrgentCarePage = $('#is-urgent-care').data('is-uc');\r\n\r\n if (isUrgentCarePage == 'True') {\r\n waitForElm('.grecaptcha-badge').then((el) => {\r\n console.log('Element is ready');\r\n $(el).css('visibility', 'hidden');\r\n });\r\n } \r\n\r\n if (process.env.NODE_ENV !== 'development' && isUrgentCarePage == 'True') {\r\n cacheUI();\r\n loadIssueTypes();\r\n bindEvents();\r\n $('.back-to-top').css('bottom', '135px');\r\n }\r\n \r\n\r\n $(document).on('click', '.header-urgentcare-vwr', () => {\r\n $('#VWRFormModal').modal('show');\r\n });\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.UrgentCareVWRForm.init();\r\n});","import ApiService from '@api/api-service';\r\nimport * as formattedDateTime from '../custom-forms/formatted-date-time';\r\n\r\nlet VCA = VCA || {};\r\n\r\nVCA.UrgentCareVWRWaitTime = (function ($) {\r\n\r\n let ui = {};\r\n\r\n function cacheUI() {\r\n ui.$VWRMessage = $('.uc-vwr-msg');\r\n ui.$WaitTime = $('.js-vwr-waittime');\r\n ui.$LastUpdated = $('.js-vwr-lastupdated');\r\n ui.$VWRComponent = $('.uc-hero-panel__item.vwr');\r\n ui.$VWRZeroNav = $('.header-urgentcare-vwr');\r\n ui.$VWRLabel = $('#VirtualWaitingRoomLabel');\r\n ui.hospitalId = $('#VCAHospitalID').data('hospital-au');\r\n }\r\n\r\n async function getCurrentWaitTime() {\r\n const url = `/urgentcare-api/get-virtual-wait-time?id=${ui.hospitalId}`;\r\n let api = new ApiService(url);\r\n\r\n const { data, success, error } = await api.get();\r\n \r\n if (!success || (error !== null && error !== '')) {\r\n console.log(\"API Virtual Wait Time Error: \", error);\r\n } else { \r\n let results = data;\r\n\r\n if (results == null || results == undefined) {\r\n // ui.$VWRComponent.hide();\r\n console.log(\"Error: API results are empty, null, or undefined.\");\r\n } else {\r\n //SUCCESS\r\n updateMsgAndWaitTime(results);\r\n }\r\n }\r\n formattedDateTime.formattedDateTime(ui.$LastUpdated); \r\n }\r\n\r\n function updateMsgAndWaitTime(data) {\r\n const VWRIsOpen = data.isOpen;\r\n\r\n if (VWRIsOpen) {\r\n $('#VWRInfoWrapper').css('pointer-events', '');\r\n ui.$VWRZeroNav.show();\r\n ui.$VWRMessage.text(data.message);\r\n ui.$WaitTime.text(\"Our current estimated wait time is \" + formattedDateTime.getTickToHours(data.waitingTimeInMinutes));\r\n } else {\r\n ui.$VWRZeroNav.hide();\r\n ui.$VWRLabel.text('Virtual Waiting Room');\r\n \r\n if (data.errorMessage !== null || data.errorMessage !== '') {\r\n ui.$VWRMessage.text(data.errorMessage);\r\n } else {\r\n ui.$VWRMessage.text(data.message);\r\n }\r\n }\r\n }\r\n\r\n function waitForElm(selector) {\r\n return new Promise(resolve => {\r\n if (document.querySelector(selector)) {\r\n return resolve(document.querySelector(selector));\r\n }\r\n \r\n const observer = new MutationObserver(mutations => {\r\n if (document.querySelector(selector)) {\r\n resolve(document.querySelector(selector));\r\n observer.disconnect();\r\n }\r\n });\r\n \r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n });\r\n }\r\n\r\n function init() {\r\n let isUrgentCarePage = $('#is-urgent-care').data('is-uc');\r\n\r\n if (isUrgentCarePage == 'True') {\r\n waitForElm('.grecaptcha-badge').then((el) => {\r\n $(el).css('visibility', 'hidden');\r\n });\r\n $('#VWRInfoWrapper').css('pointer-events', 'none');\r\n cacheUI();\r\n getCurrentWaitTime();\r\n }\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n $(document).ready(function() {\r\n VCA.UrgentCareVWRWaitTime.init();\r\n });\r\n});\r\n","import axios from 'axios';\r\n\r\nlet VCA = VCA || {};\r\n\r\nVCA.CurrentStories = (function ($) {\r\n let totalPagesOnLoad = $('#TotalPages').data('total-page');\r\n\r\n\r\n function bindEvents() {\r\n $('.vca-voice-current__option',).on('click', selectFilterOption);\r\n $('.vca-voice-current__category-option').on('click', selectCategoryOption);\r\n $('.vca-voice-current__sort-option').on('click', selectFilterOption);\r\n }\r\n\r\n function setPaginationOnLoad() {\r\n if ($('.vca-voice-current').length <= 0) {\r\n return;\r\n }\r\n\r\n $('#VoiceTotalPagesNum').html(totalPagesOnLoad);\r\n\r\n const urlParams = new URLSearchParams(decodeURIComponent(window.location.search));\r\n let page = parseInt(urlParams.get(\"page\"));\r\n if (window.location.href.match(/\\?./) && page) {\r\n let query = `page=${page}`;\r\n getAPIData(query, page);\r\n } else {\r\n createPagination(totalPagesOnLoad, 1);\r\n $('.pagination-bar__pagination-btn').each(function () {\r\n $(this).on('click', selectPage);\r\n });\r\n }\r\n }\r\n\r\n function selectPage(e) {\r\n e.preventDefault();\r\n let selectedPage = $(e.currentTarget).data('page');\r\n let activeElements = getActiveSelectOptions(selectedPage);\r\n let query = '';\r\n\r\n $('#VCAVoiceCurrentStories')[0].scrollIntoView({ behavior: 'smooth' })\r\n\r\n if (activeElements.activeImgVid == '') {\r\n query = `sortAsc=${activeElements.activeSortOption}&page=${activeElements.activePage}`;\r\n } \r\n else {\r\n query = `mediaType=${activeElements.activeImgVid}&sortAsc=${activeElements.activeSortOption}&page=${activeElements.activePage}`;\r\n }\r\n\r\n if(activeElements.activeCategory !== '')\r\n {\r\n query = query + `&categories[0]=${activeElements.activeCategory}`;\r\n }\r\n\r\n getAPIData(query, selectedPage);\r\n }\r\n\r\n function getAPIData(queryStr, selectedPage) {\r\n let errMsgContainer = $('.vca-voice-current__error-msg-container');\r\n let errorMessage = $('.vca-voice-current__error-msg');\r\n let paginationBar = $('.vca-voice-current__pagination-container');\r\n\r\n createPagination(totalPagesOnLoad, selectedPage);\r\n $('.pagination-bar__pagination-btn').each(function () {\r\n $(this).on('click', selectPage);\r\n });\r\n\r\n $(errMsgContainer).addClass('hidden');\r\n\r\n axios.get('/voice-api/stories?'+ queryStr)\r\n .then(response => {\r\n if (response.data.VoiceArticles.length > 0) {\r\n let totalPages = response.data.TotalPages;\r\n let data = response.data.VoiceArticles;\r\n $(paginationBar).removeClass('hidden');\r\n emptyResultsContainer();\r\n $('#VoiceTotalPagesNum').html(totalPages);\r\n createCards(data, totalPages, selectedPage);\r\n } else {\r\n emptyResultsContainer();\r\n $(paginationBar).addClass('hidden');\r\n $(errorMessage).text('No results were found.')\r\n $(errMsgContainer).removeClass('hidden');\r\n }\r\n })\r\n .catch(error => {\r\n console.log('Error message: ', error.response);\r\n }); \r\n }\r\n\r\n function getActiveSelectOptions(activePage) {\r\n let activeCategoryEl = $('.vca-voice-current__category-option.active')[0];\r\n let activeImgVideoEl = $('.vca-voice-current__option.focused.selected')[0];\r\n let activeSortOptionEl = $('.vca-voice-current__sort-option.focused.selected')[0];\r\n let activeCategory = $(activeCategoryEl).attr('id');\r\n let activeImgVid = $(activeImgVideoEl).data('value');\r\n let activeSortOption = $(activeSortOptionEl).data('asc');\r\n\r\n if (activeImgVid == undefined) {\r\n activeImgVid = '';\r\n }\r\n\r\n if (activePage == undefined) {\r\n let activePageEl = $('.pagination-bar__pagination-btn.active')[0];\r\n activePage = $(activePageEl).data('page');\r\n }\r\n\r\n if(activeCategory === undefined)\r\n {\r\n activeCategory = '';\r\n }\r\n \r\n return { activeCategory, activeImgVid, activeSortOption, activePage }\r\n }\r\n\r\n function selectFilterOption() {\r\n let activeElements = getActiveSelectOptions();\r\n // let activePageEl = $('.pagination-bar__pagination-btn.active')[0];\r\n // let activePage = $(activePageEl).data('page');\r\n let activePage = 1;\r\n let query = '';\r\n\r\n if (activeElements.activeImgVid == '') {\r\n query = `&sortAsc=${activeElements.activeSortOption}&page=${activePage}`;\r\n } else {\r\n query = `mediaType=${activeElements.activeImgVid}&sortAsc=${activeElements.activeSortOption}&page=${activePage}`;\r\n }\r\n\r\n if(activeElements.activeCategory !== '')\r\n {\r\n query = query + `&categories[0]=${activeElements.activeCategory}`;\r\n }\r\n\r\n getAPIData(query, activePage);\r\n }\r\n\r\n function selectCategoryOption(e) {\r\n applyActiveCategory(e);\r\n selectFilterOption();\r\n }\r\n\r\n function applyActiveCategory(e) {\r\n let categoryPill = e.currentTarget;\r\n let pillIsActive = $(categoryPill).hasClass('active');\r\n\r\n if (!pillIsActive) {\r\n let activePill = $('.vca-voice-current__category-pills').find('.vca-voice-current__category-option.active')[0];\r\n $(activePill).removeClass('active');\r\n $(categoryPill).addClass('active');\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n function emptyResultsContainer() {\r\n $('.vca-voice-current__list').empty();\r\n }\r\n\r\n function createCards(results, totalPages, selectedPage) {\r\n\r\n let articles = results;\r\n let totalNumOfPages = totalPages;\r\n\r\n let element = document.querySelector(\"#CurrentStoriesPagination ul\");\r\n let page = selectedPage;\r\n element.innerHTML = createPagination(totalNumOfPages, page);\r\n $('.pagination-bar__pagination-btn').each(function () {\r\n $(this).on('click', selectPage);\r\n });\r\n\r\n for (let i = 0; i < articles.length; i++) {\r\n let story = articles[i];\r\n let storyCard = $(`\r\n <a href=\"${story.URL}\" class=\"vca-voice-current__list__item\">\r\n <div class=\"vca-voice-current__imgcontainer\">\r\n <div class=\"vca-voice-current__list__item__image\"><img alt=\"${story.ImageAlt}\"\r\n src=\"${story.ImageUrl}\" />\r\n </div>\r\n </div>\r\n <div class=\"vca-voice-current__info\">\r\n <span class=\"vca-voice-current__list__item__caption\">${story.Header}</span>\r\n <div class=\"vca-voice-current__list__item__title h4\">${story.Title}</div>\r\n </div>\r\n </a>\r\n `);\r\n\r\n $('.vca-voice-current__list').append(storyCard);\r\n }\r\n }\r\n\r\n function createPagination(totalPages, page) {\r\n let liTag = '';\r\n let active;\r\n let beforePage = page - 1;\r\n let afterPage = page + 1;\r\n let element = document.querySelector(\"#CurrentStoriesPagination ul\");\r\n let path = 'vca-voice';\r\n\r\n if (page > 1) {\r\n liTag += `<li><a href=\"/${path}?page=${page - 1}\" class=\"pagination-bar__pagination-btn prev-btn prev\" data-page=\"${page - 1}\"><span>Prev</span></a></li>`;\r\n } else if (page == 1) {\r\n liTag += `<li><a href=\"/${path}?page=${page}\" class=\"pagination-bar__pagination-btn prev-btn prev disabled\" data-page=\"${page}\"><span>Prev</span></a></li>`;\r\n }\r\n\r\n if(page > 2){ \r\n if (totalPages >= 5) {\r\n liTag += `<li><a href=\"/${path}?page=1\" class=\"pagination-bar__pagination-btn first numb\" data-page=\"1\"><span>1</span></a></li>`;\r\n }\r\n if(page > 3 && totalPages > 5){ \r\n liTag += `<li class=\"vca-voice-current__dots dots\"><span>...</span></li>`;\r\n }\r\n }\r\n // how many pages or li show before the current li\r\n if (page == totalPages) {\r\n beforePage = beforePage - 2;\r\n } else if (page == totalPages - 1) {\r\n beforePage = beforePage - 1; \r\n }\r\n\r\n if (beforePage < 0) {\r\n beforePage = 0;\r\n }\r\n // how many pages or li show after the current li\r\n if (page == 1) {\r\n afterPage = afterPage + 2;\r\n } else if (page == 2) {\r\n afterPage = afterPage + 1;\r\n }\r\n for (let plength = beforePage; plength <= afterPage; plength++) {\r\n if (plength > totalPages) { //if plength is greater than totalPage length then continue\r\n continue;\r\n }\r\n if (plength == 0) { //if plength is 0 than add +1 in plength value\r\n plength = plength + 1;\r\n }\r\n if (page == plength) { //if page is equal to plength than assign active string in the active variable\r\n active = \"active\";\r\n } else { //else leave empty to the active variable\r\n active = \"\";\r\n }\r\n liTag += `<li><a href=\"/${path}?page=${plength}\" class=\"pagination-bar__pagination-btn numb ${active}\"data-page=\"${plength}\"><span>${plength}</span></a></li>`;\r\n }\r\n\r\n if (page < totalPages - 1) { //if page value is less than totalPage value by -1 then show the last li or page \r\n if (page < totalPages - 2 && totalPages > 5) { //if page value is less than totalPage value by -2 then add this (...) before the last li or page \r\n liTag += `<li class=\"vca-voice-current__dots dots\"><span>...</span></li>`;\r\n }\r\n if (totalPages >= 5) {\r\n liTag += `<li><a href=\"/${path}?page=${totalPages}\" class=\"pagination-bar__pagination-btn last numb\" data-page=\"${totalPages}\"><span>${totalPages}</span></a></li>`;\r\n }\r\n }\r\n\r\n if (page <= totalPages) { //show the next button if the page value is less than totalPage \r\n if (page < totalPages) { \r\n liTag += `<li><a href=\"/${path}?page=${page + 1}\" class=\"pagination-bar__pagination-btn next-btn next\" data-page=\"${page + 1}\"><span>Next</span></a></li>`;\r\n } else if (page == totalPages) { \r\n liTag += `<li><a href=\"/${path}?page=${page}\" class=\"pagination-bar__pagination-btn next-btn next disabled\" data-page=\"${page}\"><span>Next</span></a></li>`;\r\n }\r\n }\r\n element.innerHTML = liTag; //add li tag inside ul tag\r\n $('#VoiceCurrentPageNum').text(page)\r\n return liTag; \r\n }\r\n\r\n function init() {\r\n bindEvents();\r\n setPaginationOnLoad();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.CurrentStories.init();\r\n});\r\n\r\n","\r\nvar VCA = VCA || {};\r\n\r\nVCA.VetsourceBannerModal = (function ($) {\r\n\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n ui.$VetsourceModalLink = $('.js-vetsource-modal');\r\n }\r\n\r\n function bindEvents() {\r\n ui.$VetsourceModalLink.on('click', showAlertModal);\r\n }\r\n\r\n function showAlertModal() {\r\n $('#AboutVetsourceModal').modal('show');\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n bindEvents();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.VetsourceBannerModal.init();\r\n});","import isExperienceEditor from \"@utils/is-experience-editor\";\r\n\r\n(function (window) {\r\n\r\n let whitePapersSlider = function () {\r\n let menuStack = [];\r\n let ui = {};\r\n let isMobile;\r\n let SHOW_FULL_TEXT = 'collapsed';\r\n let MEDIA_QUERY = '(max-width: 991px)';\r\n let mql = window.matchMedia(MEDIA_QUERY);\r\n\r\n function cacheUI() {\r\n ui.$body = $('body');\r\n ui.$whitePapersSlider = $('.js-white-papers-slider'); //parent container\r\n }\r\n\r\n function initwhitePapersSlider(e) {\r\n let slider = ui.$whitePapersSlider.each(function (index, element) {\r\n $(this).addClass('js-slider-filler' + index);\r\n let item_length = $('.js-slider-filler' + index + ' > div').length;\r\n if (item_length > 0 && !isExperienceEditor) {\r\n $('.js-slider-filler' + index).slickFilterable({\r\n filterName: 'filter-' + index,\r\n filter: function( category, slider, settings ) {\r\n return $(this).hasClass( category );\r\n },\r\n slick: {\r\n dots: true,\r\n arrows: false,\r\n infinite: false,\r\n slidesPerRow: 3,\r\n rows: 1,\r\n draggable: false,\r\n responsive: [\r\n {\r\n breakpoint: 1279,\r\n settings: {\r\n slidesPerRow: 3\r\n }\r\n },\r\n {\r\n breakpoint: 991,\r\n settings: {\r\n slidesPerRow: 2\r\n }\r\n },\r\n {\r\n breakpoint: 767,\r\n settings: {\r\n slidesPerRow: 2,\r\n }\r\n },\r\n {\r\n breakpoint: 575,\r\n settings: {\r\n slidesPerRow: 1,\r\n draggable: true\r\n }\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n function init() {\r\n cacheUI();\r\n initwhitePapersSlider();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n };\r\n\r\n let sliderCarousel = whitePapersSlider();\r\n sliderCarousel.init();\r\n})(window);","import push from '../utils/push';\r\n\r\n/**\r\n * @typedef {import('./product-datalayer').GAProduct} GAProduct\r\n * \r\n * @typedef {Object} GATransactionAction\r\n * @property {string} id\r\n * @property {string} affiliation\r\n * @property {number} revenue\r\n * @property {number} shipping\r\n * @property {number} tax\r\n * @property {string} coupon\r\n * @property {boolean} subscription\r\n * @property {string} customer_type\r\n * \r\n * @typedef {Object} TransactionActionDetails\r\n * @property {string} id\r\n * @property {string} affiliation\r\n * @property {number} revenue\r\n * @property {number} shipping\r\n * @property {number} tax\r\n * @property {string} coupon\r\n * @property {boolean} subscription\r\n * @property {string} customerType\r\n */\r\n\r\n/**\r\n * @param {TransactionActionDetails} actionDetails\r\n * @returns {GATransactionAction}\r\n */\r\nfunction buildTransactionAction(actionDetails) {\r\n const {\r\n id,\r\n affiliation,\r\n revenue,\r\n shipping,\r\n tax,\r\n coupon,\r\n subscription,\r\n customerType\r\n } = actionDetails;\r\n\r\n return {\r\n 'id': id,\r\n 'affiliation': affiliation,\r\n 'revenue': revenue,\r\n 'shipping': shipping,\r\n 'tax': tax,\r\n 'coupon': coupon,\r\n 'subscription': subscription,\r\n 'customer_type': customerType\r\n };\r\n}\r\n\r\n/**\r\n * @param {string} currencyCode\r\n * @param {GAProduct} product\r\n */\r\nfunction sendAddToCart(currencyCode, product) {\r\n push({\r\n 'event': 'add-to-cart',\r\n 'ecommerce': {\r\n 'currencyCode': currencyCode,\r\n 'add': {\r\n 'actionField': {},\r\n 'products': [ product ]\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * @param {string} promoCode \r\n */\r\nfunction sendApplyPromo(promoCode) {\r\n push({\r\n 'event': 'apply-promo',\r\n 'promoSubmitted': promoCode\r\n });\r\n}\r\n\r\n/**\r\n * @param {string} currencyCode\r\n * @param {GAProduct} product\r\n */\r\nfunction sendRemoveFromCart(currencyCode, product) {\r\n push({\r\n 'event': 'remove-from-cart',\r\n 'ecommerce': {\r\n 'currencyCode': currencyCode,\r\n 'remove': {\r\n 'actionField': {},\r\n 'products': [ product ]\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * @param {string} paymentType \r\n * @param {string} currencyCode \r\n * @param {GATransactionAction} action \r\n * @param {Array<GAProduct>} products\r\n */\r\n\r\nwindow.VCA = window.VCA || {};\r\n\r\nwindow.VCA.cartDatalayer = {\r\n buildTransactionAction,\r\n sendAddToCart,\r\n sendApplyPromo,\r\n sendRemoveFromCart,\r\n};\r\n\r\nexport {\r\n buildTransactionAction,\r\n sendAddToCart,\r\n sendApplyPromo,\r\n sendRemoveFromCart,\r\n};\r\n","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.ccdeDatalayer = (function ($) {\r\n\r\n if ($('.ccde__wrapper').length <= 0) {\r\n return;\r\n }\r\n\r\n function datalayerPushStepChange(data, currentPage, previousPageName) {\r\n let pathName = window.location.pathname;\r\n let flowType = (pathName == \"/careclub/enroll\") ? \"national-standard\" : (pathName == \"/careclub/access-plan/enroll\") ? \"national-access-plan-only\" : \"hospital-level-standard\";\r\n let extraData =[\r\n 'petSpecies',\r\n 'petBreed',\r\n 'petGender',\r\n 'planid',\r\n 'zip',\r\n 'petAgeDataLayerFormat'\r\n ]\r\n\r\n let stepInfo = {\r\n 'event': 'ccde-pageview',\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'Logged-in-status': data.isLoggedIn,\r\n 'hospital-name': data.hospitalName,\r\n 'hospital-type': data.hospitalType,\r\n 'hopital-AAU': data.hospitalIDValue,\r\n 'flow-type': flowType,\r\n 'plan-type': data.planName,\r\n 'petSpecies': '',\r\n 'petBreed': '',\r\n 'petGender': '',\r\n 'planid': '',\r\n 'zip': '',\r\n 'petAgeDataLayerFormat': ''\r\n };\r\n\r\n extraData.forEach((dataPoint) => {\r\n if(data[dataPoint] !== '' && data[dataPoint] !== null) {\r\n stepInfo[dataPoint] = data[dataPoint];\r\n }\r\n }) \r\n\r\n // console.log('stepInfo', stepInfo);\r\n //push to datalayer step-1\r\n console.log('stepinfo',stepInfo);\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(stepInfo);\r\n }\r\n\r\n function datalayerPushAbandon(data, currentPage, btnName) {\r\n\r\n let extraData =[\r\n 'petSpecies',\r\n 'petBreed',\r\n 'petGender',\r\n 'planid',\r\n 'zip',\r\n 'petAgeDataLayerFormat'\r\n ]\r\n\r\n let stepInfo = {\r\n 'event': 'ccde-abandon',\r\n 'current-page-name': currentPage,\r\n 'Button': btnName,\r\n 'Logged-in-status': data.isLoggedIn,\r\n 'hospital-name': data.hospitalName,\r\n 'hospital-type': data.hospitalType,\r\n 'hopital-AAU': data.hospitalIDValue,\r\n 'petSpecies': '',\r\n 'petBreed': '',\r\n 'petGender': '',\r\n 'planid': '',\r\n 'zip': '',\r\n 'petAgeDataLayerFormat': ''\r\n };\r\n\r\n extraData.forEach((dataPoint) => {\r\n if(data[dataPoint] !== '' && data[dataPoint] !== null) {\r\n stepInfo[dataPoint] = data[dataPoint];\r\n }\r\n }) \r\n\r\n\r\n //push to datalayer abandon\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(stepInfo);\r\n }\r\n\r\n\r\n return {\r\n datalayerPushStepChange: datalayerPushStepChange,\r\n datalayerPushAbandon: datalayerPushAbandon\r\n };\r\n\r\n\r\n\r\n})(jQuery);","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.checkoutConfirmationDataLayer = (function ($) {\r\n\r\n var ui = {};\r\n\r\n function cacheUI() {\r\n ui.$orderInfo = $('.js-checkout-order-info');\r\n ui.$orderCard = $('.js-checkout-order-card');\r\n }\r\n\r\n let checkoutOrderDetails = {\r\n 'event': '',\r\n 'paymentType': '',\r\n 'currencyCode': '',\r\n 'transactionId': '',\r\n 'revenue': '',\r\n 'shipping': '',\r\n 'tax': '',\r\n 'coupon': '',\r\n 'refills': '',\r\n 'subscription': '',\r\n 'customerType': '',\r\n 'action': '',\r\n 'products': []\r\n }\r\n\r\n\r\n function initCheckoutConfirmationOrderDetails() {\r\n if (ui.$orderInfo.length <= 0) {\r\n return;\r\n }\r\n\r\n checkoutOrderDetails.event = ui.$orderInfo.data('item-event');\r\n checkoutOrderDetails.paymentType = ui.$orderInfo.data('item-paymenttype');\r\n checkoutOrderDetails.currencyCode = ui.$orderInfo.data('item-currencycode');\r\n checkoutOrderDetails.transactionId = ui.$orderInfo.data('item-transactionid');\r\n checkoutOrderDetails.revenue = ui.$orderInfo.data('item-revenue');\r\n checkoutOrderDetails.shipping = ui.$orderInfo.data('item-shipping');\r\n checkoutOrderDetails.tax = ui.$orderInfo.data('item-tax');\r\n checkoutOrderDetails.coupon = ui.$orderInfo.data('item-coupon');\r\n checkoutOrderDetails.subscription = ui.$orderInfo.data('item-subscription');\r\n checkoutOrderDetails.customerType = ui.$orderInfo.data('item-customertype');\r\n checkoutOrderDetails.action = ui.$orderInfo.data('item-action');\r\n checkoutOrderDetails.refills = ui.$orderInfo.data('item-refills');\r\n\r\n\r\n ui.$orderCard.each(function () {\r\n\r\n let id = $(this).data('item-id');\r\n let variant = $(this).data('item-variant');\r\n let name = $(this).data('item-name');\r\n let brand = $(this).data('item-brand');\r\n let category = $(this).data('item-category');\r\n let price = $(this).data('item-price');\r\n let quantity = $(this).data('item-quantity');\r\n let dimension89 = $(this).data('item-dimension89');\r\n let dimension90 = $(this).data('item-dimension90');\r\n let dimension94 = $(this).data('item-dimension94');\r\n let dimension104 = $(this).data('item-dimension104');\r\n let dimension106 = $(this).data('item-dimension106');\r\n let dimension107 = $(this).data('item-dimension107');\r\n let dimension108 = $(this).data('item-dimension108');\r\n let dimension114 = $(this).data('item-dimension114');\r\n\r\n checkoutOrderDetails.products.push({\r\n 'id': id,\r\n 'variant': variant,\r\n 'name': id,\r\n 'brand': brand,\r\n 'category': category,\r\n 'price': price,\r\n 'quantity': quantity,\r\n 'dimension89': dimension89,\r\n 'dimension90': dimension90,\r\n 'dimension94': dimension94,\r\n 'dimension104': dimension104,\r\n 'dimension106': dimension106,\r\n 'dimension107': dimension107,\r\n 'dimension108': dimension108,\r\n 'dimension114': dimension114\r\n });\r\n });\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': checkoutOrderDetails.event,\r\n 'paymentType': checkoutOrderDetails.paymentType,\r\n 'ecommerce': {\r\n 'currencyCode': checkoutOrderDetails.currencyCode,\r\n 'purchase': {\r\n 'actionField': {\r\n 'id': checkoutOrderDetails.transactionId,\r\n 'revenue': checkoutOrderDetails.revenue,\r\n 'shipping': checkoutOrderDetails.shipping,\r\n 'tax': checkoutOrderDetails.tax,\r\n 'coupon': checkoutOrderDetails.coupon,\r\n 'refills': checkoutOrderDetails.refills,\r\n 'subscription': checkoutOrderDetails.subscription,\r\n 'customer_type': checkoutOrderDetails.customerType,\r\n 'action': checkoutOrderDetails.action\r\n },\r\n 'products': checkoutOrderDetails.products\r\n }\r\n }\r\n });\r\n }\r\n\r\n function init() {\r\n if ($('#checkoutConfirmationDetails').length <= 0) {\r\n return;\r\n }\r\n cacheUI();\r\n initCheckoutConfirmationOrderDetails();\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.checkoutConfirmationDataLayer.init();\r\n});","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.dashboardDatalayer = (function ($) {\r\n\r\n function init() {\r\n if ($('.dashboard__header').length <= 0) {\r\n return;\r\n }\r\n\r\n initRemindersImpressions();\r\n initAppointmentsImpressions();\r\n initRefillsImpressions();\r\n initVetRecommendationsImpressions();\r\n reminderCtaClick();\r\n appointmentsCtaClick();\r\n refillCtaClick();\r\n vetRecommendationsClick();\r\n }\r\n\r\n function initRemindersImpressions() {\r\n if ($('.js-dashboard-reminders').length <= 0) {\r\n return;\r\n }\r\n var reminder = [];\r\n $('.js-dashboard-reminders .card-listing__card').each(function (index) {\r\n let name = $(this).find('.js-reminder-title').text().trim().replace(/[^\\w\\s]/gi, '');\r\n let petId = $(this).find('.js-reminder-title').data('petid');\r\n let cta = $(this).find('.js-reminder-button').text().trim();\r\n let date = $(this).find('.js-reminder-date').text().trim();\r\n\r\n reminder.push({\r\n 'name': name,\r\n 'pet-id': petId,\r\n 'cta-text': cta,\r\n 'date': date\r\n });\r\n });\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'dashboard-reminder-impression',\r\n 'impressions': reminder\r\n });\r\n }\r\n\r\n \r\n function reminderCtaClick(data) {\r\n $('.js-dashboard-reminders').on('click', '.js-reminder-button', function (e) {\r\n let $card = $(this).closest('.card-listing__card');\r\n let name = $card.find('.js-reminder-title').text().trim().replace(/[^\\w\\s]/gi, '');\r\n let petId = $card.find('.js-reminder-title').data('petid');\r\n let cta = $card.find('.js-reminder-button').text().trim();\r\n let date = $card.find('.js-reminder-date').text().trim();\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'oab-click',\r\n 'oab-location': 'care-reminder',\r\n 'oab-type': 'standard',\r\n 'logged-in-status': true,\r\n 'oab-visit-type': 'early-detection-testing'\r\n });\r\n window.dataLayer.push({\r\n 'event': 'reminder-click',\r\n 'impressions': [{\r\n 'name': name,\r\n 'pet-id': petId,\r\n 'cta-text': cta,\r\n 'date': date\r\n }]\r\n });\r\n });\r\n $('.empty-state__btn-wrapper').on('click', '.empty-state__btn', function (e) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'oab-click',\r\n 'oab-location': 'upcoming-appointment',\r\n 'oab-type': 'standard',\r\n 'logged-in-status': true\r\n });\r\n \r\n });\r\n }\r\n\r\n function initAppointmentsImpressions() {\r\n if ($('.js-dashboard-appointments').length <= 0) {\r\n return;\r\n }\r\n var appointments = [];\r\n $('.js-dashboard-appointments .card-listing__card').each(function (index) {\r\n let name = $(this).find('.js-appointments-title').text().trim().replace(/[^\\w\\s]/gi, '');\r\n let petId = $(this).find('.js-appointments-title').data('petid');\r\n let cta = $(this).find('.js-reminder-button').data('cta-text').trim();\r\n let date = $(this).find('.js-appointments-date').text().trim();\r\n\r\n appointments.push({\r\n 'name': name,\r\n 'pet-id': petId,\r\n 'cta-text': cta,\r\n 'date': date\r\n });\r\n });\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'dashboard-appointments-impression',\r\n 'impressions': appointments\r\n });\r\n }\r\n\r\n function appointmentsCtaClick(data) {\r\n $('.js-dashboard-appointments').on('click', '.js-appointments-button', function (e) {\r\n let $card = $(this).closest('.card-listing__card');\r\n let name = $card.find('.js-appointments-title').text().trim().replace(/[^\\w\\s]/gi, '');\r\n let petId = $card.find('.js-appointments-title').data('petid');\r\n let cta = $card.find('.js-appointments-button').text().trim();\r\n let date = $card.find('.js-appointments-date').text().trim();\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'appointments-click',\r\n 'impressions': [{\r\n 'name': name,\r\n 'pet-id': petId,\r\n 'cta-text': cta,\r\n 'date': date\r\n }]\r\n });\r\n });\r\n }\r\n\r\n function initRefillsImpressions() {\r\n if ($('.js-presc-refills-card').length <= 0) {\r\n return;\r\n }\r\n var refills = [];\r\n $('.js-presc-refills-card').each(function (index) {\r\n let name = $(this).find('.vca-card__mid__name').text().trim().replace(/[^\\w\\s]/gi, '');\r\n let petId = $(this).data('petid');\r\n let cta = $(this).find('.js-add-to-cart .align-items-center').text().trim();\r\n let date = $(this).find('.js-refill-date').text().trim();\r\n\r\n refills.push({\r\n 'name': name,\r\n 'pet-id': petId,\r\n 'cta-text': cta,\r\n 'list':'product refills',\r\n 'date': date\r\n });\r\n });\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'product-impression',\r\n 'ecommerce': {\r\n 'impressions': refills\r\n }\r\n });\r\n }\r\n\r\n function refillCtaClick(data) {\r\n $('.cards-carousel__carousel').on('click', '.js-presc-refills-card', function (e) {\r\n let $card = $(this).closest('.js-presc-refills-card');\r\n let name = $card.find('.vca-card__mid__name').text().trim().replace(/[^\\w\\s]/gi, '');\r\n let petId = $card.data('petid');\r\n let cta = $card.find('.js-add-to-cart .align-items-center').text().trim();\r\n let date = $card.find('.js-refill-date').text().trim();\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'promotion-click',\r\n\r\n 'ecommerce': {\r\n 'click': {\r\n 'actionField': {\r\n 'list': 'product refills'\r\n },\r\n 'products': [{\r\n 'name': name,\r\n 'pet-id': petId,\r\n 'cta-text': cta,\r\n 'date': date\r\n }]\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n function initVetRecommendationsImpressions() {\r\n if ($('.js-vet-recommendations-card').length <= 0) {\r\n return;\r\n }\r\n var recommendations = [];\r\n $('.js-vet-recommendations-card').each(function (index) {\r\n let name = $(this).data('item-name').replace(/[^\\w\\s]/gi, '');\r\n let id = $(this).data('item-id');\r\n let price = $(this).data('item-price');\r\n let brand = $(this).data('item-brand');\r\n let category = $(this).data('item-category');\r\n let position = index + 1;\r\n\r\n recommendations.push({\r\n 'name': name,\r\n 'id': id,\r\n 'list': 'vet recommendations',\r\n 'category': category,\r\n 'brand': brand,\r\n 'price': price,\r\n 'position': position\r\n });\r\n });\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'product-impression',\r\n 'ecommerce': {\r\n 'impressions': recommendations\r\n }\r\n });\r\n }\r\n\r\n\r\n function vetRecommendationsClick(data) {\r\n $('.js-vet-recommendations-card').on('click', '.js-vet-recommendations-card-btn', function (e) {\r\n let $card = $(this).closest('.js-vet-recommendations-card');\r\n let name = $card.data('item-name').replace(/[^\\w\\s]/gi, '');\r\n let id = $card.data('item-id');\r\n let price = $card.data('item-price');\r\n let brand = $card.data('item-brand');\r\n let category = $card.data('item-category');\r\n let position = $card.index() + 1;\r\n let cta = $(this).text().trim();\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'product-click',\r\n 'ecommerce': {\r\n 'click': {\r\n 'actionField': {\r\n 'list': 'vet recommendations'\r\n },\r\n 'products': [{\r\n 'name': name,\r\n 'id': id,\r\n 'list': 'vet recommendations',\r\n 'category': category,\r\n 'brand': brand,\r\n 'price': price,\r\n 'cta-text': cta,\r\n 'position': position\r\n }]\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.dashboardDatalayer.init();\r\n});","import push from '../utils/push';\r\n\r\nconst sendCheckoutClick = () => push({ 'event': 'mini-cart-click' });\r\nconst sendImpression = () => push({ 'event': 'mini-cart-impression' });\r\n\r\nwindow.VCA = window.VCA || {};\r\n\r\nwindow.VCA.miniCartDatalayer = {\r\n sendCheckoutClick,\r\n sendImpression\r\n};\r\n\r\nexport {\r\n sendCheckoutClick,\r\n sendImpression\r\n};\r\n","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.AccountDatalayer = (function ($) {\r\n\r\n //Login - Fail\r\n function dataLayerLoginFailure() {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event:'clickevent',\r\n category:'myvca account access',\r\n action:'login authentication',\r\n label:'fail'\r\n });\r\n }\r\n\r\n function dataLayerActivateAcctSuccess() {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event:'clickevent',\r\n category:'myvca account access',\r\n action:'activate account',\r\n label:'success'\r\n });\r\n }\r\n\r\n function dataLayerCreateGuestAcctSuccess() {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event:'clickevent',\r\n category:'myvca account access',\r\n action:'activate guest account',\r\n label:'success'\r\n });\r\n }\r\n\r\n function dataLayerForgotPasswordSuccess() {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event:'clickevent',\r\n category:'myvca account access',\r\n action:'forgot password',\r\n label:'success'\r\n });\r\n }\r\n\r\n function dataLayerResetPasswordSuccess() {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event:'clickevent',\r\n category:'myvca account access',\r\n action:'reset password',\r\n label:'success'\r\n });\r\n }\r\n\r\n function datalayerPushSignWithGoogle(event, buttonAction, buttonLabel) {\r\n \r\n let signUpInfo = {\r\n event: event,\r\n buttonAction: buttonAction,\r\n buttonLabel: buttonLabel,\r\n buttonType: \"Google\"\r\n };\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(signUpInfo);\r\n }\r\n\r\n return {\r\n dataLayerLoginFailure: dataLayerLoginFailure,\r\n dataLayerActivateAcctSuccess: dataLayerActivateAcctSuccess,\r\n dataLayerCreateGuestAcctSuccess: dataLayerCreateGuestAcctSuccess,\r\n dataLayerForgotPasswordSuccess: dataLayerForgotPasswordSuccess,\r\n dataLayerResetPasswordSuccess: dataLayerResetPasswordSuccess,\r\n datalayerPushSignWithGoogle: datalayerPushSignWithGoogle\r\n };\r\n\r\n\r\n\r\n})(jQuery);","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.NCAOfferDataLayer = (function ($) {\r\n\r\n function dataLayerNCAOfferSuccess() {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event:'clickevent',\r\n category:'offer submission',\r\n action:'new patient offer',\r\n label:'hospital: first exam 20 off'\r\n });\r\n }\r\n\r\n return {\r\n dataLayerNCAOfferSuccess: dataLayerNCAOfferSuccess\r\n };\r\n\r\n})(jQuery);","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.oabDatalayer = (function ($) {\r\n\r\n if ($('.oab__wrapper').length <= 0 && $('.js-oab-fist-available').length <=0) {\r\n return;\r\n }\r\n\r\n function datalayerPushPageLoad(data) {\r\n //push to datalayer step-1\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'baa-page-view',\r\n 'oab-location': 'hospital-locator',\r\n 'hospital-name': data.hospitalName,\r\n 'hospital-type': data.hospitalType,\r\n 'hopital-AAU': data.hospitalIDValue,\r\n 'logged-in-status': data.isLoggedIn\r\n });\r\n }\r\n\r\n\r\n function datalayerPushStepChange(data, currentPage, previousPageName) {\r\n\r\n let extraData =[\r\n 'petSpecies',\r\n 'apptTypeText',\r\n 'appointmentReasonDisplayText',\r\n 'assetName',\r\n 'appointmentStartDate',\r\n 'lastName',\r\n ]\r\n\r\n let stepInfo = {\r\n 'event': 'baa-step-change',\r\n 'oab-location': 'hospital-locator',\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'Logged-in-status': data.isLoggedIn,\r\n 'hospital-name': data.hospitalName,\r\n 'hospital-type': data.hospitalType,\r\n 'hopital-AAU': data.hospitalIDValue,\r\n 'client-type': data.clientTypeText,\r\n 'petSpecies': '',\r\n 'apptTypeText': '',\r\n 'appointmentReasonDisplayText': '',\r\n 'assetName': '',\r\n 'appointmentStartDate': '',\r\n 'lastName': ''\r\n };\r\n\r\n extraData.forEach((dataPoint) => {\r\n if(data[dataPoint] !== '' && data[dataPoint] !== null) {\r\n stepInfo[dataPoint] = data[dataPoint];\r\n }\r\n }) \r\n\r\n // console.log('stepInfo', stepInfo);\r\n //push to datalayer step-1\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(stepInfo);\r\n }\r\n\r\n\r\n function datalayerPushStepOne(data, currentPage, previousPageName) {\r\n //push to datalayer step-1\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'baa-step-1',\r\n 'client-type': data.clientTypeText,\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'is-logged-In': data.isLoggedIn\r\n });\r\n }\r\n\r\n function datalayerPushStepTwo(data, currentPage, previousPageName) {\r\n //push step-2\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'baa-step-2',\r\n 'pet-selected': data.petName,\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'is-logged-In': data.isLoggedIn\r\n });\r\n }\r\n\r\n function datalayerPushStepThree(data, currentPage, previousPageName) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'baa-step-3',\r\n 'patient-type': data.petSpecies,\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'is-logged-In': data.isLoggedIn\r\n });\r\n }\r\n\r\n function datalayerPushStepFour(data, currentPage, previousPageName) {\r\n //push step-4\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'baa-step-4',\r\n 'patient-type': data.petSpecies,\r\n 'appointment-type': data.apptTypeText,\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'is-logged-In': data.isLoggedIn\r\n });\r\n }\r\n\r\n function datalayerPushStepFive(data, currentPage, previousPageName) {\r\n //push step-5\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'baa-step-5',\r\n 'patient-type': data.petSpecies,\r\n 'appointment-type': data.apptTypeText,\r\n 'reason': data.appointmentReasonDisplayText,\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'is-logged-In': data.isLoggedIn\r\n });\r\n }\r\n\r\n function datalayerPushStepSix(data, currentPage, previousPageName) {\r\n //push step-6\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'baa-step-6',\r\n 'patient-type': data.petSpecies,\r\n 'appointment-type': data.apptTypeText,\r\n 'reason': data.appointmentReasonDisplayText,\r\n 'wellness-type': data.wellnessType,\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'is-logged-In': data.isLoggedIn\r\n });\r\n }\r\n\r\n function datalayerPushStepSeven(data, currentPage, previousPageName) {\r\n //push step-7\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'baa-step-7',\r\n 'patient-type': data.petSpecies,\r\n 'appointment-type': data.apptTypeText,\r\n 'reason': data.appointmentReasonDisplayText,\r\n \"doctor\": data.assetName,\r\n \"time-start\": data.appointmentStartDate,\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'is-logged-In': data.isLoggedIn\r\n });\r\n }\r\n\r\n function datalayerPushBookAppt(data, currentPage, previousPageName) {\r\n window.dataLayer.push({\r\n 'event': 'book-appointment',\r\n 'offer-type': 'Book an Appointment',\r\n 'patient-type': data.petSpecies,\r\n 'appointment-type': data.apptTypeText,\r\n 'reason': data.appointmentReasonDisplayText,\r\n \"doctor\": data.assetName,\r\n \"time-start\": data.appointmentStartDate,\r\n 'customer-lastname': data.lastName,\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'is-logged-In': data.isLoggedIn\r\n });\r\n }\r\n\r\n function datalayerPushOfferSubmit(data, currentPage, previousPageName) {\r\n window.dataLayer.push({\r\n 'event': 'offer-submission',\r\n 'offer-type': 'Book an Appointment',\r\n 'patient-type': data.petSpecies,\r\n 'appointment-type': data.apptTypeText,\r\n 'reason': data.appointmentReasonDisplayText,\r\n \"doctor\": data.assetName,\r\n \"time-start\": data.appointmentStartDate,\r\n 'customer-lastname': data.lastName,\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'is-logged-In': data.isLoggedIn\r\n });\r\n }\r\n\r\n function datalayerAbandon(data, currentPage) {\r\n window.dataLayer.push({\r\n 'event': 'baa-abandon',\r\n 'current-page-name': currentPage,\r\n 'is-logged-In': data.isLoggedIn\r\n });\r\n }\r\n\r\n \r\n function datalayerFirstAvailable(hospitalId, hospitalName , isLoggedIn, visitType, reasonDisplayText, startDate) {\r\n window.dataLayer = window.dataLayer || [];\r\n const dataLayerObject = {\r\n event: \"oab-click\",\r\n \"oab-location\": \"hospital-specific\",\r\n \"oab-type\": \"first-available\",\r\n \"hospital-AAU\": hospitalId,\r\n \"hospital-name\": hospitalName,\r\n \"logged-in-status\": isLoggedIn,\r\n \"oab-visit-type\": visitType,\r\n \"appointmentReasonDisplayText\": reasonDisplayText,\r\n \"appointmentStartDate\": startDate,\r\n };\r\n window.dataLayer.push(dataLayerObject);\r\n \r\n }\r\n\r\n\r\n\r\n return {\r\n datalayerPushPageLoad: datalayerPushPageLoad,\r\n datalayerPushStepOne: datalayerPushStepOne,\r\n datalayerPushStepTwo: datalayerPushStepTwo,\r\n datalayerPushStepThree: datalayerPushStepThree,\r\n datalayerPushStepFour: datalayerPushStepFour,\r\n datalayerPushStepFive: datalayerPushStepFive,\r\n datalayerPushStepSix: datalayerPushStepSix,\r\n datalayerPushStepSeven: datalayerPushStepSeven,\r\n datalayerPushBookAppt: datalayerPushBookAppt,\r\n datalayerPushOfferSubmit: datalayerPushOfferSubmit,\r\n datalayerAbandon: datalayerAbandon,\r\n datalayerPushStepChange: datalayerPushStepChange,\r\n datalayerFirstAvailable:datalayerFirstAvailable\r\n };\r\n\r\n\r\n\r\n})(jQuery);","import push from '../utils/push';\r\n\r\n/** @typedef {import('./product-datalayer').GAProduct} GAProduct */\r\n\r\n/**\r\n * @param {string} currencyCode \r\n * @param {GAProduct} product \r\n */\r\nfunction sendClick(currencyCode, product) {\r\n push({\r\n 'event': 'product-click',\r\n 'listProductFilters': 'undefined',\r\n 'ecommerce': {\r\n 'currencyCode': currencyCode,\r\n 'click': {\r\n 'actionField': {\r\n 'list': product.list\r\n },\r\n 'products': [ product ]\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * @param {string} currencyCode \r\n * @param {Array<GAProduct>} products \r\n */\r\nfunction sendImpression(currencyCode, products) {\r\n push({\r\n 'event': 'product-impression',\r\n 'ecommerce': {\r\n 'currencyCode': currencyCode,\r\n 'impressions': products\r\n }\r\n });\r\n}\r\n\r\nwindow.VCA = window.VCA || {};\r\n\r\nwindow.VCA.productCardDatalayer = {\r\n sendClick,\r\n sendImpression\r\n};\r\n\r\nexport {\r\n sendClick,\r\n sendImpression\r\n};\r\n","/**\r\n * @typedef {Object} GAProduct\r\n * @property {string} id\r\n * @property {string} variant\r\n * @property {string} name\r\n * @property {string} brand\r\n * @property {string} category\r\n * @property {string} list\r\n * @property {number} price\r\n * @property {number} quantity\r\n * @property {string} dimension89 type of subscription (autoship or oneTime)\r\n * @property {string} dimension90 pet\r\n * @property {string} dimension94 variant id\r\n * @property {string} dimension104 is there a discount\r\n * @property {string} dimension106 is an rx required\r\n * @property {string} dimension107 strength\r\n * @property {string} dimension108 packaging\r\n * @property {string} dimension110 product name with \"Bundle\" appended\r\n * \r\n * @typedef {Object} ProductDetails\r\n * @property {string} id\r\n * @property {string} variantId\r\n * @property {string} name\r\n * @property {string} brand\r\n * @property {string} category\r\n * @property {string} list\r\n * @property {number} price\r\n * @property {number} quantity\r\n * @property {string} autoshipFrequency\r\n * @property {string} pet\r\n * @property {boolean} discount\r\n * @property {boolean} rxRequired\r\n * @property {string} strength\r\n * @property {string} packaging\r\n */\r\n\r\n/**\r\n * @param {ProductDetails}\r\n * @returns {GAProduct}\r\n */\r\n function buildProduct(productDetails) {\r\n const {\r\n id,\r\n variantId,\r\n name,\r\n brand,\r\n category,\r\n list,\r\n price,\r\n quantity,\r\n autoshipFrequency,\r\n pet,\r\n discount,\r\n rxRequired,\r\n strength,\r\n packaging \r\n } = productDetails;\r\n\r\n let autoship = autoshipFrequency;\r\n if(typeof autoship === 'number') {\r\n autoship = autoship > 0 ? 'autoship' : 'oneTime';\r\n }\r\n\r\n let discountValue = discount;\r\n if(typeof discountValue === 'boolean') {\r\n discountValue ? 'yes' : 'no';\r\n }\r\n\r\n let rxRequiredValue = rxRequired;\r\n if(typeof rxRequiredValue === 'boolean') {\r\n rxRequiredValue ? 'yes' : 'no';\r\n }\r\n\r\n return {\r\n 'id': id,\r\n 'variant': variantId,\r\n 'name': id,\r\n 'brand': brand,\r\n 'category': category,\r\n 'list': list,\r\n 'price': price,\r\n 'quantity': quantity,\r\n 'dimension89': autoship,\r\n 'dimension90': pet,\r\n 'dimension94': variantId,\r\n 'dimension104': discountValue,\r\n 'dimension106': rxRequiredValue,\r\n 'dimension107': strength,\r\n 'dimension108': packaging,\r\n 'dimension110': name ? name + ' Bundle' : undefined\r\n };\r\n}\r\n\r\nwindow.VCA = window.VCA || {};\r\n\r\nwindow.VCA.productDatalayer = {\r\n buildProduct\r\n};\r\n\r\nexport {\r\n buildProduct\r\n};\r\n","import push from '../utils/push';\r\n\r\n/** @typedef {import('./product-datalayer').GAProduct} GAProduct */\r\n\r\n/**\r\n * @param {string} currencyCode \r\n * @param {GAProduct} product \r\n */\r\nfunction sendProductDetailView(currencyCode, product) {\r\n push({\r\n 'event': 'product-detail-view',\r\n 'ecommerce': {\r\n 'currencyCode': currencyCode,\r\n 'detail': {\r\n 'actionField': {},\r\n 'products': [product]\r\n }\r\n }\r\n });\r\n}\r\n\r\nwindow.VCA = window.VCA || {};\r\n\r\nwindow.VCA.productDetailsDatalayer = {\r\n sendProductDetailView\r\n};\r\n\r\nexport {\r\n sendProductDetailView\r\n};\r\n","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.raaDatalayer = (function ($) {\r\n\r\n if ($('.req-appt__wrapper').length <= 0) {\r\n return;\r\n }\r\n\r\n function datalayerPushPageLoad(data) {\r\n //push to datalayer step-1\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'raa-page-view',\r\n 'hospital-name': data.hospitalName,\r\n 'hospital-type': data.hospitalType,\r\n 'hopital-AAU': data.hospitalIDValue,\r\n 'Logged-in-status': data.isLoggedIn,\r\n });\r\n }\r\n\r\n\r\n function datalayerPushStepChange(data, currentPage, previousPageName) {\r\n let extraData =[\r\n 'resouceName',\r\n 'preferredTime1',\r\n 'petName',\r\n ]\r\n\r\n let stepInfo = {\r\n 'event': 'raa-step-change',\r\n 'current-page-name': currentPage,\r\n 'previous-page-name': previousPageName,\r\n 'Logged-in-status': data.isLoggedIn,\r\n 'resouceName': '',\r\n 'preferredTime1': '',\r\n 'petName': '',\r\n };\r\n\r\n extraData.forEach((dataPoint) => {\r\n if(data[dataPoint] !== '' && data[dataPoint] !== null) {\r\n stepInfo[dataPoint] = data[dataPoint];\r\n }\r\n }) \r\n\r\n\r\n\r\n //push to datalayer step-1\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(stepInfo);\r\n }\r\n\r\n function datalayerPushComfirm(data) {\r\n //push step-4\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'raa-submit',\r\n 'doc-name': data.resouceName,\r\n 'time-of-day': data.preferredTime1,\r\n 'pet-name': data.petName,\r\n 'Logged-in-status': data.isLoggedIn,\r\n 'current-page-name': 'submission',\r\n });\r\n }\r\n\r\n function datalayerPushPostSubmit(data) {\r\n window.dataLayer.push({\r\n 'event': 'raa-post-submission',\r\n 'doc-name': data.resouceName,\r\n 'time-of-day': data.preferredTime1,\r\n 'pet-name': data.petName,\r\n 'Logged-in-status': data.isLoggedIn,\r\n 'current-page-name': 'post-submission',\r\n });\r\n }\r\n\r\n \r\n function datalayerPushAbandon(data, currentPage) {\r\n\r\n let extraData =[\r\n 'resouceName',\r\n 'preferredTime1',\r\n 'petName',\r\n ]\r\n\r\n let stepInfo = {\r\n 'event': 'raa-abandon',\r\n 'current-page-name': currentPage,\r\n 'Logged-in-status': data.isLoggedIn,\r\n 'resouceName': '',\r\n 'preferredTime1': '',\r\n 'petName': '',\r\n };\r\n\r\n extraData.forEach((dataPoint) => {\r\n if(data[dataPoint] !== '' && data[dataPoint] !== null) {\r\n stepInfo[dataPoint] = data[dataPoint];\r\n }\r\n }) \r\n\r\n\r\n //push to datalayer abandon\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(stepInfo);\r\n }\r\n\r\n return {\r\n datalayerPushPageLoad: datalayerPushPageLoad,\r\n datalayerPushComfirm: datalayerPushComfirm,\r\n datalayerPushPostSubmit: datalayerPushPostSubmit,\r\n datalayerPushStepChange: datalayerPushStepChange,\r\n datalayerPushAbandon: datalayerPushAbandon,\r\n };\r\n\r\n\r\n\r\n})(jQuery);","\r\nvar VCA = VCA || {};\r\n\r\nVCA.ReferPatientPromoDataLayer = (function ($) {\r\n\r\n function init() {\r\n if($(\".js-refer-a-patient\").length <= 0){\r\n return;\r\n }\r\n PromoTile()\r\n }\r\n\r\n\r\n function PromoTile() {\r\n $(\".js-refer-a-patient\").on(\"click\", function (e) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event: \"promo-tile\",\r\n \"tile-action\": \"Impression\",\r\n \"tile-location\": \"right rail\",\r\n \"promo-type\": \"promotion\",\r\n \"promo-content\": \"Refer A Patient\"\r\n }); \r\n });\r\n }\r\n\r\n\r\n\r\n return {\r\n init: init,\r\n };\r\n\r\n\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.ReferPatientPromoDataLayer.init();\r\n});","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.SubscriptionsDatalayer = (function ($) {\r\n\r\n if ($('.subscription-details').length <= 0) {\r\n return;\r\n }\r\n\r\n function datalayerPushSubCancel(params) {\r\n //push to datalayer UC\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event':'cancel_subscription',\r\n 'cancellation_reason': params.Reason,\r\n 'vetsourceid': params.Id,\r\n 'OtherDetails': params.OtherDetails\r\n\r\n });\r\n }\r\n function datalayerSkipOrder(eventName, ctaLabel){\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event':eventName,\r\n 'cta_label':ctaLabel\r\n });\r\n console.log('subscriptionDataLayer', window.dataLayer)\r\n }\r\n\r\n return {\r\n datalayerPushSubCancel: datalayerPushSubCancel,\r\n datalayerSkipOrder:datalayerSkipOrder\r\n };\r\n\r\n\r\n\r\n})(jQuery);\r\n\r\n","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.ucfahDatalayer = (function ($) {\r\n\r\n if ($('.find-a-hospital').length <= 0) {\r\n return;\r\n }\r\n\r\n function datalayerPushClick(action, hospitalAU, pathName = 'vca urgent care') {\r\n // Push to datalayer UC\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'clickevent',\r\n 'category': pathName,\r\n 'action': action,\r\n 'label': hospitalAU\r\n });\r\n }\r\n\r\n function datalayerPushBook(hospitalName, hospitalType, oabLocation) {\r\n // Push to datalayer UC\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'oab-click',\r\n 'oab-location': oabLocation,\r\n 'oab-type': 'standard',\r\n 'hospital-type': hospitalType,\r\n 'hospital-name': hospitalName,\r\n 'logged-in-status': false\r\n });\r\n }\r\n\r\n return {\r\n datalayerPushClick: datalayerPushClick,\r\n datalayerPushBook: datalayerPushBook\r\n };\r\n\r\n\r\n\r\n})(jQuery);\r\n\r\n","window.VCA = window.VCA || {};\r\n\r\nwindow.VCA.vetRecommendations = (function ($) {\r\n\r\n function init() {\r\n if ($('.vet-recs-lp__cards-wrapper').length <= 0) {\r\n return;\r\n }\r\n initVetRecommendationsImpressions();\r\n initSeviceRecommendationsImpressions();\r\n vetRecommendationsClick();\r\n serviceRecommendationsClick();\r\n petSelectDropdownList();\r\n hideDropdownValue();\r\n }\r\n\r\n /**\r\n * @method hideDropdownValue\r\n * @description to click the another dropdown, to close the opened dropdown\r\n */\r\n function hideDropdownValue() {\r\n $('.js-vca-dropdown-button[data-region=\"pet-btn\"]').on('click', function(event) {\r\n event.stopPropagation();\r\n $('.vca-dropdown-select').find('[data-region=\"current-dropdown\"]').addClass('hidden');\r\n $('.vca-dropdown-select').find('[data-region=\"pet-dropdown\"]').removeClass('hidden');\r\n });\r\n\r\n $('.js-vca-dropdown-button[data-region=\"current-btn\"]').on('click', function(event) {\r\n event.stopPropagation();\r\n $('.vca-dropdown-select').find('[data-region=\"pet-dropdown\"]').addClass('hidden');\r\n $('.vca-dropdown-select').find('[data-region=\"current-dropdown\"]').removeClass('hidden');\r\n });\r\n \r\n $(document).on('click', function(event) {\r\n if (!$(event.target).closest('.vca-dropdown-select').length) {\r\n $('.js-vca-dropdown-list').addClass('hidden');\r\n }\r\n });\r\n }\r\n\r\n\r\n function initVetRecommendationsImpressions() {\r\n if ($('.js-vet-recommendations-card').length <= 0) {\r\n return;\r\n }\r\n var recommendations = [];\r\n $('.js-vet-recommendations-card').each(function (index) {\r\n let name = $(this).data('item-name');\r\n let id = $(this).data('item-id');\r\n let price = $(this).data('item-price');\r\n let brand = $(this).data('item-brand');\r\n let category = $(this).data('item-category');\r\n let position = index + 1;\r\n\r\n recommendations.push({\r\n 'name': id,\r\n 'id': id,\r\n 'list': 'vet recommendations',\r\n 'category': category,\r\n 'brand': brand,\r\n 'price': price,\r\n 'position': position\r\n });\r\n });\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'product-impression',\r\n 'ecommerce': {\r\n 'impressions': recommendations\r\n }\r\n });\r\n }\r\n\r\n\r\n function vetRecommendationsClick(data) {\r\n $('.js-vet-recommendations-card').on('click', '.js-vet-recommendations-card-btn', function (e) {\r\n let $card = $(this).closest('.js-vet-recommendations-card');\r\n let name = $card.data('item-name');\r\n let id = $card.data('item-id');\r\n let price = $card.data('item-price');\r\n let brand = $card.data('item-brand');\r\n let category = $card.data('item-category');\r\n let position = $card.index() + 1;\r\n let cta = $(this).text().trim();\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'product-click',\r\n 'ecommerce': {\r\n 'click': {\r\n 'actionField': {\r\n 'list': 'vet recommendations'\r\n },\r\n 'products': [{\r\n 'name': id,\r\n 'id': id,\r\n 'list': 'vet recommendations',\r\n 'category': category,\r\n 'brand': brand,\r\n 'price': price,\r\n 'cta-text': cta,\r\n 'position': position\r\n }]\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n function initSeviceRecommendationsImpressions() {\r\n if ($('.js-vet-recommendations-service').length <= 0) {\r\n return;\r\n }\r\n var recommendations = [];\r\n $('.js-vet-recommendations-service').each(function (index) {\r\n let name = $(this).data('item-name');\r\n let position = index + 1;\r\n\r\n recommendations.push({\r\n 'name': name,\r\n 'position': position\r\n });\r\n });\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'product-impression',\r\n 'ecommerce': {\r\n 'impressions': recommendations\r\n }\r\n });\r\n }\r\n\r\n function petSelectDropdownList() {\r\n $('.js-pet-dropdown-list').on('click', function (e) {\r\n const petId = $(this).find('.selected').attr('data-petid');\r\n if ($('.js-vet-recommendations-card').length <= 0) {\r\n return;\r\n }\r\n $('.js-vet-recommendations-card').each(function (index) {\r\n $(this).find('.vca-card__pet-icon').removeClass('hidden');\r\n $(this).removeClass('hidden');\r\n let recommendationCard = $(this);\r\n if(petId != \"All\") {\r\n $(this).find('.vca-card__pet-icon').each(function (e) {\r\n const cardPetId = $(this).attr('data-petid');\r\n if(cardPetId !== petId) {\r\n $(this).addClass('hidden');\r\n }\r\n const allHidden = Array.from(recommendationCard.find('.vca-card__pet-icon'))\r\n .every(img => img.classList.contains('hidden'));\r\n if(allHidden) {\r\n recommendationCard.addClass('hidden');\r\n }\r\n })\r\n } \r\n });\r\n const allCardHidden = Array.from($('.js-vet-recommendations-card'))\r\n .every(card => card.classList.contains('hidden'));\r\n $('.js-empty-vetnerian').find('[data-region=\"noRecommend\"]').remove();\r\n if(allCardHidden) {\r\n $('.js-empty-vetnerian').append(`\r\n <div data-region=\"noRecommend\"> No recommendations.</div>\r\n `)\r\n }\r\n filterServiceList(petId);\r\n })\r\n }\r\n\r\n function filterServiceList(petId) {\r\n $('.js-vet-recommendations-service').each(function (index) {\r\n $(this).find('.vca-card__pet-icon').removeClass('hidden');\r\n $(this).removeClass('hidden');\r\n let recommendationCard = $(this);\r\n if(petId != \"All\") {\r\n $(this).find('.vca-card__pet-icon').each(function (e) {\r\n const cardPetId = $(this).attr('data-petid');\r\n if(cardPetId !== petId) {\r\n $(this).addClass('hidden');\r\n }\r\n const allHidden = Array.from(recommendationCard.find('.vca-card__pet-icon'))\r\n .every(img => img.classList.contains('hidden'));\r\n if(allHidden) {\r\n recommendationCard.addClass('hidden');\r\n }\r\n })\r\n } \r\n });\r\n const allCardHidden = Array.from($('.js-vet-recommendations-service'))\r\n .every(card => card.classList.contains('hidden'));\r\n $('.js-service-empty-vetnerian').removeClass('hidden')\r\n if(allCardHidden) {\r\n $('.js-service-empty-vetnerian').addClass('hidden')\r\n }\r\n }\r\n\r\n\r\n function serviceRecommendationsClick(data) {\r\n $('.js-vet-recommendations-service').on('click', '.js-vet-recommendations-service-btn', function (e) {\r\n let $card = $(this).closest('.js-vet-recommendations-service');\r\n let name = $card.data('item-name');\r\n let position = $card.index() + 1;\r\n let cta = $(this).text().trim();\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'product-click',\r\n 'ecommerce': {\r\n 'click': {\r\n 'actionField': {\r\n 'list': 'vet recommendations service'\r\n },\r\n 'products': [{\r\n 'name': name,\r\n 'list': 'vet recommendations service',\r\n 'cta-text': cta,\r\n 'position': position\r\n }]\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n\r\n return {\r\n init: init\r\n };\r\n\r\n\r\n\r\n})(jQuery);\r\n\r\n$(function () {\r\n VCA.vetRecommendations.init();\r\n});","import './components/cart-datalayer';\r\nimport './components/mini-cart-datalayer';\r\nimport './components/myvca-account';\r\nimport './components/nca-offer-datalayer';\r\nimport './components/oab-datalayer';\r\nimport './components/ccde-datalayer';\r\nimport './components/product-card-datalayer';\r\nimport './components/product-datalayer';\r\nimport './components/product-details-datalayer';\r\nimport './components/raa-datalayer';\r\nimport './components/dashboard-dataLayer';\r\nimport './components/veterinarian-recommendations';\r\nimport './components/checkout-confirmation-datalayer';\r\nimport './components/subscriptions';\r\nimport './components/uc-find-a-hosptial';\r\nimport './components/refer-a-patient-promo-tile';\r\n\r\n","/**\r\n * verify dataLayer exists, then push to it using GA's push method\r\n * @param {Object<string,any>} data \r\n */\r\nexport default function push(data) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(data);\r\n}\r\n","// automatic transpilation and polyfills w/ Babel - https://babeljs.io/docs/en/index.html\r\nimport 'core-js/stable';\r\nimport 'regenerator-runtime/runtime';\r\n\r\n// dependencies\r\nimport 'jquery';\r\nimport 'bootstrap';\r\nimport 'slick-carousel-latest';\r\nimport './vendor/jquery-slick-filterable.js';\r\nimport 'flatpickr';\r\n\r\n// manual polyfills\r\nimport './polyfills/polyfills.js';\r\n\r\n// dataLayer scripts\r\n\r\nimport './datalayer/index';\r\nimport './components/coveo-analytics.js';\r\nimport './components/address-book/address-book.js';\r\nimport './components/cart-landing/cart-landing.js';\r\nimport './components/cart-landing/cart-summary.js';\r\nimport './components/checkout/checkout-billing.js';\r\nimport './components/checkout/checkout-summary.js';\r\nimport './components/checkout/checkout-summary-promos.js';\r\nimport './components/checkout/checkout-shipping.js';\r\nimport './components/checkout/checkout-review.js';\r\nimport './components/pdp-selector/pdp-selector.js';\r\nimport './components/pdp-selector/pdp-quick-view.js';\r\nimport './components/mega-nav/mega-nav.js';\r\nimport './components/mega-nav/mobile-mega-nav.js';\r\nimport './components/mini-cart/mini-cart-toggle.js';\r\nimport './components/order-history/order-history.js';\r\nimport './components/return-to-top/back-to-top.js';\r\nimport './components/shop-landing/shop-50-50.js';\r\nimport './components/coveo-scripts-articles.js';\r\nimport './components/coveo-scripts-plp.js';\r\nimport './components/scrollToLink.js';\r\nimport './components/how-to-videos/how-to-videos.js';\r\nimport './components/add-to-cart.js';\r\nimport './components/menu.js';\r\nimport './components/50-50.js';\r\nimport './components/abstracts.js';\r\nimport './components/alert-banner.js';\r\nimport './components/feature-bar-parallax.js';\r\nimport './components/footer.js';\r\nimport './components/single-slide-slider.js';\r\nimport './components/inline-search.js';\r\nimport './components/listbox.js';\r\nimport './components/news-letter-cta.js';\r\nimport './components/service-slider.js';\r\nimport './components/referral-form.js';\r\nimport './components/custom-forms/form-loading.js';\r\nimport './components/custom-forms/form-loading-sitecore.js';\r\nimport './components/custom-forms/new-client-first-exam.js';\r\nimport './components/mobile-peek-slider.js';\r\nimport './components/stats-interactive.js';\r\nimport './components/story-carousel.js';\r\nimport './components/referral-interactive.js';\r\nimport './components/mutli-promo.js';\r\nimport './components/OAB/oab-from.js';\r\nimport './components/request-appt-form/request-appt-form.js';\r\nimport './components/CCDE/ccde-form.js';\r\nimport './components/CCDE/ccde-payment-capture.js';\r\nimport './components/pill-filters.js';\r\nimport './components/quantity-selector/quantity-selector.js';\r\nimport './components/breed-filters.js';\r\nimport './components/category-slider.js';\r\nimport './components/tooltips.js';\r\nimport './components/article-slider.js';\r\nimport './components/find-a-hospital/find-a-hospital-ca.js';\r\nimport './components/find-a-hospital/uc-find-a-hospital.js';\r\nimport './components/find-a-hospital/NCA-find-a-hospital.js';\r\nimport './components/find-a-hospital/OAB-find-a-hospital.js';\r\nimport './components/NCA/NCA--quick-zip-promo.js';\r\nimport './components/find-a-hospital/find-a-search.js';\r\nimport './components/vca-voice/current-stories.js';\r\nimport './components/press-article-listing.js';\r\nimport './components/print.js';\r\nimport './components/product-card.js';\r\nimport './components/white-papers-slider.js';\r\nimport './components/home-redirect-device.js';\r\nimport './components/hospital-threecard-carousel.js';\r\nimport './components/hospital-header/header-modals.js';\r\nimport './components/hospital-header/header-site-search.js';\r\nimport './components/hospital-header/mobile-header-nav.js';\r\nimport './components/dashboard/header-components.js';\r\nimport './components/dashboard/pets-dropdown.js';\r\nimport './components/dashboard/cards-carousel.js';\r\nimport './components/dashboard/pet-photo.js';\r\nimport './components/dashboard/appt-tooltip.js';\r\nimport './components/add-to-calendar.js';\r\nimport './components/login.js';\r\nimport './components/account/guest-account-setup.js';\r\nimport './components/account/activate-account-setup.js';\r\nimport './components/account/forgot-password.js';\r\nimport './components/account/reset-password.js';\r\nimport './components/PCC/PCC-video-listing.js';\r\nimport './components/myVCA/navigation-tabs.js';\r\nimport './components/myVCA/account-settings.js';\r\nimport './components/myVCA/payment-management.js';\r\nimport './components/myVCA/account-change-hospital.js';\r\nimport './components/myVCA/individual-pet-profile.js';\r\nimport './components/myVCA/upload-pet-profile-image.js';\r\nimport './components/myVCA/patient-documents.js';\r\nimport './components/myVCA/expert-guidance.js';\r\nimport './components/myVCA/care-club-membership.js';\r\nimport './components/myVCA/care-club-invoices.js';\r\nimport './components/myVCA/invoice-history.js';\r\nimport './components/myVCA/manage-subscriptions.js';\r\nimport './components/myVCA/manage-subscriptions-list.js';\r\nimport './components/custom-forms/vca-step-section-from.js';\r\nimport './components/subscriptions/delivery-address.js';\r\nimport './components/subscriptions/payment-method.js';\r\nimport './components/urgent-care/uc-vwr-form.js';\r\nimport './components/urgent-care/uc-wait-time.js';\r\nimport './components/newsletter-archive/newsletter-archive.js';\r\nimport './components/brand-pillars.js';\r\nimport './components/accordion.js';\r\nimport './components/product-walkthrough.js';\r\nimport './components/join-our-newsletter.js';\r\nimport './components/vetsouce-banner/vetsource-banner-modal.js';\r\nimport './components/hospital-action-panel.js';\r\nimport './components/metadata/canonical-url.js';\r\nimport './components/paid-media/paid-media.js';\r\nimport './components/order-history/order-details-fulfillment.js';\r\nimport './components/promo-tile-container.js';\r\nimport './components/rotating-banner.js';\r\nimport './components/tabbed-content/tabbed-img-content.js';\r\nimport './components/tabbed-content/tabbed-cont.js';\r\nimport './components/tabbed-content/50-50-caret.js';\r\n\r\nimport './components/navigable-tile.js';\r\nimport './components/location-accordian/location-accordian.js';\r\n\r\nimport './components/type-search/type-search.js';\r\nimport './components/multi-promo/multi-promo-link.js';\r\nimport './components/OAB/oab-first-available.js';\r\n\r\nif (process.env.NODE_ENV === 'development') {\r\n require('@api/mock/mock-server').default();\r\n}\r\n","import objectFitImages from 'object-fit-images';\r\n\r\nobjectFitImages();\r\n","import { url as accountUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${accountUrl}/AddOrEditCustomerAddress`;\r\nexport default new ApiService(url);\r\n","import { url as accountUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${accountUrl}/getCustomerAddresses`;\r\nexport default new ApiService(url);\r\n","import { url as accountUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${accountUrl}/DeleteCustomerAddress`;\r\nexport default new ApiService(url);\r\n","import { url as accountUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${accountUrl}/SetCustomerAddressAsPrimary`;\r\nexport default new ApiService(url);\r\n","import Store from '../store';\r\nimport addOrEditAddressService from '@api/routes/account/AddOrEditCustomerAddress';\r\nimport getAddresses from '@api/routes/account/GetCustomerAddresses';\r\nimport deleteAddress from '@api/routes/account/DeleteCustomerAddress';\r\nimport setAddressAsPrimary from '@api/routes/account/SetCustomerAddressAsPrimary';\r\nimport { statusCodes, logUpsServiceError, showSuggestions} from '../../components/address-validation/address-validation';\r\n\r\n/** \r\n * @typedef {Object} StoreContext\r\n * @property {Function} commit\r\n * @property {Function} dispatch\r\n * @property {Object<string,any} getters\r\n * @property {Object<string,any} state\r\n * \r\n * @typedef {Object} AddOrEditResponse\r\n * @property {boolean} cancelled\r\n * @property {Object<string,any>} data\r\n * @property {string} error\r\n * @property {boolean} success\r\n * @property {boolean} showSuggestionPrompt\r\n */\r\n\r\nconst store = new Store({\r\n state: {\r\n addresses: [],\r\n lastChanged: {\r\n addressId: null,\r\n index: -1\r\n },\r\n loaded: false,\r\n loading: false,\r\n loadingForm: false,\r\n loadingLine: null\r\n },\r\n actions: {\r\n /**\r\n * @typedef {{ addressId: string, addressParty: Object<string,any> }} AddOrEditAddressPayload\r\n * \r\n * @param {StoreContext} context \r\n * @param {AddOrEditAddressPayload} payload \r\n * @returns {AddOrEditResponse}\r\n */\r\n async addOrEditAddress({ commit, state }, { addressId, addressParty, isUserConfirmed }) {\r\n if(state.loadingForm) {\r\n return { cancelled: true };\r\n }\r\n\r\n let showSuggestionPrompt = false;\r\n\r\n commit('SET_LOADING_FORM');\r\n commit('SET_LOADING_LINE', addressId);\r\n\r\n const payload = { \r\n AddressId: addressId,\r\n AddressParty: addressParty,\r\n ...(isUserConfirmed ? { IsSuggestion: true } : {})\r\n };\r\n\r\n const response = await addOrEditAddressService.post(payload);\r\n\r\n if(response.success) {\r\n const { UpsAddressValidationStatus: validationStatus } = response.data;\r\n showSuggestionPrompt = showSuggestions(validationStatus);\r\n\r\n if(validationStatus === statusCodes.UPS_UNAVAILABLE) {\r\n logUpsServiceError();\r\n }\r\n\r\n if(response.data.Success) {\r\n commit('SET_LAST_CHANGED', addressId);\r\n commit('SET_ADDRESSES', response.data.Parties);\r\n }\r\n }\r\n \r\n commit('SET_LOADING_FORM', false);\r\n commit('SET_LOADING_LINE');\r\n\r\n return {\r\n ...response,\r\n cancelled: false,\r\n showSuggestionPrompt\r\n };\r\n },\r\n async getAddresses({ commit, state }) {\r\n if(state.loading) {\r\n return { cancelled: true };\r\n }\r\n \r\n commit('SET_LOADING');\r\n\r\n const response = await getAddresses.get();\r\n\r\n if(response.success) {\r\n //set primary address first in array\r\n let addresses = [...response.data];\r\n let isPrimaryIndex = response.data.findIndex(address => address.IsPrimary == true );\r\n addresses.unshift(addresses.splice(isPrimaryIndex, 1)[0]);\r\n\r\n commit('SET_ADDRESSES', addresses);\r\n commit('SET_LOADED');\r\n }\r\n\r\n commit('SET_LOADING', false);\r\n\r\n return response;\r\n },\r\n async deleteAddress({ commit }, addressId) {\r\n commit('SET_LOADING_LINE', addressId);\r\n\r\n const payload = { AddressId: addressId };\r\n const response = await deleteAddress.post(payload);\r\n\r\n if(response.success) {\r\n commit('SET_LAST_CHANGED', addressId);\r\n commit('SET_ADDRESSES', response.data.Parties);\r\n }\r\n \r\n commit('SET_LOADING_LINE');\r\n\r\n return response;\r\n },\r\n async setPrimary({ commit }, addressId) {\r\n commit('SET_LOADING_LINE', addressId);\r\n\r\n const payload = { AddressId: addressId };\r\n const response = await setAddressAsPrimary.post(payload);\r\n\r\n if(response.success) {\r\n commit('SET_LAST_CHANGED', addressId);\r\n commit('SET_ADDRESSES', response.data.Parties);\r\n }\r\n \r\n commit('SET_LOADING_LINE');\r\n\r\n return response;\r\n },\r\n },\r\n getters: {\r\n addressIds(state) {\r\n if(state.addresses[0] === undefined){\r\n return [];\r\n }\r\n return state.addresses.map(({ AddressName }) => AddressName);\r\n },\r\n addressInfo: (state) => (addressId) => {\r\n if(state.addresses[0] === undefined){\r\n return {};\r\n }\r\n const address = state.addresses.find(({ AddressName }) => AddressName === addressId);\r\n return address ? {\r\n address1: address.Address1,\r\n address2: address.Address2,\r\n city: address.City,\r\n country: address.Country,\r\n firstName: address.FirstName,\r\n isPrimary: address.IsPrimary,\r\n lastName: address.LastName,\r\n name: [ address.FirstName, address.LastName ].join(' ')?.trim(),\r\n phone: address.PhoneNumber,\r\n state: address.State,\r\n stateCode: address.StateCode,\r\n zip: address.ZipPostalCode\r\n } : {};\r\n },\r\n isPrimary: (state) => (addressId) => {\r\n const address = state.addresses.find(({ AddressName }) => AddressName === addressId);\r\n return address ? address.IsPrimary : false;\r\n },\r\n isLoadingLine: (state) => (addressId) => {\r\n return addressId === state.loadingLine;\r\n },\r\n wasChanged(state) {\r\n return !!state.lastChanged.addressId;\r\n }\r\n },\r\n mutations: {\r\n SET_ADDRESSES(state, addresses) {\r\n state.addresses = addresses || [];\r\n },\r\n SET_LAST_CHANGED(state, addressId) {\r\n if(state.address === undefined || state.address[0] === undefined){\r\n return {};\r\n }\r\n const index = state.addresses.findIndex(({ AddressName }) => AddressName === addressId);\r\n state.lastChanged = {\r\n addressId,\r\n index\r\n };\r\n },\r\n SET_LOADED(state, loaded = true) {\r\n state.loaded = loaded;\r\n },\r\n SET_LOADING(state, loading = true) {\r\n state.loading = loading;\r\n },\r\n SET_LOADING_FORM(state, loadingForm = true) {\r\n state.loadingForm = loadingForm;\r\n },\r\n SET_LOADING_LINE(state, lineId = null) {\r\n state.loadingLine = lineId;\r\n }\r\n }\r\n});\r\n\r\nexport {\r\n logUpsServiceError,\r\n showSuggestions,\r\n statusCodes as validationStatusCodes\r\n};\r\n\r\nexport const {\r\n actions,\r\n mutations,\r\n state,\r\n watch,\r\n} = store;\r\n\r\nexport default store;\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/addbundle`;\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/submit`;\r\nexport default new ApiService(url);\r\n","import ApiService from '@api/api-service';\r\n\r\nexport const url = '/shop';\r\nexport default new ApiService(url);\r\n","import { url as shopUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${shopUrl}/checkout`;\r\nexport default new ApiService(url);\r\n","import { url as checkoutUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${checkoutUrl}/cart`;\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/removeline`;\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/RemovePromotion`;\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/updateline`;\r\nexport default new ApiService(url);\r\n","import { url as cartUrl } from '../index';\r\nimport ApiService from '@api/api-service';\r\n\r\nexport const url = `${cartUrl}/validateAndAddPromotion`;\r\nexport default new ApiService(url);\r\n","import Store from '../store';\r\nimport priceString from '@utils/price-string';\r\nimport { get as getProp } from 'lodash';\r\nimport cartService from '@api/routes/cart';\r\nimport cartAddLineService from '@api/routes/cart/addline';\r\nimport cartAddMultipleLineService from '@api/routes/cart/addMultipleline';\r\nimport cartSubmitService from '@api/routes/cart/submit';\r\nimport checkoutService from '@api/routes/shop/checkout/cart';\r\nimport removeLinesService from '@api/routes/cart/removeline';\r\nimport removePromoService from '@api/routes/cart/removepromotion';\r\nimport updateLineService from '@api/routes/cart/updateline';\r\nimport validatePromoService from '@api/routes/cart/validateandaddpromotion';\r\nimport { miniCartToggle } from '../../components/mini-cart/mini-cart-toggle';\r\nimport * as cartDatalayer from '@datalayer/components/cart-datalayer';\r\nimport * as productDatalayer from '@datalayer/components/product-datalayer';\r\n\r\n/**\r\n * @typedef {Object} StoreContext\r\n * @property {Function} commit\r\n * @property {Function} dispatch\r\n * @property {Object<string,any>} getters\r\n * @property {Object<string,any>} state\r\n */\r\n\r\n/**\r\n * @typedef {Object} AddlineOptions\r\n * @property {number} autoshipFrequency\r\n * @property {string} catalogName\r\n * @property {string} brand\r\n * @property {number} exceptionAmount\r\n * @property {string} exceptionBehavior\r\n * @property {number} quantity\r\n * @property {boolean} IsRefill\r\n */\r\n\r\n/**\r\n * @typedef {Object} Attribute\r\n * @property {string} label\r\n * @property {string} value\r\n */\r\n\r\n/**\r\n * map address object to formatted string\r\n * @param {Object<string,any>} address\r\n * @returns {string}\r\n */\r\nconst formatAddress = address => {\r\n let text = '';\r\n if (address) {\r\n text = address.Address1;\r\n if (address.Address2) {\r\n text += ` ${address.Address2}`;\r\n }\r\n text += ` ${address.City}, ${address.State} ${address.ZipPostalCode}`;\r\n }\r\n\r\n return text;\r\n};\r\n\r\nconst EXCEPTION_BEHAVIOR_VALUES = {\r\n NO_EXCEPTION: -1,\r\n STRIKE_THROUGH: 0,\r\n REPLACE: 1,\r\n};\r\n\r\nconst DEFAULT_PENDING_UPDATE = {\r\n lineId: null,\r\n quantity: null,\r\n autoshipFrequency: null,\r\n petId: null,\r\n};\r\n\r\nconst DEFAULT_ADDLINE_OPTIONS = {\r\n AutoshipFrequency: 0,\r\n CatalogName: 'VCA_Master',\r\n ExceptionAmount: 0,\r\n ExceptionBehavior: null,\r\n Quantity: 1,\r\n IsRefill: false,\r\n Brand: null,\r\n};\r\n\r\nconst store = new Store({\r\n state: {\r\n transactionId: '',\r\n billingParty: null,\r\n cachedLineIds: [],\r\n cachedMappedLines: [],\r\n currencyCode: '',\r\n discount: '',\r\n error: '',\r\n freeShippingText: '',\r\n hospitalId: '',\r\n isReview: false,\r\n loaded: false,\r\n loading: false,\r\n loadingLine: null,\r\n miniCartTotalFormatted: '',\r\n paymentMethod: null,\r\n pendingUpdate: DEFAULT_PENDING_UPDATE,\r\n petSelectionValidated: false,\r\n promoCode: '',\r\n rawLines: [],\r\n shippingParty: null,\r\n shippingMethod: null,\r\n shippingTotal: 0,\r\n shippingTotalFormatted: '',\r\n subtotal: 0,\r\n subtotalFormatted: '',\r\n taxTotal: 0,\r\n taxTotalFormatted: '',\r\n total: 0,\r\n totalFormatted: '',\r\n billingAddressValidation: false,\r\n },\r\n actions: {\r\n async getCart({ commit, dispatch, state }) {\r\n if (state.loading) {\r\n return { cancelled: true };\r\n }\r\n\r\n commit('SET_LOADING');\r\n commit('SET_ERROR', '');\r\n\r\n const { success, data, error } = await cartService.get();\r\n\r\n if (success) {\r\n dispatch('setCartData', data);\r\n } else {\r\n commit(\r\n 'SET_ERROR',\r\n error ||\r\n `Something unexpected happened and we couldn't load your cart. Please try again later.`\r\n );\r\n\r\n commit('SET_FORMATTED_SUMMARY', {\r\n miniCartTotal: 'n/a',\r\n discount: 'n/a',\r\n shippingTotal: 'n/a',\r\n subtotal: 'n/a',\r\n taxTotal: 'n/a',\r\n total: 'n/a',\r\n });\r\n }\r\n\r\n commit('SET_LOADING', false);\r\n commit('SET_LOADED', true);\r\n\r\n return { success, error };\r\n },\r\n async submitCart() {\r\n const response = await cartSubmitService.get();\r\n\r\n if (response.success) {\r\n if (response.data.RedirectUrl) {\r\n // slight delay before redirecting to process dataLayer push\r\n setTimeout(\r\n () =>\r\n (window.location.href = response.data.RedirectUrl),\r\n 500\r\n );\r\n } else {\r\n console.error(\r\n 'Cart submitted but no redirect returned. A property named \"RedirectUrl\" is expected in the response.',\r\n response\r\n );\r\n }\r\n } else {\r\n response.error = response.error\r\n ? response.error\r\n : `Something unexpected happened and we couldn't place your order. Please try again later.`;\r\n }\r\n\r\n return response;\r\n },\r\n /**\r\n * @param {StoreContext} context store context\r\n * @param {string} productId\r\n * @param {string} variantId\r\n * @param {AddlineOptions} options\r\n * @returns\r\n */\r\n async addLine(\r\n { commit, dispatch, getters, state },\r\n productId,\r\n variantId,\r\n options = {},\r\n petId\r\n ) {\r\n const payload = {\r\n ProductId: productId,\r\n VariantId: variantId,\r\n AutoshipFrequency:\r\n options.autoshipFrequency ||\r\n DEFAULT_ADDLINE_OPTIONS.AutoshipFrequency,\r\n CatalogName:\r\n options.catalogName || DEFAULT_ADDLINE_OPTIONS.CatalogName,\r\n ExceptionAmount:\r\n options.exceptionAmount ||\r\n DEFAULT_ADDLINE_OPTIONS.ExceptionAmount,\r\n ExceptionBehavior:\r\n options.exceptionBehavior ??\r\n DEFAULT_ADDLINE_OPTIONS.ExceptionBehavior,\r\n Quantity: options.quantity || DEFAULT_ADDLINE_OPTIONS.Quantity,\r\n PetId: petId,\r\n IsRefill: options.IsRefill || DEFAULT_ADDLINE_OPTIONS.IsRefill,\r\n Brand: options.brand || DEFAULT_ADDLINE_OPTIONS.Brand,\r\n };\r\n\r\n commit('SET_LOADING_LINE', '_newLine_');\r\n\r\n const response = await cartAddLineService.post(payload);\r\n\r\n if (response.success) {\r\n dispatch('setCartData', response.data);\r\n\r\n const addedLineIndex = getters.lines.findIndex(\r\n line =>\r\n line.productId === productId &&\r\n line.variantId === line.variantId\r\n );\r\n cartDatalayer.sendAddToCart(\r\n state.currencyCode,\r\n getters.linesGAProducts[addedLineIndex]\r\n );\r\n }\r\n\r\n commit('SET_LOADING_LINE', null);\r\n commit('SET_LOADED', true);\r\n\r\n return response;\r\n },\r\n async addMultipleLines(\r\n { commit, dispatch, getters, state },\r\n products,\r\n productId\r\n ) {\r\n const payload = products;\r\n\r\n commit('SET_LOADING_LINE', '_newLine_');\r\n //console.log(products);\r\n // console.log(productId);\r\n const response = await cartAddMultipleLineService.post(payload);\r\n\r\n if (response.success) {\r\n dispatch('setCartData', response.data);\r\n const addedLineIndex = getters.lines.findIndex(\r\n line =>\r\n line.productId === productId &&\r\n line.variantId === line.variantId\r\n );\r\n cartDatalayer.sendAddToCart(\r\n state.currencyCode,\r\n getters.linesGAProducts[addedLineIndex]\r\n );\r\n }\r\n\r\n commit('SET_LOADING_LINE', null);\r\n commit('SET_LOADED', true);\r\n\r\n return response;\r\n },\r\n async removeLine({ commit, dispatch, getters, state }, lineId) {\r\n commit('SET_LOADING_LINE', lineId);\r\n\r\n const { success, data, error } = await removeLinesService.post({\r\n LineIds: [lineId],\r\n });\r\n\r\n if (success) {\r\n const removedLineIndex = getters.lines.findIndex(\r\n line => line.lineId === lineId\r\n );\r\n cartDatalayer.sendRemoveFromCart(\r\n state.currencyCode,\r\n getters.linesGAProducts[removedLineIndex]\r\n );\r\n\r\n dispatch('setCartData', data);\r\n } else {\r\n console.error(error);\r\n }\r\n\r\n if ((lineId = state.pendingUpdate.lineId)) {\r\n commit('RESET_PENDING_UPDATE');\r\n }\r\n\r\n commit('SET_LOADING_LINE', null);\r\n\r\n return { success, error };\r\n },\r\n async updateLine({ commit, dispatch, state }) {\r\n commit('SET_LOADING_LINE', state.pendingUpdate.lineId);\r\n\r\n const updateLinePayload = {\r\n CartLineId: state.pendingUpdate.lineId,\r\n AutoshipFrequency: state.pendingUpdate.autoshipFrequency,\r\n PetId: state.pendingUpdate.petId,\r\n Quantity: state.pendingUpdate.quantity,\r\n };\r\n\r\n const { success, data, error } = await updateLineService.post(\r\n updateLinePayload\r\n );\r\n\r\n if (success) {\r\n dispatch('setCartData', data);\r\n commit('RESET_PENDING_UPDATE');\r\n } else {\r\n console.error(error);\r\n }\r\n\r\n commit('SET_LOADING_LINE', null);\r\n\r\n return { success, error };\r\n },\r\n async applyPromo({ commit, dispatch }, promoCode) {\r\n commit('SET_LOADING');\r\n\r\n const response = await validatePromoService.post({\r\n PromoCode: promoCode,\r\n });\r\n\r\n if (response.success && response.data?.Valid) {\r\n cartDatalayer.sendApplyPromo(response.data.PromoCode);\r\n\r\n commit('SET_PROMO_CODE', response.data.PromoCode);\r\n\r\n dispatch('setFormattedCartSummary', {\r\n miniCartTotal:\r\n response.data?.FormattedTotal?.FormattedMiniCartTotal,\r\n discount: response.data?.FormattedTotal?.FormattedDiscount,\r\n shippingTotal:\r\n response.data?.FormattedTotal?.FormattedShipping,\r\n subtotal: response.data?.FormattedTotal?.FormattedSubtotal,\r\n taxTotal: response.data?.FormattedTotal?.FormattedTax,\r\n total: response.data?.FormattedTotal?.FormattedGrandTotal,\r\n });\r\n }\r\n\r\n commit('SET_LOADING', false);\r\n\r\n return response;\r\n },\r\n async removePromo({ commit, dispatch }) {\r\n commit('SET_LOADING');\r\n\r\n const response = await removePromoService.get();\r\n\r\n if (response.success) {\r\n commit('SET_PROMO_CODE', '');\r\n\r\n dispatch('setFormattedCartSummary', {\r\n miniCartTotal:\r\n response.data?.FormattedTotal?.FormattedMiniCartTotal,\r\n discount: response.data?.FormattedTotal?.FormattedDiscount,\r\n shippingTotal:\r\n response.data?.FormattedTotal?.FormattedShipping,\r\n subtotal: response.data?.FormattedTotal?.FormattedSubtotal,\r\n taxTotal: response.data?.FormattedTotal?.FormattedTax,\r\n total: response.data?.FormattedTotal?.FormattedGrandTotal,\r\n });\r\n }\r\n\r\n commit('SET_LOADING', false);\r\n\r\n return response;\r\n },\r\n setCartData({ commit, dispatch, getters }, data) {\r\n dispatch('setCartSummary', {\r\n discount: data?.FormattedTotal?.FormattedDiscount,\r\n shippingTotal: data?.Total?.ShippingTotal,\r\n subtotal: data?.Total?.Subtotal,\r\n taxTotal: data?.Total?.TaxTotal?.Amount,\r\n total: data?.Total?.Amount,\r\n });\r\n\r\n dispatch('setFormattedCartSummary', {\r\n miniCartTotal: data?.FormattedTotal?.FormattedMiniCartTotal,\r\n discount: data?.FormattedTotal?.FormattedDiscount,\r\n shippingTotal: data?.FormattedTotal?.FormattedShipping,\r\n subtotal: data?.FormattedTotal?.FormattedSubtotal,\r\n taxTotal: data?.FormattedTotal?.FormattedTax,\r\n total: data?.FormattedTotal?.FormattedGrandTotal,\r\n });\r\n\r\n commit('SET_TRANSACTION_ID', data.EntityOrderId);\r\n commit('SET_BILLING_PARTY', data.BillingParty);\r\n commit('SET_CURRENCY_CODE', data.CurrencyCode);\r\n commit('SET_FREE_SHIPPING_TEXT', data.FreeShippingText);\r\n commit('SET_HOSPITAL_ID', data.HospitalId);\r\n commit('SET_PAYMENT_METHOD', data.PaymentMethod);\r\n commit('SET_PROMO_CODE', data.PromotionCode);\r\n commit('SET_SHIPPING_PARTY', data.ShippingParty);\r\n commit('SET_SHIPPING_METHOD', data.Shipping);\r\n commit('SET_CACHED_LINES', {\r\n lineIds: getters.lineIds,\r\n mappedLines: getters.lines,\r\n });\r\n commit('SET_RAW_LINES', data.Lines);\r\n },\r\n /** set cart summary as numbers */\r\n setCartSummary(\r\n { commit },\r\n { discount, shippingTotal, subtotal, taxTotal, total }\r\n ) {\r\n commit('SET_DISCOUNT', discount);\r\n\r\n commit('SET_SUMMARY', {\r\n shippingTotal,\r\n subtotal,\r\n taxTotal,\r\n total,\r\n });\r\n },\r\n /** set cart summary as formatted strings */\r\n setFormattedCartSummary(\r\n { commit },\r\n {\r\n miniCartTotal,\r\n discount,\r\n shippingTotal,\r\n subtotal,\r\n taxTotal,\r\n total,\r\n }\r\n ) {\r\n commit('SET_FORMATTED_SUMMARY', {\r\n miniCartTotal,\r\n discount,\r\n shippingTotal,\r\n subtotal,\r\n taxTotal,\r\n total,\r\n });\r\n },\r\n focusMiniCart(context, productInfo) {\r\n miniCartToggle?.focus(productInfo);\r\n },\r\n },\r\n getters: {\r\n billingPartyId(state) {\r\n return state.billingParty?.AddressName || null;\r\n },\r\n billingPartyCity(state) {\r\n return state.billingParty?.City || null;\r\n },\r\n billingPartyState(state) {\r\n return state.billingParty?.State || null;\r\n },\r\n billingPartyAddress1(state) {\r\n return state.billingParty?.Address1 || null;\r\n },\r\n billingPartyAddress2(state) {\r\n return state.billingParty?.Address2 || null;\r\n },\r\n billingPartyZipPostalCode(state) {\r\n return state.billingParty?.ZipPostalCode || null;\r\n },\r\n billingPartyLastName(state) {\r\n return state.billingParty?.LastName || null;\r\n },\r\n billingPartyFirstName(state) {\r\n return state.billingParty?.FirstName || null;\r\n },\r\n billingPartyValidation(state) {\r\n return state.billingAddressValidation || null;\r\n },\r\n cardPreview(state) {\r\n if (!state.paymentMethod) {\r\n return null;\r\n }\r\n\r\n return `${state.paymentMethod.CardType} ****${state.paymentMethod.LastDigits}`;\r\n },\r\n formattedBillingAddress(state) {\r\n return formatAddress(state.billingParty);\r\n },\r\n formattedDiscount(state) {\r\n return state.discount || priceString(0);\r\n },\r\n formattedMiniCartTotal(state) {\r\n return state.miniCartTotalFormatted;\r\n },\r\n formattedShippingAddress(state) {\r\n return formatAddress(state.shippingParty);\r\n },\r\n formattedShippingTotal(state) {\r\n return (\r\n state.shippingTotalFormatted || priceString(state.shippingTotal)\r\n );\r\n },\r\n formattedSubtotal(state) {\r\n return state.subtotalFormatted || priceString(state.subtotal);\r\n },\r\n formattedTaxTotal(state) {\r\n return state.taxTotalFormatted || priceString(state.taxTotal);\r\n },\r\n formattedTotal(state) {\r\n return state.totalFormatted || priceString(state.total);\r\n },\r\n hasPendingPet(state, getters) {\r\n return !!getters.pendingPetLineIds?.length || false;\r\n },\r\n isBackOrdered(state, getters) {\r\n return !!getters.pendingRemoveBackorder?.length || false;\r\n },\r\n hasPendingUpdate(state) {\r\n return state.pendingUpdate.lineId !== null;\r\n },\r\n isEmpty(state) {\r\n return state.rawLines.length === 0;\r\n },\r\n isPetInvalid: (state, getters) => lineId => {\r\n return (\r\n state.petSelectionValidated &&\r\n getters.pendingPetLineIds.includes(lineId)\r\n );\r\n },\r\n isLineUpdateDisabled: state => lineId => {\r\n if (!state.pendingUpdate.lineId) {\r\n return false;\r\n }\r\n\r\n return state.pendingUpdate.lineId !== lineId;\r\n },\r\n line: (state, getters) => lineId => {\r\n return getters.lines.find(line => line.lineId === lineId);\r\n },\r\n /**\r\n * array of attribute values and labels\r\n * @param {string} lineId id of line to get attributes from\r\n * @param {Object<string, string>} labels object of label strings to. property name(s) should match the property name of attribute value\r\n * @returns {Array<Attribute>}\r\n */\r\n lineAttributes: (state, getters) => (lineId, labels) => {\r\n const line = getters.line(lineId);\r\n if (!line) return [];\r\n\r\n const {\r\n flavor: flavorLabel,\r\n packaging: packagingLabel,\r\n strengthSize: strengthSizeLabel,\r\n strengthSizeSupplies: strengthSizeSuppliesLabel,\r\n rxForm: rxFormLabel,\r\n } = labels;\r\n\r\n const attrArr = [\r\n { label: flavorLabel, value: line.attributes.flavor },\r\n { label: packagingLabel, value: line.attributes.packaging },\r\n {\r\n label: strengthSizeLabel,\r\n value: line.attributes.strengthSize,\r\n },\r\n {\r\n label: strengthSizeSuppliesLabel,\r\n value: line.attributes.strengthSizeSupplies,\r\n },\r\n { label: rxFormLabel, value: line.attributes.rxForm },\r\n ];\r\n\r\n return attrArr.filter(({ value }) => value);\r\n },\r\n /**\r\n * array of lineIds used to help define line order\r\n * @returns {Array<string>}\r\n */\r\n lineIds(state) {\r\n return state.rawLines.map(({ LineId }) => LineId);\r\n },\r\n /**\r\n * array of normalized line data\r\n * @returns {Array<Object<string,any>>}\r\n */\r\n lines(state) {\r\n return state.rawLines.map(line => {\r\n return {\r\n attributes: {\r\n flavor: getProp(line, 'Variant.Flavor', null),\r\n packaging: getProp(line, 'Variant.Packaging', null),\r\n strengthSize: getProp(\r\n line,\r\n 'Variant.StrengthSize',\r\n null\r\n ),\r\n strengthSizeSupplies: getProp(\r\n line,\r\n 'Variant.StrengthSizeSupplies',\r\n null\r\n ),\r\n rxForm: getProp(line, 'Variant.RxForm', null),\r\n },\r\n autoshipFrequency: line.AutoshipFrequency,\r\n brand: getProp(line, 'Variant.Brand', null),\r\n category: getProp(line, 'Variant.Category', null),\r\n displayName: getProp(line, 'Product.DisplayName', ''),\r\n name: getProp(line, 'Product.Name', ''),\r\n exceptionAmount: line.ExceptionAmount,\r\n exceptionBehavior: line.ExceptionBehavior,\r\n image: {\r\n alt: getProp(line, 'Variant.Image.Alt', null),\r\n constrainedUrl: getProp(\r\n line,\r\n 'Variant.Image.ConstrainedUrl',\r\n null\r\n ),\r\n },\r\n lineId: line.LineId,\r\n listPrice: getProp(line, 'Product.Price.ListPrice', 0),\r\n petId: line.PetId,\r\n productId: getProp(line, 'Product.ProductId', ''),\r\n productUrl: line.ProductUrl,\r\n quantity: line.Quantity,\r\n rxRequired: getProp(line, 'Variant.RxRequired', false),\r\n variantId: getProp(line, 'Product.ProductVariantId', ''),\r\n backOrdered: line.BackOrdered,\r\n };\r\n });\r\n },\r\n /**\r\n * array of lines formatted for google analytics\r\n * @returns {Array<Object<string,any>>}\r\n */\r\n linesGAProducts(state, getters) {\r\n return getters.lines.map(line =>\r\n productDatalayer.buildProduct({\r\n id: line.productId,\r\n variantId: line.variantId,\r\n name: line.name,\r\n brand: line.brand,\r\n category: line.category,\r\n price: line.listPrice,\r\n quantity: line.quantity,\r\n autoshipFrequency: line.autoshipFrequency,\r\n pet: line.petId,\r\n discount:\r\n line.exceptionBehavior !==\r\n EXCEPTION_BEHAVIOR_VALUES.NO_EXCEPTION,\r\n rxRequired: line.rxRequired,\r\n strength: line.attributes.strengthSize,\r\n packaging: line.attributes.packaging,\r\n })\r\n );\r\n },\r\n linesAdded(state, getters) {\r\n return getters.lineIds.filter(\r\n id => !state.cachedLineIds.includes(id)\r\n );\r\n },\r\n linesCount(state, getters) {\r\n return getters.lines\r\n .map(line => line.quantity)\r\n .reduce((prev, current) => prev + current, 0);\r\n },\r\n linesRemoved(state, getters) {\r\n return state.cachedLineIds.filter(\r\n id => !getters.lineIds.includes(id)\r\n );\r\n },\r\n paymentMethodId(state) {\r\n return state.paymentMethod?.Id || null;\r\n },\r\n pendingUpdateLineId(state) {\r\n return state.pendingUpdate.lineId;\r\n },\r\n pendingPetLineIds(state, getters) {\r\n return (\r\n getters.lines\r\n .filter(({ petId }) => !petId)\r\n ?.map(({ lineId }) => lineId) || []\r\n );\r\n },\r\n pendingRemoveBackorder(state, getters) {\r\n return (\r\n getters.lines\r\n .filter(({ backOrdered }) => backOrdered == true)\r\n ?.map(({ petId }) => petId) || []\r\n );\r\n },\r\n shippingPartyId(state) {\r\n return state.shippingParty?.AddressName || null;\r\n },\r\n shippingMethodId(state) {\r\n return state.shippingMethod?.ShippingMethodId || null;\r\n },\r\n },\r\n mutations: {\r\n RESET_PENDING_UPDATE(state) {\r\n state.pendingUpdate = DEFAULT_PENDING_UPDATE;\r\n },\r\n SET_TRANSACTION_ID(state, transactionId) {\r\n state.transactionId = transactionId;\r\n },\r\n SET_BILLING_PARTY(state, billingParty) {\r\n state.billingParty = billingParty || null;\r\n },\r\n SET_CACHED_LINES(state, { lineIds, mappedLines }) {\r\n state.cachedLineIds = lineIds;\r\n state.cachedMappedLines = mappedLines;\r\n },\r\n SET_CURRENCY_CODE(state, currencyCode) {\r\n state.currencyCode = currencyCode;\r\n },\r\n SET_DISCOUNT(state, discount) {\r\n state.discount = discount;\r\n },\r\n SET_ERROR(state, error) {\r\n state.error = error;\r\n },\r\n SET_FREE_SHIPPING_TEXT(state, freeShippingText) {\r\n state.freeShippingText = freeShippingText;\r\n },\r\n SET_FORMATTED_SUMMARY(\r\n state,\r\n {\r\n miniCartTotal,\r\n discount,\r\n shippingTotal,\r\n subtotal,\r\n taxTotal,\r\n total,\r\n }\r\n ) {\r\n state.miniCartTotalFormatted = miniCartTotal || '';\r\n state.discount = discount || '';\r\n state.shippingTotalFormatted = shippingTotal || '';\r\n state.subtotalFormatted = subtotal || '';\r\n state.taxTotalFormatted = taxTotal || '';\r\n state.totalFormatted = total || '';\r\n },\r\n SET_HOSPITAL_ID(state, hospitalId) {\r\n state.hospitalId = hospitalId;\r\n },\r\n SET_IS_REVIEW(state, isReview) {\r\n state.isReview = isReview;\r\n },\r\n SET_LOADED(state, loaded) {\r\n state.loaded = loaded;\r\n },\r\n SET_LOADING(state, loading = true) {\r\n state.loading = loading;\r\n },\r\n SET_LOADING_LINE(state, lineId) {\r\n state.loadingLine = lineId;\r\n },\r\n SET_PAYMENT_METHOD(state, paymentMethod) {\r\n state.paymentMethod = paymentMethod || null;\r\n },\r\n SET_PENDING_UPDATE(state, pendingUpdate = {}) {\r\n if (!pendingUpdate.lineId) {\r\n return;\r\n }\r\n\r\n state.pendingUpdate = pendingUpdate;\r\n },\r\n SET_PET_SELECTION_VALIDATED(state, validated) {\r\n state.petSelectionValidated = validated;\r\n },\r\n SET_PROMO_CODE(state, promoCode) {\r\n state.promoCode = promoCode;\r\n },\r\n SET_RAW_LINES(state, lines = []) {\r\n state.rawLines = lines || [];\r\n },\r\n SET_SHIPPING_PARTY(state, shippingParty) {\r\n state.shippingParty = shippingParty || null;\r\n },\r\n SET_SHIPPING_METHOD(state, shippingMethod) {\r\n state.shippingMethod = shippingMethod || null;\r\n },\r\n SET_SHIPPING_TOTAL(state, shippingTotal) {\r\n state.shippingTotal = shippingTotal || 0;\r\n },\r\n SET_SUMMARY(state, { shippingTotal, subtotal, taxTotal, total }) {\r\n state.shippingTotal = shippingTotal || 0;\r\n state.subtotal = subtotal || 0;\r\n state.taxTotal = taxTotal || 0;\r\n state.total = total || 0;\r\n },\r\n SET_POST_ACTION_URL(state, url) {\r\n checkoutService.setRoute(url);\r\n },\r\n SET_BILLING_VALIDATION(state, status) {\r\n state.billingAddressValidation = status;\r\n },\r\n },\r\n});\r\n\r\nexport { EXCEPTION_BEHAVIOR_VALUES as exceptionBehaviorValues };\r\n\r\nexport const { actions, mutations, state, watch } = store;\r\n\r\nexport default store;\r\n","export default function(obj, prop) {\r\n Object.defineProperty(obj, prop, { writable: false })\r\n};\r\n","import isFn from '@utils/is-function';\r\nimport setReadonly from '@utils/set-readonly';\r\nimport ReactiveComponent from \"@utils/reactive-component\";\r\n\r\nclass State extends ReactiveComponent {\r\n constructor(definitions) {\r\n const {\r\n getters = {},\r\n state = {}\r\n } = definitions;\r\n\r\n const computed = Object.fromEntries(\r\n Object.entries(getters).map(([ prop, fn ]) => {\r\n return [\r\n prop,\r\n () => fn(this.state, this.getters)\r\n ];\r\n })\r\n );\r\n\r\n super({ computed, state });\r\n\r\n this.state = {};\r\n this.#defineState(state);\r\n\r\n this.getters = {};\r\n this.#defineGetters(getters);\r\n }\r\n\r\n get enumerable() {\r\n return false\r\n }\r\n\r\n #defineGetters(getters) {\r\n setReadonly(this, 'getters');\r\n\r\n Object.keys(getters).forEach(prop => {\r\n Object.defineProperty(this.getters, prop, {\r\n get: () => this[prop]\r\n });\r\n\r\n this[prop]; // trigger getter to initialize any watchers\r\n })\r\n }\r\n\r\n #defineState(state) {\r\n setReadonly(this, 'state');\r\n\r\n Object.keys(state).forEach(prop => {\r\n Object.defineProperty(this.state, prop, {\r\n get: () => this[prop],\r\n set: () => { throw new Error(`Mutation on \"${prop}\" property detected. Do not mutate state outside of a mutation handler.`); }\r\n });\r\n });\r\n }\r\n\r\n watch(prop, fn) {\r\n if(!prop || !isFn(fn)) {\r\n return null;\r\n }\r\n\r\n const bindedFn = (...args) => fn(this.state, this.getters, ...args);\r\n \r\n if(this.hasOwnProperty(prop)) {\r\n return super.watch(prop, bindedFn);\r\n }\r\n }\r\n}\r\n\r\nexport default class Store extends State {\r\n constructor(definitions) {\r\n const {\r\n actions = {},\r\n getters = {},\r\n mutations = {},\r\n state = {},\r\n } = definitions;\r\n\r\n super({ getters, state });\r\n\r\n this.#bindActions(actions);\r\n this.#defineActions();\r\n\r\n this.#bindMutations(mutations);\r\n this.#defineMutations();\r\n }\r\n\r\n #defineActions() {\r\n setReadonly(this, 'actions');\r\n Object.keys(this.actions).forEach(prop => setReadonly(this.actions, prop));\r\n }\r\n\r\n #bindActions(actions) {\r\n const proxy = new Proxy(this, {\r\n get(target, prop) {\r\n return target[prop];\r\n }\r\n });\r\n\r\n const context = {\r\n commit: this.commit.bind(proxy),\r\n dispatch: this.dispatch.bind(proxy),\r\n getters: this.getters,\r\n state: this.state\r\n };\r\n\r\n this.actions = Object.fromEntries(\r\n Object.entries(actions).map(([prop, fn]) => {\r\n return [\r\n prop,\r\n (...args) => fn(context, ...args)\r\n ];\r\n })\r\n );\r\n }\r\n\r\n #defineMutations() {\r\n setReadonly(this, 'mutations');\r\n Object.keys(this.mutations).forEach(prop => setReadonly(this.mutations, prop));\r\n }\r\n\r\n #bindMutations(mutations) {\r\n this.mutations = Object.fromEntries(\r\n Object.entries(mutations).map(([prop, fn]) => {\r\n return [\r\n prop,\r\n (...args) => fn(this, ...args)\r\n ];\r\n })\r\n );\r\n }\r\n\r\n commit(name, ...args) {\r\n if(this.mutations[name]) {\r\n this.mutations[name](...args);\r\n }\r\n }\r\n\r\n dispatch(name, ...args) {\r\n if(this.actions[name]) {\r\n this.actions[name](...args);\r\n }\r\n }\r\n}\r\n","function countdown(elementName, time) {\r\n var duration = 60 * time;\r\n var timer = duration, minutes, seconds;\r\n const interval = setInterval(function () {\r\n minutes = parseInt(timer / 60, 10)\r\n seconds = parseInt(timer % 60, 10);\r\n\r\n minutes = minutes < 10 ? \"\" + minutes : minutes;\r\n seconds = seconds < 10 ? \"0\" + seconds : seconds;\r\n\r\n elementName.html(minutes + ':' + seconds);\r\n if (--timer < 0) {\r\n timer = 0;\r\n clearInterval(interval);\r\n }\r\n }, 1000);\r\n}\r\n\r\nexport default countdown;\r\n","/**\r\n * \r\n * @param {Array<Object<string, any>>} arr array to be filtered\r\n * @param {string} prop property name that values will be compared on\r\n */\r\nexport function duplicateValuesByProp(arr, prop) {\r\n if(!Array.isArray(arr) || typeof arr[0] !== 'object') {\r\n throw new Error('First argument should be an array of objects');\r\n }\r\n\r\n return [\r\n ...new Map(\r\n arr.map(item => {\r\n return [ item[prop], item ];\r\n })\r\n ).values()\r\n ];\r\n}\r\n","import getFocusable from './get-focusable';\r\nimport isFunction from './is-function';\r\nimport keyCodes from './key-codes';\r\n\r\nconst EVENT_KEY = '_focusTrap_';\r\nconst EVENT_KEYDOWN = `keydown.${EVENT_KEY}`;\r\nconst EVENT_FOCUS = `focus.${EVENT_KEY}`;\r\nconst EVENT_BLUR = `blur.${EVENT_KEY}`;\r\n\r\n/** \r\n * @callback OnBreakout\r\n * @param {FocusTrap} focusTrap origin FocusTrap instance\r\n * @param {Object<string, any>} event details about event that triggered the breakout\r\n * \r\n * @typedef {Object} FocusTrapElementOptions // will be added to FocusTrapOptions\r\n * @property {jQuery|Node|null} initialFocusElement\r\n * @property {jQuery|Node|null} originElement \r\n * \r\n * @typedef {Object} FocusTrapOptions\r\n * @property {boolean} allowBreakout allow tab to break the focus trap on first and last items\r\n * @property {boolean} initialFocus whether or not to focus on an item within trap when created\r\n * @property {jQuery|Node|null} initialFocusElement element to recieve focus once the trap is created - needs to be among focusable elements\r\n * @property {number} initialFocusIndex index of focuseable element that recieves focus once the trap is created\r\n * @property {jQuery|Node|null} originElement element that created the focus trap - by default focus will return to this element when trap is destroyed\r\n * @property {boolean} preventFocusOrigin prevent the trap from focusing on origin element when destroyed\r\n * @property {Array<number>} firstKeys array of key codes that jump focus to first element\r\n * @property {Array<number>} lastKeys array of key codes that jump focus to last element\r\n * @property {Array<number>} nextKeys array of key codes that jump focus to next element\r\n * @property {Array<number>} nextShiftKeys array of key codes that jump focus to previous element\r\n * @property {Array<number>} prevKeys array of key codes that jump focus to previous element\r\n * @property {Array<number>} prevShiftKeys array of shift + key codes that jump focus to previous element\r\n * @property {OnBreakout} onBreakout // callback function when user breaks out of focus trap\r\n */\r\n\r\n/**\r\n * this will be converted to jquery objects so we're storing default values in this object for a later reference\r\n * - is merged into DEFAULT_OPTIONS\r\n * - values are converted in constructor\r\n * @type {FocusTrapElementOptions}\r\n */\r\nconst DEFAULT_ELEMENT_OPTIONS = {\r\n originElement: null,\r\n initialFocusElement: null\r\n};\r\n\r\n/** @type {FocusTrapOptions} */\r\nconst DEFAULT_OPTIONS = {\r\n allowBreakout: false,\r\n initialFocus: true,\r\n initialFocusIndex: 0,\r\n preventFocusOrigin: false,\r\n firstKeys: [ keyCodes.HOME ],\r\n lastKeys: [ keyCodes.END ],\r\n nextKeys: [ keyCodes.TAB ],\r\n nextShiftKeys: [],\r\n prevKeys: [],\r\n prevShiftKeys: [ keyCodes.TAB ],\r\n onBreakout: null,\r\n\r\n ...DEFAULT_ELEMENT_OPTIONS\r\n};\r\n\r\nexport default class FocusTrap {\r\n /** @private */\r\n #activeIndex = 0;\r\n\r\n /**\r\n * \r\n * @constructor\r\n * @param {$} $el root element of focus trap\r\n * @param {FocusTrapOptions} options focus trap options\r\n */\r\n constructor($el, options) {\r\n this.$el = $el;\r\n this.$focusable = getFocusable(this.$el);\r\n\r\n if(!this.$focusable.length) {\r\n return;\r\n }\r\n\r\n options = {\r\n ...DEFAULT_OPTIONS,\r\n ...{\r\n ...options,\r\n originElement: options.originElement || document.activeElement,\r\n nextKeys: [ ...DEFAULT_OPTIONS.nextKeys, ...(options.nextKeys || []) ],\r\n prevShiftKeys: [ ...DEFAULT_OPTIONS.prevShiftKeys, ...(options.prevShiftKeys || []) ]\r\n }\r\n } || DEFAULT_OPTIONS;\r\n\r\n // convert all element options into jQuery objects for consistency\r\n Object.keys(DEFAULT_ELEMENT_OPTIONS).forEach(key => {\r\n const el = options[key];\r\n if(el && !(el instanceof jQuery) && el.nodeType && el.nodeType === Node.ELEMENT_NODE) {\r\n options[key] = $(el);\r\n }\r\n });\r\n\r\n Object.assign(this, options);\r\n\r\n /**\r\n * array of all key codes that enforce focus trap\r\n * @type {Array<number>}\r\n */\r\n this.trapKeys = [\r\n ...this.firstKeys,\r\n ...this.lastKeys,\r\n ...this.nextKeys,\r\n ...this.prevKeys\r\n ];\r\n\r\n /**\r\n * array of all shift + key codes that enforce focus trap\r\n * @type {Array<number>}\r\n */\r\n this.trapShiftKeys = [\r\n ...this.nextShiftKeys,\r\n ...this.prevShiftKeys\r\n ];\r\n\r\n this.setInitialFocus(options);\r\n this.init();\r\n }\r\n\r\n get activeIndex() {\r\n return this.#activeIndex;\r\n }\r\n\r\n set activeIndex(val) {\r\n let newVal = val;\r\n\r\n if(val > this.maxIndex) {\r\n newVal = 0;\r\n } else if(val < 0) {\r\n newVal = this.maxIndex;\r\n }\r\n\r\n this.#activeIndex = newVal;\r\n this.$focusable.get(this.#activeIndex).focus();\r\n }\r\n\r\n get maxIndex() {\r\n return this.$focusable.length - 1;\r\n }\r\n\r\n get $current() {\r\n return this.$focusable.eq(this.#activeIndex);\r\n }\r\n\r\n get $first() {\r\n return this.$focusable.first();\r\n }\r\n\r\n get $last() {\r\n return this.$focusable.last();\r\n }\r\n\r\n get isFirst() {\r\n return this.#activeIndex === 0;\r\n }\r\n\r\n get isLast() {\r\n return this.#activeIndex === this.maxIndex;\r\n }\r\n\r\n /**\r\n * remove all event listeners and return focus to an origin element\r\n * @returns {null} return null value indicating the instance is no longer functional\r\n */\r\n destroy() {\r\n this.$focusable.off(EVENT_KEYDOWN);\r\n this.$focusable.off(EVENT_BLUR);\r\n\r\n if(!this.preventFocusOrigin) {\r\n this.originElement?.eq(0).focus();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n first() {\r\n this.activeIndex = 0;\r\n }\r\n\r\n last() {\r\n this.activeIndex = this.maxIndex;\r\n }\r\n\r\n next() {\r\n this.activeIndex++;\r\n }\r\n\r\n prev() {\r\n this.activeIndex--;\r\n }\r\n\r\n /**\r\n * update activeIndex when a $focusable item is triggered externally\r\n * - update the private #activeIndex property to prevent infinite setter loop\r\n * - e.g. user clicks on an item instead of using keyboard controls\r\n * @param {number} index index of $focusable item triggering this handler\r\n */\r\n onFocus(index) {\r\n if(this.activeIndex !== index) {\r\n this.#activeIndex = index;\r\n }\r\n }\r\n\r\n /**\r\n * handle keyboard controls\r\n * @param {Object<string,any>} event\r\n */\r\n onKeydown(evt) {\r\n const key = evt.which ? evt.which : evt.keyCode;\r\n\r\n const isDefault = evt.ctrlKey || (evt.shiftKey && !this.trapShiftKeys.includes(key)) || (!evt.shiftKey && !this.trapKeys.includes(key));\r\n if(isDefault) return true;\r\n\r\n if(this.allowBreakout) {\r\n if((this.isFirst && evt.shiftKey && key === keyCodes.TAB) || (this.isLast && !evt.shiftKey && key === keyCodes.TAB)) {\r\n this.triggerBreakout(evt);\r\n return true;\r\n }\r\n }\r\n\r\n switch(true) {\r\n case (evt.shiftKey && this.nextShiftKeys.includes(key)) || (!evt.shiftKey && this.nextKeys.includes(key)):\r\n this.next();\r\n break;\r\n case (evt.shiftKey && this.prevShiftKeys.includes(key)) || (!evt.shiftKey && this.prevKeys.includes(key)):\r\n this.prev();\r\n break;\r\n case this.firstKeys.includes(key):\r\n this.first();\r\n break;\r\n case this.lastKeys.includes(key):\r\n this.last();\r\n break;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n init() {\r\n this.setupListeners();\r\n }\r\n\r\n /**\r\n * logic dictating which element recieves focus on initialization\r\n * @param {FocusTrapOptions} options\r\n */\r\n setInitialFocus() {\r\n if(this.initialFocus) {\r\n let index = DEFAULT_OPTIONS.initialFocusIndex;\r\n\r\n if(this.initialFocusElement) {\r\n const matchIndex = this.$focusable.index(this.initialFocusElement);\r\n if(matchIndex > 0) {\r\n index = matchIndex;\r\n }\r\n } else if(this.initialFocusIndex) {\r\n index = this.initialFocusIndex > this.maxIndex ? this.maxIndex : this.initialFocusIndex;\r\n }\r\n\r\n this.activeIndex = index;\r\n }\r\n }\r\n\r\n setupListeners() {\r\n this.$focusable.on(EVENT_KEYDOWN, evt => this.onKeydown(evt));\r\n this.$focusable.each((index) => {\r\n this.$focusable.eq(index).on(EVENT_FOCUS, () => this.onFocus(index));\r\n });\r\n }\r\n\r\n triggerBreakout(evt) {\r\n if(isFunction(this.onBreakout)) {\r\n this.originElement = null; // we want focus to move to next element in DOM while breaking out instead of origin element\r\n const $activeEl = this.$focusable.eq(this.activeIndex);\r\n $activeEl.one(EVENT_BLUR, () => this.onBreakout(evt, this));\r\n }\r\n }\r\n}\r\n","import isFunction from './is-function';\r\n\r\n/**\r\n * use setTimeout to force a function to run asynchoronously\r\n * @param {Function} callback callback function to run async\r\n */\r\nexport default function(callback) {\r\n if(isFunction(callback)) {\r\n setTimeout(callback, 0);\r\n }\r\n};\r\n","export const focusableElementSelectors = [\r\n 'a[href]',\r\n 'area[href]',\r\n 'input:not([disabled])',\r\n 'select:not([disabled])', \r\n 'textarea:not([disabled])', \r\n 'button:not([disabled])', \r\n 'iframe',\r\n 'object', \r\n 'embed', \r\n '*[tabindex]', \r\n '*[contenteditable]'\r\n];\r\n\r\nexport default function($el) {\r\n if(!$el) {\r\n return null;\r\n }\r\n \r\n if($el?.nodeType === Node.ELEMENT_NODE) {\r\n $el = $($el);\r\n }\r\n\r\n const selectorStr = focusableElementSelectors.join(',');\r\n const $focusable = $el.find(selectorStr);\r\n const $visible = $focusable.filter(index => $focusable.eq(index).is(':visible'));\r\n return $visible;\r\n}\r\n","/**\r\n * Detecting experience editor using Sitecore's global javascript namespace\r\n * - https://mattneil.co.uk/2016/12/08/detect-sitecore-page-modes/\r\n * - need typeof for specific circumstances\r\n */\r\nexport default !!(\r\n typeof window.Sitecore !== \"undefined\" && \r\n typeof window.Sitecore.PageModes !== \"undefined\" && \r\n typeof window.Sitecore.PageModes.PageEditor !== \"undefined\"\r\n);\r\n","/**\r\n * return whether or not variable passed is a function\r\n * @param {*} fn variable to test be tested\r\n * @returns {boolean} whether or not variable passed is a function\r\n */\r\nexport default function(fn) {\r\n return (fn && fn.apply && fn.call) && fn;\r\n}\r\n","export default {\r\n BACKSPACE: 8,\r\n TAB: 9,\r\n ENTER: 13,\r\n CTRL: 17,\r\n ESCAPE: 27,\r\n SPACE: 32,\r\n PAGE_UP: 33,\r\n PAGE_DOWN: 34,\r\n END: 35,\r\n HOME: 36,\r\n ARROW_LEFT: 37,\r\n ARROW_UP: 38,\r\n ARROW_RIGHT: 39,\r\n ARROW_DOWN: 40\r\n};\r\n","export const redirectParam = (url) => `r=${url}`;\r\n\r\nexport default function (url) {\r\n if (!url) return;\r\n\r\n const redirect = encodeURIComponent(window.location.href);\r\n window.location.href = `${url}?${redirectParam(redirect)}`;\r\n}\r\n","import sassVars from '@scss/_exports.scss';\r\n\r\nconst screenSmMin = window.matchMedia(`(min-width: ${sassVars.screenSmMin})`);\r\nconst screenSmMax = window.matchMedia(`(max-width: ${sassVars.screenSmMax})`);\r\nconst screenMdMin = window.matchMedia(`(min-width: ${sassVars.screenMdMin})`);\r\nconst screenMdMax = window.matchMedia(`(max-width: ${sassVars.screenMdMax})`);\r\nconst screenLgMin = window.matchMedia(`(min-width: ${sassVars.screenLgMin})`);\r\nconst screenLgMax = window.matchMedia(`(max-width: ${sassVars.screenLgMax})`);\r\nconst screenXlMin = window.matchMedia(`(min-width: ${sassVars.screenXlMin})`);\r\nconst screenXlMax = window.matchMedia(`(max-width: ${sassVars.screenXlMax})`);\r\n\r\nexport {\r\n screenSmMin,\r\n screenSmMax,\r\n screenMdMin,\r\n screenMdMax,\r\n screenLgMin,\r\n screenLgMax,\r\n screenXlMin,\r\n screenXlMax\r\n};\r\n","export default class MetadataUtils {\r\n\r\n\tCreateCanonicalUrlMetaElement() {\r\n\t\tvar canonicalUrlTag = document.createElement('link');\r\n\t\tcanonicalUrlTag.setAttribute('rel', 'canonical');\r\n\t\tdocument.getElementsByTagName('head')[0].appendChild(canonicalUrlTag);\r\n\t\treturn canonicalUrlTag;\r\n\t}\r\n};","export default function(el, dataAttribute = 'contextId') {\r\n if(!el || el.nodeType !== Node.ELEMENT_NODE) { return {}; }\r\n\r\n const contextId = el.dataset[dataAttribute];\r\n const contextEl = document.getElementById(contextId);\r\n return contextEl ? JSON.parse(contextEl.innerHTML) : {};\r\n};\r\n","function format(price, currency = '$') {\r\n if(isNaN(price)) {\r\n return price;\r\n }\r\n\r\n const decimalPrice = (Math.round(price * 100) / 100).toFixed(2);\r\n return currency + decimalPrice;\r\n}\r\n\r\nexport default format;\r\n","import uniqid from 'uniqid';\r\nimport isFn from './is-function';\r\n\r\nconst PROPERTY_COMPUTED = Symbol('Reactive.computed');\r\nconst PROPERTY_FILTER = Symbol('Reactive.filter');\r\nconst PROPERTY_STATE = Symbol('Reactive.state');\r\nconst PROPERTY_WATCH = Symbol('Reactive.watch');\r\n\r\nexport {\r\n PROPERTY_COMPUTED as computed,\r\n PROPERTY_FILTER as filter,\r\n PROPERTY_STATE as state,\r\n PROPERTY_WATCH as watch\r\n}\r\n\r\nconst REACTIVE_PROPERTIES = [\r\n { SYM: PROPERTY_COMPUTED, DEF: 'computed'},\r\n { SYM: PROPERTY_FILTER, DEF: 'filter'},\r\n { SYM: PROPERTY_STATE, DEF: 'state'},\r\n { SYM: PROPERTY_WATCH, DEF: 'watch'}\r\n];\r\n\r\nconst DEFAULT_DEFINITION = {\r\n computed: {},\r\n filter: {},\r\n state: {},\r\n watch: {}\r\n};\r\n\r\nclass ReactiveComponent {\r\n #computedUpdateFn = null;\r\n #deferred = [];\r\n #filters = {};\r\n #state = {};\r\n #watch = {};\r\n\r\n get enumerable() {\r\n return true;\r\n }\r\n\r\n constructor(definition = DEFAULT_DEFINITION) {\r\n definition = { ...DEFAULT_DEFINITION, ...definition };\r\n\r\n REACTIVE_PROPERTIES.forEach(({ SYM, DEF }) => {\r\n const virtualDefinition = this[SYM]();\r\n this[SYM] = {\r\n ...virtualDefinition, // reactive definitions made on class instance\r\n ...definition[DEF] // definitions passed via constructor will take precedence since it's more explicit\r\n };\r\n });\r\n\r\n this.reactive(this[PROPERTY_STATE]);\r\n\r\n this.#defineComputed();\r\n this.#defineFilters();\r\n this.#defineWatchers();\r\n }\r\n \r\n #defineComputedDescriptor(fn, updateFn) {\r\n return {\r\n get: () => {\r\n this.#computedUpdateFn = updateFn;\r\n const value = fn();\r\n this.#computedUpdateFn = null;\r\n return value;\r\n }\r\n };\r\n }\r\n\r\n #defineComputed() {\r\n Object.entries(this[PROPERTY_COMPUTED]).forEach(([ prop, fn ]) => {\r\n if(isFn(fn)) {\r\n fn = fn.bind(this);\r\n\r\n const updateFn = () => {\r\n const value = fn();\r\n this.#triggerWatchers(prop, value);\r\n };\r\n\r\n const descriptor = this.#defineComputedDescriptor(fn, updateFn);\r\n Object.defineProperty(this, prop, descriptor);\r\n\r\n try { this[prop]; }\r\n catch(err) {\r\n this.#deferred = [ ...this.#deferred, prop ];\r\n }\r\n }\r\n });\r\n }\r\n\r\n #defineFilters() {\r\n const filters = { ...this.#filters };\r\n\r\n Object.entries(this[PROPERTY_FILTER]).forEach(([ prop, fn ]) => {\r\n if(isFn(fn)) {\r\n filters[prop] = fn.bind(this);\r\n }\r\n });\r\n\r\n this.#filters = filters;\r\n }\r\n\r\n #defineStateDescriptor(prop) {\r\n const updates = [];\r\n\r\n return {\r\n enumerable: this.enumerable,\r\n get: () => {\r\n if(this.#computedUpdateFn && !updates.includes(this.#computedUpdateFn)) {\r\n updates.push(this.#computedUpdateFn);\r\n }\r\n \r\n return this.#state[prop];\r\n },\r\n set: (newValue) => {\r\n const oldValue = this.#state[prop];\r\n const value = this.#filters[prop] ? this.#filters[prop](newValue, oldValue) : newValue;\r\n\r\n this.#state[prop] = value;\r\n this.#triggerWatchers(prop, value, oldValue);\r\n\r\n updates.forEach(updateFn => updateFn());\r\n }\r\n };\r\n }\r\n\r\n #defineState(prop) {\r\n const descriptor = this.#defineStateDescriptor(prop);\r\n Object.defineProperty(this, prop, descriptor);\r\n }\r\n\r\n #defineWatchers() {\r\n Object.entries(this[PROPERTY_WATCH]).forEach(([ prop, fn ]) => {\r\n if(isFn(fn)) {\r\n this.watch(prop, fn.bind(this));\r\n }\r\n });\r\n }\r\n\r\n #triggerWatchers(prop, newValue, oldValue) {\r\n const watchers = this.#watch[prop] ? Object.values(this.#watch[prop]) : [];\r\n watchers.forEach(fn => fn(newValue, oldValue));\r\n }\r\n\r\n #tryDeferred() {\r\n const deferred = [ this.#deferred ];\r\n\r\n this.#deferred.forEach((prop, index) => {\r\n try { \r\n this[prop];\r\n deferred.slice(index, 1);\r\n }\r\n catch(err) { }\r\n });\r\n\r\n this.#deferred = deferred;\r\n }\r\n\r\n reactive(state) {\r\n this.#state = {\r\n ...this.#state,\r\n ...state\r\n };\r\n\r\n Object.keys(state).forEach(property => {\r\n this.#defineState(property);\r\n });\r\n\r\n this.#tryDeferred();\r\n }\r\n\r\n watch(prop, fn) {\r\n if(!prop || !isFn(fn)) {\r\n return null;\r\n }\r\n\r\n const id = uniqid.time();\r\n\r\n this.#watch = {\r\n ...this.#watch,\r\n [prop]: {\r\n ...this.#watch[prop],\r\n [id]: fn\r\n }\r\n };\r\n\r\n return () => {\r\n const watch = { ...this.#watch };\r\n delete watch[prop][id];\r\n this.#watch = watch;\r\n };\r\n }\r\n}\r\n\r\nREACTIVE_PROPERTIES.forEach(({ SYM }) => {\r\n ReactiveComponent.prototype[SYM] = () => {};\r\n});\r\n\r\nexport default ReactiveComponent;\r\n","/**\r\n * used to throttle expensive animation or scroll based event listeners\r\n * @param {Function} fn callback function to run on next animation\r\n */\r\nexport default\r\n window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n function(fn) {\r\n setTimeout(fn, 1000 / 60);\r\n };\r\n","export default function($element1, $element2) {\r\n $element1 = $element1 instanceof Node ? $($element1) : $element1;\r\n $element2 = $element2 instanceof Node ? $($element2) : $element2;\r\n if(!$element1.length || !$element2.length) {\r\n return $();\r\n }\r\n\r\n return $element1.parents().filter(\r\n $element2.parents()\r\n ).first();\r\n}\r\n","export default [\r\n { text: 'AL', value: 'AL' },\r\n { text: 'AK', value: 'AK' },\r\n { text: 'AR', value: 'AR' },\r\n { text: 'AZ', value: 'AZ' },\r\n { text: 'CA', value: 'CA' },\r\n { text: 'CO', value: 'CO' },\r\n { text: 'CT', value: 'CT' },\r\n { text: 'DC', value: 'DC' },\r\n { text: 'DE', value: 'DE' },\r\n { text: 'FL', value: 'FL' },\r\n { text: 'GA', value: 'GA' },\r\n { text: 'HI', value: 'HI' },\r\n { text: 'IA', value: 'IA' },\r\n { text: 'ID', value: 'ID' },\r\n { text: 'IL', value: 'IL' },\r\n { text: 'IN', value: 'IN' },\r\n { text: 'KS', value: 'KS' },\r\n { text: 'KY', value: 'KY' },\r\n { text: 'LA', value: 'LA' },\r\n { text: 'MA', value: 'MA' },\r\n { text: 'MD', value: 'MD' },\r\n { text: 'ME', value: 'ME' },\r\n { text: 'MI', value: 'MI' },\r\n { text: 'MN', value: 'MN' },\r\n { text: 'MO', value: 'MO' },\r\n { text: 'MS', value: 'MS' },\r\n { text: 'MT', value: 'MT' },\r\n { text: 'NC', value: 'NC' },\r\n { text: 'NE', value: 'NE' },\r\n { text: 'NH', value: 'NH' },\r\n { text: 'NJ', value: 'NJ' },\r\n { text: 'NM', value: 'NM' },\r\n { text: 'NV', value: 'NV' },\r\n { text: 'NY', value: 'NY' },\r\n { text: 'ND', value: 'ND' },\r\n { text: 'OH', value: 'OH' },\r\n { text: 'OK', value: 'OK' },\r\n { text: 'OR', value: 'OR' },\r\n { text: 'PA', value: 'PA' },\r\n { text: 'RI', value: 'RI' },\r\n { text: 'SC', value: 'SC' },\r\n { text: 'SD', value: 'SD' },\r\n { text: 'TN', value: 'TN' },\r\n { text: 'TX', value: 'TX' },\r\n { text: 'UT', value: 'UT' },\r\n { text: 'VT', value: 'VT' },\r\n { text: 'VA', value: 'VA' },\r\n { text: 'WA', value: 'WA' },\r\n { text: 'WI', value: 'WI' },\r\n { text: 'WV', value: 'WV' },\r\n { text: 'WY', value: 'WY' }\r\n];\r\n","\r\nfunction BluefinException(code, message) {\r\n\r\n var self = {\r\n code : code,\r\n message : message\r\n };\r\n\r\n var resp = {\r\n name : \"BluefinException\",\r\n code : self.code,\r\n message : self.message,\r\n toString : function() {\r\n return \"[ name : BluefinException, code : \" + self.code + \", message : \" + self.message + \"]\";\r\n }\r\n }\r\n\r\n return resp;\r\n}\r\n\r\nfunction isJSON(item) {\r\n item = typeof item !== \"string\"\r\n ? JSON.stringify(item)\r\n : item;\r\n\r\n try {\r\n item = JSON.parse(item);\r\n } catch (e) {\r\n return false;\r\n }\r\n\r\n if (typeof item === \"object\" && item !== null) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nvar PaymentiFrame = function(params){\r\n\r\n var self = {\r\n instance_id : undefined,\r\n iframe_selector : \"payment_iframe\",\r\n callbacks : {},\r\n errorBack : {},\r\n successBack : {},\r\n invalidBack : {},\r\n domain : undefined,\r\n iframewindow : undefined,\r\n loadBack : undefined\r\n };\r\n\r\n\r\n //this function takes in\r\n var matchElementStyle = function( matchStyle, fontSize, fontColor, fontFamily ){\r\n\r\n var elem = document.getElementById( matchStyle );\r\n\r\n var res = {\r\n fontSize : fontSize,\r\n fontColor : fontColor,\r\n fontFamily : fontFamily\r\n };\r\n\r\n //if it isn't an id try jquery selector.\r\n if ( null === elem ){\r\n elem = $( matchStyle )[0];\r\n }\r\n\r\n if ( null !== elem && undefined !== elem ){\r\n\r\n var style = window.getComputedStyle( elem );\r\n\r\n var fontSize = style.getPropertyValue('font-size');\r\n var color = style.getPropertyValue('color');\r\n var fontFamily = style.getPropertyValue('font-family');\r\n\r\n if ( undefined === res.fontSize && fontSize ){\r\n var fontSizeNum = fontSize.match(/\\d+/g)[0]\r\n if ( !isNaN(fontSizeNum)){\r\n fontSizeNum = ( fontSizeNum < 9 ) ? 9 : fontSizeNum ;\r\n fontSizeNum = ( fontSizeNum > 34 ) ? 34 : fontSizeNum ;\r\n\r\n res.fontSize = fontSizeNum\r\n }\r\n }\r\n\r\n if ( undefined === res.fontColor && color ){\r\n\r\n if ( /^#[0-9a-fA-F]{3,6}$/.test(color) ){\r\n res.fontColor = color;\r\n }\r\n else if (/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/.test( color )){\r\n function d2h(d) {\r\n var s = (+d).toString(16);\r\n if(s.length < 2) {\r\n s = '0' + s;\r\n }\r\n return s;\r\n }\r\n\r\n function rgb2hex(rgb) {\r\n var rgbMatch = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n return \"#\" + d2h(rgbMatch[1]) + d2h(rgbMatch[2]) + d2h(rgbMatch[3]);\r\n }\r\n\r\n var fontColor = rgb2hex( color );\r\n res.fontColor = fontColor;\r\n }\r\n\r\n }\r\n\r\n if ( undefined === res.fontFamily && fontFamily ){\r\n\r\n //dictionary of font families; index match with config option.\r\n var fams = [\r\n [\"Helvetica Neue\", \"Helvetica\", \"Arial\", \"\"],\r\n [\"Impact\", \"Charcoal\", \"\", \"\"],\r\n [\"Palatino Linotype\", \"Book Antiqua\", \"Palatino\", \"\"],\r\n [\"Tahoma\", \"Geneva\", \"\", \"\"],\r\n [\"Century Gothic\", \"\", \"\", \"\"],\r\n [\"Lucida Sans Unicode\", \"Lucida Grande\", \"\", \"\"],\r\n [\"Arial Black\", \"Gadget\", \"\", \"\"],\r\n [\"Times New Roman\", \"Times\", \"\", \"\"],\r\n [\"Arial Narrow\", \"\", \"\", \"\"],\r\n [\"Verdana\", \"Geneva\", \"\", \"\"],\r\n [\"Copperplate / Copperplate Gothic Light\", \"\", \"\", \"\"],\r\n [\"Lucida Console\", \"Monaco\", \"monospace\", \"\"],\r\n [\"Gill Sans / Gill Sans MT\", \"\", \"\", \"\"],\r\n [\"Trebuchet MS\", \"Helvetica\", \"\", \"\", \"\"],\r\n [\"Courier New\", \"Courier\", \"monospace\", \"\"],\r\n [\"Arial\", \"Helvetica\", \"\", \"\"],\r\n [\"Georgia\", \"Serif\", \"\", \"\"],\r\n [\"Comic Sans MS\", \"cursive\", \"\", \"\"],\r\n [\"sans-serif\", \"\", \"\", \"\"],\r\n [\"serif\", \"\", \"\", \"\"]\r\n ];\r\n\r\n var fontFamilySplit = fontFamily.split(\",\");\r\n\r\n outter:for ( var i = 0; i < fontFamilySplit.length; i++ ){\r\n\r\n var font = fontFamilySplit[i];\r\n\r\n font = font.replace(/[\"']/g, \"\").trim().toLowerCase();\r\n\r\n //col first search\r\n for ( var j = 0; j < 4; j++){\r\n for ( var k = 0; k < fams.length; k++ ){\r\n var entry = fams[k][j].toLowerCase();\r\n\r\n if (font === entry){\r\n res.fontFamily = k + 1;\r\n break outter;\r\n }\r\n }\r\n }\r\n\r\n res.fontFamily = 19;\r\n }\r\n }\r\n }\r\n\r\n return res;\r\n };\r\n\r\n\r\n var lpad = function(num, size) {\r\n num = parseInt( num );\r\n var s = \"000000000000\" + num;\r\n return s.substr( s.length - size);\r\n };\r\n\r\n\r\n var buildSrc = function( settings ){\r\n\r\n var version_path = \"\";\r\n\r\n if ( undefined !== settings.css ||\r\n undefined !== settings.text ||\r\n undefined !== settings.font ||\r\n undefined !== settings.payment_method ){\r\n version_path = \"/styled.php\";\r\n }\r\n\r\n\r\n var src = \"https://secure.payconex.net/iframe\"+version_path+\"?aid=\";\r\n\r\n if ( settings.devServer ){\r\n src = settings.devServer + \"/iframe\"+version_path+\"?aid=\";\r\n }\r\n\r\n src += lpad( settings.account, 12);\r\n\r\n if ( settings.matchLabelStyle ){\r\n var res = matchElementStyle( settings.matchLabelStyle,\r\n settings.labelFontSize,\r\n settings.labelFontColor,\r\n settings.labelFontFamily );\r\n settings.labelFontSize = res.fontSize;\r\n settings.labelFontColor = res.fontColor;\r\n settings.labelFontFamily = res.fontFamily;\r\n }\r\n\r\n if ( settings.matchInputStyle ){\r\n var res = matchElementStyle( settings.matchInputStyle,\r\n settings.inputFontSize,\r\n settings.inputFontColor,\r\n settings.inputFontFamily );\r\n settings.inputFontSize = res.fontSize;\r\n settings.inputFontColor = res.fontColor;\r\n settings.inputFontFamily = res.fontFamily;\r\n }\r\n\r\n if ( settings.lang ){\r\n src += \"&lang=\" + settings.lang;\r\n }\r\n\r\n if ( settings.cvv ){\r\n src += \"&cvv=\" + settings.cvv;\r\n }\r\n\r\n if ( settings.expy ){\r\n src += \"&expy=\" + settings.expy\r\n }\r\n\r\n if ( settings.layout ){\r\n src += \"&layout=\" + settings.layout;\r\n }\r\n\r\n if ( settings.inputWidth ){\r\n src += \"&input_width=\" + settings.inputWidth;\r\n }\r\n\r\n if ( settings.labelWidth ){\r\n src += \"&label_width=\" + settings.labelWidth;\r\n }\r\n\r\n if ( undefined !== settings.showPlaceholders ){\r\n src += \"&show_placeholders=\" + settings.showPlaceholders;\r\n }\r\n\r\n if ( undefined !== settings.labelFontFamily ){\r\n src += \"&label_font_family=\" + settings.labelFontFamily;\r\n }\r\n\r\n if ( undefined !== settings.labelFontSize ){\r\n src += \"&label_font_size=\" + settings.labelFontSize;\r\n }\r\n\r\n if ( undefined !== settings.labelFontColor ){\r\n src += \"&label_font_color=\" + encodeURIComponent(settings.labelFontColor);\r\n }\r\n\r\n if ( undefined !== settings.inputFontFamily ){\r\n src += \"&input_font_family=\" + settings.inputFontFamily;\r\n }\r\n\r\n if ( undefined !== settings.inputFontSize ){\r\n src += \"&input_font_size=\" + settings.inputFontSize;\r\n }\r\n\r\n if ( undefined !== settings.inputFontColor ){\r\n src += \"&input_font_color=\" + encodeURIComponent(settings.inputFontColor);\r\n }\r\n\r\n if ( undefined !== settings.inputStyle ){\r\n src += \"&input_style=\" + settings.inputStyle;\r\n }\r\n\r\n if ( undefined !== settings.timeout ){\r\n src += \"&timeout=\" + settings.timeout;\r\n }\r\n\r\n if ( settings.numberLabel ){\r\n src += \"&number_label=\" + encodeURIComponent(settings.numberLabel);\r\n }\r\n\r\n if ( settings.expyLabel ){\r\n src += \"&expy_label=\" + encodeURIComponent(settings.expyLabel);\r\n }\r\n\r\n if ( settings.cvvLabel ){\r\n src += \"&cvv_label=\" + encodeURIComponent(settings.cvvLabel);\r\n }\r\n\r\n if ( settings.masked ){\r\n if ( settings.masked.formData && settings.masked.eToken ){\r\n self.masked = settings.masked;\r\n }\r\n else{\r\n throw new BluefinException(103, \"Invalid masked data object.\");\r\n }\r\n }\r\n\r\n if ( undefined !== settings.css && 0 !== ( '' + settings.css).length ){\r\n src += \"&css=\" + encodeURIComponent(btoa(JSON.stringify(settings.css)));\r\n }\r\n\r\n if ( undefined !== settings.text && 0 !== ( '' + settings.text).length ){\r\n src += \"&text=\" + encodeURIComponent(btoa(JSON.stringify(settings.text)));\r\n }\r\n\r\n if ( undefined !== settings.font && 0 !== ( '' + settings.font).length ){\r\n src += \"&font=\" + encodeURIComponent(btoa(JSON.stringify(settings.font)));\r\n }\r\n\r\n if ( undefined !== settings.payment_method ){\r\n src += \"&payment_method=\" + settings.payment_method;\r\n }\r\n\r\n if ( settings.onload ){\r\n self.loadBack = settings.onload\r\n }\r\n\r\n return src;\r\n };\r\n\r\n\r\n var guid = function() {\r\n function s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' +\r\n s4() + '-' + s4() + s4() + s4();\r\n };\r\n\r\n self.guid = guid;\r\n\r\n var load = function(){\r\n\r\n var iframe = document.getElementById(self.iframe_selector);\r\n\r\n if ( undefined === iframe || null === iframe ){\r\n throw new BluefinException(100, \"iframe not found, ID: \" + self.iframe_selector);\r\n }\r\n\r\n\r\n if ( iframe.nodeName !== \"IFRAME\" ){\r\n throw new BluefinException(101, \"HTML element is not an iframe, ID: \" + self.iframe_selector);\r\n }\r\n\r\n\r\n var src = iframe.getAttribute(\"src\");\r\n\r\n self.iframewindow = iframe.contentWindow? iframe.contentWindow : iframe.contentDocument.defaultView;\r\n\r\n var tmpAnchor = document.createElement('a');\r\n tmpAnchor.href = src;\r\n var protocol = tmpAnchor.protocol;\r\n var hostname = tmpAnchor.hostname;\r\n\r\n self.domain = protocol + \"//\" + hostname;\r\n\r\n\r\n if ( -1 === self.domain.indexOf(\"payconex.net\") && -1 === self.domain.indexOf(\"cardconex.local\") ){\r\n throw new BluefinException(102, \"Invalid iframe src: \" + self.domain);\r\n }\r\n\r\n if (window.addEventListener) {\r\n addEventListener(\"message\", listener, false)\r\n } else {\r\n attachEvent(\"onmessage\", listener)\r\n }\r\n\r\n self.instance_id = guid();\r\n\r\n iFrameLoaded = true;\r\n };\r\n\r\n var iFrameLoaded = false; // a flag to prevent the iFrame from being loaded multiple times\r\n\r\n var readyAction = function(){\r\n //if the iFrame is to be created dynamically we create that first\r\n if ( params.create && undefined !== params.settings ){\r\n var parentElement = document.getElementById(params.settings.parentId);\r\n if ( undefined !== parentElement && null !== parentElement ) {\r\n //Convert to camelCase if using the wrong setting names\r\n convertToCamelCase();\r\n\r\n //output tag to page\r\n var iframeTag = document.createElement('iframe');\r\n iframeTag.setAttribute(\"id\", self.iframe_selector);\r\n iframeTag.setAttribute(\"width\", params.settings.width);\r\n iframeTag.setAttribute(\"height\", params.settings.height);\r\n iframeTag.setAttribute(\"style\", params.settings.style);\r\n iframeTag.setAttribute(\"frameBorder\", ((params.settings.showFrame) ? \"1\" : \"0\" ));\r\n iframeTag.setAttribute(\"src\", buildSrc(params.settings));\r\n\r\n parentElement.innerHTML = parentElement.innerHTML + iframeTag.outerHTML;\r\n\r\n } else {\r\n throw new BluefinException(104, \"Invalid parentId, no such element: \" + params.settings.parentId);\r\n }\r\n }\r\n\r\n load();\r\n };\r\n\r\n // the completedAction method is attached to the \"DOMContentLoaded\" event\r\n var completedAction = function() {\r\n if (iFrameLoaded) return true; // the iFrame is already loaded so we don't want to load it again\r\n document.removeEventListener( \"DOMContentLoaded\", completedAction );\r\n window.removeEventListener( \"load\", completedAction );\r\n readyAction();\r\n }\r\n\r\n // converts the setting names to their camelCase equivalent\r\n var convertToCamelCase = function() {\r\n var attributesToConvert = ['number_label', 'expy_label', 'cvv_label', 'input_width', 'label_width', 'show_placeholders', 'input_style', 'label_font_size', 'label_font_family', 'label_font_color', 'input_font_size', 'input_font_family', 'input_font_color'];\r\n for (var i = 0, len = attributesToConvert.length; i < len; i++) {\r\n if ( undefined !== params.settings[attributesToConvert[i]] ) {\r\n var attributeSplitted = attributesToConvert[i].split('_');\r\n var attributeNew = attributeSplitted.shift();\r\n attributeSplitted.forEach(function (e) { attributeNew += e[0].toUpperCase() + e.slice(1)});\r\n params.settings[attributeNew] = params.settings[attributesToConvert[i]];\r\n delete params.settings[attributesToConvert[i]];\r\n }\r\n }\r\n };\r\n\r\n\r\n\r\n if ( undefined !== params ){\r\n\r\n if ( undefined !== params.iframeId ){\r\n self.iframe_selector = params.iframeId\r\n }\r\n\r\n try {\r\n readyAction();\r\n } catch (error) {\r\n console.log(error);\r\n // the iFrame will fail to load if the dom element isn't yet loaded, we will try again once the rest of the page is loaded\r\n // the following is inspired from the jQuery $.ready() method but without using jquery\r\n // Mozilla, Opera and WebKit\r\n if (document.addEventListener) {\r\n document.addEventListener(\"DOMContentLoaded\", completedAction, false);\r\n // If Internet Explorer, the event model is used\r\n } else if (document.attachEvent) {\r\n document.attachEvent(\"onreadystatechange\", function() {\r\n if (document.readyState === \"complete\" ) {\r\n completedAction();\r\n }\r\n });\r\n // A fallback to window.onload, that will always work\r\n } else {\r\n var oldOnload = window.onload;\r\n window.onload = function () {\r\n oldOnload && oldOnload();\r\n completedAction();\r\n }\r\n }\r\n }\r\n }\r\n\r\n function listener(event) {\r\n\r\n if ( -1 === self.domain.indexOf(event.origin) ){\r\n return;\r\n }\r\n\r\n var data = isJSON(event.data) ? JSON.parse(event.data) : event.data;\r\n\r\n if ( data.command === \"payment_iframe_loaded\" ){\r\n if ( self.masked && self.masked.formData && self.masked.eToken ){\r\n\r\n var guid = self.guid();\r\n\r\n var message = JSON.stringify({\r\n message_id : guid,\r\n instance_id : self.instance_id,\r\n command : \"set_masked\",\r\n masked_data : self.masked.formData,\r\n eToken : self.masked.eToken\r\n });\r\n\r\n self.iframewindow.postMessage( message, self.domain );\r\n }\r\n if ( self.loadBack ){\r\n self.loadBack();\r\n }\r\n }\r\n\r\n if ( self.instance_id !== data.instance_id ){\r\n return;\r\n }\r\n\r\n if ( undefined !== self.callbacks[data.message_id] ){\r\n\r\n var errorBack = self.callbacks[data.message_id].errorBack;\r\n var successBack = self.callbacks[data.message_id].successBack;\r\n var invalidBack = self.callbacks[data.message_id].invalidBack;\r\n\r\n\r\n if (data.command === \"encrypt_resp\"){\r\n if (data.success && undefined !== successBack){\r\n //successBack({ id: data.message_id, eToken: data.eToken, masked: data.masked_data, ddds_dstransid: dstransid, ddds_authenticationvalue: authenticationvalue });\r\n successBack({ id: data.message_id, eToken: data.eToken, masked: data.masked_data, ddds_result: data.ddds_result });\r\n }\r\n else if ( !data.success ){\r\n if ( undefined !== data.invalidInputs && undefined !== invalidBack ){\r\n invalidBack({ id: data.message_id, invalidInputs : data.invalidInputs });\r\n }\r\n else if ( undefined !== errorBack ){\r\n errorBack({ id: data.message_id, message : data.message });\r\n }\r\n }\r\n }\r\n else{\r\n //Error can be returned by any command (encrypt, clear and setMasked)\r\n if ( !data.success && undefined !== errorBack ){\r\n errorBack({ id: data.message_id, message : data.message });\r\n }\r\n if (data.success && undefined !== successBack){\r\n successBack({ id: data.message_id });\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n var responseHandler = function(guid, includeInvalid){\r\n var obj = {\r\n success : function(fun){\r\n\r\n if (undefined !== guid){\r\n if (undefined === self.callbacks[guid]){\r\n self.callbacks[guid] = {};\r\n }\r\n self.callbacks[guid][\"successBack\"] = fun;\r\n }\r\n\r\n return this;\r\n },\r\n failure : function(fun){\r\n\r\n if (undefined !== guid){\r\n if (undefined === self.callbacks[guid]){\r\n self.callbacks[guid] = {};\r\n }\r\n self.callbacks[guid][\"errorBack\"] = fun;\r\n }\r\n\r\n return this;\r\n },\r\n id : guid\r\n };\r\n\r\n\r\n if ( undefined !== includeInvalid && true === includeInvalid ){\r\n obj[\"invalid\"] = function(fun){\r\n\r\n if (undefined !== guid){\r\n if (undefined === self.callbacks[guid]){\r\n self.callbacks[guid] = {};\r\n }\r\n self.callbacks[guid][\"invalidBack\"] = fun;\r\n }\r\n\r\n return this;\r\n }\r\n }\r\n\r\n return obj;\r\n };\r\n\r\n\r\n return {\r\n clear : function(settings){\r\n\r\n var guid = self.guid();\r\n\r\n if (settings) {\r\n self.callbacks[guid] = {\r\n errorBack : settings.failure,\r\n successBack: settings.success\r\n }\r\n }\r\n\r\n var message = JSON.stringify({\r\n message_id : guid,\r\n instance_id : self.instance_id,\r\n command : \"clear_input\"\r\n });\r\n\r\n self.iframewindow.postMessage(message, self.domain);\r\n\r\n return responseHandler(guid);\r\n },\r\n setMasked : function(maskedData, eToken, settings){\r\n\r\n var guid = self.guid();\r\n\r\n if (settings) {\r\n self.callbacks[guid] = {\r\n errorBack : settings.failure,\r\n successBack: settings.success\r\n }\r\n }\r\n\r\n var message = JSON.stringify({\r\n message_id : guid,\r\n instance_id : self.instance_id,\r\n command : \"set_masked\",\r\n masked_data : maskedData,\r\n eToken : eToken\r\n });\r\n\r\n self.iframewindow.postMessage(message, self.domain);\r\n\r\n return responseHandler(guid);\r\n },\r\n encrypt : function(settings){\r\n\r\n var guid = self.guid();\r\n\r\n let dddsParms = '';\r\n if (settings.ddds_params != null || settings.ddds_params != '') {\r\n dddsParms = settings.ddds_params\r\n }\r\n\r\n if (settings) {\r\n self.callbacks[guid] = {\r\n errorBack : settings.failure,\r\n successBack: settings.success,\r\n invalidBack: settings.invalidInput\r\n }\r\n }\r\n\r\n var message = JSON.stringify({\r\n message_id : guid,\r\n instance_id : self.instance_id,\r\n command: \"encrypt\",\r\n ddds_params: dddsParms\r\n });\r\n\r\n self.iframewindow.postMessage(message, self.domain);\r\n\r\n var respHandle = responseHandler(guid, true);\r\n\r\n respHandle[\"invalidInput\"] = function(fun){\r\n\r\n if (undefined !== guid){\r\n if (undefined === self.callbacks[guid]){\r\n self.callbacks[guid] = {};\r\n }\r\n self.callbacks[guid][\"invalidBack\"] = fun;\r\n }\r\n\r\n return this;\r\n };\r\n\r\n return respHandle;\r\n }\r\n };\r\n};\r\n\r\nexport default PaymentiFrame;\r\n","(function( $ ) {\r\n $.fn.slickFilterable = function( options ) {\r\n\r\n /**\r\n * A plugin to create a slick we can filter.\r\n *\r\n * If you are not using Rows you can use slickFilter\r\n * (check documentation) otherwise we can provide a valid filter.\r\n *\r\n * options {\r\n * slideSelector string jQuery selector to get slides. Imetiate children by default.\r\n * filterName string We will search for data-{filterName} clickable elements.\r\n * slick object The slick settings. Check Slick doc.\r\n * beforeFilter function A fuction called before filter slider. Receives the trigger element\r\n * as this and 3 params: category (string), slider and slides (jQuery objects).\r\n * filter mix A valid parameter to jQuery filter() function. If it's a functio we will wrap\r\n * it and it receives the trigger element as this and 3 params: category (string),\r\n * slider (jQuery object) and a copy of settings (extended).\r\n * }\r\n */\r\n var settings = $.extend({\r\n slideSelector: '> *',\r\n filterName: 'filter-slick',\r\n slick: {},\r\n beforeFilter: function() {},\r\n filter: function( element, category, slider, settings ) { return true; },\r\n }, options );\r\n\r\n return this.each(function() {\r\n var slider = $(this),\r\n slides = slider.find( settings.slideSelector ),\r\n slickObj;\r\n\r\n /**\r\n * Create Slick\r\n *\r\n * TIP: you should you 'slidesPerRow' instead 'slidesToShow' in grid mode (with rows)\r\n * to avoid slick break layout when there are less slides than on \"page\".\r\n */\r\n slickObj = slider.slick( settings.slick );\r\n\r\n // Handle Filter Click\r\n $('[data-' + settings.filterName + ']').on('click', function(event) {\r\n event.preventDefault();\r\n\r\n var category = $(this).data(settings.filterName),\r\n newSlides = $.extend(true, {}, slides),\r\n newSlickOptions;\r\n\r\n if ( ! category ) return;\r\n\r\n // Before Filter Slides\r\n if ( typeof settings.beforeFilter == 'function' ) {\r\n settings.beforeFilter.call(this, category, slider, slides);\r\n }\r\n\r\n // Destroy and empty\r\n slider.slick('unslick');\r\n\r\n // Recreate All Slides\r\n if ( category === 'all' ) {\r\n slider.find( settings.slideSelector ).remove();\r\n slider.append( newSlides );\r\n slider.slick( settings.slick );\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Filter Slides\r\n *\r\n * If settings.filter is a function we pass the category, slider and a copy of settings\r\n * expecting a true or false return to pass it to jQuery.filter();\r\n *\r\n * If not, we just pass it directly.\r\n */\r\n if ( typeof settings.filter !== 'function' ) {\r\n newSlides = newSlides.filter( settings.filter );\r\n } else {\r\n newSlides = newSlides.filter( function() {\r\n return settings.filter.call( this, category, slider, $.extend( true, {}, settings ) );\r\n } );\r\n }\r\n\r\n slider.find( settings.slideSelector ).remove();\r\n slider.append( newSlides );\r\n slider.slick( settings.slick );\r\n });\r\n });\r\n };\r\n}(jQuery));","// extracted by mini-css-extract-plugin\nmodule.exports = {\"screenSmMin\":\"576px\",\"screenSmMax\":\"575px\",\"screenMdMin\":\"768px\",\"screenMdMax\":\"767px\",\"screenLgMin\":\"992px\",\"screenLgMax\":\"991px\",\"screenXlMin\":\"1280px\",\"screenXlMax\":\"1279px\"};"],"sourceRoot":""}