{"version":3,"sources":["site/purchase-flow/purchase-flow.module.js","site/purchase-flow/plan-summary/modals/membership-agreements/membership-agreements.controller.js","site/purchase-flow/applicant-info/modal/state-verification-modal/state-verification-modal-controller.js","site/purchase-flow/applicant-info/modal/sign-in/sign-in.controller.js","site/purchase-flow/applicant-info/modal/primary-information/primary-information.controller.js","site/purchase-flow/restart-puchase/modals/restart-puchase.modal.controller.js","site/purchase-flow/choose-plan/Filters/choose-plan-filter.js","site/purchase-flow/applicant-info/wa-state-modal/wa-state-modal-controller.js","site/purchase-flow/activate-plan/modals/terms-of-use.modal.controller.js","site/purchase-flow/activate-plan/modals/privacy-policy.modal.controller.js","app.module.js","site/landing-flow/welcome/contact-us/contact-us-form.controller.js","site/purchase-flow/plan-summary/plan-summary.directive.js","site/purchase-flow/payment-info/payment-info.controller.js","site/purchase-flow/invite-to-plan/invite-to-plan.controller.js","site/purchase-flow/invite-to-plan/invite-to-plan-response.controller.js","site/purchase-flow/choose-plan/plan-selection.directive.js","site/purchase-flow/choose-plan/choose-plan.controller.js","site/purchase-flow/applicant-info/applicant-info.controller.js","site/purchase-flow/activated/activated.controller.js","site/landing-flow/landing-flow.module.js","site/landing-flow/welcome/welcome.controller.js","site/landing-flow/location/location-modal.controller.js","site/terms-of-service/terms-of-service.module.js","site/terms-of-service/terms-of-service.routes.js","site/terms-of-service/terms-of-service.controller.js","site/support/support.module.js","site/support/support.service.js","site/support/support.routes.js","site/support/support.controller.js","site/summary-of-discounts/summary-of-discounts.module.js","site/summary-of-discounts/summary-of-discounts.routes.js","site/summary-of-discounts/summary-of-discounts.controller.js","site/sitemap/sitemap.module.js","site/sitemap/sitemap.routes.js","site/sitemap/sitemap.controller.js","site/purchase-flow/purchase-flow.service.js","site/purchase-flow/purchase-flow.routes.js","site/purchase-flow/purchase-flow.controller.js","site/purchase-flow/purchase-flow-sgdpp.module.js","site/purchase-flow/purchase-flow-sgdpp.routes.js","site/purchase-flow/purchase-flow-sgdpp.controller.js","site/privacy-policy/privacy-policy.module.js","site/privacy-policy/privacy-policy.routes.js","site/privacy-policy/privacy-policy.controller.js","site/landing-flow/landing-flow.routes.js","site/grievance/grievance.module.js","site/grievance/success.controller.js","templates.js","site/grievance/grievance.service.js","site/grievance/grievance.routes.js","site/grievance/grievance.controller.js","site/directory/directory.module.js","site/directory/directory.routes.js","site/directory/directory.controller.js","site/benefit-info/benefit-info.module.js","site/benefit-info/benefit-info.routes.js","site/benefit-info/benefit-info.controller.js","site/activation-flow/activation.module.js","site/activation-flow/activation.service.js","site/activation-flow/activation.routes.js","site/activation-flow/activate-user.controller.js","layout/footer/footer.controller.js","layout/contact-us/contact-us-form.controller.js","core/validation/app.validate-email-uniqueness.js","core/validation/app.validate-date.js","core/validation/app.validate-credit-card-type.js","core/validation/app.validate-credit-card-expiration.js","core/validation/app.validate-birthdate.js","core/validation/aoo.validate-future-date.js","core/mobile/openKeyBoardOnFocus.directive.js","core/mobile/blurOnSubmit.directive.js","core/mobile/blurOnScroll.directive.js","core/formatters/currency.formatter.js","core/filters/trustAsHtml.filter.js","core/filters/timer.filter.js","core/filters/phone.filter.js","core/filters/nfcurrency.filter.js","core/filters/highlight.filter.js","core/common/scrollIf.directive.js","core/common/pds-include.directive.js","core/common/keypressEvents.directive.js","core/common/bind-html-compile.directive.js","offline/offline.module.js","offline/offline.routes.js","layout/main.controller.js","layout/layout.module.js","errors/errors.module.js","errors/under-construction.controller.js","core/payment.service.js","core/insight.module.js","core/core.util.js","core/core.ui.js","core/core.payments.js","core/app.constants.js","auth/auth.module.js","auth/auth.interception.js","app.routes.js","app.modals.js","sgdp.js","app.controller.js","app.configuration.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzIA;AACA;AACA;AACA;AACA;AACA;AACA;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACv4CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxBA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxNA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;uEClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3IA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3iBA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACXA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClBA;AACA;AACA;AACA;AACA;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9NA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3mBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"main-1.4.1.js","sourcesContent":["(function (angular) {\r\n angular.module('app.purchase', [\r\n 'ui.keypress',\r\n 'vcRecaptcha'\r\n ]);\r\n\r\n}(angular));","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.purchase')\r\n .controller('app.purchase.membershipAgreementsController', [\r\n '$scope',\r\n '$http',\r\n '$sce',\r\n '$uibModalInstance',\r\n '$rootScope',\r\n 'app.purchase.purchaseFlowService',\r\n membershipAgreementsController\r\n ]);\r\n\r\n function membershipAgreementsController($scope, $http, $sce,$uibModalInstance, $rootScope, purchaseFlowService) {\r\n var vm = this;\r\n vm.siteContent = siteContent;\r\n vm.done = done;\r\n vm.dismiss = dismiss;\r\n vm.agreementChange = agreementChange;\r\n vm.signInOptionClick = signInOptionClick;\r\n vm.authenticateOTP = authenticateOTP;\r\n vm.userInfo = purchaseFlowService.getUserInfo();\r\n vm.signInOption = \"password\";\r\n vm.memberPortalSignIn = environment.memberPortalUrl;\r\n vm.rememberLogin = true;\r\n vm.code = ''; \r\n\r\n vm.membershipAgreement = false;\r\n vm.userState = '';\r\n vm.blobStorageUrl = environment.blobStorageTopUrl;\r\n vm.urlSafe = 'https://wellfitqa.blob.core.windows.net/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\r\n vm.memberAgreementUrl = environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf';\r\n \r\n onInit();\r\n\r\n function onInit() { \r\n vm.userState = $rootScope.personState;\r\n if (vm.userState == 'CA') {\r\n vm.memberAgreementUrl = vm.blobStorageUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_California_2024.pdf';\r\n } else if (vm.userState == 'WA') {\r\n vm.memberAgreementUrl = vm.blobStorageUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Washington.pdf'; \r\n } else {\r\n vm.memberAgreementUrl = environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf';\r\n }\r\n \r\n vm.urlSafe = $sce.trustAsResourceUrl(vm.memberAgreementUrl);\r\n }\r\n //Close the modal\r\n function done() {\r\n $uibModalInstance.close(true);\r\n }\r\n\r\n function agreementChange() { \r\n if (vm.membershipAgreement == true) {\r\n $uibModalInstance.close(true);\r\n }\r\n }\r\n\r\n function dismiss() {\r\n $uibModalInstance.close(false);\r\n }\r\n\r\n function signInOptionClick() {\r\n if(vm.signInOption === 'otp') {\r\n purchaseFlowService\r\n .generateOTP(vm.userInfo.emailAddress)\r\n .then(function (){\r\n })\r\n .finally(function () {\r\n //ui.unblock();\r\n });\r\n }\r\n }\r\n\r\n function authenticateOTP() {\r\n var result = null;\r\n if(vm.signInOption === 'otp') {\r\n purchaseFlowService\r\n .authenticateOTP({userName: vm.userInfo.emailAddress, oneTimePassword: vm.code, rememberLogin: vm.rememberLogin}, vm)\r\n .then(function (results){\r\n result = results;\r\n })\r\n .finally(function () {\r\n //ui.unblock();\r\n vm.dismiss();\r\n if (vm.userInfo.emailAddress != null && vm.userInfo.emailAddress != '') {\r\n window.location = vm.memberPortalSignIn + '&otp_token=' + results.otpToken;\r\n }\r\n });\r\n } else if(vm.signInOption === 'password') {\r\n purchaseFlowService\r\n .signIn({email: vm.userInfo.emailAddress, password: vm.code, rememberLogin: vm.rememberLogin}, vm)\r\n .then(function (){\r\n })\r\n .finally(function () {\r\n //ui.unblock();\r\n vm.dismiss();\r\n if (vm.userInfo.emailAddress != null && vm.userInfo.emailAddress != '') {\r\n window.location = vm.memberPortalSignIn;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.purchase')\r\n .controller('app.purchase.stateVerificationModalController', [\r\n '$uibModalInstance',\r\n stateVerificationModalController\r\n ]);\r\n\r\n function stateVerificationModalController($uibModalInstance) {\r\n var vm = this;\r\n vm.siteContent = siteContent;\r\n vm.done = done;\r\n vm.dismiss = dismiss;\r\n\r\n //Close the modal\r\n function done() {\r\n $uibModalInstance.close(true);\r\n }\r\n\r\n function dismiss() {\r\n $uibModalInstance.close(false);\r\n }\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n angular\r\n .module('app.purchase')\r\n .controller('app.purchase.signInController', [\r\n '$scope',\r\n '$http',\r\n '$uibModalInstance',\r\n 'app.purchase.purchaseFlowService',\r\n '$interval',\r\n signInController\r\n ]);\r\n \r\n function signInController($scope, $http, $uibModalInstance, purchaseFlowService, $interval) {\r\n var vm = this;\r\n vm.siteContent = siteContent;\r\n vm.start = start;\r\n vm.done = done;\r\n vm.dismiss = dismiss;\r\n vm.signInOptionClick = signInOptionClick;\r\n vm.checkIfUserIsActivated = checkIfUserIsActivated;\r\n vm.generateOTP = generateOTP;\r\n vm.authenticateOTP = authenticateOTP;\r\n vm.enableSendButton = enableSendButton;\r\n vm.signInMemberPortal = signInMemberPortal;\r\n vm.otpChanged = otpChanged;\r\n vm.userInfo = purchaseFlowService.getUserInfo();\r\n vm.signInOption = \"\";\r\n vm.memberPortalSignIn = environment.memberPortalUrl;\r\n vm.rememberLogin = true;\r\n vm.showLogin = true;\r\n vm.forgotPassword = false;\r\n vm.emailSent = false;\r\n vm.isAuthenticated = true;\r\n vm.timer = 300; //seconds\r\n vm.isTimerOn = false;\r\n vm.email_otp = '';\r\n vm.sms_otp = '';\r\n vm.disableConfirm = true;\r\n vm.showUserNotActivated = false;\r\n vm.checkIfUserIsActivated();\r\n vm.signInOptionClick();\r\n \r\n function checkIfUserIsActivated() {\r\n if(!vm.userInfo.userName) {\r\n vm.showUserNotActivated = true;\r\n purchaseFlowService.sendActivationEmail({userId: vm.userInfo.id, benefitPlanId: null});\r\n }\r\n }\r\n\r\n function start() { \r\n vm.timer = 300; //seconds\r\n vm.isTimerOn = true;\r\n var promise = $interval(function(){\r\n vm.timer--;\r\n if(vm.timer == 0) {\r\n $interval.cancel(promise);\r\n vm.isTimerOn = false;\r\n }\r\n },1000);\r\n }\r\n\r\n //Close the modal\r\n function done() {\r\n $uibModalInstance.close(true);\r\n }\r\n\r\n function dismiss() {\r\n $uibModalInstance.close(false);\r\n }\r\n\r\n function signInOptionClick() {\r\n vm.email_otp = '';\r\n vm.sms_otp = '';\r\n vm.smsOtpReceived = false;\r\n vm.emailOtpReceived = false;\r\n vm.sendSmsOtpBtnText = \"Send\";\r\n vm.sendEmailOtpBtnText = \"Send\";\r\n vm.isAuthenticated = true;\r\n vm.isTimerOn = false;\r\n }\r\n\r\n function enableSendButton() {\r\n if(vm.smsOtpReceived || vm.emailOtpReceived) {\r\n vm.sendSmsOtpBtnText = \"Resend\";\r\n vm.sendEmailOtpBtnText = \"Resend\";\r\n }\r\n else {\r\n vm.sendSmsOtpBtnText = \"Send\";\r\n vm.sendEmailOtpBtnText = \"Send\";\r\n }\r\n vm.smsOtpReceived = false;\r\n vm.emailOtpReceived = false;\r\n vm.isTimerOn = false;\r\n }\r\n\r\n function generateOTP() { \r\n var sendSms = true;\r\n vm.isAuthenticated = true;\r\n if(vm.signInOption === 'email_otp') {\r\n sendSms = false;\r\n }\r\n purchaseFlowService\r\n .generateOTP({userName: vm.userInfo.emailAddress, sendSms: sendSms})\r\n .then(function (){\r\n vm.start();\r\n if(sendSms){\r\n vm.smsOtpReceived = true;\r\n vm.emailOtpReceived = false;\r\n vm.sendSmsOtpBtnText = \"Resend\";\r\n }\r\n else {\r\n vm.smsOtpReceived = false;\r\n vm.emailOtpReceived = true;\r\n vm.sendEmailOtpBtnText = \"Resend\";\r\n }\r\n })\r\n .finally(function () {\r\n ui.unblock(); \r\n });\r\n }\r\n\r\n function authenticateOTP() {\r\n vm.isAuthenticated = true;\r\n var otp ='';\r\n if(vm.signInOption === 'email_otp') {\r\n otp = vm.email_otp;\r\n } else if(vm.signInOption === 'sms_otp') {\r\n otp = vm.sms_otp;\r\n }\r\n purchaseFlowService\r\n .authenticateOTP({userName: vm.userInfo.emailAddress, oneTimePassword: otp, rememberLogin: vm.rememberLogin})\r\n .then(function (results) {\r\n var userName = purchaseFlowService.getUserName();\r\n if (userName != null && userName != '') {\r\n vm.isAuthenticated = true;\r\n var url = environment.memberPortalUrl.replace('#/home?brand=','?otp_token=' + results.otpToken);\r\n window.location.replace(url);\r\n vm.dismiss();\r\n }\r\n else {\r\n vm.isAuthenticated = false;\r\n vm.enableSendButton();\r\n }\r\n })\r\n .finally(function () {\r\n var userName = purchaseFlowService.getUserName(); \r\n if (userName == null || userName === '') {\r\n vm.isAuthenticated = false;\r\n vm.enableSendButton();\r\n }\r\n });\r\n }\r\n\r\n function signInMemberPortal() {\r\n window.location = vm.memberPortalSignIn;\r\n }\r\n\r\n function otpChanged() {\r\n if(vm.email_otp === \"\" && vm.sms_otp === \"\") {\r\n vm.disableConfirm = true;\r\n }\r\n else {\r\n vm.disableConfirm = false;\r\n }\r\n }\r\n }\r\n\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('app.purchase').controller('app.purchase.PrimaryInformationController', [\r\n '$uibModalInstance',\r\n 'states',\r\n 'applicants',\r\n 'primary',\r\n function ($uibModalInstance, states, applicants, primary) {\r\n var vm = this;\r\n vm.states = states;\r\n vm.modalTitle = '';\r\n vm.hidePassword = true;\r\n vm.confirmPassword = '';\r\n vm.hideConfirmPassword = true;\r\n vm.applicants = applicants;\r\n vm.primary = primary;\r\n vm.hasPrimary =\r\n vm.primary &&\r\n vm.primary !== null &&\r\n vm.primary.birthDate &&\r\n vm.primary.birthDate !== null &&\r\n vm.primary.birthDate !== '';\r\n vm.noMatch = noMatch;\r\n vm.continueToPayment = continueToPayment;\r\n vm.selectPrimary = selectPrimary;\r\n vm.setPrimary = setPrimary;\r\n vm.back = back;\r\n vm.cancel = cancel;\r\n\r\n if (vm.hasPrimary) {\r\n vm.modalTitle = 'Plan Holder Information';\r\n } else {\r\n vm.modalTitle = 'Select Plan Holder';\r\n vm.primary = vm.applicants[0];\r\n }\r\n\r\n vm.togglePassword = function () {\r\n vm.hidePassword = !vm.hidePassword;\r\n };\r\n\r\n vm.toggleConfirmPassword = function () {\r\n vm.hideConfirmPassword = !vm.hideConfirmPassword;\r\n };\r\n\r\n function noMatch() {\r\n return !(vm.primary.password === vm.confirmPassword);\r\n }\r\n\r\n function selectPrimary(user) {\r\n vm.primary = user;\r\n }\r\n\r\n function setPrimary() {\r\n vm.hasPrimary =\r\n vm.primary &&\r\n vm.primary !== null &&\r\n vm.primary.birthDate &&\r\n vm.primary.birthDate !== null &&\r\n vm.primary.birthDate !== '';\r\n vm.modalTitle = 'Plan Holder Information';\r\n }\r\n\r\n function continueToPayment() {\r\n $uibModalInstance.close(vm.primary);\r\n }\r\n\r\n function back() {\r\n vm.modalTitle = 'Select Plan Holder';\r\n vm.hasPrimary = false;\r\n }\r\n\r\n function cancel() {\r\n $uibModalInstance.close();\r\n }\r\n }\r\n ]);\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.purchase')\r\n .controller('app.purchase.restartPurchaseModalController', [\r\n '$scope',\r\n '$state',\r\n '$sessionStorage',\r\n restartPurchaseModalController\r\n ]);\r\n\r\n function restartPurchaseModalController($scope, $state, session) {\r\n var vm = this;\r\n vm.restart = restart;\r\n vm.maxPurchaseTime = \"30\";\r\n try {\r\n if (environment.maxPurchaseTime && parseInt(environment.maxPurchaseTime) > 0) {\r\n vm.maxPurchaseTime = environment.maxPurchaseTime;\r\n }\r\n }\r\n catch (error) {}\r\n\r\n function restart() {\r\n delete session.session;\r\n $state.go('app.purchase.plans');\r\n }\r\n }\r\n\r\n})(angular);\r\n","(function (angular) {\r\n\r\n angular.module('app.purchase').filter('choosePlanHeader', function () {\r\n return function (coverageLevelName) {\r\n switch (coverageLevelName) {\r\n case 'Individual':\r\n return 'Individual';\r\n case 'Two Individuals':\r\n return '2 Individuals';\r\n case 'Family' :\r\n return '3+ Individuals';\r\n case '1 Person' :\r\n return 'Individual';\r\n case '2+ People' :\r\n return 'FAMILY (TWO +)';\r\n }\r\n };\r\n });\r\n\r\n})(angular);","(function(angular) {\r\n\r\n 'use strict';\r\n\r\n angular.module('app.purchase')\r\n .controller('app.purchase.waStateModalController', ['$uibModalInstance', waStateModalController]);\r\n\r\n function waStateModalController($uibModalInstance) {\r\n var vm = this;\r\n vm.siteContent = siteContent;\r\n vm.done = done;\r\n \r\n //Close the modal \r\n function done() {\r\n $uibModalInstance.close();\r\n }\r\n }\r\n})(angular);","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.purchase')\r\n .controller('app.purchase.termsOfUseModalController', [\r\n '$scope',\r\n '$http',\r\n termsOfUseModalController\r\n ]);\r\n\r\n function termsOfUseModalController($scope, $http) {\r\n $scope.tosHtml = '';\r\n var apiUrl = environment.treatmentApiDirectUrl + 'files/public-documents/terms-of-use.html';\r\n\r\n $http.get(apiUrl)\r\n .then(function (response) {\r\n $scope.tosHtml = response.data;\r\n });\r\n }\r\n\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.purchase')\r\n .controller('app.purchase.privacyPolicyModalController', [\r\n '$scope',\r\n '$http',\r\n privacyPolicyModalController\r\n ]);\r\n\r\n function privacyPolicyModalController($scope, $http) {\r\n $scope.privacyPolicyHtml = '';\r\n var apiUrl = environment.treatmentApiDirectUrl + 'files/public-documents/privacy-policy.html';\r\n $http.get(apiUrl)\r\n .then(function(response) {\r\n $scope.privacyPolicyHtml = response.data;\r\n });\r\n }\r\n\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n var modules = [\r\n // third party\r\n 'ngStorage',\r\n 'ngAnimate',\r\n 'ui.bootstrap-slider',\r\n 'ngFileUpload',\r\n 'ngImgCrop',\r\n 'ui.mask',\r\n 'ngCookies',\r\n\r\n // custom\r\n 'app.layout',\r\n 'app.errors'\r\n ];\r\n\r\n if (environment.offline) {\r\n modules = modules.concat(['app.offline']);\r\n } else {\r\n modules = modules.concat([\r\n 'app.auth',\r\n 'app.landing',\r\n 'app.purchase',\r\n 'app.activation',\r\n 'app.insight',\r\n 'app.support',\r\n 'app.privacy-policy',\r\n 'app.benefit-info',\r\n 'app.tos',\r\n 'app.sitemap',\r\n 'app.grievance',\r\n 'app.sod',\r\n 'app.directory',\r\n 'app.sgdpppurchase',\r\n ]);\r\n }\r\n\r\n angular.module('app', modules);\r\n})(angular);\r\n","(function (angular){\r\n\r\n 'use strict';\r\n\r\n angular.module('app')\r\n .controller('app.contactUsFormController', ['$uibModal', 'util', 'ui', '$http', contactUsFormController]);\r\n\r\n function contactUsFormController($uibModal, util, ui, $http) {\r\n var vm = this;\r\n\r\n // Properties\r\n vm.contactUs = {\r\n name: '',\r\n email: '',\r\n message:''\r\n };\r\n vm.formDefaults = {};\r\n\r\n // Actions\r\n vm.sendEmail = sendEmail;\r\n\r\n onInit();\r\n\r\n function onInit() {\r\n vm.formDefaults = angular.copy(vm.contactUs);\r\n getYear();\r\n }\r\n\r\n function getYear(){\r\n var today = new Date();\r\n vm.currentYear = today.getFullYear();\r\n }\r\n\r\n function sendEmail(contactUsForm) {\r\n \r\n ui.block();\r\n\r\n sendContactUsEmail(vm.contactUs)\r\n .then(function successful(response) {\r\n\r\n $uibModal.open({\r\n templateUrl: '/app/layout/contact-us/modals/email-sent-modal.html',\r\n keyboard: false,\r\n windowTopClass: 'patolus-modal-backdrop'\r\n });\r\n\r\n formReset(contactUsForm);\r\n })\r\n .catch(function rejected(response) {\r\n ui.handleError(response);\r\n })\r\n .finally(function final() {\r\n ui.unblock();\r\n })\r\n }\r\n\r\n function sendContactUsEmail(data) {\r\n\r\n var url = environment.salesApiUrl + 'contact-us/send-email';\r\n\r\n return $http.post(url, data);\r\n }\r\n \r\n function formReset(contactUsForm) {\r\n \r\n // Load form defaults\r\n vm.contactUs = angular.copy(vm.formDefaults);\r\n\r\n // Reset form validation aspects\r\n contactUsForm.$setPristine();\r\n contactUsForm.$setUntouched();\r\n }\r\n }\r\n \r\n}(angular));","(function (angular) {\r\n\r\n angular.module('app.purchase')\r\n .directive('planSummary', planSummaryDirective);\r\n\r\n var planSummaryController = [\r\n '$scope', '$state', 'app.purchase.purchaseFlowService', 'ui','$location', function ($scope, $state, purchaseFlowService, ui,$location) {\r\n var vm = this;\r\n\r\n vm.purchase = $scope.purchase;\r\n vm.selectedPlan = vm.purchase.selectedPlan;\r\n vm.adminFee = vm.purchase.adminFee;\r\n vm.promoCode = vm.purchase.promoCode;\r\n vm.applyPromoCode = applyPromoCode;\r\n vm.promoCodeTextValid = true;\r\n\r\n vm.planName = siteContent.copyright.planName;\r\n vm.siteContent = siteContent;\r\n vm.staticPromoCode = siteContent.site.purchaseFlow.staticPromoCode;\r\n vm.allowPromoCode = siteContent.site.purchaseFlow.allowPromoCode;\r\n\r\n if (vm.staticPromoCode && vm.staticPromoCode !== '' \r\n && (!vm.promoCode || vm.promoCode === null)) {\r\n vm.promoCode = vm.staticPromoCode;\r\n vm.applyPromoCode();\r\n }\r\n\r\n function applyPromoCode() {\r\n ui.block();\r\n purchaseFlowService.applyPromoCode(vm.promoCodeText).then(function (data) {\r\n if (data) {\r\n vm.purchase = data;\r\n }\r\n else {\r\n vm.promoCodeTextValid = false;\r\n }\r\n },\r\n function () {\r\n vm.promoCodeTextValid = false;\r\n }).finally(function () {\r\n ui.unblock();\r\n $scope.$emit('priceChanged', vm.purchase);\r\n });\r\n }\r\n\r\n populatePromoCode();\r\n function populatePromoCode() {\r\n // if a promo code exists in local storage via ad campaign (see app.controller.js)\r\n var promoCode = parseLocalStoragePromoCode();\r\n if (promoCode) {\r\n // populate promo code and apply it\r\n setTimeout(function() {\r\n $('#pCode').val(promoCode).trigger('change');\r\n $('input[name=\"apply\"]').click();\r\n }, 1000);\r\n }\r\n }\r\n\r\n function parseLocalStoragePromoCode() {\r\n // Return promo code from local storage\r\n var object = JSON.parse(localStorage.getItem('promoCode'));\r\n if(object) {\r\n promoCode = object.value;\r\n return promoCode;\r\n }\r\n }\r\n\r\n vm.isOnApplicationPage = function() {\r\n return $location.path() === '/plans/application';\r\n };\r\n }\r\n ];\r\n\r\n function planSummaryDirective() {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n purchase: '='\r\n },\r\n templateUrl: '/app/site/purchase-flow/plan-summary/plan-summary.html',\r\n controller: planSummaryController,\r\n controllerAs: 'vm'\r\n };\r\n };\r\n\r\n}(angular));","(function (angular) {\r\n angular\r\n .module('app.purchase')\r\n .controller('app.purchase.PaymentInfoController', [\r\n 'states',\r\n '$sce',\r\n '$scope',\r\n '$rootScope',\r\n 'purchase',\r\n 'app.purchase.purchaseFlowService',\r\n 'ui',\r\n '$state',\r\n 'paymentTypes',\r\n 'app.paymentService',\r\n '$sessionStorage',\r\n 'vcRecaptchaService',\r\n 'supportService',\r\n '$uibModal',\r\n '$http',\r\n controller\r\n \r\n ]);\r\n\r\n function controller(\r\n states,\r\n $sce,\r\n $scope,\r\n $rootScope,\r\n purchase,\r\n purchaseFlowService,\r\n ui,\r\n $state,\r\n paymentTypesConstant,\r\n paymentService,\r\n $sessionStorage,\r\n vcRecaptchaService,\r\n supportService,\r\n $uibModal,\r\n $http\r\n ) {\r\n var vm = this;\r\n $sessionStorage['payment'] = null;\r\n\r\n vm.purchase = purchase;\r\n vm.siteContent = siteContent;\r\n\r\n vm.next = goToNext;\r\n vm.isBillingAddressSame = true;\r\n vm.billingAddressToggle = billingAddressToggle;\r\n vm.skipEnabled = skipEnabled;\r\n vm.paymentInfoFilled = paymentInfoFilled;\r\n vm.skip = skip;\r\n vm.publicCaptchaKey = environment.publicCaptchaKey;\r\n vm.captchaResponse;\r\n\r\n // Activation\r\n vm.billingAddressInfo = vm.purchase.billingAddress;\r\n vm.activate = activate;\r\n vm.paymentMethodLogo = '';\r\n vm.triggerPrivacyPolicyModal = showPrivacyPolicyModal;\r\n vm.OpenMembershipAgreementModal = OpenMembershipAgreementModal;\r\n vm.membershipAgreementChange = membershipAgreementChange;\r\n vm.showTermsOfUseModal = showTermsOfUseModal;\r\n vm.pdfFiles = { eula: '', servAndDis: '' };\r\n vm.treatmentApiUrl = environment.treatmentApiDirectUrl;\r\n vm.person = purchase.primaryApplicant;\r\n vm.hasPaymentMethod = vm.purchase.paymentAccount != null;\r\n vm.membershipAgreement = false;\r\n vm.communicationAgreement = true;\r\n vm.userState = '';\r\n vm.blobStorageUrl = environment.blobStorageTopUrl;\r\n vm.urlSafe = 'https://wellfitqa.blob.core.windows.net/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\r\n vm.memberAgreementUrl = environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2024.pdf';\r\n vm.cardNumberMasked = '0000';\r\n vm.state = '';\r\n vm.states = supportService.getStates();\r\n\r\n if ($rootScope.supportedStates.length <= 1) {\r\n // If plan has only one supported state or the purchased state is not supported, return the name of the default state\r\n vm.state = vm.states.filter(function (s) {\r\n return $rootScope.supportedStates.indexOf(s.abbr) >= 0;\r\n })[0].value;\r\n } else if ($rootScope.supportedStates.indexOf(vm.purchase.primaryApplicant.state) < 0) {\r\n vm.state = 'None';\r\n } else {\r\n // If purchased state is supported, return the name of the purchased state\r\n vm.state = vm.states.filter(function (s) {\r\n return vm.purchase.primaryApplicant.state.indexOf(s.abbr) >= 0;\r\n })[0].value;\r\n }\r\n\r\n // Auto Renewal\r\n // Determines if the plan offers auto renewal.\r\n vm.isAutoRenew = false;\r\n // Determines if the auto renewal is required to be clicked to continue.\r\n vm.isAutoRenewRequired = false;\r\n // Auto Renewal text.\r\n vm.autoRenewalText = null;\r\n // Determines if the current plan will be using auto renewal or not.\r\n vm.isPlanAutoRenew = false;\r\n // The auto renewal promo code description text\r\n vm.autoRenewalPromoCodeText = null;\r\n //is Medi-cal Insurance confirmed\r\n vm.isMedicalConfirmed = false;\r\n vm.isMedicalRequired = false;\r\n vm.showAutoRenewalDisclaimer = false;\r\n vm.showCardNumber = false;\r\n vm.showCvv = false;\r\n \r\n onInit();\r\n\r\n $scope.$on('priceChanged', function (event, purchase) { \r\n vm.purchase.total = purchase.total;\r\n });\r\n \r\n $scope.showCardNumber = function(){\r\n vm.showCardNumber = !vm.showCardNumber;\r\n }\r\n\r\n $scope.showHideCvv = function(){\r\n vm.showCvv = !vm.showCvv;\r\n }\r\n\r\n function maskCard(input){\r\n if(typeof input !== undefined){\r\n var nums = input.toString().replace(/[^\\d]/gi,\"\");\r\n var r = nums.match(/(\\d){4}/g);\r\n for(var i=0;i 0) {\r\n noPayment = false;\r\n var lastFourDigits;\r\n var isAutoRenew = vm.purchase.autoRenewalDetail.autoRenewalRequired;\r\n\r\n if (cardInfo != null) {\r\n lastFourDigits = vm.creditCardInfo.cardNumber.substring(\r\n vm.creditCardInfo.cardNumber.length - 4\r\n );\r\n if (vm.paymentInfo && vm.paymentInfo.card) {\r\n isAutoRenew = vm.paymentInfo.card.isAutoRenew;\r\n }\r\n } else if (checkInfo != null) {\r\n lastFourDigits = vm.checkingAccountInfo;\r\n }\r\n\r\n complete(cardInfo, checkInfo, lastFourDigits, isAutoRenew);\r\n }\r\n\r\n if (noPayment) {\r\n complete(null, null, null, false);\r\n }\r\n } catch (e) {\r\n ui.unblock();\r\n console.error(e);\r\n }\r\n }\r\n\r\n function complete(cardInfo, checkInfo, accountNumber, isAutoRenew) { \r\n purchaseFlowService\r\n .completePurchase(cardInfo, checkInfo, accountNumber, isAutoRenew, !vm.communicationAgreement, vm.isMedicalConfirmed,vm.captchaResponse)\r\n .then(function (response) { \r\n $sessionStorage['payment'] = null;\r\n ui.unblock();\r\n $state.go('app.purchase.activated', { promoCode: vm.purchase.promoCode });\r\n appendDigitalData(response.transactionId, vm.purchase.promoCode);\r\n })\r\n .catch(function rejected(response) {\r\n ui.unblock();\r\n ui.handleError(response);\r\n });\r\n }\r\n\r\n /*\r\n The following data is pushed to the json object \r\n located in the head of on the index.html page to\r\n be used as a data layer for tracking purposes\r\n */\r\n function appendDigitalData(transactionId, promoCode) {\r\n var newData = [\r\n {\r\n 'page': {\r\n 'pageInfo': {\r\n 'pageID': '/plans/activated'\r\n }\r\n },\r\n 'transaction': {\r\n 'id': transactionId\r\n },\r\n 'attributes': {\r\n 'promoCode': promoCode\r\n }\r\n }\r\n ];\r\n digitalData = Object.assign({}, newData);\r\n }\r\n\r\n function restartPurchase() {\r\n $uibModal.open({\r\n templateUrl: '/app/site/purchase-flow/restart-puchase/modals/restart-puchase.modal.html',\r\n keyboard: false,\r\n windowTopClass: 'patolus-modal-backdrop',\r\n controller: 'app.purchase.restartPurchaseModalController',\r\n controllerAs: 'vm'\r\n });\r\n }\r\n\r\n function save() {\r\n if (vm.purchase && vm.purchase.started && vm.purchase.started != null && vm.purchase.started != '') {\r\n var maxPurchaseTime = 30;\r\n try {\r\n if (environment.maxPurchaseTime && parseInt(environment.maxPurchaseTime) > 0) {\r\n maxPurchaseTime = parseInt(environment.maxPurchaseTime);\r\n }\r\n }\r\n catch (error) {}\r\n\r\n var startedDate = new Date(vm.purchase.started);\r\n var diff = new Date().getTime() - startedDate.getTime(); \r\n var minutes = (diff / 60000);\r\n if (minutes > maxPurchaseTime) {\r\n restartPurchase();\r\n return;\r\n }\r\n }\r\n\r\n\r\n /* Reflect the proper billing address:\r\n * If same then replicate what's on user profile\r\n * If not the same then no further action is needed; the respective billing info object had been updated already\r\n **/\r\n if (vm.isBillingAddressSame) {\r\n vm.billingAddressInfo.address = vm.person.address;\r\n vm.billingAddressInfo.city = vm.person.city;\r\n vm.billingAddressInfo.state = vm.person.state;\r\n vm.billingAddressInfo.zipCode = vm.person.zipCode;\r\n }\r\n\r\n var paymentInfoUpdate = {\r\n paymentType: vm.paymentType,\r\n isBillingAddressSame: vm.isBillingAddressSame,\r\n billingAddressInfo: vm.billingAddressInfo,\r\n creditCardInfo: null,\r\n checkingAccountInfo: null\r\n };\r\n\r\n if (creditCardFormFilled()) {\r\n ui.block();\r\n return paymentService\r\n .tokenizePaymentMethod(vm.creditCardInfo.cardNumber, vm.creditCardInfo.securityCode)\r\n .then(function (result) {\r\n if (vm.isPlanAutoRenew) {\r\n vm.creditCardInfo.isAutoRenew = vm.isAutoRenew;\r\n }\r\n $sessionStorage['payment'] = { card: vm.creditCardInfo, check: null };\r\n\r\n var cardInfo = {\r\n name: vm.creditCardInfo.firstName + ' ' + vm.creditCardInfo.lastName,\r\n paymentType: result.type,\r\n expirationDate: vm.creditCardInfo.expirationDate,\r\n payPageRegistrationId: result.paypageRegistrationId,\r\n lastFour: result.lastFour,\r\n zipCode: vm.billingAddressInfo.zipCode\r\n };\r\n\r\n cardInfo.address = vm.billingAddressInfo.address;\r\n cardInfo.city = vm.billingAddressInfo.city;\r\n cardInfo.state = vm.billingAddressInfo.state;\r\n cardInfo.zipCode = vm.billingAddressInfo.zipCode;\r\n cardInfo.token = vm.captchaResponse;\r\n\r\n activate(cardInfo, null);\r\n })\r\n .finally(function rejected(response) {\r\n vcRecaptchaService.reload();\r\n });\r\n } else if (checkingAccountFormFilled()) {\r\n paymentInfoUpdate.checkingAccountInfo = vm.checkingAccountInfo;\r\n ui.block();\r\n $sessionStorage['payment'] = { card: null, check: vm.checkingAccount };\r\n activate(null, paymentInfoUpdate.checkingAccountInfo);\r\n }\r\n }\r\n\r\n function skip() {\r\n if (this.skipEnabled()) {\r\n ui.block();\r\n purchaseFlowService\r\n .removePaymentAccount()\r\n .then(function () {\r\n // $state.go('app.purchase.activation');\r\n activate();\r\n })\r\n .catch(function rejected(response) {\r\n ui.handleError(response);\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n }\r\n\r\n function goToNext() {\r\n $http.get(environment.statusUrl + 'online/status/' + environment.portalId).then(function (response) {\r\n if(response.status == 200) {\r\n save();\r\n }\r\n });\r\n \r\n }\r\n\r\n function onInit() {\r\n // Constants\r\n vm.paymentTypes = paymentTypesConstant;\r\n vm.states = states;\r\n\r\n // Lookup existing data available\r\n vm.person = vm.purchase.responsibleParty;\r\n if (!vm.person || vm.person === null) {\r\n vm.person = vm.purchase.primaryApplicant;\r\n }\r\n \r\n vm.userState = vm.person.state;\r\n if (vm.userState == 'CA') {\r\n vm.memberAgreementUrl = vm.blobStorageUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_California_2024.pdf';\r\n } else if (vm.userState == 'WA') {\r\n vm.memberAgreementUrl = vm.blobStorageUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Washington.pdf'; \r\n }\r\n vm.urlSafe = $sce.trustAsResourceUrl(vm.memberAgreementUrl);\r\n //set required medi cal insurance for CA \r\n if(vm.userState == 'CA')\r\n { \r\n purchaseFlowService.getFeatureFlags()\r\n .then(function (flags) {\r\n if (flags[Features.ShowMedicalAcknowledge] === true) {\r\n vm.isMedicalRequired = true;\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error('Error loading feature flags:', error);\r\n });\r\n\r\n }\r\n\r\n purchaseFlowService.getFeatureFlags()\r\n .then(function (flags) {\r\n if (flags[Features.ShowAutoRenewalDisclaimer] === true && vm.userState != 'WA') {\r\n vm.showAutoRenewalDisclaimer = true;\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error('Error loading feature flags:', error);\r\n }); \r\n \r\n // Set Auto Renewal Defaults \r\n if (vm.purchase.autoRenewalDetail) {\r\n if (vm.purchase.autoRenewalDetail.autoRenewalOffered) {\r\n vm.isPlanAutoRenew = true;\r\n } else {\r\n vm.isPlanAutoRenew = false;\r\n }\r\n if (vm.purchase.autoRenewalDetail.autoRenewalRequired) {\r\n vm.isAutoRenewRequired = true;\r\n } else {\r\n vm.isAutoRenewRequired = false; \r\n }\r\n vm.autoRenewalText = vm.purchase.autoRenewalDetail.autoRenewalText;\r\n vm.autoRenewalPromoCodeText = vm.purchase.autoRenewalDetail.autoRenewalPromoCodeText;\r\n }\r\n\r\n vm.paymentInfo = vm.purchase.paymentInfo;\r\n\r\n // Set defaults\r\n if (vm.paymentInfo) {\r\n vm.paymentType = vm.paymentInfo.paymentType;\r\n vm.isBillingAddressSame = vm.paymentInfo.isBillingAddressSame;\r\n vm.creditCardInfo = vm.paymentInfo.creditCardInfo;\r\n vm.checkingAccountInfo = vm.paymentInfo.checkingAccountInfo;\r\n vm.billingAddressInfo = vm.paymentInfo.billingAddressInfo;\r\n } else {\r\n vm.paymentType = vm.paymentTypes.creditCard;\r\n\r\n vm.creditCardInfo = {\r\n 'cardNumber': '',\r\n 'expirationDate': '',\r\n 'securityCode': '',\r\n 'firstName': vm.person.firstName,\r\n 'lastName': vm.person.lastName\r\n };\r\n\r\n vm.checkingAccountInfo = {\r\n 'routingNumber': '',\r\n 'accountNumber': '',\r\n 'firstName': vm.person.firstName,\r\n 'lastName': vm.person.lastName\r\n };\r\n\r\n vm.billingAddressInfo = {\r\n 'address': '',\r\n 'city': '',\r\n 'state': '',\r\n 'zip': ''\r\n };\r\n }\r\n }\r\n\r\n function skipEnabled() {\r\n return vm.purchase.total === 0;\r\n }\r\n\r\n function creditCardFormFilled() {\r\n var creditCard = vm.creditCardInfo;\r\n \r\n // Using == intentionally to check null & undefined\r\n if (creditCard == null) {\r\n return false;\r\n }\r\n var cardNumber = creditCard.cardNumber != null && creditCard.cardNumber.length > 0;\r\n var expiration = creditCard.expirationDate != null && creditCard.expirationDate.length > 0;\r\n var firstName = creditCard.firstName != null && creditCard.firstName.length > 0;\r\n var lastName = creditCard.lastName != null && creditCard.lastName.length > 0;\r\n var securityCode = creditCard.securityCode != null && creditCard.securityCode.length > 0;\r\n return cardNumber && expiration && firstName && lastName && securityCode;\r\n }\r\n\r\n function checkingAccountFormFilled() {\r\n var checkingAccount = vm.checkingAccountInfo;\r\n\r\n if (checkingAccount == null) {\r\n return false;\r\n }\r\n\r\n var routingNumber = checkingAccount.routingNumber != null && checkingAccount.routingNumber.length > 0;\r\n var accountNumber = checkingAccount.accountNumber != null && checkingAccount.accountNumber.length > 0;\r\n var firstName = checkingAccount.firstName != null && checkingAccount.firstName.length > 0;\r\n var lastName = checkingAccount.lastName != null && checkingAccount.lastName.length > 0;\r\n\r\n return routingNumber && accountNumber && firstName && lastName;\r\n }\r\n\r\n function paymentInfoFilled() {\r\n return creditCardFormFilled() || checkingAccountFormFilled();\r\n }\r\n\r\n \r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('app.purchase').controller('app.purchase.InviteToPlanController', [\r\n 'app.purchase.purchaseFlowService',\r\n '$uibModalInstance',\r\n 'ui',\r\n function (purchaseFlowService, $uibModalInstance, ui) {\r\n var vm = this;\r\n vm.sendInvite = sendInvite;\r\n vm.publicCaptchaKey = environment.publicCaptchaKey;\r\n\r\n function sendInvite() {\r\n ui.block();\r\n purchaseFlowService\r\n .sendInvitation(vm.phoneNumber, vm.captchaResponse)\r\n .then(\r\n function success() {\r\n ui.unblock();\r\n $uibModalInstance.close(true);\r\n },\r\n function failure() {\r\n ui.unblock();\r\n $uibModalInstance.close(false);\r\n }\r\n )\r\n .catch(function failure(result) {\r\n console.error(result);\r\n ui.unblock();\r\n });\r\n }\r\n }\r\n ]);\r\n})(angular);\r\n","(function (angular) {\r\n\r\n 'use strict';\r\n\r\n angular.module('app.purchase')\r\n .controller('app.purchase.InviteToPlanResponseController',\r\n [\r\n '$uibModalInstance',\r\n '$timeout',\r\n function ($uibModalInstance, $timeout){\r\n $timeout(function timerComplete() {\r\n $uibModalInstance.dismiss();\r\n }, 2000);\r\n }\r\n ]);\r\n})(angular);","(function (angular) {\r\n\r\n angular.module('app.purchase')\r\n .directive('planSelection', planSelectionDirective);\r\n\r\n function planSelectionDirective() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: '/app/site/purchase-flow/choose-plan/plan-selection.html'\r\n };\r\n };\r\n\r\n}(angular));\r\n","(function (angular) {\r\n angular\r\n .module('app.purchase')\r\n .controller('app.purchase.ChoosePlanController', [\r\n '$scope',\r\n '$state',\r\n 'app.purchase.purchaseFlowService',\r\n '$uibModal',\r\n 'ui',\r\n controller\r\n ]);\r\n function controller($scope, $state, service, $uibModal, ui) {\r\n var vm = this;\r\n\r\n vm.siteContent = siteContent;\r\n vm.plans = siteContent.planOptions;\r\n vm.selectPlan = selectPlan;\r\n\r\n function selectPlan(selection) {\r\n ui.block();\r\n service\r\n .setPlanSelection(selection, vm.siteContent.theme)\r\n .then(function () {\r\n if ($state.current.name.indexOf('app.sgdpppurchase') == 0) {\r\n $state.go('app.sgdpppurchase.applicants');\r\n }\r\n else { \r\n $state.go('app.purchase.applicants');\r\n }\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n angular\r\n .module('app.purchase')\r\n .controller('app.purchase.ApplicantInfoController', [\r\n '$scope',\r\n '$state',\r\n 'states',\r\n 'relationships',\r\n 'purchase',\r\n 'app.purchase.purchaseFlowService',\r\n 'ui',\r\n '$uibModal',\r\n '$rootScope',\r\n controller\r\n ]);\r\n\r\n function controller(\r\n $scope,\r\n $state,\r\n states,\r\n associationRelationship,\r\n purchase,\r\n purchaseFlowService,\r\n ui,\r\n $uibModal,\r\n $rootScope\r\n ) {\r\n var vm = this;\r\n\r\n vm.siteContent = siteContent;\r\n vm.purchase = purchase;\r\n vm.plan = purchase.plan;\r\n vm.primaryApplicant = purchase.primaryApplicant;\r\n vm.existingAssociateMembers = purchase.associatedApplicants || [];\r\n vm.currentState = $rootScope.currentState;\r\n\r\n vm.states = states;\r\n vm.associationRelationship = associationRelationship;\r\n vm.showToolTip = false;\r\n vm.responsiblePartyConfirmPassword = '';\r\n vm.primaryConfirmPassword = '';\r\n vm.calculateAge = calculateAge;\r\n vm.isMinor = isMinor;\r\n vm.updateSalesTax = updateSalesTax;\r\n vm.allMemberMinors = allMemberMinors;\r\n vm.finishInformation = finishInformation;\r\n vm.collectResponsiblePartyInfo = false;\r\n vm.collectPrimaryInformation = false;\r\n vm.passwordPattern = '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*]).{8,}$';\r\n vm.hidePassword = true;\r\n vm.hideConfirmPassword = true;\r\n vm.userInfo = {};\r\n $scope.emailSpinner = false;\r\n\r\n var primarApp = null;\r\n if (vm.primaryApplicant) {\r\n primarApp = JSON.parse(JSON.stringify(vm.primaryApplicant));\r\n }\r\n\r\n vm.primaryApplicant = {\r\n firstName: '',\r\n lastName: '',\r\n birthDate: '',\r\n addressline1: '',\r\n addressLine2: '',\r\n city: '',\r\n state: '',\r\n zipCode: '',\r\n employerName: '',\r\n emailAddress: '',\r\n phoneNumber: '',\r\n password: ''\r\n };\r\n\r\n if (!vm.associatedApplicants) {\r\n vm.associatedApplicants = [];\r\n if (primarApp === null) {\r\n vm.associatedApplicants.push(newMember(true));\r\n } else {\r\n if (primarApp.birthDate) {\r\n primarApp.birthDate = getFormattedDate(new Date(primarApp.birthDate));\r\n }\r\n\r\n vm.associatedApplicants.push(primarApp);\r\n }\r\n\r\n if (vm.purchase.minNumberMembers > 1) {\r\n for (let index = 0; index < vm.existingAssociateMembers.length; index++) {\r\n if (vm.existingAssociateMembers[index] && vm.existingAssociateMembers[index].birthDate) {\r\n vm.existingAssociateMembers[index].birthDate = getFormattedDate(\r\n new Date(vm.existingAssociateMembers[index].birthDate)\r\n );\r\n }\r\n\r\n vm.existingAssociateMembers[index].show = true;\r\n vm.associatedApplicants.push(vm.existingAssociateMembers[index]);\r\n }\r\n\r\n while (vm.associatedApplicants.length < vm.purchase.minNumberMembers) {\r\n vm.associatedApplicants.push(newMember(true));\r\n }\r\n } // do nothing if it's an individual plan\r\n } else if (primarApp !== null) {\r\n vm.associatedApplicants.unshift(primarApp);\r\n }\r\n\r\n vm.responsibleParty = null;\r\n\r\n $scope.$watch(\r\n function (scope) {\r\n return scope.vm.primaryApplicant;\r\n },\r\n function () {\r\n if (!$scope.emailSpinner) {\r\n //purchaseFlowService.updatePrimaryApplicantInfo(vm.primaryApplicant, $scope.applicantForm.emailAddress.$invalid);\r\n }\r\n },\r\n true\r\n );\r\n\r\n $scope.$watch(\r\n function (scope) {\r\n return scope.vm.associatedApplicants;\r\n },\r\n function () {\r\n //purchaseFlowService.updateAssociateMemberInfo(vm.associatedApplicants);\r\n },\r\n true\r\n );\r\n\r\n // functions\r\n vm.addMember = addMember;\r\n vm.removeMember = removeMember;\r\n vm.responsiblePartyNoMatch = responsiblePartyNoMatch;\r\n vm.primaryNoMatch = primaryNoMatch;\r\n vm.continueToPayment = continueToPayment;\r\n vm.selectPrimary = selectPrimary;\r\n vm.goBack = goBack;\r\n vm.triggerPrivacyPolicyModal = showPrivacyPolicyModal;\r\n vm.primaryApplicantSelected = primaryApplicantSelected;\r\n vm.allAssociatedApplicantsAdults = allAssociatedApplicantsAdults;\r\n vm.showTermsOfUseModal = showTermsOfUseModal;\r\n vm.checkState = checkState;\r\n vm.adults = [];\r\n\r\n function goBack() {\r\n vm.collectPrimaryInformation = false;\r\n vm.collectResponsiblePartyInfo = false;\r\n vm.responsibleParty = null;\r\n\r\n var primarApp = null;\r\n if (vm.primaryApplicant) {\r\n primarApp = JSON.parse(JSON.stringify(vm.primaryApplicant));\r\n primarApp.authorized = false;\r\n }\r\n\r\n vm.primaryApplicant = {\r\n firstName: '',\r\n lastName: '',\r\n birthDate: '',\r\n addressline1: '',\r\n addressLine2: '',\r\n city: '',\r\n state: '',\r\n zipCode: '',\r\n employerName: '',\r\n emailAddress: '',\r\n phoneNumber: '',\r\n password: ''\r\n };\r\n }\r\n\r\n vm.togglePassword = function () {\r\n vm.hidePassword = !vm.hidePassword;\r\n };\r\n\r\n vm.toggleConfirmPassword = function () {\r\n vm.hideConfirmPassword = !vm.hideConfirmPassword;\r\n };\r\n\r\n function showPrivacyPolicyModal() {\r\n $uibModal.open({\r\n templateUrl:\r\n vm.siteContent.site.purchaseFlow.activatePlan.privacyPolicyTemplate &&\r\n vm.siteContent.site.purchaseFlow.activatePlan.privacyPolicyTemplate.path\r\n ? vm.siteContent.site.purchaseFlow.activatePlan.privacyPolicyTemplate.path\r\n : '/app/site/purchase-flow/activate-plan/modals/privacy-policy.modal.html',\r\n keyboard: true,\r\n windowTopClass: 'patolus-modal-backdrop',\r\n controller: 'app.purchase.privacyPolicyModalController',\r\n controllerAs: 'vm'\r\n });\r\n }\r\n\r\n function showTermsOfUseModal() {\r\n $uibModal.open({\r\n templateUrl:\r\n vm.siteContent.site.purchaseFlow.activatePlan.touLink &&\r\n vm.siteContent.site.purchaseFlow.activatePlan.touLink.path\r\n ? vm.siteContent.site.purchaseFlow.activatePlan.touLink.path\r\n : '/app/site/purchase-flow/activate-plan/modals/terms-of-use.modal.html',\r\n keyboard: true,\r\n windowTopClass: 'patolus-modal-backdrop',\r\n controller: 'app.purchase.termsOfUseModalController',\r\n controllerAs: 'vm'\r\n });\r\n }\r\n\r\n function showStateVerificationModal() {\r\n $uibModal\r\n .open({\r\n templateUrl:\r\n '/app/site/purchase-flow/applicant-info/modal/state-verification-modal/state-verification-modal.html',\r\n keyboard: true,\r\n windowTopClass: 'patolus-modal-backdrop',\r\n controller: 'app.purchase.stateVerificationModalController',\r\n controllerAs: 'vm'\r\n })\r\n .result.then(function fulfilled(result) {\r\n if (result === true) {\r\n $rootScope.isOpenLocationModal = true;\r\n }\r\n });\r\n }\r\n\r\n function checkState() {\r\n if (!siteContent.isSGDPP && vm.primaryApplicant.state != $rootScope.currentState) {\r\n showStateVerificationModal();\r\n }\r\n }\r\n\r\n function getFormattedDate(date) {\r\n var year = date.getFullYear();\r\n\r\n var month = (1 + date.getMonth()).toString();\r\n month = month.length > 1 ? month : '0' + month;\r\n\r\n var day = date.getDate().toString();\r\n day = day.length > 1 ? day : '0' + day;\r\n\r\n return month + '/' + day + '/' + year;\r\n }\r\n\r\n function selectPrimary(adult) {\r\n if (vm.primaryApplicant.authorized) {\r\n vm.primaryApplicant.authorized = false;\r\n }\r\n\r\n if (vm.primaryApplicant.isResponsibleParty) {\r\n vm.primaryApplicant.isResponsibleParty = false;\r\n }\r\n\r\n vm.primaryApplicant = adult;\r\n\r\n if (!allAssociatedApplicantsAdults()) {\r\n vm.primaryApplicant.isResponsibleParty = true;\r\n }\r\n }\r\n\r\n function scrollToTop() {\r\n if (window.scrollY != 0) {\r\n setTimeout(function () {\r\n window.scrollTo(0, window.scrollY - 30);\r\n }, 5);\r\n }\r\n }\r\n\r\n function allAssociatedApplicantsAdults() {\r\n for (let index = 0; index < vm.associatedApplicants.length; index++) {\r\n var associate = vm.associatedApplicants[index];\r\n if (isMinor(associate.birthDate)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function allMemberMinors() {\r\n if (\r\n !vm.associatedApplicants ||\r\n vm.associatedApplicants.length == 0 ||\r\n !vm.associatedApplicants[0].birthDate ||\r\n vm.associatedApplicants[0].birthDate === null ||\r\n vm.associatedApplicants[0].birthDate === ''\r\n ) {\r\n return false;\r\n }\r\n\r\n if (\r\n vm.primaryApplicant &&\r\n vm.primaryApplicant.birthDate &&\r\n vm.primaryApplicant.birthDate !== null &&\r\n vm.primaryApplicant.birthDate !== '' &&\r\n !isMinor(vm.primaryApplicant.birthDate)\r\n ) {\r\n return false;\r\n }\r\n\r\n for (let index = 0; index < vm.associatedApplicants.length; index++) {\r\n var associate = vm.associatedApplicants[index];\r\n if (!isMinor(associate.birthDate)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function isMinor(dob) {\r\n return calculateAge(dob) < 18;\r\n }\r\n\r\n function calculateAge(dob) {\r\n if (!(dob instanceof Date)) {\r\n if (!dob || dob === null || dob === '') {\r\n return 0;\r\n }\r\n\r\n dob = new Date(dob);\r\n }\r\n\r\n var ageDifMs = Date.now() - dob.getTime();\r\n var ageDate = new Date(ageDifMs); // miliseconds from epoch\r\n return Math.abs(ageDate.getUTCFullYear() - 1970);\r\n }\r\n\r\n //Check that both passwords match\r\n function responsiblePartyNoMatch() {\r\n return !(vm.responsibleParty.password === vm.responsiblePartyConfirmPassword);\r\n }\r\n\r\n function primaryNoMatch() {\r\n return !(vm.primaryApplicant.password === vm.primaryConfirmPassword);\r\n }\r\n\r\n function finishInformation() {\r\n if (allMemberMinors()) {\r\n finishInformationFinal();\r\n return;\r\n }\r\n ui.block();\r\n vm.userInfo = purchaseFlowService\r\n .getUser(vm.associatedApplicants[0].emailAddress)\r\n .then(function () {})\r\n .finally(function () {\r\n ui.unblock();\r\n var currentUserInfo = purchaseFlowService.getUserInfo();\r\n if (currentUserInfo == undefined || currentUserInfo == '') {\r\n finishInformationFinal();\r\n } else {\r\n showSignInModal();\r\n return;\r\n }\r\n });\r\n }\r\n\r\n function finishInformationFinal() {\r\n if (allMemberMinors()) {\r\n vm.primaryApplicant = JSON.parse(JSON.stringify(vm.associatedApplicants[0]));\r\n vm.associatedApplicants.splice(0, 1);\r\n\r\n vm.responsibleParty = {\r\n firstName: '',\r\n lastName: '',\r\n birthDate: '',\r\n addressline1: '',\r\n addressLine2: '',\r\n city: '',\r\n state: '',\r\n zipCode: '',\r\n employerName: '',\r\n emailAddress: '',\r\n phoneNumber: '',\r\n password: ''\r\n };\r\n\r\n vm.collectResponsiblePartyInfo = true;\r\n scrollToTop();\r\n } else {\r\n vm.adults = [];\r\n for (let index = 0; index < vm.associatedApplicants.length; index++) {\r\n var member = vm.associatedApplicants[index];\r\n if (!isMinor(member.birthDate)) {\r\n vm.adults.push(member);\r\n }\r\n }\r\n\r\n vm.primaryApplicant = vm.adults[0];\r\n vm.primaryApplicant.isResponsibleParty = true;\r\n vm.collectPrimaryInformation = true;\r\n }\r\n }\r\n\r\n function primaryApplicantSelected() {\r\n var index = vm.associatedApplicants.indexOf(vm.primaryApplicant);\r\n vm.associatedApplicants.splice(index, 1);\r\n\r\n continueToPayment();\r\n }\r\n\r\n function continueToPayment() {\r\n purchaseFlowService.getSalesTax(vm.primaryApplicant.zipCode);\r\n ui.block();\r\n purchaseFlowService\r\n .updatePrimaryApplicantInfo({\r\n primaryApplicant: vm.primaryApplicant,\r\n associatedApplicants: vm.associatedApplicants,\r\n responsibleParty: vm.responsibleParty\r\n })\r\n .then(function () {\r\n if (vm.siteContent.isSGDPP) {\r\n $state.go('app.sgdpppurchase.payment');\r\n } else {\r\n $state.go('app.purchase.payment');\r\n }\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n\r\n function newMember(shouldShow) {\r\n return {\r\n firstName: '',\r\n lastName: '',\r\n birthDate: '',\r\n relationship: '',\r\n emailAddress: '',\r\n phoneNumber: '',\r\n show: shouldShow\r\n };\r\n }\r\n\r\n function addMember() {\r\n var newestMember = newMember(false);\r\n newestMember.show = true;\r\n vm.associatedApplicants.push(newestMember);\r\n }\r\n\r\n function removeMember(index) {\r\n var removedMember = vm.associatedApplicants[index];\r\n removedMember.show = false;\r\n\r\n setTimeout(function () {\r\n vm.associatedApplicants.splice(index, 1);\r\n }, 100);\r\n }\r\n\r\n function showSignInModal() {\r\n $uibModal\r\n .open({\r\n templateUrl: '/app/site/purchase-flow/applicant-info/modal/sign-in/sign-in.html',\r\n keyboard: true,\r\n windowTopClass: 'patolus-modal-backdrop',\r\n controller: 'app.purchase.signInController',\r\n controllerAs: 'vm'\r\n })\r\n .result.then(function fulfilled(result) {\r\n // if (result === true) {\r\n // $rootScope.isOpenLocationModal = true;\r\n // }\r\n });\r\n }\r\n\r\n function updateSalesTax(event) {\r\n console.log(vm.purchase);\r\n if (event.target.value) {\r\n purchaseFlowService.getSalesTax(event.target.value).then(function(response) {\r\n vm.purchase = response.data;\r\n }).catch(function(error) {\r\n console.error('Error fetching sales tax:', error);\r\n });\r\n }\r\n }\r\n\r\n function generateOtp() {}\r\n\r\n function authenticateOtp() {}\r\n\r\n $scope.WAStateModalCheck = function (type) {\r\n if (type == 1) {\r\n if (vm.primaryApplicant.state === 'WA') {\r\n var activeModal = $uibModal.open({\r\n templateUrl: '/app/site/purchase-flow/applicant-info/wa-state-modal/wa-state-modal.html',\r\n controller: 'app.purchase.waStateModalController',\r\n controllerAs: 'vm',\r\n keyboard: true\r\n });\r\n }\r\n } else if (type == 2) {\r\n if (vm.responsibleParty.state === 'WA') {\r\n var activeModal = $uibModal.open({\r\n templateUrl: '/app/site/purchase-flow/applicant-info/wa-state-modal/wa-state-modal.html',\r\n controller: 'app.purchase.waStateModalController',\r\n controllerAs: 'vm',\r\n keyboard: true\r\n });\r\n }\r\n }\r\n };\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n angular\r\n .module('app')\r\n .controller('app.purchase.activatedController', [\r\n 'states',\r\n '$scope',\r\n '$rootScope',\r\n '$http',\r\n 'supportService',\r\n 'app.purchase.purchaseFlowService',\r\n 'purchase',\r\n 'util',\r\n activatedController\r\n ]);\r\n\r\n function activatedController(\r\n states,\r\n $scope,\r\n $rootScope,\r\n $http,\r\n supportService,\r\n purchaseFlowService,\r\n purchase,\r\n util\r\n ) {\r\n var vm = this;\r\n\r\n vm.siteContent = siteContent;\r\n vm.purchase = purchase;\r\n\r\n vm.total =\r\n vm.purchase.grandTotal !== undefined && vm.purchase.grandTotal !== null\r\n ? vm.purchase.grandTotal\r\n : vm.purchase.total;\r\n\r\n vm.paymentMethodLogo = '';\r\n vm.paymentMethodLastDigits = '';\r\n vm.print = print;\r\n vm.memberPortalUrl = window.environment.memberPortalUrl;\r\n vm.hasPaymentMethod = vm.purchase.paymentAccount != null;\r\n vm.goToMemberPortal = goToMemberPortal;\r\n vm.treatmentApiUrl = environment.treatmentApiDirectUrl;\r\n\r\n vm.state = '';\r\n vm.states = supportService.getStates();\r\n vm.membershipAgreementFile = '';\r\n\r\n if ($rootScope.supportedStates.length <= 1) {\r\n // If plan has only one supported state or the purchased state is not supported, return the name of the default state\r\n vm.state = vm.states.filter(function (s) {\r\n return $rootScope.supportedStates.indexOf(s.abbr) >= 0;\r\n })[0].value;\r\n } else if ($rootScope.supportedStates.indexOf(vm.purchase.primaryApplicant.state) < 0) {\r\n vm.state = 'None';\r\n } else {\r\n // Return the state selected as the location.\r\n vm.state = vm.states.filter(function (s) {\r\n return vm.siteContent.currentState.indexOf(s.abbr) >= 0;\r\n })[0].value;\r\n }\r\n\r\n onInit();\r\n\r\n function onInit() {\r\n if (vm.hasPaymentMethod) {\r\n vm.paymentMethodLogo = purchaseFlowService.determineLogo(vm.purchase);\r\n }\r\n getMembershipAgreement();\r\n }\r\n\r\n function getMembershipAgreement() {\r\n vm.membershipAgreementFile =\r\n environment.blobStorageTopUrl +\r\n '/servicesanddisclosures/DOS_DF_' +\r\n $scope.siteContent.planNameShort +\r\n '_Wellfit.pdf';\r\n\r\n if ($scope.siteContent.generalMembershipAgreementFile) {\r\n vm.membershipAgreementFile = \r\n environment.blobStorageTopUrl +\r\n $scope.siteContent.generalMembershipAgreementFile\r\n }\r\n\r\n for (let i = 0; i < $scope.siteContent.careingtonStates.length; i++) {\r\n const careState = $scope.siteContent.careingtonStates[i];\r\n if (careState === vm.state) {\r\n vm.membershipAgreementFile =\r\n environment.blobStorageTopUrl +\r\n '/servicesanddisclosures/DOS_DF_' +\r\n $scope.siteContent.planNameShort +\r\n '_' +\r\n careState +\r\n '.pdf';\r\n }\r\n }\r\n }\r\n\r\n function print() {\r\n var body = document.getElementsByTagName('BODY')[0];\r\n\r\n var frame1 = document.createElement('IFRAME');\r\n frame1.name = 'frame1';\r\n frame1.setAttribute('style', 'position:absolute;top:-1000000px');\r\n body.appendChild(frame1);\r\n\r\n //Create a Frame Document.\r\n var frameDoc = frame1.contentWindow\r\n ? frame1.contentWindow\r\n : frame1.contentDocument.document\r\n ? frame1.contentDocument.document\r\n : frame1.contentDocument;\r\n frameDoc.document.open();\r\n\r\n //Create a new HTML document.\r\n frameDoc.document.write('');\r\n frameDoc.document.write(document.getElementsByTagName('TITLE')[0].outerHTML);\r\n for (var i in document.getElementsByTagName('LINK')) {\r\n frameDoc.document.write(document.getElementsByTagName('LINK')[i].outerHTML);\r\n }\r\n frameDoc.document.write('');\r\n frameDoc.document.getElementsByTagName('body')[0].innerHTML = document.getElementById(\r\n 'activated-info'\r\n ).outerHTML;\r\n frameDoc.document.close();\r\n\r\n window.setTimeout(function () {\r\n window.frames['frame1'].focus();\r\n window.frames['frame1'].print();\r\n body.removeChild(frame1);\r\n }, 500);\r\n }\r\n\r\n function goToMemberPortal() {\r\n window.location.replace(vm.memberPortalUrl + siteContent.theme);\r\n }\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular.\r\n module('app.landing', ['ui.keypress']);\r\n\r\n}(angular));","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('app.landing').controller('app.landing.welcomeController', ['$http', '$scope', welcomeController]);\r\n\r\n function welcomeController($http, $scope) {\r\n $scope.siteContent = siteContent;\r\n\r\n var vm = this;\r\n vm.plans = siteContent.planOptions;\r\n\r\n // Private properties\r\n var memberQuoteClassName = 'member-quote';\r\n var activeClassName = 'active';\r\n var quoteRotationInterval = 12000; // in miliseconds\r\n var memberQuotes = [];\r\n\r\n onInit();\r\n\r\n function onInit() {\r\n memberQuotes = document.getElementsByClassName(memberQuoteClassName);\r\n rotateQuotes();\r\n }\r\n\r\n function rotateQuotes() {\r\n var counter = 0;\r\n var prev = counter - 1;\r\n\r\n // Infinite loop\r\n setInterval(function changeQuoteLoop() {\r\n if (memberQuotes.length === 0) {\r\n return;\r\n }\r\n\r\n // Hide previously shown item\r\n if (prev > -1) {\r\n memberQuotes[prev].classList.remove(activeClassName);\r\n }\r\n\r\n // Show the next item\r\n memberQuotes[counter].classList.add(activeClassName);\r\n\r\n counter = counter + 1;\r\n prev = counter - 1;\r\n\r\n // Reset\r\n if (counter === memberQuotes.length) {\r\n counter = 0;\r\n }\r\n }, quoteRotationInterval);\r\n }\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('app.landing').controller('app.landing.locationModalController', [\r\n '$uibModalInstance',\r\n '$scope',\r\n '$state',\r\n '$location',\r\n 'supportService',\r\n 'app.purchase.purchaseFlowService',\r\n 'ui',\r\n '$timeout',\r\n '$cookies',\r\n '$rootScope',\r\n function (\r\n $uibModalInstance,\r\n $scope,\r\n $state,\r\n $location,\r\n supportService,\r\n purchaseFlowService,\r\n ui,\r\n $timeout,\r\n $cookies,\r\n $rootScope\r\n ) {\r\n var vm = this;\r\n var geocoder;\r\n var planStartDateStatus;\r\n vm.googleStateAbbrev = '';\r\n vm.close = close;\r\n vm.timeMessage = '';\r\n vm.isLocationConfirmPage = true;\r\n vm.isWashingtonModal = false;\r\n vm.isLocationOff = false;\r\n vm.states = supportService.getStates();\r\n vm.selectedState = '';\r\n\r\n vm.confirmState = confirmState;\r\n vm.chooseState = chooseState;\r\n vm.confirmSelectedState = confirmSelectedState;\r\n vm.cancelSelectedState = cancelSelectedState;\r\n vm.resetErrorOnChange = resetErrorOnChange;\r\n vm.backToSelector = backToSelector;\r\n vm.isInvalidState = false;\r\n vm.ccpaModalOpen = $rootScope.ccpaModalOpen;\r\n\r\n vm.acceptCcpaPopUp = acceptCcpaPopUp;\r\n vm.closeModalGetTempCookie = closeModalGetTempCookie;\r\n\r\n initialize();\r\n\r\n function acceptCcpaPopUp() {\r\n //save the cookies\r\n var now = new window.Date(),\r\n // this will set the expiration to 12 months\r\n exp = new window.Date(now.getFullYear(), now.getMonth() + 12, now.getDate());\r\n $cookies.put(environment.ccpaCookieName, true, {\r\n expires: exp\r\n });\r\n\r\n $rootScope.ccpaModalOpen = false;\r\n vm.ccpaModalOpen = $rootScope.ccpaModalOpen;\r\n }\r\n\r\n function closeModalGetTempCookie() {\r\n $cookies.put(environment.ccpaCookieName, true);\r\n $rootScope.ccpaModalOpen = false;\r\n vm.ccpaModalOpen = $rootScope.ccpaModalOpen;\r\n }\r\n\r\n function initialize() {\r\n geocoder = new google.maps.Geocoder();\r\n geolocate();\r\n getTime();\r\n }\r\n\r\n function getTime() {\r\n var today = new Date();\r\n var curHr = today.getHours();\r\n\r\n if (curHr < 12) {\r\n vm.timeMessage = 'Good Morning';\r\n } else if (curHr < 18) {\r\n vm.timeMessage = 'Good Afternoon';\r\n } else {\r\n vm.timeMessage = 'Good Evening';\r\n }\r\n }\r\n\r\n function resetErrorOnChange() {\r\n vm.isInvalidState = false;\r\n }\r\n\r\n function geolocate() {\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(function (position) {\r\n $scope.position = position;\r\n var lat = position.coords.latitude;\r\n var lng = position.coords.longitude;\r\n codeLatLng(lat, lng);\r\n }, getStateError);\r\n } else {\r\n vm.isLocationConfirmPage = false;\r\n vm.isLocationOff = true;\r\n }\r\n }\r\n\r\n function chooseState() {\r\n // change to choose state form.\r\n vm.isLocationConfirmPage = false;\r\n vm.isLocationOff = false;\r\n }\r\n\r\n function getStateError() {\r\n $timeout(function () {\r\n vm.isLocationConfirmPage = false;\r\n vm.isLocationOff = true;\r\n }, 50);\r\n }\r\n\r\n function codeLatLng(lat, lng) {\r\n var latlng = new google.maps.LatLng(lat, lng);\r\n geocoder.geocode({ latLng: latlng }, function (results, status) {\r\n if (status == google.maps.GeocoderStatus.OK) {\r\n if (results[1]) {\r\n var arrAddress = results;\r\n $.each(arrAddress, function (i, address_component) {\r\n if (address_component.types[0] == 'administrative_area_level_1') {\r\n $timeout(function () {\r\n vm.googleState = address_component.address_components[0].long_name;\r\n }, 50);\r\n vm.googleStateAbbrev = address_component.address_components[0].short_name;\r\n }\r\n });\r\n } else {\r\n console.log('No results found');\r\n }\r\n } else {\r\n console.log('Geocoder failed due to: ' + status);\r\n vm.isLocationConfirmPage = false;\r\n vm.isLocationOff = true;\r\n }\r\n });\r\n }\r\n\r\n function isValidState(abbrev) {\r\n var status = false;\r\n if ($rootScope.supportedStates.includes(abbrev)) {\r\n status = true;\r\n } else {\r\n status = false;\r\n }\r\n\r\n return status;\r\n }\r\n\r\n function getStateAbbreviation(fullName) {\r\n var stateAbbrev = vm.states.find(function (e) {\r\n return e.name == fullName;\r\n });\r\n return stateAbbrev.abbr;\r\n }\r\n\r\n function confirmState() {\r\n // use the abbrev state name below\r\n $rootScope.currentState = vm.googleStateAbbrev;\r\n\r\n if ($rootScope.currentState === 'CA') {\r\n getPlanStartDateStatus('Smile Generation Dental Plan CA 2024');\r\n } else {\r\n getPlanStartDateStatus('Smile Generation Dental Plan 2024');\r\n }\r\n\r\n //updateSiteContentByState(vm.googleStateAbbrev, false);\r\n }\r\n\r\n function confirmSelectedState(locationForm) {\r\n var abbrev = getStateAbbreviation(vm.selectedState);\r\n $rootScope.currentState = abbrev;\r\n\r\n if ($rootScope.currentState === 'CA') {\r\n getPlanStartDateStatus('Smile Generation Dental Plan CA 2024');\r\n } else {\r\n getPlanStartDateStatus('Smile Generation Dental Plan 2024');\r\n }\r\n //updateSiteContentByState(abbrev, false);\r\n }\r\n\r\n function cancelSelectedState(locationForm) {\r\n // send selected state.\r\n locationForm.$setUntouched();\r\n vm.isInvalidState = false;\r\n vm.selectedState = '';\r\n }\r\n\r\n function close(value) {\r\n $uibModalInstance.close(value);\r\n }\r\n\r\n function backToSelector() {\r\n vm.isWashingtonModal = false;\r\n vm.isInvalidState = false;\r\n vm.selectedState = '';\r\n }\r\n\r\n function getPlanStartDateStatus(plan) {\r\n purchaseFlowService.getPlanStartDate(plan).then(function (result) {\r\n if (result.planStatus === true) {\r\n planStartDateStatus = true;\r\n } else {\r\n planStartDateStatus = false;\r\n }\r\n updateSiteContentByState($rootScope.currentState, false);\r\n });\r\n }\r\n function updateSiteContentByState(state, isNotClose) {\r\n if (isValidState(state)) {\r\n vm.isInvalidState = false;\r\n } else {\r\n vm.isInvalidState = true;\r\n return;\r\n }\r\n\r\n var stateObj = vm.states.find(function (e) {\r\n return e.abbr === state;\r\n });\r\n\r\n var stateName = stateObj ? stateObj.name : null;\r\n\r\n var exp = new Date();\r\n exp.setFullYear(exp.getFullYear() + 100);\r\n\r\n $cookies.put('stateValue', stateName, { expires: exp });\r\n\r\n var provider = 'Wellfit';\r\n var company = 'Wellfit Plan';\r\n var companyAccepted = 'Smile Generation';\r\n var planNamePrefix = 'Smile Generation Dental Plan 2023';\r\n var planNameBasic = 'Smile Generation Dental Plan';\r\n var planName = 'Smile Generation Dental Plan®';\r\n var planNamePlural = 'Smile Generation Dental Plans®';\r\n var planFileName = 'SmileGenerationDentalPlan';\r\n var planNameShort = 'Smile_Generation';\r\n var planAcronym = 'sgdp';\r\n var planAcronymLabel = 'SGDP';\r\n var planPhoneNumber = '(833) 333-7437';\r\n var planPhoneNumberBasic = '8333337437';\r\n var planEmail = 'SGDPsupport@smilehealthdentalplans.com';\r\n var planAdmin = 'Wellfit Plans, LLC';\r\n var planAdminPhone = '(855) 935-5365';\r\n var organizationId = '5068093D-AA1F-41F8-AC42-1FC85A92B766';\r\n var careingtonTextShow = false;\r\n var cancellationText =\r\n 'The cancellation and refund policy can be found in the Membership Agreement under Section 9.';\r\n var servicesRight =\r\n '
More Benefits For You
In addition to discounts on general dentistry, there are even more great benefits for ' +\r\n planName +\r\n ' members including:
';\r\n var planFootNote = '*Price includes a one-time, non-refundable $15 administration fee.';\r\n var savingsText =\r\n 'The Smile Generation Dental Plan® is designed to help you during these times by offering significant discounts on the dentistry you need. Benefits include:
';\r\n var choosePlanInfo =\r\n '
All Plans include:
';\r\n var footerText = [\r\n \"

\" +\r\n planName +\r\n ' is NOT insurance and is not intended to replace health insurance.

',\r\n 'The plan does not pay providers directly. Members must pay for services at the time of treatment and will receive discounted rates from participating providers listed at SmileGenerationDentalPlan.com. Discounted rates may vary depending on the type of provider and service. You may cancel within the first 30 days after payment and receive a refund of your annual fees, except the $15 non-refundable application fee. (Application fee is refundable for AR, LA, FL. MD receives a $10 refund). ' +\r\n 'If you received services under the plan prior to cancellation, you may be responsible for paying your provider the difference between the discounted rated and your provider’s standard rates for the services performed (excluding LA residents). If your plan expires and you later decide to renew, another $15 non-refundable application fee may apply. Wellfit Plans, LLC is located at 3900 Teleport Blvd., PO Box 140309, Irving, TX 75014-0309 and can be reached at 833-333-7437.'\r\n ];\r\n var discountPricing = [\r\n ['Teledentistry/virtual consultation', '$258', '$0', '$258'],\r\n ['Routine or emergency exam', '$135', '$0', '$135'],\r\n ['Full-mouth X-ray', '$78', '$0', '$78'],\r\n ['CEREC® CAD/CAM crown', '$2,100', '$1,135', '$965'],\r\n [\r\n 'Full-mouth periodontal treatment (Scaling & Root Planing, Irrigation, and Bacterial Decontamination) ',\r\n '$2,288',\r\n '$1,164',\r\n '$1,124'\r\n ],\r\n [\r\n 'Root canal (1-3 root procedure, including pulpotomy)',\r\n '$1,510',\r\n '$1,173',\r\n '$337'\r\n ]\r\n ];\r\n var footnotes = [\r\n '†80th percentile of an average Usual and Customary fee based on Fair Health data for participating offices. ††Average plan fee for participating offices. ¶Sample savings reflected are an average.'\r\n ];\r\n var careingtonTermsAndConditionsShow = false;\r\n\r\n //if the 2024 plan is active\r\n if (planStartDateStatus) {\r\n if ($rootScope.currentState === 'CA') {\r\n planNameBasic = 'Smile Generation Dental Plan CA 2024';\r\n planNamePrefix = 'Smile Generation Dental Plan CA 2024';\r\n } else {\r\n planNameBasic = 'Smile Generation Dental Plan 2024';\r\n planNamePrefix = 'Smile Generation Dental Plan 2024';\r\n }\r\n } else {\r\n if ($rootScope.currentState === 'CA') {\r\n planNameBasic = 'Smile Generation Dental Plan CA 2023';\r\n planNamePrefix = 'Smile Generation Dental Plan CA 2023';\r\n } else {\r\n planNameBasic = 'Smile Generation Dental Plan 2023';\r\n planNamePrefix = 'Smile Generation Dental Plan 2023';\r\n }\r\n }\r\n\r\n if (state === 'CA') {\r\n provider = 'California';\r\n planAdmin = 'Careington International Corporation';\r\n planAdminPhone = '(833) 330-7209';\r\n planPhoneNumber = '(833) 330-7209';\r\n planPhoneNumberBasic = '8333307209';\r\n careingtonTextShow = true;\r\n careingtonTermsAndConditionsShow = true;\r\n cancellationText = 'The cancellation and refund policy can be found in the Membership Agreement.';\r\n servicesRight =\r\n '
More Benefits For You
In addition to discounts on general dentistry, there are even more great benefits for ' +\r\n planName +\r\n ' members including:
  • 20-60% savings on Mouth-Body Connection® procedures like oral cancer screenings, salivary lab tests and full-mouth periodontal treatment
  • 20% discounts on specialty care such as gum (periodontal) treatment, oral surgery, orthodontics, root canal treatment, cosmetic services like in-office teeth whitening and more
  • Additional benefits for members with underlying health conditions
';\r\n planFootNote = '*Price includes a one-time, non-refundable $15 administration fee.';\r\n savingsText =\r\n 'The Smile Generation Dental Plan® is designed to help you during these times by offering significant discounts on the dentistry you need. Benefits include:
  • Save 20% - 50% on most dental procedures
  • Since this is not insurance, there are no deductibles or annual maximums
  • Same-day discounts on dentistry—no waiting
';\r\n choosePlanInfo =\r\n '
All Plans include:
  • Save 20% - 50% on most dental procedures
  • Since this is not insurance, there are no deductibles or annual maximums
  • Same-day discounts on dentistry—no waiting
';\r\n footerText = [\r\n \"

THIS PLAN IS NOT INSURANCE and is not intended to replace health insurance.

\",\r\n 'This plan does not meet the minimum creditable coverage requirements under M.G.L. c.111M and 956 CMR 5.00. This plan is not a Qualified Health Plan under the Affordable Care Act. This is not a Medicare prescription drug plan. The range of discounts will vary depending on the type of provider and service. The plan does not pay providers directly. Plan members must pay for all services but will receive a discount from participating providers. The list of participating providers is at www.smilegenerationdentalplan.com. A written list of participating providers is available upon request. You may cancel within the first 30 days after effective date or receipt of membership materials (whichever is later) and receive a full refund, less a nominal processing fee (nominal fee for MD residents is $5, AR residents will be refunded the processing fee). Discount Plan Organization and administrator: Careington International Corporation, 7400 Gaylord Parkway, Frisco, TX 75034; phone 800-441-0380. ' +\r\n '
This plan is not available in Vermont or Washington.'\r\n ];\r\n discountPricing = [\r\n ['Teledentistry/virtual consultation', '$258', '$7', '$251'],\r\n ['Routine or emergency exam', '$135', '$7', '$128'],\r\n ['Full-mouth X-ray', '$70', '$3', '$67'],\r\n ['CEREC® CAD/CAM crown', '$2,100', '$1,195', '$905'],\r\n [\r\n 'Full-mouth periodontal treatment (Scaling & Root Planing, Irrigation, and Bacterial Decontamination) ',\r\n '$2,200',\r\n '$1,300',\r\n '$905'\r\n ],\r\n [\r\n 'Root canal (1-3 root procedure, including pulpotomy)',\r\n '$1,747',\r\n '$1,285',\r\n '$462'\r\n ]\r\n ];\r\n }\r\n\r\n if (state === 'WA') {\r\n planAdmin = 'Careington International Corporation';\r\n provider = 'Washington';\r\n planNamePrefix = 'Smile Generation Dental Plan WA 2023';\r\n planNameBasic = 'Smile Generation Dental Plan WA 2023';\r\n careingtonTermsAndConditionsShow = true;\r\n savingsText =\r\n 'The Smile Generation Dental Plan® is designed to help you during these times by offering significant discounts on the dentistry you need. Benefits include:
  • Save 20% - 50% on most dental procedures
  • Since this is not insurance, there are no deductibles or annual maximums
  • Same-day discounts on dentistry—no waiting
  • $0 teledentistry / virtual consultations
  • $0 dental exams and X-rays
';\r\n footerText = [\r\n \"

THIS PLAN IS NOT INSURANCE and is not intended to replace health insurance.

\",\r\n 'This plan does not meet the minimum creditable coverage requirements under M.G.L. c.111M and 956 CMR 5.00. This plan is not a Qualified Health Plan under the Affordable Care Act. The range of discounts will vary depending on the type of provider and service. The plan does not pay providers directly. Plan members must pay for all services but will receive a discount from participating providers. The list of participating providers is at smilegenerationdentalplan.com for dental providers.',\r\n 'A written list of participating providers is available upon request. You may cancel within the first 30 days after effective date or receipt of membership materials (whichever is later) and receive a full refund, less a nominal processing fee (nominal fee for MD residents is $5, AR residents will be refunded processing fee). Discount Plan Organization and Administrator: Careington International Corporation, 7400 Gaylord Parkway, Frisco, TX 75034; phone 800-441-0380.',\r\n '
This plan is not available in Vermont.'\r\n ];\r\n choosePlanInfo =\r\n '
All Plans include:
  • Save 20% - 50% on most dental procedures
  • Since this is not insurance, there are no deductibles or annual maximums
  • Same-day discounts on dentistry—no waiting
  • $0 tele-dentistry/virtual consultations
  • $0 dental exams and x-rays
';\r\n discountPricing = [\r\n ['Teledentistry/virtual consultation', '$240', '$0', '$240'],\r\n ['Routine or emergency exam', '$107', '$0', '$107'],\r\n ['Full-mouth X-ray', '$179', '$0', '$179'],\r\n ['CEREC® CAD/CAM crown', '$2,022', '$1004', '$1,018'],\r\n ['Full-mouth periodontal treatment', '$2,160', '$924', '$1,236'],\r\n [\r\n 'Root canal (1-3 root procedure, including pulpotomy)',\r\n '$1,147',\r\n '$899',\r\n '$248'\r\n ]\r\n ];\r\n }\r\n\r\n var updatedContent = {\r\n 'currentState': $rootScope.currentState,\r\n 'theme': planAcronym,\r\n 'plan': planNameBasic,\r\n 'planNamePrefix': planNamePrefix,\r\n 'planPhoneNumber': planPhoneNumber,\r\n 'planPhoneNumberBasic': planPhoneNumberBasic,\r\n 'planNameShort': planNameShort,\r\n 'organizationId': organizationId,\r\n 'planOptions': [],\r\n 'copyright': {\r\n 'planName': planName,\r\n 'address': 'Irving, TX, USA',\r\n 'links': [\r\n { 'text': 'Site Map', 'link': '/#/sitemap', 'target': '_self' },\r\n { 'text': 'Terms of Service', 'link': '/#/terms-of-service', 'target': '_blank' },\r\n { 'text': 'Privacy Policy', 'link': '/#/privacy-policy', 'target': '_blank' }\r\n ]\r\n },\r\n 'supportedStates': [],\r\n 'careingtonStates': ['California', 'Washington'],\r\n 'site': {\r\n 'header': {\r\n 'logo': '/assets/' + planAcronym + '/images/logo.svg',\r\n 'vineTitle': 'Adminstered by
' + planAdmin + '
' + planAdminPhone,\r\n 'links': {\r\n 'inviteAFriend': true,\r\n 'support': true,\r\n 'memberLogin': true,\r\n 'directory': true,\r\n 'displayVineDentalInfo': true\r\n }\r\n },\r\n 'footer': {\r\n 'logo': '/assets/' + planAcronym + '/images/logo-white.svg',\r\n 'logoTitle': planNameBasic,\r\n 'texts': footerText,\r\n 'footnotes': footnotes\r\n },\r\n 'pages': {\r\n 'contactForm': {\r\n 'subTitle': \"Have questions?
We'd love to help you.\",\r\n 'phone': planPhoneNumber,\r\n 'times': [''],\r\n 'email': {\r\n 'text': planEmail,\r\n 'link': 'mailto:' + planEmail + '?Subject=Contact%20Us,%20Request%20from%20Wellfit'\r\n }\r\n },\r\n 'welcome': {\r\n 'hero': {\r\n 'image': '/assets/' + planAcronym + '/images/welcome/hero.png',\r\n 'title': \"Just keep smiling. We'll help.\",\r\n 'subTitle': 'A discount dental plan designed to help you save and stay healthy.',\r\n 'button': {\r\n 'text': 'Start Saving Today',\r\n 'link': '#/plans',\r\n 'target': '_self'\r\n },\r\n 'disclaimer': ''\r\n },\r\n 'discounts': {\r\n 'left': {\r\n 'show': true,\r\n 'title': 'See what you can save today.',\r\n 'text': savingsText,\r\n 'button': {\r\n 'text': 'View Savings',\r\n 'link': '#/summary-of-discounts',\r\n 'target': '_self'\r\n }\r\n },\r\n 'right': {\r\n 'show': true,\r\n 'table': {\r\n 'header': [\r\n '',\r\n 'Average Fee without Plan',\r\n 'Average Fee with Plan††',\r\n 'Member Savings'\r\n ],\r\n 'rows': discountPricing\r\n }\r\n }\r\n },\r\n 'planPrices': {\r\n 'title': 'Start Saving on the Treatment You Need',\r\n 'text': '',\r\n 'link': '#/plans',\r\n 'target': '_self',\r\n 'note': planFootNote,\r\n 'button': {\r\n 'text': 'JOIN NOW',\r\n 'link': '#/plans',\r\n 'target': '_self'\r\n }\r\n },\r\n 'services': [\r\n {\r\n 'left': {\r\n 'isImage': true,\r\n 'value': '/assets/' + planAcronym + '/images/welcome/service.png'\r\n },\r\n 'right': {\r\n 'isImage': false,\r\n 'value': servicesRight\r\n }\r\n },\r\n {\r\n 'left': {\r\n 'isImage': false,\r\n 'value':\r\n '
Real-Time Visibility of Benefits + Costs
' +\r\n planName +\r\n ' provides you with real-time visibility to your treatment savings and costs - all on your phone. Now you can make good decisions about your oral health and be informed every step of the way.
'\r\n },\r\n 'right': {\r\n 'isImage': true,\r\n 'value': '/assets/' + planAcronym + '/images/welcome/in-hand.png'\r\n }\r\n }\r\n ],\r\n 'findDentist': {\r\n 'text':\r\n 'Accepted exclusively at ' +\r\n companyAccepted +\r\n '®-trusted offices in 25 states across the US.',\r\n 'button': {\r\n 'text': 'FIND A DENTIST',\r\n 'link': '/#/find-a-dentist',\r\n 'target': '_self'\r\n }\r\n }\r\n },\r\n 'choosePlan': {\r\n 'title': 'Choose Your Plan',\r\n 'subTitle':\r\n 'The ' +\r\n planName +\r\n ' provides 20-50% discounts on most dental treatments that meet your needs.',\r\n 'plans': {\r\n 'title': '',\r\n 'info': choosePlanInfo,\r\n 'footNote': planFootNote,\r\n 'buttonText': 'JOIN NOW'\r\n },\r\n 'careingtonTermsAndConditions': {\r\n 'show': careingtonTermsAndConditionsShow,\r\n 'text':\r\n '

Purchase and Renewal Conditions: By joining a plan for yourself or on behalf of a minor child for whom you are a parent or legal guardian, you confirm that you are at least 18 years old and you authorize Smile Generation Dental Plan to charge your credit card or checking account for the plan you have selected. By joining you indicate you have read and agree to the terms and conditions of the plan. Your plan will automatically expire 12 months to the date of purchase. You may renew prior to the termination of your plan and avoid the $15 administration fee. To renew your plan, you can contact Smile Generation Dental Plan at (833) 330-7209 prior to your termination date. Your plan can also be renewed through the Member Portal or through responding to Renewal Mailers that will be sent to your address on file.

Termination Conditions: Smile Generation Dental Plan and Careington reserve the right to terminate plan members from its plan for any reason, including non-payment. If Smile Generation Dental Plan terminates the plan or your membership for a reason other than non-payment, you will receive a pro-rata refund of your membership fees.

Cancellation Conditions: You have the right to cancel within the first 30 days after effective date or receipt of membership materials (whichever is later) and receive a full refund, less the processing fee, if applicable. If for any reason during this time period you are dissatisfied with the plan and wish to cancel and obtain a refund, you must submit a written cancellation request. Smile Generation Dental Plan will accept cancellation requests at any time and will stop collecting membership fees in a reasonable amount of time, but no later than 30 days after receiving a cancellation notice. Please send a cancellation letter and a request for refund with your name and member ID to Smile Generation Dental Plan, PO Box 140309, Irving, TX 75014. You may also submit cancellation requests by email: support@wellfitplans.com. When you cancel, you will continue to have access to the plan for the remainder of the period for which you have paid; your membership will terminate at the end of that period. The preceding sentence does not apply to quarterly, semi-annual or annual memberships in FL and OK, where you will receive a pro-rata refund whenever you cancel.

Description of Services: Please see the enclosed materials for a specific description of the programs included in your plan.

Limitations, Exclusions & Exceptions: This plan is a discount plan offered by Careington. Careington is not a licensed insurer, health maintenance organization or other underwriter of health care services. No portion of any provider’s fees will be reimbursed or otherwise paid by Careington. Careington is not licensed to provide and does not provide health care services or items to individuals. You will receive discounts for services at certain health care providers who have contracted with the plan. You are obligated to pay for all health care services at the time of service. Savings are based upon the provider’s normal fees. Actual savings will vary depending upon location and specific services or products purchased. Please verify such services with each individual provider. The plan’s discounts may not be used in conjunction with any other discount plan or program. All listed or quoted prices are current prices by participating providers and subject to change without notice. Any procedures performed by a non-participating provider are not discounted. From time to time, certain providers may offer products or services to the general public at prices lower than the discounted prices available through this plan. In such event, members will be charged the lowest price. Discounts on professional services are not available where prohibited by law. This plan does not discount all procedures. Providers are subject to change without notice and services may vary in some states. It is the member’s responsibility to verify that the provider participates in the plan. At any time Careington may substitute a provider network at its sole discretion. Careington cannot guarantee the continued participation of any provider. If the provider leaves the plan, you will need to select another provider. Providers contracted by Careington are solely responsible for the professional advice and treatment rendered to members and Careington disclaims any liability with respect to such matters.

Complaint Procedure: If you would like to file a complaint regarding your plan membership, you must submit your complaint in writing to: Careington International Corporation, P.O. Box 2568, Frisco, TX 75034. You have the right to request an appeal if you are dissatisfied with the complaint resolution. After completing the complaint resolution process, if you remain dissatisfied you may contact your state insurance department.

'\r\n }\r\n },\r\n 'support': {\r\n 'title': 'Support',\r\n 'sections': {\r\n 'stateSelection': {\r\n 'show': true,\r\n 'text': 'Forms vary by state. Select your state to view the appropriate forms.'\r\n },\r\n 'agreements': {\r\n 'show': true,\r\n 'title': 'Membership Agreement',\r\n 'text':\r\n '' +\r\n company +\r\n 's is required to provide prospective members a copy of the Membership Agreement prior to enrollment. Simply click the PDF links below to view/print the agreement or fee schedule.',\r\n 'links': {\r\n 'dsdLink': {\r\n 'text': 'Membership Agreement',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_\" +\r\n planNameShort +\r\n '_' +\r\n provider +\r\n '.pdf',\r\n 'target': '_blank'\r\n },\r\n 'pfsLink': {\r\n 'show': true,\r\n 'text': 'Plan Fee Schedule',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_\" +\r\n planNameShort +\r\n \"_[[STATE]].pdf'\",\r\n 'target': '_blank'\r\n },\r\n 'gfLink': {\r\n 'text': 'Grievance Form',\r\n 'link': '/#/grievance?state=[[STATE]]',\r\n 'target': '_self'\r\n },\r\n 'stateBased': {\r\n 'Arizona': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Colorado': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Georgia': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Idaho': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Kansas': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Kentucky': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Maryland': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Massachusetts': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Minnesota': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Missouri': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'New_Mexico': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'North_Carolina': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Ohio': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Tennessee': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Virginia': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Nevada': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Florida': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Oregon': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'South_Carolina': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Texas': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'California': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_[[STATE]]_2023.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Utah': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Louisiana': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n //----------------------\r\n 'Oklahoma': {\r\n 'MA': [\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_2024.pdf'\"\r\n },\r\n {\r\n 'text':\r\n 'Membership Agreement (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment After Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2024.pdf'\"\r\n },\r\n {\r\n 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2024)',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n },\r\n 'Washington': {\r\n 'MA': [\r\n {\r\n 'text': 'Membership Agreement',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ],\r\n 'FS': [\r\n {\r\n 'text': 'Plan Fee Schedule',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n },\r\n 'cancellation': {\r\n 'title': 'Cancellation & Refund Policy',\r\n 'text': cancellationText,\r\n 'linkText': 'Membership Agreement'\r\n },\r\n 'careingtonText': {\r\n 'show': careingtonTextShow,\r\n 'text':\r\n \"For information regarding ancillary benefits including UNOA please click here.\"\r\n },\r\n 'grievances': {\r\n 'title': 'Grievances Form',\r\n 'text':\r\n \"If you have a grievance, complete and submit the online grievance form, .\",\r\n 'laLink': {\r\n 'text':\r\n \"\",\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_\" +\r\n planNameShort +\r\n '_' +\r\n provider +\r\n '.pdf',\r\n 'target': '_blank'\r\n }\r\n },\r\n 'details':\r\n '

Have questions? Our plans specialists would love to help you.

Our ' +\r\n planName +\r\n ' customer service team is here to support you and answer any questions you may have. Please feel free to contact us at
' +\r\n planPhoneNumber\r\n }\r\n },\r\n 'summaryDiscounts': {\r\n 'title': 'See all the ways you save.',\r\n 'showStates': true,\r\n 'states': [],\r\n 'links': {\r\n 'sdf': {\r\n 'text': \"Your State's Most Commonly Viewed Fees \",\r\n 'variableLink':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/SDF_\" +\r\n planNameShort +\r\n \"_[[STATE]].pdf'\"\r\n },\r\n 'fe': {\r\n 'text': \"Your State's Full Fee Schedule \",\r\n 'variableLink':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_\" +\r\n planNameShort +\r\n \"_[[STATE]]_2024.pdf'\"\r\n }\r\n },\r\n 'rightSection': {\r\n 'image': {\r\n 'show': true,\r\n 'url':\r\n '/assets/' + planAcronym + '/images/summary-of-discounts/coverage-map.png'\r\n },\r\n 'text':\r\n '

' +\r\n planName +\r\n ' is currently accepted at Smile Generation®-trusted offices in 24 states.

'\r\n },\r\n 'mapColor': '#BB0E82',\r\n 'mapSelectedColor': '#970b68'\r\n },\r\n 'directory': {\r\n 'iconColor': '5F4AFA',\r\n 'loadingColorPrimary': '5F4AFA',\r\n 'loadingColorSecondary': '645AA7'\r\n }\r\n },\r\n 'purchaseFlow': {\r\n 'allowPromoCode': true,\r\n 'staticPromoCode': '',\r\n 'activatePlan': {\r\n 'dsdLink': {\r\n 'text': 'Membership Agreement',\r\n 'link': '/servicesanddisclosures/DOS_DF_' + planNameShort + '_' + provider + '.pdf',\r\n 'downloadAs': planAcronymLabel + ' Description of Services & Disclosures.pdf',\r\n 'target': '_blank'\r\n },\r\n 'touLink': {\r\n 'text': 'Terms of Use',\r\n 'link': 'print/eula?planName=' + planName + '',\r\n 'downloadAs': planAcronymLabel + ' EULA.pdf',\r\n 'target': '_blank',\r\n 'path': '/app/site/purchase-flow/activate-plan/modals/terms-of-use.modal.html'\r\n },\r\n 'privacyPolicyTemplate': {\r\n 'path': '/app/site/purchase-flow/activate-plan/modals/privacy-policy.modal.html'\r\n }\r\n },\r\n 'activatedPlan': {\r\n 'dsdLink': {\r\n 'text': 'Membership Agreement',\r\n 'link': '/servicesanddisclosures/DOS_DF_' + planNameShort + '_[[STATE]].pdf',\r\n 'downloadAs': planAcronymLabel + ' Description of Services & Disclosures.pdf',\r\n 'target': '_blank'\r\n },\r\n 'pfsLink': {\r\n 'text': 'Plan Fee Schedule',\r\n 'link': '/servicesanddisclosures/FS_' + planNameShort + '_[[STATE]].pdf',\r\n 'downloadAs': planName + ' Fee Schedule.pdf',\r\n 'target': '_blank'\r\n },\r\n 'gfLink': {\r\n 'text': 'Grievance Form',\r\n 'link': '/#/grievance?state=[[STATE]]',\r\n 'target': '_blank'\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n if (updatedContent != null) {\r\n jQuery.extend(true, siteContent, updatedContent);\r\n }\r\n\r\n // Get options based on selected state\r\n ui.block();\r\n return purchaseFlowService\r\n .getPlanOptionsByState()\r\n .then(function (result) {\r\n siteContent.planOptions = result;\r\n if (!isNotClose) {\r\n close(state);\r\n }\r\n\r\n if ($state.current.controller.indexOf('app.purchase') === 0) {\r\n $state.go('app.purchase.plans');\r\n }\r\n })\r\n .finally(function (result) {\r\n ui.unblock();\r\n });\r\n }\r\n }\r\n ]);\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.tos', []);\r\n \r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.tos')\r\n .config([\r\n '$stateProvider', \r\n '$urlRouterProvider', \r\n tosRoutes\r\n ]);\r\n\r\n function tosRoutes($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('app.tos', {\r\n url: '/terms-of-service',\r\n templateUrl: '/app/site/terms-of-service/terms-of-service.template.html',\r\n controller: 'app.tos.controller',\r\n });\r\n }\r\n \r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.tos')\r\n .controller('app.tos.controller', [\r\n '$scope',\r\n '$http',\r\n tosController\r\n ]);\r\n\r\n function tosController($scope, $http) {\r\n $scope.tosHtml = '';\r\n $scope.wellfitPrivacyPolicy = environment.memberPortalUrl + siteContent.theme + '&showPrivacyPolicy=true';\r\n $scope.wellfitToS = environment.memberPortalUrl + siteContent.theme + '&showEula=true';\r\n var apiUrl = environment.treatmentApiDirectUrl + 'files/public-documents/terms-of-use.html';\r\n\r\n $http.get(apiUrl)\r\n .then(function (response) {\r\n $scope.tosHtml = response.data.replace('{{wellfitTermsOfUse}}', $scope.wellfitToS).replace('{{wellfitPrivacyPolicy}}', $scope.wellfitPrivacyPolicy);\r\n });\r\n }\r\n\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('app.support', []);\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.support')\r\n .service('supportService', [\r\n \"$http\",\r\n supportService\r\n ]);\r\n\r\n function supportService($http) {\r\n return {\r\n getStates: getStates,\r\n getSellableStatesByPlan: getSellableStatesByPlan\r\n };\r\n\r\n function getStates() {\r\n return [\r\n { name: \"Alabama\", value: \"Alabama\", abbr: \"AL\" },\r\n { name: \"Alaska\", value: \"Alaska\", abbr: \"AK\" },\r\n { name: \"Arizona\", value: \"Arizona\", abbr: \"AZ\" },\r\n { name: \"Arkansas\", value: \"Arkansas\", abbr: \"AR\" },\r\n { name: \"California\", value: \"California\", abbr: \"CA\" },\r\n { name: \"Colorado\", value: \"Colorado\", abbr: \"CO\" },\r\n { name: \"Connecticut\", value: \"Connecticut\", abbr: \"CT\" },\r\n { name: \"Delaware\", value: \"Delaware\", abbr: \"DE\" },\r\n { name: \"District of Columbia\", value: \"District_of_Columbia\", abbr: \"DC\" },\r\n { name: \"Florida\", value: \"Florida\", abbr: \"FL\" },\r\n { name: \"Georgia\", value: \"Georgia\", abbr: \"GA\" },\r\n { name: \"Hawaii\", value: \"Hawaii\", abbr: \"HI\" },\r\n { name: \"Idaho\", value: \"Idaho\", abbr: \"ID\" },\r\n { name: \"Indiana\", value: \"Indiana\", abbr: \"IN\" },\r\n { name: \"Iowa\", value: \"Iowa\", abbr: \"IA\" },\r\n { name: \"Kansas\", value: \"Kansas\", abbr: \"KS\" },\r\n { name: \"Kentucky\", value: \"Kentucky\", abbr: \"KY\" },\r\n { name: \"Louisiana\", value: \"Louisiana\", abbr: \"LA\" },\r\n { name: \"Maine\", value: \"Maine\", abbr: \"ME\" },\r\n { name: \"Maryland\", value: \"Maryland\", abbr: \"MD\" },\r\n { name: \"Massachusetts\", value: \"Massachusetts\", abbr: \"MA\" },\r\n { name: \"Michigan\", value: \"Michigan\", abbr: \"MI\" },\r\n { name: \"Minnesota\", value: \"Minnesota\", abbr: \"MN\" },\r\n { name: \"Mississippi\", value: \"Mississippi\", abbr: \"MS\" },\r\n { name: \"Missouri\", value: \"Missouri\", abbr: \"MO\" },\r\n { name: \"Montana\", value: \"Montana\", abbr: \"MT\" },\r\n { name: \"Nebraska\", value: \"Nebraska\", abbr: \"NE\" },\r\n { name: \"Nevada\", value: \"Nevada\", abbr: \"NV\" },\r\n { name: \"New Hampshire\", value: \"New_Hampshire\", abbr: \"NH\" },\r\n { name: \"New Jersey\", value: \"New_Jersey\", abbr: \"NJ\" },\r\n { name: \"New Mexico\", value: \"New_Mexico\", abbr: \"NM\" },\r\n { name: \"New York\", value: \"New_York\", abbr: \"NY\" },\r\n { name: \"North Carolina\", value: \"North_Carolina\", abbr: \"NC\" },\r\n { name: \"North Dakota\", value: \"North_Dakota\", abbr: \"ND\" },\r\n { name: \"Ohio\", value: \"Ohio\", abbr: \"OH\" },\r\n { name: \"Oklahoma\", value: \"Oklahoma\", abbr: \"OK\" },\r\n { name: \"Oregon\", value: \"Oregon\", abbr: \"OR\" },\r\n { name: \"Pennsylvania\", value: \"Pennsylvania\", abbr: \"PA\" },\r\n { name: \"Rhode Island\", value: \"Rhode_Island\", abbr: \"RI\" },\r\n { name: \"South Carolina\", value: \"South_Carolina\", abbr: \"SC\" },\r\n { name: \"South Dakota\", value: \"South_Dakota\", abbr: \"SD\" },\r\n { name: \"Tennessee\", value: \"Tennessee\", abbr: \"TN\" },\r\n { name: \"Texas\", value: \"Texas\", abbr: \"TX\" },\r\n { name: \"Utah\", value: \"Utah\", abbr: \"UT\" },\r\n { name: \"Vermont\", value: \"Vermont\", abbr: \"VT\" },\r\n { name: \"Virginia\", value: \"Virginia\", abbr: \"VA\" },\r\n { name: \"Washington\", value: \"Washington\", abbr: \"WA\" },\r\n { name: \"West Virginia\", value: \"West_Virginia\", abbr: \"WV\" },\r\n { name: \"Wisconsin\", value: \"Wisconsin\", abbr: \"WI\" },\r\n { name: \"Wyoming\", value: \"Wyoming\", abbr: \"WY\" }\r\n ];\r\n }\r\n\r\n function getSellableStatesByPlan(planName) {\r\n return $http.get(environment.salesApiUrl + \"plans/get-sellable-states-by-plan?planName=\" + planName);\r\n }\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('app.support').config(['$stateProvider', '$urlRouterProvider', supportRoutes]);\r\n\r\n function supportRoutes($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('app.support', {\r\n url: '/support',\r\n templateUrl: '/app/site/support/support.template.html',\r\n controller: 'app.support.supportController',\r\n controllerAs: 'vm'\r\n })\r\n .state('app.supportplus', {\r\n url: '/supportplus',\r\n templateUrl: '/app/site/support/support.template.html',\r\n controller: 'app.support.supportController',\r\n controllerAs: 'vm'\r\n });\r\n }\r\n})(angular);\r\n","/* eslint-disable angular/controller-as */\r\n(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.support')\r\n .controller('app.support.supportController', [\r\n 'util',\r\n 'supportService',\r\n '$scope',\r\n '$rootScope',\r\n '$location',\r\n '$cookies',\r\n supportController\r\n ]);\r\n\r\n function supportController(util, supportService, $scope, $rootScope, $location, $cookies) {\r\n $scope.siteContent = siteContent;\r\n $scope.selectedState = null;\r\n $scope.content = siteContent.site.pages.support;\r\n $scope.newFeeScheduleUrl = null;\r\n $scope.oldFeeScheduleUrl = null;\r\n $scope.dsdUrl = null;\r\n $scope.laUrl = null;\r\n $scope.oldDsdUrl = null;\r\n $scope.stateFeeScheduleUrl = null;\r\n $scope.stateDsdUrl = null;\r\n $scope.stateDsdText = null;\r\n $scope.stateFeeScheduleText = null;\r\n $scope.oldStateFeeScheduleUrl = null;\r\n $scope.oldStateFeeScheduleText = null;\r\n $scope.oldStateDsdUrl = null;\r\n $scope.oldStateDsdText = null;\r\n $scope.showStateSpecificFS = false;\r\n $scope.showStateSpecificMA = false;\r\n $scope.showOldStateSpecificFS = false;\r\n $scope.showOldStateSpecificMA = false;\r\n $scope.treatmentApiUrl = environment.treatmentApiDirectUrl;\r\n $scope.states = supportService.getStates();\r\n $scope.states = $scope.states.filter(function (s) {\r\n return $rootScope.supportedStates.indexOf(s.abbr) >= 0 && util.isStateIncluded(s);\r\n });\r\n $scope.goToGrivanceForm = goToGrivanceForm;\r\n $scope.onStateSelected = updateDocumentLinks;\r\n $scope.openLAGrienvencesLink = openLAGrienvencesLink;\r\n $scope.openLink = openLink;\r\n $scope.isCareingtonState = false;\r\n\r\n if ($rootScope.supportedStates.length <= 1) {\r\n updateDocumentLinks($scope.states[0]);\r\n }\r\n\r\n if (!siteContent.site.pages.support.sections.stateSelection.show) {\r\n if (\r\n $scope.content.sections.agreements.links.dsdLink &&\r\n $scope.content.sections.agreements.links.dsdLink != ''\r\n ) {\r\n $scope.dsdUrl = eval($scope.content.sections.agreements.links.dsdLink.link);\r\n }\r\n\r\n if (\r\n $scope.content.sections.agreements.links.pfsLink.link &&\r\n $scope.content.sections.agreements.links.pfsLink.link != ''\r\n ) {\r\n $scope.newFeeScheduleUrl = eval($scope.content.sections.agreements.links.pfsLink.link);\r\n }\r\n }\r\n\r\n if ($cookies.get('stateValue')) {\r\n var stateValueCookie = $cookies.get('stateValue');\r\n var stateObject = $scope.states.find(function (state) {\r\n return state.value === stateValueCookie;\r\n });\r\n\r\n if (stateObject) {\r\n updateDocumentLinks(stateObject);\r\n } else return;\r\n }\r\n\r\n $scope.$watch('states', function (newVal, oldVal) {\r\n if (newVal && stateValueCookie) {\r\n $scope.selectedState = $scope.states.find(function (state) {\r\n return state.value === stateValueCookie;\r\n });\r\n }\r\n });\r\n\r\n function goToGrivanceForm() {\r\n if (!siteContent.site.pages.support.sections.stateSelection.show) {\r\n $location.url(siteContent.site.pages.support.sections.agreements.links.gfLink.link.replace('/#', ''));\r\n } else {\r\n if (\r\n $rootScope.supportedStates.length <= 1 ||\r\n (!$scope.selectStateForm.$invalid && $scope.selectStateForm.$dirty)\r\n ) {\r\n $location.url($scope.grievanceFormUrl.replace('/#', ''));\r\n } else {\r\n $scope.selectStateForm.$setDirty();\r\n }\r\n }\r\n }\r\n\r\n function openLAGrienvencesLink() {\r\n window.open(environment.blobStorageTopUrl + '/grievanceform/SDF-Greivance-Form-Louisianna.pdf');\r\n }\r\n\r\n function openLink(url) {\r\n if (!siteContent.site.pages.support.sections.stateSelection.show) {\r\n window.open(url);\r\n } else {\r\n if (\r\n $rootScope.supportedStates.length <= 1 ||\r\n (!$scope.selectStateForm.$invalid && $scope.selectStateForm.$dirty)\r\n ) {\r\n window.open(url);\r\n } else {\r\n $scope.selectStateForm.$setDirty();\r\n }\r\n }\r\n }\r\n\r\n function updateDocumentLinks(state) {\r\n $scope.selectedState = state.abbr;\r\n $scope.showStatedBased = false;\r\n $scope.statedBasedLinks = [];\r\n $scope.isCareingtonState = false;\r\n if (!state) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < $scope.siteContent.careingtonStates.length; i++) {\r\n const careState = $scope.siteContent.careingtonStates[i];\r\n if (careState === state.value) {\r\n $scope.isCareingtonState = true;\r\n }\r\n }\r\n\r\n $scope.grievanceFormUrl = siteContent.site.pages.support.sections.agreements.links.gfLink.link.replace(\r\n '[[STATE]]',\r\n state.abbr\r\n );\r\n //CHECK IF THERE IS STATE BASED\r\n if (\r\n $scope.content.sections.agreements.links.stateBased &&\r\n $scope.content.sections.agreements.links.stateBased[state.value]\r\n ) {\r\n $scope.showStatedBased = true;\r\n $scope.statedBasedLinks = [];\r\n\r\n var stateValues = $scope.content.sections.agreements.links.stateBased[state.value];\r\n\r\n var exp = new Date();\r\n exp.setFullYear(exp.getFullYear() + 100);\r\n\r\n $cookies.put('stateValue', state.value, { expires: exp });\r\n\r\n var dataQa = '';\r\n for (var i = 0; i < stateValues.MA.length; i++) {\r\n // this is to stop the 2022 links from showing..\r\n if (state.name === 'Florida' && i === 2) {\r\n break;\r\n }\r\n if (stateValues.MA[i].text) {\r\n dataQa = 'support.agreements.ma_' + i.toString() + '.link';\r\n $scope.statedBasedLinks.push({\r\n 'text': stateValues.MA[i].text,\r\n 'url': eval(stateValues.MA[i].link).replace('[[STATE]]', state.value),\r\n 'dataQa': dataQa\r\n });\r\n }\r\n\r\n if (stateValues.FS[i].text) {\r\n dataQa = 'support.agreements.fs_' + i.toString() + '.link';\r\n $scope.statedBasedLinks.push({\r\n 'text': stateValues.FS[i].text,\r\n 'url': eval(stateValues.FS[i].link).replace('[[STATE]]', state.value),\r\n 'dataQa': dataQa\r\n });\r\n }\r\n }\r\n } else {\r\n if (\r\n $scope.content.sections.agreements.links.pfsLink.link &&\r\n $scope.content.sections.agreements.links.pfsLink.link != ''\r\n ) {\r\n $scope.newFeeScheduleUrl = eval($scope.content.sections.agreements.links.pfsLink.link).replace(\r\n '[[STATE]]',\r\n state.value\r\n );\r\n }\r\n\r\n if ($scope.isCareingtonState) {\r\n $scope.dsdUrl =\r\n environment.blobStorageTopUrl +\r\n '/servicesanddisclosures/DOS_DF_' +\r\n $scope.siteContent.planNameShort +\r\n '_' +\r\n state.value +\r\n '.pdf';\r\n } else {\r\n $scope.dsdUrl =\r\n environment.blobStorageTopUrl +\r\n '/servicesanddisclosures/DOS_DF_' +\r\n $scope.siteContent.planNameShort +\r\n '_Wellfit.pdf';\r\n\r\n $scope.laUrl =\r\n environment.blobStorageTopUrl +\r\n '/servicesanddisclosures/DOS_DF_' +\r\n $scope.siteContent.planNameShort +\r\n '_Wellfit.pdf';\r\n }\r\n }\r\n }\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n angular.module('app.sod', []);\r\n})(angular);\r\n\r\n","(function (angular) {\r\n 'use strict';\r\n angular\r\n .module('app.sod')\r\n .config([\r\n '$stateProvider', \r\n '$urlRouterProvider', \r\n summaryOfDiscountRoutes\r\n ]);\r\n\r\n function summaryOfDiscountRoutes($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('app.sod', {\r\n url: '/summary-of-discounts',\r\n templateUrl: '/app/site/summary-of-discounts/summary-of-discounts.template.html',\r\n controller: 'app.sod.controller',\r\n controllerAs: 'vm'\r\n })\r\n .state('app.sodplus', {\r\n url: '/summary-of-discountsplus',\r\n templateUrl: '/app/site/summary-of-discounts/summary-of-discounts.template.html',\r\n controller: 'app.sod.controller',\r\n controllerAs: 'vm'\r\n });\r\n }\r\n \r\n})(angular);","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.sod')\r\n .controller('app.sod.controller', [\r\n 'util',\r\n 'supportService',\r\n '$scope',\r\n '$rootScope',\r\n '$cookies',\r\n summaryOfDiscountsController\r\n ]);\r\n\r\n function summaryOfDiscountsController(util, supportService, $scope, $rootScope, $cookies) {\r\n $scope.siteContent = siteContent;\r\n $scope.content = siteContent.site.pages.summaryDiscounts;\r\n $scope.states = supportService.getStates();\r\n $scope.states = $scope.states.filter(function (s) {\r\n return $rootScope.supportedStates.indexOf(s.abbr) >= 0 && util.isStateIncluded(s);\r\n });\r\n //required for a disabled option when using ng options (left as an example)\r\n //$scope.states.push({value:\"MA\", name:\"Massachusetts - Coming Soon\", disabled:true });\r\n $scope.onStateSelected = updateDocumentLinks;\r\n $scope.openLink = openLink;\r\n $scope.summaryOfDiscountsUrl = null;\r\n $scope.feeScheduleUrl = null;\r\n\r\n if (!$scope.content.showStates) {\r\n $scope.summaryOfDiscountsUrl = eval($scope.content.links.sdf.variableLink);\r\n $scope.feeScheduleUrl = eval($scope.content.links.fe.variableLink);\r\n } else if ($rootScope.supportedStates.length <= 1) {\r\n $scope.summaryOfDiscountsUrl = eval($scope.content.links.sdf.variableLink);\r\n $scope.feeScheduleUrl = eval($scope.content.links.fe.variableLink);\r\n updateDocumentLinks($scope.states[0].value);\r\n }\r\n\r\n var blobUrl = environment.blobStorageTopUrl + '/servicesanddisclosures/';\r\n\r\n if ($cookies.get('stateValue')) {\r\n var stateValueCookie = $cookies.get('stateValue');\r\n var stateObject = $scope.states.find(function (state) {\r\n return state.value === stateValueCookie;\r\n });\r\n\r\n if (stateObject) {\r\n updateDocumentLinks(stateValueCookie);\r\n } else return;\r\n }\r\n\r\n $scope.$watch('states', function (newVal, oldVal) {\r\n if (newVal && stateValueCookie) {\r\n $scope.selectedState = $scope.states.find(function (state) {\r\n return state.value === stateValueCookie;\r\n });\r\n }\r\n });\r\n\r\n function updateDocumentLinks(state) {\r\n $scope.summaryOfDiscountsUrl = eval($scope.content.links.sdf.variableLink).replace('[[STATE]]', state);\r\n $scope.feeScheduleUrl = eval($scope.content.links.fe.variableLink).replace('[[STATE]]', state);\r\n\r\n var exp = new Date();\r\n exp.setFullYear(exp.getFullYear() + 100);\r\n\r\n $cookies.put('stateValue', state, { expires: exp });\r\n }\r\n\r\n function openLink(url) {\r\n if (!$scope.content.showStates) {\r\n window.open(url);\r\n } else {\r\n if (\r\n $rootScope.supportedStates.length <= 1 ||\r\n (!$scope.selectStateForm.$invalid &&\r\n $scope.selectStateForm.$dirty &&\r\n $scope.summaryOfDiscountsUrl !== null &&\r\n $scope.feeScheduleUrl !== null)\r\n ) {\r\n window.open(url);\r\n } else {\r\n $scope.selectStateForm.$setDirty();\r\n }\r\n }\r\n }\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.sitemap', []);\r\n \r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.sitemap')\r\n .config([\r\n '$stateProvider',\r\n sitemapRoutes,\r\n ]);\r\n \r\n function sitemapRoutes($stateProvider) {\r\n $stateProvider\r\n .state('app.sitemap', {\r\n url: '/sitemap',\r\n templateUrl: '/app/site/sitemap/sitemap.template.html',\r\n controller: 'app.sitemap.SitemapController'\r\n });\r\n }\r\n\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.sitemap')\r\n .controller('app.sitemap.SitemapController', [\r\n '$scope',\r\n '$uibModal',\r\n sitemapController\r\n ]);\r\n\r\n function sitemapController($scope, $uibModal) {\r\n $scope.memberPortalUrl = environment.memberPortalUrl;\r\n $scope.discountSummaryUrl = siteContent.site.pages.welcome.discounts.left.button.link;\r\n\r\n $scope.launchInvite = launchInvite;\r\n\r\n // NOTE: The following functionality was copied and pasted over from \r\n // app.controller.js.\r\n // At the time of this writing, this felt like the easier solution to bring\r\n // the sitemap online, as opposed to altering the app.controller and \r\n // extracting the `launchInvite` functionality into a separate service.\r\n function launchInvite() {\r\n $uibModal.open({\r\n templateUrl: '/app/site/purchase-flow/invite-to-plan/invite-to-plan.html',\r\n controller: 'app.purchase.InviteToPlanController',\r\n controllerAs: 'vm'\r\n })\r\n .result\r\n .then(function fulfilled(result) {\r\n if (result === true) {\r\n $uibModal.open({\r\n templateUrl: '/app/site/purchase-flow/invite-to-plan/invite-success.html',\r\n controller: 'app.purchase.InviteToPlanResponseController',\r\n controllerAs: 'vm'\r\n });\r\n } else {\r\n $uibModal.open({\r\n templateUrl: '/app/site/purchase-flow/invite-to-plan/invite-failure.html',\r\n controller: 'app.purchase.InviteToPlanResponseController',\r\n controllerAs: 'vm'\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n})(angular);\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.purchase')\r\n .factory('app.purchase.purchaseFlowService', [\r\n '$sessionStorage',\r\n '$http',\r\n 'config',\r\n '$q',\r\n 'paymentTypes',\r\n purchaseFlowService\r\n ]);\r\n\r\n function purchaseFlowService($sessionStorage, $http, config, $q, paymentTypes) {\r\n var vm = this;\r\n vm.userInfo = {};\r\n vm.userName = '';\r\n var cachedData = [];\r\n // Service API\r\n return {\r\n getPlanOptions: getPlanOptions, \r\n checkStatusMessages: checkStatusMessages,\r\n getPlanOptionsByState: getPlanOptionsByState,\r\n getPurchase: getPurchase,\r\n getPlanStartDate: getPlanStartDate,\r\n setPlanSelection: setPlanSelection,\r\n applyPromoCode: applyPromoCode,\r\n updatePrimaryApplicantInfo: updatePrimaryApplicantInfo,\r\n updateAssociateMemberInfo: updateAssociateMemberInfo,\r\n completePurchase: completePurchase,\r\n getCreditCardType: getCreditCardType,\r\n getCardImgPath: getCardImgPath,\r\n getPlanSummary: getPlanSummary,\r\n updatePlanSummary: updatePlanSummary,\r\n addCreditCard: addCreditCard,\r\n addCheckingAccount: addCheckingAccount,\r\n determineLogo: getCardImgPath,\r\n determineLastDigits: determineLastDigits,\r\n updatePurchase: updatePurchase,\r\n sendInvitation: sendInvitation,\r\n validateEmailAddress: validateEmailAddress,\r\n clearPurchase: clearPurchase,\r\n removePaymentAccount: removePaymentAccount,\r\n getUser: getUser,\r\n generateOTP: generateOTP,\r\n authenticateOTP: authenticateOTP,\r\n signIn: signIn,\r\n getUserName: getUserName,\r\n getUserInfo: getUserInfo,\r\n sendPasswordResetEmail: sendPasswordResetEmail,\r\n sendActivationEmail: sendActivationEmail,\r\n getFeatureFlags: getFeatureFlags,\r\n getSalesTax: getSalesTax\r\n };\r\n\r\n function getFeatureFlags() {\r\n var deferred = $q.defer();\r\n var apiUrl = environment.treatmentApiUrl + 'featureFlag/1';\r\n\r\n if (!cachedData[1]) {\r\n $http.get(apiUrl)\r\n .then(function (response) {\r\n cachedData[1] = response.data;\r\n deferred.resolve(cachedData[1]);\r\n })\r\n .catch(function (error) {\r\n deferred.reject(error);\r\n });\r\n } else {\r\n deferred.resolve(cachedData[1]);\r\n }\r\n\r\n return deferred.promise;\r\n } \r\n\r\n function removePaymentAccount() {\r\n return $http.post(environment.salesApiUrl + 'purchase/portal/remove-payment-accounts');\r\n }\r\n\r\n function validateEmailAddress(emailAddress) {\r\n return $http.post(environment.salesApiUrl + 'services/check-uniqueness', { emailAddress: emailAddress });\r\n }\r\n\r\n function clearPurchase() {\r\n var response = $q.defer();\r\n response.resolve();\r\n return response.promise;\r\n }\r\n\r\n function getPurchase(complete) {\r\n return $http\r\n .get(environment.salesApiUrl + 'purchase/portal/get-purchase-summary?complete=' + (complete || 'false'))\r\n .then(function (data) {\r\n return data.data;\r\n });\r\n }\r\n\r\n function addCreditCard(payment) {\r\n return $http\r\n .post(environment.salesApiUrl + 'purchase/portal/add-credit-card', payment)\r\n .then(function (data) {\r\n return data.data;\r\n });\r\n }\r\n\r\n function addCheckingAccount(payment) {\r\n return $http\r\n .post(environment.salesApiUrl + 'purchase/portal/add-checking-account', payment)\r\n .then(function (data) {\r\n return data.data;\r\n });\r\n }\r\n\r\n function updatePurchase(purchase) {\r\n var response = $q.defer();\r\n //$sessionStorage.purchase = purchase;\r\n response.resolve();\r\n return response.promise;\r\n }\r\n\r\n function applyPromoCode(code) {\r\n return $http\r\n .post(environment.salesApiUrl + 'purchase/portal/apply-promo-code', { code: code })\r\n .then(function (data) {\r\n return data.data;\r\n });\r\n }\r\n\r\n function getPlanSummary() {\r\n //return $sessionStorage['planSummary'];\r\n return null;\r\n }\r\n\r\n function updatePlanSummary(value) {\r\n //$sessionStorage['planSummary'] = value;\r\n }\r\n\r\n function getPlanOptions(planeName) {\r\n var data = {\r\n PlanName: planeName || siteContent.plan\r\n };\r\n\r\n var config = {\r\n params: data,\r\n headers: { 'Accept': 'application/json' }\r\n };\r\n\r\n return $http.get(environment.salesApiUrl + 'services/get-plan-options', config).then(function (data) {\r\n return data.data;\r\n });\r\n }\r\n \r\n function checkStatusMessages() {\r\n var data = {\r\n Portal: environment.portalId\r\n };\r\n var config = {\r\n params: data,\r\n headers: { 'Accept': 'application/json' }\r\n };\r\n return $http\r\n .get(environment.treatmentApiUrl + 'authentication/system-messages', config)\r\n .then(function (data) {\r\n return data.data;\r\n });\r\n }\r\n\r\n function getPlanOptionsByState() {\r\n var data = {\r\n PlanNamePrefix: siteContent.planNamePrefix,\r\n OrganizationId: siteContent.organizationId,\r\n State: siteContent.currentState\r\n };\r\n\r\n var config = {\r\n params: data,\r\n headers: { 'Accept': 'application/json' }\r\n };\r\n return $http\r\n .get(environment.salesApiUrl + 'services/get-plan-options-by-state', config)\r\n .then(function (data) {\r\n return data.data;\r\n });\r\n }\r\n \r\n function getPlanStartDate(plan){\r\n return $http\r\n .get(environment.salesApiUrl + 'services/get-plan-status?planName='+plan)\r\n .then(function (data) {\r\n return data.data;\r\n });\r\n }\r\n function setPlanSelection(plan, planAcronym) {\r\n return $http\r\n .post(environment.salesApiUrl + 'purchase/portal/select-plan', {\r\n coverageLevelId: plan,\r\n source: planAcronym + 'PurchasePortal'\r\n })\r\n .then(function (data) {\r\n return data.data;\r\n });\r\n }\r\n\r\n function updatePrimaryApplicantInfo(value, invalidEmail) {\r\n return $http.post(environment.salesApiUrl + 'purchase/portal/add-applicants', value).then(function (data) {\r\n return data.data;\r\n });\r\n }\r\n \r\n function updateAssociateMemberInfo(value) {\r\n //return getPurchase().then(function (purchase) {\r\n // purchase.associatedApplicants = value;\r\n // return updatePurchase(purchase);\r\n //});\r\n }\r\n\r\n function generateSessionGuid() {\r\n var d = new Date().getTime();\r\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\r\n d += performance.now(); //use high-precision timer if available\r\n }\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n // tslint:disable-next-line:no-bitwise\r\n var r = (d + Math.random() * 16) % 16 | 0;\r\n d = Math.floor(d / 16);\r\n // tslint:disable-next-line:no-bitwise\r\n return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);\r\n });\r\n }\r\n\r\n function completePurchase(cardInfo, checkInfo, accountNumber, isPlanAutoRenewal,shouldNotifyByMail, isMedicalConfirmed,captchaResponse) { \r\n var endPointUrl = environment.salesApiUrl + 'purchase/portal/complete-purchase';\r\n return $http.post(endPointUrl, { creditCardInfo: cardInfo, CheckingAccountInfo: checkInfo, accountNumber: accountNumber, isPlanAutoRenewal: isPlanAutoRenewal, shouldNotifyByMail: shouldNotifyByMail, isMedicalConfirmed: isMedicalConfirmed, captchaToken : captchaResponse });\r\n }\r\n\r\n /**\r\n * Determines the credit card type from the credit card number.\r\n * @param {string} The credit card number\r\n * @returns {string} - Returns the credit card type.\r\n */\r\n function getCreditCardType(cardNumber) {\r\n return /^5[1-5]/.test(cardNumber)\r\n ? 'mastercard'\r\n : /^4/.test(cardNumber)\r\n ? 'visa'\r\n : /^3[47]/.test(cardNumber)\r\n ? 'amex'\r\n : /^6011|65|64[4-9]|622(1(2[6-9]|[3-9]\\d)|[2-8]\\d{2}|9([01]\\d|2[0-5]))/.test(cardNumber)\r\n ? 'discover'\r\n : null;\r\n }\r\n\r\n //Returns the img src path for the credit card specified by cardType\r\n function getCardImgPath(payment) {\r\n var cardType = (payment.paymentType || '').toLowerCase();\r\n\r\n var imgPath = '/assets/images/credit-cards/';\r\n\r\n if (cardType === 'echeck') {\r\n return imgPath + 'ic-account-balance.svg';\r\n }\r\n if (cardType === 'vi') {\r\n return imgPath + 'visa-dark.svg';\r\n }\r\n if (cardType === 'ax') {\r\n return imgPath + 'american-express-dark.svg';\r\n }\r\n if (cardType === 'mc') {\r\n return imgPath + 'mastercard-dark.svg';\r\n }\r\n if (cardType === 'di') {\r\n return imgPath + 'discover-dark.svg';\r\n }\r\n if (cardType === 'hsa') {\r\n return imgPath + 'hsa-icon.svg';\r\n }\r\n if (cardType === 'fsa') {\r\n return imgPath + 'fsa-icon.svg';\r\n }\r\n\r\n //If we've made it this far, then return the Unknown card logo\r\n return imgPath + 'unknown-card.png';\r\n }\r\n\r\n function determineLastDigits(paymentInfo) {\r\n var lastDigits = '';\r\n\r\n if (paymentInfo.paymentType === paymentTypes.creditCard) {\r\n var cardNumber = paymentInfo.creditCardInfo.cardNumber;\r\n lastDigits = cardNumber.substring(cardNumber.length - 4, cardNumber.length);\r\n } else if (paymentInfo.paymentType === paymentTypes.checkingAccount) {\r\n var accountNumber = paymentInfo.checkingAccountInfo.accountNumber;\r\n lastDigits = accountNumber.substring(accountNumber.length - 4, accountNumber.length);\r\n } else {\r\n lastDigits = 'N/A';\r\n }\r\n\r\n return lastDigits;\r\n }\r\n\r\n function sendInvitation(phoneNumber, captchaResponse) {\r\n return $http.post(environment.salesApiUrl + 'services/send-mysmile-invite', {\r\n phoneNumber: phoneNumber,\r\n captchaResponse: captchaResponse,\r\n site: siteContent.theme\r\n });\r\n }\r\n\r\n function getUser(userName) {\r\n vm.userName = userName;\r\n return $http.post(environment.salesApiUrl + 'purchase/portal/get-user', {userName: userName}).then(function (response) {\r\n vm.userInfo = response.data;\r\n return response.data;\r\n });\r\n }\r\n\r\n function generateOTP(request) {\r\n return $http.post(environment.salesApiUrl + 'purchase/portal/generate-otp', request).then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n function authenticateOTP(request) {\r\n vm.userName = '';\r\n return $http.post(environment.salesApiUrl + 'purchase/portal/authenticate-otp', request).then(function (response) {\r\n vm.userName = response.data.userName;\r\n return response.data;\r\n });\r\n }\r\n \r\n function signIn(request) {\r\n vm.userName = '';\r\n return $http.post(environment.salesApiUrl + 'purchase/portal/sign-in', request).then(function (response) {\r\n vm.userName = response.data.userName;\r\n return response.data;\r\n });\r\n }\r\n\r\n function getUserInfo() {\r\n return vm.userInfo;\r\n }\r\n\r\n function getUserName() {\r\n return vm.userName;\r\n }\r\n\r\n function sendPasswordResetEmail(request) {\r\n return $http.post(environment.salesApiUrl + 'purchase/portal/send-password-reset-email', request);\r\n }\r\n\r\n function sendActivationEmail(request) {\r\n return $http.post(environment.treatmentApiUrl + 'members/send-activation-email', request);\r\n }\r\n function getSalesTax(request) {\r\n return $http.get(environment.salesApiUrl + 'purchase/portal/get-salestax-info?zipCode=' + request);\r\n }\r\n }\r\n})();\r\n\r\n/**\r\n * Application Features\r\n * @see purchaseFlowService\r\n */\r\nvar Features = {\r\n /**\r\n * ShowMedicalAcknowledge\r\n */\r\n ShowMedicalAcknowledge: 'purchase:medi-cal-acknowledge',\r\n ShowAutoRenewalDisclaimer: 'purchase:auto-renewal-disclaimer'\r\n};\r\n","(function (angular) {\r\n angular.module('app.purchase').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n function ($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('app.legacyPurchasePlans', {\r\n url: '/purchase/plans',\r\n controller: [\r\n '$state',\r\n function ($state) {\r\n $state.go('app.purchase.plans');\r\n }\r\n ]\r\n })\r\n .state('app.legacyPurchaseApplicants', {\r\n url: '/purchase/applicants',\r\n controller: [\r\n '$state',\r\n function ($state) {\r\n $state.go('app.purchase.applicants');\r\n }\r\n ]\r\n })\r\n .state('app.purchase', {\r\n url: '/plans',\r\n abstract: true,\r\n templateUrl: '/app/site/purchase-flow/purchase-flow.template.html',\r\n controller: 'app.purchase.PurchaseFlowController',\r\n controllerAs: 'vmPurchaseFlow'\r\n })\r\n .state('app.purchase.plans', {\r\n url: '',\r\n templateUrl: '/app/site/purchase-flow/choose-plan/choose-plan.html',\r\n controller: 'app.purchase.ChoosePlanController',\r\n controllerAs: 'vm'\r\n })\r\n .state('app.purchase.applicants', {\r\n url: '/application',\r\n templateUrl: '/app/site/purchase-flow/applicant-info/applicant-info.template.html',\r\n controller: 'app.purchase.ApplicantInfoController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n purchase: [\r\n 'app.purchase.purchaseFlowService',\r\n '$state',\r\n 'ui',\r\n function (purchaseFlowService, $state, ui) {\r\n ui.block();\r\n return purchaseFlowService\r\n .getPurchase()\r\n .then(function (purchase) {\r\n if (!purchase.coverageLevelName) {\r\n setTimeout(function () {\r\n $state.go('app.purchase.plans');\r\n });\r\n throw 'A plan must be selected first.';\r\n }\r\n return purchase;\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n ]\r\n }\r\n })\r\n .state('app.purchase.responsibleParty', {\r\n url: '/application',\r\n templateUrl: '/app/site/purchase-flow/responsible-party-info/responsible-party-info.template.html',\r\n controller: 'app.purchase.ResponsiblePartyInfoController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n purchase: [\r\n 'app.purchase.purchaseFlowService',\r\n '$state',\r\n 'ui',\r\n function (purchaseFlowService, $state, ui) {\r\n ui.block();\r\n return purchaseFlowService\r\n .getPurchase()\r\n .then(function (purchase) {\r\n if (!purchase.coverageLevelName) {\r\n setTimeout(function () {\r\n $state.go('app.purchase.plans');\r\n });\r\n throw 'A plan must be selected first.';\r\n }\r\n return purchase;\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n ]\r\n }\r\n })\r\n .state('app.purchase.payment', {\r\n url: '/payment',\r\n templateUrl: '/app/site/purchase-flow/payment-info/payment-info.template.html',\r\n controller: 'app.purchase.PaymentInfoController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n purchase: [\r\n 'app.purchase.purchaseFlowService',\r\n '$state',\r\n 'ui',\r\n function (purchaseFlowService, $state, ui) {\r\n ui.block();\r\n return purchaseFlowService\r\n .getPurchase()\r\n .then(function (data) {\r\n try {\r\n if (!data.coverageLevelName) {\r\n throw 'A plan must be selected first.';\r\n }\r\n if (!data.primaryApplicant) {\r\n throw 'An applicant must be entered first.';\r\n }\r\n\r\n var numMembers = 1;\r\n if (data.associatedApplicants) {\r\n numMembers += data.associatedApplicants.length;\r\n }\r\n\r\n if (data.minNumberMembers > numMembers) {\r\n throw 'This plan requires associated applicants to be entered first.';\r\n }\r\n\r\n data.paymentInfo = null;\r\n return data;\r\n } catch (e) {\r\n setTimeout(function () {\r\n $state.go('app.purchase.applicants');\r\n });\r\n throw e;\r\n }\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n ]\r\n }\r\n })\r\n .state('app.purchase.activated', {\r\n url: '/activated',\r\n templateUrl: '/app/site/purchase-flow/activated/activated.template.html',\r\n controller: 'app.purchase.activatedController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n purchase: [\r\n 'app.purchase.purchaseFlowService',\r\n '$state',\r\n 'ui',\r\n function (purchaseFlowService, $state, ui) {\r\n ui.block();\r\n return purchaseFlowService\r\n .getPurchase(true)\r\n .then(function (purchase) {\r\n if (!purchase.completed || typeof purchase.completed == 'undefined' || purchase.completed == null) {\r\n setTimeout(function () {\r\n $state.go('app.purchase.plans');\r\n });\r\n throw 'A plan must be complete.';\r\n }\r\n else if (!purchase.coverageLevelName) {\r\n setTimeout(function () {\r\n $state.go('app.purchase.plans');\r\n });\r\n throw 'A plan must be selected first.';\r\n }\r\n return purchase;\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n ]\r\n },\r\n isShowProgressbar: false\r\n });\r\n\r\n $urlRouterProvider.when('/purchase', '/purchase/plans');\r\n\r\n function goToCurrentOrDefault($state) {\r\n if (!$state.current.name) {\r\n $state.go('app.purchase.plans');\r\n } else {\r\n $state.go($state.current.name);\r\n }\r\n }\r\n }\r\n ]);\r\n})(angular);","(function (angular) {\r\n\r\n 'use strict';\r\n\r\n angular.module('app.purchase')\r\n .controller('app.purchase.PurchaseFlowController', ['$state',\r\n function ($state) {\r\n var vm = this;\r\n vm.$state = $state;\r\n vm.tabStates = [\r\n 'app.purchase.plans', 'app.purchase.applicants', 'app.purchase.payment', 'app.purchase.activation'\r\n ];\r\n\r\n // functions\r\n vm.changeTabs = changeTabs;\r\n vm.isDisabled = isDisabled;\r\n\r\n function changeTabs(newTab) {\r\n if (!isDisabled(newTab)) {\r\n $state.go(newTab);\r\n }\r\n } \r\n\r\n function isDisabled(tab) {\r\n return vm.tabStates.indexOf(tab) > vm.tabStates.indexOf($state.current.name);\r\n }\r\n }]);\r\n})(angular);\r\n\r\n","(function (angular) {\r\n angular.module('app.sgdpppurchase', [\r\n 'ui.keypress',\r\n 'vcRecaptcha'\r\n ]);\r\n\r\n}(angular));","(function (angular) {\r\n angular.module('app.sgdpppurchase').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n function ($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('app.sgdpppurchase', {\r\n url: '/plansplus',\r\n abstract: true,\r\n templateUrl: '/app/site/purchase-flow/purchase-flow-sgdpp.template.html',\r\n controller: 'app.sgdpppurchase.PurchaseFlowController',\r\n controllerAs: 'vmPurchaseFlow'\r\n })\r\n .state('app.sgdpppurchase.plans', {\r\n url: '',\r\n templateUrl: '/app/site/purchase-flow/choose-plan/choose-plan.html',\r\n controller: 'app.purchase.ChoosePlanController',\r\n controllerAs: 'vm'\r\n })\r\n .state('app.sgdpppurchase.applicants', {\r\n url: '/application',\r\n templateUrl: '/app/site/purchase-flow/applicant-info/applicant-info.template.html',\r\n controller: 'app.purchase.ApplicantInfoController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n purchase: [\r\n 'app.purchase.purchaseFlowService',\r\n '$state',\r\n 'ui',\r\n function (purchaseFlowService, $state, ui) {\r\n ui.block();\r\n return purchaseFlowService\r\n .getPurchase()\r\n .then(function (purchase) {\r\n if (!purchase.coverageLevelName) {\r\n setTimeout(function () {\r\n $state.go('app.sgdpppurchase.plans');\r\n });\r\n throw 'A plan must be selected first.';\r\n }\r\n return purchase;\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n ]\r\n }\r\n })\r\n .state('app.sgdpppurchase.responsibleParty', {\r\n url: '/application',\r\n templateUrl: '/app/site/purchase-flow/responsible-party-info/responsible-party-info.template.html',\r\n controller: 'app.purchase.ResponsiblePartyInfoController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n purchase: [\r\n 'app.purchase.purchaseFlowService',\r\n '$state',\r\n 'ui',\r\n function (purchaseFlowService, $state, ui) {\r\n ui.block();\r\n return purchaseFlowService\r\n .getPurchase()\r\n .then(function (purchase) {\r\n if (!purchase.coverageLevelName) {\r\n setTimeout(function () {\r\n $state.go('app.sgdpppurchase.plans');\r\n });\r\n throw 'A plan must be selected first.';\r\n }\r\n return purchase;\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n ]\r\n }\r\n })\r\n .state('app.sgdpppurchase.payment', {\r\n url: '/payment',\r\n templateUrl: '/app/site/purchase-flow/payment-info/payment-info.template.html',\r\n controller: 'app.purchase.PaymentInfoController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n purchase: [\r\n 'app.purchase.purchaseFlowService',\r\n '$state',\r\n 'ui',\r\n function (purchaseFlowService, $state, ui) {\r\n ui.block();\r\n return purchaseFlowService\r\n .getPurchase()\r\n .then(function (data) {\r\n try {\r\n if (!data.coverageLevelName) {\r\n throw 'A plan must be selected first.';\r\n }\r\n if (!data.primaryApplicant) {\r\n throw 'An applicant must be entered first.';\r\n }\r\n\r\n var numMembers = 1;\r\n if (data.associatedApplicants) {\r\n numMembers += data.associatedApplicants.length;\r\n }\r\n\r\n if (data.minNumberMembers > numMembers) {\r\n throw 'This plan requires associated applicants to be entered first.';\r\n }\r\n\r\n data.paymentInfo = null;\r\n return data;\r\n } catch (e) {\r\n setTimeout(function () {\r\n $state.go('app.sgdpppurchase.applicants');\r\n });\r\n throw e;\r\n }\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n ]\r\n }\r\n })\r\n .state('app.sgdpppurchase.activated', {\r\n url: '/activated',\r\n templateUrl: '/app/site/purchase-flow/activated/activated.template.html',\r\n controller: 'app.purchase.activatedController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n purchase: [\r\n 'app.purchase.purchaseFlowService',\r\n '$state',\r\n 'ui',\r\n function (purchaseFlowService, $state, ui) {\r\n ui.block();\r\n return purchaseFlowService\r\n .getPurchase(true)\r\n .then(function (purchase) {\r\n if (!purchase.completed || typeof purchase.completed == 'undefined' || purchase.completed == null) {\r\n setTimeout(function () {\r\n $state.go('app.sgdpppurchase.plans');\r\n });\r\n throw 'A plan must be complete.';\r\n }\r\n else if (!purchase.coverageLevelName) {\r\n setTimeout(function () {\r\n $state.go('app.sgdpppurchase.plans');\r\n });\r\n throw 'A plan must be selected first.';\r\n }\r\n return purchase;\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n ]\r\n },\r\n isShowProgressbar: false\r\n });\r\n\r\n function goToCurrentOrDefault($state) {\r\n if (!$state.current.name) {\r\n $state.go('app.sgdpppurchase.plans');\r\n } else {\r\n $state.go($state.current.name);\r\n }\r\n }\r\n }\r\n ]);\r\n})(angular);\r\n\r\n","(function (angular) {\r\n\r\n 'use strict';\r\n\r\n angular.module('app.sgdpppurchase')\r\n .controller('app.sgdpppurchase.PurchaseFlowController', ['$state',\r\n function ($state) {\r\n var vm = this;\r\n vm.$state = $state;\r\n vm.tabStates = [\r\n 'app.sgdpppurchase.plans', 'app.sgdpppurchase.applicants', 'app.sgdpppurchase.payment', 'app.sgdpppurchase.activation'\r\n ];\r\n\r\n // functions\r\n vm.changeTabs = changeTabs;\r\n vm.isDisabled = isDisabled;\r\n\r\n function changeTabs(newTab) {\r\n if (!isDisabled(newTab)) {\r\n $state.go(newTab);\r\n }\r\n } \r\n\r\n function isDisabled(tab) {\r\n return vm.tabStates.indexOf(tab) > vm.tabStates.indexOf($state.current.name);\r\n }\r\n }]);\r\n})(angular);\r\n\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.privacy-policy', []);\r\n \r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.privacy-policy')\r\n .config([\r\n '$stateProvider', \r\n '$urlRouterProvider', \r\n privacyPolicyRoutes\r\n ]);\r\n\r\n function privacyPolicyRoutes($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('app.privacy-policy', {\r\n url: '/privacy-policy',\r\n templateUrl: '/app/site/privacy-policy/privacy-policy.template.html',\r\n controller: 'app.privacy-policy.controller'\r\n });\r\n }\r\n \r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.privacy-policy')\r\n .controller('app.privacy-policy.controller', ['$scope', '$http', privacyPolicyController]);\r\n\r\n function privacyPolicyController($scope, $http) {\r\n $scope.privacyPolicyHtml = '';\r\n var apiUrl = environment.treatmentApiDirectUrl + 'files/public-documents/privacy-policy.html';\r\n\r\n $http.get(apiUrl).then(function (response) {\r\n $scope.privacyPolicyHtml = response.data;\r\n });\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('app.landing').config([\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n function ($stateProvider) {\r\n $stateProvider\r\n .state('app.welcome', {\r\n url: '/welcome',\r\n controller: [\r\n '$state',\r\n function ($state) {\r\n $state.go('app.landing');\r\n }\r\n ]\r\n })\r\n .state('app.home', {\r\n url: '',\r\n controller: [\r\n '$state',\r\n function ($state) {\r\n $state.go('app.landing');\r\n }\r\n ]\r\n })\r\n .state('app.redirect', {\r\n url: '/redirect',\r\n templateUrl: '/app/layout/main.html',\r\n controller: ['$state', function ($state) { }]\r\n })\r\n .state('app.offline', {\r\n url: '/offline',\r\n templateUrl: '/app/offline/offline.html',\r\n controller: ['$state', function ($state) { }]\r\n })\r\n .state('app.plus', {\r\n url: '/plus',\r\n controller: [\r\n '$state',\r\n function ($state) {\r\n $state.go('app.landing');\r\n }\r\n ]\r\n })\r\n .state('app.landing', {\r\n url: '/',\r\n templateUrl: '/app/site/landing-flow/welcome/welcome.template.html',\r\n controller: 'app.landing.welcomeController',\r\n controllerAs: 'vmWelcomeController'\r\n });\r\n }\r\n ]);\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.grievance', []);\r\n \r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.grievance')\r\n .controller('app.grievance.grievanceSuccessController', [\r\n '$state',\r\n grievanceSuccessController\r\n ]);\r\n\r\n function grievanceSuccessController($state) {\r\n var vm = this;\r\n vm.continue = goToMainPage;\r\n\r\n function goToMainPage() {\r\n $state.go(siteContent.landingPath);\r\n }\r\n }\r\n})(angular);",null,"(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.grievance')\r\n .service('app.grievance.grievanceService', [\r\n \"$http\",\r\n grievanceService\r\n ]);\r\n\r\n function grievanceService($http) {\r\n return {\r\n submitGrievanceForm: submitGrievanceForm\r\n }\r\n\r\n function submitGrievanceForm(grievanceInfo) {\r\n return $http.post(environment.salesApiUrl + 'services/send-grievance-email', grievanceInfo);\r\n }\r\n }\r\n \r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.grievance')\r\n .config([\r\n '$stateProvider', \r\n '$urlRouterProvider', \r\n grievanceRoutes\r\n ]);\r\n\r\n function grievanceRoutes($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('app.grievance', {\r\n url: '/grievance',\r\n templateUrl: '/app/site/grievance/grievance.template.html',\r\n controller: 'app.grievance.grievanceController',\r\n controllerAs: 'vmGrievance'\r\n })\r\n .state('app.grievanceplus', {\r\n url: '/grievanceplus',\r\n templateUrl: '/app/site/grievance/grievance.template.html',\r\n controller: 'app.grievance.grievanceController',\r\n controllerAs: 'vmGrievance'\r\n })\r\n .state('app.grievancesuccess', {\r\n url: '/grievancesuccess',\r\n templateUrl: '/app/site/grievance/success.template.html',\r\n controller: 'app.grievance.grievanceSuccessController',\r\n controllerAs: 'vmGrievanceSuccess'\r\n });\r\n }\r\n \r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.grievance')\r\n .controller('app.grievance.grievanceController', [\r\n '$scope',\r\n '$location',\r\n 'states', \r\n 'ui',\r\n '$state',\r\n '$window',\r\n 'app.grievance.grievanceService',\r\n grievanceController\r\n ]);\r\n\r\n function grievanceController($scope, $location, states, ui, $state, $window, service) {\r\n $scope.$on('$locationChangeStart', function(event, newUrl, oldUrl) {\r\n if(newUrl.split('/#/').length > 1 && newUrl.split('/#/')[1].indexOf('grievance') == 0) {\r\n initializeCurrentSection();\r\n }\r\n });\r\n\r\n var vm = this;\r\n vm.state = '';\r\n vm.stateFolder = 'assets/grievances';\r\n vm.states = states;\r\n vm.section = 0;\r\n vm.grievanceInfo = {\r\n memberInfo: {\r\n firstName: '',\r\n lastName: '',\r\n mainSubscriber: '',\r\n phone: '',\r\n email: '',\r\n address: {\r\n streetAddress: '',\r\n city: '',\r\n state: '',\r\n zip: ''\r\n }\r\n },\r\n dentistInfo: {\r\n name: '',\r\n phone: '',\r\n address: {\r\n streetAddress: '',\r\n city: '',\r\n state: '',\r\n zip: ''\r\n }\r\n },\r\n grievanceDescription: '',\r\n brand: siteContent.theme\r\n };\r\n\r\n vm.isLoadingGrievanceText = false;\r\n vm.hasGrievanceText = false;\r\n vm.onGrievanceTextLoading = onGrievanceTextLoading;\r\n vm.onGrievanceTextMissing = onGrievanceTextMissing;\r\n vm.onGrievanceTextExists = onGrievanceTextExists;\r\n vm.submitForm = submitForm;\r\n vm.continue = showNextSection;\r\n vm.showSection = showSection;\r\n\r\n initialize();\r\n\r\n function onGrievanceTextLoading() {\r\n vm.isLoadingGrievanceText = true;\r\n vm.hasGrievanceText = false;\r\n }\r\n\r\n function onGrievanceTextMissing() {\r\n vm.isLoadingGrievanceText = false;\r\n vm.hasGrievanceText = false;\r\n initializeCurrentSection()\r\n }\r\n\r\n function onGrievanceTextExists() {\r\n vm.isLoadingGrievanceText = false;\r\n vm.hasGrievanceText = true;\r\n initializeCurrentSection();\r\n }\r\n\r\n function initializeCurrentSection() {\r\n var section = $location.search().section;\r\n if(section && section !== null) {\r\n section -= (vm.state != '' && vm.hasGrievanceText ? 1 : 0);\r\n } else {\r\n section = (vm.state != '' && vm.hasGrievanceText ? 0 : 1);\r\n }\r\n\r\n vm.section = section;\r\n }\r\n\r\n function initialize() {\r\n vm.state = $location.search().state;\r\n if(vm.state === null || typeof vm.state === 'undefined') {\r\n vm.state = '';\r\n } else {\r\n vm.state = vm.state.toUpperCase();\r\n }\r\n\r\n initializeCurrentSection();\r\n }\r\n\r\n function submitForm() {\r\n ui.block();\r\n service.submitGrievanceForm(vm.grievanceInfo).then(function() {\r\n $state.go('app.grievancesuccess');\r\n }).catch(function rejected(response) {\r\n ui.handleError(response);\r\n }).finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n\r\n function showNextSection() {\r\n showSection(vm.section +1);\r\n }\r\n\r\n function showSection(sectionNum) {\r\n var urlSection = sectionNum;\r\n if(vm.state !== '' && vm.hasGrievanceText) {\r\n urlSection += 1;\r\n }\r\n\r\n var currentSearch = $location.search();\r\n\r\n $window.history.pushState($window.location.href, 'Grievance Form');\r\n\r\n $location.search(angular.merge(currentSearch, {section: urlSection }));\r\n $location.replace();\r\n \r\n vm.section = sectionNum;\r\n $window.scrollTo(0,0);\r\n }\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n angular.module('app.directory', []);\r\n})(angular);\r\n\r\n","(function (angular) {\r\n 'use strict';\r\n angular\r\n .module('app.directory')\r\n .config([\r\n '$stateProvider', \r\n '$urlRouterProvider', \r\n directoryRoutes\r\n ]);\r\n\r\n function directoryRoutes($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('app.directory', {\r\n url: '/find-a-dentist',\r\n templateUrl: '/app/site/directory/directory.template.html',\r\n controller: 'app.directory.controller',\r\n controllerAs: 'vm'\r\n })\r\n .state('app.directoryplus', {\r\n url: '/find-a-dentistplus',\r\n templateUrl: '/app/site/directory/directory.template.html',\r\n controller: 'app.directory.controller',\r\n controllerAs: 'vm'\r\n });\r\n }\r\n \r\n})(angular);","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.directory')\r\n .controller('app.directory.controller', ['$scope', '$http', '$filter', directoryController]);\r\n\r\n function directoryController($scope, $http, $filter) {\r\n var vm = this;\r\n vm.triggerAc = triggerAc;\r\n vm.triggerClick = triggerClick;\r\n var markers = new Array();\r\n vm.siteContent = siteContent;\r\n vm.resetMap = resetMap;\r\n\r\n var geocoder;\r\n var map;\r\n var bounds;\r\n var autocomplete;\r\n var countryRestrict = { 'country': 'us' };\r\n var addressData = [];\r\n var originalAddressData = [];\r\n var infoWindows = [];\r\n var visibleListings = [];\r\n var milesSelection = 5;\r\n var boundChangeListener = null;\r\n\r\n $scope.hasMinZoom = false;\r\n $scope.initialLoading = true;\r\n\r\n // get practices\r\n var apiUrl = environment.treatmentApiDirectUrl + 'practices/get-directory';\r\n $http.post(apiUrl, { planName: vm.siteContent.planNamePrefix }).then(function (response) {\r\n originalAddressData = response.data.entries;\r\n $scope.originalAddressData = originalAddressData;\r\n $scope.addressData = addressData;\r\n $scope.initialLoading = false;\r\n initializeMap();\r\n });\r\n\r\n // initialize the map\r\n function initializeMap() {\r\n // map setup + settings\r\n map = new google.maps.Map(document.getElementById('map_canvas'), {\r\n zoom: 13,\r\n mapTypeId: google.maps.MapTypeId.ROADMAP,\r\n mapTypeControl: false,\r\n streetViewControl: false\r\n });\r\n\r\n addsBoundChangeListener();\r\n\r\n map.setOptions({ maxZoom: 18, zoom: 5, center: new google.maps.LatLng(39.4515876, -97.1658519) });\r\n bounds = new google.maps.LatLngBounds();\r\n $scope.fullAddress = [];\r\n\r\n autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'), {\r\n componentRestrictions: countryRestrict\r\n });\r\n\r\n // pass addresses to geocode addressData\r\n function getPoints() {\r\n let locationData = [];\r\n let addressLocations = [];\r\n\r\n if (originalAddressData) {\r\n for (let i = 0; i < originalAddressData.length; i++) {\r\n var lineTwo = '';\r\n if (originalAddressData[i].address.line2) {\r\n lineTwo = ' ' + originalAddressData[i].address.line2;\r\n }\r\n\r\n $scope.originalAddressData[i].id = i;\r\n\r\n // convert address object to string\r\n $scope.fullAddress.push(\r\n originalAddressData[i].address.line1 +\r\n lineTwo +\r\n ', ' +\r\n originalAddressData[i].address.city +\r\n ', ' +\r\n originalAddressData[i].address.state +\r\n ' ' +\r\n originalAddressData[i].address.zipCode\r\n );\r\n\r\n if (\r\n originalAddressData[i].latitude &&\r\n originalAddressData[i].latitude !== null &&\r\n originalAddressData[i].longitude &&\r\n originalAddressData[i].longitude !== null\r\n ) {\r\n if (\r\n map.getBounds() &&\r\n map.getBounds().contains({\r\n lat: originalAddressData[i].latitude,\r\n lng: originalAddressData[i].longitude\r\n })\r\n ) {\r\n if (\r\n markers.filter(function (m) {\r\n return (\r\n m.position.lat() == originalAddressData[i].latitude &&\r\n m.position.lng() == originalAddressData[i].longitude\r\n );\r\n }).length === 0\r\n ) {\r\n addressLocations.push({\r\n address: originalAddressData[i],\r\n location: [originalAddressData[i].latitude, originalAddressData[i].longitude],\r\n distance: haversine_distance(\r\n map.getCenter(),\r\n new google.maps.LatLng(\r\n originalAddressData[i].latitude,\r\n originalAddressData[i].longitude\r\n )\r\n )\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n addressLocations = addressLocations.sort(function (a, b) {\r\n if (a.distance < b.distance) {\r\n return -1;\r\n }\r\n if (a.distance > b.distance) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n\r\n for (var i = 0; i < addressLocations.length; i++) {\r\n addressData.push({ index: addressData.length, data: addressLocations[i].address });\r\n locationData.push(addressLocations[i].location);\r\n }\r\n\r\n $scope.addressData = addressData;\r\n return locationData;\r\n }\r\n\r\n function haversine_distance(mk1, mk2) {\r\n var R = 3958.8; // Radius of the Earth in miles\r\n var rlat1 = mk1.lat() * (Math.PI / 180); // Convert degrees to radians\r\n var rlat2 = mk2.lat() * (Math.PI / 180); // Convert degrees to radians\r\n var difflat = rlat2 - rlat1; // Radian difference (latitudes)\r\n var difflon = (mk2.lng() - mk1.lng()) * (Math.PI / 180); // Radian difference (longitudes)\r\n\r\n var d =\r\n 2 *\r\n R *\r\n Math.asin(\r\n Math.sqrt(\r\n Math.sin(difflat / 2) * Math.sin(difflat / 2) +\r\n Math.cos(rlat1) * Math.cos(rlat2) * Math.sin(difflon / 2) * Math.sin(difflon / 2)\r\n )\r\n );\r\n return d;\r\n }\r\n\r\n initAutocomplete();\r\n\r\n function addsBoundChangeListener() {\r\n boundChangeListener = google.maps.event.addListener(map, 'bounds_changed', function () {\r\n var zoomLevel = map.getZoom();\r\n\r\n if (zoomLevel >= 10) {\r\n if (!$scope.hasMinZoom) {\r\n markers = new Array();\r\n infoWindows = [];\r\n addressData = [];\r\n $scope.addressData = [];\r\n }\r\n\r\n $scope.hasMinZoom = true;\r\n createMarkers(getPoints());\r\n for (var i = 0; i < markers.length; i++) {\r\n if (map.getBounds().contains(markers[i].getPosition())) {\r\n $scope.addressData[i].data.hide = true;\r\n } else {\r\n $scope.addressData[i].data.hide = false;\r\n }\r\n }\r\n } else {\r\n if ($scope.hasMinZoom) {\r\n for (var i = 0; i < markers.length; i++) {\r\n markers[i].setMap(null);\r\n }\r\n\r\n markers = new Array();\r\n infoWindows = [];\r\n addressData = [];\r\n $scope.addressData = [];\r\n $scope.hasMinZoom = false;\r\n }\r\n }\r\n\r\n $scope.$apply();\r\n });\r\n }\r\n\r\n function initAutocomplete() {\r\n var options = {\r\n types: ['geocode']\r\n };\r\n\r\n autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'), options);\r\n google.maps.event.addListener(autocomplete, 'place_changed', onPlaceChanged);\r\n }\r\n\r\n // on autocomplete input change\r\n function onPlaceChanged() {\r\n var place = autocomplete.getPlace();\r\n if (place) {\r\n if (!place.geometry || place.name !== document.getElementById('autocomplete').value) {\r\n geocoder = new google.maps.Geocoder();\r\n geocoder.geocode(\r\n { 'address': document.getElementById('autocomplete').value },\r\n function (results, status) {\r\n if (status == 'OK') {\r\n var address = getTheUSAddress(results);\r\n placeCenter(address.geometry);\r\n } else {\r\n return;\r\n }\r\n }\r\n );\r\n } else {\r\n placeCenter(place.geometry);\r\n }\r\n } else {\r\n document.getElementById('autocomplete').placeholder = 'Enter a city';\r\n }\r\n }\r\n\r\n function getTheUSAddress(results) {\r\n for(var i = 0; i < results.length; i++) {\r\n if (results[i].address_components[results[i].address_components.length - 1].short_name == 'US') {\r\n return results[i];\r\n }\r\n }\r\n\r\n return results[0];\r\n }\r\n\r\n function placeCenter(geometry) {\r\n for (var i = 0; i < infoWindows.length; i++) {\r\n infoWindows[i].close();\r\n }\r\n\r\n for (var i = 0; i < markers.length; i++) {\r\n markers[i].setMap(null);\r\n }\r\n\r\n markers = new Array();\r\n infoWindows = [];\r\n addressData = [];\r\n $scope.addressData = [];\r\n $scope.hasMinZoom = false;\r\n\r\n var placeCoords = new google.maps.LatLng(geometry.location.lat(), geometry.location.lng());\r\n\r\n if (boundChangeListener !== null) {\r\n google.maps.event.removeListener(boundChangeListener);\r\n }\r\n\r\n map.setZoom(10);\r\n map.setCenter(placeCoords);\r\n addsBoundChangeListener();\r\n google.maps.event.trigger('bounds_changed');\r\n\r\n scrollTo(document.getElementById('dentists-listings'), 0, 400, i);\r\n }\r\n\r\n // pan to user's location on map if geolocation is turned on\r\n function geolocate() {\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(function (position) {\r\n var geolocation = {\r\n lat: position.coords.latitude,\r\n lng: position.coords.longitude\r\n };\r\n console.log('Your geolocation is: ' + geolocation.lat + ' ' + geolocation.lng);\r\n\r\n if (position) {\r\n var userCoords = new google.maps.LatLng(\r\n position.coords.latitude,\r\n position.coords.longitude\r\n );\r\n if (boundChangeListener !== null) {\r\n google.maps.event.removeListener(boundChangeListener);\r\n }\r\n\r\n map.setZoom(10);\r\n map.setCenter(userCoords);\r\n addsBoundChangeListener();\r\n google.maps.event.trigger('bounds_changed');\r\n }\r\n });\r\n }\r\n }\r\n\r\n function createMarkers(returnVals) {\r\n if (!returnVals || returnVals.length === 0) {\r\n return;\r\n }\r\n\r\n returnVals = returnVals.filter(function (rv) {\r\n return rv !== null && rv.data !== null;\r\n });\r\n returnVals.forEach(function (latLng, index) {\r\n var i = markers.length;\r\n var iconNumber = markers.length + 1;\r\n var mapIcon = {\r\n scaledSize: new google.maps.Size(39, 54),\r\n url:\r\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='39px' height='54px' viewBox='0 0 39 54' version='1.1'%3E%3C!-- Generator: Sketch 59.1 (86144) - https://sketch.com --%3E%3Ctitle%3EGroup 13%3C/title%3E%3Cdesc%3ECreated with Sketch.%3C/desc%3E%3Cg id='Welcome' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Desktop-HD-Copy' transform='translate(-805.000000, -662.000000)'%3E%3Cg id='Group-13' transform='translate(805.000000, 662.000000)'%3E%3Cg id='Group-11'%3E%3Cg id='Oval-2' transform='translate(10.000000, 10.000000)' fill='%23FFFFFF' stroke='%23979797'%3E%3Ccircle id='Oval' cx='9.5' cy='9.5' r='9.5'/%3E%3C/g%3E%3Cg id='Group-12'%3E%3Cg xmlns='http://www.w3.org/2000/svg' id='iconfinder_94_171453' fill='%23\" +\r\n vm.siteContent.site.pages.directory.iconColor +\r\n \"' text-anchor='middle' fill-rule='nonzero'%3E%3Cg id='Shape-2'%3E%3Cpath d='M28.7368421,19.7307692 C28.7368421,24.8906788 24.60136,29.0769231 19.5,29.0769231 C14.3979138,29.0769231 10.2631579,24.8906788 10.2631579,19.7307692 C10.2631579,14.5693833 14.39864,10.3846154 19.5,10.3846154 C24.6024493,10.3842463 28.7368421,14.5690142 28.7368421,19.7307692 M39,19.6364694 C39,8.79133788 30.2700926,0 19.5,0 C8.73067398,0 0,8.79133788 0,19.6364694 C0,24.4047446 1.68948641,28.7767622 4.49699275,32.1775218 L19.5168642,54 L34.7563536,31.8591974 C35.3036736,31.1694298 35.8050003,30.4424404 36.2572675,29.6782291 L36.411345,29.4556734 L36.3860487,29.4556734 C38.0456395,26.5655511 39,23.2148083 39,19.6364694' id='Shape'/%3E%3C/g%3E%3C/g%3E%3Ctext xmlns='http://www.w3.org/2000/svg' id='97' font-family='Sans-Serif' font-size='12' width='30px' font-weight='bold' letter-spacing='-0.133333335' fill='%23737373' style='&%2310;'%3E%3Ctspan xmlns='http://www.w3.org/2000/svg' x='19.1' text-anchor='middle' y='24' style='&%2310;'%3E\" +\r\n iconNumber +\r\n '%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'\r\n };\r\n var marker = new google.maps.Marker({\r\n position: { lat: latLng[0], lng: latLng[1] },\r\n map: map,\r\n title: addressData[i].data.title,\r\n icon: mapIcon,\r\n optimized: false,\r\n animation: google.maps.Animation.DROP\r\n });\r\n\r\n // conditional url on infowindow\r\n var site = '';\r\n if (addressData[i].data.url) {\r\n site =\r\n \"\";\r\n }\r\n\r\n var phone = $filter('phone')(addressData[i].data.phone);\r\n\r\n var pin =\r\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='12px' height='16.9px' viewBox='0 0 39 54' version='1.1'%3E%3C!-- Generator: Sketch 59.1 (86144) - https://sketch.com --%3E%3Ctitle%3EGroup 5%3C/title%3E%3Cdesc%3ECreated with Sketch.%3C/desc%3E%3Cg id='Welcome' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Desktop-HD' transform='translate(-721.000000, -550.000000)'%3E%3Cg id='Group-5' transform='translate(721.000000, 550.000000)'%3E%3Cpath d='M28.7368421,19.7307692 C28.7368421,24.8906788 24.60136,29.0769231 19.5,29.0769231 C14.3979138,29.0769231 10.2631579,24.8906788 10.2631579,19.7307692 C10.2631579,14.5693833 14.39864,10.3846154 19.5,10.3846154 C24.6024493,10.3842463 28.7368421,14.5690142 28.7368421,19.7307692 M39,19.6364694 C39,8.79133788 30.2700926,0 19.5,0 C8.73067398,0 0,8.79133788 0,19.6364694 C0,24.4047446 1.68948641,28.7767622 4.49699275,32.1775218 L19.5168642,54 L34.7563536,31.8591974 C35.3036736,31.1694298 35.8050003,30.4424404 36.2572675,29.6782291 L36.411345,29.4556734 L36.3860487,29.4556734 C38.0456395,26.5655511 39,23.2148083 39,19.6364694' id='Shape' fill='%23\" +\r\n vm.siteContent.site.pages.directory.iconColor +\r\n \"' fill-rule='nonzero'/%3E%3Cg id='Oval-2' transform='translate(10.000000, 10.000000)' fill='%23FFFFFF' stroke='%23979797'%3E%3Ccircle id='Oval' cx='9.5' cy='9.5' r='9.5'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\";\r\n\r\n var addressFull =\r\n addressData[i].data.address.line1 +\r\n (addressData[i].data.address.line2 ? ' ' + addressData[i].data.address.line2 : '') +\r\n '
' +\r\n addressData[i].data.address.city +\r\n ', ' +\r\n addressData[i].data.address.state +\r\n ' ' +\r\n addressData[i].data.address.zipCode;\r\n\r\n // format infowindow\r\n var infowindowContent =\r\n \"
\\\r\n
\" +\r\n addressData[i].data.title +\r\n \"
\\\r\n
\" +\r\n addressFull +\r\n \"
\\\r\n ' +\r\n site +\r\n ' \\\r\n
';\r\n\r\n var infowindow = new google.maps.InfoWindow({\r\n content: infowindowContent\r\n });\r\n\r\n infoWindows.push(infowindow);\r\n\r\n var activeIcon = {\r\n scaledSize: new google.maps.Size(45, 63),\r\n url:\r\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='45px' height='63px' viewBox='0 0 39 54' version='1.1'%3E%3C!-- Generator: Sketch 59.1 (86144) - https://sketch.com --%3E%3Ctitle%3EGroup 13%3C/title%3E%3Cdesc%3ECreated with Sketch.%3C/desc%3E%3Cg id='Welcome' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Desktop-HD-Copy' transform='translate(-805.000000, -662.000000)'%3E%3Cg id='Group-13' transform='translate(805.000000, 662.000000)'%3E%3Cg id='Group-11'%3E%3Cg id='Oval-2' transform='translate(10.000000, 10.000000)' fill='%23FFFFFF' stroke='%23979797'%3E%3Ccircle id='Oval' cx='9.5' cy='9.5' r='9.5'/%3E%3C/g%3E%3Cg id='Group-12'%3E%3Cg xmlns='http://www.w3.org/2000/svg' id='iconfinder_94_171453' fill='%23\" +\r\n vm.siteContent.site.pages.directory.iconColor +\r\n \"' text-anchor='middle' fill-rule='nonzero'%3E%3Cg id='Shape-2'%3E%3Cpath d='M28.7368421,19.7307692 C28.7368421,24.8906788 24.60136,29.0769231 19.5,29.0769231 C14.3979138,29.0769231 10.2631579,24.8906788 10.2631579,19.7307692 C10.2631579,14.5693833 14.39864,10.3846154 19.5,10.3846154 C24.6024493,10.3842463 28.7368421,14.5690142 28.7368421,19.7307692 M39,19.6364694 C39,8.79133788 30.2700926,0 19.5,0 C8.73067398,0 0,8.79133788 0,19.6364694 C0,24.4047446 1.68948641,28.7767622 4.49699275,32.1775218 L19.5168642,54 L34.7563536,31.8591974 C35.3036736,31.1694298 35.8050003,30.4424404 36.2572675,29.6782291 L36.411345,29.4556734 L36.3860487,29.4556734 C38.0456395,26.5655511 39,23.2148083 39,19.6364694' id='Shape'/%3E%3C/g%3E%3C/g%3E%3Ctext xmlns='http://www.w3.org/2000/svg' id='97' font-family='Sans-Serif' font-size='12' width='30px' font-weight='bold' letter-spacing='-0.133333335' fill='%23737373' style='&%2310;'%3E%3Ctspan xmlns='http://www.w3.org/2000/svg' x='19.1' text-anchor='middle' y='24' style='&%2310;'%3E\" +\r\n iconNumber +\r\n '%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'\r\n };\r\n\r\n // setup click event for markers\r\n google.maps.event.addListener(marker, 'click', function () {\r\n // close all infowindows and set active states to false\r\n for (let i = 0; i < infoWindows.length; i++) {\r\n var iconNumber = i + 1;\r\n var icon = {\r\n scaledSize: new google.maps.Size(39, 54),\r\n url:\r\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='39px' height='54px' viewBox='0 0 39 54' version='1.1'%3E%3C!-- Generator: Sketch 59.1 (86144) - https://sketch.com --%3E%3Ctitle%3EGroup 13%3C/title%3E%3Cdesc%3ECreated with Sketch.%3C/desc%3E%3Cg id='Welcome' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Desktop-HD-Copy' transform='translate(-805.000000, -662.000000)'%3E%3Cg id='Group-13' transform='translate(805.000000, 662.000000)'%3E%3Cg id='Group-11'%3E%3Cg id='Oval-2' transform='translate(10.000000, 10.000000)' fill='%23FFFFFF' stroke='%23979797'%3E%3Ccircle id='Oval' cx='9.5' cy='9.5' r='9.5'/%3E%3C/g%3E%3Cg id='Group-12'%3E%3Cg xmlns='http://www.w3.org/2000/svg' id='iconfinder_94_171453' fill='%23\" +\r\n vm.siteContent.site.pages.directory.iconColor +\r\n \"' text-anchor='middle' fill-rule='nonzero'%3E%3Cg id='Shape-2'%3E%3Cpath d='M28.7368421,19.7307692 C28.7368421,24.8906788 24.60136,29.0769231 19.5,29.0769231 C14.3979138,29.0769231 10.2631579,24.8906788 10.2631579,19.7307692 C10.2631579,14.5693833 14.39864,10.3846154 19.5,10.3846154 C24.6024493,10.3842463 28.7368421,14.5690142 28.7368421,19.7307692 M39,19.6364694 C39,8.79133788 30.2700926,0 19.5,0 C8.73067398,0 0,8.79133788 0,19.6364694 C0,24.4047446 1.68948641,28.7767622 4.49699275,32.1775218 L19.5168642,54 L34.7563536,31.8591974 C35.3036736,31.1694298 35.8050003,30.4424404 36.2572675,29.6782291 L36.411345,29.4556734 L36.3860487,29.4556734 C38.0456395,26.5655511 39,23.2148083 39,19.6364694' id='Shape'/%3E%3C/g%3E%3C/g%3E%3Ctext xmlns='http://www.w3.org/2000/svg' id='97' font-family='Sans-Serif' font-size='12' width='30px' font-weight='bold' letter-spacing='-0.133333335' fill='%23737373' style='&%2310;'%3E%3Ctspan xmlns='http://www.w3.org/2000/svg' x='19.1' text-anchor='middle' y='24' style='&%2310;'%3E\" +\r\n iconNumber +\r\n '%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'\r\n };\r\n infoWindows[i].close();\r\n addressData[i].data.active = false;\r\n markers[i].setIcon(icon);\r\n }\r\n\r\n markers[i].setIcon(activeIcon);\r\n\r\n // set the selected listing to active\r\n addressData[i].data.active = true;\r\n\r\n // open infowindow for the clicked marker\r\n infowindow.open(map, marker);\r\n\r\n // scroll to active listing\r\n var elem = document.getElementById('dentist-' + i).offsetTop;\r\n var cont = document.getElementById('dentists-listings').offsetTop;\r\n scrollTo(document.getElementById('dentists-listings'), elem - cont, 400, i);\r\n });\r\n\r\n // infowindow close button event\r\n google.maps.event.addListener(infowindow, 'closeclick', function () {\r\n // set active states to false\r\n for (let i = 0; i < infoWindows.length; i++) {\r\n addressData[i].data.active = false;\r\n var iconNumber = i + 1;\r\n var activeIcon = {\r\n url:\r\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='39px' height='54px' viewBox='0 0 39 54' version='1.1'%3E%3C!-- Generator: Sketch 59.1 (86144) - https://sketch.com --%3E%3Ctitle%3EGroup 13%3C/title%3E%3Cdesc%3ECreated with Sketch.%3C/desc%3E%3Cg id='Welcome' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Desktop-HD-Copy' transform='translate(-805.000000, -662.000000)'%3E%3Cg id='Group-13' transform='translate(805.000000, 662.000000)'%3E%3Cg id='Group-11'%3E%3Cg id='Oval-2' transform='translate(10.000000, 10.000000)' fill='%23FFFFFF' stroke='%23979797'%3E%3Ccircle id='Oval' cx='9.5' cy='9.5' r='9.5'/%3E%3C/g%3E%3Cg id='Group-12'%3E%3Cg xmlns='http://www.w3.org/2000/svg' id='iconfinder_94_171453' fill='%23\" +\r\n vm.siteContent.site.pages.directory.iconColor +\r\n \"' text-anchor='middle' fill-rule='nonzero'%3E%3Cg id='Shape-2'%3E%3Cpath d='M28.7368421,19.7307692 C28.7368421,24.8906788 24.60136,29.0769231 19.5,29.0769231 C14.3979138,29.0769231 10.2631579,24.8906788 10.2631579,19.7307692 C10.2631579,14.5693833 14.39864,10.3846154 19.5,10.3846154 C24.6024493,10.3842463 28.7368421,14.5690142 28.7368421,19.7307692 M39,19.6364694 C39,8.79133788 30.2700926,0 19.5,0 C8.73067398,0 0,8.79133788 0,19.6364694 C0,24.4047446 1.68948641,28.7767622 4.49699275,32.1775218 L19.5168642,54 L34.7563536,31.8591974 C35.3036736,31.1694298 35.8050003,30.4424404 36.2572675,29.6782291 L36.411345,29.4556734 L36.3860487,29.4556734 C38.0456395,26.5655511 39,23.2148083 39,19.6364694' id='Shape'/%3E%3C/g%3E%3C/g%3E%3Ctext xmlns='http://www.w3.org/2000/svg' id='97' font-family='Sans-Serif' font-size='12' width='30px' font-weight='bold' letter-spacing='-0.133333335' fill='%23737373' style='&%2310;'%3E%3Ctspan xmlns='http://www.w3.org/2000/svg' x='19.1' text-anchor='middle' y='24' style='&%2310;'%3E\" +\r\n iconNumber +\r\n '%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'\r\n };\r\n markers[i].setIcon(activeIcon);\r\n }\r\n });\r\n\r\n markers.push(marker);\r\n });\r\n }\r\n\r\n if (map.getZoom() >= 11) {\r\n createMarkers(getPoints());\r\n }\r\n\r\n setTimeout(function () {\r\n geolocate();\r\n }, 1500);\r\n }\r\n\r\n // filter markers based on location\r\n function filterMarkers(locationCoords) {\r\n if (locationCoords) {\r\n var markers_filtered = markers.filter(function (marker, index, array) {\r\n var markerLatLng = new window.google.maps.LatLng(marker.position.lat(), marker.position.lng());\r\n var distance =\r\n google.maps.geometry.spherical.computeDistanceBetween(locationCoords, markerLatLng) *\r\n 0.000621371192;\r\n\r\n // set distance away on listing\r\n $scope.addressData[index].distance = Math.round(distance * 100) / 100;\r\n\r\n var distanceMultiplier = 1609.344000614692 * milesSelection;\r\n\r\n if (\r\n google.maps.geometry.spherical.computeDistanceBetween(locationCoords, markerLatLng) <\r\n distanceMultiplier\r\n ) {\r\n $scope.addressData[index].hide = true;\r\n } else {\r\n $scope.addressData[index].hide = false;\r\n }\r\n return (\r\n google.maps.geometry.spherical.computeDistanceBetween(locationCoords, markerLatLng) <\r\n distanceMultiplier\r\n );\r\n });\r\n } else {\r\n // handle reset maps - show all listings\r\n console.log('Resetting listings');\r\n for (var i = 0; i < $scope.addressData.length; i++) {\r\n $scope.addressData[i].data.hide = false;\r\n }\r\n }\r\n }\r\n\r\n // clear map zoom\r\n function resetMap() {\r\n map.fitBounds(bounds);\r\n filterMarkers(null);\r\n }\r\n\r\n // on find autocomplete button click\r\n function triggerAc() {\r\n if (autocomplete.getPlace()) {\r\n // if autocomplete location is selected\r\n google.maps.event.trigger(autocomplete, 'place_changed');\r\n }\r\n }\r\n\r\n // on listing click\r\n function triggerClick(i) {\r\n google.maps.event.trigger(markers[i], 'click');\r\n }\r\n\r\n // scroll to selected listing\r\n function scrollTo(element, to, duration) {\r\n var start = element.scrollTop,\r\n change = to - start,\r\n currentTime = 0,\r\n increment = 20;\r\n\r\n var animateScroll = function () {\r\n currentTime += increment;\r\n var val = Math.easeInOutQuad(currentTime, start, change, duration);\r\n element.scrollTop = val;\r\n if (currentTime < duration) {\r\n setTimeout(animateScroll, increment);\r\n }\r\n };\r\n animateScroll();\r\n }\r\n\r\n // scroll animation timing\r\n Math.easeInOutQuad = function (t, b, c, d) {\r\n t /= d / 2;\r\n if (t < 1) return (c / 2) * t * t + b;\r\n t--;\r\n return (-c / 2) * (t * (t - 2) - 1) + b;\r\n };\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('app.benefit-info', []);\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('app.benefit-info').config(['$stateProvider', '$urlRouterProvider', benefitInfoRoutes]);\r\n\r\n function benefitInfoRoutes($stateProvider, $urlRouterProvider) {\r\n $stateProvider.state('app.benefit-info', {\r\n url: '/benefit-info',\r\n templateUrl: '/app/site/benefit-info/benefit-info.template.html',\r\n controller: 'app.benefit-info.controller'\r\n });\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.benefit-info')\r\n .controller('app.benefit-info.controller', ['$scope', '$http', benefitInfoController]);\r\n\r\n function benefitInfoController($scope, $http) {\r\n // $scope.privacyPolicyHtml = '';\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n\r\n 'use strict';\r\n\r\n angular.module('app.activation', []);\r\n})(angular);","(function (angular) {\r\n angular.module('app.activation').service('ActivationService', ['$http', 'config', function activationService($http, config) {\r\n var service = {\r\n isExistingUserActive: isExistingUserActive,\r\n getUserIdByEmail: getUserIdByEmail,\r\n activateExistingUserAccount: activateExistingUserAccount,\r\n checkActivationStatus: checkActivationStatus\r\n }\r\n\r\n return service;\r\n\r\n function isExistingUserActive(user) {\r\n var url = environment.treatmentApiUrl + \"purchase/check-msdp-activation\";\r\n return $http.post(url, user);\r\n };\r\n\r\n function getUserIdByEmail(email) {\r\n var url = environment.treatmentApiUrl + \"purchase/get-user-id?email=\" + email;\r\n return $http.get(url, email);\r\n };\r\n\r\n function activateExistingUserAccount(user) {\r\n var url = environment.treatmentApiUrl + \"purchase/activate-msdp-user\";\r\n return $http.post(url, user);\r\n };\r\n\r\n function checkActivationStatus(userId) {\r\n var url = environment.treatmentApiUrl + \"purchase/check-activation-no-external\";\r\n return $http.post(url, userId);\r\n };\r\n }]);\r\n})(angular);","(function(angular) {\r\n angular.module('app.activation').config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('activation', {\r\n url: '/activate',\r\n templateUrl: '/app/site/activation-flow/activate-user.template.html',\r\n controller: 'app.activation.ActivateUserController',\r\n controllerAs: 'vmActivateAccount'\r\n });\r\n }]);\r\n\r\n})(angular);","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('app.activation').controller('app.activation.ActivateUserController', [\r\n 'ActivationService',\r\n 'ui',\r\n '$location',\r\n function ActivateUserController(service, ui, location) {\r\n var vm = this;\r\n\r\n //Model Properties\r\n vm.newPassword = '';\r\n vm.hidePassword = true;\r\n vm.confirmPassword = '';\r\n vm.hideConfirmPassword = true;\r\n vm.accountAlreadyExists = false;\r\n vm.emailAlreadyExists = false;\r\n vm.passwordPattern = '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*]).{8,}$';\r\n vm.memberPortalSignIn = environment.memberPortalUrl;\r\n vm.userId = retrieveIdFromUrl();\r\n\r\n vm.user = {\r\n lastName: '',\r\n birthDate: '',\r\n memberId: '',\r\n email: '',\r\n userId: '',\r\n password: '',\r\n zipCode: ''\r\n };\r\n\r\n if (vm.userId !== null) {\r\n ui.block();\r\n skipFirstStep();\r\n }\r\n\r\n //Form Wizard properties\r\n vm.currentStep = 'activate-account-pg-one';\r\n vm.isActivateTransitionAnimtation = false;\r\n vm.activated = false;\r\n\r\n //Controller Actions\r\n vm.activateAccount = activateAccount;\r\n vm.gotoNextStep = gotoNextStep;\r\n vm.goToActivateAccount = goToActivateAccount;\r\n vm.manageFormWizard = manageFormWizard;\r\n vm.noMatch = noMatch;\r\n\r\n if (environment.cookieDomain !== '') {\r\n document.cookie = 'patolus.identity' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';\r\n document.cookie =\r\n 'patolus.identity' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;domain=' + environment.cookieDomain;\r\n } else {\r\n document.cookie = 'patolus.identity' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';\r\n document.cookie = 'patolus.identity' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT';\r\n }\r\n\r\n //retrieve member id from query parameter\r\n function retrieveIdFromUrl() {\r\n var userId = location.search().id;\r\n if (userId) {\r\n return userId;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n function hideWizardButtons() {\r\n // Locate the desired step to navigate to\r\n var destinationStepNumber = 'activate-account-pg-two';\r\n\r\n // Hide current step\r\n var elementCurrentStep = document.getElementById(vm.currentStep);\r\n elementCurrentStep.classList.add('hidden');\r\n\r\n // Show destination step\r\n var elementDestinationStep = document.getElementById(destinationStepNumber);\r\n elementDestinationStep.classList.remove('hidden');\r\n\r\n // Update Indicator\r\n var currenIndicatorId = 'i-' + vm.currentStep;\r\n var nextIndicatorId = 'i-' + destinationStepNumber;\r\n\r\n var elementCurrentStepIndicator = document.getElementById(currenIndicatorId);\r\n var elementNextStepIndicator = document.getElementById(nextIndicatorId);\r\n\r\n elementCurrentStepIndicator.classList.add('hidden');\r\n\r\n if (elementNextStepIndicator) {\r\n elementNextStepIndicator.classList.add('hidden');\r\n }\r\n\r\n // Finally keep track of where we are\r\n vm.currentStep = destinationStepNumber;\r\n }\r\n\r\n vm.togglePassword = function () {\r\n vm.hidePassword = !vm.hidePassword;\r\n };\r\n\r\n vm.toggleConfirmPassword = function () {\r\n vm.hideConfirmPassword = !vm.hideConfirmPassword;\r\n };\r\n\r\n //Check that both passwords match\r\n function noMatch() {\r\n return !(vm.user.password === vm.confirmPassword);\r\n }\r\n\r\n function goToActivateAccount($event) {\r\n vm.manageFormWizard($event);\r\n }\r\n\r\n function skipFirstStep() {\r\n vm.user.userId = vm.userId;\r\n service\r\n .checkActivationStatus(vm.user)\r\n .then(function fulfilled(response) {\r\n handleActivationCheckResponse(response);\r\n })\r\n .catch(function rejected(response) {\r\n ui.handleError(response);\r\n })\r\n .finally(function final() {\r\n ui.unblock();\r\n });\r\n }\r\n\r\n function handleActivationCheckResponse(resp) {\r\n //If a user exists\r\n //AND they have a login, then they've already been activated so redirect\r\n if (resp.data.userName != null) {\r\n window.location = vm.memberPortalSignIn;\r\n }\r\n\r\n if (resp.data.userId != null) {\r\n hideWizardButtons();\r\n }\r\n\r\n //If the user doesn't exist at all, throw an error. New users can not be added form the activate page.\r\n if (resp.data.notFound === true) {\r\n ui.error('Account not found');\r\n }\r\n }\r\n\r\n ////Form Wizard helper functions\\\\\\\\\r\n function gotoNextStep($event, formValid) {\r\n //Ensure the form inputs are valid before continuing. This prevents the user from moving forward\r\n //with the \"step\" indicator at the bottom of the page, unless the form is valid.\r\n if (!formValid) {\r\n ui.warning('Please complete all required inputs before continuing');\r\n return;\r\n }\r\n\r\n ui.block();\r\n\r\n //Check for an existing user. If the user exist, check if the user has been \"activated\" (i.e. whether they have a login email)\r\n service\r\n .isExistingUserActive(vm.user)\r\n .then(function fulfilled(response) {\r\n // There can only be one.\r\n if (response.data.searchResultCount !== 1) {\r\n ui.error(\r\n 'We are unable to uniquely identify this account. To complete this activation please contact Wellfit customer service.'\r\n );\r\n ui.unblock();\r\n }\r\n\r\n //If a user exists that matches all 3 properties (lastName, birthDate, and zipcode),\r\n //AND they have a login, then they've already been activated so show an error\r\n if (response.data.userName != null) {\r\n vm.accountAlreadyExists = true;\r\n ui.warning('A login already exists for this user.');\r\n ui.unblock();\r\n return;\r\n }\r\n\r\n //If a user already exists that matches all 3 properties (lastName, birthDate, and zipcode),\r\n //but they do NOT have a login (i.e. userId), then take them to the next page to be activated\r\n if (response.data.userId != null) {\r\n vm.user.userId = response.data.userId;\r\n manageFormWizard($event);\r\n }\r\n })\r\n .catch(function rejected(response) {\r\n ui.handleError(response);\r\n ui.unblock();\r\n });\r\n }\r\n\r\n function activateAccount($event) {\r\n ui.block();\r\n\r\n //See if the email is already in use by another user\r\n service\r\n .getUserIdByEmail(vm.user.email)\r\n .then(function fulfilled(response) {\r\n //If response contains a userId then let the user know the email already exists\r\n if (response.data != null && response.data != '' && !vm.shouldMergeExistingAccounts) {\r\n vm.emailAlreadyExists = true;\r\n ui.warning('The email entered is already in use.');\r\n ui.unblock();\r\n } else {\r\n //Activate the User\r\n service\r\n .activateExistingUserAccount(vm.user, vm.shouldMergeExistingAccounts)\r\n .then(function fulfilled(response) {\r\n vm.activated = true;\r\n vm.manageFormWizard($event);\r\n })\r\n .catch(function rejected(response) {\r\n ui.handleError(response);\r\n ui.unblock();\r\n });\r\n }\r\n })\r\n .catch(function rejected(response) {\r\n ui.handleError(response);\r\n ui.unblock();\r\n });\r\n }\r\n\r\n //Form Wizard\r\n function manageFormWizard($event) {\r\n // Animation\r\n vm.isActivateTransitionAnimaation = true;\r\n setTimeout(function transitionAnimation() {\r\n vm.isActivateTransitionAnimtation = false;\r\n }, 100);\r\n\r\n // Locate the desired step to navigate to\r\n var destinationStepNumber = $event.currentTarget.getAttribute('data-destination-step');\r\n\r\n // Hide current step\r\n var elementCurrentStep = document.getElementById(vm.currentStep);\r\n elementCurrentStep.classList.add('hidden');\r\n\r\n // Show destination step\r\n var elementDestinationStep = document.getElementById(destinationStepNumber);\r\n elementDestinationStep.classList.remove('hidden');\r\n\r\n // Update Indicator\r\n var currenIndicatorId = 'i-' + vm.currentStep;\r\n var nextIndicatorId = 'i-' + destinationStepNumber;\r\n\r\n var elementCurrentStepIndicator = document.getElementById(currenIndicatorId);\r\n var elementNextStepIndicator = document.getElementById(nextIndicatorId);\r\n\r\n elementCurrentStepIndicator.classList.remove('active');\r\n\r\n if (elementNextStepIndicator) {\r\n elementNextStepIndicator.classList.add('active');\r\n }\r\n\r\n // Finally keep track of where we are\r\n vm.currentStep = destinationStepNumber;\r\n\r\n // Unblock (moved from individual functions in order to keep spinner until whole call end)\r\n ui.unblock();\r\n }\r\n\r\n ////END Form Wizard helper functions//////\r\n }\r\n ]);\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('app').controller('app.footerController', ['$location', footerController]);\r\n\r\n function footerController($location) {\r\n var vm = this;\r\n vm.siteContent = siteContent;\r\n\r\n vm.isWelcomePage = $location.path().toString() === '/welcome';\r\n onInit();\r\n\r\n function onInit() {\r\n getYear();\r\n console.log('in footer: ', vm.siteContent.site.footer.texts);\r\n if(vm.siteContent.site.footer.texts.length === 3){\r\n vm.siteContent.site.footer.texts.pop();\r\n }\r\n }\r\n\r\n function getYear() {\r\n var today = new Date();\r\n vm.currentYear = today.getFullYear();\r\n }\r\n }\r\n})(angular);\r\n","(function (angular){\r\n\r\n 'use strict';\r\n\r\n angular.module('app')\r\n .controller('app.contactUsFormController', ['$uibModal', 'util', 'ui', '$http', contactUsFormController]);\r\n\r\n function contactUsFormController($uibModal, util, ui, $http) {\r\n var vm = this;\r\n // Properties\r\n vm.contactUs = {\r\n name: '',\r\n email: '',\r\n message:'',\r\n planEmail: planEmail,\r\n planName: planName\r\n };\r\n vm.formDefaults = {};\r\n\r\n // Actions\r\n vm.sendEmail = sendEmail;\r\n\r\n onInit();\r\n\r\n function onInit() {\r\n vm.formDefaults = angular.copy(vm.contactUs);\r\n getYear();\r\n }\r\n\r\n function getYear(){\r\n var today = new Date();\r\n vm.currentYear = today.getFullYear();\r\n }\r\n\r\n function sendEmail(contactUsForm) {\r\n \r\n ui.block();\r\n\r\n sendContactUsEmail(vm.contactUs)\r\n .then(function successful(response) {\r\n\r\n $uibModal.open({\r\n templateUrl: '/app/layout/contact-us/modals/email-sent-modal.html',\r\n keyboard: false,\r\n windowTopClass: 'patolus-modal-backdrop'\r\n });\r\n\r\n formReset(contactUsForm);\r\n })\r\n .catch(function rejected(response) {\r\n ui.handleError(response);\r\n })\r\n .finally(function final() {\r\n ui.unblock();\r\n })\r\n }\r\n\r\n function sendContactUsEmail(data) {\r\n\r\n var url = environment.salesApiUrl + 'contact-us/send-email';\r\n\r\n return $http.post(url, data);\r\n }\r\n \r\n function formReset(contactUsForm) {\r\n \r\n // Load form defaults\r\n vm.contactUs = angular.copy(vm.formDefaults);\r\n\r\n // Reset form validation aspects\r\n contactUsForm.$setPristine();\r\n contactUsForm.$setUntouched();\r\n }\r\n }\r\n \r\n}(angular));","(function (angular) {\r\n\r\n angular.module(\"app\")\r\n .directive(\"validateEmailUniqueness\", [\"app.purchase.purchaseFlowService\", \"$http\", \"$q\", func]); \r\n function func(service, $http, $q) {\r\n // requires an isolated model\r\n return {\r\n // restrict to an attribute type.\r\n restrict: \"A\",\r\n // element must have ng-model attribute.\r\n require: \"ngModel\",\r\n link: function (scope, ele, attrs, ctrl) {\r\n ctrl.$asyncValidators.validateEmail = function (mValue, vValue) {\r\n scope.emailSpinner = true;\r\n return service.validateEmailAddress(vValue).then(function (response) {\r\n ctrl.$setValidity(\"unique\", response.data.wasUnique);\r\n if (!response.data) {\r\n $q.reject();\r\n } else {\r\n $q.resolve();\r\n }\r\n scope.emailSpinner = false;\r\n }, function () {\r\n $q.reject();\r\n scope.emailSpinner = false;\r\n });\r\n }\r\n }\r\n }\r\n }\r\n})(angular);","(function(angular) {\r\n\r\n angular.module('app')\r\n .directive(\"validateDate\",\r\n function() {\r\n // requires an isloated model\r\n return {\r\n // restrict to an attribute type.\r\n restrict: 'A',\r\n // element must have ng-model attribute.\r\n require: 'ngModel',\r\n link: function(scope, ele, attrs, ctrl) {\r\n\r\n // add a parser that will process each time the value is\r\n // parsed into the model when the user updates it.\r\n ctrl.$parsers.unshift(function (value) {\r\n var valid;\r\n\r\n if (value) {\r\n \r\n var month = value.slice(0, 2);\r\n var day = value.slice(3, 5);\r\n var year = value.slice(6);\r\n\r\n var valueValid;\r\n valueValid = month < 13 && month > 0;\r\n valueValid = valueValid && day > 0 && day < 32;\r\n \r\n ctrl.$setValidity('badDateValue', valueValid);\r\n\r\n valid = birthDateValid;\r\n }\r\n\r\n // if it's valid, return the value to the model,\r\n // otherwise return undefined.\r\n return valid ? value : undefined;\r\n });\r\n\r\n }\r\n }\r\n });\r\n\r\n})(angular);","(function (angular) {\r\n // Determines whether an input element contains a valid credit card number\r\n angular.module('app').directive('creditCardType', function () {\r\n var directive =\r\n {\r\n require: 'ngModel',\r\n link: function (scope, elm, attrs, ctrl) {\r\n ctrl.$parsers.unshift(function (value) {\r\n\r\n // remove spaces and dashes from the value\r\n var number = value.replace(/[ -]+/g, '');\r\n\r\n // validate that the number is a valid card number\r\n // documentation on the credit card validation regex can be found here:\r\n // http://www.regular-expressions.info/creditcard.html\r\n\r\n var creditCardValidator = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\\d{3})\\d{11})$/;\r\n var result = creditCardValidator.test(number);\r\n\r\n ctrl.$setValidity('invalid', result);\r\n return value;\r\n });\r\n }\r\n };\r\n return directive;\r\n }\r\n );\r\n})(angular);","(function (angular) {\r\n // Determines whether an input element contains a valid credit card expiration date\r\n angular.module('app').directive('creditCardExpiration', function () {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, elem, attrs, ctrl) {\r\n elem.on('change', function () {\r\n\r\n var date = moment(this.value, 'MM/YY');\r\n\r\n ctrl.$setValidity('valid', date._isValid && date.diff(moment(), 'months') >= 0);\r\n\r\n ctrl.$setTouched();\r\n\r\n // apply changes on scope\r\n scope.$apply();\r\n });\r\n }\r\n };\r\n }\r\n );\r\n})(angular);","(function(angular) {\r\n\r\n angular.module('app')\r\n .directive(\"validateBirthDate\",\r\n function() {\r\n // requires an isloated model\r\n return {\r\n // restrict to an attribute type.\r\n restrict: 'A',\r\n // element must have ng-model attribute.\r\n require: 'ngModel',\r\n link: function(scope, ele, attrs, ctrl) {\r\n\r\n // add a parser that will process each time the value is\r\n // parsed into the model when the user updates it.\r\n ctrl.$parsers.unshift(function (value) {\r\n var valid;\r\n\r\n if (value) {\r\n \r\n var month = value.slice(0, 2);\r\n var day = value.slice(3, 5);\r\n var year = value.slice(6);\r\n\r\n var valueValid;\r\n valueValid = month < 13 && month > 0;\r\n valueValid = valueValid && day > 0 && day < 32;\r\n \r\n ctrl.$setValidity('badDateValue', valueValid);\r\n\r\n var birthdate = new Date(year, month - 1, day); // Month is zero based for this method, hence the minus 1 adjustment\r\n var today18 = new Date();\r\n today18.setYear(today18.getUTCFullYear() - 18);\r\n\r\n var birthDateValid = birthdate < today18;\r\n ctrl.$setValidity('over18', birthDateValid);\r\n\r\n valid = birthDateValid && valueValid;\r\n }\r\n\r\n // if it's valid, return the value to the model,\r\n // otherwise return undefined.\r\n return valid ? value : undefined;\r\n });\r\n\r\n }\r\n }\r\n });\r\n\r\n})(angular);","(function(angular) {\r\n\r\n angular.module('app')\r\n .directive(\"validateFutureDate\",\r\n function() {\r\n // requires an isloated model\r\n return {\r\n // restrict to an attribute type.\r\n restrict: 'A',\r\n // element must have ng-model attribute.\r\n require: 'ngModel',\r\n link: function(scope, ele, attrs, ctrl) {\r\n\r\n // add a parser that will process each time the value is\r\n // parsed into the model when the user updates it.\r\n ctrl.$parsers.unshift(function (value) {\r\n var valid;\r\n\r\n if (value) {\r\n \r\n var month = value.slice(0, 2);\r\n var day = value.slice(3, 5);\r\n var year = value.slice(6);\r\n\r\n var valueValid;\r\n valueValid = month < 13 && month > 0;\r\n valueValid = valueValid && day > 0 && day < 32;\r\n\r\n var today = new Date();\r\n var birthdate = new Date(year, month - 1, day);\r\n var futureDate = birthdate < today;\r\n \r\n ctrl.$setValidity('futureDate', futureDate);\r\n\r\n valid = futureDate && valueValid;\r\n }\r\n\r\n // if it's valid, return the value to the model,\r\n // otherwise return undefined.\r\n return valid ? value : undefined;\r\n });\r\n\r\n }\r\n }\r\n });\r\n\r\n})(angular);","(function (angular) {\r\n\r\n\r\n angular.module('app').directive('body', body);\r\n\r\n function body() {\r\n return {\r\n restrict: 'E',\r\n link: function (scope, $element) {\r\n $element.on('click', 'a[href=#]', function (e) {\r\n e.preventDefault();\r\n });\r\n\r\n if ($('body').hasClass('mobile')) {\r\n var elements = 'input[type=\"text\"],input[type=\"password\"],input[type=\"date\"],input[type=\"number\"],input[type=\"email\"],select,textarea';\r\n $element.on('focusin', elements, function (e) {\r\n $('body').addClass('keyboardOpen');\r\n });\r\n $element.on('focusout', elements, function (e) {\r\n $('body').removeClass('keyboardOpen');\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n})(angular);","(function (angular) {\r\n angular.module('app').directive('form', function () {\r\n return {\r\n restrict: 'E',\r\n link: function (scope, elem) {\r\n elem.on('submit', function () {\r\n if ($('body').hasClass('mobile')) {\r\n var elements = 'input[type=\"text\"],input[type=\"password\"],input[type=\"date\"],input[type=\"number\"],input[type=\"email\"],select,textarea';\r\n elem.find(elements).blur();\r\n }\r\n\r\n scope.$broadcast('form:submit');\r\n });\r\n }\r\n };\r\n\r\n });\r\n})(angular);","(function (angular) {\r\n angular.module('app').directive('scroll', ['$window', function ($window) {\r\n return function (scope, element, attrs) {\r\n angular.element($window).bind(\"mousewheel onmousewheel touchmove\", function (event) {\r\n if ($('body').hasClass('mobile') && $('body').hasClass('keyboardOpen')) {\r\n var elements = 'input[type=\"text\"],input[type=\"password\"],input[type=\"date\"],input[type=\"number\"],input[type=\"email\"],select,textarea';\r\n $(elements).blur();\r\n }\r\n });\r\n };\r\n }]);\r\n})(angular);","(function (angular) {\r\n angular.module('app')\r\n .directive('currencyformatter', ['$filter', function ($filter) {\r\n return {\r\n require: 'ngModel',\r\n scope: {\r\n restriction: '@'\r\n },\r\n link: function (scope, element, attrs, ctrl) {\r\n ctrl.$formatters.push(function (data) {\r\n // convert data to currency format\r\n var formatted = $filter('currency')(data);\r\n return formatted;\r\n });\r\n }\r\n }\r\n }]);\r\n})(angular);","(function (angular) {\r\n 'use strict';\r\n angular\r\n .module('app')\r\n .filter('trustAsHtmlFilter', function ($sce) {\r\n return function (html) {\r\n return $sce.trustAsHtml(html);\r\n };\r\n });\r\n})(angular);","(function (angular) {\r\n\r\n angular.module('app')\r\n .filter('timer', [function() {\r\n return function(seconds) {\r\n return new Date(1970, 0, 1).setSeconds(seconds);\r\n };\r\n }]);\r\n})(angular);","(function (angular) {\r\n angular.module('app').filter('phone', function () {\r\n return function (tel) {\r\n if (!tel) { return ''; }\r\n\r\n var value = tel.toString().trim().replace(/^\\+/, '').replace(/\\D/g, '');\r\n\r\n if (value.match(/^[0-9]{4}$/)) {\r\n return '(***) ***-' + value;\r\n }\r\n\r\n if (value.match(/[^0-9]/)) {\r\n return tel;\r\n }\r\n\r\n var country, city, number;\r\n\r\n switch (value.length) {\r\n case 10: // +1PPP####### -> C (PPP) ###-####\r\n country = 1;\r\n city = value.slice(0, 3);\r\n number = value.slice(3);\r\n break;\r\n\r\n case 11: // +CPPP####### -> CCC (PP) ###-####\r\n country = value[0];\r\n city = value.slice(1, 4);\r\n number = value.slice(4);\r\n break;\r\n\r\n case 12: // +CCCPP####### -> CCC (PP) ###-####\r\n country = value.slice(0, 3);\r\n city = value.slice(3, 5);\r\n number = value.slice(5);\r\n break;\r\n\r\n default:\r\n return tel;\r\n }\r\n\r\n if (country == 1) {\r\n country = \"\";\r\n }\r\n\r\n number = number.slice(0, 3) + '-' + number.slice(3);\r\n\r\n return (country + \" (\" + city + \") \" + number).trim();\r\n };\r\n });\r\n})(angular);","(function (angular) {\r\n angular.module('app').filter('nfcurrency', ['$filter', '$locale', function ($filter, $locale) {\r\n var currency = $filter('currency'), formats = $locale.NUMBER_FORMATS;\r\n return function (amount, symbol) {\r\n var value = currency(amount, symbol);\r\n return value.replace(new RegExp('\\\\' + formats.DECIMAL_SEP + '\\\\d{2}'), '');\r\n }\r\n }]);\r\n})(angular);","(function (angular) {\r\n\r\n angular.module('app')\r\n .filter('highlight', ['$sce', function ($sce) {\r\n return function (text, phrase) {\r\n if (phrase && text)\r\n text = text.replace(new RegExp('(' + phrase + ')', 'gi'),\r\n '$1');\r\n\r\n return $sce.trustAsHtml(text);\r\n }\r\n }\r\n ]);\r\n})(angular);","(function (angular) {\r\n /**\r\n * Directive to scroll the page to an element when a certain condition is true\r\n */\r\n angular.module('app').directive('scrollIf', function () {\r\n return function (scope, element, attributes) {\r\n setTimeout(function () {\r\n if (scope.$eval(attributes.scrollIf)) {\r\n window.scrollTo(0, element[0].offsetTop - 100);\r\n }\r\n });\r\n }\r\n });\r\n})(angular);","(function (angular) {\r\n /**\r\n * Directive to include an external HTML fragment.\r\n * Similar to ng-include with additional callbacks for loaded, and failed events\r\n */\r\n angular.module('app')\r\n .directive(\"pdsInclude\", function () {\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n pdsInclude: '=',\r\n pdsIncludeOnLoading: '&',\r\n pdsIncludeOnFailed: '&',\r\n pdsIncludeOnLoaded: '&'\r\n },\r\n link: function(scope, element, attrs, controller) {\r\n scope.$on('$includeContentRequested', function(event, url) {\r\n if (scope.pdsIncludeOnLoading) {\r\n scope.pdsIncludeOnLoading({event: event, url: url});\r\n }\r\n });\r\n\r\n scope.$on('$includeContentLoaded', function(event, url) {\r\n if (scope.pdsIncludeOnLoaded) {\r\n scope.pdsIncludeOnLoaded({event: event, url: url});\r\n }\r\n });\r\n\r\n scope.$on('$includeContentError', function(event, url) {\r\n if (scope.pdsIncludeOnFailed) {\r\n scope.pdsIncludeOnFailed({event: event, url: url});\r\n }\r\n });\r\n },\r\n template: \"
\"\r\n };\r\n });\r\n\r\n})(angular);","(function (angular) {\r\n /**\r\n * Directive to broadcast when the enter button has been pressed\r\n */\r\n angular.module('app')\r\n .directive('keypressEvents', ['$document', '$rootScope', function ($document, $rootScope) {\r\n return {\r\n restrict: 'A',\r\n link: function () {\r\n $document.bind('keypress', function (e) {\r\n if (e.charCode === 13) {\r\n $rootScope.$broadcast('keypress', e, String.fromCharCode(e.which));\r\n }\r\n });\r\n }\r\n }\r\n }]);\r\n\r\n})(angular);","(function (angular) {\r\n /**\r\n * Directive to broadcast when the enter button has been pressed\r\n */\r\n angular.module('app')\r\n .directive('compile', ['$compile', function($compile) {\r\n return function(scope, element, attrs) {\r\n scope.$watch(\r\n function(scope) {\r\n return scope.$eval(attrs.compile);\r\n },\r\n function(value) {\r\n element.html(value);\r\n $compile(element.contents())(scope);\r\n }\r\n )};\r\n \r\n }]);\r\n})(angular);","(function (angular) {\r\n\tangular.module('app.offline', []);\r\n}(angular));\r\n\r\n","(function (angular) {\r\n\tangular.module('app.offline').config(['$stateProvider', function ($stateProvider) {\r\n\r\n\t\t$stateProvider.state('offline', {\r\n\t\t\turl: '/offline',\r\n templateUrl: '/app/offline/offline.html'\r\n\t\t});\r\n\r\n\t}]);\r\n\r\n}(angular));\r\n\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .controller('app.mainController', ['$rootScope', '$scope', '$state', '$timeout', '$uibModal', mainController]);\r\n\r\n function mainController($rootScope, $scope, $state, $timeout, $uibModal) {\r\n var vm = this;\r\n vm.$state = $state;\r\n $scope.localState = '';\r\n vm.on = true;\r\n vm.ogSgdpHeader = true;\r\n $rootScope.locationModalOpen = false;\r\n vm.isOpenLocationModal = $rootScope.isOpenLocationModal;\r\n $scope.$watch('$rootScope.isOpenLocationModal', function (newVal, oldVal) {\r\n if (newVal == true) {\r\n $timeout(function () {\r\n openLocationModal(true);\r\n }, 200);\r\n $rootScope.isOpenLocationModal = null;\r\n }\r\n });\r\n\r\n initialize();\r\n\r\n function initialize() {\r\n if (!$scope.localState) {\r\n $timeout(function () {\r\n openLocationModal(false);\r\n }, 200);\r\n }\r\n // openLocationModal();\r\n // launchInvite();\r\n }\r\n\r\n function openLocationModal(isForce) {\r\n if ((!$rootScope.locationModalOpen || isForce) && !siteContent.hideLocationModal) {\r\n $rootScope.locationModalOpen = true;\r\n $uibModal\r\n .open({\r\n templateUrl: '/app/site/landing-flow/location/location-modal.html',\r\n controller: 'app.landing.locationModalController',\r\n controllerAs: 'vm',\r\n keyboard: false\r\n })\r\n .result.then(function fulfilled(state) {\r\n vm.on = false;\r\n $scope.$apply();\r\n $scope.localState = state;\r\n if (state == 'CA') {\r\n vm.ogSgdpHeader = false;\r\n } else {\r\n vm.ogSgdpHeader = true;\r\n }\r\n vm.on = true;\r\n });\r\n }\r\n }\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.layout', ['ui.router', 'ui.bootstrap']);\r\n \r\n}(angular));\r\n","(function (angular) {\r\n angular.module('app.errors', []);\r\n\r\n angular.module('app.errors').run(['$rootScope', '$state', function ($rootScope, $state) {\r\n $rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, error) {\r\n event.preventDefault();\r\n $state.go('error', { error: error });\r\n });\r\n }]);\r\n\r\n angular.module('app.errors').config(['$stateProvider', function ($stateProvider) {\r\n\r\n $stateProvider.state('not-found', {\r\n url: '/not-found',\r\n templateUrl: '/app/errors/not-found.html'\r\n });\r\n\r\n $stateProvider.state('error', {\r\n url: '/error',\r\n templateUrl: '/app/errors/error.html',\r\n params: {\r\n error: null\r\n },\r\n controller : ['$scope', '$stateParams', function($scope, $stateParams) {\r\n $scope.error = $stateParams.error;\r\n }]\r\n });\r\n\r\n $stateProvider.state('unauthorized', {\r\n url: '/unauthorized',\r\n templateUrl: '/app/errors/unauthorized.html'\r\n });\r\n\r\n $stateProvider.state('under-construction', {\r\n url: '/under-construction',\r\n templateUrl: '/app/errors/under-construction.html',\r\n controller: 'app.under-construction.controller',\r\n controllerAs: 'vmConstruction',\r\n resolve: {\r\n previousState: [\"$state\", function previousState($state) {\r\n var currentStateData = {\r\n name: $state.current.name,\r\n params: $state.params,\r\n url: $state.href($state.current.name, $state.params)\r\n };\r\n return currentStateData;\r\n }]\r\n }\r\n });\r\n\r\n }]);\r\n\r\n}(angular));\r\n\r\n","(function (angular) {\r\n\r\n 'use strict';\r\n angular\r\n .module('app.errors')\r\n .controller('app.under-construction.controller', ['previousState', underConstructionController]);\r\n\r\n function underConstructionController(previousState) {\r\n var vm = this;\r\n vm.backUrl = previousState.name;\r\n }\r\n\r\n})(angular);","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .factory('app.paymentService', ['$q', '$http', 'payments', 'ui', paymentService]);\r\n\r\n /**\r\n * Payment Service responsible for communicating with our payment processor, Vantiv.\r\n * @param {any} $q\r\n * @param {any} $http\r\n * @param {any} util\r\n * @param {any} config\r\n */\r\n function paymentService($q, $http, payments, ui) {\r\n\r\n return {\r\n tokenizePaymentMethod: tokenizePaymentMethod\r\n };\r\n\r\n /**\r\n * Passes user payment information, such as credit card, to EProtect. This ensures\r\n * Vantiv manages and secures user payment information.\r\n * @param {any} formFields\r\n * @returns {object} An object representing the eProtect / payPage registration, which includes the unique ID for the\r\n * payment method\r\n */\r\n function tokenizePaymentMethod(accountNumber, cvv) {\r\n\r\n var settings = {\r\n payPageId: environment.payPageId,\r\n reportGroup: environment.reportGroup,\r\n eProtectUrl: environment.eProtectUrl\r\n };\r\n\r\n var id = generateOrderId();\r\n\r\n var litleRequest = {\r\n \"paypageId\": settings.payPageId,\r\n \"reportGroup\": settings.reportGroup,\r\n \"orderId\": id,\r\n \"id\": id,\r\n \"url\": settings.eProtectUrl\r\n };\r\n\r\n // Needed to make the Vantiv js library happy\r\n var formFields = {\r\n \"accountNum\": document.getElementById('accountNumber'),\r\n \"cvv2\": document.getElementById('securityCode'),\r\n \"paypageRegistrationId\": document.getElementById('response$paypageRegistrationId'),\r\n \"bin\": document.getElementById('response$bin')\r\n };\r\n\r\n formFields.accountNum.value = accountNumber;\r\n formFields.cvv2.value = cvv;\r\n var litleResponse = $q.defer();\r\n new LitlePayPage().sendToLitle(litleRequest,\r\n formFields,\r\n function success(response) {\r\n litleResponse.resolve(response);\r\n },\r\n function error(response) {\r\n var processor = new payments.litlePaypageErrorProcessor();\r\n if (response && response.response) {\r\n ui.error(processor.generateErrorMessage(response.response));\r\n } else {\r\n ui.error(processor.generateErrorMessage(null));\r\n }\r\n \r\n ui.unblock();\r\n litleResponse.reject();\r\n },\r\n function timeout() {\r\n ui.error(\"We are experiencing technical difficulties. Please try again later.\");\r\n ui.unblock()\r\n litleResponse.reject();\r\n },\r\n 15000);\r\n\r\n return litleResponse.promise.then(function (result) {\r\n return result;\r\n });\r\n }\r\n\r\n /**\r\n * @returns A unique 25 char string to be used for the vantiv id/orderId\r\n */\r\n function generateOrderId() {\r\n var d = new Date().getTime();\r\n var id = 'xxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/[x]/g,\r\n function (c) {\r\n var r = (d + Math.random() * 16) % 16 | 0;\r\n d = Math.floor(d / 16);\r\n return (r).toString(16);\r\n });\r\n return id;\r\n };\r\n }\r\n})\r\n ();","(function (angular) {\r\n\r\n\r\n angular.module('app.insight', ['angular-appinsights']);\r\n\r\n angular.module('app.insight').config([\r\n 'insightsProvider', function (insightsProvider) {\r\n insightsProvider.start(environment.instrumentationKey, 'purchase');\r\n }\r\n ]);\r\n\r\n angular.module('app.insight').run(configure);\r\n configure.$inject = ['$rootScope', 'insights'];\r\n\r\n function configure($rootScope, insights) {\r\n $rootScope.$on('$stateChangeSuccess',\r\n function (event, toState) {\r\n insights.flush();\r\n });\r\n }\r\n}(angular));","(function (window, angular) {\r\n 'use strict';\r\n\r\n // Register it\r\n angular.module('app').constant('util', {\r\n saveFile: saveFile,\r\n isMobileOrTablet: isMobileOrTablet,\r\n getFile: getFile,\r\n isStateIncluded: isStateIncluded\r\n });\r\n\r\n function isMobileOrTablet() {\r\n var check = false;\r\n (function (a) {\r\n if (\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(\r\n a\r\n ) ||\r\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n a.substr(0, 4)\r\n )\r\n )\r\n check = true;\r\n })(navigator.userAgent || navigator.vendor || window.opera);\r\n return check;\r\n }\r\n\r\n function saveFile(blob, fileName) {\r\n saveAs(blob, fileName);\r\n }\r\n\r\n function getFile(http, url, params) {\r\n if (params !== null && typeof params !== 'undefined') {\r\n return http({\r\n url: url,\r\n params: params,\r\n method: 'GET',\r\n responseType: 'arraybuffer'\r\n });\r\n } else {\r\n return http({\r\n url: url,\r\n method: 'GET',\r\n responseType: 'arraybuffer'\r\n });\r\n }\r\n }\r\n\r\n function isStateIncluded(state) {\r\n switch (state.abbr) {\r\n case 'IN':\r\n case 'CT':\r\n case 'DC':\r\n case 'PA':\r\n return false;\r\n\r\n default:\r\n return true;\r\n }\r\n }\r\n})(window, angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .constant('ui', {\r\n block: block,\r\n unblock: unblock,\r\n handleError: handleError,\r\n systemMessage: systemMessage,\r\n showNotificationSystemMessage: showNotificationSystemMessage,\r\n success: function (message) {\r\n showNotification({ 'type': 'success', 'message': message });\r\n },\r\n warning: function (message) {\r\n showNotification({ 'type': 'warning', 'message': message });\r\n },\r\n error: function (message) {\r\n showNotification({ 'type': 'error', 'message': message });\r\n },\r\n info: function (message) {\r\n showNotification({ 'type': 'info', 'message': message });\r\n }\r\n })\r\n .run(['$rootScope', configure]);\r\n\r\n function configure($rootScope) {\r\n $rootScope.$on('$stateChangeSuccess', function () {\r\n $('#toast-container').html('');\r\n\r\n /*\r\n * This solve the issue for android and chrome when the top header is hidden and you change\r\n * page the header was still hidden. Removing this class after a successfull change on the sate\r\n * makes the header visible everytime a new page state renders.\r\n */\r\n $('.wrapper-master-nav').removeClass('scrolling-up');\r\n });\r\n\r\n init();\r\n }\r\n\r\n var element;\r\n var key;\r\n\r\n function init() {\r\n element = document.createElement('div');\r\n element.className = 'block-ui';\r\n document.body.appendChild(element);\r\n var inner = element.appendChild(document.createElement('div'));\r\n inner.appendChild(document.createElement('div'));\r\n inner.appendChild(document.createElement('div'));\r\n }\r\n\r\n function block(zIndex) {\r\n clearTimeout(key);\r\n if (zIndex) {\r\n element.style.zIndex = zIndex;\r\n } else {\r\n element.style.zIndex = null;\r\n }\r\n element.className = 'block-ui block-ui-active';\r\n key = setTimeout(function () {\r\n element.className = 'block-ui block-ui-active block-ui-wait';\r\n }, 750);\r\n }\r\n\r\n function unblock() {\r\n clearTimeout(key);\r\n element.className = 'block-ui';\r\n }\r\n\r\n function systemMessage(message) { \r\n if (message.messageType == 'Announcement' || message.messageType == 'Banner') {\r\n switch (message.severity) {\r\n case 'Low':\r\n showNotificationSystemMessage({\r\n 'type': 'systemMessage',\r\n 'title': message.title,\r\n 'closeButton': true,\r\n 'timeOut': '30000',\r\n 'position-class': 'toast-top-full-width',\r\n 'message': message.description\r\n });\r\n break;\r\n case 'Medium':\r\n showNotificationSystemMessage({\r\n 'type': 'systemMessage',\r\n 'title': message.title,\r\n 'closeButton': true,\r\n 'timeOut': '30000',\r\n 'position-class': 'toast-top-full-width',\r\n 'message': message.description\r\n });\r\n break;\r\n case 'High':\r\n showNotificationSystemMessage({\r\n 'type': 'systemMessage',\r\n 'title': message.title,\r\n 'closeButton': true,\r\n 'timeOut': 0,\r\n 'extendedTimeOut': 0,\r\n 'showDuration': 0,\r\n 'hideDuration': 0,\r\n 'preventDuplicates': true,\r\n 'disableTimeOut': true,\r\n 'position-class': 'toast-top-full-width',\r\n 'debug': true,\r\n 'message': message.description\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n var takeFive = false;\r\n\r\n /**\r\n * Helps catpure, console log, and display error message.\r\n * @param {object} errorObject - object representing the error message\r\n */\r\n function handleError(errorObject) {\r\n var finalMsg = PrepareFinalMessage(errorObject);\r\n\r\n // Show toast notification\r\n if (!takeFive) {\r\n switch (errorObject.status) {\r\n case 0:\r\n showNotification({\r\n 'type': 'error',\r\n 'message': 'Oops! Something has gone wrong! Please help us by contacting support.'\r\n });\r\n break;\r\n case 200:\r\n showNotification({ 'type': 'success', 'message': finalMsg });\r\n break;\r\n case 401:\r\n showNotification({\r\n 'type': 'error',\r\n 'message': 'Your credentials have expired. Please login again.'\r\n });\r\n break;\r\n case 400:\r\n case 409:\r\n case 500:\r\n showNotification({ 'type': 'error', 'message': finalMsg });\r\n break;\r\n default:\r\n showNotification({\r\n 'type': 'error',\r\n 'message': 'Oops! Something has gone wrong! Please help us by contacting support.'\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Helps display the desired message in specified format.\r\n * @param {type} options - object representing the message configurations\r\n * @param {string} type - type of the notification like success/warning/error/info\r\n * @param {string} message - the message to display\r\n */\r\n function showNotification(options) {\r\n toastr.options = {\r\n 'closeButton': false,\r\n 'debug': false,\r\n 'newestOnTop': false,\r\n 'progressBar': false,\r\n 'positionClass': 'toast-bottom-center pds-toast', // added PDS specific class to override inner styles\r\n 'preventDuplicates': true,\r\n 'preventOpenDuplicates': true,\r\n 'onclick': null,\r\n 'showDuration': '100',\r\n 'hideDuration': '100',\r\n 'timeOut': '3000',\r\n 'extendedTimeOut': '1000',\r\n 'showEasing': 'swing',\r\n 'hideEasing': 'swing',\r\n 'showMethod': 'slideDown',\r\n 'hideMethod': 'slideUp'\r\n };\r\n\r\n switch (options.type.toLowerCase()) {\r\n case 'success':\r\n toastr.success(options.message);\r\n break;\r\n case 'warning':\r\n toastr.warning(options.message);\r\n break;\r\n case 'error':\r\n toastr.error(options.message);\r\n break;\r\n case 'info':\r\n toastr.info(options.message);\r\n break;\r\n case 'systemmessage':\r\n toastr.error(options.message, options.title);\r\n break;\r\n default:\r\n toastr.warning(options.message);\r\n }\r\n }\r\n\r\n function showNotificationSystemMessage(options) {\r\n toastr.options = {\r\n 'closeButton': true,\r\n 'debug': true,\r\n 'newestOnTop': false,\r\n 'progressBar': false,\r\n 'positionClass': 'toast-top-full-width', // added PDS specific class to override inner styles\r\n 'preventDuplicates': true,\r\n 'preventOpenDuplicates': true,\r\n 'onclick': null,\r\n 'showDuration': 0,\r\n 'hideDuration': 0,\r\n 'timeOut': 0,\r\n 'extendedTimeOut': 0,\r\n 'showEasing': 'swing',\r\n 'hideEasing': 'swing',\r\n 'showMethod': 'slideDown',\r\n 'hideMethod': 'slideUp'\r\n }; \r\n switch (options.type.toLowerCase()) {\r\n case 'success':\r\n toastr.success(options.message);\r\n break;\r\n case 'warning':\r\n toastr.warning(options.message);\r\n break;\r\n case 'error':\r\n toastr.error(options.message);\r\n break;\r\n case 'info':\r\n toastr.info(options.message);\r\n break;\r\n case 'systemmessage':\r\n toastr.info(options.message, options.title);\r\n break;\r\n default:\r\n toastr.warning(options.message);\r\n }\r\n }\r\n\r\n /**\r\n * Private function to extract and form the final error message.\r\n * @param {object} errorObject\r\n * @param {object} optionsObject\r\n * @returns {string} - Returns the final error message.\r\n */\r\n function PrepareFinalMessage(errorObject) {\r\n // Message pieces holders\r\n var finalMsg = '';\r\n var errorMessage = '';\r\n var data = errorObject.data;\r\n // Extract error message and show stack trace as applicable\r\n switch (errorObject.status) {\r\n case 400:\r\n case 409: // Http status code\r\n if (data.length) {\r\n errorObject.data.forEach(function (entry) {\r\n if (entry.hasOwnProperty('message')) {\r\n errorMessage = errorMessage + entry.message + '\\n';\r\n }\r\n });\r\n //\r\n } else {\r\n if (data.hasOwnProperty('message')) {\r\n errorMessage = data.message;\r\n }\r\n }\r\n break;\r\n case 500: // Http status code\r\n var data = errorObject.data;\r\n if (data.hasOwnProperty('message')) {\r\n errorMessage = data.message;\r\n } else {\r\n errorMessage = 'Oops! Something has gone wrong! Please help us by contacting support.';\r\n }\r\n break;\r\n }\r\n\r\n // Compile the final message\r\n finalMsg = errorMessage.length > 0 ? errorMessage + '\\n' : ''; //errorMessage.length > 0 ? (\"[Error Details] - \" + errorMessage + \"\\n\") : '';\r\n\r\n // Console log the error\r\n console.log(errorObject);\r\n\r\n return finalMsg;\r\n }\r\n\r\n function waitFive() {\r\n takeFive = !takeFive;\r\n setTimeout(function () {\r\n takeFive = !takeFive;\r\n }, 5000);\r\n }\r\n})(angular);\r\n","(function (angular) {\r\n\r\n 'use strict';\r\n\r\n // Register it\r\n angular\r\n .module('app')\r\n .constant('payments', {\r\n getCreditCardType: getCreditCardType,\r\n litlePaypageErrorProcessor: litlePaypageErrorProcessor,\r\n });\r\n\r\n /**\r\n * Determines the credit card type from the credit card number.\r\n * @param {string} The credit card number\r\n * @returns {string} - Returns the credit card type.\r\n */\r\n function getCreditCardType(cardNumber) {\r\n return (/^5[1-5]/.test(cardNumber)) ? \"mastercard\"\r\n : (/^4/.test(cardNumber)) ? \"visa\"\r\n : (/^3[47]/.test(cardNumber)) ? 'amex'\r\n : (/^6011|65|64[4-9]|622(1(2[6-9]|[3-9]\\d)|[2-8]\\d{2}|9([01]\\d|2[0-5]))/.test(cardNumber)) ? 'discover'\r\n : null;\r\n }\r\n\r\n function litlePaypageErrorProcessor() {\r\n this.litleInvalidCardCodes = [871, 872, 873, 874, 875, 876, 881, 882, 883];\r\n this.invalidCardMessage = \"Invalid Card Number.\";\r\n this.errorMessageToBeUsedWhenNotAnInvalidCard = \"We are currently experiencing technical difficulties. Please try again later.\";\r\n this.generateErrorMessage = function (errorCode) {\r\n try {\r\n return errorCode && errorCode != null && this.litleInvalidCardCodes.indexOf(Number(errorCode)) > -1 ? this.invalidCardMessage : this.errorMessageToBeUsedWhenNotAnInvalidCard;\r\n }\r\n catch (error) {\r\n return this.errorMessageToBeUsedWhenNotAnInvalidCard;\r\n }\r\n }\r\n }\r\n\r\n \r\n})(angular);","(function (angular){\r\n\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .constant('states',\r\n [\r\n {\r\n name : 'Alabama',\r\n abbreviation : 'AL'\r\n },\r\n {\r\n name : 'Alaska',\r\n abbreviation : 'AK'\r\n },\r\n {\r\n name : 'Arizona',\r\n abbreviation : 'AZ'\r\n },\r\n {\r\n name : 'Arkansas',\r\n abbreviation : 'AR'\r\n },\r\n {\r\n name : 'California',\r\n abbreviation : 'CA'\r\n },\r\n {\r\n name : 'Colorado',\r\n abbreviation : 'CO'\r\n },\r\n {\r\n name : 'Connecticut',\r\n abbreviation : 'CT'\r\n },\r\n {\r\n name : 'Delaware',\r\n abbreviation : 'DE'\r\n },\r\n {\r\n name : 'District Of Columbia',\r\n abbreviation : 'DC'\r\n },\r\n {\r\n name : 'Florida',\r\n abbreviation : 'FL'\r\n },\r\n {\r\n name : 'Georgia',\r\n abbreviation : 'GA'\r\n },\r\n {\r\n name : 'Hawaii',\r\n abbreviation : 'HI'\r\n },\r\n {\r\n name : 'Idaho',\r\n abbreviation : 'ID'\r\n },\r\n {\r\n name : 'Illinois',\r\n abbreviation : 'IL'\r\n },\r\n {\r\n name : 'Indiana',\r\n abbreviation : 'IN'\r\n },\r\n {\r\n name : 'Iowa',\r\n abbreviation : 'IA'\r\n },\r\n {\r\n name : 'Kansas',\r\n abbreviation : 'KS'\r\n },\r\n {\r\n name : 'Kentucky',\r\n abbreviation : 'KY'\r\n },\r\n {\r\n name : 'Louisiana',\r\n abbreviation : 'LA'\r\n },\r\n {\r\n name : 'Maine',\r\n abbreviation : 'ME'\r\n },\r\n {\r\n name : 'Maryland',\r\n abbreviation : 'MD'\r\n },\r\n {\r\n name : 'Massachusetts',\r\n abbreviation : 'MA'\r\n },\r\n {\r\n name : 'Michigan',\r\n abbreviation : 'MI'\r\n },\r\n {\r\n name : 'Minnesota',\r\n abbreviation : 'MN'\r\n },\r\n {\r\n name : 'Mississippi',\r\n abbreviation : 'MS'\r\n },\r\n {\r\n name : 'Missouri',\r\n abbreviation : 'MO'\r\n },\r\n {\r\n name : 'Montana',\r\n abbreviation : 'MT'\r\n },\r\n {\r\n name : 'Nebraska',\r\n abbreviation : 'NE'\r\n },\r\n {\r\n name : 'Nevada',\r\n abbreviation : 'NV'\r\n },\r\n {\r\n name : 'New Hampshire',\r\n abbreviation : 'NH'\r\n },\r\n {\r\n name : 'New Jersey',\r\n abbreviation : 'NJ'\r\n },\r\n {\r\n name : 'New Mexico',\r\n abbreviation : 'NM'\r\n },\r\n {\r\n name : 'New York',\r\n abbreviation : 'NY'\r\n },\r\n {\r\n name : 'North Carolina',\r\n abbreviation : 'NC'\r\n },\r\n {\r\n name : 'North Dakota',\r\n abbreviation : 'ND'\r\n },\r\n {\r\n name : 'Ohio',\r\n abbreviation : 'OH'\r\n },\r\n {\r\n name : 'Oklahoma',\r\n abbreviation : 'OK'\r\n },\r\n {\r\n name : 'Oregon',\r\n abbreviation : 'OR'\r\n },\r\n {\r\n name : 'Pennsylvania',\r\n abbreviation : 'PA'\r\n },\r\n {\r\n name : 'Rhode Island',\r\n abbreviation : 'RI'\r\n },\r\n {\r\n name : 'South Carolina',\r\n abbreviation : 'SC'\r\n },\r\n {\r\n name : 'South Dakota',\r\n abbreviation : 'SD'\r\n },\r\n {\r\n name : 'Tennessee',\r\n abbreviation : 'TN'\r\n },\r\n {\r\n name : 'Texas',\r\n abbreviation : 'TX'\r\n },\r\n {\r\n name : 'Utah',\r\n abbreviation : 'UT'\r\n },\r\n {\r\n name : 'Vermont',\r\n abbreviation : 'VT'\r\n },\r\n {\r\n name : 'Virginia',\r\n abbreviation : 'VA'\r\n },\r\n {\r\n name : 'Washington',\r\n abbreviation : 'WA'\r\n },\r\n {\r\n name : 'West Virginia',\r\n abbreviation : 'WV'\r\n },\r\n {\r\n name : 'Wisconsin',\r\n abbreviation : 'WI'\r\n },\r\n {\r\n name : 'Wyoming',\r\n abbreviation : 'WY'\r\n }\r\n ])\r\n .constant('relationships', [\r\n 'Spouse',\r\n 'Dependent'\r\n ])\r\n .constant('paymentTypes', {\r\n creditCard: 'Credit',\r\n checkingAccount: 'Checking'\r\n });\r\n\r\n})(angular);","(function (angular) {\r\n angular.module('app.auth', []);\r\n\r\n}(angular));","angular.module('app.auth').factory('app.auth.interception', [\r\n 'util', '$q', '$injector', '$location', '$localStorage', 'config', '$sessionStorage', function (util, $q, $injector, $location, storage, appConfig, session) {\r\n\r\n function guid() {\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 function request(config) {\r\n config.headers = config.headers || {};\r\n if(!config.cdi) {\r\n config.headers['Ocp-Apim-Subscription-Key'] = appConfig.settings.apiKey;\r\n config.headers['Session'] = (session.session = session.session || guid());\r\n }\r\n\r\n return config;\r\n }\r\n\r\n function responseError(rejection) {\r\n if (rejection.status === 401 || rejection.status === 403) {\r\n var authService = $injector.get('app.auth.service');\r\n authService.signOut();\r\n if (rejection.status === 401) {\r\n window.location = '/#/sign-in';\r\n } else {\r\n window.location = '/#/unauthorized';\r\n }\r\n }\r\n return $q.reject(rejection);\r\n }\r\n\r\n return {\r\n request: request,\r\n responseError: responseError\r\n };\r\n }\r\n]).config(['$httpProvider', function ($httpProvider) {\r\n $httpProvider.interceptors.push('app.auth.interception');\r\n $httpProvider.defaults.withCredentials = true;\r\n}]);\r\n","(function (angular) {\r\n angular.module('app').config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('app',\r\n {\r\n abstract: true,\r\n templateUrl: '/app/layout/main.html',\r\n controller: \"app.mainController\",\r\n controllerAs: \"vMain\",\r\n resolve: {\r\n supportedStates: ['$rootScope', 'supportService', '$q', function ($rootScope, supportService, $q) {\r\n var deferred = $q.defer();\r\n $rootScope.supportedStates = [];\r\n\r\n supportService.getSellableStatesByPlan(siteContent.plan).then(function (response) {\r\n var states = supportService.getStates();\r\n var responseData = response.data;\r\n\r\n if (responseData.includedStates && responseData.includedStates !== null && responseData.includedStates.length > 0) {\r\n $rootScope.supportedStates = states.filter(function (s) { return (responseData.includedStates.indexOf(s.abbr) >= 0); }).map(function (a) { return a.abbr; });\r\n deferred.resolve($rootScope.supportedStates);\r\n }\r\n else if (responseData.excludedStates && responseData.excludedStates !== null && responseData.excludedStates.length > 0) {\r\n $rootScope.supportedStates = states.filter(function (s) { return (responseData.excludedStates.indexOf(s.abbr) < 0); }).map(function (a) { return a.abbr; });\r\n deferred.resolve($rootScope.supportedStates);\r\n }\r\n else {\r\n $rootScope.supportedStates = [];\r\n deferred.resolve($rootScope.supportedStates);\r\n }\r\n });\r\n\r\n return deferred.promise;\r\n }]\r\n\r\n }\r\n });\r\n\r\n if (environment.offline) {\r\n $urlRouterProvider.when('/', '/offline');\r\n $urlRouterProvider.when('', '/offline');\r\n $urlRouterProvider.otherwise('/offline');\r\n } else {\r\n $urlRouterProvider.when('/', '');\r\n $urlRouterProvider.otherwise('/not-found');\r\n }\r\n }]);\r\n}(angular));","(function (angular) {\r\n\r\n angular.module('app').run([\r\n '$rootScope', '$uibModal', '$uibModalStack', function ($rootScope, $uibModal, $uibModalStack) {\r\n\r\n //$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams, options) {\r\n //});\r\n\r\n $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams, options) {\r\n\r\n $uibModalStack.dismissAll('route change');\r\n\r\n setTimeout(function () {\r\n $('[autofocus]').focus();\r\n $('body').removeClass('modal-open').removeClass('scroll-lock');\r\n window.scroll(0, 0);\r\n });\r\n\r\n });\r\n\r\n if (typeof $uibModal.openOrig === 'undefined' && $('body').hasClass('ios')) {\r\n $uibModal.openOrig = $uibModal.open;\r\n $uibModal.open = function (args) {\r\n setTimeout(function () {\r\n window.scroll(0, 0);\r\n if ($('[autofocus]').length > 0) {\r\n if ($(window).width() > $(window).height() && $('[autofocus]').position().top > ($(window).height() / 5)) {\r\n window.scrollTo(0, $('[autofocus]').position().top);\r\n }\r\n else if ($(window).width() < $(window).height() && $('[autofocus]').position().top > (($(window).height() / 4) * 2)) {\r\n window.scrollTo(0, $('[autofocus]').position().top);\r\n }\r\n }\r\n }, 250);\r\n\r\n return $uibModal.openOrig(args);\r\n };\r\n }\r\n }]);\r\n\r\n})(angular);","var provider = 'Wellfit';\r\nvar company = 'Wellfit Plans';\r\nvar companyAccepted = 'Smile Generation';\r\nvar planNamePrefix = 'Smile Generation Dental Plan 2023';\r\nvar planNameBasic = 'Smile Generation Dental Plan';\r\nvar planName = 'Smile Generation Dental Plan®';\r\nvar planNamePlural = 'Smile Generation Dental Plans®';\r\nvar planFileName = 'SmileGenerationDentalPlan';\r\nvar planNameShort = 'Smile_Generation';\r\nvar planAcronym = 'sgdp';\r\nvar planAcronymLabel = 'SGDP';\r\nvar planPhoneNumber = '(833) 333-7437';\r\nvar planPhoneNumberBasic = '8333337437';\r\nvar planEmail = 'SGDPsupport@smilehealthdentalplans.com';\r\nvar planAdmin = 'Wellfit Plans, LLC';\r\nvar planAdminPhone = '(855) 935-5365';\r\nvar organizationId = '5068093D-AA1F-41F8-AC42-1FC85A92B766';\r\nvar careingtonTextShow = false;\r\nvar cancellationText =\r\n 'The cancellation and refund policy can be found in the Membership Agreement under Section 9.';\r\nvar servicesRight =\r\n '
More Benefits For You
In addition to discounts on general dentistry, there are even more great benefits for ' +\r\n planName +\r\n ' members including:
  • Up to 60% savings on Mouth-Body Connection® procedures like oral cancer screenings, salivary lab tests and full-mouth periodontal treatment
  • 20% discounts on specialty care such as gum (periodontal) treatment, oral surgery, orthodontics, root canal treatment, cosmetic services like in-office teeth whitening and more
  • Additional benefits for members with underlying health conditions
';\r\nvar planFootNote =\r\n 'Price includes a one-time, non-refundable $15 administration fee. So long as your plan never cancels or terminates you will not be charged another administration fee at renewal.';\r\nvar savingsText =\r\n 'The Smile Generation Dental Plan® is designed to help you during these times by offering significant discounts on the dentistry you need. Benefits include:
  • Save 20% - 50% on most dental procedures
  • $0 teledentistry / virtual consultations
  • $0 dental exams and X-rays
  • Since this is not insurance, so there are no deductibles or annual maximums
  • Same-day discounts on dentistry—no waiting periods
  • $0 tele-dentistry/virtual consultations
  • $0 dental exams and x-rays
';\r\nvar choosePlanInfo =\r\n '
All Plans include:
  • Save 20% - 50% on most dental procedures
  • $0 teledentistry / virtual consultations
  • $0 dental exams and X-rays
  • Since this is not insurance, so there are no deductibles or annual maximums
  • Same-day discounts on dentistry—no waiting periods
  • $0 tele-dentistry/virtual consultations
  • $0 dental exams and x-rays
';\r\nvar footerText = [\r\n \"

\" + planName + ' is NOT insurance.

',\r\n 'You will have 30 days from receipt of the Membership Agreement to cancel your enrollment and receive a full refund of your enrollment fees. Specific refund requirements are available in your Membership Agreement. If your membership is renewed after it expires a $15 administration fee may apply and will not be refunded if you cancel your enrollment.',\r\n 'Wellfit Plans, LLC is a discount plan organization that offers the Smile Generation Dental Plan®. Smile Generation Dental Plan® members have access to contracted providers who provide certain dental services to members at discounted rates (“Network Providers”). Discounted rates may vary depending on which contracted provider and which service you receive. Members are obligated to pay for all health care services but will receive the stated discount from those health care providers that have a current provider agreement with the discount plan organization. Smile Generation Dental Plan® does not pay Network Providers any dental care fees. In order to obtain the discounted fees, your Network Provider may require you to pay for the dental services at the time you receive them. Wellfit Plans, LLC is located at PO Box 140309, Irving, TX 75014 and their phone number is (855) 935-5365. Find contracted providers at WellfitPlans.com.'\r\n];\r\nvar discountPricing = [\r\n ['Teledentistry/virtual consultation', '$231', '$0', '$231'],\r\n ['Routine or emergency exam', '$99', '$0', '$99'],\r\n ['Full-mouth X-ray', '$159', '$0', '$159'],\r\n ['CEREC® CAD/CAM crown', '$1,951', '$1,003', '$948'],\r\n [\r\n 'Full-mouth periodontal treatment (including salivary lab test & analysis)',\r\n '$2,029',\r\n '$1,040',\r\n '$989'\r\n ],\r\n [\r\n 'Root canal (1-3 root procedure, including pulpotomy)',\r\n '$1,414',\r\n '$1,105',\r\n '$309'\r\n ]\r\n];\r\nvar footnotes = [\r\n '†80th percentile of an average Usual and Customary fee based on Fair Health data for participating offices. ††Average plan fee for participating offices. ¶Sample savings reflected are an average.'\r\n];\r\nvar careingtonTermsAndConditionsShow = false;\r\n\r\nvar siteContent = {\r\n 'theme': planAcronym,\r\n 'plan': planNameBasic,\r\n 'planNamePrefix': planNamePrefix,\r\n 'planPhoneNumber': planPhoneNumber,\r\n 'planPhoneNumberBasic': planPhoneNumberBasic,\r\n 'planNameShort': planNameShort,\r\n 'organizationId': organizationId,\r\n 'planOptions': [],\r\n 'copyright': {\r\n 'planName': planName,\r\n 'address': 'Irving, TX, USA',\r\n 'links': [\r\n { 'text': 'Site Map', 'link': '/#/sitemap', 'target': '_self' },\r\n { 'text': 'Terms of Service', 'link': '/#/terms-of-service', 'target': '_blank' },\r\n { 'text': 'Privacy Policy', 'link': '/#/privacy-policy', 'target': '_blank' }\r\n ]\r\n },\r\n 'supportedStates': [],\r\n 'careingtonStates': ['California','Washington'],\r\n 'site': {\r\n 'header': {\r\n 'logo': '/assets/' + planAcronym + '/images/logo.svg',\r\n 'vineTitle': planAdmin + '
administers this plan
' + planAdminPhone,\r\n 'links': {\r\n 'inviteAFriend': true,\r\n 'support': true,\r\n 'memberLogin': true,\r\n 'directory': true,\r\n 'displayVineDentalInfo': true\r\n }\r\n },\r\n 'footer': {\r\n 'logo': '/assets/' + planAcronym + '/images/logo-white.svg',\r\n 'logoTitle': planNameBasic,\r\n 'texts': footerText,\r\n 'footnotes': footnotes\r\n },\r\n 'pages': {\r\n 'contactForm': {\r\n 'subTitle': \"Have questions?
We'd love to help you.\",\r\n 'phone': planPhoneNumber,\r\n 'times': [''],\r\n 'email': {\r\n 'text': planEmail,\r\n 'link': 'mailto:' + planEmail + '?Subject=Contact%20Us,%20Request%20from%20Wellfit'\r\n }\r\n },\r\n 'welcome': {\r\n 'hero': {\r\n 'image': '/assets/' + planAcronym + '/images/welcome/hero.png',\r\n 'sImage': '/assets/' + planAcronym + '/images/welcome/hero-small.png',\r\n 'title': \"Just keep smiling. We'll help.\",\r\n 'subTitle': 'A discount dental plan designed to help you save and stay healthy.',\r\n 'button': {\r\n 'text': 'Start Saving Today',\r\n 'link': '#/plans',\r\n 'target': '_self'\r\n },\r\n 'disclaimer': ''\r\n },\r\n 'discounts': {\r\n 'left': {\r\n 'show': true,\r\n 'title': 'See what you can save today.',\r\n 'text': savingsText,\r\n 'button': {\r\n 'text': 'View Savings',\r\n 'link': '#/summary-of-discounts',\r\n 'target': '_self'\r\n }\r\n },\r\n 'right': {\r\n 'show': true,\r\n 'table': {\r\n 'header': [\r\n '',\r\n 'Average Fee without Plan',\r\n 'Average Fee with Plan††',\r\n 'Member Savings'\r\n ],\r\n 'rows': discountPricing\r\n }\r\n }\r\n },\r\n 'planPrices': {\r\n 'title': 'Start Saving on the Treatment You Need',\r\n 'text':\r\n '',\r\n 'link': '#/plans',\r\n 'target': '_self',\r\n 'note': planFootNote,\r\n 'button': {\r\n 'text': 'JOIN NOW',\r\n 'link': '#/plans',\r\n 'target': '_self'\r\n }\r\n },\r\n 'services': [\r\n {\r\n 'left': {\r\n 'isImage': true,\r\n 'value': '/assets/' + planAcronym + '/images/welcome/service.png'\r\n },\r\n 'right': {\r\n 'isImage': false,\r\n 'value': servicesRight\r\n }\r\n },\r\n {\r\n 'left': {\r\n 'isImage': false,\r\n 'value':\r\n '
Real-Time Visibility of Benefits + Costs
' +\r\n planName +\r\n ' is powered by Wellfit®, providing you with real-time visibility to your treatment savings and costs - all on your phone. Now you can make good decisions about your oral health and be informed every step of the way.
'\r\n },\r\n 'right': {\r\n 'isImage': true,\r\n 'value': '/assets/' + planAcronym + '/images/welcome/in-hand.png'\r\n }\r\n }\r\n ],\r\n 'findDentist': {\r\n 'text':\r\n 'Accepted exclusively at ' +\r\n companyAccepted +\r\n '®-trusted offices in 25 states across the US.',\r\n 'button': {\r\n 'text': 'FIND A DENTIST',\r\n 'link': '/#/find-a-dentist',\r\n 'target': '_self'\r\n }\r\n }\r\n },\r\n 'choosePlan': {\r\n 'title': 'Choose Your Plan',\r\n 'subTitle':\r\n 'The ' +\r\n planName +\r\n ' provides 20-50% discounts on most dental treatments that meet your needs.',\r\n 'plans': {\r\n 'title':\r\n '',\r\n 'info': choosePlanInfo,\r\n 'footNote': '*' + planFootNote,\r\n 'buttonText': 'JOIN NOW'\r\n },\r\n 'careingtonTermsAndConditions': {\r\n 'show': careingtonTermsAndConditionsShow,\r\n 'text':\r\n '

Purchase and Renewal Conditions: By joining a plan for yourself or on behalf of a minor child for whom you are a parent or legal guardian, you confirm that you are at least 18 years old and you authorize Smile Generation Dental Plan to charge your credit card or checking account for the plan you have selected. By joining you indicate you have read and agree to the terms and conditions of the plan. Your plan will automatically expire 12 months to the date of purchase. You may renew prior to the termination of your plan and avoid the $15 administration fee. To renew your plan, you can contact Smile Generation Dental Plan at (833) 330-7209 prior to your termination date. Your plan can also be renewed through the Member Portal or through responding to Renewal Mailers that will be sent to your address on file.

Termination Conditions: Smile Generation Dental Plan and Careington reserve the right to terminate plan members from its plan for any reason, including non-payment. If Smile Generation Dental Plan terminates the plan or your membership for a reason other than non-payment, you will receive a pro-rata refund of your membership fees.

Cancellation Conditions: You have the right to cancel within the first 30 days after effective date or receipt of membership materials (whichever is later) and receive a full refund, less the processing fee, if applicable. If for any reason during this time period you are dissatisfied with the plan and wish to cancel and obtain a refund, you must submit a written cancellation request. Smile Generation Dental Plan will accept cancellation requests at any time and will stop collecting membership fees in a reasonable amount of time, but no later than 30 days after receiving a cancellation notice. Please send a cancellation letter and a request for refund with your name and member ID to Smile Generation Dental Plan, PO Box 140309, Irving, TX 75014. You may also submit cancellation requests by email: support@wellfitplans.com. When you cancel, you will continue to have access to the plan for the remainder of the period for which you have paid; your membership will terminate at the end of that period. The preceding sentence does not apply to quarterly, semi-annual or annual memberships in FL, ND and OK, where you will receive a pro-rata refund whenever you cancel.

Description of Services: Please see the enclosed materials for a specific description of the programs included in your plan.

Limitations, Exclusions & Exceptions: This plan is a discount membership program offered by Careington. Careington is not a licensed insurer, health maintenance organization or other underwriter of health care services. No portion of any provider’s fees will be reimbursed or otherwise paid by Careington. Careington is not licensed to provide and does not provide health care services or items to individuals. You will receive discounts for services at certain health care providers who have contracted with the plan. You are obligated to pay for all health care services at the time of service. Savings are based upon the provider’s normal fees. Actual savings will vary depending upon location and specific services or products purchased. Please verify such services with each individual provider. The plan’s discounts may not be used in conjunction with any other discount plan or program. All listed or quoted prices are current prices by participating providers and subject to change without notice. Any procedures performed by a non-participating provider are not discounted. From time to time, certain providers may offer products or services to the general public at prices lower than the discounted prices available through this plan. In such event, members will be charged the lowest price. Discounts on professional services are not available where prohibited by law. This plan does not discount all procedures. Providers are subject to change without notice and services may vary in some states. It is the member’s responsibility to verify that the provider participates in the plan. At any time Careington may substitute a provider network at its sole discretion. Careington cannot guarantee the continued participation of any provider. If the provider leaves the plan, you will need to select another provider. Providers contracted by Careington are solely responsible for the professional advice and treatment rendered to members and Careington disclaims any liability with respect to such matters.

Complaint Procedure: If you would like to file a complaint regarding your plan membership, you must submit your complaint in writing to: Careington International Corporation, P.O. Box 2568, Frisco, TX 75034. You have the right to request an appeal if you are dissatisfied with the complaint resolution. After completing the complaint resolution process, if you remain dissatisfied you may contact your state insurance department.

'\r\n }\r\n },\r\n 'support': {\r\n 'title': 'Support',\r\n 'sections': {\r\n 'stateSelection': {\r\n 'show': true,\r\n 'text': 'Forms vary by state. Select your state to view the appropriate forms.'\r\n },\r\n 'agreements': {\r\n 'show': true,\r\n 'title': 'Membership Agreement',\r\n 'text':\r\n '' +\r\n company +\r\n 's is required to provide prospective members a copy of the Membership Agreement prior to enrollment. Simply click the PDF links below to view/print the agreement or fee schedule.',\r\n 'links': {\r\n 'dsdLink': {\r\n 'text': 'Membership Agreement',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_\" +\r\n planNameShort +\r\n '_' +\r\n provider +\r\n '.pdf',\r\n 'target': '_blank'\r\n },\r\n 'pfsLink': {\r\n 'show': true,\r\n 'text': 'Plan Fee Schedule',\r\n 'link':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_\" +\r\n planNameShort +\r\n \"_[[STATE]].pdf'\",\r\n 'target': '_blank'\r\n },\r\n 'gfLink': {\r\n 'text': 'Grievance Form',\r\n 'link': '/#/grievance?state=[[STATE]]',\r\n 'target': '_self'\r\n },\r\n 'stateBased': {\r\n 'Arizona': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Colorado': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Georgia': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Idaho': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Kansas': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Kentucky': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Maryland': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Massachusetts': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Minnesota': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Missouri': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'New_Mexico': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'North_Carolina': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Ohio': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Tennessee': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Virginia': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment Before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Nevada': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" }\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" }\r\n ]\r\n },\r\n 'Florida': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment before Jan 1, 2024)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" }\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment before Jan 1, 2024)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022_2.pdf'\" }\r\n ]\r\n },\r\n 'Oregon': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" }\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" }\r\n ]\r\n },\r\n 'South_Carolina': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" }\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" }\r\n ]\r\n },\r\n 'Texas': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" }\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" }\r\n ]\r\n },\r\n 'California': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" },\r\n ]\r\n },\r\n 'Illinois': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" }\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" }\r\n ]\r\n },\r\n 'Utah': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit.pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" }\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" }\r\n ]\r\n },\r\n 'Louisiana': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Membership Agreement (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" }\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n { 'text': 'Plan Fee Schedule (Enrollment before Jan 1, 2023)', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]]_2022.pdf'\" }\r\n ]\r\n },\r\n //----------------------\r\n 'Oklahoma': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" }\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" } \r\n ]\r\n },\r\n 'Washington': {\r\n 'MA': [\r\n { 'text': 'Membership Agreement', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/DOS_DF_Smile_Generation_Wellfit_2022.pdf'\" },\r\n ],\r\n 'FS': [\r\n { 'text': 'Plan Fee Schedule', 'link': \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_Smile_Generation_[[STATE]].pdf'\" },\r\n ]\r\n }\r\n }\r\n }\r\n },\r\n 'cancellation': {\r\n 'title': 'Cancellation & Refund Policy',\r\n 'text': cancellationText,\r\n 'linkText': 'Membership Agreement'\r\n },\r\n 'careingtonText': {\r\n 'show': careingtonTextShow,\r\n 'text':\r\n \"For information regarding ancillary benefits including Amplifon, EyeMed, and UNOA please click here.\"\r\n },\r\n 'grievances': {\r\n 'title': 'Grievances Form',\r\n 'text':\r\n \"If you have a grievance, complete and submit the online grievance form, .\"\r\n },\r\n 'details':\r\n '

