{"version":3,"file":"zoomv.6737.min.js?t=c6eb318d00c1fb7eb4ff","mappings":"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","sources":["webpack://@hero-digital/zoom/./src/components/components/AicRoiCalculator/AicRoiCalculator.js","webpack://@hero-digital/zoom/./src/js/utilities/utilities.js"],"sourcesContent":["import {setCookie} from '../../../js/utilities/utilities'\r\nclass AicRoiCalculator {\r\n constructor(el) {\r\n this.el = el\r\n this.isZAICActive = true\r\n this.resultContainer = this.el.querySelector('.fdn-aicrocalculator-wrapper__results--container')\r\n this.sliders = this.el.querySelectorAll(\r\n '.fdn-aicrocalculator-wrapper__calculator__body--wrapper--question--sliderWrapper--slider'\r\n )\r\n this.noOfZoomLicenses = this.el.querySelector(\".fdn-aicrocalculator-wrapper__calculator__body--wrapper--question--sliderWrapper--content--slidervalue.question-6\")\r\n this.calculatorWrapper = this.el.querySelector('.fdn-aicrocalculator-wrapper__calculator')\r\n this.useZoomAicYes = this.el.querySelector(\r\n '.fdn-aicrocalculator-wrapper__calculator__head--button--yes'\r\n )\r\n this.useZoomAicNo = this.el.querySelector(\r\n '.fdn-aicrocalculator-wrapper__calculator__head--button--no'\r\n )\r\n this.buttonGetResults = this.el.querySelector(\".fdn-aicrocalculator-wrapper__results .fdn-aicrocalculator-wrapper__calculator__head--button\")\r\n this.calculatorBody = this.el.querySelector('.fdn-aicrocalculator-wrapper__calculator__body')\r\n //this.calculatorHeight = this.calculatorBody.scrollHeight\r\n this.sliderTextBoxValue = this.el.querySelectorAll(\".fdn-aicrocalculator-wrapper__calculator__body--wrapper--question--sliderWrapper--content--slidervalue:not(.question-6)\")\r\n\r\n this.result1 = this.el.querySelector(\"#result-1\")\r\n this.result2 = this.el.querySelector(\"#result-2\")\r\n this.locale = document.documentElement.lang ? document.documentElement.lang : 'en'\r\n\r\n this.question1 = \"\"\r\n this.question2 = \"\"\r\n this.question3 = \"\"\r\n this.question4 = \"\"\r\n this.question5 = \"\"\r\n this.question6 = \"\"\r\n\r\n // calculator page resulsts\r\n this.whatYouCanSaveWithZoomAICompanionPerWeek = 0\r\n this.whatYouCanSaveWithZoomAICompanionPerYear = 0\r\n\r\n // donwload page results\r\n this.totalTimeSavingsPerYearIndividual = 0\r\n this.totalTimeSavingsPerWeekIndividual = 0\r\n this.takingMeetingNotesWithMeetingSummaryPerYearIndividual = 0\r\n this.takingMeetingNotesWithMeetingSummaryPerWeekIndividual = 0\r\n this.readingMeetingSummaryVsAttendingTheMeetingPerYearIndividual = 0\r\n this.readingMeetingSummaryVsAttendingTheMeetingPerWeekIndividual = 0\r\n this.percentOfTimeSavedInAMeetingIndividual = 0\r\n this.totalTimeSavingsPerYearCompany = 0\r\n this.totalTimeSavingsPerWeekCompany = 0\r\n this.takingMeetingNotesWithMeetingSummaryPerYearCompany = 0\r\n this.takingMeetingNotesWithMeetingSummaryPerWeekCompany = 0\r\n this.readingMeetingSummaryVsAttendingTheMeetingPerYearCompany = 0\r\n this.readingMeetingSummaryVsAttendingTheMeetingPerWeekCompany = 0\r\n this.totalLicenseCostSavingsPerYear = 0\r\n\r\n // Calculator result Object\r\n this.calculatorResults = { \r\n // Calculator page results\r\n whatYouCanSaveWithZoomAICompanionPerWeek: \"XX\",\r\n whatYouCanSaveWithZoomAICompanionPerYear: \"X,XXX\",\r\n // Donwload Page Indidividual results\r\n totalTimeSavingsPerYearIndividual: \"XX\", \r\n totalTimeSavingsPerWeekIndividual: \"XX\", \r\n takingMeetingNotesWithMeetingSummaryPerYearIndividual: \"XX\",\r\n takingMeetingNotesWithMeetingSummaryPerWeekIndividual: \"XX\",\r\n readingMeetingSummaryVsAttendingTheMeetingPerYearIndividual: \"XX\",\r\n readingMeetingSummaryVsAttendingTheMeetingPerWeekIndividual: \"XX\",\r\n percentOfTimeSavedInAMeetingIndividual: \"XX\",\r\n // Download Page Company results\r\n totalTimeSavingsPerYearCompany : \"XX\", \r\n totalTimeSavingsPerWeekCompany : \"XX\", \r\n takingMeetingNotesWithMeetingSummaryPerYearCompany : \"XX\",\r\n takingMeetingNotesWithMeetingSummaryPerWeekCompany: \"$XX.xx\",\r\n readingMeetingSummaryVsAttendingTheMeetingPerYearCompany: \"XX\",\r\n readingMeetingSummaryVsAttendingTheMeetingPerWeekCompany: \"XX\",\r\n totalLicenseCostSavingsPerYear: \"XX\",\r\n isIndividual: \"\"\r\n }\r\n \r\n this.init()\r\n }\r\n\r\n init () {\r\n this.triggerYerorNo()\r\n this.onPageLoadmodifyRangeSliderUi()\r\n this.updateRangeSliderOnUserInput()\r\n this.noOfEmployeesChange()\r\n addEventListener(\"resize\", (event) => this.triggerYerorNo())\r\n }\r\n\r\n triggerYerorNo() {\r\n this.useZoomAicYes?.addEventListener('click', () => {\r\n let bodyHeight = this.calculatorBody.scrollHeight\r\n this.resultContainer.classList.remove('default-state')\r\n this.calculatorWrapper.classList.remove('aic-no')\r\n this.calculatorWrapper.classList.add('aic-yes')\r\n if(this.isZAICActive) {\r\n this.isZAICActive = false\r\n this.calculatorBody.removeAttribute('hidden') \r\n this.calculatorBody.setAttribute(\"style\", \"max-height:\"+bodyHeight+\"px;opacity:1;\")\r\n }\r\n this.calculator()\r\n this.enableGetResultsButton()\r\n })\r\n this.useZoomAicNo?.addEventListener('click', () => {\r\n let bodyHeight = this.calculatorBody.scrollHeight\r\n this.resultContainer.classList.remove('default-state')\r\n this.isNoActive = false\r\n this.calculatorWrapper.classList.remove('aic-yes')\r\n this.calculatorWrapper.classList.add('aic-no')\r\n if(this.isZAICActive) {\r\n this.isZAICActive = false\r\n this.calculatorBody.removeAttribute('hidden') \r\n this.calculatorBody.setAttribute(\"style\", \"max-height:\"+bodyHeight+\"px;opacity:1;\")\r\n }\r\n this.calculator()\r\n this.enableGetResultsButton()\r\n })\r\n }\r\n\r\n onPageLoadmodifyRangeSliderUi() {\r\n // Match the range slider as per UI\r\n this.sliders.forEach((slider, index) => { \r\n this.modifyRangeSliderPosition(slider)\r\n // Update the slider value in the text box\r\n slider.addEventListener('input', () => {\r\n const validation = this.validateField(slider, slider.value)\r\n if (validation) {\r\n this.sliderTextBoxValue[index].value = slider.value\r\n this.sliderTextBoxValue[index].setAttribute('value',slider.value)\r\n slider.setAttribute('value',slider.value)\r\n this.calculator()\r\n }\r\n })\r\n })\r\n }\r\n\r\n modifyRangeSliderPosition(slider) {\r\n let sliderValue = slider.getAttribute('value')\r\n let sliderMinValue = slider.getAttribute('min')\r\n let sliderMaxValue = slider.getAttribute('max')\r\n var value = (sliderValue - sliderMinValue) / (sliderMaxValue - sliderMinValue) * 100\r\n slider.style.background = 'linear-gradient(to right, #0B5CFF ' + value + '%, #E0E0E6 ' + value + '%)'\r\n slider.addEventListener('input', function() {\r\n var value = (this.value - this.min) / (this.max - this.min) * 100\r\n this.style.background = 'linear-gradient(to right, #0B5CFF ' + value + '%, #E0E0E6 ' + value + '%)'\r\n })\r\n }\r\n\r\n updateRangeSliderOnUserInput() {\r\n this.sliderTextBoxValue.forEach((input, index) => {\r\n input.addEventListener('input', () => {\r\n var inputValue = input.value\r\n if(!isNaN(inputValue)) {\r\n const validation = this.validateField(input, inputValue)\r\n if (validation) {\r\n this.sliders[index].value = inputValue\r\n this.sliders[index].setAttribute('value',inputValue)\r\n this.modifyRangeSliderPosition(this.sliders[index])\r\n this.enableGetResultsButton()\r\n this.calculator()\r\n } else {\r\n this.disableGetResultsButton()\r\n }\r\n } else {\r\n this.displayErrorMessage(input)\r\n this.disableGetResultsButton()\r\n }\r\n })\r\n })\r\n }\r\n\r\n enableGetResultsButton() {\r\n if (this.buttonGetResults.hasAttribute('disabled')) {\r\n this.buttonGetResults.disabled = false\r\n this.buttonGetResults.removeAttribute('data-disabled')\r\n }\r\n }\r\n\r\n disableGetResultsButton() {\r\n if (!(this.buttonGetResults.hasAttribute('disabled'))) {\r\n this.buttonGetResults.disabled = true\r\n this.buttonGetResults.setAttribute('data-disabled', 'disabled')\r\n }\r\n }\r\n\r\n validateField(element, inputvalue) {\r\n let decimalRegex = /^[0-9]*$/\r\n let value = parseInt(inputvalue)\r\n if(!isNaN(value) && decimalRegex.test(inputvalue) && inputvalue != \"\") {\r\n let slider = element.closest('.fdn-aicrocalculator-wrapper__calculator__body--wrapper--question').querySelector('.fdn-aicrocalculator-wrapper__calculator__body--wrapper--question--sliderWrapper--slider')\r\n let sliderMinValue = parseInt(slider.getAttribute('min'))\r\n let sliderMaxValue = parseInt(slider.getAttribute('max'))\r\n if(value >= sliderMinValue && value <= sliderMaxValue) {\r\n this.hideErrorMessage(element)\r\n this.enableGetResultsButton()\r\n return true\r\n } else {\r\n this.disableGetResultsButton()\r\n this.displayErrorMessage(element)\r\n return false\r\n }\r\n } else {\r\n this.displayErrorMessage(element)\r\n this.disableGetResultsButton()\r\n return false\r\n }\r\n }\r\n\r\n noOfEmployeesChange() {\r\n this.noOfZoomLicenses.addEventListener('input', () => {\r\n const minValue = parseInt(this.noOfZoomLicenses.getAttribute('data-min'))\r\n const maxValue = parseInt(this.noOfZoomLicenses.getAttribute('data-max'))\r\n if(this.noOfZoomLicenses.value >= minValue && this.noOfZoomLicenses.value <= maxValue) {\r\n this.hideErrorMessage(this.noOfZoomLicenses)\r\n this.enableGetResultsButton()\r\n this.calculator()\r\n } else {\r\n this.displayErrorMessage(this.noOfZoomLicenses)\r\n this.disableGetResultsButton()\r\n }\r\n })\r\n }\r\n\r\n displayErrorMessage(element) {\r\n element.closest('.fdn-aicrocalculator-wrapper__calculator__body--wrapper--question').querySelector('.fdn-aicrocalculator-wrapper__calculator__body--wrapper--question--errorMessage').removeAttribute('hidden')\r\n }\r\n\r\n hideErrorMessage(element) {\r\n element.closest('.fdn-aicrocalculator-wrapper__calculator__body--wrapper--question').querySelector('.fdn-aicrocalculator-wrapper__calculator__body--wrapper--question--errorMessage').setAttribute('hidden', 'hidden')\r\n }\r\n\r\n displayConditionalErrorMessage(element) {\r\n element.closest('.fdn-aicrocalculator-wrapper__calculator__body--wrapper--question').querySelector('.fdn-aicrocalculator-wrapper__calculator__body--wrapper--question--conditional--errorMessage').removeAttribute('hidden')\r\n }\r\n\r\n hideConditionalErrorMessage(element) {\r\n element.closest('.fdn-aicrocalculator-wrapper__calculator__body--wrapper--question').querySelector('.fdn-aicrocalculator-wrapper__calculator__body--wrapper--question--conditional--errorMessage').setAttribute('hidden', 'hidden')\r\n }\r\n\r\n calculator() {\r\n this.question1 = parseInt(this.el.querySelector('.question-1').value)\r\n this.question2 = parseInt(this.el.querySelector('.question-2').value)\r\n this.question3 = parseInt(this.el.querySelector('.question-3').value)\r\n this.question4 = parseInt(this.el.querySelector('.question-4').value)\r\n this.question5 = parseInt(this.el.querySelector('.question-5').value)\r\n this.question6 = parseInt(this.el.querySelector('.question-6').value)\r\n\r\n this.calculatorResults.isIndividual = this.question6 == 1\r\n\r\n if(this.question3 < this.question2) {\r\n this.hideConditionalErrorMessage(this.el.querySelector('.question-3'))\r\n this.enableGetResultsButton()\r\n } else {\r\n this.displayConditionalErrorMessage(this.el.querySelector('.question-3'))\r\n this.disableGetResultsButton()\r\n return false\r\n }\r\n\r\n if((!isNaN(this.question1)) && (!isNaN(this.question2)) && (!isNaN(this.question3)) && (!isNaN(this.question4)) && (!isNaN(this.question5)) && (!isNaN(this.question6))) {\r\n // Calculator page results\r\n this.whatYouCanSaveWithZoomAICompanionPerWeek = Math.round(\r\n (((this.question3 * this.question1) / 60) * 0.5) +\r\n (((this.question5 * this.question2) / 60) * 0.75) +\r\n (((this.question4 * this.question1) / 60) * 0.5)\r\n )\r\n this.calculatorResults.whatYouCanSaveWithZoomAICompanionPerWeek = this.whatYouCanSaveWithZoomAICompanionPerWeek.toLocaleString(this.locale)\r\n\r\n this.whatYouCanSaveWithZoomAICompanionPerYear = Math.round(\r\n (\r\n (((this.question3 * this.question1) / 60) * 0.5) +\r\n (((this.question5 * this.question2) / 60) * 0.75) +\r\n (((this.question4 * this.question1) / 60) * 0.5)\r\n ) * 52\r\n )\r\n this.calculatorResults.whatYouCanSaveWithZoomAICompanionPerYear = this.whatYouCanSaveWithZoomAICompanionPerYear.toLocaleString(this.locale)\r\n \r\n //download page results\r\n this.totalTimeSavingsPerYearIndividual = Math.round((\r\n (((this.question3 * this.question1) / 60) * 0.5) +\r\n (((this.question5 * this.question2) / 60) * 0.75) +\r\n (((this.question4 * this.question1) / 60) * 0.5)\r\n ) * 52)\r\n this.calculatorResults.totalTimeSavingsPerYearIndividual = this.totalTimeSavingsPerYearIndividual.toLocaleString(this.locale)\r\n\r\n this.totalTimeSavingsPerWeekIndividual = Math.round(\r\n (((this.question3 * this.question1) / 60) * 0.5) +\r\n (((this.question5 * this.question2) / 60) * 0.75) +\r\n (((this.question4 * this.question1) / 60) * 0.5)\r\n )\r\n this.calculatorResults.totalTimeSavingsPerWeekIndividual = this.totalTimeSavingsPerWeekIndividual.toLocaleString(this.locale)\r\n\r\n this.takingMeetingNotesWithMeetingSummaryPerYearIndividual = Math.round(\r\n (\r\n (((this.question3 * this.question1) / 60) * 0.5) * 52\r\n )\r\n )\r\n this.calculatorResults.takingMeetingNotesWithMeetingSummaryPerYearIndividual = this.takingMeetingNotesWithMeetingSummaryPerYearIndividual.toLocaleString(this.locale)\r\n\r\n this.takingMeetingNotesWithMeetingSummaryPerWeekIndividual = Math.round(\r\n ((this.question3 * this.question1) / 60) * 0.5\r\n )\r\n this.calculatorResults.takingMeetingNotesWithMeetingSummaryPerWeekIndividual = this.takingMeetingNotesWithMeetingSummaryPerWeekIndividual.toLocaleString(this.locale)\r\n\r\n this.readingMeetingSummaryVsAttendingTheMeetingPerYearIndividual = Math.round(\r\n (\r\n (((this.question5 * this.question2) / 60) * 0.75) * 52\r\n )\r\n )\r\n this.calculatorResults.readingMeetingSummaryVsAttendingTheMeetingPerYearIndividual = this.readingMeetingSummaryVsAttendingTheMeetingPerYearIndividual.toLocaleString(this.locale)\r\n\r\n this.readingMeetingSummaryVsAttendingTheMeetingPerWeekIndividual = Math.round(\r\n ((this.question5 * this.question2) / 60) * 0.75\r\n )\r\n this.calculatorResults.readingMeetingSummaryVsAttendingTheMeetingPerWeekIndividual = this.readingMeetingSummaryVsAttendingTheMeetingPerWeekIndividual.toLocaleString(this.locale)\r\n\r\n this.percentOfTimeSavedInAMeetingIndividual = Math.round((this.question3 / this.question2)*100)\r\n this.calculatorResults.percentOfTimeSavedInAMeetingIndividual = this.percentOfTimeSavedInAMeetingIndividual.toLocaleString(this.locale)\r\n \r\n this.totalTimeSavingsPerYearCompany = Math.round(\r\n (\r\n (\r\n (((this.question3 * this.question1) / 60) * 0.5) +\r\n (((this.question5 * this.question2) / 60) * 0.75) +\r\n (((this.question4 * this.question1) / 60) * 0.5)\r\n ) * this.question6\r\n ) * 52\r\n )\r\n this.calculatorResults.totalTimeSavingsPerYearCompany = this.totalTimeSavingsPerYearCompany.toLocaleString(this.locale)\r\n\r\n this.totalTimeSavingsPerWeekCompany = Math.round(\r\n (\r\n (((this.question3 * this.question1) / 60) * 0.5) +\r\n (((this.question5 * this.question2) / 60) * 0.75) +\r\n (((this.question4 * this.question1) / 60) * 0.5)\r\n ) * this.question6\r\n )\r\n this.calculatorResults.totalTimeSavingsPerWeekCompany = this.totalTimeSavingsPerWeekCompany.toLocaleString(this.locale)\r\n\r\n this.takingMeetingNotesWithMeetingSummaryPerYearCompany = Math.round(\r\n ((((this.question3 * this.question1) / 60) * 0.5) * 52) * this.question6\r\n )\r\n this.calculatorResults.takingMeetingNotesWithMeetingSummaryPerYearCompany = this.takingMeetingNotesWithMeetingSummaryPerYearCompany.toLocaleString(this.locale)\r\n\r\n this.takingMeetingNotesWithMeetingSummaryPerWeekCompany = Math.round(\r\n ((((this.question3 * this.question1) / 60) * 0.5) * this.question6)\r\n )\r\n this.calculatorResults.takingMeetingNotesWithMeetingSummaryPerWeekCompany = this.takingMeetingNotesWithMeetingSummaryPerWeekCompany.toLocaleString(this.locale)\r\n \r\n this.readingMeetingSummaryVsAttendingTheMeetingPerYearCompany = Math.round(\r\n ((((this.question5 * this.question2) / 60) * 0.75) * 52) * this.question6\r\n )\r\n this.calculatorResults.readingMeetingSummaryVsAttendingTheMeetingPerYearCompany = this.readingMeetingSummaryVsAttendingTheMeetingPerYearCompany.toLocaleString(this.locale)\r\n\r\n this.readingMeetingSummaryVsAttendingTheMeetingPerWeekCompany = Math.round(\r\n (((this.question5 * this.question2) / 60) * 0.75) * this.question6\r\n )\r\n this.calculatorResults.readingMeetingSummaryVsAttendingTheMeetingPerWeekCompany = this.readingMeetingSummaryVsAttendingTheMeetingPerWeekCompany.toLocaleString(this.locale)\r\n\r\n this.totalLicenseCostSavingsPerYear = Math.round(15 * this.question6 * 12)\r\n this.calculatorResults.totalLicenseCostSavingsPerYear = this.totalLicenseCostSavingsPerYear.toLocaleString(this.locale)\r\n\r\n // Set cookie for 1 days\r\n this.setObjectCookie(\"AicRoiCalculatorResults\", this.calculatorResults, 1) \r\n const element = document.querySelector('input[name=\"mh_roi_calc_result\"]')\r\n if (element) {\r\n let calculations = JSON.parse(JSON.stringify(this.calculatorResults))\r\n if (calculations && calculations != null && calculations != \"\" && calculations.isIndividual == true) {\r\n calculations.totalTimeSavingsPerYearCompany = \"0\"\r\n calculations.totalTimeSavingsPerWeekCompany = \"0\"\r\n calculations.takingMeetingNotesWithMeetingSummaryPerYearCompany = \"0\"\r\n calculations.takingMeetingNotesWithMeetingSummaryPerWeekCompany = \"0\"\r\n calculations.readingMeetingSummaryVsAttendingTheMeetingPerYearCompany = \"0\"\r\n calculations.readingMeetingSummaryVsAttendingTheMeetingPerWeekCompany = \"0\"\r\n }\r\n\r\n element.value = JSON.stringify(calculations)\r\n }\r\n // Pass results to pardot\r\n let isElementHavingClass = this.calculatorWrapper.classList.contains('aic-yes')\r\n let isAIC\r\n isElementHavingClass ? isAIC = 'Yes' : isAIC = 'No'\r\n let areYouUsingZoomAICompanion = 'are you using Zoom AI Companion:'+isAIC+\";\"\r\n let meetingPerWeek = 'meeting per week:'+this.question1+\";\"\r\n let averageMeetingLength = 'average meeting length:'+this.question2\r\n let hiddenInput = this.el.querySelector('input[name=\"mh_page_source\"]')\r\n if (hiddenInput) hiddenInput.value = areYouUsingZoomAICompanion+meetingPerWeek+averageMeetingLength\r\n this.bindResultsOnTheHTML()\r\n }\r\n }\r\n\r\n bindResultsOnTheHTML() {\r\n this.result1.textContent = this.calculatorResults.whatYouCanSaveWithZoomAICompanionPerWeek\r\n this.result2.textContent = this.calculatorResults.whatYouCanSaveWithZoomAICompanionPerYear\r\n }\r\n // Function to set a cookie with an object value\r\n setObjectCookie(name, obj, days) {\r\n let value=JSON.stringify(obj)\r\n setCookie(name, encodeURIComponent(value), days)\r\n }\r\n}\r\n\r\nexport default AicRoiCalculator\r\n","/**\r\n * A function which adds click detection to document\r\n * and performs a prescribed action when a click is detected\r\n * outside of the supllied element.\r\n * Use an array for params.exceptionClassArray to create exceptions.\r\n *\r\n * @param {Object} elem A DOM element\r\n * @param {Function} name of class to search for\r\n * @param {Object} an object containing parameters\r\n */\r\nexport function actionOnClickOutside(element, action, params = {}) {\r\n\tlet exceptionClassArray = params.exceptionClassArray || [];\r\n\tlet useCapture = params.useCapture || false;\r\n\r\n\tconst outsideClickListener = event => {\r\n\t\tif (!element.contains(event.target) && event.target.classList.length && !exceptionClassArray.includes(...event.target.classList)) {\r\n\t\t\taction();\r\n\t\t\tremoveClickListener();\r\n\t\t}\r\n\t}\r\n\r\n\tconst removeClickListener = () => {\r\n\t\tdocument.removeEventListener('click', outsideClickListener)\r\n\t}\r\n\r\n\tdocument.addEventListener('click', outsideClickListener, useCapture);\r\n\telement.clearListener = function () {\r\n\t\tremoveClickListener();\r\n\t}\r\n}\r\n\r\n/**\r\n * Simple function to return an array of sibling elements\r\n */\r\nexport function getSiblings(elem) {\r\n\treturn Array.prototype.filter.call(elem.parentNode.children, function (sibling) {\r\n\t\treturn sibling !== elem;\r\n\t});\r\n}\r\n\r\n/**\r\n * A function which traps tabbing to modal element.\r\n * Escape key will close modal.\r\n */\r\nexport function limitKeyboardAccesibility(element, closeFunction) {\r\n\t// get all accessibile elements, put into array\r\n\tconst focusableElsRaw = element.querySelectorAll(\r\n\t\t'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex=\"0\"]'\r\n\t);\r\n\tconst focusableEls = Array.prototype.slice.call(focusableElsRaw);\r\n\t// go through elements and pull out only the ones that are visible\r\n\tlet visibleEls = [].filter.call(focusableEls, el => {\r\n\t\treturn (el.offsetParent !== null);\r\n\t});\r\n\t// get the first and last elements\r\n\tconst firstFocusableEl = visibleEls[0];\r\n\tconst lastFocusableEl = visibleEls[visibleEls.length - 1];\r\n\t// set up keyboard handler\r\n\tconst KEY_TAB = 9;\r\n\tconst KEY_ESC = 27;\r\n\tconst keyHandler = (e) => {\r\n\t\t// special case to return when keyhandling is disabled on this element\r\n\t\tif (element.disableKeyHandler) return;\r\n\r\n\t\t// specials key actions\r\n\t\tswitch (e.keyCode) {\r\n\t\t\tcase KEY_TAB:\r\n\t\t\t\t// forward tab\r\n\t\t\t\tif (!e.shiftKey) {\r\n\t\t\t\t\tif (document.activeElement === lastFocusableEl) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tfirstFocusableEl.focus();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// backward tab\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (document.activeElement === firstFocusableEl) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tlastFocusableEl.focus();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase KEY_ESC:\r\n\t\t\t\tif (closeFunction) closeFunction();\r\n\t\t\t\tremoveKeyHandler();\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak\r\n\t\t}\r\n\t}\r\n\t// clear function\r\n\tconst removeKeyHandler = () => {\r\n\t\tdocument.removeEventListener('keydown', keyHandler);\r\n\t}\r\n\t// attach clear function to element\r\n\telement.clearKeyHandler = () => {\r\n\t\tremoveKeyHandler();\r\n\t}\r\n\t// attach keyboard handler to doc\r\n\tdocument.addEventListener('keydown', keyHandler, false);\r\n}\r\n\r\n/**\r\n * A function which traverses all parents of a given DOM element\r\n * and returns the first parent with a class name that matches\r\n * the supplied class. This matches the JavaScript \"closest\"\r\n * function which IE11 does not support.\r\n *\r\n * @param {Object} elem A DOM element\r\n * @param {String} name of class to search for\r\n * @return {Object} the closest DOM parent with matching class\r\n */\r\nexport function closestByClass(el, clazz) {\r\n\t// Traverse the DOM up with a while loop\r\n\r\n\r\n\twhile (!el.classList.contains(clazz)) {\r\n\t\t// Increment the loop to the parent node\r\n\t\tel = el.parentNode;\r\n\t\tif (!el || el instanceof HTMLDocument) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\t// At this point, the while loop has stopped and `el` represents the element that has\r\n\t// the class you specified in the second parameter of the function `clazz`\r\n\r\n\t// Then return the matched element\r\n\treturn el;\r\n}\r\n\r\n\r\n/**\r\n * Utility functions for setting and getting cookies\r\n */\r\nexport function setCookie(name, value, days) {\r\n\tvar expires = \"\";\r\n\tif (days) {\r\n\t\tvar date = new Date();\r\n\t\tdate.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n\t\texpires = \"; expires=\" + date.toUTCString();\r\n\t}\r\n\tif (typeof value === 'object') {\r\n\t\t// because of Safari bug handling JSON in cookies commas need to be stripped out\r\n\t\tlet obj = {};\r\n\t\tfor (const [key, item] of Object.entries(value)) {\r\n\t\t\tif (typeof item == 'string') obj[key] = item.replace(/,/,'U+0002C');\r\n\t\t\telse obj[key] = item;\r\n\t\t}\r\n\t\t// turn value into JSON\r\n\t\tvalue = JSON.stringify(obj);\r\n\t}\r\n\t// create cookie\r\n\tdocument.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/;SameSite=Strict\";\r\n}\r\n\r\nexport function setCookieWithDomain(cookieName, value, days, domain) {\r\n try{\r\n var expires = \"\"\r\n if (days) {\r\n var date = new Date()\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000))\r\n expires = \"; expires=\" + date.toUTCString()\r\n }\r\n if (typeof value === 'object') {\r\n // because of Safari bug handling JSON in cookies commas need to be stripped out\r\n let obj = {}\r\n for (const [key, item] of Object.entries(value)) {\r\n if (typeof item == 'string') obj[key] = item.replace(/,/,'U+0002C')\r\n else obj[key] = item\r\n }\r\n // turn value into JSON\r\n value = JSON.stringify(obj)\r\n }\r\n // create cookie\r\n document.cookie = cookieName + \"=\" + (value || \"\") + expires + \"; path=/;secure;samesite=none;domain=.\" + domain \r\n }\r\n catch(err){\r\n console.log('set cookie error:', err)\r\n }\r\n } \r\n\r\n // Save content in localStorage with expiration\r\n export function saveToLocalStorage(key, content, expirationInMinutes = null) {\r\n\t const data = {\r\n\t content: content,\r\n\t timestamp: new Date().getTime(),\r\n\t expiration: expirationInMinutes ? expirationInMinutes * 60 * 1000 : null\r\n\t };\r\n\t localStorage.setItem(key, JSON.stringify(data));\r\n\t}\r\n\r\n // Retrieve content from localStorage with expiration check\r\n export function getFromLocalStorage(key) {\r\n const data = JSON.parse(localStorage.getItem(key));\r\n\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n if (data.expiration !== null && (new Date().getTime() - data.timestamp) > data.expiration) {\r\n localStorage.removeItem(key);\r\n return null;\r\n }\r\n\r\n return data.content;\r\n} \r\n\r\nexport function getCookie(name) {\r\n\tvar nameEQ = name + \"=\";\r\n\tvar ca = document.cookie.split(';');\r\n\t// see if value is JSON\r\n\tlet isJSON = function isJson(str) {\r\n\t\ttry {\r\n\t\t\tJSON.parse(str);\r\n\t\t} catch (e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\tfor (var i = 0; i < ca.length; i++) {\r\n\t\tvar c = ca[i];\r\n\t\twhile (c.charAt(0) == ' ') c = c.substring(1, c.length);\r\n\t\tif (c.indexOf(nameEQ) == 0) {\r\n\t\t\tlet content = c.substring(nameEQ.length, c.length);\r\n\t\t\tif (isJSON(content)) {\r\n\t\t\t\tcontent = JSON.parse(content);\r\n\t\t\t\t// replace commas\r\n\t\t\t\tfor (const [key, item] of Object.entries(content)) {\r\n\t\t\t\t\tif (typeof item == 'string') content[key] = item.replace('U+0002C',',')\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn content;\r\n\t\t}\r\n\t}\r\n\treturn null;\r\n}\r\n\r\n// Get a cookie without an exact name - Adobe cookies are unique to a machine\r\nexport function getCookieFuzzy(nameStartsWith,nameEndsWith) {\r\n\tlet cookies = document.cookie.split(';');\r\n\t\r\n\t// see if value is JSON\r\n\tlet isJSON = function isJson(str) {\r\n\t\ttry {\r\n\t\t\tJSON.parse(str);\r\n\t\t} catch (e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Loop through the cookies\r\n\tfor (var i = 0; i < cookies.length; i++) {\r\n\t\tvar cookie = cookies[i];\r\n\t\t\r\n\t\t// Trim the cookie\r\n\t\twhile (cookie.charAt(0) == ' ') cookie = cookie.substring(1, cookie.length);\r\n\r\n\t\t// Split the cookie name and value\r\n\t\tvar cookiePair = cookie.split('=');\r\n\r\n\t\t// Check that we got something to work with\r\n\t\tif (cookiePair.length > 1)\r\n\t\t{\r\n\t\t\t// Get the cookie name and value\r\n\t\t\tvar cookieName = cookiePair[0];\r\n\t\t\tvar cookieValue = cookiePair[1];\r\n\t\t\t\r\n\t\t\t// Name comparison\r\n\t\t\tif (cookieName.startsWith(nameStartsWith) && cookieName.endsWith(nameEndsWith))\r\n\t\t\t{\r\n\t\t\t\treturn cookieValue;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nexport function eraseCookie(name) {\r\n\tdocument.cookie = name + '=; Max-Age=-99999999;';\r\n}\r\n\r\nexport function eraseCookieByPath(name) {\r\n\tdocument.cookie = `${name}=; path=/; Max-Age=-99999999;`;\r\n}\r\n\r\n/**\r\n * Convert a string to title case\r\n */\r\nexport function toTitleCase(str) {\r\n\treturn str\r\n\t\t.toLowerCase()\r\n\t\t.split(' ')\r\n\t\t.map(word => word.charAt(0).toUpperCase() + word.slice(1))\r\n\t\t.join(' ');\r\n};\r\n\r\n/**\r\n * Validate US zip code\r\n */\r\nexport function validateZipCode(str, allowPlusFour) {\r\n\tlet regexp;\r\n\tif (allowPlusFour) regexp = /^[0-9]{5}(?:-[0-9]{4})?$/;\r\n\telse regexp = /^[0-9]{5}?$/;\r\n\tif (regexp.test(str)) return true;\r\n\telse return false;\r\n};\r\n\r\n/**\r\n * Returns a function, that, as long as it continues to be invoked, will not\r\n * be triggered. The function will be called after it stops being called for\r\n * N milliseconds. If `immediate` is passed, trigger the function on the\r\n * leading edge, instead of the trailing.\r\n *\r\n * @param {Function} func A function to call after N milliseconds\r\n * @param {number} wait The number of milliseconds to wait\r\n * @param {boolean} immediate Trigger the function on the leading edge instead of the trailing\r\n * @return {Function} A function, that, as long as it continues to be invoked, will not be triggered\r\n */\r\nexport function debounce(func, wait, immediate) {\r\n\tvar timeout;\r\n\treturn function () {\r\n\t\tvar context = this,\r\n\t\t\targs = arguments;\r\n\t\tvar later = function () {\r\n\t\t\ttimeout = null;\r\n\t\t\tif (!immediate) func.apply(context, args);\r\n\t\t};\r\n\t\tvar callNow = immediate && !timeout;\r\n\t\tclearTimeout(timeout);\r\n\t\ttimeout = setTimeout(later, wait);\r\n\t\tif (callNow) func.apply(context, args);\r\n\t}\r\n}\r\n\r\n\r\n/* function to add smooth scrolling from a click event */\r\nexport function scrollAnchors(e, respond = null) {\r\n\te.preventDefault();\r\n\r\n\tfunction distanceToTop(el) {\r\n\t\treturn Math.floor((el.getBoundingClientRect().top) - 150);\r\n\t}\r\n\tvar targetID = (respond) ? respond.getAttribute('href') : this.getAttribute('href');\r\n\tvar targetAnchor = document.querySelector(targetID);\r\n\tif (!targetAnchor) return;\r\n\tvar originalTop = distanceToTop(targetAnchor);\r\n\t\r\n\t// detect if the user is on IE11\r\n\tconst isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\r\n\tconst agent = window.navigator.userAgent.toLowerCase();\r\n\tconst isEdge = agent.indexOf(\"edge\") > -1 || agent.indexOf(\"edg\") > -1;\r\n\r\n\tif (isIE11 || isEdge) {\r\n\t\twindow.scroll(0, originalTop);\r\n\t} else {\r\n\t\twindow.scrollBy({\r\n\t\t\ttop: originalTop,\r\n\t\t\tleft: 0,\r\n\t\t\tbehavior: 'smooth'\r\n\t\t});\r\n\t}\r\n\r\n\tvar checkIfDone = setInterval(function () {\r\n\r\n\t\tif (distanceToTop(targetAnchor) === 0) {\r\n\t\t\ttargetAnchor.tabIndex = '-1';\r\n\t\t\ttargetAnchor.focus();\r\n\t\t\tconsole.log('scroll anchors');\r\n\t\t\t// Let's make sure the History API even exists first..\r\n\t\t\tif ('history' in window) {\r\n\r\n\t\t\t\twindow.history.pushState('', '', targetID);\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// Do it the old-fashioned way!\r\n\t\t\t\twindow.location = targetID;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tclearInterval(checkIfDone);\r\n\t\t}\r\n\t}, 100);\r\n}\r\n\r\n/* get browser window dimentions */\r\nexport function viewportSize() {\r\n\tconst vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\r\n\tconst vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\r\n\treturn { width: vw, height: vh }\r\n}\r\n\r\n/* test a string for JSON and return if true */\r\nexport function tryParseJSON (jsonString) {\r\n try {\r\n var o = JSON.parse(jsonString);\r\n\r\n // Handle non-exception-throwing cases:\r\n // Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking,\r\n // but... JSON.parse(null) returns null, and typeof null === \"object\", \r\n // so we must check for that, too. Thankfully, null is falsey, so this suffices:\r\n if (o && typeof o === \"object\") {\r\n return o;\r\n }\r\n }\r\n catch (e) { }\r\n\r\n return false;\r\n};\r\n\r\n// Function to remove a parameter from URL\r\nexport function removeURLParameter(url, parameter) {\r\n // Prefer not to use regex to avoid potential issues with special characters in parameter values\r\n var urlParts = url.split('?');\r\n if (urlParts.length >= 2) {\r\n var prefix = encodeURIComponent(parameter) + '=';\r\n var params = urlParts[1].split(/[&;]/g);\r\n\r\n // Reverse iteration to properly remove parameter\r\n for (var i = params.length; i-- > 0;) { \r\n if (params[i].lastIndexOf(prefix, 0) !== -1) { \r\n params.splice(i, 1);\r\n }\r\n }\r\n\r\n // Join back the parts\r\n url = urlParts[0] + (params.length > 0 ? '?' + params.join('&') : \"\");\r\n return url;\r\n } else {\r\n return url;\r\n }\r\n}\r\n\r\nexport function getURLParameter(url, parameter) {\r\n\tconst query = url.search\r\n\tconst params = new URLSearchParams(query)\r\n\treturn params[parameter] !== undefined ? params[parameter] : ''\r\n}"],"names":["AicRoiCalculator","el","_classCallCheck","this","isZAICActive","resultContainer","querySelector","sliders","querySelectorAll","noOfZoomLicenses","calculatorWrapper","useZoomAicYes","useZoomAicNo","buttonGetResults","calculatorBody","sliderTextBoxValue","result1","result2","locale","document","documentElement","lang","question1","question2","question3","question4","question5","question6","whatYouCanSaveWithZoomAICompanionPerWeek","whatYouCanSaveWithZoomAICompanionPerYear","totalTimeSavingsPerYearIndividual","totalTimeSavingsPerWeekIndividual","takingMeetingNotesWithMeetingSummaryPerYearIndividual","takingMeetingNotesWithMeetingSummaryPerWeekIndividual","readingMeetingSummaryVsAttendingTheMeetingPerYearIndividual","readingMeetingSummaryVsAttendingTheMeetingPerWeekIndividual","percentOfTimeSavedInAMeetingIndividual","totalTimeSavingsPerYearCompany","totalTimeSavingsPerWeekCompany","takingMeetingNotesWithMeetingSummaryPerYearCompany","takingMeetingNotesWithMeetingSummaryPerWeekCompany","readingMeetingSummaryVsAttendingTheMeetingPerYearCompany","readingMeetingSummaryVsAttendingTheMeetingPerWeekCompany","totalLicenseCostSavingsPerYear","calculatorResults","isIndividual","init","key","value","_this","triggerYerorNo","onPageLoadmodifyRangeSliderUi","updateRangeSliderOnUserInput","noOfEmployeesChange","addEventListener","event","_this$useZoomAicYes","_this$useZoomAicNo","_this2","bodyHeight","scrollHeight","classList","remove","add","removeAttribute","setAttribute","calculator","enableGetResultsButton","isNoActive","_this3","forEach","slider","index","modifyRangeSliderPosition","validateField","sliderValue","getAttribute","sliderMinValue","style","background","min","max","_this4","input","inputValue","isNaN","displayErrorMessage","disableGetResultsButton","hasAttribute","disabled","element","inputvalue","parseInt","test","closest","sliderMaxValue","hideErrorMessage","_this5","minValue","maxValue","displayConditionalErrorMessage","hideConditionalErrorMessage","Math","round","toLocaleString","setObjectCookie","calculations","JSON","parse","stringify","areYouUsingZoomAICompanion","contains","meetingPerWeek","averageMeetingLength","hiddenInput","bindResultsOnTheHTML","textContent","name","obj","days","setCookie","encodeURIComponent","expires","date","Date","setTime","getTime","toUTCString","_typeof","_i","_Object$entries","Object","entries","length","_Object$entries$_i","_slicedToArray","item","replace","cookie","setCookieWithDomain","cookieName","domain","_i2","_Object$entries2","_Object$entries2$_i","err","console","log","saveToLocalStorage","content","expirationInMinutes","arguments","undefined","data","timestamp","expiration","localStorage","setItem","getFromLocalStorage","getItem","removeItem","getCookie","nameEQ","ca","split","isJSON","str","e","i","c","charAt","substring","indexOf","_i3","_Object$entries3","_Object$entries3$_i"],"sourceRoot":""}