{"version":3,"sources":["main.js","utilities.js","modal.js","search.js","subpage-menu.js","pageRefresh.js"],"names":["menuOpenEvent","Event","navMenuDiv","document","getElementById","navMenu","menuMainItems","getElementsByClassName","burger","burgerText","menu","resizeEventThrottled","navClickCheck","e","target","event","srcElement","targetIsWithinParentElement","classList","contains","nextElementSibling","hideAllExpanded","toggleHidden","remove","innerHTML","dataset","openText","body","setTimeout","add","closeText","window","dispatchEvent","t","elm","parentNode","i","length","element","onclick","addEventListener","shrinkOnScroll","scrollPosY","pageYOffset","isShrinked","menuShrinkScrollYThreshold","findClosestParentOfType","el","nodeName","async","calculateMinimumWidthOfInputToFitText","input","textToFit","fonts","ready","styles","getComputedStyle","inlinePadding","parseInt","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","context","createElement","getContext","font","letterSpacing","width","measureText","Math","ceil","afterNextDomRepaint","Promise","resolve","requestAnimationFrame","isPagePreview","pathArray","parent","location","pathname","split","tippy","trigger","matchMedia","matches","Modal","ANIMATION_DURATION","static","modalElement","onWindowKeyupListener","this","onWindowKeyup","capture","constructor","htmlContent","options","invertedButton","initialHeight","fullSize","template","modal","content","firstElementChild","modalContent","querySelector","setMaxHeight","closeButton","overlay","appendChild","hide","apply","show","disableViewportScroll","then","emit","openedEvent","supressEvent","removeEventListener","closedEvent","enableViewportScroll","expand","on","eventName","func","style","overflow","newValue","maxHeight","defaultPrevented","key","preventDefault","errorMessage","SearchModal","debounceTimeoutMs","searchTimeout","searchContentEl","searchHeadlineEl","searchResultsEl","searchFieldEl","departmentSearchToggleEl","departmentSearchInputEl","toggleTextEl","defaultHeadline","searchFieldPlaceholder","searchResultHeadline","toggleStateText","default","withinDepartment","currentQuery","searchApiUrl","isDepartmentSearchSelected","isPageAtDepartmentLevel","searchTemplate","keyCode","code","controlToggleState","focus","focusVisible","searchForContent","debounceSearch","setAttribute","getAttribute","checked","innerText","hasDepartmentSearchToggleStateChanged","clearTimeout","query","value","trim","searchResults","loadingAnimationDisplayTime","countDown","setInterval","clearInterval","response","fetch","encodeURIComponent","Date","now","method","text","err","mainSearchButton","mobileSearchButton","hiddenSearchButton","url","hasAttribute","openSearchModal","disabled","blur","SubpageMenu","subpageMenu","selectedItem","onMenuClick","expandMenu","alignSelectedItem","transform","offsetTop","interval","reload"],"mappings":"AAGA,MAAAA,cAAA,IAAAC,MAAA,mBACA,IAAAC,WAAAC,SAAAC,eAAA,eACAC,QAAAF,SAAAC,eAAA,cACAE,cAAAH,SAAAI,uBAAA,iBACAC,OAAAL,SAAAC,eAAA,oBACAK,WAAAN,SAAAC,eAAA,eACAM,KAAAP,SAAAC,eAAA,UAEAO,sBAAA,EAKA,SAAAC,cAAAC,GACA,IAAAC,EAAAD,KAAAC,QAAAC,aAAAC,WAEAC,4BAAAH,EAAAZ,YAuBAY,EAAAI,UAAAC,SAAA,oBAAAL,EAAAM,oBAAAN,EAAAM,mBAAAF,UAAAC,SAAA,mBACAL,EAAAM,mBAAAF,UAAAC,SAAA,WACAE,kBAEAC,aAAAR,EAAAM,qBAzBAH,4BAAAH,EAAAT,SAEAiB,aAAApB,aAGAM,OAAAU,UAAAK,OAAA,eACAd,WAAAe,UAAAf,WAAAgB,QAAAC,SACAvB,SAAAwB,KAAAT,UAAAK,OAAA,kBACAK,YAAA,IAAAzB,SAAAwB,KAAAT,UAAAK,OAAA,0BAEAf,OAAAU,UAAAW,IAAA,eACApB,WAAAe,UAAAf,WAAAgB,QAAAK,UACA3B,SAAAwB,KAAAT,UAAAW,IAAA,kBACA1B,SAAAwB,KAAAT,UAAAW,IAAA,mBACAE,OAAAC,cAAAhC,gBAIAqB,iBASA,CAEA,SAAAJ,4BAAAgB,EAAAC,GACA,KAAAD,EAAAE,YAAA,CACA,GAAAF,GAAAC,EACA,SAEAD,IAAAE,UACA,CACA,QACA,CAEA,SAAAd,kBAGA,IAFA,IAAAX,EAAAP,SAAAI,uBAAA,YAEA6B,EAAA,EAAAA,EAAA9B,cAAA+B,OAAAD,IACA9B,cAAA8B,GAAAlB,UAAAW,IAAA,UACAnB,EAAA0B,GAAAlB,UAAAK,OAAA,YAEA,CAEA,SAAAD,aAAAgB,GACA,OAAAA,EAAApB,UAAAC,SAAA,WACAmB,EAAAH,WAAAjB,UAAAC,SAAA,yBACAmB,EAAAH,WAAAjB,UAAAW,IAAA,aAEAS,EAAApB,UAAAK,OAAA,WACA,IAEAe,EAAAH,WAAAjB,UAAAK,OAAA,aACAe,EAAApB,UAAAW,IAAA,WACA,EAEA,CApEA1B,SAAAoC,QAAA3B,cACAT,SAAAqC,iBAAA,SAAAC,gBAqEA,IAAAC,WAAAX,OAAAY,YACAC,YAAA,EACAC,2BAAA,GACA,SAAAJ,kBACAC,WAAAX,OAAAY,aAEAE,6BAAAD,YACAlC,KAAAQ,UAAAW,IAAA,sBACAe,YAAA,GACAF,YAAAG,4BAAAD,aACAlC,KAAAQ,UAAAK,OAAA,sBACAqB,YAAA,EAEA,CC7FA,SAAAE,wBAAAC,EAAAC,GACA,IAAAb,EAAAY,EAAAZ,WACA,KAAAA,KAAAa,cACAb,eAEA,OAAAA,CACA,CAEAc,eAAAC,sCAAAC,EAAAC,SACAjD,SAAAkD,MAAAC,MAEA,MAAAC,EAAAxB,OAAAyB,iBAAAL,GACAM,EAAAC,SAAAH,EAAAI,aAAAD,SAAAH,EAAAK,cAAAF,SAAAH,EAAAM,iBAAAH,SAAAH,EAAAO,kBAEAC,EADA5D,SAAA6D,cAAA,UACAC,WAAA,MACAF,EAAAG,KAAAX,EAAAW,KACAH,EAAAI,cAAAZ,EAAAY,cACA,MAAAC,EAAAL,EAAAM,YAAAjB,GAAAgB,MAEA,OAAAE,KAAAC,KAAAH,EAAAX,GAAA,IACA,CAEA,SAAAe,sBACA,WAAAC,SAAAC,IAGAC,uBAAA,KACAA,uBAAA,KACAD,GAAA,GACA,GACA,GAEA,CACA,SAAAE,gBAEA,MAAAC,EAAA9C,OAAA+C,OAAAC,SAAAC,SAAAC,MAAA,KAGA,MAFA,YAAAJ,EAAA,gBAAAA,EAAA,EAGA,CDwDA9C,OAAAS,iBAAA,aACAT,OAAAmD,OACAA,MAAA,qDACAC,QAAA,2BAIApD,OAAAS,iBAAA,qBACA7B,uBAEAoB,OAAAqD,WAAA,uBAAAC,UACAlF,SAAAwB,KAAAT,UAAAK,OAAA,kBACApB,SAAAwB,KAAAT,UAAAK,OAAA,mBACAf,OAAAU,UAAAK,OAAA,eACAd,WAAAe,UAAAf,WAAAgB,QAAAC,SACAxB,WAAAgB,UAAAW,IAAA,WAIAlB,sBAAA,EACAiB,YAAA,IAAAjB,sBAAA,QAEA,OExHA,MAAA2E,MACAC,GAAA,IACAC,SAAA,IAAAvF,MAAA,UACAuF,SAAA,IAAAvF,MAAA,UAEAwF,GACAC,GAAA,SAAA3E,GAAA4E,MAAAC,EAAA7E,GAAA,CAAA8E,SAAA,IAEAC,YAAAC,EAAAC,GAMAA,EAAA,CAJAC,gBAAA,EACAC,cAAA,GACAC,UAAA,KAEAH,GACA,MAAAI,EAAAjG,SAAA6D,cAAA,YACAqC,EAAA,iGAEAL,EAAAG,SAAA,qEACAH,EAAAC,eAAA,uLAGAF,uGAKAK,EAAA5E,UAAA6E,EAEAV,MAAAF,EAAAW,EAAAE,QAAAC,kBACA,MAAAC,EAAAb,MAAAF,EAAAgB,cAAA,kBACAd,MAAAe,EAAAV,EAAAE,eAEA,MAAAS,EAAAH,EAAAC,cAAA,iBACAG,EAAAjB,MAAAF,EAAAgB,cAAA,YAEAL,EAAA7E,SAEApB,SAAAwB,KAAAkF,YAAAlB,MAAAF,GAEAmB,EAAApE,iBAAA,aAAAmD,KAAAmB,SACAH,EAAAnE,iBAAA,aAAAmD,KAAAmB,SAEA/E,OAAAS,iBAAAuE,MAAAhF,OAAA4D,MAAAD,EACA,CAEAsB,OAUA,OATArB,MAAAsB,IAEAzC,sBACA0C,MAAA,KAGAvB,MAAAF,EAAAvE,UAAAW,IAAA,WAGA,IAAA4C,SAAAC,IACA9C,YAAA,KACA+D,MAAAwB,EAAA7B,OAAA8B,GACA1C,GAAA,GACAiB,MAAAJ,EAAA,GAEA,CAEAuB,KAAAO,GAIA,OAHA1B,MAAAF,EAAAvE,UAAAK,OAAA,QACAQ,OAAAuF,oBAAAP,MAAAhF,OAAA4D,MAAAD,GAEA,IAAAjB,SAAAC,IACA9C,YAAA,KACAyF,GACA1B,MAAAwB,EAAA7B,OAAAiC,GAGA5B,MAAAF,EAAAlE,SACAoE,MAAA6B,IACA9C,GAAA,GACAiB,MAAAJ,EAAA,GAEA,CAEAkC,SACA9B,MAAAe,EAAA,OACA,CAEAgB,GAAA,CAAAC,EAAAC,KACAjC,MAAAF,EAAAjD,iBAAAmF,EAAAC,GACAjC,MAGAwB,GAAApG,IACA4E,MAAAF,EAAAzD,cAAAjB,EAAA,EAGAkG,KACA9G,SAAAwB,KAAAkG,MAAAC,SAAA,QACA,CAEAN,KACArH,SAAAwB,KAAAkG,MAAAC,SAAA,EACA,CAEApB,GAAAqB,GACAhG,OAAAqD,WAAA,sBAAAC,UAIAM,MAAAF,EAAAgB,cAAA,kBAAAoB,MAAAG,UAAAD,EACA,CAEAnC,GAAA7E,GACAA,EAAAkH,mBAIA,WAAAlH,EAAAmH,KAAA,QAAAnH,EAAAmH,KACAvC,KAAAmB,OAIA/F,EAAAoH,iBACA,CAEA3C,aAAA4C,GAQA,WAAAzC,KAPA,uFAGAyC,sCAKA,ECjIA,MAAAC,YAEAC,GAAA,IACAC,GAAA,KAEAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAzC,GAEA0C,GAAA,eACAC,GAAA,eACAC,GAAA,iBACAC,GAAA,CACAC,QAAA,0BACAC,iBAAA,yCAEAC,GAAA,GACAC,GAAA,GACAC,GAEAzD,YAAAwD,EAAAE,GACA7D,MAAA2D,IACA3D,MAAA4D,EAAAC,EAEA,MAAAC,EAAA,yIAGA9D,MAAAoD,2PAKApD,MAAAqD,yFAEArD,MAAAqD,6EAGAQ,EACA,gMAIA7D,MAAA4D,EAAA,qGAEA5D,MAAA4D,EAAA,sQAKA5D,MAAA4D,EAAA5D,MAAAuD,EAAAE,iBAAAzD,MAAAuD,EAAAC,iFAGA,yGAMAxD,MAAAU,EAAA,IAAAf,MAAAmE,EAAA,CAAAvD,cAAAsD,EAAA,kBACA9B,GAAA,eACA/B,MAAA6C,EAAArI,SAAAC,eAAA,iBACAuF,MAAA8C,EAAA9C,MAAA6C,EAAA/B,cAAA,uBACAd,MAAA+C,EAAA/C,MAAA6C,EAAA/B,cAAA,mBACAd,MAAAgD,EAAAhD,MAAA6C,EAAA/B,cAAA,iBACAd,MAAAiD,EAAAjD,MAAA6C,EAAA/B,cAAA,6BAEAd,MAAAiD,IACAjD,MAAAkD,EAAAlD,MAAAiD,EAAAnC,cAAA,SACAd,MAAAmD,EAAAnD,MAAAiD,EAAAnC,cAAA,SAEAd,MAAAiD,EAAApG,iBAAA,SAAA3B,IACA,UAAAA,EAAAqH,KAKA,UAAArH,EAAAqH,KAAA,KAAArH,EAAA6I,SAAA,UAAA7I,EAAA8I,MAJAhE,MAAAiE,GAKA,IAGAjE,MAAAiD,EAAApG,iBAAA,SAAA3B,IACAA,EAAAsH,iBACAxC,MAAAiE,GAAA,KAIAjE,MAAAgD,EAAAkB,MAAA,CAAAC,cAAA,IAEAnE,MAAAgD,EAAAnG,iBAAA,SAAA3B,IACA,UAAAA,EAAAqH,KACAvC,MAAAoE,GACA,IAGApE,MAAAgD,EAAAnG,iBAAA,SAAA3B,GAAA8E,MAAAqE,KAAA,GAEA,CAEAhD,OACArB,MAAAU,EAAAW,MACA,CAEAU,GAAAC,EAAAC,GAEA,OADAjC,MAAAU,EAAAqB,GAAAC,EAAAC,GACAjC,IACA,CAEAiE,KACAjE,MAAAkD,EAAAoB,aAAA,0BAAAtE,MAAAkD,EAAAqB,aAAA,kBACAvE,MAAAkD,EAAAsB,SAAAxE,MAAAkD,EAAAsB,QACAxE,MAAAmD,EAAAsB,UAAAzE,MAAAkD,EAAAsB,QAAAxE,MAAAuD,EAAAE,iBAAAzD,MAAAuD,EAAAC,QACAxD,MAAA4D,EAAA5D,MAAAkD,EAAAsB,QACAxE,MAAAoE,EAAA,CAAAM,uCAAA,GACA,CAEAL,KACArE,MAAA4C,GACA+B,aAAA3E,MAAA4C,GAGA5C,MAAA4C,EAAA3G,YAAA,KACA+D,MAAA4C,EAAA,KACA5C,MAAAoE,GAAA,GACApE,MAAA2C,EACA,CAEArF,QAAAoH,GACA,MAAAE,EAAA5E,MAAAgD,EAAA6B,MAAAC,OAEA,GAAAF,EAAAlI,OAAA,EAIA,OAHAsD,MAAA8C,EAAAjH,UAAAmE,MAAAoD,EACApD,MAAA+C,EAAAlH,UAAA,QACAmE,MAAA0D,EAAA,IAIA,GAAAkB,IAAA5E,MAAA0D,IAAAgB,EAAA,OAEA1E,MAAA0D,EAAAkB,EAEA5E,MAAA+C,EAAAlH,UAAA,oCACAmE,MAAAU,EAAAoB,SAEA,IAUAiD,EAVAC,EAAA,IACAC,EAAAC,aAAA,KACAF,GAAA,GAEAA,GAAA,IACAA,EAAA,EACAG,cAAAF,GACA,GACA,IAGA,IACA,MAAAG,QAAAC,MAAArF,MAAA2D,EAAA,MAAA2B,mBAAAV,SAAA5E,MAAA4D,SAAA2B,KAAAC,QAAA,CACAC,OAAA,QAGAV,QAAAK,EAAAM,OACA1F,MAAA8C,EAAAjH,UAAAmE,MAAAsD,CACA,OAAAqC,GACAZ,EAAAY,CACA,CAEA1J,YAAA,KACA+D,MAAA+C,EAAAlH,UAAAkJ,CAAA,GACAC,EACA,GAGA,WACA,MAAAY,EAAApL,SAAAC,eAAA,oBACAoL,EAAArL,SAAAC,eAAA,sBACAqL,EAAAtL,SAAAC,eAAA,sBACAkJ,EAAAiC,EAAA9J,QAAAiK,IACAlC,EAAA+B,EAAAI,aAAA,yBAEAC,EAAA,KACAL,EAAAM,SAAAL,EAAAK,SAAAJ,EAAAI,UAAA,EAEA,IAAAxD,YAAAiB,EAAAE,GACA9B,GAAA,eACA6D,EAAAM,SAAAL,EAAAK,SAAAJ,EAAAI,UAAA,KAEA7E,MAAA,EAGAuE,EAAA/I,iBAAA,aAAAoJ,MACAJ,EAAAhJ,iBAAA,aAAAoJ,MAEAH,EAAAjJ,iBAAA,SAAAzB,IACA,UAAAA,EAAAmH,MACAuD,EAAAK,OACAF,IACA,GAEA,CA1BA,GCpLA,MAAAG,YAEAC,YACAC,aAEAnG,cACAH,KAAAqG,YAAA7L,SAAAC,eAAA,gBAEAuF,KAAAqG,cAIArG,KAAAsG,aAAAtG,KAAAqG,YAAAvF,cAAA,gBAEAd,KAAAqG,YAAAxJ,iBAAA,aAAAmD,KAAAuG,gBAEAvG,KAAAsG,aAAA1F,kBAAA/D,iBAAA,cACAmD,KAAAwG,YAAA,IAIAxG,KAAAsG,aAAA/K,UAAAW,IAAA,WACA8D,KAAAyG,oBACA5H,sBAAA0C,MAAA,KACAvB,KAAAsG,aAAA/K,UAAAK,OAAA,cAEA,CAEA4K,aACAxG,KAAAqG,YAAA9K,UAAAW,IAAA,QACA8D,KAAAsG,aAAApE,MAAAwE,UAAA,QACA1G,KAAAqG,YAAAvF,cAAA,qBAAAwD,aAAA,wBACA,CAEAmC,oBACAzG,KAAAsG,aAAApE,MAAAwE,UAAA,iBAAA1G,KAAAsG,aAAAK,cACA,CAEAJ,cACAvG,KAAAqG,YAAA9K,UAAAC,SAAA,SACAwE,KAAAqG,YAAA9K,UAAAK,OAAA,QACAoE,KAAAyG,oBACAzG,KAAAqG,YAAAvF,cAAA,qBAAAwD,aAAA,2BAEAtE,KAAAwG,YAEA,EAGApK,OAAAS,iBAAA,aACA,IAAAuJ,WAAA,IClDA,IAAAQ,SAAApM,SAAAC,eAAA,qBAAA8J,aAAA,yBAEAnI,OAAAS,iBAAA,aACA+J,UACA3K,YAAA,WACAG,OAAAgD,SAAAyH,QACA,GAAAD,SACA","file":"bundle.generated.js","sourcesContent":["/* Toggle dropdown list\r\n * https://gist.github.com/slavapas/593e8e50cf4cc16ac972afcbad4f70c8\r\n */\r\nconst menuOpenEvent = new Event('onMenuOpenEvent');\r\nvar navMenuDiv = document.getElementById(\"nav-content\");\r\nvar navMenu = document.getElementById(\"nav-toggle\");\r\nvar menuMainItems = document.getElementsByClassName(\"dropdown-menu\");\r\nvar burger = document.getElementById(\"burger-container\");\r\nvar burgerText = document.getElementById(\"burger-text\");\r\nvar menu = document.getElementById(\"header\");\r\n\r\nvar resizeEventThrottled = false;\r\n\r\ndocument.onclick = navClickCheck;\r\ndocument.addEventListener(\"scroll\", shrinkOnScroll);\r\n\r\nfunction navClickCheck(e) {\r\n var target = (e && e.target) || (event && event.srcElement);\r\n //Nav Menu\r\n if (!targetIsWithinParentElement(target, navMenuDiv)) {\r\n // click NOT on the menu\r\n if (targetIsWithinParentElement(target, navMenu)) {\r\n // click on the link\r\n var isHidden = toggleHidden(navMenuDiv);\r\n\r\n if (isHidden) {\r\n burger.classList.remove(\"burger-open\");\r\n burgerText.innerHTML = burgerText.dataset.openText;\r\n document.body.classList.remove(\"prevent-scroll\");\r\n setTimeout(() => document.body.classList.remove(\"nav-menu-opened\"), 50);\r\n } else {\r\n burger.classList.add(\"burger-open\");\r\n burgerText.innerHTML = burgerText.dataset.closeText;\r\n document.body.classList.add(\"prevent-scroll\");\r\n document.body.classList.add(\"nav-menu-opened\");\r\n window.dispatchEvent(menuOpenEvent);\r\n }\r\n } else {\r\n // click both outside link and outside menu, hide menu\r\n hideAllExpanded();\r\n }\r\n }\r\n else if (target.classList.contains(\"dropdown-toggle\") && target.nextElementSibling && target.nextElementSibling.classList.contains(\"dropdown-menu\")) {\r\n if (target.nextElementSibling.classList.contains(\"hidden\")) {\r\n hideAllExpanded();\r\n }\r\n toggleHidden(target.nextElementSibling);\r\n }\r\n}\r\n\r\nfunction targetIsWithinParentElement(t, elm) {\r\n while (t.parentNode) {\r\n if (t == elm) {\r\n return true;\r\n }\r\n t = t.parentNode;\r\n }\r\n return false;\r\n}\r\n\r\nfunction hideAllExpanded() {\r\n var menu = document.getElementsByClassName(\"dropdown\");\r\n\r\n for (var i = 0; i < menuMainItems.length; i++) {\r\n menuMainItems[i].classList.add(\"hidden\");\r\n menu[i].classList.remove(\"open-chev\");\r\n }\r\n}\r\n\r\nfunction toggleHidden(element) {\r\n if (element.classList.contains(\"hidden\")) {\r\n if (!element.parentNode.classList.contains('menu-container-inner')) {\r\n element.parentNode.classList.add(\"open-chev\");\r\n }\r\n element.classList.remove(\"hidden\");\r\n return false;\r\n } else {\r\n element.parentNode.classList.remove(\"open-chev\");\r\n element.classList.add(\"hidden\");\r\n return true;\r\n }\r\n}\r\n\r\nvar scrollPosY = window.pageYOffset,\r\n isShrinked = false,\r\n menuShrinkScrollYThreshold = 50;\r\nfunction shrinkOnScroll() {\r\n scrollPosY = window.pageYOffset;\r\n\r\n if (scrollPosY > menuShrinkScrollYThreshold && !isShrinked) {\r\n menu.classList.add(\"menu-scroll-shrink\");\r\n isShrinked = true;\r\n } else if (scrollPosY <= menuShrinkScrollYThreshold && isShrinked) {\r\n menu.classList.remove(\"menu-scroll-shrink\");\r\n isShrinked = false;\r\n }\r\n}\r\n\r\nwindow.addEventListener('load', () => {\r\n if (window.tippy) {\r\n tippy('[data-tippy-content]:not([data-tippy-content=\"\"])', {\r\n trigger: 'mouseenter focus click'\r\n });\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n if (!resizeEventThrottled) {\r\n // If the user resizes the screen to the desktop resolution while the burger menu is opened, remove css classes to prevent nav-menu being stuck in mobile view\r\n if (window.matchMedia(\"(min-width: 1024px)\").matches) {\r\n document.body.classList.remove(\"prevent-scroll\");\r\n document.body.classList.remove(\"nav-menu-opened\");\r\n burger.classList.remove(\"burger-open\");\r\n burgerText.innerHTML = burgerText.dataset.openText;\r\n navMenuDiv.classList.add(\"hidden\");\r\n }\r\n\r\n // Quick optimization for the resize event to be called only every N seconds instead of every frame (very performance-heavy)\r\n resizeEventThrottled = true;\r\n setTimeout(() => resizeEventThrottled = false, 100);\r\n }\r\n });\r\n});\r\n","/*\r\n * Utilities\r\n */\r\nfunction findClosestParentOfType(el, nodeName) {\r\n let parentNode = el.parentNode;\r\n while (parentNode && parentNode.nodeName !== nodeName) {\r\n parentNode = parentNode.parentNode;\r\n }\r\n return parentNode;\r\n}\r\n\r\nasync function calculateMinimumWidthOfInputToFitText(input, textToFit) {\r\n await document.fonts.ready;\r\n\r\n const styles = window.getComputedStyle(input);\r\n const inlinePadding = parseInt(styles.paddingLeft) + parseInt(styles.paddingRight) + parseInt(styles.borderLeftWidth) + parseInt(styles.borderRightWidth);\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n context.font = styles.font;\r\n context.letterSpacing = styles.letterSpacing;\r\n const width = context.measureText(textToFit).width;\r\n\r\n return Math.ceil(width + inlinePadding) + \"px\";\r\n}\r\n\r\nfunction afterNextDomRepaint() {\r\n return new Promise((resolve) => {\r\n // requestAnimationFrame fires before next repaint\r\n // so if we request it twice, we will have gone through one repaint\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n resolve();\r\n });\r\n });\r\n });\r\n}\r\nfunction isPagePreview() {\r\n // window.parent because the actual page is embedded here\r\n const pathArray = window.parent.location.pathname.split(\"/\");\r\n const result = pathArray[1] === 'umbraco' && pathArray[2] === 'preview';\r\n\r\n return result\r\n}\r\n\r\n","class Modal {\r\n #ANIMATION_DURATION = 250;\r\n static #closedEvent = new Event('closed');\r\n static #openedEvent = new Event('opened');\r\n\r\n #modalElement;\r\n #onWindowKeyupListener = ['keyup', (event) => this.#onWindowKeyup(event), { capture: true }];\r\n\r\n constructor(htmlContent, options) {\r\n const defaultOptions = {\r\n invertedButton: false,\r\n initialHeight: '',\r\n fullSize: false\r\n };\r\n options = { ...defaultOptions, ...options };\r\n const template = document.createElement('template');\r\n const modal = `\r\n
\r\n
\r\n \r\n ${htmlContent}\r\n
\r\n
\r\n
\r\n `;\r\n template.innerHTML = modal;\r\n\r\n this.#modalElement = template.content.firstElementChild;\r\n const modalContent = this.#modalElement.querySelector('.modal-content');\r\n this.#setMaxHeight(options.initialHeight);\r\n\r\n const closeButton = modalContent.querySelector('.close-button');\r\n const overlay = this.#modalElement.querySelector('.overlay');\r\n\r\n template.remove();\r\n\r\n document.body.appendChild(this.#modalElement);\r\n\r\n overlay.addEventListener('click', () => this.hide());\r\n closeButton.addEventListener('click', () => this.hide());\r\n\r\n window.addEventListener.apply(window, this.#onWindowKeyupListener);\r\n }\r\n\r\n show() {\r\n this.#disableViewportScroll();\r\n\r\n afterNextDomRepaint()\r\n .then(() => {\r\n // Wait until the element is painted in the dom (after construction) and then show it\r\n // Otherwise the css transition won't work\r\n this.#modalElement.classList.add('show');\r\n });\r\n\r\n return new Promise(resolve => {\r\n setTimeout(() => {\r\n this.#emit(Modal.#openedEvent);\r\n resolve();\r\n }, this.#ANIMATION_DURATION);\r\n });\r\n }\r\n\r\n hide(supressEvent) {\r\n this.#modalElement.classList.remove('show');\r\n window.removeEventListener.apply(window, this.#onWindowKeyupListener);\r\n\r\n return new Promise(resolve => {\r\n setTimeout(() => {\r\n if (!supressEvent) {\r\n this.#emit(Modal.#closedEvent);\r\n }\r\n\r\n this.#modalElement.remove();\r\n this.#enableViewportScroll();\r\n resolve();\r\n }, this.#ANIMATION_DURATION);\r\n });\r\n }\r\n\r\n expand() {\r\n this.#setMaxHeight('100%');\r\n }\r\n\r\n on = (eventName, func) => {\r\n this.#modalElement.addEventListener(eventName, func);\r\n return this;\r\n }\r\n\r\n #emit = (event) => {\r\n this.#modalElement.dispatchEvent(event);\r\n }\r\n\r\n #disableViewportScroll() {\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n #enableViewportScroll() {\r\n document.body.style.overflow = '';\r\n }\r\n\r\n #setMaxHeight(newValue) {\r\n if (!window.matchMedia('(min-width: 768px)').matches) {\r\n return;\r\n }\r\n\r\n this.#modalElement.querySelector('.modal-content').style.maxHeight = newValue;\r\n }\r\n\r\n #onWindowKeyup(event) {\r\n if (event.defaultPrevented) {\r\n return; // Do nothing if the event was already processed\r\n }\r\n\r\n if (event.key === \"Escape\" || event.key === \"Esc\") {\r\n this.hide();\r\n }\r\n\r\n // Cancel the default action to avoid it being handled twice\r\n event.preventDefault();\r\n }\r\n\r\n static error(errorMessage) {\r\n const errorContent = `\r\n
\r\n

Fejl

\r\n

${errorMessage}

\r\n

\r\n `;\r\n\r\n return new this(errorContent);\r\n }\r\n}\r\n","/*\r\n * Search\r\n */\r\nclass SearchModal {\r\n\r\n #debounceTimeoutMs = 325;\r\n #searchTimeout = null;\r\n\r\n #searchContentEl;\r\n #searchHeadlineEl;\r\n #searchResultsEl;\r\n #searchFieldEl;\r\n #departmentSearchToggleEl;\r\n #departmentSearchInputEl;\r\n #toggleTextEl;\r\n\r\n #modal;\r\n\r\n #defaultHeadline = 'Søg på siden';\r\n #searchFieldPlaceholder = 'Søg på siden';\r\n #searchResultHeadline = 'Søgeresultater';\r\n #toggleStateText = {\r\n default: \"Vis alle søgeresultater\",\r\n withinDepartment: \"Vis kun søgeresultater fra afdelingen\"\r\n };\r\n #currentQuery = '';\r\n #searchApiUrl = '';\r\n #isDepartmentSearchSelected;\r\n\r\n constructor(searchApiUrl, isPageAtDepartmentLevel) {\r\n this.#searchApiUrl = searchApiUrl;\r\n this.#isDepartmentSearchSelected = isPageAtDepartmentLevel;\r\n\r\n const searchTemplate = `\r\n
\r\n
\r\n

${this.#defaultHeadline}

\r\n
\r\n \r\n \r\n
\r\n
\r\n ${isPageAtDepartmentLevel ?\r\n `\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n ${this.#isDepartmentSearchSelected ? this.#toggleStateText.withinDepartment : this.#toggleStateText.default}\r\n \r\n
\r\n ` : ``}\r\n
\r\n
\r\n
\r\n `;\r\n\r\n this.#modal = new Modal(searchTemplate, { initialHeight: isPageAtDepartmentLevel ? '203px' : '150px' })\r\n .on('opened', () => {\r\n this.#searchContentEl = document.getElementById('searchContent');\r\n this.#searchHeadlineEl = this.#searchContentEl.querySelector('.search-header > h2');\r\n this.#searchResultsEl = this.#searchContentEl.querySelector('.search-results');\r\n this.#searchFieldEl = this.#searchContentEl.querySelector('.search-field');\r\n this.#departmentSearchToggleEl = this.#searchContentEl.querySelector(\".department-search-toggle\");\r\n\r\n if (this.#departmentSearchToggleEl) {\r\n this.#departmentSearchInputEl = this.#departmentSearchToggleEl.querySelector(\"input\");\r\n this.#toggleTextEl = this.#departmentSearchToggleEl.querySelector(\".text\");\r\n\r\n this.#departmentSearchToggleEl.addEventListener('keyup', (e) => {\r\n if (e.key === 'Enter' || isPressedKeySpaceBar() ) {\r\n this.#controlToggleState();\r\n }\r\n\r\n function isPressedKeySpaceBar() {\r\n return e.key === 'Space' || e.keyCode === 32 || e.code === 'Space';\r\n }\r\n });\r\n\r\n this.#departmentSearchToggleEl.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n this.#controlToggleState();\r\n });\r\n }\r\n\r\n this.#searchFieldEl.focus({ focusVisible: true });\r\n\r\n this.#searchFieldEl.addEventListener('keyup', (e) => {\r\n if (e.key === 'Enter') {\r\n this.#searchForContent();\r\n }\r\n });\r\n\r\n this.#searchFieldEl.addEventListener('input', (e) => this.#debounceSearch());\r\n });\r\n }\r\n\r\n show() {\r\n this.#modal.show();\r\n }\r\n\r\n on(eventName, func) {\r\n this.#modal.on(eventName, func);\r\n return this;\r\n }\r\n\r\n #controlToggleState() {\r\n this.#departmentSearchInputEl.setAttribute('aria-checked', !(this.#departmentSearchInputEl.getAttribute('aria-checked') === 'true'));\r\n this.#departmentSearchInputEl.checked = !this.#departmentSearchInputEl.checked;\r\n this.#toggleTextEl.innerText = this.#departmentSearchInputEl.checked ? this.#toggleStateText.withinDepartment : this.#toggleStateText.default;\r\n this.#isDepartmentSearchSelected = this.#departmentSearchInputEl.checked;\r\n this.#searchForContent({ hasDepartmentSearchToggleStateChanged: true });\r\n }\r\n\r\n #debounceSearch() {\r\n if (this.#searchTimeout) {\r\n clearTimeout(this.#searchTimeout);\r\n }\r\n\r\n this.#searchTimeout = setTimeout(() => {\r\n this.#searchTimeout = null;\r\n this.#searchForContent();\r\n }, this.#debounceTimeoutMs);\r\n }\r\n\r\n async #searchForContent(hasDepartmentSearchToggleStateChanged) {\r\n const query = this.#searchFieldEl.value.trim();\r\n\r\n if (query.length < 3) {\r\n this.#searchHeadlineEl.innerHTML = this.#defaultHeadline;\r\n this.#searchResultsEl.innerHTML = '';\r\n this.#currentQuery = '';\r\n return;\r\n }\r\n\r\n if (query === this.#currentQuery && !hasDepartmentSearchToggleStateChanged) return;\r\n\r\n this.#currentQuery = query;\r\n\r\n this.#searchResultsEl.innerHTML = 'Søger';\r\n this.#modal.expand();\r\n\r\n let loadingAnimationDisplayTime = 350,\r\n countDown = setInterval(() => {\r\n loadingAnimationDisplayTime -= 10;\r\n\r\n if (loadingAnimationDisplayTime <= 0) {\r\n loadingAnimationDisplayTime = 0;\r\n clearInterval(countDown);\r\n }\r\n }, 10);\r\n\r\n let searchResults;\r\n try {\r\n const response = await fetch(this.#searchApiUrl + `&q=${encodeURIComponent(query)}&ds=${this.#isDepartmentSearchSelected}&_cb=${Date.now()}`, {\r\n method: 'GET'\r\n });\r\n\r\n searchResults = await response.text();\r\n this.#searchHeadlineEl.innerHTML = this.#searchResultHeadline;\r\n } catch (err) {\r\n searchResults = err;\r\n }\r\n\r\n setTimeout(() => {\r\n this.#searchResultsEl.innerHTML = searchResults;\r\n }, loadingAnimationDisplayTime);\r\n }\r\n}\r\n\r\n(function () {\r\n const mainSearchButton = document.getElementById('mainSearchButton'),\r\n mobileSearchButton = document.getElementById('mobileSearchButton'),\r\n hiddenSearchButton = document.getElementById('hiddenSearchButton'),\r\n searchApiUrl = mainSearchButton.dataset.url,\r\n isPageAtDepartmentLevel = mainSearchButton.hasAttribute('data-department-level');\r\n\r\n const openSearchModal = () => {\r\n mainSearchButton.disabled = mobileSearchButton.disabled = hiddenSearchButton.disabled = true;\r\n\r\n new SearchModal(searchApiUrl, isPageAtDepartmentLevel)\r\n .on('closed', () => {\r\n mainSearchButton.disabled = mobileSearchButton.disabled = hiddenSearchButton.disabled = false;\r\n })\r\n .show();\r\n };\r\n\r\n mainSearchButton.addEventListener('click', () => openSearchModal());\r\n mobileSearchButton.addEventListener('click', () => openSearchModal());\r\n\r\n hiddenSearchButton.addEventListener('keyup', (event) => {\r\n if (event.key === 'Enter') {\r\n hiddenSearchButton.blur();\r\n openSearchModal();\r\n }\r\n });\r\n})();","class SubpageMenu {\r\n\r\n subpageMenu;\r\n selectedItem;\r\n\r\n constructor() {\r\n this.subpageMenu = document.getElementById('subpage-menu');\r\n\r\n if (!this.subpageMenu) {\r\n return;\r\n }\r\n\r\n this.selectedItem = this.subpageMenu.querySelector('ul .selected');\r\n\r\n this.subpageMenu.addEventListener('click', () => this.onMenuClick());\r\n\r\n this.selectedItem.firstElementChild.addEventListener('focus', () => {\r\n this.expandMenu();\r\n });\r\n\r\n // Align the selected item on init\r\n this.selectedItem.classList.add('preload');\r\n this.alignSelectedItem();\r\n afterNextDomRepaint().then(() => {\r\n this.selectedItem.classList.remove('preload');\r\n });\r\n }\r\n\r\n expandMenu() {\r\n this.subpageMenu.classList.add('open');\r\n this.selectedItem.style.transform = 'unset';\r\n this.subpageMenu.querySelector('.burger-container').setAttribute('title', 'Luk undermenu');\r\n }\r\n\r\n alignSelectedItem() {\r\n this.selectedItem.style.transform = `translateY(${this.selectedItem.offsetTop * -1}px)`;\r\n }\r\n\r\n onMenuClick() {\r\n if (this.subpageMenu.classList.contains('open')) {\r\n this.subpageMenu.classList.remove('open');\r\n this.alignSelectedItem();\r\n this.subpageMenu.querySelector('.burger-container').setAttribute('title', 'Åben undermenu');\r\n } else {\r\n this.expandMenu();\r\n }\r\n }\r\n}\r\n\r\nwindow.addEventListener('load', () => {\r\n new SubpageMenu();\r\n});","var interval = document.getElementById(\"page-main-content\").getAttribute(\"data-refresh-interval\");\r\n\r\nwindow.addEventListener('load', () => {\r\n if (interval) {\r\n setTimeout(function () {\r\n window.location.reload();\r\n }, interval);\r\n }\r\n});\r\n"]}