Have questions? Our plans specialists would love to help you.

Our ' +\r\n planName +\r\n ' customer service team is here to support you and answer any questions you may have. Please feel free to contact us at
' +\r\n planPhoneNumber\r\n }\r\n },\r\n 'summaryDiscounts': {\r\n 'title': 'See all the ways you save.',\r\n 'showStates': true,\r\n 'states': [],\r\n 'links': {\r\n 'sdf': {\r\n 'text': \"Your State's Most Commonly Viewed Fees \",\r\n 'variableLink':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/SDF_\" +\r\n planNameShort +\r\n \"_[[STATE]].pdf'\"\r\n },\r\n 'fe': {\r\n 'text': \"Your State's Full Fee Schedule \",\r\n 'variableLink':\r\n \"environment.blobStorageTopUrl + '/servicesanddisclosures/FS_\" +\r\n planNameShort +\r\n \"_[[STATE]].pdf'\"\r\n }\r\n },\r\n 'rightSection': {\r\n 'image': {\r\n 'show': true,\r\n 'url':\r\n '/assets/' + planAcronym + '/images/summary-of-discounts/coverage-map.png'\r\n },\r\n 'text':\r\n '

' +\r\n planName +\r\n ' is currently accepted at Smile Generation®-trusted offices in 25 states.

