{"version":3,"file":"serviceGuide.js","mappings":"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","sources":["webpack://AvarnSecurityWeb/./Static/js/analytics-utils.js","webpack://AvarnSecurityWeb/webpack/bootstrap","webpack://AvarnSecurityWeb/webpack/runtime/define property getters","webpack://AvarnSecurityWeb/webpack/runtime/hasOwnProperty shorthand","webpack://AvarnSecurityWeb/./Static/js/ServiceGuide/step-handler.js","webpack://AvarnSecurityWeb/./Static/js/ServiceGuide/postal-code-validator.js","webpack://AvarnSecurityWeb/./Static/js/ServiceGuide/contact-form-handler.js","webpack://AvarnSecurityWeb/./Static/js/ServiceGuide/service-guide.js","webpack://AvarnSecurityWeb/./Static/js/ServiceGuide/index.js"],"sourcesContent":["class AnalyticsManager {\n constructor() {\n this.initializeDataLayer();\n }\n\n initializeDataLayer() {\n window.dataLayer = window.dataLayer || [];\n }\n\n pushEvent(eventData) {\n if (window.dataLayer) {\n window.dataLayer.push(eventData);\n console.log('DataLayer push completed:', eventData);\n } else {\n console.warn('dataLayer not found - would have pushed:', eventData);\n }\n }\n\n // Form submission tracking\n trackFormSubmission(formType, formData = {}, location = null) {\n // const baseEventData = {\n // 'event': 'form_submission',\n // 'event_category': 'Forms',\n // 'event_label': formType,\n // };\n //\n // this.pushEvent(baseEventData);\n\n // Track specific form types\n switch (formType) {\n case 'sendmessage':\n this.pushEvent({\n 'event': 'send_message',\n 'name': formData.Name,\n 'phone': formData.PhoneNumber,\n 'email': formData.Email,\n 'message': formData.Message\n });\n break;\n case 'request_quote':\n this.pushEvent({\n 'event': 'request_quote',\n 'name': formData.Name,\n 'phone': formData.Phone,\n 'email': formData.Email,\n });\n break;\n case 'newsletter':\n this.pushEvent({\n 'event': 'newsletter_signup',\n 'email': formData.Email,\n });\n break;\n case 'contactme':\n this.pushEvent({\n 'event': 'contact_me',\n 'contact': formData.Contact,\n ...(location ? { 'location': location } : {})\n });\n break;\n }\n }\n\n // Click tracking\n trackPhoneClick(phoneNumber) {\n this.pushEvent({\n 'event': 'click_phone',\n 'phone': phoneNumber\n });\n }\n\n trackEmailClick(email) {\n this.pushEvent({\n 'event': 'click_email',\n 'email': email\n });\n }\n\n trackServiceGuideSubmission(formData) {\n const eventData = {\n 'event': 'service_guide_submission',\n 'zipcode': formData.postalCode,\n 'securitysolution': formData.selectedService,\n 'contactinfo': formData.phoneOrEmail\n };\n\n // Add dynamic answer fields from the questions\n formData.answers.forEach(answerObj => {\n const questionField = answerObj.question.formField;\n // Handle multiple answers by joining them with comma\n const answerValue = Array.isArray(answerObj.answer)\n ? answerObj.answer.join(',')\n : answerObj.answer;\n\n eventData[questionField] = answerValue;\n });\n\n this.pushEvent(eventData);\n }\n\n trackCustomEvent(eventType, additionalData = {}) {\n this.pushEvent({\n 'event': eventType,\n ...additionalData\n });\n }\n\n // Setup click handlers\n setupClickTracking() {\n // Phone click tracking\n document.querySelectorAll('a[href^=\"tel:\"]').forEach(link => {\n link.addEventListener('click', () => {\n const phoneNumber = link.href.split(\":\")[1];\n this.trackPhoneClick(phoneNumber);\n });\n });\n\n // Email click tracking\n document.querySelectorAll('a[href^=\"mailto:\"]').forEach(link => {\n link.addEventListener('click', () => {\n const email = link.href.split(\":\")[1];\n this.trackEmailClick(email);\n });\n });\n\n // Custom GA event tracking\n document.querySelectorAll('[data-ga]').forEach(element => {\n const eventType = element.getAttribute('data-ga-event');\n\n if (!eventType) {\n return; // Skip if no event type is specified\n }\n\n if (eventType === 'click_read_details') \n {\n element.addEventListener('click', () => {\n // Find the closest parent section with the correct ID\n const section = element.parentElement.querySelector('#see-more-details');\n // Only add event listener if section exists and is hidden\n if (!section?.classList.contains('hidden')) {\n this.trackCustomEvent(eventType);\n }\n });\n return;\n }\n\n // For all other event types\n element.addEventListener('click', () => {\n this.trackCustomEvent(eventType);\n });\n });\n }\n}\n\n// Export a singleton instance\nexport const analyticsManager = new AnalyticsManager();","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export class StepHandler {\n constructor(onStepChange, validateCallback, nextButtonText, recommendationButtonText, totalSteps) {\n this.currentStep = 1;\n this.modal = document.querySelector('[data-component=\"service-guide-modal\"]');\n this.stepPanels = this.modal.querySelectorAll('.step-panel');\n this.totalSteps = this.stepPanels.length - 1;\n this.prevButton = this.modal.querySelector('.nav-button.prev');\n this.nextButton = this.modal.querySelector('.nav-button.next');\n this.onStepChange = onStepChange;\n this.validateCallback = validateCallback; // Lagre validateCallback\n this.nextButtonText = nextButtonText;\n this.recommendationButtonText = recommendationButtonText;\n\n this.navigateNext = this.navigateNext.bind(this);\n this.navigatePrevious = this.navigatePrevious.bind(this);\n \n this.updateStepCounter()\n }\n\n navigateNext() {\n const nextStep = this.currentStep + 1;\n if (nextStep <= this.totalSteps + 1 && this.validateCallback()) { \n this.showStep(nextStep);\n }\n }\n\n navigatePrevious() {\n const prevStep = this.currentStep - 1;\n if (prevStep >= 1) {\n this.showStep(prevStep);\n }\n }\n\n showStep(stepNumber) {\n const currentPanel = this.stepPanels[this.currentStep - 1];\n const nextPanel = this.stepPanels[stepNumber - 1];\n\n // Animate out current panel\n currentPanel.classList.add('exit');\n currentPanel.classList.remove('active');\n\n // Prepare and animate in next panel\n nextPanel.style.display = 'flex';\n requestAnimationFrame(() => {\n nextPanel.classList.add('active');\n });\n\n // Cleanup after animation\n setTimeout(() => {\n currentPanel.classList.remove('exit');\n currentPanel.style.display = 'none';\n }, 300);\n\n // Update navigation buttons\n this.updateNavigationButtons(stepNumber);\n\n // Update current step and counter\n this.currentStep = stepNumber;\n this.updateStepCounter();\n\n // Set focus to first interactive element\n this.setFocusOnNewStep(nextPanel);\n\n // Kall onStepChange callback\n if (this.onStepChange) {\n this.onStepChange(stepNumber, this.totalSteps);\n }\n }\n\n updateNavigationButtons(stepNumber) {\n // Vis/skjul previous button\n this.prevButton.style.display = stepNumber > 1 ? 'flex' : 'none';\n\n // Vis/skjul og oppdater text på next button\n this.nextButton.style.display = stepNumber < (this.totalSteps + 1) ? 'flex' : 'none';\n\n // Endre tekst på next button hvis vi er på nest siste steg\n const nextButtonText = this.nextButton.querySelector('span');\n if (stepNumber === this.totalSteps) {\n //hide button, and display 'submit' button\n this.nextButton.style.display = 'none';\n \n const submitButton = this.modal.querySelector('.service-guide-submit');\n submitButton.style.display = 'flex';\n \n } else {\n nextButtonText.textContent = this.nextButtonText;\n }\n }\n\n updateStepCounter() {\n const currentStepEl = this.modal.querySelector('.current-step');\n const totalStepsEl = this.modal.querySelector('.total-steps');\n\n if (currentStepEl) currentStepEl.textContent = this.currentStep;\n if (totalStepsEl) totalStepsEl.textContent = this.totalSteps;\n }\n\n setFocusOnNewStep(panel) {\n setTimeout(() => {\n const firstInput = panel.querySelector('input, button');\n firstInput?.focus();\n }, 300);\n }\n\n resetToFirstStep() {\n this.stepPanels.forEach((panel, index) => {\n if (index === 0) {\n panel.style.display = 'block';\n panel.classList.add('active');\n } else {\n panel.style.display = 'none';\n panel.classList.remove('active');\n }\n });\n this.currentStep = 1;\n this.updateStepCounter();\n this.updateNavigationButtons(1);\n }\n\n getCurrentStep() {\n return this.currentStep;\n }\n\n getTotalSteps() {\n return this.totalSteps;\n }\n}","export class PostalCodeValidator {\n constructor() {\n // Regex for norsk postnummer (4 siffer)\n this.postalCodePattern = /^\\d{4}$/;\n this.modal = document.querySelector('[data-component=\"service-guide-modal\"]');\n this.input = this.modal.querySelector('#postal-code');\n this.errorMessage = this.modal.querySelector('.error-message');\n }\n\n validate(value) {\n if(value === undefined || value === null) {\n this.updateUI('error');\n return false;\n }\n \n // Fjern ikke-numeriske tegn\n const cleanValue = value?.replace(/\\D/g, '');\n\n if (cleanValue.length === 0) {\n this.updateUI('normal');\n return false;\n }\n \n if (cleanValue.length < 4 || cleanValue.length > 5) {\n this.updateUI('error');\n return false;\n }\n \n this.updateUI('valid');\n return true;\n }\n\n updateUI(state) {\n switch (state) {\n case 'normal':\n this.input.classList.remove('error');\n this.errorMessage.textContent = '';\n this.errorMessage.style.visibility = 'hidden';\n this.errorMessage.removeAttribute('role');\n break;\n\n case 'valid':\n this.input.classList.remove('error');\n this.errorMessage.textContent = '';\n this.errorMessage.style.visibility = 'hidden';\n this.errorMessage.removeAttribute('role');\n break;\n\n case 'error':\n this.input.classList.add('error');\n this.errorMessage.textContent = this.modal.dataset.errorPostalCode;\n this.errorMessage.style.visibility = 'visible';\n this.errorMessage.setAttribute('role', 'alert');\n break;\n }\n }\n\n isValidPostalCodeFormat(postalCode) {\n return this.postalCodePattern.test(postalCode);\n }\n\n sanitizeInput(value) {\n return value.replace(/\\D/g, '').slice(0, 4);\n }\n\n formatInput(value) {\n // Hvis vi vil legge til formatering senere (f.eks. mellomrom)\n return this.sanitizeInput(value);\n }\n}","export class ContactFormHandler {\n constructor() {\n this.modal = document.querySelector('[data-component=\"service-guide-modal\"]');\n this.phoneEmailInput = this.modal.querySelector('#phoneoremail');\n this.newsletterCheckbox = this.modal.querySelector('#newsletter');\n this.termsCheckbox = this.modal.querySelector('#terms');\n this.errorMessage = this.modal.querySelector('.error-message');\n }\n\n initialize() {\n this.setupPhoneEmailInput();\n }\n\n setupPhoneEmailInput() {\n this.phoneEmailInput?.addEventListener('input', (e) => {\n this.phoneEmailInput.value = e.target.value;\n });\n }\n\n isValidEmail(email) {\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n }\n\n isValidPhone(phone) {\n // Check for minimum 8 digits\n return phone.replace(/\\D/g, '').length >= 8;\n }\n\n validate() {\n const phoneEmailValue = this.phoneEmailInput?.value?.trim() || '';\n const terms = this.termsCheckbox?.checked || false;\n const errors = [];\n\n if (!phoneEmailValue) {\n errors.push(this.modal.dataset.errorContactInput);\n this.phoneEmailInput.classList.add('error');\n } else {\n const isEmail = phoneEmailValue.includes('@');\n if (isEmail && !this.isValidEmail(phoneEmailValue)) {\n errors.push(this.modal.dataset.errorContactEmail);\n this.phoneEmailInput.classList.add('error');\n } else if (!isEmail && !this.isValidPhone(phoneEmailValue)) {\n errors.push(this.modal.dataset.errorContactPhone);\n this.phoneEmailInput.classList.add('error');\n } else {\n this.phoneEmailInput.classList.remove('error');\n }\n }\n\n if (!terms) {\n errors.push(this.modal.dataset.errorContactTerms);\n this.termsCheckbox.classList.add('error');\n } else {\n this.termsCheckbox.classList.remove('error');\n }\n \n if (errors.length > 0) {\n this.errorMessage.textContent = errors[0];\n this.errorMessage.style.visibility = 'visible';\n this.errorMessage.setAttribute('role', 'alert');\n return false;\n }\n \n this.errorMessage.textContent = '';\n this.errorMessage.style.visibility = 'hidden';\n this.errorMessage.removeAttribute('role');\n\n return true;\n }\n \n\n reset() {\n if (this.phoneEmailInput) {\n this.phoneEmailInput.value = '';\n this.phoneEmailInput.classList.remove('error');\n }\n\n if (this.newsletterCheckbox) {\n this.newsletterCheckbox.checked = false;\n }\n\n if (this.termsCheckbox) {\n this.termsCheckbox.checked = false;\n this.termsCheckbox.classList.remove('error');\n }\n }\n\n getFormData() {\n return {\n phoneOrEmailInput: this.phoneEmailInput?.value || '',\n newsletter: this.newsletterCheckbox?.checked || false,\n terms: this.termsCheckbox?.checked || false\n };\n }\n\n setFormData(data) {\n if (this.phoneEmailInput && data.phoneOrEmailInput) {\n this.phoneEmailInput.value = data.phoneOrEmailInput;\n }\n\n if (this.newsletterCheckbox && data.newsletter !== undefined) {\n this.newsletterCheckbox.checked = data.newsletter;\n }\n\n if (this.termsCheckbox && data.terms !== undefined) {\n this.termsCheckbox.checked = data.terms;\n }\n }\n}","import { StepHandler } from './step-handler';\nimport { PostalCodeValidator } from './postal-code-validator';\nimport { ContactFormHandler } from './contact-form-handler';\nimport { analyticsManager } from './../analytics-utils.js';\nexport class ServiceGuide {\n constructor(element, options) {\n this.options = options;\n this.priorityOrder = options.priorityOrder;\n this.informationQuestions = options.informationQuestions;\n this.pageId = options.pageId;\n this.serviceoptionNotSelectedId = options.serviceoptionNotSelectedId;\n\n // Dependencies\n this.postalValidator = new PostalCodeValidator();\n this.contactHandler = new ContactFormHandler();\n\n this.stepHandler = new StepHandler(\n // Step change callback\n (currentStep, totalSteps) => {\n if (currentStep === totalSteps + 1 ) {\n this.showServiceDetails();\n }\n },\n // Validate callback\n () => this.validateCurrentStep(),\n // Next button text\n options.nextButtonText,\n // Recommendation button text\n options.recommendationButtonText,\n // Total steps\n options.informationQuestionCount + 2 // +1 for postal code, +1 for service selection\n );\n\n // State\n this.formData = {\n answers: new Array(options.informationQuestionCount).fill(null),\n priorityList: [],\n servicesClicked: [],\n postalCode: null,\n selectedService: null,\n phoneOrEmail: null,\n newsletter: false,\n terms: false,\n pageId: options.pageId,\n gRecaptchaResponse: null\n };\n\n this.modal = element;\n this.lastFocusedElement = null;\n\n this.initializeElements();\n this.initializeContactForm();\n this.attachEventListeners();\n }\n\n getValidServices(postalCode) {\n const postalNumber = parseInt(postalCode);\n\n return this.options.serviceOptions.filter(service => {\n // Service er gyldig hvis den har tomme postnummer-lister\n if (!service.postalCodes?.length && !service.ranges?.length) {\n return true;\n }\n \n //sjekk specific postal codes\n const validPostalCodes = service.postalCodes?.some(code => {\n const codeNumber = parseInt(code);\n return postalNumber === codeNumber;\n });\n \n if (validPostalCodes) {\n return true;\n }\n \n // Sjekk ranges\n return service.ranges?.some(range => {\n const startNumber = parseInt(range.start);\n const endNumber = parseInt(range.end);\n return postalNumber >= startNumber && postalNumber <= endNumber;\n });\n });\n }\n\n handlePostalCode(postalCode) {\n if (!this.postalValidator.validate(postalCode)) {\n return;\n }\n\n this.formData.postalCode = postalCode;\n const validServices = this.getValidServices(postalCode);\n\n if (validServices.length > 0) {\n const container = this.modal.querySelector('.service-options-container');\n\n // Finn alle option-buttons og sjekk deres data-service-id mot validServices\n container.querySelectorAll('.service-option').forEach(button => {\n const buttonServiceId = button.dataset.serviceId?.trim(); // Fjern eventuelle mellomrom\n const service = validServices.find(s => s.id.trim() === buttonServiceId); // Sammenlign med trimmed id\n\n if (service) {\n button.style.display = 'block'; // Vis knappen hvis det er en match\n } else {\n button.style.display = 'none'; // Skjul knappen ellers\n }\n });\n }\n }\n\n validateCurrentStep() {\n const stepIndex = this.stepHandler.getCurrentStep() - 1;\n\n this.hideError();\n \n // Validering av spørsmål\n if (stepIndex < this.formData.answers.length) {\n //also check if the answer is not null and that the answer is not an empty array\n if (this.formData.answers[stepIndex] === null || this.formData.answers[stepIndex].length === 0) {\n this.showError(this.modal.dataset.errorNotAnswered);\n return false;\n }\n }\n\n // Validering av postnummer\n if (stepIndex === this.formData.answers.length) {\n return this.postalValidator.validate(this.formData.postalCode);\n }\n \n // Validering av service valg\n if (stepIndex === this.formData.answers.length + 1) {\n const selectedServices = this.formData.servicesClicked;\n \n // Hvis ingen tjenester er valgt, vis feilmelding\n if (selectedServices.length === 0) {\n this.showError(this.modal.dataset.errorNotAnswered);\n return false;\n }\n \n const priorityOrder = this.priorityOrder;\n \n //if selectedservices firsty entry is unknowm display the highest priority service\n if (selectedServices.length === 1 && selectedServices[0] === 'unknown') {\n this.formData.selectedService = parseInt(priorityOrder[0], 10);\n return true;\n }\n\n // Finn den tjenesten med høyest prioritet\n const highestPriority = priorityOrder.find(priority =>\n selectedServices.includes(parseInt(priority, 10))\n );\n\n // Valider og sett selectedService\n this.formData.selectedService = highestPriority !== undefined\n ? selectedServices.find(service => parseInt(service, 10) === highestPriority)\n : null;\n \n return true;\n }\n\n\n // Validering av kontaktinfo\n if (stepIndex === this.formData.answers.length + 2) {\n const validationResult = this.contactHandler.validate();\n if (validationResult === true) {\n const formData = this.contactHandler.getFormData();\n this.formData.phoneOrEmail = formData.phoneOrEmailInput;\n this.formData.newsletter = formData.newsletter;\n this.formData.terms = formData.terms;\n return true;\n }\n return false;\n }\n\n return true;\n }\n \n showError(message) {\n if (this.errorMessage) {\n this.errorMessage.textContent = message;\n this.errorMessage.style.visibility = 'visible';\n this.errorMessage.setAttribute('role', 'alert');\n }\n }\n\n hideError() {\n if (this.errorMessage) {\n this.errorMessage.style.visibility = 'hidden';\n this.errorMessage.removeAttribute('role');\n }\n }\n \n initializeElements() {\n this.trigger = document.querySelector('[data-modal-trigger=\"service-guide\"]');\n this.closeButtons = this.modal.querySelectorAll('.modal-close');\n this.stepPanels = this.modal.querySelectorAll('.step-panel');\n this.prevButton = this.modal.querySelector('.nav-button.prev');\n this.nextButton = this.modal.querySelector('.nav-button.next');\n this.modalContent = this.modal.querySelector('.modal-content');\n this.postalInput = this.modal.querySelector('#postal-code');\n this.progressIndicator = this.modal.querySelector('.progress-indicator');\n this.errorMessage = this.modal.querySelector('.error-message');\n }\n\n initializeContactForm() {\n this.phoneOrEmailInput = this.modal.querySelector('#phoneoremail');\n this.newsletterCheckbox = this.modal.querySelector('#newsletter');\n this.termsCheckbox = this.modal.querySelector('#terms');\n\n this.phoneOrEmailInput?.addEventListener('input', (e) => {\n this.formData.phoneOrEmail = e.target.value;\n });\n\n this.newsletterCheckbox?.addEventListener('change', (e) => {\n this.formData.newsletter = e.target.checked;\n });\n\n this.termsCheckbox?.addEventListener('change', (e) => {\n this.formData.terms = e.target.checked;\n });\n }\n\n attachEventListeners() {\n // Modal trigger\n this.trigger?.addEventListener('click', () => this.openModal());\n\n // Close button and overlay click\n this.closeButtons?.forEach(button => {\n const shouldReset = button.dataset.resetform === 'true';\n button.addEventListener('click', () => this.closeModal(shouldReset));\n });\n \n this.modal?.addEventListener('click', (e) => {\n if (e.target === this.modal) this.closeModal();\n });\n \n //Postal code input\n this.postalInput?.addEventListener('input', (e) => {\n const value = e.target.value;\n\n // Only allow numbers\n if (!/^\\d*$/.test(value)) {\n e.target.value = value.replace(/\\D/g, '');\n return;\n }\n\n if (this.postalValidator.validate(value)) {\n this.handlePostalCode(value);\n }\n });\n\n // Keyboard handling\n document.addEventListener('keydown', (e) => {\n if (!this.modal.classList.contains('visible')) return;\n\n if (e.key === 'Escape') {\n this.closeModal();\n } else if (e.key === 'Enter' && document.activeElement.classList.contains('option-button')) {\n document.activeElement.click();\n }\n });\n\n // Option buttons\n this.modal.querySelectorAll('.option-button').forEach(button => {\n button.addEventListener('click', (e) => this.handleOptionSelection(e));\n });\n\n this.modal.querySelectorAll('.service-option').forEach(button => {\n button.addEventListener('click', (e) => this.handleServiceSelection(e));\n });\n\n this.modal.querySelectorAll('.service-guide-submit').forEach(button => {\n button.addEventListener('click', (e) => this.submitForm());\n });\n\n // Navigation buttons\n this.prevButton?.addEventListener('click', () => this.stepHandler.navigatePrevious());\n this.nextButton?.addEventListener('click', () => this.stepHandler.navigateNext());\n this.modal.addEventListener('keydown', (e) => this.handleTabKey(e));\n }\n\n handleServiceSelection(e) {\n const button = e.target;\n const isUnknownOption = button.dataset.value === 'unknown';\n const parsedToInt = parseInt(button.dataset.epiContentid);\n\n if (isUnknownOption) {\n // Fjern alle andre valgte tjenester\n this.formData.servicesClicked = [];\n this.modal.querySelectorAll('.service-option').forEach(button => {\n this.removeButtonSelectedClasses(button);\n });\n this.addButtonSelectedClasses(button);\n this.formData.servicesClicked.push(this.serviceoptionNotSelectedId);\n return;\n }\n\n // Hvis en vanlig service velges, fjern 'unknown' hvis den eksisterer\n const unknownButton = this.modal.querySelector('.service-option[data-value=\"unknown\"]');\n if (unknownButton && unknownButton.classList.contains('selected')) {\n this.removeButtonSelectedClasses(unknownButton);\n this.formData.servicesClicked = this.formData.servicesClicked.filter(\n id => id !== this.serviceoptionNotSelectedId\n );\n }\n\n const index = this.formData.servicesClicked.indexOf(parsedToInt);\n\n if (index === -1) {\n // Hvis ID ikke finnes i listen, legg den til og marker knappen som valgt\n this.addButtonSelectedClasses(button);\n this.formData.servicesClicked.push(parsedToInt);\n } else {\n // Hvis ID allerede finnes i listen, fjern den og marker knappen som ikke-valgt\n this.removeButtonSelectedClasses(button);\n this.formData.servicesClicked.splice(index, 1);\n }\n }\n \n handleOptionSelection(e) {\n const button = e.target;\n const stepPanel = button.closest('.step-panel');\n\n if (!stepPanel) {\n console.error(\"Step panel not found\");\n return;\n }\n\n const stepIndex = parseInt(stepPanel.dataset.step) - 1;\n const isStepMultipleChoice = stepPanel.getAttribute('data-multiple-choice') === 'True';\n const isUnknownOption = button.dataset.value === 'unknown';\n\n // Initialiser formData hvis den ikke eksisterer\n if (!this.formData) {\n this.formData = { answers: [] };\n }\n if (!Array.isArray(this.formData.answers)) {\n this.formData.answers = [];\n }\n\n // For vanlige alternativer, sjekk dataset attributter\n if (!isUnknownOption && (!button.dataset || !button.dataset.questionId || !button.dataset.value)) {\n console.error(\"Button or required dataset attributes are missing\");\n return;\n }\n\n if (isStepMultipleChoice) {\n let currentAnswers = this.formData.answers[stepIndex] || [];\n\n if (isUnknownOption) {\n // Hvis \"unknown\" velges, fjern alle andre valg\n stepPanel.querySelectorAll('.option-button').forEach(btn => {\n this.removeButtonSelectedClasses(btn);\n });\n this.addButtonSelectedClasses(button);\n this.formData.answers[stepIndex] = ['unknown'];\n } else {\n // Hvis et annet alternativ velges, fjern \"unknown\" hvis det er valgt\n const unknownButton = stepPanel.querySelector('.option-button[data-value=\"unknown\"]');\n if (unknownButton && unknownButton.getAttribute('aria-checked') === 'true') {\n this.removeButtonSelectedClasses(unknownButton);\n currentAnswers = []; // Tøm listen siden \"unknown\" var valgt\n }\n\n const valueIndex = currentAnswers.indexOf(button.dataset.value);\n if (valueIndex !== -1) {\n currentAnswers.splice(valueIndex, 1);\n this.removeButtonSelectedClasses(button);\n } else {\n currentAnswers.push(button.dataset.value);\n this.addButtonSelectedClasses(button);\n }\n this.formData.answers[stepIndex] = currentAnswers;\n }\n } else {\n // For single choice, fjern alle tidligere valg og sett kun ett svar\n stepPanel.querySelectorAll('.option-button').forEach(btn => {\n this.removeButtonSelectedClasses(btn);\n });\n\n this.addButtonSelectedClasses(button);\n this.formData.answers[stepIndex] = [button.dataset.value];\n }\n\n this.hideError();\n }\n\n handleTabKey(e) {\n if (e.key !== 'Tab') return;\n\n const focusableElements = this.getFocusableElements();\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault();\n lastElement.focus();\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault();\n firstElement.focus();\n }\n }\n\n showServiceDetails() {\n const serviceId = this.formData.selectedService;\n const recommendationContainer = this.modal.querySelector('.recommendation-container');\n //hide navigations\n this.prevButton.style.display = 'none';\n this.nextButton.style.display = 'none';\n this.progressIndicator.style.display = 'none';\n \n let hasSetService = false;\n\n recommendationContainer.querySelectorAll('.service-details-content').forEach(servicedetails => {\n const epiContentId = servicedetails.dataset.epiContentid?.trim()\n const service = serviceId === parseInt(epiContentId);\n\n if (service && !hasSetService) {\n servicedetails.style.display = 'grid';\n hasSetService = true;\n } else {\n servicedetails.style.display = 'none';\n }\n });\n }\n\n getFocusableElements() {\n const focusableSelectors = 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n const elements = this.modal.querySelectorAll(focusableSelectors);\n return Array.from(elements).filter(el => {\n return !el.hasAttribute('disabled') &&\n !el.getAttribute('aria-hidden') &&\n el.offsetParent !== null;\n });\n }\n \n addButtonSelectedClasses(button) {\n button.classList.add('selected');\n button.classList.add('btn-primary');\n button.classList.remove('btn-tertiary');\n button.setAttribute('aria-checked', 'true');\n }\n \n removeButtonSelectedClasses(button) {\n button.classList.remove('selected');\n button.classList.remove('btn-primary');\n button.classList.add('btn-tertiary');\n button.setAttribute('aria-checked', 'false');\n }\n\n openModal() {\n this.lastFocusedElement = document.activeElement;\n\n const currentStep = this.stepHandler.getCurrentStep();\n \n this.stepPanels.forEach((panel, index) => {\n if (index === currentStep - 1) {\n panel.style.display = 'flex';\n panel.classList.add('active');\n } else {\n panel.style.display = 'none';\n panel.classList.remove('active');\n }\n });\n\n this.modal.style.display = 'flex';\n document.body.style.overflow = 'hidden';\n\n requestAnimationFrame(() => {\n this.modal.classList.add('visible');\n setTimeout(() => {\n const focusableElements = this.getFocusableElements();\n if (focusableElements.length) {\n focusableElements[0].focus();\n }\n }, 100);\n });\n }\n\n closeModal(resetForm = false) {\n this.modal.classList.remove('visible');\n document.body.style.overflow = '';\n \n if (resetForm) {\n this.resetForm();\n this.stepHandler.showStep(1)\n }\n\n setTimeout(() => {\n this.modal.style.display = 'none';\n if (this.lastFocusedElement) {\n this.lastFocusedElement.focus();\n }\n }, 300);\n }\n \n resetForm() {\n this.formData = {\n answers: new Array(this.options.informationQuestionCount).fill(null),\n priorityList: [],\n servicesClicked: [],\n postalCode: null,\n selectedService: null,\n phoneOrEmailInput: null,\n newsletter: false,\n terms: false,\n pageId: this.options.pageId\n };\n \n this.stepPanels.forEach(panel => {\n panel.querySelectorAll('.option-button').forEach(button => {\n this.removeButtonSelectedClasses(button);\n });\n });\n\n this.stepPanels.forEach(panel => {\n panel.querySelectorAll('.service-option').forEach(button => {\n this.removeButtonSelectedClasses(button);\n });\n });\n\n\n this.postalInput.value = '';\n this.phoneOrEmailInput.value = '';\n this.newsletterCheckbox.checked = false;\n this.termsCheckbox.checked = false;\n\n this.prevButton.style.display = 'block';\n this.nextButton.style.display = 'block';\n this.progressIndicator.style.display = 'block';\n\n this.modal.querySelectorAll('.service-guide-submit').forEach(button => {\n button.disabled = false;\n });\n\n // this.stepHandler.showStep(1);\n \n }\n \n submitForm() {\n const isValid = this.validateCurrentStep();\n \n if (!isValid) {\n return;\n }\n \n const formData = this.formData;\n const informationQuestions = this.options.informationQuestions;\n const reCaptchaSiteKey = document.getElementById('ReCaptchaSiteKey').value;\n\n this.modal.querySelectorAll('.service-guide-submit').forEach(button => {\n button.disabled = true;\n });\n \n //replace the answers with the question/answer pairs\n formData.answers = informationQuestions.map((question, index) => {\n return {\n question: question,\n answer: formData.answers[index]\n };\n });\n \n const _this = this;\n \n grecaptcha.ready(function() {\n grecaptcha.execute(reCaptchaSiteKey, {action: 'submit'}).then(function(token) {\n \n formData.gRecaptchaResponse = token;\n \n fetch(\"/api/serviceguide/serviceguide-form\", {\n method: \"POST\",\n body: JSON.stringify(formData),\n headers: {\n \"Content-Type\": \"application/json\",\n \"RequestVerificationToken\": _this.modal.querySelector('input[name=\"__RequestVerificationToken\"]').value\n }\n }).then(\n response => {\n \n if (response.ok) {\n analyticsManager.trackServiceGuideSubmission(formData);\n\n //next step\n _this.stepHandler.navigateNext();\n _this.modal.querySelectorAll('.service-guide-submit').forEach(button => {\n button.style.display = 'none';\n });\n\n return false;\n\n } else {\n alert('Error submitting form');\n _this.modal.querySelectorAll('.service-guide-submit').forEach(button => {\n button.disabled = false;\n });\n }\n }\n );\n });\n });\n }\n}","import { ServiceGuide } from './service-guide';\nimport { StepHandler } from './step-handler';\nimport { PostalCodeValidator } from './postal-code-validator';\nimport { ContactFormHandler } from './contact-form-handler';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const serviceGuideElement = document.querySelector('[data-component=\"service-guide-modal\"]');\n\n if (serviceGuideElement) {\n try {\n const serviceGuide = new ServiceGuide(serviceGuideElement, {\n serviceOptions: window.serviceOptions,\n informationQuestionCount: window.informationQuestionCount,\n priorityOrder: window.priorityOrder,\n informationQuestions: window.informationQuestions,\n nextButtonText: window.nextButtonText,\n recommendationButtonText: window.recommendationButtonText,\n serviceoptionNotSelectedId: window.serviceoptionNotSelectedId,\n pageId: window.pageId,\n });\n\n if (process.env.NODE_ENV === 'development') {\n window.serviceGuide = serviceGuide;\n }\n } catch (error) {\n console.error('Failed to initialize ServiceGuide:', error);\n }\n }\n});\n\nexport {\n ServiceGuide,\n StepHandler,\n PostalCodeValidator,\n ContactFormHandler,\n};"],"names":["analyticsManager","AnalyticsManager","_classCallCheck","this","initializeDataLayer","key","value","window","dataLayer","eventData","push","console","log","warn","formType","formData","arguments","length","undefined","location","pushEvent","Name","PhoneNumber","Email","Message","Phone","_objectSpread","Contact","phoneNumber","email","postalCode","selectedService","phoneOrEmail","answers","forEach","answerObj","questionField","question","formField","answerValue","Array","isArray","answer","join","eventType","additionalData","_this","document","querySelectorAll","link","addEventListener","href","split","trackPhoneClick","trackEmailClick","element","getAttribute","trackCustomEvent","section","parentElement","querySelector","classList","contains","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","d","definition","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","StepHandler","onStepChange","validateCallback","nextButtonText","recommendationButtonText","totalSteps","currentStep","modal","stepPanels","prevButton","nextButton","navigateNext","bind","navigatePrevious","updateStepCounter","nextStep","showStep","prevStep","stepNumber","currentPanel","nextPanel","add","remove","style","display","requestAnimationFrame","setTimeout","updateNavigationButtons","setFocusOnNewStep","textContent","currentStepEl","totalStepsEl","panel","firstInput","focus","index","PostalCodeValidator","postalCodePattern","input","errorMessage","updateUI","cleanValue","replace","state","visibility","removeAttribute","dataset","errorPostalCode","setAttribute","test","slice","sanitizeInput","ContactFormHandler","phoneEmailInput","newsletterCheckbox","termsCheckbox","setupPhoneEmailInput","_this$phoneEmailInput","e","target","phone","_this$phoneEmailInput2","_this$termsCheckbox","phoneEmailValue","trim","terms","checked","errors","isEmail","includes","isValidEmail","errorContactEmail","isValidPhone","errorContactPhone","errorContactInput","errorContactTerms","_this$phoneEmailInput3","_this$newsletterCheck","_this$termsCheckbox2","phoneOrEmailInput","newsletter","data","ServiceGuide","options","_this2","priorityOrder","informationQuestions","pageId","serviceoptionNotSelectedId","postalValidator","contactHandler","stepHandler","showServiceDetails","validateCurrentStep","informationQuestionCount","fill","priorityList","servicesClicked","gRecaptchaResponse","lastFocusedElement","initializeElements","initializeContactForm","attachEventListeners","postalNumber","parseInt","serviceOptions","filter","service","_service$postalCodes","_service$ranges","_service$postalCodes2","_service$ranges2","postalCodes","ranges","some","code","codeNumber","range","startNumber","start","endNumber","end","validate","validServices","getValidServices","button","_button$dataset$servi","buttonServiceId","serviceId","find","s","id","stepIndex","getCurrentStep","hideError","showError","errorNotAnswered","selectedServices","highestPriority","priority","getFormData","message","trigger","closeButtons","modalContent","postalInput","progressIndicator","_this$phoneOrEmailInp","_this3","_this$trigger","_this$closeButtons","_this$modal","_this$postalInput","_this$prevButton","_this$nextButton","_this4","openModal","shouldReset","resetform","closeModal","handlePostalCode","activeElement","click","handleOptionSelection","handleServiceSelection","submitForm","handleTabKey","_this5","isUnknownOption","parsedToInt","epiContentid","removeButtonSelectedClasses","addButtonSelectedClasses","unknownButton","indexOf","splice","_this6","stepPanel","closest","step","isStepMultipleChoice","questionId","currentAnswers","btn","valueIndex","error","focusableElements","getFocusableElements","firstElement","lastElement","shiftKey","preventDefault","recommendationContainer","hasSetService","servicedetails","_servicedetails$datas","epiContentId","elements","from","el","hasAttribute","offsetParent","_this7","body","overflow","_this8","resetForm","_this9","disabled","reCaptchaSiteKey","getElementById","map","grecaptcha","ready","execute","action","then","token","fetch","method","JSON","stringify","headers","response","ok","trackServiceGuideSubmission","alert","serviceGuideElement"],"sourceRoot":""}