{"mappings":"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","sources":["","src/script.js","src/js/blockLinks.js","src/js/faq.js","node_modules/mustache/mustache.js","src/js/grouporder.js","src/js/loadSVGSpritesheet.js","src/js/shareLinks.js","src/js/skipToContent.js","src/js/regionDropdown.js"],"sourcesContent":["(() => {\nlet $749b345a849d776c$var$blockLinks = [];\nconst $749b345a849d776c$export$feb22ab44b4951fb = {\n onDocumentLoad: $749b345a849d776c$var$onDocumentLoad\n};\nconst $749b345a849d776c$var$onDocumentLoad = function() {\n /*Handle clicks for blocks with links*/ $749b345a849d776c$var$blockLinks = document.querySelectorAll(\".block-link\");\n for(let i = 0; i < $749b345a849d776c$var$blockLinks.length; i++){\n $749b345a849d776c$var$blockLinks[i].addEventListener(\"click\", blockLinkPress);\n $749b345a849d776c$var$blockLinks[i].addEventListener(\"keyup\", function(e) {\n if (e.key === \"Enter\") blockLinkPress(e);\n });\n }\n function blockLinkPress(e) {\n let item = e.currentTarget.querySelector(\"[href]\");\n let link = item.getAttribute(\"href\");\n let target = item.getAttribute(\"target\");\n let download = item.getAttribute(\"download\");\n if (target != null && target == \"_blank\") window.open(link, \"_blank\");\n else if (download != null) window.open(link, \"_blank\");\n else window.location.href = link;\n }\n};\n\n\nvar $49c217790058dcc8$exports = {};\n(function(global, factory) {\n $49c217790058dcc8$exports = factory();\n})($49c217790058dcc8$exports, function() {\n \"use strict\";\n /*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */ var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill(object) {\n return objectToString.call(object) === \"[object Array]\";\n };\n function isFunction(object) {\n return typeof object === \"function\";\n }\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */ function typeStr(obj) {\n return isArray(obj) ? \"array\" : typeof obj;\n }\n function escapeRegExp(string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n }\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */ function hasProperty(obj, propName) {\n return obj != null && typeof obj === \"object\" && propName in obj;\n }\n /**\n * Safe way of detecting whether or not the given thing is a primitive and\n * whether it has the given property\n */ function primitiveHasOwnProperty(primitive, propName) {\n return primitive != null && typeof primitive !== \"object\" && primitive.hasOwnProperty && primitive.hasOwnProperty(propName);\n }\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n function testRegExp(re, string) {\n return regExpTest.call(re, string);\n }\n var nonSpaceRe = /\\S/;\n function isWhitespace(string) {\n return !testRegExp(nonSpaceRe, string);\n }\n var entityMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n \"/\": \"/\",\n \"`\": \"`\",\n \"=\": \"=\"\n };\n function escapeHtml(string) {\n return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap(s) {\n return entityMap[s];\n });\n }\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n *\n * Tokens for partials also contain two more elements: 1) a string value of\n * indendation prior to that tag and 2) the index of that tag on that line -\n * eg a value of 2 indicates the partial is the third tag on this line.\n */ function parseTemplate(template, tags) {\n if (!template) return [];\n var lineHasNonSpace = false;\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n var indentation = \"\"; // Tracks indentation for tags that use it\n var tagIndex = 0; // Stores a count of number of tags encountered on a line\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace() {\n if (hasTag && !nonSpace) while(spaces.length)delete tokens[spaces.pop()];\n else spaces = [];\n hasTag = false;\n nonSpace = false;\n }\n var openingTagRe, closingTagRe, closingCurlyRe;\n function compileTags(tagsToCompile) {\n if (typeof tagsToCompile === \"string\") tagsToCompile = tagsToCompile.split(spaceRe, 2);\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2) throw new Error(\"Invalid tags: \" + tagsToCompile);\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + \"\\\\s*\");\n closingTagRe = new RegExp(\"\\\\s*\" + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp(\"\\\\s*\" + escapeRegExp(\"}\" + tagsToCompile[1]));\n }\n compileTags(tags || mustache.tags);\n var scanner = new Scanner(template);\n var start, type, value, chr, token, openSection;\n while(!scanner.eos()){\n start = scanner.pos;\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n if (value) for(var i = 0, valueLength = value.length; i < valueLength; ++i){\n chr = value.charAt(i);\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n indentation += chr;\n } else {\n nonSpace = true;\n lineHasNonSpace = true;\n indentation += \" \";\n }\n tokens.push([\n \"text\",\n chr,\n start,\n start + 1\n ]);\n start += 1;\n // Check for whitespace on the current line.\n if (chr === \"\\n\") {\n stripSpace();\n indentation = \"\";\n tagIndex = 0;\n lineHasNonSpace = false;\n }\n }\n // Match the opening tag.\n if (!scanner.scan(openingTagRe)) break;\n hasTag = true;\n // Get the tag type.\n type = scanner.scan(tagRe) || \"name\";\n scanner.scan(whiteRe);\n // Get the tag value.\n if (type === \"=\") {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === \"{\") {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = \"&\";\n } else value = scanner.scanUntil(closingTagRe);\n // Match the closing tag.\n if (!scanner.scan(closingTagRe)) throw new Error(\"Unclosed tag at \" + scanner.pos);\n if (type == \">\") token = [\n type,\n value,\n start,\n scanner.pos,\n indentation,\n tagIndex,\n lineHasNonSpace\n ];\n else token = [\n type,\n value,\n start,\n scanner.pos\n ];\n tagIndex++;\n tokens.push(token);\n if (type === \"#\" || type === \"^\") sections.push(token);\n else if (type === \"/\") {\n // Check section nesting.\n openSection = sections.pop();\n if (!openSection) throw new Error('Unopened section \"' + value + '\" at ' + start);\n if (openSection[1] !== value) throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === \"name\" || type === \"{\" || type === \"&\") nonSpace = true;\n else if (type === \"=\") // Set the tags for the next time around.\n compileTags(value);\n }\n stripSpace();\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n if (openSection) throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n return nestTokens(squashTokens(tokens));\n }\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */ function squashTokens(tokens) {\n var squashedTokens = [];\n var token, lastToken;\n for(var i = 0, numTokens = tokens.length; i < numTokens; ++i){\n token = tokens[i];\n if (token) {\n if (token[0] === \"text\" && lastToken && lastToken[0] === \"text\") {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n return squashedTokens;\n }\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */ function nestTokens(tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n var token, section;\n for(var i = 0, numTokens = tokens.length; i < numTokens; ++i){\n token = tokens[i];\n switch(token[0]){\n case \"#\":\n case \"^\":\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case \"/\":\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n return nestedTokens;\n }\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */ function Scanner(string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n /**\n * Returns `true` if the tail is empty (end of string).\n */ Scanner.prototype.eos = function eos() {\n return this.tail === \"\";\n };\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */ Scanner.prototype.scan = function scan(re) {\n var match = this.tail.match(re);\n if (!match || match.index !== 0) return \"\";\n var string = match[0];\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n return string;\n };\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */ Scanner.prototype.scanUntil = function scanUntil(re) {\n var index = this.tail.search(re), match;\n switch(index){\n case -1:\n match = this.tail;\n this.tail = \"\";\n break;\n case 0:\n match = \"\";\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n this.pos += match.length;\n return match;\n };\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */ function Context(view, parentContext) {\n this.view = view;\n this.cache = {\n \".\": this.view\n };\n this.parent = parentContext;\n }\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */ Context.prototype.push = function push(view) {\n return new Context(view, this);\n };\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */ Context.prototype.lookup = function lookup(name) {\n var cache1 = this.cache;\n var value;\n if (cache1.hasOwnProperty(name)) value = cache1[name];\n else {\n var context = this, intermediateValue, names, index, lookupHit = false;\n while(context){\n if (name.indexOf(\".\") > 0) {\n intermediateValue = context.view;\n names = name.split(\".\");\n index = 0;\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n *\n * In the case where dot notation is used, we consider the lookup\n * to be successful even if the last \"object\" in the path is\n * not actually an object but a primitive (e.g., a string, or an\n * integer), because it is sometimes useful to access a property\n * of an autoboxed primitive, such as the length of a string.\n **/ while(intermediateValue != null && index < names.length){\n if (index === names.length - 1) lookupHit = hasProperty(intermediateValue, names[index]) || primitiveHasOwnProperty(intermediateValue, names[index]);\n intermediateValue = intermediateValue[names[index++]];\n }\n } else {\n intermediateValue = context.view[name];\n /**\n * Only checking against `hasProperty`, which always returns `false` if\n * `context.view` is not an object. Deliberately omitting the check\n * against `primitiveHasOwnProperty` if dot notation is not used.\n *\n * Consider this example:\n * ```\n * Mustache.render(\"The length of a football field is {{#length}}{{length}}{{/length}}.\", {length: \"100 yards\"})\n * ```\n *\n * If we were to check also against `primitiveHasOwnProperty`, as we do\n * in the dot notation case, then render call would return:\n *\n * \"The length of a football field is 9.\"\n *\n * rather than the expected:\n *\n * \"The length of a football field is 100 yards.\"\n **/ lookupHit = hasProperty(context.view, name);\n }\n if (lookupHit) {\n value = intermediateValue;\n break;\n }\n context = context.parent;\n }\n cache1[name] = value;\n }\n if (isFunction(value)) value = value.call(this.view);\n return value;\n };\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */ function Writer() {\n this.templateCache = {\n _cache: {},\n set: function set(key, value) {\n this._cache[key] = value;\n },\n get: function get(key) {\n return this._cache[key];\n },\n clear: function clear() {\n this._cache = {};\n }\n };\n }\n /**\n * Clears all cached templates in this writer.\n */ Writer.prototype.clearCache = function clearCache() {\n if (typeof this.templateCache !== \"undefined\") this.templateCache.clear();\n };\n /**\n * Parses and caches the given `template` according to the given `tags` or\n * `mustache.tags` if `tags` is omitted, and returns the array of tokens\n * that is generated from the parse.\n */ Writer.prototype.parse = function parse(template, tags) {\n var cache1 = this.templateCache;\n var cacheKey = template + \":\" + (tags || mustache.tags).join(\":\");\n var isCacheEnabled = typeof cache1 !== \"undefined\";\n var tokens = isCacheEnabled ? cache1.get(cacheKey) : undefined;\n if (tokens == undefined) {\n tokens = parseTemplate(template, tags);\n isCacheEnabled && cache1.set(cacheKey, tokens);\n }\n return tokens;\n };\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n *\n * If the optional `config` argument is given here, then it should be an\n * object with a `tags` attribute or an `escape` attribute or both.\n * If an array is passed, then it will be interpreted the same way as\n * a `tags` attribute on a `config` object.\n *\n * The `tags` attribute of a `config` object must be an array with two\n * string values: the opening and closing tags used in the template (e.g.\n * [ \"<%\", \"%>\" ]). The default is to mustache.tags.\n *\n * The `escape` attribute of a `config` object must be a function which\n * accepts a string as input and outputs a safely escaped string.\n * If an `escape` function is not provided, then an HTML-safe string\n * escaping function is used as the default.\n */ Writer.prototype.render = function render(template, view, partials, config) {\n var tags = this.getConfigTags(config);\n var tokens = this.parse(template, tags);\n var context = view instanceof Context ? view : new Context(view, undefined);\n return this.renderTokens(tokens, context, partials, template, config);\n };\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */ Writer.prototype.renderTokens = function renderTokens(tokens, context, partials, originalTemplate, config) {\n var buffer = \"\";\n var token, symbol, value;\n for(var i = 0, numTokens = tokens.length; i < numTokens; ++i){\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n if (symbol === \"#\") value = this.renderSection(token, context, partials, originalTemplate, config);\n else if (symbol === \"^\") value = this.renderInverted(token, context, partials, originalTemplate, config);\n else if (symbol === \">\") value = this.renderPartial(token, context, partials, config);\n else if (symbol === \"&\") value = this.unescapedValue(token, context);\n else if (symbol === \"name\") value = this.escapedValue(token, context, config);\n else if (symbol === \"text\") value = this.rawValue(token);\n if (value !== undefined) buffer += value;\n }\n return buffer;\n };\n Writer.prototype.renderSection = function renderSection(token, context, partials, originalTemplate, config) {\n var self = this;\n var buffer = \"\";\n var value = context.lookup(token[1]);\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender(template) {\n return self.render(template, context, partials, config);\n }\n if (!value) return;\n if (isArray(value)) for(var j = 0, valueLength = value.length; j < valueLength; ++j)buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate, config);\n else if (typeof value === \"object\" || typeof value === \"string\" || typeof value === \"number\") buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate, config);\n else if (isFunction(value)) {\n if (typeof originalTemplate !== \"string\") throw new Error(\"Cannot use higher-order sections without the original template\");\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n if (value != null) buffer += value;\n } else buffer += this.renderTokens(token[4], context, partials, originalTemplate, config);\n return buffer;\n };\n Writer.prototype.renderInverted = function renderInverted(token, context, partials, originalTemplate, config) {\n var value = context.lookup(token[1]);\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || isArray(value) && value.length === 0) return this.renderTokens(token[4], context, partials, originalTemplate, config);\n };\n Writer.prototype.indentPartial = function indentPartial(partial, indentation, lineHasNonSpace) {\n var filteredIndentation = indentation.replace(/[^ \\t]/g, \"\");\n var partialByNl = partial.split(\"\\n\");\n for(var i = 0; i < partialByNl.length; i++)if (partialByNl[i].length && (i > 0 || !lineHasNonSpace)) partialByNl[i] = filteredIndentation + partialByNl[i];\n return partialByNl.join(\"\\n\");\n };\n Writer.prototype.renderPartial = function renderPartial(token, context, partials, config) {\n if (!partials) return;\n var tags = this.getConfigTags(config);\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null) {\n var lineHasNonSpace = token[6];\n var tagIndex = token[5];\n var indentation = token[4];\n var indentedValue = value;\n if (tagIndex == 0 && indentation) indentedValue = this.indentPartial(value, indentation, lineHasNonSpace);\n var tokens = this.parse(indentedValue, tags);\n return this.renderTokens(tokens, context, partials, indentedValue, config);\n }\n };\n Writer.prototype.unescapedValue = function unescapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null) return value;\n };\n Writer.prototype.escapedValue = function escapedValue(token, context, config) {\n var escape = this.getConfigEscape(config) || mustache.escape;\n var value = context.lookup(token[1]);\n if (value != null) return typeof value === \"number\" && escape === mustache.escape ? String(value) : escape(value);\n };\n Writer.prototype.rawValue = function rawValue(token) {\n return token[1];\n };\n Writer.prototype.getConfigTags = function getConfigTags(config) {\n if (isArray(config)) return config;\n else if (config && typeof config === \"object\") return config.tags;\n else return undefined;\n };\n Writer.prototype.getConfigEscape = function getConfigEscape(config) {\n if (config && typeof config === \"object\" && !isArray(config)) return config.escape;\n else return undefined;\n };\n var mustache = {\n name: \"mustache.js\",\n version: \"4.2.0\",\n tags: [\n \"{{\",\n \"}}\"\n ],\n clearCache: undefined,\n escape: undefined,\n parse: undefined,\n render: undefined,\n Scanner: undefined,\n Context: undefined,\n Writer: undefined,\n /**\n * Allows a user to override the default caching strategy, by providing an\n * object with set, get and clear methods. This can also be used to disable\n * the cache by setting it to the literal `undefined`.\n */ set templateCache (cache){\n defaultWriter.templateCache = cache;\n },\n /**\n * Gets the default or overridden caching object from the default writer.\n */ get templateCache () {\n return defaultWriter.templateCache;\n }\n };\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n /**\n * Clears all cached templates in the default writer.\n */ mustache.clearCache = function clearCache() {\n return defaultWriter.clearCache();\n };\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */ mustache.parse = function parse(template, tags) {\n return defaultWriter.parse(template, tags);\n };\n /**\n * Renders the `template` with the given `view`, `partials`, and `config`\n * using the default writer.\n */ mustache.render = function render(template, view, partials, config) {\n if (typeof template !== \"string\") throw new TypeError('Invalid template! Template should be a \"string\" but \"' + typeStr(template) + '\" was given as the first ' + \"argument for mustache#render(template, view, partials)\");\n return defaultWriter.render(template, view, partials, config);\n };\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n return mustache;\n});\n\n\nlet $94f875d1245cd4dc$var$faqBlocks = [];\nlet $94f875d1245cd4dc$var$faqButtons = [];\nconst $94f875d1245cd4dc$export$bcbb932733b48eed = {\n onDocumentLoad: $94f875d1245cd4dc$var$onDocumentLoad\n};\nconst $94f875d1245cd4dc$var$onDocumentLoad = function() {\n /*FAQ*/ $94f875d1245cd4dc$var$faqBlocks = document.getElementsByClassName(\"faq-block\");\n for(let i = 0; i < $94f875d1245cd4dc$var$faqBlocks.length; i++){\n $94f875d1245cd4dc$var$faqButtons = $94f875d1245cd4dc$var$faqBlocks[i].getElementsByTagName(\"button\");\n for(let i = 0; i < $94f875d1245cd4dc$var$faqButtons.length; i++){\n let expand = document.getElementById($94f875d1245cd4dc$var$faqButtons[i].getAttribute(\"aria-controls\"));\n let height = expand.offsetHeight;\n expand.setAttribute(\"data-height\", height);\n expand.style.height = 0;\n $94f875d1245cd4dc$var$faqButtons[i].addEventListener(\"click\", function(e) {\n faqButtonClick(e.currentTarget);\n });\n }\n }\n function faqButtonClick(target) {\n target.setAttribute(\"aria-expanded\", toggleAriaExpanded(target));\n let expand = document.getElementById(target.getAttribute(\"aria-controls\"));\n expand.classList.toggle(\"open\");\n if (expand.classList.contains(\"open\")) expand.style.height = expand.dataset.height + \"px\";\n else expand.style.height = 0;\n }\n function toggleAriaExpanded(target) {\n let targetExpanded = target.getAttribute(\"aria-expanded\");\n if (targetExpanded == \"true\") targetExpanded = \"false\";\n else targetExpanded = \"true\";\n return targetExpanded;\n }\n};\n\n\n\nconst $fcf4abd278724bfe$var$hiddenFieldGuid = \"0e1c0568-776f-4d95-cb15-b5e044d2ac43\";\nconst $fcf4abd278724bfe$export$4e1c4961567893ee = {\n onDocumentLoad: $fcf4abd278724bfe$var$onDocumentLoad\n};\nconst $fcf4abd278724bfe$var$onDocumentLoad = function() {\n var quantityStepperBtns = document.querySelectorAll(\".quantity-stepper-btn\");\n for(let i = 0; i < quantityStepperBtns.length; i++)quantityStepperBtns[i].addEventListener(\"click\", onQuantityStepperPress);\n function onQuantityStepperPress(e) {\n let target = e.currentTarget;\n let queryString = target.dataset.targetInput;\n let willIncreaseValue = target.dataset.type == \"increase\";\n let targetIsMobile = target.dataset.targetInput.includes(\"Mobile\");\n if (willIncreaseValue) increaseValue(queryString, targetIsMobile);\n else decreaseValue(queryString, targetIsMobile);\n }\n function increaseValue(queryString, targetIsMobile) {\n let elms = setUpRelatedInputElements(targetIsMobile, queryString);\n let desktopInput = elms[0];\n let mobileInput = elms[1];\n let increaseBtnDesktop = elms[2];\n let increaseBtnMobile = elms[3];\n desktopInput.value++;\n mobileInput.value = desktopInput.value;\n generateOrderState();\n if (desktopInput.value > 0) {\n increaseBtnDesktop.disabled = false;\n increaseBtnMobile.disabled = false;\n }\n }\n function decreaseValue(queryString, targetIsMobile) {\n let elms = setUpRelatedInputElements(targetIsMobile, queryString);\n let desktopInput = elms[0];\n let mobileInput = elms[1];\n let increaseBtnDesktop = elms[2];\n let increaseBtnMobile = elms[3];\n let hash = desktopInput.dataset.hash;\n var summaryWrapperItems = document.querySelectorAll(`li[data-hash='${hash}']`);\n if (summaryWrapperItems.length == 1) handleArticleAdded(hash, false);\n if (desktopInput.value > 0) {\n desktopInput.value--;\n mobileInput.value = desktopInput.value;\n generateOrderState();\n }\n if (desktopInput.value == 0) {\n increaseBtnDesktop.disabled = true;\n increaseBtnMobile.disabled = true;\n }\n }\n var mobileVariants = document.querySelectorAll(\".variants-mobile\");\n for(let i = 0; i < mobileVariants.length; i++){\n let height = mobileVariants[i].offsetHeight;\n mobileVariants[i].dataset.height = height;\n mobileVariants[i].style.height = 0;\n }\n var variantsToggle = document.querySelectorAll(\".variants-toggle\");\n for(let i = 0; i < variantsToggle.length; i++)variantsToggle[i].addEventListener(\"click\", onTogglePress);\n function onTogglePress(e) {\n let target = e.currentTarget;\n let expandId = target.getAttribute(\"aria-controls\");\n let expand = document.getElementById(expandId);\n target.setAttribute(\"aria-expanded\", toggleAriaExpanded(target));\n expand.classList.toggle(\"open\");\n if (expand.dataset.height) toggleHeight(expand, expand.dataset.height);\n }\n function toggleHeight(expand, height) {\n if (expand.classList.contains(\"open\")) expand.style.height = height + \"px\";\n else expand.style.height = 0;\n }\n function toggleAriaExpanded(target) {\n let targetExpanded = target.getAttribute(\"aria-expanded\");\n if (targetExpanded == \"true\") targetExpanded = \"false\";\n else targetExpanded = \"true\";\n return targetExpanded;\n }\n function setUpRelatedInputElements(targetIsMobile, queryString) {\n let inputDesktopQueryString = queryString;\n let inputMobileQueryString = queryString;\n if (targetIsMobile) inputDesktopQueryString = queryString.replace(\"-Mobile\", \"\");\n else inputMobileQueryString = queryString + \"-Mobile\";\n let desktopInput = document.getElementById(inputDesktopQueryString);\n let mobileInput = document.getElementById(inputMobileQueryString);\n let increaseBtnDesktop = document.querySelectorAll(`[data-target-input=\"${inputDesktopQueryString}\"]`);\n let increaseBtnMobile = document.querySelectorAll(`[data-target-input=\"${inputMobileQueryString}\"]`);\n let elms = [\n desktopInput,\n mobileInput,\n increaseBtnDesktop[1],\n increaseBtnMobile[0]\n ];\n return elms;\n }\n var changeAmount = document.querySelectorAll(\".change-amount\");\n for(let i = 0; i < changeAmount.length; i++){\n let oldValue = null;\n let newValue = null;\n changeAmount[i].addEventListener(\"focus\", function(e) {\n this.select();\n });\n changeAmount[i].addEventListener(\"keyup\", function(e) {\n let targetIsMobile = e.currentTarget.id.includes(\"Mobile\");\n let queryString = e.currentTarget.id;\n let elms = setUpRelatedInputElements(targetIsMobile, queryString);\n let desktopInput = elms[0];\n let mobileInput = elms[1];\n let increaseBtnDesktop = elms[2];\n let increaseBtnMobile = elms[3];\n if (e.which !== 40 || e.which !== 38) {\n if (changeAmount[i].value == null || changeAmount[i].value == \"\") changeAmount[i].value = oldValue;\n else {\n newValue = changeAmount[i].value;\n if (targetIsMobile) desktopInput.value = newValue;\n else mobileInput.value = newValue;\n if (changeAmount[i].value == 0) {\n increaseBtnDesktop.disabled = true;\n increaseBtnMobile.disabled = true;\n } else {\n increaseBtnDesktop.disabled = false;\n increaseBtnMobile.disabled = false;\n }\n generateOrderState();\n }\n if (newValue != oldValue) oldValue = newValue;\n }\n });\n changeAmount[i].addEventListener(\"keydown\", function(e) {\n let targetIsMobile = e.currentTarget.id.includes(\"Mobile\");\n let queryString = e.currentTarget.id;\n if (e.which === 38) {\n e.preventDefault();\n increaseValue(queryString, targetIsMobile);\n }\n if (e.which === 40) {\n e.preventDefault();\n decreaseValue(queryString, targetIsMobile);\n }\n if (changeAmount[i].value == null || changeAmount[i].value == \"\") changeAmount[i].value = oldValue;\n else newValue = changeAmount[i].value;\n });\n if (changeAmount.length) generateOrderState();\n }\n function generateOrderState(keepSummaryOpen) {\n var products = document.querySelectorAll(\"[data-product]\");\n var totalAmount = 0;\n var open = keepSummaryOpen ? \"open\" : \"\";\n var result = {\n \"products\": [],\n \"hasProducts\": function() {\n return this.products.length;\n },\n \"totalAmount\": totalAmount,\n \"open\": open\n };\n for(let i = 0; i < products.length; i++){\n var title = products[i].getAttribute(\"data-product-title\");\n var hash = products[i].getAttribute(\"data-product\");\n var item = {\n title: title,\n hash: hash,\n open: open,\n variations: []\n };\n var variations = products[i].querySelectorAll(\"[data-variation]\");\n for(let j = 0; j < variations.length; j++){\n var variantTitle = variations[j].getAttribute(\"data-variation-title\");\n var amount = parseInt(variations[j].value);\n var hash = variations[j].getAttribute(\"data-hash\");\n var id = variations[j].id;\n var totalAmountTemp = totalAmount;\n if (amount > 0) {\n totalAmount = totalAmountTemp + amount;\n var variation = {\n \"title\": variantTitle,\n \"amount\": amount,\n \"id\": id,\n hash: hash\n };\n item.variations.push(variation);\n }\n }\n if (item.variations.length) result.products.push(item);\n }\n result.totalAmount = totalAmount;\n /* Update Mustache render */ const mustacheTemplate = document.getElementById(\"order-item-template\").innerHTML;\n const mustacheContainer = document.getElementById(\"mustache-container\");\n const mustacheRendered = $49c217790058dcc8$exports.render(mustacheTemplate, result);\n mustacheContainer.innerHTML = mustacheRendered;\n var summaryToggle = document.querySelectorAll(\".order-summary-toggle\");\n for(let i = 0; i < summaryToggle.length; i++)summaryToggle[i].addEventListener(\"click\", onTogglePress);\n var anchorButtons = mustacheContainer.querySelectorAll(\"[data-anchor]\");\n for(let i = 0; i < anchorButtons.length; i++){\n anchorButtons[i].addEventListener(\"click\", onAnchorPress);\n anchorButtons[i].addEventListener(\"keyup\", onAnchorPress);\n }\n var removeVariationButtons = mustacheContainer.querySelectorAll(\"[data-remove-variation]\");\n for(let i = 0; i < removeVariationButtons.length; i++){\n //TODO Update remove logic\n var button = removeVariationButtons[i];\n button.addEventListener(\"click\", onRemoveVariationPress);\n button.addEventListener(\"keyup\", onRemoveVariationPress);\n }\n let summaryWrapperItems = document.querySelectorAll(\"li[data-hash]\");\n for(var i = 0; i < summaryWrapperItems.length; i++)handleArticleAdded(summaryWrapperItems[i].dataset.hash, true);\n if (!result.products.length) {\n document.getElementById(\"order-form\").classList.add(\"hidden\");\n window.scrollTo(0, 0);\n } else {\n // parse the object and set it to a hidden form field that will be sent to backend.\n var hiddenJsonDataField = document.querySelector(`[name='${$fcf4abd278724bfe$var$hiddenFieldGuid}']`);\n if (hiddenJsonDataField !== undefined) hiddenJsonDataField.value = JSON.stringify(result);\n }\n }\n function onRemoveVariationPress(e) {\n if (e.key === undefined || e.key === \"Enter\") {\n var id = e.currentTarget.dataset.removeVariation;\n let elms = setUpRelatedInputElements(false, id);\n let desktopInput = elms[0];\n let mobileInput = elms[1];\n let increaseBtnDesktop = elms[2];\n let increaseBtnMobile = elms[3];\n desktopInput.value = 0;\n mobileInput.value = 0;\n increaseBtnDesktop.disabled = true;\n increaseBtnMobile.disabled = true;\n handleArticleAdded(e.currentTarget.dataset.hash, false);\n generateOrderState(true);\n }\n }\n function handleArticleAdded(hash, isAdded) {\n let article = document.querySelector(`article[data-product='${hash}']`);\n if (isAdded) article.classList.add(\"added\");\n else article.classList.remove(\"added\");\n }\n function onAnchorPress(e) {\n if (e.key === undefined || e.key === \"Enter\") {\n e.preventDefault();\n var targetId = e.currentTarget.getAttribute(\"data-anchor\");\n let target = document.getElementById(targetId);\n target.classList.remove(\"hidden\");\n target.scrollIntoView({\n behavior: \"smooth\"\n });\n }\n }\n var sectionFilterChips = document.querySelectorAll(\"[data-product-section-filter]\");\n function handleFilterChipsChange() {\n var activeFilterChips = [];\n for(let i = 0; i < sectionFilterChips.length; i++){\n var filterChip = sectionFilterChips[i];\n if (filterChip.classList.contains(\"active\")) {\n var target = filterChip.getAttribute(\"data-target\");\n if (target !== undefined && target !== null) activeFilterChips.push(target);\n }\n }\n var productSections = document.querySelectorAll(\"[data-section]\");\n for(let i = 0; i < productSections.length; i++){\n var sectionName = productSections[i].getAttribute(\"data-section\");\n if (!activeFilterChips.includes(sectionName) && activeFilterChips.length) productSections[i].classList.add(\"hidden\");\n else productSections[i].classList.remove(\"hidden\");\n }\n }\n for(let i = 0; i < sectionFilterChips.length; i++)sectionFilterChips[i].addEventListener(\"click\", function(e) {\n e.preventDefault();\n e.currentTarget.classList.toggle(\"active\");\n var countElement = e.currentTarget.querySelector(\"[data-count]\");\n var countActive = [\n \"bg-base-light\",\n \"text-base-dark\",\n \"border-base-light\"\n ];\n var countInactive = [\n \"border-base-dark\"\n ];\n var btnActive = [\n \"text-base-onDark\",\n \"bg-base-dark\",\n \"hover:bg-base-hoverDark\"\n ];\n if (e.currentTarget.classList.contains(\"active\")) {\n countElement.classList.add(...countActive);\n e.currentTarget.classList.add(...btnActive);\n countElement.classList.remove(...countInactive);\n } else {\n countElement.classList.remove(...countActive);\n e.currentTarget.classList.remove(...btnActive);\n countElement.classList.add(...countInactive);\n }\n handleFilterChipsChange();\n });\n};\n\n\nconst $da9198d3767da401$export$6d5c1d5931889e38 = {\n onDocumentLoad: $da9198d3767da401$var$onDocumentLoad\n};\nconst $da9198d3767da401$var$onDocumentLoad = function() {\n var request = new XMLHttpRequest();\n request.open(\"GET\", \"/images/spritesheet.svg?v=2\");\n request.send();\n request.onreadystatechange = function() {\n if (request.readyState == XMLHttpRequest.DONE) {\n if (request.status == 200) {\n var data = request.responseText;\n var svgContainer = document.getElementById(\"svg-icons\");\n svgContainer.innerHTML = data;\n } else console.error(\"Couldn't load SVG spritesheet\");\n }\n };\n};\n\n\nlet $43f1375b38f583e3$var$shareLink = null;\nlet $43f1375b38f583e3$var$shareLinkConfirmation = null;\nconst $43f1375b38f583e3$export$969ee752695d93ee = {\n onDocumentLoad: $43f1375b38f583e3$var$onDocumentLoad\n};\nconst $43f1375b38f583e3$var$onDocumentLoad = function() {\n /*Share link*/ $43f1375b38f583e3$var$shareLink = document.getElementById(\"shareLink\");\n $43f1375b38f583e3$var$shareLinkConfirmation = document.getElementById(\"shareLinkConfirmation\");\n if ($43f1375b38f583e3$var$shareLink) $43f1375b38f583e3$var$shareLink.addEventListener(\"click\", function(e) {\n navigator.clipboard.writeText(window.location.href);\n setTimeout(()=>{\n $43f1375b38f583e3$var$shareLinkConfirmation.classList.remove(\"hidden\");\n }, 250);\n setTimeout(()=>{\n $43f1375b38f583e3$var$shareLinkConfirmation.classList.add(\"hidden\");\n }, 3250);\n });\n};\n\n\nconst $807a31536fa4a9f2$export$2b14f6bb59cf46da = {\n onDocumentLoad: $807a31536fa4a9f2$var$onDocumentLoad\n};\nconst $807a31536fa4a9f2$var$onDocumentLoad = function() {\n /*skip to content*/ /*skip to main content*/ let main = document.querySelectorAll(\"main\");\n let focusable = main[0].querySelectorAll(\"button, [href], select, textarea\");\n let firstFocusable = focusable[0];\n let skipToContent = document.getElementById(\"skipToContent\");\n skipToContent.addEventListener(\"click\", function() {\n firstFocusable.focus();\n });\n};\n\n\n/* Binds to region dropdowns when filtering Event / Group pages */ const $c4fca5833a0c1c49$export$4034a70b04efa1b7 = {\n onDocumentLoad: $c4fca5833a0c1c49$var$onDocumentLoad\n};\nconst $c4fca5833a0c1c49$var$onDocumentLoad = function() {\n var disallowedQueryParameters = [\n \"p\",\n \"city\"\n ];\n var dropdown = document.getElementById(\"regions\");\n if (dropdown !== undefined && dropdown !== null) {\n const searchParams = new URLSearchParams(window.location.search);\n disallowedQueryParameters.forEach((e)=>{\n searchParams.delete(e);\n });\n dropdown.addEventListener(\"change\", function(e) {\n const changedValue = e.target.value;\n var queryName = e.target.getAttribute(\"name\");\n if (changedValue.length > 0) searchParams.set(queryName, changedValue);\n window.location.search = searchParams;\n });\n }\n};\n\n\nlet $1df32a4945e9e156$var$expandBtns = [];\nlet $1df32a4945e9e156$var$menuExpandBtns = [];\nlet $1df32a4945e9e156$var$subExpandBtns = [];\nlet $1df32a4945e9e156$var$mainMenu = null;\nlet $1df32a4945e9e156$var$overlay = null;\nlet $1df32a4945e9e156$var$subMenus = [];\nlet $1df32a4945e9e156$var$mobileMenuWrapper = null;\nlet $1df32a4945e9e156$var$searchClear = [];\nlet $1df32a4945e9e156$var$searchInput = [];\nlet $1df32a4945e9e156$var$searchForm = [];\nlet $1df32a4945e9e156$var$searchHeader = null;\nlet $1df32a4945e9e156$var$searchWrapper = null;\nlet $1df32a4945e9e156$var$searchToggle = null;\nlet $1df32a4945e9e156$var$searchSubmit = null;\nlet $1df32a4945e9e156$var$header = null;\nlet $1df32a4945e9e156$var$headerHeight = \"\";\nlet $1df32a4945e9e156$var$body = null;\nlet $1df32a4945e9e156$var$lastScroll = 0;\nwindow.addEventListener(\"load\", (e)=>{\n (0, $da9198d3767da401$export$6d5c1d5931889e38).onDocumentLoad();\n $1df32a4945e9e156$var$header = document.getElementById(\"header\");\n $1df32a4945e9e156$var$headerHeight = $1df32a4945e9e156$var$header.offsetHeight;\n $1df32a4945e9e156$var$body = document.body;\n /* Load any relevant modules for this page */ /* TODO: Implement support to only run needed modules per page. */ (0, $fcf4abd278724bfe$export$4e1c4961567893ee).onDocumentLoad();\n (0, $94f875d1245cd4dc$export$bcbb932733b48eed).onDocumentLoad();\n (0, $43f1375b38f583e3$export$969ee752695d93ee).onDocumentLoad();\n (0, $749b345a849d776c$export$feb22ab44b4951fb).onDocumentLoad();\n (0, $807a31536fa4a9f2$export$2b14f6bb59cf46da).onDocumentLoad();\n (0, $c4fca5833a0c1c49$export$4034a70b04efa1b7).onDocumentLoad();\n $1df32a4945e9e156$var$overlay = document.getElementById(\"overlay\");\n $1df32a4945e9e156$var$expandBtns = document.querySelectorAll(\"[data-expand-target]\");\n $1df32a4945e9e156$var$subExpandBtns = document.querySelectorAll(\"[data-sub-expand-target]\");\n $1df32a4945e9e156$var$menuExpandBtns = document.querySelectorAll(\"[data-menu-target]\");\n $1df32a4945e9e156$var$mainMenu = document.getElementById(\"mainMenu\");\n $1df32a4945e9e156$var$subMenus = document.querySelectorAll(\".sub-menu\");\n $1df32a4945e9e156$var$searchHeader = document.getElementById(\"searchHeader\");\n $1df32a4945e9e156$var$searchWrapper = document.getElementById(\"searchWrapper\");\n $1df32a4945e9e156$var$searchToggle = document.getElementById(\"searchToggle\");\n $1df32a4945e9e156$var$searchSubmit = $1df32a4945e9e156$var$searchWrapper.querySelector(\"input[type=submit]\");\n $1df32a4945e9e156$var$mobileMenuWrapper = document.getElementById(\"mobileMenuWrapper\");\n // Get sub-menu height\n for(let i = 0; i < $1df32a4945e9e156$var$subMenus.length; i++){\n let height = $1df32a4945e9e156$var$subMenus[i].offsetHeight;\n $1df32a4945e9e156$var$subMenus[i].setAttribute(\"data-height\", height);\n $1df32a4945e9e156$var$subMenus[i].style.height = 0;\n }\n // mobile-sub-menu height\n let mobileSubMenu = document.querySelectorAll(\".mobile-sub-menu\");\n for(let i = 0; i < mobileSubMenu.length; i++){\n let height = mobileSubMenu[i].offsetHeight;\n mobileSubMenu[i].setAttribute(\"data-height\", height);\n mobileSubMenu[i].style.height = 0;\n }\n //Get searchWrapper height\n $1df32a4945e9e156$var$searchWrapper.setAttribute(\"data-height\", $1df32a4945e9e156$var$searchWrapper.offsetHeight);\n $1df32a4945e9e156$var$searchWrapper.style.height = 0;\n /*Main menu keyboard nav */ let mainMenuButtons = $1df32a4945e9e156$var$mainMenu.querySelectorAll(\".main-menu-item\");\n for(let i = 0; i < mainMenuButtons.length; i++){\n mainMenuButtons[i].addEventListener(\"click\", function(e) {\n expandMenu(e.currentTarget, document.getElementById(e.currentTarget.dataset.menuTarget));\n });\n mainMenuButtons[i].addEventListener(\"focus\", function(e) {\n // Check if tab has focus from keyboard\n if (hasPseudoClass(e.currentTarget, \":focus-visible\")) {\n // Check if target is search or menu toggle\n if (e.currentTarget.dataset.expandTarget) // Make sure previuos target wasn't search input\n {\n if (e.relatedTarget && e.relatedTarget.dataset.menuTarget) closeMenus(true);\n } else {\n closeSearch();\n expandMenu(e.currentTarget, document.getElementById(e.currentTarget.dataset.menuTarget));\n }\n }\n });\n mainMenuButtons[i].addEventListener(\"keydown\", function(e) {\n if (e.key === \"Enter\" && e.currentTarget.getAttribute(\"aria-expanded\")) {\n // Prevent enter to open menu\n e.preventDefault();\n // Check if target is menu or search toggle\n if (e.currentTarget.dataset.expandTarget == \"searchWrapper\") {\n let expand = document.getElementById(e.currentTarget.dataset.expandTarget);\n // Get the element to focus for header toggle\n let focusOn = document.getElementById(e.currentTarget.dataset.setFocusOn);\n if (expand) toggleHeaderSearch(e.currentTarget, expand, focusOn);\n }\n if (e.currentTarget.dataset.expandTarget == \"mobileMenuWrapper\") {\n let expand = document.getElementById(e.currentTarget.dataset.expandTarget);\n toggleMobileMenu(e.currentTarget, expand);\n }\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n focusSubItems(e.currentTarget, document.getElementById(e.currentTarget.dataset.menuTarget));\n }\n });\n }\n //Check if focus is set by keyboard\n function hasPseudoClass(node, selector) {\n var nativeMatches = node.matches || node.msMatchesSelector;\n try {\n return nativeMatches.call(node, selector);\n } catch (error) {\n return false;\n }\n }\n //Expand submnenu\n function expandMenu(target, expand) {\n if (!target.classList.contains(\"open\") && target.dataset.menuTarget) closeMenus(false);\n if (expand) {\n if (target.getAttribute(\"aria-expanded\") == \"true\") {\n expand.classList.add(\"toggled\");\n setTimeout(()=>{\n expand.classList.remove(\"toggled\");\n }, 301);\n }\n target.classList.toggle(\"open\");\n target.setAttribute(\"aria-expanded\", toggleAriaExpanded(target));\n expand.classList.toggle(\"open\");\n if (target.getAttribute(\"aria-expanded\") == \"true\") {\n closeSearch(null, true);\n expand.style.height = expand.dataset.height + \"px\";\n lockScroll();\n } else {\n expand.style.height = 0;\n releaseScroll();\n }\n $1df32a4945e9e156$var$overlay.classList.toggle(\"hide\");\n window.addEventListener(\"keydown\", function(e) {\n if (e.key === \"Escape\") closeMenus(true);\n });\n } else if (target.dataset.menuTarget) closeMenus(true);\n }\n //Set focus on subitems\n function focusSubItems(target, expand) {\n let expandFocusable = expand.querySelectorAll(\"[href]\");\n let currentIndex = 0;\n expandFocusable[0].focus();\n expand.addEventListener(\"keydown\", function(e) {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n currentIndex++;\n if (expandFocusable[currentIndex]) expandFocusable[currentIndex].focus();\n else {\n currentIndex = 0;\n expandFocusable[currentIndex].focus();\n }\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n currentIndex--;\n if (expandFocusable[currentIndex]) expandFocusable[currentIndex].focus();\n else {\n currentIndex = expandFocusable.length - 1;\n expandFocusable[currentIndex].focus();\n }\n }\n if (e.key === \"Tab\") {\n const arr = Array.from(mainMenuButtons);\n let index = arr.indexOf(target);\n mainMenuButtons[index].focus();\n }\n });\n }\n /*Expand header elements - search & mobile menu*/ for(let i = 0; i < $1df32a4945e9e156$var$expandBtns.length; i++)$1df32a4945e9e156$var$expandBtns[i].addEventListener(\"click\", function(e) {\n let expand = document.getElementById(e.currentTarget.dataset.expandTarget);\n let focusOn = document.getElementById(e.currentTarget.dataset.setFocusOn);\n if (e.currentTarget.dataset.expandTarget == \"mobileMenuWrapper\") toggleMobileMenu(e.currentTarget, expand);\n else toggleHeaderSearch(e.currentTarget, expand, focusOn);\n });\n function toggleHeaderSearch(target, expand, focusOn) {\n expand.classList.toggle(\"open\");\n target.setAttribute(\"aria-expanded\", toggleAriaExpanded(target));\n if (expand.classList.contains(\"open\")) {\n closeMobileMenu();\n //TODO CLOSE SEARCH\n closeMenus();\n releaseScroll();\n lockScroll(false);\n expand.style.height = expand.dataset.height + \"px\";\n $1df32a4945e9e156$var$overlay.classList.remove(\"hide\");\n } else {\n releaseScroll();\n $1df32a4945e9e156$var$searchHeader.value = \"\";\n expand.style.height = 0;\n $1df32a4945e9e156$var$overlay.classList.add(\"hide\");\n }\n setTimeout(()=>{\n focusOn.focus();\n }, 301);\n initSearchHeader();\n window.addEventListener(\"keydown\", function(e) {\n if (e.key === \"Escape\") closeSearch(target);\n });\n }\n function closeSearch(target, preventAnimation) {\n if (!$1df32a4945e9e156$var$overlay.classList.contains(\"hide\")) $1df32a4945e9e156$var$overlay.classList.add(\"hide\");\n let labelledBy = $1df32a4945e9e156$var$searchWrapper.getAttribute(\"aria-labelledby\");\n let expandBtn = document.getElementById(labelledBy);\n expandBtn.setAttribute(\"aria-expanded\", false);\n $1df32a4945e9e156$var$searchWrapper.classList.remove(\"open\");\n if (target != undefined || target != null) target.focus();\n if (preventAnimation) {\n $1df32a4945e9e156$var$searchWrapper.classList.add(\"hidden\");\n setTimeout(()=>{\n $1df32a4945e9e156$var$searchWrapper.classList.remove(\"hidden\");\n }, 301);\n }\n $1df32a4945e9e156$var$searchWrapper.style.height = 0;\n $1df32a4945e9e156$var$searchHeader.value = \"\";\n }\n //Handle search clear\n $1df32a4945e9e156$var$searchClear = document.querySelectorAll(\".clear-search\");\n for(let i = 0; i < $1df32a4945e9e156$var$searchClear.length; i++){\n $1df32a4945e9e156$var$searchClear[i].addEventListener(\"click\", function(e) {\n let clearInput = document.getElementById(e.currentTarget.dataset.clearSearch);\n e.preventDefault();\n clearSerch($1df32a4945e9e156$var$searchClear[i], clearInput);\n });\n $1df32a4945e9e156$var$searchClear[i].addEventListener(\"keyup\", function(e) {\n if (e.key === \"Enter\") {\n let clearInput = document.getElementById(e.currentTarget.dataset.clearSearch);\n e.preventDefault();\n clearSerch($1df32a4945e9e156$var$searchClear[i], clearInput);\n }\n });\n }\n function clearSerch(searchClear, clearInput) {\n e.preventDefault();\n searchClear.classList.add(\"hidden\");\n clearInput.value = \"\";\n clearInput.focus();\n }\n //Handle search input\n $1df32a4945e9e156$var$searchInput = document.querySelectorAll(\"input[type=search]\");\n for(let i = 0; i < $1df32a4945e9e156$var$searchInput.length; i++)$1df32a4945e9e156$var$searchInput[i].addEventListener(\"keyup\", function(e) {\n let clearInput = document.getElementById($1df32a4945e9e156$var$searchInput[i].id + \"Clear\");\n if ($1df32a4945e9e156$var$searchInput[i].value.length > 0) clearInput.classList.remove(\"hidden\");\n else clearInput.classList.add(\"hidden\");\n if (e.key === \"Enter\") {\n e.preventDefault();\n if ($1df32a4945e9e156$var$searchInput[i].value.length > 0) e.currentTarget.form.submit();\n }\n });\n //Handle tab loop for header search\n function initSearchHeader() {\n $1df32a4945e9e156$var$searchSubmit.addEventListener(\"blur\", function(e) {\n $1df32a4945e9e156$var$searchToggle.focus();\n });\n }\n //Handle search submiting form\n $1df32a4945e9e156$var$searchForm = document.querySelectorAll(\".search-form\");\n for(let i = 0; i < $1df32a4945e9e156$var$searchForm.length; i++){\n let formInput = $1df32a4945e9e156$var$searchForm[i].querySelectorAll(\"input\");\n $1df32a4945e9e156$var$searchForm[i].addEventListener(\"submit\", function(e) {\n e.preventDefault();\n if (formInput[0].value.length > 0) $1df32a4945e9e156$var$searchForm[i].submit();\n });\n }\n function toggleMobileMenu(target, expand) {\n expand.classList.toggle(\"open\");\n target.setAttribute(\"aria-expanded\", toggleAriaExpanded(target));\n if (expand.classList.contains(\"open\")) {\n lockScroll(true);\n $1df32a4945e9e156$var$overlay.classList.remove(\"hide\");\n closeSearch(null, true);\n } else {\n releaseScroll();\n closeMobileSubMenus();\n $1df32a4945e9e156$var$overlay.classList.add(\"hide\");\n }\n }\n function lockScroll(isMobile) {\n //Prevent scrolling the content below the menu by setting it to an fixed postion\n $1df32a4945e9e156$var$body.classList.add(\"menuOpen\");\n if (isMobile) $1df32a4945e9e156$var$body.classList.add(\"mobileMenuOpen\");\n }\n function releaseScroll() {\n setTimeout(()=>{\n $1df32a4945e9e156$var$body.classList.remove(\"menuOpen\");\n $1df32a4945e9e156$var$body.classList.remove(\"mobileMenuOpen\");\n $1df32a4945e9e156$var$body.classList.add(\"scrollUp\");\n }, 3);\n }\n /*Mobile sub menu expand button*/ for(let i = 0; i < $1df32a4945e9e156$var$subExpandBtns.length; i++)$1df32a4945e9e156$var$subExpandBtns[i].addEventListener(\"click\", function(e) {\n let expand = document.getElementById(e.currentTarget.dataset.subExpandTarget);\n if (expand) {\n expand.classList.toggle(\"open\");\n e.currentTarget.setAttribute(\"aria-expanded\", toggleAriaExpanded(e.currentTarget));\n if (expand.classList.contains(\"open\")) expand.style.height = expand.dataset.height + \"px\";\n else expand.style.height = 0;\n }\n });\n function toggleAriaExpanded(target) {\n let targetExpanded = target.getAttribute(\"aria-expanded\");\n if (targetExpanded == \"true\") targetExpanded = \"false\";\n else targetExpanded = \"true\";\n return targetExpanded;\n }\n /* Overlay - hide and close all expanded */ $1df32a4945e9e156$var$overlay.addEventListener(\"click\", function(e) {\n closeMenus(true);\n closeSearch();\n releaseScroll();\n });\n function closeMenus(toggleMenuItem) {\n //Close main menus\n for(let i = 0; i < $1df32a4945e9e156$var$menuExpandBtns.length; i++){\n $1df32a4945e9e156$var$menuExpandBtns[i].classList.remove(\"open\");\n $1df32a4945e9e156$var$menuExpandBtns[i].setAttribute(\"aria-expanded\", false);\n let close = document.getElementById($1df32a4945e9e156$var$menuExpandBtns[i].dataset.menuTarget);\n close.classList.remove(\"open\");\n close.style.height = 0;\n if (toggleMenuItem) {\n close.classList.add(\"toggled\");\n setTimeout(()=>{\n close.classList.remove(\"toggled\");\n }, 301);\n }\n }\n $1df32a4945e9e156$var$overlay.classList.add(\"hide\");\n }\n //Close mobile main menu\n function closeMobileMenu() {\n let labelledBy = $1df32a4945e9e156$var$mobileMenuWrapper.getAttribute(\"aria-labelledby\");\n let expandBtn = document.getElementById(labelledBy);\n expandBtn.setAttribute(\"aria-expanded\", false);\n $1df32a4945e9e156$var$mobileMenuWrapper.classList.add(\"hidden\");\n setTimeout(()=>{\n $1df32a4945e9e156$var$mobileMenuWrapper.classList.remove(\"open\");\n $1df32a4945e9e156$var$mobileMenuWrapper.classList.remove(\"hidden\");\n }, 301);\n closeMobileSubMenus();\n $1df32a4945e9e156$var$overlay.classList.add(\"hide\");\n }\n function closeMobileSubMenus() {\n for(let i = 0; i < $1df32a4945e9e156$var$subExpandBtns.length; i++){\n let sibling = $1df32a4945e9e156$var$subExpandBtns[i].previousElementSibling;\n if (!sibling.classList.contains(\"active\")) {\n $1df32a4945e9e156$var$subExpandBtns[i].setAttribute(\"aria-expanded\", false);\n let close = document.getElementById($1df32a4945e9e156$var$subExpandBtns[i].dataset.subExpandTarget);\n close.classList.remove(\"open\");\n close.classList.add(\"closing-mobile-menu\");\n setTimeout(()=>{\n close.style.height = 0;\n close.classList.remove(\"closing-mobile-menu\");\n }, 301);\n }\n }\n }\n});\nwindow.addEventListener(\"scroll\", ()=>{\n const currentScroll = window.scrollY;\n if (!$1df32a4945e9e156$var$body.classList.contains(\"menuOpen\")) {\n if (currentScroll > $1df32a4945e9e156$var$headerHeight) $1df32a4945e9e156$var$body.classList.add(\"scrolledPast\");\n else $1df32a4945e9e156$var$body.classList.remove(\"scrolledPast\");\n if (currentScroll < $1df32a4945e9e156$var$lastScroll && $1df32a4945e9e156$var$body.classList.contains(\"scrolledPast\")) $1df32a4945e9e156$var$body.classList.add(\"scrollUp\");\n else $1df32a4945e9e156$var$body.classList.remove(\"scrollUp\");\n }\n $1df32a4945e9e156$var$lastScroll = currentScroll;\n});\n\n})();\n//# sourceMappingURL=script.js.map\n","import { blockLink } from './js/blockLinks';\nimport { faq } from './js/faq';\nimport { GroupOrder } from './js/grouporder';\nimport { loadSVGSpritesheet } from './js/loadSVGSpritesheet';\nimport { shareLinks } from './js/shareLinks';\nimport { skipToContent } from './js/skipToContent';\nimport { regionDropdown } from './js/regionDropdown';\n\nlet expandBtns = [];\nlet menuExpandBtns = [];\nlet subExpandBtns = [];\nlet mainMenu = null;\nlet overlay = null;\nlet subMenus = [];\nlet mobileMenuWrapper = null;\nlet searchClear = [];\nlet searchInput = [];\nlet searchForm = [];\nlet searchHeader = null;\nlet searchWrapper = null;\nlet searchToggle = null;\nlet searchSubmit = null;\nlet header = null;\nlet headerHeight = \"\";\nlet body = null;\nlet lastScroll = 0;\n\nwindow.addEventListener(\"load\", (e) => {\n loadSVGSpritesheet.onDocumentLoad();\n header = document.getElementById(\"header\");\n headerHeight = header.offsetHeight;\n body = document.body;\n \n /* Load any relevant modules for this page */\n /* TODO: Implement support to only run needed modules per page. */\n GroupOrder.onDocumentLoad();\n faq.onDocumentLoad();\n shareLinks.onDocumentLoad();\n blockLink.onDocumentLoad();\n skipToContent.onDocumentLoad();\n regionDropdown.onDocumentLoad();\n\n overlay = document.getElementById(\"overlay\");\n expandBtns = document.querySelectorAll(\"[data-expand-target]\");\n subExpandBtns = document.querySelectorAll(\"[data-sub-expand-target]\");\n menuExpandBtns = document.querySelectorAll(\"[data-menu-target]\");\n mainMenu = document.getElementById(\"mainMenu\");\n subMenus = document.querySelectorAll(\".sub-menu\");\n searchHeader = document.getElementById(\"searchHeader\");\n searchWrapper = document.getElementById(\"searchWrapper\");\n searchToggle = document.getElementById(\"searchToggle\");\n searchSubmit = searchWrapper.querySelector(\"input[type=submit]\");\n mobileMenuWrapper = document.getElementById(\"mobileMenuWrapper\");\n \n // Get sub-menu height\n for (let i = 0; i < subMenus.length; i++) {\n let height = subMenus[i].offsetHeight;\n subMenus[i].setAttribute(\"data-height\", height);\n subMenus[i].style.height = 0;\n }\n\n // mobile-sub-menu height\n let mobileSubMenu = document.querySelectorAll(\".mobile-sub-menu\");\n for (let i = 0; i < mobileSubMenu.length; i++) {\n let height = mobileSubMenu[i].offsetHeight;\n mobileSubMenu[i].setAttribute(\"data-height\", height);\n mobileSubMenu[i].style.height = 0;\n }\n\n //Get searchWrapper height\n searchWrapper.setAttribute(\"data-height\", searchWrapper.offsetHeight);\n searchWrapper.style.height = 0;\n\n /*Main menu keyboard nav */\n let mainMenuButtons = mainMenu.querySelectorAll(\".main-menu-item\");\n for (let i = 0; i < mainMenuButtons.length; i++) {\n mainMenuButtons[i].addEventListener(\"click\", function (e) {\n expandMenu(\n e.currentTarget,\n document.getElementById(e.currentTarget.dataset.menuTarget)\n );\n });\n\n mainMenuButtons[i].addEventListener(\"focus\", function (e) {\n // Check if tab has focus from keyboard\n if (hasPseudoClass(e.currentTarget, \":focus-visible\")) {\n // Check if target is search or menu toggle\n if (e.currentTarget.dataset.expandTarget) {\n // Make sure previuos target wasn't search input\n if(e.relatedTarget && e.relatedTarget.dataset.menuTarget) {\n closeMenus(true);\n }\n } else {\n closeSearch();\n expandMenu(\n e.currentTarget,\n document.getElementById(e.currentTarget.dataset.menuTarget)\n );\n }\n }\n });\n\n mainMenuButtons[i].addEventListener(\"keydown\", function (e) {\n if (e.key === \"Enter\" && e.currentTarget.getAttribute(\"aria-expanded\")) {\n // Prevent enter to open menu\n e.preventDefault();\n // Check if target is menu or search toggle\n if (e.currentTarget.dataset.expandTarget == \"searchWrapper\") {\n let expand = document.getElementById(\n e.currentTarget.dataset.expandTarget\n );\n // Get the element to focus for header toggle\n let focusOn = document.getElementById(e.currentTarget.dataset.setFocusOn);\n if (expand) {\n toggleHeaderSearch(e.currentTarget, expand, focusOn);\n }\n }\n \n if (e.currentTarget.dataset.expandTarget == \"mobileMenuWrapper\") {\n let expand = document.getElementById(e.currentTarget.dataset.expandTarget);\n toggleMobileMenu(e.currentTarget, expand);\n }\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n focusSubItems(\n e.currentTarget,\n document.getElementById(e.currentTarget.dataset.menuTarget)\n );\n }\n });\n }\n\n //Check if focus is set by keyboard\n function hasPseudoClass(node, selector) {\n var nativeMatches = node.matches || node.msMatchesSelector;\n try {\n return nativeMatches.call(node, selector);\n } catch (error) {\n return false;\n }\n }\n\n //Expand submnenu\n function expandMenu(target, expand) {\n if (!target.classList.contains(\"open\") && target.dataset.menuTarget) {\n closeMenus(false);\n }\n if (expand) {\n if (target.getAttribute(\"aria-expanded\") == \"true\") {\n expand.classList.add(\"toggled\");\n setTimeout(() => {\n expand.classList.remove(\"toggled\");\n }, 301);\n }\n target.classList.toggle(\"open\");\n target.setAttribute(\"aria-expanded\", toggleAriaExpanded(target));\n expand.classList.toggle(\"open\");\n\n if (target.getAttribute(\"aria-expanded\") == \"true\") {\n closeSearch(null, true);\n expand.style.height = expand.dataset.height + \"px\";\n lockScroll();\n } else {\n expand.style.height = 0;\n releaseScroll();\n }\n\n overlay.classList.toggle(\"hide\");\n window.addEventListener(\"keydown\", function (e) {\n if (e.key === \"Escape\") {\n closeMenus(true);\n // closeSearch();\n }\n });\n } else {\n if(target.dataset.menuTarget) {\n closeMenus(true);\n }\n }\n }\n\n //Set focus on subitems\n function focusSubItems(target, expand) {\n let expandFocusable = expand.querySelectorAll(\"[href]\");\n let currentIndex = 0;\n\n expandFocusable[0].focus();\n\n expand.addEventListener(\"keydown\", function (e) {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n currentIndex++;\n if (expandFocusable[currentIndex]) {\n expandFocusable[currentIndex].focus();\n } else {\n currentIndex = 0;\n expandFocusable[currentIndex].focus();\n }\n }\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n currentIndex--;\n if (expandFocusable[currentIndex]) {\n expandFocusable[currentIndex].focus();\n } else {\n currentIndex = expandFocusable.length - 1;\n expandFocusable[currentIndex].focus();\n }\n }\n\n if (e.key === \"Tab\") {\n const arr = Array.from(mainMenuButtons);\n let index = arr.indexOf(target);\n mainMenuButtons[index].focus();\n }\n });\n }\n\n /*Expand header elements - search & mobile menu*/\n for (let i = 0; i < expandBtns.length; i++) {\n expandBtns[i].addEventListener(\"click\", function (e) {\n let expand = document.getElementById(e.currentTarget.dataset.expandTarget);\n let focusOn = document.getElementById(e.currentTarget.dataset.setFocusOn);\n\n if (e.currentTarget.dataset.expandTarget == \"mobileMenuWrapper\") {\n toggleMobileMenu(e.currentTarget, expand);\n } else {\n toggleHeaderSearch(e.currentTarget, expand, focusOn);\n }\n });\n }\n\n function toggleHeaderSearch(target, expand, focusOn) {\n expand.classList.toggle(\"open\");\n target.setAttribute(\"aria-expanded\", toggleAriaExpanded(target));\n \n if (expand.classList.contains(\"open\")) {\n closeMobileMenu();\n //TODO CLOSE SEARCH\n closeMenus();\n releaseScroll();\n lockScroll(false);\n expand.style.height = expand.dataset.height + \"px\";\n overlay.classList.remove(\"hide\");\n } else {\n releaseScroll();\n searchHeader.value = \"\";\n expand.style.height = 0;\n overlay.classList.add(\"hide\");\n }\n \n setTimeout(() => {\n focusOn.focus();\n }, 301);\n\n initSearchHeader();\n\n window.addEventListener(\"keydown\", function (e) {\n if (e.key === \"Escape\") {\n closeSearch(target);\n }\n });\n }\n\n function closeSearch(target, preventAnimation) {\n if(!overlay.classList.contains(\"hide\")) {\n overlay.classList.add(\"hide\");\n }\n\n let labelledBy = searchWrapper.getAttribute(\"aria-labelledby\");\n let expandBtn = document.getElementById(labelledBy);\n expandBtn.setAttribute(\"aria-expanded\", false);\n searchWrapper.classList.remove(\"open\");\n \n if (target != undefined || target != null) {\n target.focus();\n }\n\n if (preventAnimation) {\n searchWrapper.classList.add(\"hidden\");\n setTimeout(() => {\n searchWrapper.classList.remove(\"hidden\");\n }, 301);\n }\n \n searchWrapper.style.height = 0;\n searchHeader.value = \"\";\n }\n\n //Handle search clear\n searchClear = document.querySelectorAll(\".clear-search\");\n for (let i = 0; i < searchClear.length; i++) {\n searchClear[i].addEventListener(\"click\", function (e) {\n let clearInput = document.getElementById(e.currentTarget.dataset.clearSearch);\n e.preventDefault();\n clearSerch(searchClear[i], clearInput);\n });\n\n searchClear[i].addEventListener(\"keyup\", function (e) {\n if(e.key === \"Enter\") {\n let clearInput = document.getElementById(e.currentTarget.dataset.clearSearch);\n e.preventDefault();\n clearSerch(searchClear[i], clearInput);\n }\n });\n }\n \n function clearSerch(searchClear, clearInput) {\n e.preventDefault();\n searchClear.classList.add(\"hidden\");\n clearInput.value = \"\";\n clearInput.focus();\n }\n\n //Handle search input\n searchInput = document.querySelectorAll(\"input[type=search]\");\n for (let i = 0; i < searchInput.length; i++) {\n searchInput[i].addEventListener(\"keyup\", function (e) {\n let clearInput = document.getElementById(searchInput[i].id + \"Clear\");\n if(searchInput[i].value.length > 0) {\n clearInput.classList.remove(\"hidden\");\n } else {\n clearInput.classList.add(\"hidden\");\n }\n\n if(e.key === \"Enter\") {\n e.preventDefault();\n if(searchInput[i].value.length > 0) {\n e.currentTarget.form.submit();\n }\n }\n });\n }\n\n //Handle tab loop for header search\n function initSearchHeader() {\n searchSubmit.addEventListener(\"blur\", function (e) {\n searchToggle.focus();\n });\n }\n\n //Handle search submiting form\n searchForm = document.querySelectorAll(\".search-form\");\n for (let i = 0; i < searchForm.length; i++) {\n let formInput = searchForm[i].querySelectorAll(\"input\");\n searchForm[i].addEventListener(\"submit\", function (e) {\n e.preventDefault();\n if(formInput[0].value.length > 0) {\n searchForm[i].submit();\n }\n });\n }\n\n function toggleMobileMenu(target, expand) {\n expand.classList.toggle(\"open\");\n target.setAttribute(\"aria-expanded\", toggleAriaExpanded(target));\n\n if (expand.classList.contains(\"open\")) {\n lockScroll(true);\n overlay.classList.remove(\"hide\");\n closeSearch(null, true);\n } else {\n releaseScroll();\n closeMobileSubMenus();\n overlay.classList.add(\"hide\");\n }\n }\n\n function lockScroll(isMobile) {\n //Prevent scrolling the content below the menu by setting it to an fixed postion\n body.classList.add(\"menuOpen\");\n if (isMobile) {\n body.classList.add(\"mobileMenuOpen\");\n }\n }\n\n function releaseScroll() {\n setTimeout(() => {\n body.classList.remove(\"menuOpen\");\n body.classList.remove(\"mobileMenuOpen\");\n body.classList.add(\"scrollUp\");\n }, 3);\n }\n\n /*Mobile sub menu expand button*/\n for (let i = 0; i < subExpandBtns.length; i++) {\n subExpandBtns[i].addEventListener(\"click\", function (e) {\n let expand = document.getElementById(\n e.currentTarget.dataset.subExpandTarget\n );\n if (expand) {\n expand.classList.toggle(\"open\");\n e.currentTarget.setAttribute(\n \"aria-expanded\",\n toggleAriaExpanded(e.currentTarget)\n );\n if(expand.classList.contains(\"open\")) {\n expand.style.height = expand.dataset.height + \"px\";\n } else {\n expand.style.height = 0;\n }\n }\n });\n }\n\n function toggleAriaExpanded(target) {\n let targetExpanded = target.getAttribute(\"aria-expanded\");\n\n if (targetExpanded == \"true\") {\n targetExpanded = \"false\";\n } else {\n targetExpanded = \"true\";\n }\n\n return targetExpanded;\n }\n\n /* Overlay - hide and close all expanded */\n overlay.addEventListener(\"click\", function (e) {\n closeMenus(true);\n closeSearch();\n releaseScroll();\n });\n\n function closeMenus(toggleMenuItem) {\n //Close main menus\n for (let i = 0; i < menuExpandBtns.length; i++) {\n menuExpandBtns[i].classList.remove(\"open\");\n menuExpandBtns[i].setAttribute(\"aria-expanded\", false);\n let close = document.getElementById(menuExpandBtns[i].dataset.menuTarget);\n close.classList.remove(\"open\");\n close.style.height = 0;\n\n if (toggleMenuItem) {\n close.classList.add(\"toggled\");\n setTimeout(() => {\n close.classList.remove(\"toggled\");\n }, 301);\n }\n }\n overlay.classList.add(\"hide\");\n }\n\n //Close mobile main menu\n function closeMobileMenu() {\n let labelledBy = mobileMenuWrapper.getAttribute(\"aria-labelledby\");\n let expandBtn = document.getElementById(labelledBy);\n expandBtn.setAttribute(\"aria-expanded\", false);\n mobileMenuWrapper.classList.add(\"hidden\");\n setTimeout(() => {\n mobileMenuWrapper.classList.remove(\"open\");\n mobileMenuWrapper.classList.remove(\"hidden\");\n }, 301);\n\n closeMobileSubMenus();\n overlay.classList.add(\"hide\");\n }\n\n function closeMobileSubMenus() {\n for (let i = 0; i < subExpandBtns.length; i++) {\n let sibling = subExpandBtns[i].previousElementSibling;\n if (!sibling.classList.contains(\"active\")) {\n subExpandBtns[i].setAttribute(\"aria-expanded\", false);\n let close = document.getElementById(\n subExpandBtns[i].dataset.subExpandTarget\n );\n close.classList.remove(\"open\");\n close.classList.add(\"closing-mobile-menu\");\n setTimeout(() => {\n close.style.height = 0;\n close.classList.remove(\"closing-mobile-menu\");\n }, 301);\n }\n }\n }\n});\n\nwindow.addEventListener(\"scroll\", () => {\n const currentScroll = window.scrollY;\n\n if (!body.classList.contains(\"menuOpen\")) {\n if (currentScroll > headerHeight) {\n body.classList.add(\"scrolledPast\");\n } else {\n body.classList.remove(\"scrolledPast\");\n }\n\n if (currentScroll < lastScroll && body.classList.contains(\"scrolledPast\")) {\n body.classList.add(\"scrollUp\");\n } else {\n body.classList.remove(\"scrollUp\");\n }\n }\n\n lastScroll = currentScroll;\n});\n","let blockLinks = [];\n\nexport const blockLink = {\n onDocumentLoad\n}\n\nconst onDocumentLoad = function() {\n /*Handle clicks for blocks with links*/\n blockLinks = document.querySelectorAll(\".block-link\");\n for (let i = 0; i < blockLinks.length; i++) {\n blockLinks[i].addEventListener(\"click\", blockLinkPress);\n\n blockLinks[i].addEventListener(\"keyup\", function (e) {\n if (e.key === \"Enter\") {\n blockLinkPress(e);\n }\n });\n }\n\n function blockLinkPress(e) {\n let item = e.currentTarget.querySelector(\"[href]\");\n let link = item.getAttribute(\"href\");\n let target = item.getAttribute(\"target\");\n let download = item.getAttribute(\"download\")\n\n if(target != null && target == \"_blank\") {\n window.open(link, '_blank');\n } else {\n if(download != null) {\n window.open(link, '_blank');\n } else {\n window.location.href = link;\n }\n }\n }\n}","const mustache = require(\"mustache\");\nlet faqBlocks = [];\nlet faqButtons = [];\n\nexport const faq = {\n onDocumentLoad\n}\n\nconst onDocumentLoad = function() {\n /*FAQ*/\n faqBlocks = document.getElementsByClassName(\"faq-block\");\n for (let i = 0; i < faqBlocks.length; i++) {\n faqButtons = faqBlocks[i].getElementsByTagName(\"button\");\n for (let i = 0; i < faqButtons.length; i++) {\n let expand = document.getElementById(\n faqButtons[i].getAttribute(\"aria-controls\")\n );\n let height = expand.offsetHeight;\n expand.setAttribute(\"data-height\", height);\n expand.style.height = 0;\n\n faqButtons[i].addEventListener(\"click\", function (e) {\n faqButtonClick(e.currentTarget);\n });\n }\n }\n\n function faqButtonClick(target) {\n target.setAttribute(\"aria-expanded\", toggleAriaExpanded(target));\n\n let expand = document.getElementById(target.getAttribute(\"aria-controls\"));\n expand.classList.toggle(\"open\");\n\n if (expand.classList.contains(\"open\")) {\n expand.style.height = expand.dataset.height + \"px\";\n } else {\n expand.style.height = 0;\n }\n }\n\n function toggleAriaExpanded(target) {\n let targetExpanded = target.getAttribute(\"aria-expanded\");\n\n if (targetExpanded == \"true\") {\n targetExpanded = \"false\";\n } else {\n targetExpanded = \"true\";\n }\n\n return targetExpanded;\n }\n}","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Mustache = factory());\n}(this, (function () { 'use strict';\n\n /*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\n var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill (object) {\n return objectToString.call(object) === '[object Array]';\n };\n\n function isFunction (object) {\n return typeof object === 'function';\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr (obj) {\n return isArray(obj) ? 'array' : typeof obj;\n }\n\n function escapeRegExp (string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty (obj, propName) {\n return obj != null && typeof obj === 'object' && (propName in obj);\n }\n\n /**\n * Safe way of detecting whether or not the given thing is a primitive and\n * whether it has the given property\n */\n function primitiveHasOwnProperty (primitive, propName) {\n return (\n primitive != null\n && typeof primitive !== 'object'\n && primitive.hasOwnProperty\n && primitive.hasOwnProperty(propName)\n );\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n function testRegExp (re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n function isWhitespace (string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/',\n '`': '`',\n '=': '='\n };\n\n function escapeHtml (string) {\n return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap (s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n *\n * Tokens for partials also contain two more elements: 1) a string value of\n * indendation prior to that tag and 2) the index of that tag on that line -\n * eg a value of 2 indicates the partial is the third tag on this line.\n */\n function parseTemplate (template, tags) {\n if (!template)\n return [];\n var lineHasNonSpace = false;\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n var indentation = ''; // Tracks indentation for tags that use it\n var tagIndex = 0; // Stores a count of number of tags encountered on a line\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace () {\n if (hasTag && !nonSpace) {\n while (spaces.length)\n delete tokens[spaces.pop()];\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n function compileTags (tagsToCompile) {\n if (typeof tagsToCompile === 'string')\n tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)\n throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n indentation += chr;\n } else {\n nonSpace = true;\n lineHasNonSpace = true;\n indentation += ' ';\n }\n\n tokens.push([ 'text', chr, start, start + 1 ]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n') {\n stripSpace();\n indentation = '';\n tagIndex = 0;\n lineHasNonSpace = false;\n }\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe))\n break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe))\n throw new Error('Unclosed tag at ' + scanner.pos);\n\n if (type == '>') {\n token = [ type, value, start, scanner.pos, indentation, tagIndex, lineHasNonSpace ];\n } else {\n token = [ type, value, start, scanner.pos ];\n }\n tagIndex++;\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection)\n throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n stripSpace();\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens (tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens (tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner (string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos () {\n return this.tail === '';\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan (re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0)\n return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil (re) {\n var index = this.tail.search(re), match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context (view, parentContext) {\n this.view = view;\n this.cache = { '.': this.view };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push (view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup (name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this, intermediateValue, names, index, lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n intermediateValue = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n *\n * In the case where dot notation is used, we consider the lookup\n * to be successful even if the last \"object\" in the path is\n * not actually an object but a primitive (e.g., a string, or an\n * integer), because it is sometimes useful to access a property\n * of an autoboxed primitive, such as the length of a string.\n **/\n while (intermediateValue != null && index < names.length) {\n if (index === names.length - 1)\n lookupHit = (\n hasProperty(intermediateValue, names[index])\n || primitiveHasOwnProperty(intermediateValue, names[index])\n );\n\n intermediateValue = intermediateValue[names[index++]];\n }\n } else {\n intermediateValue = context.view[name];\n\n /**\n * Only checking against `hasProperty`, which always returns `false` if\n * `context.view` is not an object. Deliberately omitting the check\n * against `primitiveHasOwnProperty` if dot notation is not used.\n *\n * Consider this example:\n * ```\n * Mustache.render(\"The length of a football field is {{#length}}{{length}}{{/length}}.\", {length: \"100 yards\"})\n * ```\n *\n * If we were to check also against `primitiveHasOwnProperty`, as we do\n * in the dot notation case, then render call would return:\n *\n * \"The length of a football field is 9.\"\n *\n * rather than the expected:\n *\n * \"The length of a football field is 100 yards.\"\n **/\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit) {\n value = intermediateValue;\n break;\n }\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value))\n value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer () {\n this.templateCache = {\n _cache: {},\n set: function set (key, value) {\n this._cache[key] = value;\n },\n get: function get (key) {\n return this._cache[key];\n },\n clear: function clear () {\n this._cache = {};\n }\n };\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache () {\n if (typeof this.templateCache !== 'undefined') {\n this.templateCache.clear();\n }\n };\n\n /**\n * Parses and caches the given `template` according to the given `tags` or\n * `mustache.tags` if `tags` is omitted, and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse (template, tags) {\n var cache = this.templateCache;\n var cacheKey = template + ':' + (tags || mustache.tags).join(':');\n var isCacheEnabled = typeof cache !== 'undefined';\n var tokens = isCacheEnabled ? cache.get(cacheKey) : undefined;\n\n if (tokens == undefined) {\n tokens = parseTemplate(template, tags);\n isCacheEnabled && cache.set(cacheKey, tokens);\n }\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n *\n * If the optional `config` argument is given here, then it should be an\n * object with a `tags` attribute or an `escape` attribute or both.\n * If an array is passed, then it will be interpreted the same way as\n * a `tags` attribute on a `config` object.\n *\n * The `tags` attribute of a `config` object must be an array with two\n * string values: the opening and closing tags used in the template (e.g.\n * [ \"<%\", \"%>\" ]). The default is to mustache.tags.\n *\n * The `escape` attribute of a `config` object must be a function which\n * accepts a string as input and outputs a safely escaped string.\n * If an `escape` function is not provided, then an HTML-safe string\n * escaping function is used as the default.\n */\n Writer.prototype.render = function render (template, view, partials, config) {\n var tags = this.getConfigTags(config);\n var tokens = this.parse(template, tags);\n var context = (view instanceof Context) ? view : new Context(view, undefined);\n return this.renderTokens(tokens, context, partials, template, config);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate, config) {\n var buffer = '';\n\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate, config);\n else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate, config);\n else if (symbol === '>') value = this.renderPartial(token, context, partials, config);\n else if (symbol === '&') value = this.unescapedValue(token, context);\n else if (symbol === 'name') value = this.escapedValue(token, context, config);\n else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined)\n buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection (token, context, partials, originalTemplate, config) {\n var self = this;\n var buffer = '';\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender (template) {\n return self.render(template, context, partials, config);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate, config);\n }\n } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate, config);\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string')\n throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null)\n buffer += value;\n } else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate, config);\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate, config) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || (isArray(value) && value.length === 0))\n return this.renderTokens(token[4], context, partials, originalTemplate, config);\n };\n\n Writer.prototype.indentPartial = function indentPartial (partial, indentation, lineHasNonSpace) {\n var filteredIndentation = indentation.replace(/[^ \\t]/g, '');\n var partialByNl = partial.split('\\n');\n for (var i = 0; i < partialByNl.length; i++) {\n if (partialByNl[i].length && (i > 0 || !lineHasNonSpace)) {\n partialByNl[i] = filteredIndentation + partialByNl[i];\n }\n }\n return partialByNl.join('\\n');\n };\n\n Writer.prototype.renderPartial = function renderPartial (token, context, partials, config) {\n if (!partials) return;\n var tags = this.getConfigTags(config);\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null) {\n var lineHasNonSpace = token[6];\n var tagIndex = token[5];\n var indentation = token[4];\n var indentedValue = value;\n if (tagIndex == 0 && indentation) {\n indentedValue = this.indentPartial(value, indentation, lineHasNonSpace);\n }\n var tokens = this.parse(indentedValue, tags);\n return this.renderTokens(tokens, context, partials, indentedValue, config);\n }\n };\n\n Writer.prototype.unescapedValue = function unescapedValue (token, context) {\n var value = context.lookup(token[1]);\n if (value != null)\n return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue (token, context, config) {\n var escape = this.getConfigEscape(config) || mustache.escape;\n var value = context.lookup(token[1]);\n if (value != null)\n return (typeof value === 'number' && escape === mustache.escape) ? String(value) : escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue (token) {\n return token[1];\n };\n\n Writer.prototype.getConfigTags = function getConfigTags (config) {\n if (isArray(config)) {\n return config;\n }\n else if (config && typeof config === 'object') {\n return config.tags;\n }\n else {\n return undefined;\n }\n };\n\n Writer.prototype.getConfigEscape = function getConfigEscape (config) {\n if (config && typeof config === 'object' && !isArray(config)) {\n return config.escape;\n }\n else {\n return undefined;\n }\n };\n\n var mustache = {\n name: 'mustache.js',\n version: '4.2.0',\n tags: [ '{{', '}}' ],\n clearCache: undefined,\n escape: undefined,\n parse: undefined,\n render: undefined,\n Scanner: undefined,\n Context: undefined,\n Writer: undefined,\n /**\n * Allows a user to override the default caching strategy, by providing an\n * object with set, get and clear methods. This can also be used to disable\n * the cache by setting it to the literal `undefined`.\n */\n set templateCache (cache) {\n defaultWriter.templateCache = cache;\n },\n /**\n * Gets the default or overridden caching object from the default writer.\n */\n get templateCache () {\n return defaultWriter.templateCache;\n }\n };\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache () {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse (template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view`, `partials`, and `config`\n * using the default writer.\n */\n mustache.render = function render (template, view, partials, config) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' +\n 'but \"' + typeStr(template) + '\" was given as the first ' +\n 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials, config);\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n\n return mustache;\n\n})));\n","const mustache = require(\"mustache\");\nconst hiddenFieldGuid = '0e1c0568-776f-4d95-cb15-b5e044d2ac43';\nexport const GroupOrder = {\n onDocumentLoad\n}\n\nconst onDocumentLoad = function() {\n\n var quantityStepperBtns = document.querySelectorAll('.quantity-stepper-btn');\n for (let i = 0; i < quantityStepperBtns.length; i++) {\n quantityStepperBtns[i].addEventListener(\"click\", onQuantityStepperPress);\n }\n\n function onQuantityStepperPress(e) {\n let target = e.currentTarget;\n let queryString = target.dataset.targetInput;\n let willIncreaseValue = target.dataset.type == \"increase\";\n let targetIsMobile = target.dataset.targetInput.includes(\"Mobile\");\n\n if (willIncreaseValue) {\n increaseValue(queryString, targetIsMobile);\n } else {\n decreaseValue(queryString, targetIsMobile);\n }\n }\n\n function increaseValue(queryString, targetIsMobile) {\n let elms = setUpRelatedInputElements(targetIsMobile, queryString);\n let desktopInput = elms[0];\n let mobileInput = elms[1];\n let increaseBtnDesktop = elms[2];\n let increaseBtnMobile = elms[3];\n \n desktopInput.value++;\n mobileInput.value = desktopInput.value;\n generateOrderState();\n if(desktopInput.value > 0) {\n increaseBtnDesktop.disabled = false;\n increaseBtnMobile.disabled = false;\n }\n }\n\n function decreaseValue(queryString, targetIsMobile) {\n let elms = setUpRelatedInputElements(targetIsMobile, queryString);\n let desktopInput = elms[0];\n let mobileInput = elms[1];\n let increaseBtnDesktop = elms[2];\n let increaseBtnMobile = elms[3];\n\n let hash = desktopInput.dataset.hash;\n var summaryWrapperItems = document.querySelectorAll(`li[data-hash='${hash}']`);\n if (summaryWrapperItems.length == 1) {\n handleArticleAdded(hash, false);\n }\n\n if(desktopInput.value > 0 ) {\n desktopInput.value--;\n mobileInput.value = desktopInput.value;\n generateOrderState();\n }\n \n if (desktopInput.value == 0) {\n increaseBtnDesktop.disabled = true;\n increaseBtnMobile.disabled = true;\n }\n }\n\n var mobileVariants = document.querySelectorAll('.variants-mobile');\n for (let i = 0; i < mobileVariants.length; i++) {\n let height = mobileVariants[i].offsetHeight;\n mobileVariants[i].dataset.height = height;\n mobileVariants[i].style.height = 0;\n }\n\n var variantsToggle = document.querySelectorAll('.variants-toggle');\n for (let i = 0; i < variantsToggle.length; i++) {\n variantsToggle[i].addEventListener(\"click\", onTogglePress);\n }\n\n function onTogglePress(e) {\n let target = e.currentTarget;\n let expandId = target.getAttribute('aria-controls');\n let expand = document.getElementById(expandId);\n target.setAttribute(\"aria-expanded\", toggleAriaExpanded(target));\n expand.classList.toggle('open');\n if (expand.dataset.height) {\n toggleHeight(expand, expand.dataset.height)\n }\n }\n \n function toggleHeight(expand, height) {\n if(expand.classList.contains('open')) {\n expand.style.height = height + \"px\";\n } else {\n expand.style.height = 0;\n }\n }\n \n function toggleAriaExpanded(target) {\n let targetExpanded = target.getAttribute(\"aria-expanded\");\n \n if (targetExpanded == \"true\") {\n targetExpanded = \"false\";\n } else {\n targetExpanded = \"true\";\n }\n \n return targetExpanded;\n }\n\n function setUpRelatedInputElements (targetIsMobile ,queryString) {\n let inputDesktopQueryString = queryString;\n let inputMobileQueryString = queryString;\n\n if (targetIsMobile) {\n inputDesktopQueryString = queryString.replace(\"-Mobile\", \"\");\n } else {\n inputMobileQueryString = queryString + \"-Mobile\";\n }\n\n let desktopInput = document.getElementById(inputDesktopQueryString);\n let mobileInput = document.getElementById(inputMobileQueryString);\n\n let increaseBtnDesktop = document.querySelectorAll(`[data-target-input=\"${inputDesktopQueryString}\"]`);\n let increaseBtnMobile = document.querySelectorAll(`[data-target-input=\"${inputMobileQueryString}\"]`);\n\n let elms = [desktopInput, mobileInput, increaseBtnDesktop[1], increaseBtnMobile[0]];\n return elms;\n }\n\n var changeAmount = document.querySelectorAll('.change-amount');\n for (let i = 0; i < changeAmount.length; i++) {\n let oldValue = null;\n let newValue = null;\n\n changeAmount[i].addEventListener(\"focus\", function(e) {\n this.select();\n });\n\n changeAmount[i].addEventListener(\"keyup\", function(e) {\n let targetIsMobile = e.currentTarget.id.includes(\"Mobile\");\n let queryString = e.currentTarget.id;\n let elms = setUpRelatedInputElements(targetIsMobile, queryString);\n\n let desktopInput = elms[0];\n let mobileInput = elms[1];\n let increaseBtnDesktop = elms[2];\n let increaseBtnMobile = elms[3];\n \n if(e.which !== 40 || e.which !== 38) {\n \n if (changeAmount[i].value == null || changeAmount[i].value == \"\" ) {\n changeAmount[i].value = oldValue;\n } else {\n newValue = changeAmount[i].value;\n if(targetIsMobile) {\n desktopInput.value = newValue;\n } else {\n mobileInput.value = newValue;\n }\n \n if (changeAmount[i].value == 0) {\n increaseBtnDesktop.disabled = true;\n increaseBtnMobile.disabled = true;\n } else {\n increaseBtnDesktop.disabled = false;\n increaseBtnMobile.disabled = false;\n }\n \n generateOrderState();\n }\n \n if( newValue != oldValue) {\n oldValue = newValue;\n }\n }\n \n });\n\n changeAmount[i].addEventListener(\"keydown\", function(e) {\n let targetIsMobile = e.currentTarget.id.includes(\"Mobile\");\n let queryString = e.currentTarget.id;\n\n if(e.which === 38) {\n e.preventDefault();\n increaseValue(queryString, targetIsMobile);\n }\n\n if(e.which === 40) {\n e.preventDefault();\n decreaseValue(queryString, targetIsMobile);\n }\n\n if (changeAmount[i].value == null || changeAmount[i].value == \"\" ) {\n changeAmount[i].value = oldValue;\n } else {\n newValue = changeAmount[i].value;\n }\n });\n\n if (changeAmount.length) {\n generateOrderState();\n }\n }\n \n function generateOrderState(keepSummaryOpen) {\n var products = document.querySelectorAll('[data-product]');\n var totalAmount = 0;\n var open = keepSummaryOpen ? \"open\" : \"\";\n var result = {\n \"products\":[],\n \"hasProducts\": function () { return this.products.length },\n \"totalAmount\": totalAmount,\n \"open\": open\n };\n \n for (let i = 0; i < products.length; i++) {\n var title = products[i].getAttribute(\"data-product-title\"); \n var hash = products[i].getAttribute(\"data-product\");\n var item = {\n title,\n hash,\n open,\n variations: []\n };\n \n var variations = products[i].querySelectorAll('[data-variation]');\n for (let j = 0; j < variations.length; j++) {\n var variantTitle = variations[j]. getAttribute(\"data-variation-title\");\n var amount = parseInt(variations[j].value);\n var hash = variations[j].getAttribute(\"data-hash\");\n var id = variations[j].id;\n var totalAmountTemp = totalAmount;\n if (amount > 0) {\n totalAmount = totalAmountTemp + amount;\n var variation = {\n \"title\": variantTitle,\n \"amount\": amount,\n \"id\": id,\n hash\n };\n item.variations.push(variation);\n }\n }\n \n if (item.variations.length) {\n result.products.push(item);\n }\n }\n result.totalAmount = totalAmount;\n /* Update Mustache render */\n const mustacheTemplate = document.getElementById('order-item-template').innerHTML;\n const mustacheContainer = document.getElementById('mustache-container');\n const mustacheRendered = mustache.render(mustacheTemplate, result);\n mustacheContainer.innerHTML = mustacheRendered; \n \n var summaryToggle = document.querySelectorAll('.order-summary-toggle');\n for (let i = 0; i < summaryToggle.length; i++) {\n summaryToggle[i].addEventListener(\"click\", onTogglePress);\n }\n \n var anchorButtons = mustacheContainer.querySelectorAll('[data-anchor]');\n for (let i = 0; i < anchorButtons.length; i++) {\n anchorButtons[i].addEventListener(\"click\", onAnchorPress);\n anchorButtons[i].addEventListener(\"keyup\", onAnchorPress);\n }\n \n var removeVariationButtons = mustacheContainer.querySelectorAll('[data-remove-variation]');\n for (let i = 0; i < removeVariationButtons.length; i++) {\n //TODO Update remove logic\n var button = removeVariationButtons[i];\n button.addEventListener(\"click\", onRemoveVariationPress);\n button.addEventListener(\"keyup\", onRemoveVariationPress);\n \n }\n \n let summaryWrapperItems = document.querySelectorAll('li[data-hash]');\n for (var i = 0; i < summaryWrapperItems.length; i++) {\n handleArticleAdded(summaryWrapperItems[i].dataset.hash, true);\n }\n\n if (!result.products.length) {\n document.getElementById(\"order-form\").classList.add(\"hidden\");\n window.scrollTo(0, 0);\n } else {\n // parse the object and set it to a hidden form field that will be sent to backend.\n var hiddenJsonDataField = document.querySelector(`[name='${hiddenFieldGuid}']`);\n if (hiddenJsonDataField !== undefined) {\n hiddenJsonDataField.value = JSON.stringify(result);\n }\n }\n }\n \n function onRemoveVariationPress(e) {\n if (e.key === undefined || e.key === \"Enter\") {\n var id = e.currentTarget.dataset.removeVariation;\n\n let elms = setUpRelatedInputElements(false, id);\n let desktopInput = elms[0];\n let mobileInput = elms[1];\n let increaseBtnDesktop = elms[2];\n let increaseBtnMobile = elms[3];\n\n desktopInput.value = 0;\n mobileInput.value = 0;\n increaseBtnDesktop.disabled = true;\n increaseBtnMobile.disabled = true;\n\n handleArticleAdded( e.currentTarget.dataset.hash, false);\n generateOrderState(true);\n }\n }\n \n function handleArticleAdded(hash, isAdded) {\n let article = document.querySelector(`article[data-product='${hash}']`);\n if (isAdded) {\n article.classList.add('added');\n } else {\n article.classList.remove('added');\n }\n }\n\n function onAnchorPress(e) {\n if (e.key === undefined || e.key === \"Enter\") {\n e.preventDefault();\n \n var targetId = e.currentTarget.getAttribute('data-anchor');\n let target = document.getElementById(targetId);\n target.classList.remove(\"hidden\");\n target.scrollIntoView({ behavior: 'smooth' });\n }\n }\n\n var sectionFilterChips = document.querySelectorAll('[data-product-section-filter]')\n function handleFilterChipsChange() {\n var activeFilterChips = [];\n for (let i = 0; i < sectionFilterChips.length; i++) {\n var filterChip = sectionFilterChips[i];\n if (filterChip.classList.contains(\"active\")) {\n var target = filterChip.getAttribute('data-target');\n if (target !== undefined && target !== null) {\n activeFilterChips.push(target)\n }\n }\n }\n\n var productSections = document.querySelectorAll('[data-section]');\n for (let i = 0; i < productSections.length; i++) {\n var sectionName = productSections[i].getAttribute('data-section');\n if (!activeFilterChips.includes(sectionName) && activeFilterChips.length) {\n productSections[i].classList.add(\"hidden\");\n } else {\n productSections[i].classList.remove(\"hidden\");\n }\n }\n }\n\n \n for (let i = 0; i < sectionFilterChips.length; i++) {\n sectionFilterChips[i].addEventListener(\"click\", function(e) {\n e.preventDefault();\n e.currentTarget.classList.toggle(\"active\");\n\n var countElement = e.currentTarget.querySelector('[data-count]');\n var countActive = ['bg-base-light', 'text-base-dark', 'border-base-light'];\n var countInactive = ['border-base-dark'];\n var btnActive = ['text-base-onDark', 'bg-base-dark', 'hover:bg-base-hoverDark'];\n\n if (e.currentTarget.classList.contains('active')) {\n countElement.classList.add(...countActive);\n e.currentTarget.classList.add(...btnActive);\n countElement.classList.remove(...countInactive);\n } else {\n countElement.classList.remove(...countActive);\n e.currentTarget.classList.remove(...btnActive);\n countElement.classList.add(...countInactive);\n }\n\n handleFilterChipsChange();\n })\n }\n}","export const loadSVGSpritesheet = {\n onDocumentLoad\n}\n\nconst onDocumentLoad = function() {\n var request = new XMLHttpRequest();\n request.open(\"GET\", \"/images/spritesheet.svg?v=2\");\n request.send();\n request.onreadystatechange = function () {\n if (request.readyState == XMLHttpRequest.DONE) {\n if (request.status == 200) {\n var data = request.responseText;\n var svgContainer = document.getElementById(\"svg-icons\");\n svgContainer.innerHTML = data;\n } else {\n console.error(\"Couldn't load SVG spritesheet\");\n }\n }\n };\n}","let shareLink = null;\nlet shareLinkConfirmation = null;\n\nexport const shareLinks = {\n onDocumentLoad\n}\n\nconst onDocumentLoad = function() {\n /*Share link*/\n shareLink = document.getElementById(\"shareLink\");\n shareLinkConfirmation = document.getElementById(\"shareLinkConfirmation\");\n if (shareLink) {\n shareLink.addEventListener(\"click\", function (e) {\n navigator.clipboard.writeText(window.location.href);\n setTimeout(() => {\n shareLinkConfirmation.classList.remove(\"hidden\");\n }, 250);\n setTimeout(() => {\n shareLinkConfirmation.classList.add(\"hidden\");\n }, 3250);\n });\n }\n}","export const skipToContent = {\n onDocumentLoad\n}\n\nconst onDocumentLoad = function() {\n /*skip to content*/\n /*skip to main content*/\n let main = document.querySelectorAll(\"main\");\n let focusable = main[0].querySelectorAll(\"button, [href], select, textarea\");\n let firstFocusable = focusable[0];\n let skipToContent = document.getElementById(\"skipToContent\");\n skipToContent.addEventListener(\"click\", function () {\n firstFocusable.focus();\n });\n}","\n/* Binds to region dropdowns when filtering Event / Group pages */\nexport const regionDropdown = {\n onDocumentLoad\n}\n\nconst onDocumentLoad = function() {\n var disallowedQueryParameters = ['p', 'city'];\n var dropdown = document.getElementById('regions');\n\n if (dropdown !== undefined && dropdown !== null) {\n const searchParams = new URLSearchParams(window.location.search);\n\n disallowedQueryParameters.forEach((e) => {\n searchParams.delete(e);\n });\n \n dropdown.addEventListener(\"change\", function(e) {\n const changedValue = e.target.value;\n var queryName = e.target.getAttribute('name');\n if (changedValue.length > 0) {\n searchParams.set(queryName, changedValue);\n }\n \n window.location.search = searchParams;\n });\n }\n}"],"names":["$749b345a849d776c$var$blockLinks","$749b345a849d776c$var$onDocumentLoad","document","querySelectorAll","i","length","addEventListener","blockLinkPress","e","key","item","currentTarget","querySelector","link","getAttribute","target","download","window","open","location","href","$49c217790058dcc8$exports","factory","objectToString","Object","prototype","toString","isArray","Array","object","call","isFunction","escapeRegExp","string","replace","hasProperty","obj","propName","regExpTest","RegExp","test","nonSpaceRe","entityMap","whiteRe","spaceRe","equalsRe","curlyRe","tagRe","Scanner","tail","pos","Context","view","parentContext","cache","parent","Writer","templateCache","_cache","set","value","get","clear","eos","scan","re","match","index","substring","scanUntil","search","push","lookup","name","cache1","hasOwnProperty","primitive","intermediateValue","names","context","lookupHit","indexOf","split","clearCache","parse","template","tags","cacheKey","mustache","join","isCacheEnabled","tokens","undefined","parseTemplate","openingTagRe","closingTagRe","closingCurlyRe","start","type","chr","token","openSection","lineHasNonSpace","sections","spaces","hasTag","nonSpace","indentation","tagIndex","stripSpace","pop","compileTags","tagsToCompile","Error","scanner","valueLength","charAt","nestTokens","nestedTokens","collector","numTokens","section","squashTokens","lastToken","squashedTokens","render","partials","config","getConfigTags","renderTokens","originalTemplate","symbol","buffer","renderSection","renderInverted","renderPartial","unescapedValue","escapedValue","rawValue","self","j","slice","indentPartial","partial","filteredIndentation","partialByNl","indentedValue","escape","getConfigEscape","String","version","defaultWriter","TypeError","s","$94f875d1245cd4dc$var$faqBlocks","$94f875d1245cd4dc$var$faqButtons","$94f875d1245cd4dc$var$onDocumentLoad","getElementsByClassName","getElementsByTagName","expand","getElementById","height","offsetHeight","setAttribute","style","faqButtonClick","targetExpanded","classList","toggle","contains","dataset","$fcf4abd278724bfe$var$onDocumentLoad","quantityStepperBtns","onQuantityStepperPress","queryString","targetInput","willIncreaseValue","targetIsMobile","includes","increaseValue","decreaseValue","elms","setUpRelatedInputElements","desktopInput","mobileInput","increaseBtnDesktop","increaseBtnMobile","generateOrderState","disabled","hash","summaryWrapperItems","handleArticleAdded","mobileVariants","variantsToggle","onTogglePress","expandId","inputDesktopQueryString","inputMobileQueryString","changeAmount","oldValue","newValue","select","id","which","preventDefault","keepSummaryOpen","products","totalAmount","result","title","variations","variantTitle","amount","parseInt","totalAmountTemp","variation","mustacheTemplate","innerHTML","mustacheContainer","mustacheRendered","summaryToggle","anchorButtons","onAnchorPress","removeVariationButtons","button","onRemoveVariationPress","hiddenJsonDataField","JSON","stringify","add","scrollTo","removeVariation","isAdded","article","remove","targetId","scrollIntoView","behavior","sectionFilterChips","countElement","countActive","countInactive","btnActive","handleFilterChipsChange","activeFilterChips","filterChip","productSections","sectionName","$da9198d3767da401$var$onDocumentLoad","request","XMLHttpRequest","send","onreadystatechange","readyState","DONE","status","data","responseText","svgContainer","console","error","$43f1375b38f583e3$var$shareLink","$43f1375b38f583e3$var$shareLinkConfirmation","$43f1375b38f583e3$var$onDocumentLoad","navigator","clipboard","writeText","setTimeout","$807a31536fa4a9f2$var$onDocumentLoad","firstFocusable","focusable","main","skipToContent","focus","$c4fca5833a0c1c49$var$onDocumentLoad","dropdown","searchParams","URLSearchParams","disallowedQueryParameters","forEach","delete","changedValue","queryName","$1df32a4945e9e156$var$expandBtns","$1df32a4945e9e156$var$menuExpandBtns","$1df32a4945e9e156$var$subExpandBtns","$1df32a4945e9e156$var$mainMenu","$1df32a4945e9e156$var$overlay","$1df32a4945e9e156$var$subMenus","$1df32a4945e9e156$var$mobileMenuWrapper","$1df32a4945e9e156$var$searchClear","$1df32a4945e9e156$var$searchInput","$1df32a4945e9e156$var$searchForm","$1df32a4945e9e156$var$searchHeader","$1df32a4945e9e156$var$searchWrapper","$1df32a4945e9e156$var$searchToggle","$1df32a4945e9e156$var$searchSubmit","$1df32a4945e9e156$var$headerHeight","$1df32a4945e9e156$var$body","$1df32a4945e9e156$var$lastScroll","$1df32a4945e9e156$var$header","body","mobileSubMenu","mainMenuButtons","expandMenu","menuTarget","hasPseudoClass","node","selector","nativeMatches","matches","msMatchesSelector","expandTarget","relatedTarget","closeMenus","closeSearch","focusOn","setFocusOn","toggleHeaderSearch","toggleMobileMenu","focusSubItems","expandFocusable","currentIndex","arr","from","toggleAriaExpanded","lockScroll","releaseScroll","labelledBy","expandBtn","closeMobileSubMenus","preventAnimation","clearInput","clearSearch","clearSerch","searchClear","form","submit","formInput","isMobile","subExpandTarget","toggleMenuItem","close","sibling","previousElementSibling","currentScroll","scrollY"],"version":3,"file":"script.js.map"}