'\r\n },\r\n 'mapColor': '#BB0E82',\r\n 'mapSelectedColor': '#970b68'\r\n },\r\n 'directory': {\r\n 'iconColor': '5F4AFA',\r\n 'loadingColorPrimary': '5F4AFA',\r\n 'loadingColorSecondary': '645AA7'\r\n }\r\n },\r\n 'purchaseFlow': {\r\n 'allowPromoCode': true,\r\n 'staticPromoCode': '',\r\n 'activatePlan': {\r\n 'dsdLink': {\r\n 'text': 'Membership Agreement',\r\n 'link': '/servicesanddisclosures/DOS_DF_' + planNameShort + '_' + provider + '.pdf',\r\n 'downloadAs': planAcronymLabel + ' Description of Services & Disclosures.pdf',\r\n 'target': '_blank'\r\n },\r\n 'touLink': {\r\n 'text': 'Terms of Use',\r\n 'link': 'print/eula?planName=' + planName + '',\r\n 'downloadAs': planAcronymLabel + ' EULA.pdf',\r\n 'target': '_blank',\r\n 'path': '/app/site/purchase-flow/activate-plan/modals/terms-of-use.modal.html'\r\n },\r\n 'privacyPolicyTemplate': {\r\n 'path': '/app/site/purchase-flow/activate-plan/modals/privacy-policy.modal.html'\r\n }\r\n },\r\n 'activatedPlan': {\r\n 'dsdLink': {\r\n 'text': 'Membership Agreement',\r\n 'link': '/servicesanddisclosures/DOS_DF_' + planNameShort + '_[[STATE]].pdf',\r\n 'downloadAs': planAcronymLabel + ' Description of Services & Disclosures.pdf',\r\n 'target': '_blank'\r\n },\r\n 'pfsLink': {\r\n 'text': 'Plan Fee Schedule',\r\n 'link': '/servicesanddisclosures/FS_' + planNameShort + '_[[STATE]].pdf',\r\n 'downloadAs': planName + ' Fee Schedule.pdf',\r\n 'target': '_blank'\r\n },\r\n 'gfLink': {\r\n 'text': 'Grievance Form',\r\n 'link': '/#/grievance?state=[[STATE]]',\r\n 'target': '_blank'\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","angular.module('app').controller('app.controller', [\r\n 'config',\r\n '$scope',\r\n '$localStorage',\r\n '$state',\r\n '$window',\r\n '$rootScope',\r\n '$location',\r\n '$uibModal',\r\n '$timeout',\r\n 'ui',\r\n '$http',\r\n 'app.purchase.purchaseFlowService',\r\n function (\r\n config,\r\n $scope,\r\n $localStorage,\r\n $state,\r\n $window,\r\n $rootScope,\r\n $location,\r\n $uibModal,\r\n $timeout,\r\n ui,\r\n $http,\r\n purchaseFlowService\r\n ) {\r\n var timeInterval = environment.statusInterval;\r\n if (!timeInterval) {\r\n timeInterval = 1000;// default\r\n }\r\n\r\n var timer = $timeout(function timerComplete() {\r\n $http.get(environment.statusUrl + 'online/status/' + environment.portalId).then(function (response) {\r\n if (response.status != 200) {\r\n //navigate to offline \r\n $state.go('app.offline');\r\n } else {\r\n //check for banner message\r\n purchaseFlowService.checkStatusMessages()\r\n .then(function (result) {\r\n if (result.length > 0) {\r\n //display toaster message \r\n var m = result[0];\r\n const message = {\r\n messageType: m.messageType,\r\n severity: m.severity,\r\n title: m.title,\r\n description: m.description,\r\n hyperlink: m.hyperlink\r\n };\r\n ui.systemMessage(message);\r\n timer = $timeout(timerComplete, timeInterval);\r\n }\r\n })\r\n .catch(function rejected(result) {\r\n ui.handleError(rejected);\r\n })\r\n .finally(function () {\r\n ui.unblock();\r\n });\r\n }\r\n }).catch(function rejected(result) {\r\n //navigate to offline \r\n if (result.status == 503) {\r\n $state.go('app.offline');\r\n } else {\r\n ui.handleError(rejected);\r\n }\r\n\r\n }).finally(function () {\r\n ui.unblock();\r\n });\r\n }, timeInterval);\r\n\r\n siteContent.hideLocationModal = false;\r\n siteContent.hideCCPAModal = false;\r\n siteContent.ignoreStateVerification = false;\r\n siteContent.landingPath = 'app.landing';\r\n siteContent.findDentistPage = '/#/find-a-dentist';\r\n siteContent.joinPage = '/#/plans';\r\n siteContent.supportPage = '/#/support';\r\n\r\n $scope.siteContent = siteContent;\r\n\r\n $window.document.title = siteContent.plan;\r\n\r\n $scope.app = config;\r\n $scope.$state = $state;\r\n $scope.$rootScope = $rootScope;\r\n $scope.environment = environment;\r\n $scope.$location = $location;\r\n $scope.date = new Date().getFullYear();\r\n $scope.memberPortalUrl = environment.memberPortalUrl;\r\n $scope.cdiCustomerSupportNumber = environment.cdiCustomerSupportNumber;\r\n $scope.msdpLogoUrl = environment.blobStorageTopUrl + '/site-graphics/msdp/logo.svg';\r\n $scope.localState = '';\r\n\r\n $scope.launchInvite = launchInvite;\r\n\r\n if (angular.isDefined($localStorage.state)) {\r\n $scope.app.state = $localStorage.state;\r\n } else {\r\n $localStorage.state = $scope.app.state;\r\n }\r\n\r\n config.settings.apiKey = environment.apiKey;\r\n config.settings.memberPortalUrl = environment.memberPortalUrl;\r\n config.settings.instrumentationKey = environment.instrumentationKey;\r\n\r\n storePromoCodeUrlParam();\r\n listenForClickAnywhereElseEvents();\r\n\r\n $scope.$watch(\r\n function () {\r\n return location.hash;\r\n },\r\n function (value) {\r\n if (digitalData[0].transaction.id == null) {\r\n var pageID = $location.path();\r\n var newData = [\r\n {\r\n 'page': {\r\n 'pageInfo': {\r\n 'pageID': pageID\r\n }\r\n },\r\n 'transaction': {\r\n 'id': null\r\n },\r\n 'attributes': {\r\n 'promoCode': null\r\n }\r\n }\r\n ];\r\n\r\n digitalData = Object.assign({}, newData);\r\n }\r\n }\r\n );\r\n\r\n /* PROMOTION CODE STORAGE AND RETRIEVAL */\r\n function storePromoCodeUrlParam() {\r\n // Check for previous code\r\n promoCode = parseLocalStoragePromoCode();\r\n // Check if previous code has expired\r\n if (promoCode) {\r\n expireLocalStorage();\r\n }\r\n // Get URL parameters\r\n var pCode;\r\n var queryString = window.location.search.slice(1);\r\n if (queryString) {\r\n var params = queryString.split('&');\r\n for (var i = 0; i < params.length; i++) {\r\n var pair = params[i].split('=');\r\n // Grab value for Pcode param\r\n if (pair[0] == 'Pcode') {\r\n pCode = pair[1];\r\n }\r\n }\r\n // If this is a new promo code\r\n if (pCode != promoCode) {\r\n // Store the new code in local storage along with timestamp\r\n var object = { value: pCode, timestamp: new Date().getTime() };\r\n localStorage.setItem('promoCode', JSON.stringify(object));\r\n }\r\n }\r\n }\r\n\r\n function parseLocalStoragePromoCode() {\r\n // Return promo code from local storage\r\n var object = JSON.parse(localStorage.getItem('promoCode'));\r\n if (object) {\r\n promoCode = object.value;\r\n return promoCode;\r\n }\r\n }\r\n\r\n function expireLocalStorage() {\r\n // Grab timestamp value from local storage\r\n var object = JSON.parse(localStorage.getItem('promoCode'));\r\n if (object) {\r\n dateString = object.timestamp;\r\n // Get today's timestamp\r\n now = new Date().getTime().toString();\r\n // Convert timestamp into hours\r\n elapsedTime = Math.ceil((now - dateString) / 3600000);\r\n // Set expiration time in hours\r\n expiration = 360; // 15 days\r\n // If timestamp is past expiration then delete\r\n if (elapsedTime >= expiration) {\r\n localStorage.removeItem('promoCode');\r\n }\r\n }\r\n }\r\n\r\n function listenForClickAnywhereElseEvents() {\r\n angular.element(document).on('click', function (event) {\r\n //If the user clicks on anything OTHER than the #wrapper-notifications element or notification icon\r\n if (\r\n !$(event.target).closest(angular.element(document).find('#mobile-menu-icon')).length &&\r\n !$(event.target).closest(angular.element(document).find('#wrapper-app-mobile-menu')).length\r\n ) {\r\n $scope.collapsed = true;\r\n //Ensure the Angular model updates properly (i.e. perform the scope life cycle)\r\n $scope.$apply();\r\n }\r\n });\r\n }\r\n\r\n $.ajaxSetup({\r\n beforeSend: function (xhr) {\r\n xhr.setRequestHeader('Ocp-Apim-Subscription-Key', config.settings.apiKey);\r\n },\r\n xhrFields: {\r\n withCredentials: true\r\n },\r\n crossDomain: true\r\n });\r\n\r\n function launchInvite() {\r\n $uibModal\r\n .open({\r\n templateUrl: '/app/site/purchase-flow/invite-to-plan/invite-to-plan.html',\r\n controller: 'app.purchase.InviteToPlanController',\r\n controllerAs: 'vm'\r\n })\r\n .result.then(function fulfilled(result) {\r\n if (result === true) {\r\n $uibModal.open({\r\n templateUrl: '/app/site/purchase-flow/invite-to-plan/invite-success.html',\r\n controller: 'app.purchase.InviteToPlanResponseController',\r\n controllerAs: 'vm'\r\n });\r\n } else {\r\n $uibModal.open({\r\n templateUrl: '/app/site/purchase-flow/invite-to-plan/invite-failure.html',\r\n controller: 'app.purchase.InviteToPlanResponseController',\r\n controllerAs: 'vm'\r\n });\r\n }\r\n });\r\n }\r\n }\r\n]);\r\n","(function () {\r\n 'use strict';\r\n\r\n angular.module('app')\r\n .factory('config', ['$window', '$timeout', '$log', configFactory])\r\n .config(['$httpProvider', '$compileProvider', function ($httpProvider, $compileProvider) {\r\n if (!$httpProvider.defaults.headers.get) {\r\n $httpProvider.defaults.headers.get = {};\r\n }\r\n\r\n //disable IE ajax request caching\r\n $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';\r\n $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';\r\n }]);\r\n\r\n function configFactory() {\r\n var current = config;\r\n config.environment = environment;\r\n return current;\r\n }\r\n})();\r\n"],"sourceRoot":"/source/"}