{"version":3,"file":"./assets/js/dgc.js","sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/desandro-matches-selector/matches-selector.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/masonry-layout/masonry.js","webpack:///./node_modules/outlayer/item.js","webpack:///./node_modules/outlayer/outlayer.js","webpack:///./public/assets/js/bodymovin/lottie_player.js","webpack:///./src/components/Glide/glide.js","webpack:///./src/components/accordion-component/accordion-component.js","webpack:///./src/components/alert-component/alert-component.js","webpack:///./src/components/anchor-component/anchor-menu.js","webpack:///./src/components/animate-section/animate-section.js","webpack:///./src/components/app/app.js","webpack:///./src/components/connection-component/businessconnection-component.js","webpack:///./src/components/connection-component/connection-component.js","webpack:///./src/components/contact-page-top/contact-select.js","webpack:///./src/components/contact-selection/contact-call.js","webpack:///./src/components/contact-selection/contact-form.js","webpack:///./src/components/contact-selection/contact-selection-email.js","webpack:///./src/components/contact-selection/contact-selection.js","webpack:///./src/components/edit-zip/edit-zip.js","webpack:///./src/components/fpheader/fpheader.js","webpack:///./src/components/header/header.js","webpack:///./src/components/help-popup/help-popup.js","webpack:///./src/components/image-container/image-container.js","webpack:///./src/components/masonry/masonry.js","webpack:///./src/components/news-component/news-component.js","webpack:///./src/components/newslist-component/newslist-component.js","webpack:///./src/components/redirectZipPopup/redirectPopup.js","webpack:///./src/components/richtext-component/richtext-component.js","webpack:///./src/components/search-component/global-search.js","webpack:///./src/components/search-component/search-component.js","webpack:///./src/components/share-component/share-component.js","webpack:///./src/components/support-layout/support-layout.js","webpack:///./src/components/support-list/support-list.js","webpack:///./src/components/support-menu/support-menu.js","webpack:///./src/components/support-search/support-search.js","webpack:///./src/components/tab-module/tab-module.js","webpack:///./src/components/vimeo-component/vimeo-component.js","webpack:///./src/components/zipPopUp/zipPopUp.js","webpack:///./src/consts/const-event-types.js","webpack:///./src/dgc.css","webpack:///./src/dgc.js","webpack:///./src/services/service-cookies.js","webpack:///./src/services/service-utils.js"],"sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","/*!\n * Masonry v4.2.2\n * Cascading grid layout library\n * https://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'outlayer/outlayer',\n 'get-size/get-size'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer'),\n require('get-size')\n );\n } else {\n // browser global\n window.Masonry = factory(\n window.Outlayer,\n window.getSize\n );\n }\n\n}( window, function factory( Outlayer, getSize ) {\n\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Masonry = Outlayer.create('masonry');\n // isFitWidth -> fitWidth\n Masonry.compatOptions.fitWidth = 'isFitWidth';\n\n var proto = Masonry.prototype;\n\n proto._resetLayout = function() {\n this.getSize();\n this._getMeasurement( 'columnWidth', 'outerWidth' );\n this._getMeasurement( 'gutter', 'outerWidth' );\n this.measureColumns();\n\n // reset column Y\n this.colYs = [];\n for ( var i=0; i < this.cols; i++ ) {\n this.colYs.push( 0 );\n }\n\n this.maxY = 0;\n this.horizontalColIndex = 0;\n };\n\n proto.measureColumns = function() {\n this.getContainerWidth();\n // if columnWidth is 0, default to outerWidth of first item\n if ( !this.columnWidth ) {\n var firstItem = this.items[0];\n var firstItemElem = firstItem && firstItem.element;\n // columnWidth fall back to item of first element\n this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n // if first elem has no width, default to size of container\n this.containerWidth;\n }\n\n var columnWidth = this.columnWidth += this.gutter;\n\n // calculate columns\n var containerWidth = this.containerWidth + this.gutter;\n var cols = containerWidth / columnWidth;\n // fix rounding errors, typically with gutters\n var excess = columnWidth - containerWidth % columnWidth;\n // if overshoot is less than a pixel, round up, otherwise floor it\n var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n cols = Math[ mathMethod ]( cols );\n this.cols = Math.max( cols, 1 );\n };\n\n proto.getContainerWidth = function() {\n // container is parent if fit width\n var isFitWidth = this._getOption('fitWidth');\n var container = isFitWidth ? this.element.parentNode : this.element;\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var size = getSize( container );\n this.containerWidth = size && size.innerWidth;\n };\n\n proto._getItemLayoutPosition = function( item ) {\n item.getSize();\n // how many columns does this brick span\n var remainder = item.size.outerWidth % this.columnWidth;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n // round if off by 1 pixel, otherwise use ceil\n var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n colSpan = Math.min( colSpan, this.cols );\n // use horizontal or top column position\n var colPosMethod = this.options.horizontalOrder ?\n '_getHorizontalColPosition' : '_getTopColPosition';\n var colPosition = this[ colPosMethod ]( colSpan, item );\n // position the brick\n var position = {\n x: this.columnWidth * colPosition.col,\n y: colPosition.y\n };\n // apply setHeight to necessary columns\n var setHeight = colPosition.y + item.size.outerHeight;\n var setMax = colSpan + colPosition.col;\n for ( var i = colPosition.col; i < setMax; i++ ) {\n this.colYs[i] = setHeight;\n }\n\n return position;\n };\n\n proto._getTopColPosition = function( colSpan ) {\n var colGroup = this._getTopColGroup( colSpan );\n // get the minimum Y value from the columns\n var minimumY = Math.min.apply( Math, colGroup );\n\n return {\n col: colGroup.indexOf( minimumY ),\n y: minimumY,\n };\n };\n\n /**\n * @param {Number} colSpan - number of columns the element spans\n * @returns {Array} colGroup\n */\n proto._getTopColGroup = function( colSpan ) {\n if ( colSpan < 2 ) {\n // if brick spans only one column, use all the column Ys\n return this.colYs;\n }\n\n var colGroup = [];\n // how many different places could this brick fit horizontally\n var groupCount = this.cols + 1 - colSpan;\n // for each group potential horizontal position\n for ( var i = 0; i < groupCount; i++ ) {\n colGroup[i] = this._getColGroupY( i, colSpan );\n }\n return colGroup;\n };\n\n proto._getColGroupY = function( col, colSpan ) {\n if ( colSpan < 2 ) {\n return this.colYs[ col ];\n }\n // make an array of colY values for that one group\n var groupColYs = this.colYs.slice( col, col + colSpan );\n // and get the max value of the array\n return Math.max.apply( Math, groupColYs );\n };\n\n // get column position based on horizontal index. #873\n proto._getHorizontalColPosition = function( colSpan, item ) {\n var col = this.horizontalColIndex % this.cols;\n var isOver = colSpan > 1 && col + colSpan > this.cols;\n // shift to next row if item can't fit on current row\n col = isOver ? 0 : col;\n // don't let zero-size items take up space\n var hasSize = item.size.outerWidth && item.size.outerHeight;\n this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\n\n return {\n col: col,\n y: this._getColGroupY( col, colSpan ),\n };\n };\n\n proto._manageStamp = function( stamp ) {\n var stampSize = getSize( stamp );\n var offset = this._getElementOffset( stamp );\n // get the columns that this stamp affects\n var isOriginLeft = this._getOption('originLeft');\n var firstX = isOriginLeft ? offset.left : offset.right;\n var lastX = firstX + stampSize.outerWidth;\n var firstCol = Math.floor( firstX / this.columnWidth );\n firstCol = Math.max( 0, firstCol );\n var lastCol = Math.floor( lastX / this.columnWidth );\n // lastCol should not go over if multiple of columnWidth #425\n lastCol -= lastX % this.columnWidth ? 0 : 1;\n lastCol = Math.min( this.cols - 1, lastCol );\n // set colYs to bottom of the stamp\n\n var isOriginTop = this._getOption('originTop');\n var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +\n stampSize.outerHeight;\n for ( var i = firstCol; i <= lastCol; i++ ) {\n this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n }\n };\n\n proto._getContainerSize = function() {\n this.maxY = Math.max.apply( Math, this.colYs );\n var size = {\n height: this.maxY\n };\n\n if ( this._getOption('fitWidth') ) {\n size.width = this._getContainerFitWidth();\n }\n\n return size;\n };\n\n proto._getContainerFitWidth = function() {\n var unusedCols = 0;\n // count unused columns\n var i = this.cols;\n while ( --i ) {\n if ( this.colYs[i] !== 0 ) {\n break;\n }\n unusedCols++;\n }\n // fit container to columns that have been used\n return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n };\n\n proto.needsResizeLayout = function() {\n var previousWidth = this.containerWidth;\n this.getContainerWidth();\n return previousWidth != this.containerWidth;\n };\n\n return Masonry;\n\n}));\n","/**\n * Outlayer Item\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size'\n ],\n factory\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n require('ev-emitter'),\n require('get-size')\n );\n } else {\n // browser global\n window.Outlayer = {};\n window.Outlayer.Item = factory(\n window.EvEmitter,\n window.getSize\n );\n }\n\n}( window, function factory( EvEmitter, getSize ) {\n'use strict';\n\n// ----- helpers ----- //\n\nfunction isEmptyObj( obj ) {\n for ( var prop in obj ) {\n return false;\n }\n prop = null;\n return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\n\nvar docElemStyle = document.documentElement.style;\n\nvar transitionProperty = typeof docElemStyle.transition == 'string' ?\n 'transition' : 'WebkitTransition';\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n 'transform' : 'WebkitTransform';\n\nvar transitionEndEvent = {\n WebkitTransition: 'webkitTransitionEnd',\n transition: 'transitionend'\n}[ transitionProperty ];\n\n// cache all vendor properties that could have vendor prefix\nvar vendorProperties = {\n transform: transformProperty,\n transition: transitionProperty,\n transitionDuration: transitionProperty + 'Duration',\n transitionProperty: transitionProperty + 'Property',\n transitionDelay: transitionProperty + 'Delay'\n};\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n if ( !element ) {\n return;\n }\n\n this.element = element;\n // parent layout class, i.e. Masonry, Isotope, or Packery\n this.layout = layout;\n this.position = {\n x: 0,\n y: 0\n };\n\n this._create();\n}\n\n// inherit EvEmitter\nvar proto = Item.prototype = Object.create( EvEmitter.prototype );\nproto.constructor = Item;\n\nproto._create = function() {\n // transition objects\n this._transn = {\n ingProperties: {},\n clean: {},\n onEnd: {}\n };\n\n this.css({\n position: 'absolute'\n });\n};\n\n// trigger specified handler for event type\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nproto.css = function( style ) {\n var elemStyle = this.element.style;\n\n for ( var prop in style ) {\n // use vendor property if available\n var supportedProp = vendorProperties[ prop ] || prop;\n elemStyle[ supportedProp ] = style[ prop ];\n }\n};\n\n // measure position, and sets it\nproto.getPosition = function() {\n var style = getComputedStyle( this.element );\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n var x = parseFloat( xValue );\n var y = parseFloat( yValue );\n // convert percent to pixels\n var layoutSize = this.layout.size;\n if ( xValue.indexOf('%') != -1 ) {\n x = ( x / 100 ) * layoutSize.width;\n }\n if ( yValue.indexOf('%') != -1 ) {\n y = ( y / 100 ) * layoutSize.height;\n }\n // clean up 'auto' or other non-integer values\n x = isNaN( x ) ? 0 : x;\n y = isNaN( y ) ? 0 : y;\n // remove padding from measurement\n x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n this.position.x = x;\n this.position.y = y;\n};\n\n// set settled position, apply padding\nproto.layoutPosition = function() {\n var layoutSize = this.layout.size;\n var style = {};\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n\n // x\n var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\n var xProperty = isOriginLeft ? 'left' : 'right';\n var xResetProperty = isOriginLeft ? 'right' : 'left';\n\n var x = this.position.x + layoutSize[ xPadding ];\n // set in percentage or pixels\n style[ xProperty ] = this.getXValue( x );\n // reset other property\n style[ xResetProperty ] = '';\n\n // y\n var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\n var yProperty = isOriginTop ? 'top' : 'bottom';\n var yResetProperty = isOriginTop ? 'bottom' : 'top';\n\n var y = this.position.y + layoutSize[ yPadding ];\n // set in percentage or pixels\n style[ yProperty ] = this.getYValue( y );\n // reset other property\n style[ yResetProperty ] = '';\n\n this.css( style );\n this.emitEvent( 'layout', [ this ] );\n};\n\nproto.getXValue = function( x ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && !isHorizontal ?\n ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nproto.getYValue = function( y ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && isHorizontal ?\n ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\nproto._transitionTo = function( x, y ) {\n this.getPosition();\n // get current x & y from top/left\n var curX = this.position.x;\n var curY = this.position.y;\n\n var didNotMove = x == this.position.x && y == this.position.y;\n\n // save end position\n this.setPosition( x, y );\n\n // if did not move and not transitioning, just go to layout\n if ( didNotMove && !this.isTransitioning ) {\n this.layoutPosition();\n return;\n }\n\n var transX = x - curX;\n var transY = y - curY;\n var transitionStyle = {};\n transitionStyle.transform = this.getTranslate( transX, transY );\n\n this.transition({\n to: transitionStyle,\n onTransitionEnd: {\n transform: this.layoutPosition\n },\n isCleaning: true\n });\n};\n\nproto.getTranslate = function( x, y ) {\n // flip cooridinates if origin on right or bottom\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n x = isOriginLeft ? x : -x;\n y = isOriginTop ? y : -y;\n return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n};\n\n// non transition + transform support\nproto.goTo = function( x, y ) {\n this.setPosition( x, y );\n this.layoutPosition();\n};\n\nproto.moveTo = proto._transitionTo;\n\nproto.setPosition = function( x, y ) {\n this.position.x = parseFloat( x );\n this.position.y = parseFloat( y );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nproto._nonTransition = function( args ) {\n this.css( args.to );\n if ( args.isCleaning ) {\n this._removeStyles( args.to );\n }\n for ( var prop in args.onTransitionEnd ) {\n args.onTransitionEnd[ prop ].call( this );\n }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n * @param {Object} to - style to transition to\n * @param {Object} from - style to start transition from\n * @param {Boolean} isCleaning - removes transition styles after transition\n * @param {Function} onTransitionEnd - callback\n */\nproto.transition = function( args ) {\n // redirect to nonTransition if no transition duration\n if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n this._nonTransition( args );\n return;\n }\n\n var _transition = this._transn;\n // keep track of onTransitionEnd callback by css property\n for ( var prop in args.onTransitionEnd ) {\n _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n }\n // keep track of properties that are transitioning\n for ( prop in args.to ) {\n _transition.ingProperties[ prop ] = true;\n // keep track of properties to clean up when transition is done\n if ( args.isCleaning ) {\n _transition.clean[ prop ] = true;\n }\n }\n\n // set from styles\n if ( args.from ) {\n this.css( args.from );\n // force redraw. http://blog.alexmaccaw.com/css-transitions\n var h = this.element.offsetHeight;\n // hack for JSHint to hush about unused var\n h = null;\n }\n // enable transition\n this.enableTransition( args.to );\n // set styles that are transitioning\n this.css( args.to );\n\n this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n return str.replace( /([A-Z])/g, function( $1 ) {\n return '-' + $1.toLowerCase();\n });\n}\n\nvar transitionProps = 'opacity,' + toDashedAll( transformProperty );\n\nproto.enableTransition = function(/* style */) {\n // HACK changing transitionProperty during a transition\n // will cause transition to jump\n if ( this.isTransitioning ) {\n return;\n }\n\n // make `transition: foo, bar, baz` from style object\n // HACK un-comment this when enableTransition can work\n // while a transition is happening\n // var transitionValues = [];\n // for ( var prop in style ) {\n // // dash-ify camelCased properties like WebkitTransition\n // prop = vendorProperties[ prop ] || prop;\n // transitionValues.push( toDashedAll( prop ) );\n // }\n // munge number to millisecond, to match stagger\n var duration = this.layout.options.transitionDuration;\n duration = typeof duration == 'number' ? duration + 'ms' : duration;\n // enable transition styles\n this.css({\n transitionProperty: transitionProps,\n transitionDuration: duration,\n transitionDelay: this.staggerDelay || 0\n });\n // listen for transition end event\n this.element.addEventListener( transitionEndEvent, this, false );\n};\n\n// ----- events ----- //\n\nproto.onwebkitTransitionEnd = function( event ) {\n this.ontransitionend( event );\n};\n\nproto.onotransitionend = function( event ) {\n this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n '-webkit-transform': 'transform'\n};\n\nproto.ontransitionend = function( event ) {\n // disregard bubbled events from children\n if ( event.target !== this.element ) {\n return;\n }\n var _transition = this._transn;\n // get property name of transitioned property, convert to prefix-free\n var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n // remove property that has completed transitioning\n delete _transition.ingProperties[ propertyName ];\n // check if any properties are still transitioning\n if ( isEmptyObj( _transition.ingProperties ) ) {\n // all properties have completed transitioning\n this.disableTransition();\n }\n // clean style\n if ( propertyName in _transition.clean ) {\n // clean up style\n this.element.style[ event.propertyName ] = '';\n delete _transition.clean[ propertyName ];\n }\n // trigger onTransitionEnd callback\n if ( propertyName in _transition.onEnd ) {\n var onTransitionEnd = _transition.onEnd[ propertyName ];\n onTransitionEnd.call( this );\n delete _transition.onEnd[ propertyName ];\n }\n\n this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nproto.disableTransition = function() {\n this.removeTransitionStyles();\n this.element.removeEventListener( transitionEndEvent, this, false );\n this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nproto._removeStyles = function( style ) {\n // clean up transition styles\n var cleanStyle = {};\n for ( var prop in style ) {\n cleanStyle[ prop ] = '';\n }\n this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n transitionProperty: '',\n transitionDuration: '',\n transitionDelay: ''\n};\n\nproto.removeTransitionStyles = function() {\n // remove transition\n this.css( cleanTransitionStyle );\n};\n\n// ----- stagger ----- //\n\nproto.stagger = function( delay ) {\n delay = isNaN( delay ) ? 0 : delay;\n this.staggerDelay = delay + 'ms';\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n this.element.parentNode.removeChild( this.element );\n // remove display: none\n this.css({ display: '' });\n this.emitEvent( 'remove', [ this ] );\n};\n\nproto.remove = function() {\n // just remove element if no transition support or no transition\n if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n this.removeElem();\n return;\n }\n\n // start transition\n this.once( 'transitionEnd', function() {\n this.removeElem();\n });\n this.hide();\n};\n\nproto.reveal = function() {\n delete this.isHidden;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n this.transition({\n from: options.hiddenStyle,\n to: options.visibleStyle,\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onRevealTransitionEnd = function() {\n // check if still visible\n // during transition, item may have been hidden\n if ( !this.isHidden ) {\n this.emitEvent('reveal');\n }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nproto.getHideRevealTransitionEndProperty = function( styleProperty ) {\n var optionStyle = this.layout.options[ styleProperty ];\n // use opacity\n if ( optionStyle.opacity ) {\n return 'opacity';\n }\n // get first property\n for ( var prop in optionStyle ) {\n return prop;\n }\n};\n\nproto.hide = function() {\n // set flag\n this.isHidden = true;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n this.transition({\n from: options.visibleStyle,\n to: options.hiddenStyle,\n // keep hidden stuff hidden\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onHideTransitionEnd = function() {\n // check if still hidden\n // during transition, item may have been un-hidden\n if ( this.isHidden ) {\n this.css({ display: 'none' });\n this.emitEvent('hide');\n }\n};\n\nproto.destroy = function() {\n this.css({\n position: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n transition: '',\n transform: ''\n });\n};\n\nreturn Item;\n\n}));\n","/*!\n * Outlayer v2.1.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n 'use strict';\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './item'\n ],\n function( EvEmitter, getSize, utils, Item ) {\n return factory( window, EvEmitter, getSize, utils, Item);\n }\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./item')\n );\n } else {\n // browser global\n window.Outlayer = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n window.Outlayer.Item\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize, utils, Item ) {\n'use strict';\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for ' + this.constructor.namespace +\n ': ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // add id for Outlayer.getFromElement\n var id = ++GUID;\n this.element.outlayerGUID = id; // expando\n instances[ id ] = this; // associate via id\n\n // kick it off\n this._create();\n\n var isInitLayout = this._getOption('initLayout');\n if ( isInitLayout ) {\n this.layout();\n }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n containerStyle: {\n position: 'relative'\n },\n initLayout: true,\n originLeft: true,\n originTop: true,\n resize: true,\n resizeContainer: true,\n // item options\n transitionDuration: '0.4s',\n hiddenStyle: {\n opacity: 0,\n transform: 'scale(0.001)'\n },\n visibleStyle: {\n opacity: 1,\n transform: 'scale(1)'\n }\n};\n\nvar proto = Outlayer.prototype;\n// inherit EvEmitter\nutils.extend( proto, EvEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\n/**\n * get backwards compatible option value, check old name\n */\nproto._getOption = function( option ) {\n var oldOption = this.constructor.compatOptions[ option ];\n return oldOption && this.options[ oldOption ] !== undefined ?\n this.options[ oldOption ] : this.options[ option ];\n};\n\nOutlayer.compatOptions = {\n // currentName: oldName\n initLayout: 'isInitLayout',\n horizontal: 'isHorizontal',\n layoutInstant: 'isLayoutInstant',\n originLeft: 'isOriginLeft',\n originTop: 'isOriginTop',\n resize: 'isResizeBound',\n resizeContainer: 'isResizingContainer'\n};\n\nproto._create = function() {\n // get items from children\n this.reloadItems();\n // elements that affect layout, but are not laid out\n this.stamps = [];\n this.stamp( this.options.stamp );\n // set container style\n utils.extend( this.element.style, this.options.containerStyle );\n\n // bind resize method\n var canBindResize = this._getOption('resize');\n if ( canBindResize ) {\n this.bindResize();\n }\n};\n\n// goes through all children again and gets bricks in proper order\nproto.reloadItems = function() {\n // collection of item elements\n this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nproto._itemize = function( elems ) {\n\n var itemElems = this._filterFindItemElements( elems );\n var Item = this.constructor.Item;\n\n // create new Outlayer Items for collection\n var items = [];\n for ( var i=0; i < itemElems.length; i++ ) {\n var elem = itemElems[i];\n var item = new Item( elem, this );\n items.push( item );\n }\n\n return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nproto._filterFindItemElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nproto.getItemElements = function() {\n return this.items.map( function( item ) {\n return item.element;\n });\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nproto.layout = function() {\n this._resetLayout();\n this._manageStamps();\n\n // don't animate first layout\n var layoutInstant = this._getOption('layoutInstant');\n var isInstant = layoutInstant !== undefined ?\n layoutInstant : !this._isLayoutInited;\n this.layoutItems( this.items, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nproto._init = proto.layout;\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n this.getSize();\n};\n\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nproto._getMeasurement = function( measurement, size ) {\n var option = this.options[ measurement ];\n var elem;\n if ( !option ) {\n // default to 0\n this[ measurement ] = 0;\n } else {\n // use option as an element\n if ( typeof option == 'string' ) {\n elem = this.element.querySelector( option );\n } else if ( option instanceof HTMLElement ) {\n elem = option;\n }\n // use size of element, if element\n this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nproto.layoutItems = function( items, isInstant ) {\n items = this._getItemsForLayout( items );\n\n this._layoutItems( items, isInstant );\n\n this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nproto._getItemsForLayout = function( items ) {\n return items.filter( function( item ) {\n return !item.isIgnored;\n });\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nproto._layoutItems = function( items, isInstant ) {\n this._emitCompleteOnItems( 'layout', items );\n\n if ( !items || !items.length ) {\n // no items, emit event with empty array\n return;\n }\n\n var queue = [];\n\n items.forEach( function( item ) {\n // get x/y object from method\n var position = this._getItemLayoutPosition( item );\n // enqueue\n position.item = item;\n position.isInstant = isInstant || item.isLayoutInstant;\n queue.push( position );\n }, this );\n\n this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nproto._getItemLayoutPosition = function( /* item */ ) {\n return {\n x: 0,\n y: 0\n };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nproto._processLayoutQueue = function( queue ) {\n this.updateStagger();\n queue.forEach( function( obj, i ) {\n this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );\n }, this );\n};\n\n// set stagger from option in milliseconds number\nproto.updateStagger = function() {\n var stagger = this.options.stagger;\n if ( stagger === null || stagger === undefined ) {\n this.stagger = 0;\n return;\n }\n this.stagger = getMilliseconds( stagger );\n return this.stagger;\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nproto._positionItem = function( item, x, y, isInstant, i ) {\n if ( isInstant ) {\n // if not transition, just set CSS\n item.goTo( x, y );\n } else {\n item.stagger( i * this.stagger );\n item.moveTo( x, y );\n }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nproto._postLayout = function() {\n this.resizeContainer();\n};\n\nproto.resizeContainer = function() {\n var isResizingContainer = this._getOption('resizeContainer');\n if ( !isResizingContainer ) {\n return;\n }\n var size = this._getContainerSize();\n if ( size ) {\n this._setContainerMeasure( size.width, true );\n this._setContainerMeasure( size.height, false );\n }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n * @param {Number} width\n * @param {Number} height\n */\nproto._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nproto._setContainerMeasure = function( measure, isWidth ) {\n if ( measure === undefined ) {\n return;\n }\n\n var elemSize = this.size;\n // add padding and border width if border box\n if ( elemSize.isBorderBox ) {\n measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n elemSize.borderLeftWidth + elemSize.borderRightWidth :\n elemSize.paddingBottom + elemSize.paddingTop +\n elemSize.borderTopWidth + elemSize.borderBottomWidth;\n }\n\n measure = Math.max( measure, 0 );\n this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nproto._emitCompleteOnItems = function( eventName, items ) {\n var _this = this;\n function onComplete() {\n _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n }\n\n var count = items.length;\n if ( !items || !count ) {\n onComplete();\n return;\n }\n\n var doneCount = 0;\n function tick() {\n doneCount++;\n if ( doneCount == count ) {\n onComplete();\n }\n }\n\n // bind callback\n items.forEach( function( item ) {\n item.once( eventName, tick );\n });\n};\n\n/**\n * emits events via EvEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n // add original event to arguments\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery ) {\n // set this.$element\n this.$element = this.$element || jQuery( this.element );\n if ( event ) {\n // create jQuery event\n var $event = jQuery.Event( event );\n $event.type = type;\n this.$element.trigger( $event, args );\n } else {\n // just trigger with type if no event available\n this.$element.trigger( type, args );\n }\n }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nproto.ignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n item.isIgnored = true;\n }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nproto.unignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n delete item.isIgnored;\n }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nproto.stamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ) {\n return;\n }\n\n this.stamps = this.stamps.concat( elems );\n // ignore\n elems.forEach( this.ignore, this );\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nproto.unstamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ){\n return;\n }\n\n elems.forEach( function( elem ) {\n // filter out removed stamp elements\n utils.removeFrom( this.stamps, elem );\n this.unignore( elem );\n }, this );\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nproto._find = function( elems ) {\n if ( !elems ) {\n return;\n }\n // if string, use argument as selector string\n if ( typeof elems == 'string' ) {\n elems = this.element.querySelectorAll( elems );\n }\n elems = utils.makeArray( elems );\n return elems;\n};\n\nproto._manageStamps = function() {\n if ( !this.stamps || !this.stamps.length ) {\n return;\n }\n\n this._getBoundingRect();\n\n this.stamps.forEach( this._manageStamp, this );\n};\n\n// update boundingLeft / Top\nproto._getBoundingRect = function() {\n // get bounding rect for container element\n var boundingRect = this.element.getBoundingClientRect();\n var size = this.size;\n this._boundingRect = {\n left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n };\n};\n\n/**\n * @param {Element} stamp\n**/\nproto._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nproto._getElementOffset = function( elem ) {\n var boundingRect = elem.getBoundingClientRect();\n var thisRect = this._boundingRect;\n var size = getSize( elem );\n var offset = {\n left: boundingRect.left - thisRect.left - size.marginLeft,\n top: boundingRect.top - thisRect.top - size.marginTop,\n right: thisRect.right - boundingRect.right - size.marginRight,\n bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n };\n return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nproto.handleEvent = utils.handleEvent;\n\n/**\n * Bind layout to window resizing\n */\nproto.bindResize = function() {\n window.addEventListener( 'resize', this );\n this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nproto.unbindResize = function() {\n window.removeEventListener( 'resize', this );\n this.isResizeBound = false;\n};\n\nproto.onresize = function() {\n this.resize();\n};\n\nutils.debounceMethod( Outlayer, 'onresize', 100 );\n\nproto.resize = function() {\n // don't trigger if size did not change\n // or if resize was unbound. See #9\n if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n return;\n }\n\n this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nproto.needsResizeLayout = function() {\n var size = getSize( this.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.size && size;\n return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nproto.addItems = function( elems ) {\n var items = this._itemize( elems );\n // add items to collection\n if ( items.length ) {\n this.items = this.items.concat( items );\n }\n return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nproto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // layout and reveal just the new items\n this.layoutItems( items, true );\n this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nproto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // add items to beginning of collection\n var previousItems = this.items.slice(0);\n this.items = items.concat( previousItems );\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // layout new stuff without transition\n this.layoutItems( items, true );\n this.reveal( items );\n // layout previous items\n this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.reveal = function( items ) {\n this._emitCompleteOnItems( 'reveal', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.reveal();\n });\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.hide = function( items ) {\n this._emitCompleteOnItems( 'hide', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.hide();\n });\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.revealItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.hideItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nproto.getItem = function( elem ) {\n // loop through items to get the one that matches\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n if ( item.element == elem ) {\n // return item\n return item;\n }\n }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nproto.getItems = function( elems ) {\n elems = utils.makeArray( elems );\n var items = [];\n elems.forEach( function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n items.push( item );\n }\n }, this );\n\n return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nproto.remove = function( elems ) {\n var removeItems = this.getItems( elems );\n\n this._emitCompleteOnItems( 'remove', removeItems );\n\n // bail if no items to remove\n if ( !removeItems || !removeItems.length ) {\n return;\n }\n\n removeItems.forEach( function( item ) {\n item.remove();\n // remove item from collection\n utils.removeFrom( this.items, item );\n }, this );\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nproto.destroy = function() {\n // clean up dynamic styles\n var style = this.element.style;\n style.height = '';\n style.position = '';\n style.width = '';\n // destroy items\n this.items.forEach( function( item ) {\n item.destroy();\n });\n\n this.unbindResize();\n\n var id = this.element.outlayerGUID;\n delete instances[ id ]; // remove reference to instance by id\n delete this.element.outlayerGUID;\n // remove data for jQuery\n if ( jQuery ) {\n jQuery.removeData( this.element, this.constructor.namespace );\n }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.outlayerGUID;\n return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n // sub-class Outlayer\n var Layout = subclass( Outlayer );\n // apply new options and compatOptions\n Layout.defaults = utils.extend( {}, Outlayer.defaults );\n utils.extend( Layout.defaults, options );\n Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions );\n\n Layout.namespace = namespace;\n\n Layout.data = Outlayer.data;\n\n // sub-class Item\n Layout.Item = subclass( Item );\n\n // -------------------------- declarative -------------------------- //\n\n utils.htmlInit( Layout, namespace );\n\n // -------------------------- jQuery bridge -------------------------- //\n\n // make into jQuery plugin\n if ( jQuery && jQuery.bridget ) {\n jQuery.bridget( namespace, Layout );\n }\n\n return Layout;\n};\n\nfunction subclass( Parent ) {\n function SubClass() {\n Parent.apply( this, arguments );\n }\n\n SubClass.prototype = Object.create( Parent.prototype );\n SubClass.prototype.constructor = SubClass;\n\n return SubClass;\n}\n\n// ----- helpers ----- //\n\n// how many milliseconds are in each unit\nvar msUnits = {\n ms: 1,\n s: 1000\n};\n\n// munge time-like parameter into millisecond number\n// '0.4s' -> 40\nfunction getMilliseconds( time ) {\n if ( typeof time == 'number' ) {\n return time;\n }\n var matches = time.match( /(^\\d*\\.?\\d*)(\\w*)/ );\n var num = matches && matches[1];\n var unit = matches && matches[2];\n if ( !num.length ) {\n return 0;\n }\n num = parseFloat( num );\n var mult = msUnits[ unit ] || 1;\n return num * mult;\n}\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n","\"undefined\"!=typeof navigator&&function(t,e){\"function\"==typeof define&&define.amd?define(function(){return e(t)}):\"object\"==typeof module&&module.exports?module.exports=e(t):(t.lottie=e(t),t.bodymovin=t.lottie)}(window||{},function(window){\"use strict\";function ProjectInterface(){return{}}function roundValues(t){bm_rnd=t?Math.round:function(t){return t}}function styleDiv(t){t.style.position=\"absolute\",t.style.top=0,t.style.left=0,t.style.display=\"block\",t.style.transformOrigin=t.style.webkitTransformOrigin=\"0 0\",t.style.backfaceVisibility=t.style.webkitBackfaceVisibility=\"visible\",t.style.transformStyle=t.style.webkitTransformStyle=t.style.mozTransformStyle=\"preserve-3d\"}function BMEnterFrameEvent(t,e,i,r){this.type=t,this.currentTime=e,this.totalTime=i,this.direction=r<0?-1:1}function BMCompleteEvent(t,e){this.type=t,this.direction=e<0?-1:1}function BMCompleteLoopEvent(t,e,i,r){this.type=t,this.currentLoop=i,this.totalLoops=e,this.direction=r<0?-1:1}function BMSegmentStartEvent(t,e,i){this.type=t,this.firstFrame=e,this.totalFrames=i}function BMDestroyEvent(t,e){this.type=t,this.target=e}function randomString(t,e){void 0===e&&(e=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890\");var i,r=\"\";for(i=t;i>0;--i)r+=e[Math.round(Math.random()*(e.length-1))];return r}function HSVtoRGB(t,e,i){var r,s,a,n,o,h,l,p;switch(n=Math.floor(6*t),o=6*t-n,h=i*(1-e),l=i*(1-o*e),p=i*(1-(1-o)*e),n%6){case 0:r=i,s=p,a=h;break;case 1:r=l,s=i,a=h;break;case 2:r=h,s=i,a=p;break;case 3:r=h,s=l,a=i;break;case 4:r=p,s=h,a=i;break;case 5:r=i,s=h,a=l}return[r,s,a]}function RGBtoHSV(t,e,i){var r,s=Math.max(t,e,i),a=Math.min(t,e,i),n=s-a,o=0===s?0:n/s,h=s/255;switch(s){case a:r=0;break;case t:r=e-i+n*(e1?i[1]=1:i[1]<=0&&(i[1]=0),HSVtoRGB(i[0],i[1],i[2])}function addBrightnessToRGB(t,e){var i=RGBtoHSV(255*t[0],255*t[1],255*t[2]);return i[2]+=e,i[2]>1?i[2]=1:i[2]<0&&(i[2]=0),HSVtoRGB(i[0],i[1],i[2])}function addHueToRGB(t,e){var i=RGBtoHSV(255*t[0],255*t[1],255*t[2]);return i[0]+=e/360,i[0]>1?i[0]-=1:i[0]<0&&(i[0]+=1),HSVtoRGB(i[0],i[1],i[2])}function BaseEvent(){}function createSizedArray(t){return Array.apply(null,{length:t})}function createNS(t){return document.createElementNS(svgNS,t)}function createTag(t){return document.createElement(t)}function DynamicPropertyContainer(){}function extendPrototype(t,e){var i,r,s=t.length;for(i=0;i-.001&&n<.001}function e(e,i,r,s,a,n,o,h,l){if(0===r&&0===n&&0===l)return t(e,i,s,a,o,h);var p,m=Math.sqrt(Math.pow(s-e,2)+Math.pow(a-i,2)+Math.pow(n-r,2)),f=Math.sqrt(Math.pow(o-e,2)+Math.pow(h-i,2)+Math.pow(l-r,2)),c=Math.sqrt(Math.pow(o-s,2)+Math.pow(h-a,2)+Math.pow(l-n,2));return p=m>f?m>c?m-f-c:c-f-m:c>f?c-f-m:f-m-c,p>-1e-4&&p<1e-4}function i(t){var e,i=segments_length_pool.newElement(),r=t.c,s=t.v,a=t.o,n=t.i,o=t._length,l=i.lengths,p=0;for(e=0;en?-1:1,l=!0;l;)if(r[a]<=n&&r[a+1]>n?(o=(n-r[a])/(r[a+1]-r[a]),l=!1):a+=h,a<0||a>=s-1){if(a===s-1)return i[a];l=!1}return i[a]+(i[a+1]-i[a])*o}function n(t,e,i,r,s,n){var o=a(s,n),h=1-o,l=Math.round(1e3*(h*h*h*t[0]+(o*h*h+h*o*h+h*h*o)*i[0]+(o*o*h+h*o*o+o*h*o)*r[0]+o*o*o*e[0]))/1e3,p=Math.round(1e3*(h*h*h*t[1]+(o*h*h+h*o*h+h*h*o)*i[1]+(o*o*h+h*o*o+o*h*o)*r[1]+o*o*o*e[1]))/1e3;return[l,p]}function o(t,e,i,r,s,n,o){s=s<0?0:s>1?1:s;var h=a(s,o);n=n>1?1:n;var l,m=a(n,o),f=t.length,c=1-h,d=1-m,u=c*c*c,y=h*c*c*3,g=h*h*c*3,v=h*h*h,b=c*c*d,E=h*c*d+c*h*d+c*c*m,x=h*h*d+c*h*m+h*c*m,S=h*h*m,P=c*d*d,C=h*d*d+c*m*d+c*d*m,_=h*m*d+c*m*m+h*d*m,A=h*m*m,T=d*d*d,D=m*d*d+d*m*d+d*d*m,M=m*m*d+d*m*m+m*d*m,k=m*m*m;for(l=0;l=0;e-=1)if(\"sh\"==t[e].ty){if(t[e].ks.k.i)r(t[e].ks.k);else for(a=t[e].ks.k.length,s=0;si[0]||!(i[0]>t[0])&&(t[1]>i[1]||!(i[1]>t[1])&&(t[2]>i[2]||!(i[2]>t[2])&&void 0))}function a(e,i){e.__complete||(l(e),o(e),h(e),p(e),t(e.layers,e.assets,i),e.__complete=!0)}function n(t,e){0!==t.t.a.length||\"m\"in t.t.p||(t.singleShape=!0)}var o=function(){function t(t){var e=t.t.d;t.t.d={k:[{s:e,t:0}]}}function e(e){var i,r=e.length;for(i=0;i=0;i-=1)if(\"sh\"==e[i].ty){if(e[i].ks.k.i)e[i].ks.k.c=e[i].closed;else for(s=e[i].ks.k.length,r=0;r0&&(this.maskElement.setAttribute(\"id\",y),this.element.maskedElement.setAttribute(v,\"url(\"+locationHref+\"#\"+y+\")\"),s.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this)}function HierarchyElement(){}function FrameElement(){}function TransformElement(){}function RenderableElement(){}function RenderableDOMElement(){}function ProcessedElement(t,e){this.elem=t,this.pos=e}function SVGStyleData(t,e){this.data=t,this.type=t.ty,this.d=\"\",this.lvl=e,this._mdf=!1,this.closed=!1,this.pElem=createNS(\"path\"),this.msElem=null}function SVGShapeData(t,e,i){this.caches=[],this.styles=[],this.transformers=t,this.lStr=\"\",this.sh=i,this.lvl=e,this._isAnimated=!!i.k;for(var r=0,s=t.length;r1&&(defaultCurveSegments=t);roundValues(!(defaultCurveSegments>=50))}function inBrowser(){return\"undefined\"!=typeof navigator}function installPlugin(t,e){\"expressions\"===t&&(expressionsPlugin=e)}function getFactory(t){switch(t){case\"propertyFactory\":return PropertyFactory;case\"shapePropertyFactory\":return ShapePropertyFactory;case\"matrix\":return Matrix}}function checkReady(){\"complete\"===document.readyState&&(clearInterval(readyStateCheckInterval),searchAnimations())}function getQueryVariable(t){for(var e=queryString.split(\"&\"),i=0;i0||t>-1e-6&&t<0?w(t*e)/e:t}function T(){var t=this.props,e=A(t[0]),i=A(t[1]),r=A(t[4]),s=A(t[5]),a=A(t[12]),n=A(t[13]);return\"matrix(\"+e+\",\"+i+\",\"+r+\",\"+s+\",\"+a+\",\"+n+\")\"}var D=Math.cos,M=Math.sin,k=Math.tan,w=Math.round;return function(){this.reset=t,this.rotate=e,this.rotateX=i,this.rotateY=r,this.rotateZ=s,this.skew=n,this.skewFromAxis=o,this.shear=a,this.scale=h,this.setTransform=l,this.translate=p,this.transform=m,this.applyToPoint=y,this.applyToX=g,this.applyToY=v,this.applyToZ=b,this.applyToPointArray=P,this.applyToTriplePoints=S,this.applyToPointStringified=C,this.toCSS=_,this.to2dCSS=T,this.clone=d,this.cloneFromProps=u,this.equals=c,this.inversePoints=x,this.inversePoint=E,this._t=this.transform,this.isIdentity=f,this._identity=!0,this._identityCalculated=!1,this.props=createTypedArray(\"float32\",16),this.reset()}}();!function(t,e){function i(i,l,p){var c=[];l=l===!0?{entropy:!0}:l||{};var v=n(a(l.entropy?[i,h(t)]:null===i?o():i,3),c),b=new r(c),E=function(){for(var t=b.g(f),e=u,i=0;t=g;)t/=2,e/=2,i>>>=1;return(t+i)/e};return E.int32=function(){return 0|b.g(4)},E.quick=function(){return b.g(4)/4294967296},E[\"double\"]=E,n(h(b.S),t),(l.pass||p||function(t,i,r,a){return a&&(a.S&&s(a,b),t.state=function(){return s(b,{})}),r?(e[d]=t,i):t})(E,v,\"global\"in l?l.global:this==e,l.state)}function r(t){var e,i=t.length,r=this,s=0,a=r.i=r.j=0,n=r.S=[];for(i||(t=[i++]);s0?i=o:e=o;while(Math.abs(n)>c&&++h=f?o(t,m,e,i):0===c?m:n(t,s,s+y,e,i)}},l}();!function(){for(var t=0,e=[\"ms\",\"moz\",\"webkit\",\"o\"],i=0;i=h.t-n){o.h&&(o=h),l=0;break}if(h.t-n>t){l=p;break}p=h.t-n||t=h.t-n?b.points.length-1:0;for(d=b.points[E].point.length,c=0;c=P&&S=h.t-n)a[0]=o.e[0],a[1]=o.e[1],a[2]=o.e[2];else if(t<=o.t-n)a[0]=o.s[0],a[1]=o.s[1],a[2]=o.s[2];else{var M=r(o.s),k=r(o.e),w=(t-(o.t-n))/(h.t-n-(o.t-n));i(a,e(M,k,w))}else for(p=0;p=h.t-n?u=1:t1e-6?(r=Math.acos(s),a=Math.sin(r),n=Math.sin((1-i)*r)/a,o=Math.sin(i*r)/a):(n=1-i,o=i),h[0]=n*l+o*c,h[1]=n*p+o*d,h[2]=n*m+o*u,h[3]=n*f+o*y,h}function i(t,e){var i=e[0],r=e[1],s=e[2],a=e[3],n=Math.atan2(2*r*a-2*i*s,1-2*r*r-2*s*s),o=Math.asin(2*i*r+2*s*a),h=Math.atan2(2*i*a-2*r*s,1-2*i*i-2*s*s);t[0]=n/degToRads,t[1]=o/degToRads,t[2]=h/degToRads}function r(t){var e=t[0]*degToRads,i=t[1]*degToRads,r=t[2]*degToRads,s=Math.cos(e/2),a=Math.cos(i/2),n=Math.cos(r/2),o=Math.sin(e/2),h=Math.sin(i/2),l=Math.sin(r/2),p=s*a*n-o*h*l,m=o*h*n+s*a*l,f=o*a*n+s*h*l,c=s*h*n-o*a*l;return[m,f,c,p]}function s(){var t=this.comp.renderedFrame-this.offsetTime,e=this.keyframes[0].t-this.offsetTime,i=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(t===this._caching.lastFrame||this._caching.lastFrame!==c&&(this._caching.lastFrame>=i&&t>=i||this._caching.lastFrame1e-5&&(this.v=e,this._mdf=!0);else for(var i=0,r=this.v.length;i1e-5&&(this.v[i]=e,this._mdf=!0),i+=1}function n(){if(this.elem.globalData.frameId!==this.frameId&&this.effectsSequence.length){if(this.lock)return void this.setVValue(this.pv);this.lock=!0,this._mdf=this._isFirstFrame;var t,e=this.effectsSequence.length,i=this.kf?this.pv:this.data.k;for(t=0;t=this.p.keyframes[this.p.keyframes.length-1].t?(e=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/this.elem.globalData.frameRate,0),i=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.01)/this.elem.globalData.frameRate,0)):(e=this.p.pv,i=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/this.elem.globalData.frameRate,this.p.offsetTime)),this.v.rotate(-Math.atan2(e[1]-i[1],e[0]-i[0]))}this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2])}this.frameId=this.elem.globalData.frameId}}function i(){if(!this.a.k&&(this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1,!this.s.effectsSequence.length)){if(this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2,this.sk){if(this.sk.effectsSequence.length||this.sa.effectsSequence.length)return;this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3}if(this.r){if(this.r.effectsSequence.length)return;this.pre.rotate(-this.r.v),this.appliedTransformations=4}else this.rz.effectsSequence.length||this.ry.effectsSequence.length||this.rx.effectsSequence.length||this.or.effectsSequence.length||(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4)}}function r(){}function s(t){this._addDynamicProperty(t),this.elem.addDynamicProperty(t),this._isDirty=!0}function a(t,e,i){if(this.elem=t,this.frameId=-1,this.propType=\"transform\",this.data=e,this.v=new Matrix,this.pre=new Matrix,this.appliedTransformations=0,this.initDynamicPropertyContainer(i||t),e.p.s?(this.px=PropertyFactory.getProp(t,e.p.x,0,0,this),this.py=PropertyFactory.getProp(t,e.p.y,0,0,this),e.p.z&&(this.pz=PropertyFactory.getProp(t,e.p.z,0,0,this))):this.p=PropertyFactory.getProp(t,e.p,1,0,this),e.r)this.r=PropertyFactory.getProp(t,e.r,0,degToRads,this);else if(e.rx){if(this.rx=PropertyFactory.getProp(t,e.rx,0,degToRads,this),this.ry=PropertyFactory.getProp(t,e.ry,0,degToRads,this),this.rz=PropertyFactory.getProp(t,e.rz,0,degToRads,this),e.or.k[0].ti){var r,s=e.or.k.length;for(r=0;r=this._maxLength&&this.doubleArrayLength(),i){case\"v\":a=this.v;break;case\"i\":a=this.i;break;case\"o\":a=this.o}(!a[r]||a[r]&&!s)&&(a[r]=point_pool.newElement()),a[r][0]=t,a[r][1]=e},ShapePath.prototype.setTripleAt=function(t,e,i,r,s,a,n,o){this.setXYAt(t,e,\"v\",n,o),this.setXYAt(i,r,\"o\",n,o),this.setXYAt(s,a,\"i\",n,o)},ShapePath.prototype.reverse=function(){var t=new ShapePath;t.setPathData(this.c,this._length);var e=this.v,i=this.o,r=this.i,s=0;this.c&&(t.setTripleAt(e[0][0],e[0][1],r[0][0],r[0][1],i[0][0],i[0][1],0,!1),s=1);var a,n=this._length-1,o=this._length;for(a=s;a=c[c.length-1].t-this.offsetTime)r=1===c[c.length-2].h?c[c.length-1].s[0]:c[c.length-2].e[0],a=!0;else{for(var d,u,y=f,g=c.length-1,v=!0;v&&(d=c[y],u=c[y+1],!(u.t-this.offsetTime>t));)y=u.t-this.offsetTime)p=1;else if(ti&&t>i)||(this._caching.lastIndex=r=1?a.push({s:t-1,e:e-1}):(a.push({s:t,e:1}),a.push({s:0,e:e-1}));var n,o,h=[],l=a.length;for(n=0;nr+i);else{var p,m;p=o.s*s<=r?0:(o.s*s-r)/i,m=o.e*s>=r+i?1:(o.e*s-r)/i,h.push([p,m])}return h.length||h.push([0,0]),h},TrimModifier.prototype.releasePathsData=function(t){var e,i=t.length;for(e=0;ei){var s=e;e=i,i=s}e=Math.round(1e3*e)/1e3,i=Math.round(1e3*i)/1e3,this.sValue=e,this.eValue=i}else e=this.sValue,i=this.eValue;var a,n,o,h,l,p,m,f=this.shapes.length,c=0;if(i===e)for(n=0;n=0;n-=1)if(d=this.shapes[n],d.shape._mdf){for(u=d.localShapeCollection,u.releaseShapes(),2===this.m&&f>1?(g=this.calculateShapeEdges(e,i,d.totalShapeLength,E,c),E+=d.totalShapeLength):g=[[v,b]],h=g.length,o=0;o=1?y.push({s:d.totalShapeLength*(v-1),e:d.totalShapeLength*(b-1)}):(y.push({s:d.totalShapeLength*v,e:d.totalShapeLength}),y.push({s:0,e:d.totalShapeLength*(b-1)}));var x=this.addShapes(d,y[0]);if(y[0].s!==y[0].e){if(y.length>1)if(d.shape.v.c){var S=x.pop();this.addPaths(x,u),x=this.addShapes(d,y[1],S)}else this.addPaths(x,u),x=this.addShapes(d,y[1]);this.addPaths(x,u)}}d.shape.paths=u}}},TrimModifier.prototype.addPaths=function(t,e){var i,r=t.length;for(i=0;ie.e){i.c=!1;break}e.s<=d&&e.e>=d+n.addedLength?(this.addSegment(f[r].v[s-1],f[r].o[s-1],f[r].i[s],f[r].v[s],i,o,y),y=!1):(l=bez.getNewSegment(f[r].v[s-1],f[r].v[s],f[r].o[s-1],f[r].i[s],(e.s-d)/n.addedLength,(e.e-d)/n.addedLength,h[s-1]),this.addSegmentFromArray(l,i,o,y),y=!1,i.c=!1),d+=n.addedLength,o+=1}if(f[r].c){if(n=h[s-1],d<=e.e){var g=h[s-1].addedLength;e.s<=d&&e.e>=d+g?(this.addSegment(f[r].v[s-1],f[r].o[s-1],f[r].i[0],f[r].v[0],i,o,y),y=!1):(l=bez.getNewSegment(f[r].v[s-1],f[r].v[0],f[r].o[s-1],f[r].i[0],(e.s-d)/g,(e.e-d)/g,h[s-1]),this.addSegmentFromArray(l,i,o,y),y=!1,i.c=!1)}else i.c=!1;d+=n.addedLength,o+=1}if(i._length&&(i.setXYAt(i.v[p][0],i.v[p][1],\"i\",p),i.setXYAt(i.v[i._length-1][0],i.v[i._length-1][1],\"o\",i._length-1)),d>e.e)break;r0;)i-=1,this._elements.unshift(e[i]),s+=1;this.dynamicProperties.length?this.k=!0:this.getValue(!0)},RepeaterModifier.prototype.resetElements=function(t){var e,i=t.length;for(e=0;e0?Math.floor(l):Math.ceil(l),f=(this.tr.v.props,this.pMatrix.props),c=this.rMatrix.props,d=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var u=0;if(l>0){for(;um;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),u-=1;p&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-p,!0),u-=p)}r=1===this.data.m?0:this._currentCopies-1,s=1===this.data.m?1:-1,a=this._currentCopies;for(var y,g;a;){if(e=this.elemsData[r].it,i=e[e.length-1].transform.mProps.v.props,g=i.length,e[e.length-1].transform.mProps._mdf=!0,e[e.length-1].transform.op._mdf=!0,0!==u){for((0!==r&&1===s||r!==this._currentCopies-1&&s===-1)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],c[11],c[12],c[13],c[14],c[15]),this.matrix.transform(d[0],d[1],d[2],d[3],d[4],d[5],d[6],d[7],d[8],d[9],d[10],d[11],d[12],d[13],d[14],d[15]),this.matrix.transform(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8],f[9],f[10],f[11],f[12],f[13],f[14],f[15]),y=0;y.01)return!1;r+=1}return!0},GradientProperty.prototype.checkCollapsable=function(){if(this.o.length/2!==this.c.length/4)return!1;if(this.data.k.k[0].s)for(var t=0,e=this.data.k.k.length;t=o+lt||!d?(v=(o+lt-l)/h.partialLength,z=c.point[0]+(h.point[0]-c.point[0])*v,N=c.point[1]+(h.point[1]-c.point[1])*v,C.translate(-x[0]*T[s].an/200,-(x[1]*R/100)),p=!1):d&&(l+=h.partialLength,m+=1,m>=d.length&&(m=0,f+=1,u[f]?d=u[f].bezierData.points:E.v.c?(m=0,f=0,d=u[f].bezierData.points):(l-=h.partialLength,d=null)),d&&(c=h,h=d[m],y=h.partialLength));G=T[s].an/2-T[s].add,C.translate(-G,0,0)}else G=T[s].an/2-T[s].add,C.translate(-G,0,0),C.translate(-x[0]*T[s].an/200,-x[1]*R/100,0);for(et+=T[s].l/2,F=0;F1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},TextProperty.prototype.addEffect=function(t){this.effectsSequence.push(t),this.elem.addDynamicProperty(this)},TextProperty.prototype.getValue=function(t){if(this.elem.globalData.frameId!==this.frameId&&this.effectsSequence.length||t){var e=this.currentData.t;if(this.lock)return void this.setCurrentData(this.currentData,e);this.lock=!0,this._mdf=!1;var i,r=this.effectsSequence.length,s=t||this.currentData;for(i=0;ir));)s+=1;return this.keysIndex!==s&&(t=e,this.keysIndex=s),t},TextProperty.prototype.buildFinalText=function(t){for(var e=FontManager.getCombinedCharacterCodes(),i=[],r=0,s=t.length;rM&&\" \"!==T[e]?(w===-1?i+=1:e=w,A+=t.finalLineHeight||1.2*t.finalSize,T.splice(e,w===e?1:0,\"\\r\"),w=-1,g=0):(g+=E,g+=_);A+=b.ascent*t.finalSize/100,this.canResize&&t.finalSize>this.minimumFontSize&&kv?g:v,g=-2*_,s=\"\",r=!0,u+=1):s=t.finalText[e],h.chars?(o=h.getCharData(F,b.fStyle,h.getFontByName(t.f).fFamily),E=r?0:o.w*t.finalSize/100):E=h.measureText(s,t.f,t.finalSize),\" \"===F?I+=E+_:(g+=E+_+I,I=0),p.push({l:E,an:E,add:c,n:r,anIndexes:[],val:s,line:u,animatorJustifyOffset:0\r\n}),2==f){if(c+=E,\"\"===s||\"\\xa0\"===s||e===i-1){for(\"\"!==s&&\"\\xa0\"!==s||(c-=E);d<=e;)p[d].an=c,p[d].ind=m,p[d].extra=E,d+=1;m+=1,c=0}}else if(3==f){if(c+=E,\"\"===s||e===i-1){for(\"\"===s&&(c-=E);d<=e;)p[d].an=c,p[d].ind=m,p[d].extra=E,d+=1;c=0,m+=1}}else p[m].ind=m,p[m].extra=0,m+=1;if(t.l=p,v=g>v?g:v,y.push(g),t.sz)t.boxWidth=t.sz[0],t.justifyOffset=0;else switch(t.boxWidth=v,t.j){case 1:t.justifyOffset=-t.boxWidth;break;case 2:t.justifyOffset=-t.boxWidth/2;break;default:t.justifyOffset=0}t.lineWidths=y;var V,R,B=l.a;n=B.length;var L,G,z=[];for(a=0;a=o?1:0:i(0,r(.5/(o-n)+(t-n)/(o-n),1)),a=e(a);else if(3==h)a=o===n?t>=o?0:1:1-i(0,r(.5/(o-n)+(t-n)/(o-n),1)),a=e(a);else if(4==h)o===n?a=0:(a=i(0,r(.5/(o-n)+(t-n)/(o-n),1)),a<.5?a*=2:a=1-2*(a-.5)),a=e(a);else if(5==h){if(o===n)a=0;else{var l=o-n;t=r(i(0,t+.5-n),o-n);var p=-l/2+t,m=l/2;a=Math.sqrt(1-p*p/(m*m))}a=e(a)}else 6==h?(o===n?a=0:(t=r(i(0,t+.5-n),o-n),a=(1+Math.cos(Math.PI+2*Math.PI*t/(o-n)))/2),a=e(a)):(t>=s(n)&&(a=t-n<0?1-(n-t):i(0,r(o-t,1))),a=e(a));return a*this.a.v},getValue:function(t){this.iterateDynamicProperties(),this._mdf=t||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,t&&2===this.data.r&&(this.e.v=this._currentTextLength);var e=2===this.data.r?1:100/this._currentTextLength,i=this.o.v/e,r=this.s.v/e+i,s=this.e.v/e+i;if(r>s){var a=r;r=s,s=a}this.finalS=r,this.finalE=s}},extendPrototype([DynamicPropertyContainer],t),{getTextSelectorProp:e}}(),pool_factory=function(){return function(t,e,i,r){function s(){var t;return n?(n-=1,t=h[n]):t=e(),t}function a(t){n===o&&(h=pooling[\"double\"](h),o=2*o),i&&i(t),h[n]=t,n+=1}var n=0,o=t,h=createSizedArray(o),l={newElement:s,release:a};return l}}(),pooling=function(){function t(t){return t.concat(createSizedArray(t.length))}return{\"double\":t}}(),point_pool=function(){function t(){return createTypedArray(\"float32\",2)}return pool_factory(8,t)}(),shape_pool=function(){function t(){return new ShapePath}function e(t){var e,i=t._length;for(e=0;e=0;e--)this.elements[e]||(i=this.layers[e],i.ip-i.st<=t-this.layers[e].st&&i.op-i.st>t-this.layers[e].st&&this.buildItem(e)),this.completeLayers=!!this.elements[e]&&this.completeLayers;this.checkPendingElements()},BaseRenderer.prototype.createItem=function(t){switch(t.ty){case 2:return this.createImage(t);case 0:return this.createComp(t);case 1:return this.createSolid(t);case 3:return this.createNull(t);case 4:return this.createShape(t);case 5:return this.createText(t);case 13:return this.createCamera(t)}return this.createNull(t)},BaseRenderer.prototype.createCamera=function(){throw new Error(\"You're using a 3d camera. Try the html renderer.\")},BaseRenderer.prototype.buildAllItems=function(){var t,e=this.layers.length;for(t=0;t=0;e--)(this.completeLayers||this.elements[e])&&this.elements[e].prepareFrame(t-this.layers[e].st);if(this.globalData._mdf)for(e=0;e1&&(a+=\" C\"+e.o[r-1][0]+\",\"+e.o[r-1][1]+\" \"+e.i[0][0]+\",\"+e.i[0][1]+\" \"+e.v[0][0]+\",\"+e.v[0][1]),i.lastPath!==a){var n=\"\";i.elem&&(e.c&&(n=t.inv?this.solidPath+a:a),i.elem.setAttribute(\"d\",n)),i.lastPath=a}},MaskElement.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null},HierarchyElement.prototype={initHierarchy:function(){this.hierarchy=[],this._isParent=!1,this.checkParenting()},setHierarchy:function(t){this.hierarchy=t},setAsParent:function(){this._isParent=!0},checkParenting:function(){void 0!==this.data.parent&&this.comp.buildElementParenting(this,this.data.parent,[])}},FrameElement.prototype={initFrame:function(){this._isFirstFrame=!1,this.dynamicProperties=[],this._mdf=!1},prepareProperties:function(t,e){var i,r=this.dynamicProperties.length;for(i=0;it?this.isInRange!==!0&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):this.isInRange!==!1&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide())},renderRenderable:function(){var t,e=this.renderableComponents.length;for(t=0;t0;)n=e.transformers[u].mProps._mdf||n,d--,u--;if(n)for(d=g-e.styles[p].lvl,u=e.transformers.length-1;d>0;)c=e.transformers[u].mProps.v.props,f.transform(c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],c[11],c[12],c[13],c[14],c[15]),d--,u--}else f=o;if(m=e.sh.paths,s=m._length,n){for(a=\"\",r=0;r=1?.99:e.h.v<=-1?-.99:e.h.v,b=y*v,E=Math.cos(g+e.a.v)*b+a[0],x=Math.sin(g+e.a.v)*b+a[1];r.setAttribute(\"fx\",E),r.setAttribute(\"fy\",x),s&&!e.g._collapsable&&(e.of.setAttribute(\"fx\",E),e.of.setAttribute(\"fy\",x))}}}function n(t,e,i){var r=e.style,s=e.d;s&&(s._mdf||i)&&s.dashStr&&(r.pElem.setAttribute(\"stroke-dasharray\",s.dashStr),r.pElem.setAttribute(\"stroke-dashoffset\",s.dashoffset[0])),e.c&&(e.c._mdf||i)&&r.pElem.setAttribute(\"stroke\",\"rgb(\"+bm_floor(e.c.v[0])+\",\"+bm_floor(e.c.v[1])+\",\"+bm_floor(e.c.v[2])+\")\"),(e.o._mdf||i)&&r.pElem.setAttribute(\"stroke-opacity\",e.o.v),(e.w._mdf||i)&&(r.pElem.setAttribute(\"stroke-width\",e.w.v),r.msElem&&r.msElem.setAttribute(\"stroke-width\",e.w.v))}var o=new Matrix,h=new Matrix,l={createRenderFunction:t};return l}();BaseElement.prototype={checkMasks:function(){if(!this.data.hasMask)return!1;for(var t=0,e=this.data.masksProperties.length;t=0;t-=1)this.shapeModifiers[t].processShapes(this._isFirstFrame)}},lcEnum:{1:\"butt\",2:\"round\",3:\"square\"},ljEnum:{1:\"miter\",2:\"round\",3:\"bevel\"},searchProcessedElement:function(t){for(var e=this.processedElements,i=0,r=e.length;i=0;i-=1)(this.completeLayers||this.elements[i])&&(this.elements[i].prepareFrame(this.renderedFrame-this.layers[i].st),this.elements[i]._mdf&&(this._mdf=!0))}},ICompElement.prototype.renderInnerContent=function(){var t,e=this.layers.length;for(t=0;tt?this.textSpans[t]:createNS(o?\"path\":\"text\"),b<=t&&(h.setAttribute(\"stroke-linecap\",\"butt\"),h.setAttribute(\"stroke-linejoin\",\"round\"),h.setAttribute(\"stroke-miterlimit\",\"4\"),this.textSpans[t]=h,this.layerElement.appendChild(h)),h.style.display=\"inherit\"),p.reset(),p.scale(i.finalSize/100,i.finalSize/100),f&&(n[t].n&&(c=-y,d+=i.yOffset,d+=u?1:0,u=!1),this.applyTextPropertiesToMatrix(i,p,n[t].line,c,d),c+=n[t].l||0,c+=y),o?(v=this.globalData.fontManager.getCharData(i.finalText[t],r.fStyle,this.globalData.fontManager.getFontByName(i.f).fFamily),g=v&&v.data||{},l=g.shapes?g.shapes[0].it:[],f?m+=this.createPathShape(p,l):h.setAttribute(\"d\",this.createPathShape(p,l))):(f&&h.setAttribute(\"transform\",\"translate(\"+p.props[12]+\",\"+p.props[13]+\")\"),h.textContent=n[t].val,h.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\",\"xml:space\",\"preserve\"));f&&h.setAttribute(\"d\",m)}else{var E=this.textContainer,x=\"start\";switch(i.j){case 1:x=\"end\";break;case 2:x=\"middle\"}E.setAttribute(\"text-anchor\",x),E.setAttribute(\"letter-spacing\",y);var S=this.buildTextContents(i.finalText);for(e=S.length,d=i.ps?i.ps[1]+i.ascent:0,t=0;t1&&o&&this.setShapesAsAnimated(n)}},SVGShapeElement.prototype.setShapesAsAnimated=function(t){var e,i=t.length;for(e=0;e=0;o-=1){if(f=this.searchProcessedElement(t[o]),f?e[o]=i[f-1]:t[o]._render=n,\"fl\"==t[o].ty||\"st\"==t[o].ty||\"gf\"==t[o].ty||\"gs\"==t[o].ty)f?e[o].style.closed=!1:e[o]=this.createStyleElement(t[o],s),t[o]._render&&r.appendChild(e[o].style.pElem),u.push(e[o].style);else if(\"gr\"==t[o].ty){if(f)for(l=e[o].it.length,h=0;h=p?d<0?r:s:r+c*Math.pow((a-t)/d,1/i),m[f++]=n,o+=256/(h-1);return m.join(\" \")},SVGProLevelsFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e,i=this.filterManager.effectElements;this.feFuncRComposed&&(t||i[3].p._mdf||i[4].p._mdf||i[5].p._mdf||i[6].p._mdf||i[7].p._mdf)&&(e=this.getTableValue(i[3].p.v,i[4].p.v,i[5].p.v,i[6].p.v,i[7].p.v),this.feFuncRComposed.setAttribute(\"tableValues\",e),this.feFuncGComposed.setAttribute(\"tableValues\",e),this.feFuncBComposed.setAttribute(\"tableValues\",e)),this.feFuncR&&(t||i[10].p._mdf||i[11].p._mdf||i[12].p._mdf||i[13].p._mdf||i[14].p._mdf)&&(e=this.getTableValue(i[10].p.v,i[11].p.v,i[12].p.v,i[13].p.v,i[14].p.v),this.feFuncR.setAttribute(\"tableValues\",e)),this.feFuncG&&(t||i[17].p._mdf||i[18].p._mdf||i[19].p._mdf||i[20].p._mdf||i[21].p._mdf)&&(e=this.getTableValue(i[17].p.v,i[18].p.v,i[19].p.v,i[20].p.v,i[21].p.v),this.feFuncG.setAttribute(\"tableValues\",e)),this.feFuncB&&(t||i[24].p._mdf||i[25].p._mdf||i[26].p._mdf||i[27].p._mdf||i[28].p._mdf)&&(e=this.getTableValue(i[24].p.v,i[25].p.v,i[26].p.v,i[27].p.v,i[28].p.v),this.feFuncB.setAttribute(\"tableValues\",e)),this.feFuncA&&(t||i[31].p._mdf||i[32].p._mdf||i[33].p._mdf||i[34].p._mdf||i[35].p._mdf)&&(e=this.getTableValue(i[31].p.v,i[32].p.v,i[33].p.v,i[34].p.v,i[35].p.v),this.feFuncA.setAttribute(\"tableValues\",e))}},SVGDropShadowEffect.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){if((t||this.filterManager.effectElements[4].p._mdf)&&this.feGaussianBlur.setAttribute(\"stdDeviation\",this.filterManager.effectElements[4].p.v/4),t||this.filterManager.effectElements[0].p._mdf){var e=this.filterManager.effectElements[0].p.v;this.feFlood.setAttribute(\"flood-color\",rgbToHex(Math.round(255*e[0]),Math.round(255*e[1]),Math.round(255*e[2])))}if((t||this.filterManager.effectElements[1].p._mdf)&&this.feFlood.setAttribute(\"flood-opacity\",this.filterManager.effectElements[1].p.v/255),t||this.filterManager.effectElements[2].p._mdf||this.filterManager.effectElements[3].p._mdf){var i=this.filterManager.effectElements[3].p.v,r=(this.filterManager.effectElements[2].p.v-90)*degToRads,s=i*Math.cos(r),a=i*Math.sin(r);this.feOffset.setAttribute(\"dx\",s),this.feOffset.setAttribute(\"dy\",a)}}};var _svgMatteSymbols=[],_svgMatteMaskCounter=0;SVGMatte3Effect.prototype.findSymbol=function(t){for(var e=0,i=_svgMatteSymbols.length;e=0;e-=1)P[e].animation.destroy(t)}function g(t,i,r){var s,a=[].concat([].slice.call(document.getElementsByClassName(\"lottie\")),[].slice.call(document.getElementsByClassName(\"bodymovin\"))),n=a.length;for(s=0;sthis.animationData.op&&(this.animationData.op=t.op,this.totalFrames=Math.floor(t.op-this.animationData.ip));var e,i,r=this.animationData.layers,s=r.length,a=t.layers,n=a.length;for(i=0;ithis.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger(\"enterFrame\"),this.renderFrame()},AnimationItem.prototype.renderFrame=function(){this.isLoaded!==!1&&this.renderer.renderFrame(this.currentFrame+this.firstFrame)},AnimationItem.prototype.play=function(t){t&&this.name!=t||this.isPaused===!0&&(this.isPaused=!1,this._idle&&(this._idle=!1,this.trigger(\"_active\")))},AnimationItem.prototype.pause=function(t){t&&this.name!=t||this.isPaused===!1&&(this.isPaused=!0,this._idle=!0,this.trigger(\"_idle\"))},AnimationItem.prototype.togglePause=function(t){t&&this.name!=t||(this.isPaused===!0?this.play():this.pause())},AnimationItem.prototype.stop=function(t){t&&this.name!=t||(this.pause(),this.playCount=0,this.setCurrentRawFrameValue(0))},AnimationItem.prototype.goToAndStop=function(t,e,i){i&&this.name!=i||(e?this.setCurrentRawFrameValue(t):this.setCurrentRawFrameValue(t*this.frameModifier),this.pause())},AnimationItem.prototype.goToAndPlay=function(t,e,i){this.goToAndStop(t,e,i),this.play()},AnimationItem.prototype.advanceTime=function(t){if(this.isPaused!==!0&&this.isLoaded!==!1){var e=this.currentRawFrame+t*this.frameModifier,i=!1;e>=this.totalFrames-1&&this.frameModifier>0?this.loop&&this.playCount!==this.loop?e>=this.totalFrames?(this.playCount+=1,this.checkSegments(e%this.totalFrames)||(this.setCurrentRawFrameValue(e%this.totalFrames),this.trigger(\"loopComplete\"))):this.setCurrentRawFrameValue(e):this.checkSegments(e>this.totalFrames?e%this.totalFrames:0)||(i=!0,e=this.totalFrames-1):e<0?this.checkSegments(e%this.totalFrames)||(!this.loop||this.playCount--<=0&&this.loop!==!0?(i=!0,e=0):(this.setCurrentRawFrameValue(this.totalFrames+e%this.totalFrames),this.trigger(\"loopComplete\"))):this.setCurrentRawFrameValue(e),i&&(this.setCurrentRawFrameValue(e),this.pause(),this.trigger(\"complete\"))}},AnimationItem.prototype.adjustSegment=function(t,e){this.playCount=0,t[1]0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.timeCompleted=this.totalFrames=t[0]-t[1],this.firstFrame=t[1],this.setCurrentRawFrameValue(this.totalFrames-.001-e)):t[1]>t[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.timeCompleted=this.totalFrames=t[1]-t[0],this.firstFrame=t[0],this.setCurrentRawFrameValue(.001+e)),this.trigger(\"segmentStart\")},AnimationItem.prototype.setSegment=function(t,e){var i=-1;this.isPaused&&(this.currentRawFrame+this.firstFramee&&(i=e-t)),this.firstFrame=t,this.timeCompleted=this.totalFrames=e-t,i!==-1&&this.goToAndStop(i,!0)},AnimationItem.prototype.playSegments=function(t,e){if(\"object\"==typeof t[0]){var i,r=t.length;for(i=0;ii&&\"meet\"===a||ri&&\"slice\"===a)?this.transformCanvas.tx=(t-this.transformCanvas.w*(e/this.transformCanvas.h))/2*this.renderConfig.dpr:\"xMax\"===o&&(ri&&\"slice\"===a)?this.transformCanvas.tx=(t-this.transformCanvas.w*(e/this.transformCanvas.h))*this.renderConfig.dpr:this.transformCanvas.tx=0,\"YMid\"===h&&(r>i&&\"meet\"===a||ri&&\"meet\"===a||r=0;t-=1)this.elements[t]&&this.elements[t].destroy();this.elements.length=0,this.globalData.canvasContext=null,this.animationItem.container=null,this.destroyed=!0},CanvasRenderer.prototype.renderFrame=function(t){if(!(this.renderedFrame==t&&this.renderConfig.clearCanvas===!0||this.destroyed||t===-1)){this.renderedFrame=t,this.globalData.frameNum=t-this.animationItem._isFirstFrame,this.globalData.frameId+=1,this.globalData._mdf=!this.renderConfig.clearCanvas,this.globalData.projectInterface.currentFrame=t;var e,i=this.layers.length;for(this.completeLayers||this.checkLayers(t),e=0;e=0;e-=1)(this.completeLayers||this.elements[e])&&this.elements[e].renderFrame();this.renderConfig.clearCanvas!==!0&&this.restore()}}},CanvasRenderer.prototype.buildItem=function(t){var e=this.elements;if(!e[t]&&99!=this.layers[t].ty){var i=this.createItem(this.layers[t],this,this.globalData);e[t]=i,i.initExpressions()}},CanvasRenderer.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){var t=this.pendingElements.pop();t.checkParenting()}},CanvasRenderer.prototype.hide=function(){this.animationItem.container.style.display=\"none\"},CanvasRenderer.prototype.show=function(){this.animationItem.container.style.display=\"block\"},extendPrototype([BaseRenderer],HybridRenderer),HybridRenderer.prototype.buildItem=SVGRenderer.prototype.buildItem,HybridRenderer.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){var t=this.pendingElements.pop();t.checkParenting()}},HybridRenderer.prototype.appendElementInPos=function(t,e){var i=t.getBaseElement();if(i){var r=this.layers[e];if(r.ddd&&this.supports3d)this.addTo3dContainer(i,e);else if(this.threeDElements)this.addTo3dContainer(i,e);else{for(var s,a,n,o=0;o=t)return this.threeDElements[e].perspectiveElem;e+=1}},HybridRenderer.prototype.createThreeDContainer=function(t,e){var i=createTag(\"div\");styleDiv(i);var r=createTag(\"div\");styleDiv(r),\"3d\"===e&&(i.style.width=this.globalData.compSize.w+\"px\",i.style.height=this.globalData.compSize.h+\"px\",i.style.transformOrigin=i.style.mozTransformOrigin=i.style.webkitTransformOrigin=\"50% 50%\",r.style.transform=r.style.webkitTransform=\"matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)\"),i.appendChild(r);var s={container:r,perspectiveElem:i,startPos:t,endPos:t,type:e};return this.threeDElements.push(s),s},HybridRenderer.prototype.build3dContainers=function(){var t,e,i=this.layers.length,r=\"\";for(t=0;t=0;t--)this.resizerElem.appendChild(this.threeDElements[t].perspectiveElem)},HybridRenderer.prototype.addTo3dContainer=function(t,e){for(var i=0,r=this.threeDElements.length;in?(t=s/this.globalData.compSize.w,e=s/this.globalData.compSize.w,i=0,r=(a-this.globalData.compSize.h*(s/this.globalData.compSize.w))/2):(t=a/this.globalData.compSize.h,e=a/this.globalData.compSize.h,i=(s-this.globalData.compSize.w*(a/this.globalData.compSize.h))/2,r=0),this.resizerElem.style.transform=this.resizerElem.style.webkitTransform=\"matrix3d(\"+t+\",0,0,0,0,\"+e+\",0,0,0,0,1,0,\"+i+\",\"+r+\",0,1)\"},HybridRenderer.prototype.renderFrame=SVGRenderer.prototype.renderFrame,HybridRenderer.prototype.hide=function(){this.resizerElem.style.display=\"none\"},HybridRenderer.prototype.show=function(){this.resizerElem.style.display=\"block\"},HybridRenderer.prototype.initItems=function(){if(this.buildAllItems(),this.camera)this.camera.setup();else{var t,e=this.globalData.compSize.w,i=this.globalData.compSize.h,r=this.threeDElements.length;for(t=0;to&&\"xMidYMid slice\"===h||n=0;t-=1)(this.completeLayers||this.elements[t])&&this.elements[t].renderFrame()},CVCompElement.prototype.destroy=function(){var t,e=this.layers.length;for(t=e-1;t>=0;t-=1)this.elements[t]&&this.elements[t].destroy();this.layers=null,this.elements=null},CVMaskElement.prototype.renderFrame=function(){if(this.hasMasks){var t,e,i,r,s=this.element.finalTransform.mat,a=this.element.canvasContext,n=this.masksProperties.length;for(a.beginPath(),t=0;t=0;s-=1){if(o=this.searchProcessedElement(t[s]),o?e[s]=i[o-1]:t[s]._render=r,\"fl\"==t[s].ty||\"st\"==t[s].ty)o?e[s].style.closed=!1:e[s]=this.createStyleElement(t[s]),p.push(e[s].style);else if(\"gr\"==t[s].ty){if(o)for(n=e[s].it.length,a=0;a=0;s-=1)\"tr\"==e[s].ty?(a=i[s].transform,this.renderShapeTransform(t,a)):\"sh\"==e[s].ty||\"el\"==e[s].ty||\"rc\"==e[s].ty||\"sr\"==e[s].ty?this.renderPath(e[s],i[s],a):\"fl\"==e[s].ty?this.renderFill(e[s],i[s],a):\"st\"==e[s].ty?this.renderStroke(e[s],i[s],a):\"gr\"==e[s].ty?this.renderShape(a,e[s].it,i[s].it):\"tm\"==e[s].ty;r&&this.drawLayer()},CVShapeElement.prototype.renderPath=function(t,e,i){var r,s,a,n,o=i._matMdf||e.sh._mdf||this._isFirstFrame;if(o){var h=e.sh.paths,l=i.mat;n=t._render===!1?0:h._length;var p=e.trNodes;for(p.length=0,a=0;a=t.x+t.width&&this.currentBBox.height+this.currentBBox.y>=t.y+t.height},HShapeElement.prototype.renderInnerContent=function(){if(this._renderShapeFrame(),!this.hidden&&(this._isFirstFrame||this._mdf)){var t=this.tempBoundingBox,e=999999;if(t.x=e,t.xMax=-e,t.y=e,t.yMax=-e,this.calculateBoundingBox(this.itemsData,t),t.width=t.xMax=0;t-=1){var r=this.hierarchy[t].finalTransform.mProp;this.mat.translate(-r.p.v[0],-r.p.v[1],r.p.v[2]),this.mat.rotateX(-r.rx.v).rotateY(-r.ry.v).rotateZ(r.rz.v),this.mat.scale(1/r.s.v[0],1/r.s.v[1],1/r.s.v[2]),this.mat.translate(r.a.v[0],r.a.v[1],r.a.v[2])}}if(this.p?this.mat.translate(-this.p.v[0],-this.p.v[1],this.p.v[2]):this.mat.translate(-this.px.v,-this.py.v,this.pz.v),this.a){var s=[this.p.v[0]-this.a.v[0],this.p.v[1]-this.a.v[1],this.p.v[2]-this.a.v[2]],a=Math.sqrt(Math.pow(s[0],2)+Math.pow(s[1],2)+Math.pow(s[2],2)),n=[s[0]/a,s[1]/a,s[2]/a],o=Math.sqrt(n[2]*n[2]+n[0]*n[0]),h=Math.atan2(n[1],o),l=Math.atan2(n[0],-n[2]);this.mat.rotateY(l).rotateX(-h)}if(this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v),this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]),this.mat.translate(this.globalData.compSize.w/2,this.globalData.compSize.h/2,0),this.mat.translate(0,0,this.pe.v),!this._prevMat.equals(this.mat)&&this.comp.threeDElements){e=this.comp.threeDElements.length;var p;for(t=0;ti){var r=i;i=e,e=r}return Math.min(Math.max(t,e),i)}function radiansToDegrees(t){return t/degToRads}function degreesToRadians(t){return t*degToRads}function length(t,e){if(\"number\"==typeof t||t instanceof Number)return e=e||0,Math.abs(t-e);e||(e=helperLengthArray);var i,r=Math.min(t.length,e.length),s=0;for(i=0;i.5?l/(2-n-o):l/(n+o),n){case r:e=(s-a)/l+(s1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}function hslToRgb(t){var e,i,r,s=t[0],a=t[1],n=t[2];if(0===a)e=i=r=n;else{var o=n<.5?n*(1+a):n+a-n*a,h=2*n-o;e=hue2rgb(h,o,s+1/3),i=hue2rgb(h,o,s),r=hue2rgb(h,o,s-1/3)}return[e,i,r,t[3]]}function linear(t,e,i,r,s){if(void 0===r||void 0===s)return linear(t,0,1,e,i);if(t<=e)return r;if(t>=i)return s;var a=i===e?0:(t-e)/(i-e);if(!r.length)return r+(s-r)*a;var n,o=r.length,h=createTypedArray(\"float32\",o);for(n=0;ndata.k[e].t&&tdata.k[e+1].t-t?(i=e+2,r=data.k[e+1].t):(i=e+1,r=data.k[e].t);break}}i===-1&&(i=e+1,r=data.k[e].t)}else i=0,r=0;var a={};return a.index=i,a.time=r/elem.comp.globalData.frameRate,a}function key(t){var e,i,r;if(!data.k.length||\"number\"==typeof data.k[0])throw new Error(\"The property has no keyframe at index \"+t);t-=1,e={time:data.k[t].t/elem.comp.globalData.frameRate};var s;for(s=t!==data.k.length-1||data.k[t].h?data.k[t].s:data.k[t-1].e,r=s.length,i=0;i1){for(r=0;rs.length-1)&&(e=s.length-1),o=s[s.length-1-e].t,n=a-o);var h,l,p;if(\"pingpong\"===t){var m=Math.floor((r-o)/n);if(m%2!==0)return this.getValueAtTime((n-(r-o)%n+o)/this.comp.globalData.frameRate,0)}else{if(\"offset\"===t){var f=this.getValueAtTime(o/this.comp.globalData.frameRate,0),c=this.getValueAtTime(a/this.comp.globalData.frameRate,0),d=this.getValueAtTime(((r-o)%n+o)/this.comp.globalData.frameRate,0),u=Math.floor((r-o)/n);if(this.pv.length){for(p=new Array(f.length),l=p.length,h=0;h=a)return this.pv;var n,o;i?(n=e?Math.abs(elem.comp.globalData.frameRate*e):Math.max(0,this.elem.data.op-a),o=a+n):((!e||e>s.length-1)&&(e=s.length-1),o=s[e].t,n=o-a);var h,l,p;if(\"pingpong\"===t){var m=Math.floor((a-r)/n);if(m%2===0)return this.getValueAtTime(((a-r)%n+a)/this.comp.globalData.frameRate,0)}else{if(\"offset\"===t){var f=this.getValueAtTime(a/this.comp.globalData.frameRate,0),c=this.getValueAtTime(o/this.comp.globalData.frameRate,0),d=this.getValueAtTime((n-(a-r)%n+a)/this.comp.globalData.frameRate,0),u=Math.floor((a-r)/n)+1;if(this.pv.length){for(p=new Array(f.length),l=p.length,h=0;hn){var p=o,m=i.c&&o===h-1?0:o+1,f=(n-l)/a[o].addedLength;r=bez.getPointInSegment(i.v[p],i.v[m],i.o[p],i.i[m],f,a[o]);break}l+=a[o].addedLength,o+=1}return r||(r=i.c?[i.v[0][0],i.v[0][1]]:[i.v[i._length-1][0],i.v[i._length-1][1]]),r},vectorOnPath:function(t,e,i){t=1==t?this.v.c?0:.999:t;var r=this.pointOnPath(t,e),s=this.pointOnPath(t+.001,e),a=s[0]-r[0],n=s[1]-r[1],o=Math.sqrt(Math.pow(a,2)+Math.pow(n,2)),h=\"tangent\"===i?[a/o,n/o]:[-n/o,a/o];return h},tangentOnPath:function(t,e){return this.vectorOnPath(t,e,\"tangent\")},normalOnPath:function(t,e){return this.vectorOnPath(t,e,\"normal\")},setGroupProperty:n,getValueAtTime:t},extendPrototype([m],u),extendPrototype([m],y),y.prototype.getValueAtTime=p,y.prototype.initiateExpression=ExpressionManager.initiateExpression;var g=ShapePropertyFactory.getShapeProp;ShapePropertyFactory.getShapeProp=function(t,e,i,r,s){var a=g(t,e,i,r,s);return a.propertyIndex=e.ix,a.lock=!1,3===i?o(t,e.pt,a):4===i&&o(t,e.ks,a),a.k&&t.addDynamicProperty(a),a};var v=TextSelectorProp.getTextSelectorProp;TextSelectorProp.getTextSelectorProp=function(t,e,i){return 1===e.t?new f(t,e,i):v(t,e,i)}}(),function(){function t(){if(this.data.d.x)return this.calculateExpression=ExpressionManager.initiateExpression.bind(this)(this.elem,this.data.d,this),this.addEffect(this.getExpressionValue.bind(this)),!0}TextProperty.prototype.getExpressionValue=function(t){var e=this.calculateExpression(t.t);\r\nreturn t.t=e,t},TextProperty.prototype.searchProperty=function(){var t=this.searchKeyframes(),e=this.searchExpressions();return this.kf=t||e,this.kf},TextProperty.prototype.searchExpressions=t}();var ShapeExpressionInterface=function(){function t(t,e,n){var c,d=[],u=t?t.length:0;for(c=0;c {\r\n if (slide.dataset.bg != \"\") {\r\n this.setBackground(slide);\r\n }\r\n });\r\n this.setSlideHeight();\r\n }\r\n\r\n setSlideHeight() {\r\n var slideHeight = 0;\r\n\r\n this.slides.forEach(slide => {\r\n if (slide.offsetHeight > slideHeight) {\r\n slideHeight = slide.offsetHeight;\r\n }\r\n });\r\n\r\n this.slides.forEach(slide => {\r\n slide.style.height = slideHeight + \"px\";\r\n });\r\n\r\n this.initGlider();\r\n }\r\n\r\n setBackground(slide) {\r\n slide.style.backgroundImage = \"url('\" + slide.dataset.bg + \"')\";\r\n }\r\n\r\n initGlider() {\r\n var glide = new Glide(this.el, {\r\n type: \"carousel\",\r\n startAt: 0,\r\n perView: 1,\r\n hoverpause: true\r\n });\r\n glide.mount();\r\n }\r\n}\r\n","export default class AccordionComponent {\r\n constructor(element) {\r\n this.el = element;\r\n this.container = this.el.querySelectorAll(\".accordion-headline\");\r\n this.playAccordion = this.playAccordion.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.container.forEach(element => {\r\n element.addEventListener(\"click\", event => {\r\n this.playAccordion(element);\r\n });\r\n });\r\n }\r\n\r\n playAccordion(element) {\r\n let symbol = element.querySelector(\".circle-plus\");\r\n let toggler = element.nextElementSibling;\r\n\r\n let content = toggler.querySelector(\".accordion-content\");\r\n let contentHeight = content.offsetHeight;\r\n if (element.classList.contains(\"open\")) {\r\n toggler.style.height = \"\";\r\n element.classList.remove(\"open\");\r\n symbol.classList.remove(\"opened\");\r\n symbol.classList.add(\"closed\");\r\n } else {\r\n toggler.style.height = contentHeight + \"px\";\r\n element.classList.add(\"open\");\r\n symbol.classList.remove(\"closed\");\r\n symbol.classList.add(\"opened\");\r\n }\r\n }\r\n}\r\n","import { getCookieValue, setCookie } from \"../../services/service-cookies\";\r\nimport { isMobile } from \"../../services/service-utils\";\r\n\r\nexport default class AlertComponent {\r\n constructor(element) {\r\n this.body = document.querySelector(\"body\");\r\n this.header = document.querySelector(\".header-container\");\r\n this.siteWrapper = document.querySelector(\".site-wrapper\");\r\n this.main = document.querySelector(\"main\");\r\n this.el = element;\r\n this.alertContainer = this.el.querySelector(\".alert-component-container\");\r\n\r\n this.closeAlertButton = this.el.querySelector(\r\n \".alert-component .close-container\"\r\n );\r\n this.alertId = this.el.dataset.alertid;\r\n this.alertArea = this.el.dataset.alertarea;\r\n this.body = document.querySelector(\"body\");\r\n this.closeAlert = this.closeAlert.bind(this);\r\n this.showAlert = this.showAlert.bind(this);\r\n this.headerHightCalculator = this.headerHightCalculator.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.closeAlertButton.addEventListener(\"click\", event => {\r\n this.closeAlert(this.alertId);\r\n });\r\n\r\n let resizeTimer = setTimeout(\r\n function() {\r\n this.showAlert(this.alertId);\r\n }.bind(this),\r\n 500\r\n );\r\n\r\n window.addEventListener(\"resize\", event => {\r\n clearTimeout(resizeTimer);\r\n resizeTimer = setTimeout(\r\n function() {\r\n this.showAlert(this.alertId);\r\n }.bind(this),\r\n 250\r\n );\r\n });\r\n }\r\n\r\n showAlert(id) {\r\n let hiddenCookies = getCookieValue(\"evidaHideAlert\");\r\n let aradID = getCookieValue(\"evidaAreaCode\");\r\n let cookieArray = [];\r\n let alertContainerHeight = this.alertContainer.offsetHeight;\r\n\r\n if (hiddenCookies) {\r\n let cookieIDs = hiddenCookies.split(\",\");\r\n cookieIDs.forEach(element => {\r\n cookieArray.push(element);\r\n });\r\n\r\n if (\r\n !cookieArray.includes(id) &&\r\n (!this.alertArea || this.alertArea == aradID)\r\n ) {\r\n this.el.style.height = alertContainerHeight + \"px\";\r\n this.el.classList.remove(\"hide-alert\");\r\n this.headerHightCalculator(this.header);\r\n }\r\n } else if (!this.alertArea || this.alertArea == aradID) {\r\n this.el.style.height = alertContainerHeight + \"px\";\r\n this.el.classList.remove(\"hide-alert\");\r\n this.headerHightCalculator(this.header);\r\n }\r\n }\r\n\r\n closeAlert(id) {\r\n this.el.style.height = \"0px\";\r\n this.el.classList.add(\"hide-alert\");\r\n let hiddenCookies = id;\r\n if (getCookieValue(\"evidaHideAlert\")) {\r\n hiddenCookies = getCookieValue(\"evidaHideAlert\") + \",\" + id;\r\n }\r\n setCookie(\"evidaHideAlert\", hiddenCookies);\r\n this.headerHightCalculator(this.header);\r\n }\r\n\r\n headerHightCalculator(element) {\r\n let resizeTimer = {};\r\n let mobilePadding = this.siteWrapper.classList.contains(\r\n \"active-selfservice\"\r\n )\r\n ? 110\r\n : 80;\r\n let desktopPadding = this.siteWrapper.classList.contains(\r\n \"active-selfservice\"\r\n )\r\n ? 183\r\n : 164;\r\n let thisThreshold = isMobile() ? mobilePadding : desktopPadding;\r\n\r\n resizeTimer = setTimeout(\r\n function() {\r\n let newHeight =\r\n element.offsetHeight < thisThreshold\r\n ? thisThreshold\r\n : element.offsetHeight;\r\n\r\n this.main.style.paddingTop = newHeight + \"px\";\r\n }.bind(this),\r\n 500\r\n );\r\n\r\n window.addEventListener(\"resize\", event => {\r\n clearTimeout(resizeTimer);\r\n resizeTimer = setTimeout(\r\n function() {\r\n let newHeight =\r\n element.offsetHeight < thisThreshold\r\n ? thisThreshold\r\n : element.offsetHeight;\r\n\r\n this.main.style.paddingTop = newHeight + \"px\";\r\n }.bind(this),\r\n 250\r\n );\r\n });\r\n }\r\n}\r\n","import { isMobile } from \"../../services/service-utils\";\r\n\r\nexport default class AnchorMenu {\r\n constructor(element) {\r\n this.el = element;\r\n this.list = this.el.querySelector(\"ul\");\r\n this.anchorLinks = this.el.querySelectorAll(\"a\");\r\n this.anchorSections = document.querySelectorAll(\".rowanchor\");\r\n this.footer = document.querySelector(\"footer\");\r\n this.scrollPoints = this.scrollPoints.bind(this);\r\n this.durations = 0;\r\n this.pinmenu = {};\r\n this.pinMenu = this.pinMenu.bind(this);\r\n this.footerObserver = this.footerObserver.bind(this);\r\n this.checkForMargin = this.checkForMargin.bind(this);\r\n this.openMenu = this.openMenu.bind(this);\r\n this.closeMenu = this.closeMenu.bind(this);\r\n this.anchorWidth = 10;\r\n this.isOpening = false;\r\n this.isClosing = false;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.anchorLinks.forEach(anchorlink => {\r\n anchorlink.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n this.scrollToAnchor(event, anchorlink);\r\n });\r\n var linkContent = anchorlink.querySelector(\"span\");\r\n this.anchorWidth =\r\n linkContent.offsetWidth + 10 > this.anchorWidth\r\n ? linkContent.offsetWidth + 10\r\n : this.anchorWidth;\r\n });\r\n\r\n this.el.addEventListener(\r\n \"mouseenter\",\r\n event => {\r\n this.openMenu(this.anchorWidth, \"open\");\r\n },\r\n false\r\n );\r\n\r\n this.el.addEventListener(\r\n \"mouseleave\",\r\n event => {\r\n this.closeMenu(10, \"close\");\r\n },\r\n false\r\n );\r\n\r\n if (this.anchorSections) {\r\n this.anchorSections.forEach(section => {\r\n this.checkForMargin(section);\r\n });\r\n }\r\n\r\n this.scrollPoints();\r\n this.pinMenu();\r\n this.footerObserver();\r\n }\r\n\r\n openMenu(width, direction) {\r\n var stagger = 0.5;\r\n var timerid;\r\n if (timerid) {\r\n clearTimeout(timerid);\r\n }\r\n if (!this.isClosing) {\r\n this.isOpening = true;\r\n this.list.style.width = width + \"px\";\r\n this.anchorLinks.forEach((anchorLink, index) => {\r\n timerid = setTimeout(() => {\r\n anchorLink.style.width = width + \"px\";\r\n if (index + 1 === this.anchorLinks.length) {\r\n this.isOpening = false;\r\n clearTimeout(timerid);\r\n }\r\n }, 100 * stagger++);\r\n });\r\n }\r\n }\r\n\r\n closeMenu(width, direction) {\r\n var stagger = 0.5;\r\n var timerid;\r\n var arrayNodes = Array.from(this.anchorLinks);\r\n if (timerid) {\r\n clearTimeout(timerid);\r\n }\r\n if (!this.isOpening) {\r\n this.isClosing = true;\r\n arrayNodes\r\n .slice()\r\n .reverse()\r\n .forEach((anchorLink, index) => {\r\n timerid = setTimeout(() => {\r\n anchorLink.style.width = width + \"px\";\r\n if (index + 1 === this.anchorLinks.length) {\r\n this.isClosing = false;\r\n clearTimeout(timerid);\r\n }\r\n }, 100 * stagger++);\r\n });\r\n this.list.style.width = \"auto\";\r\n } else {\r\n setTimeout(() => {\r\n this.closeMenu(width, direction);\r\n }, 300);\r\n }\r\n }\r\n\r\n footerObserver() {\r\n var main = document.querySelector(\"main\");\r\n var minusHeight = window.innerHeight - 150;\r\n\r\n var intersectionObserver = new IntersectionObserver(\r\n function(entries) {\r\n if (entries[0].intersectionRatio > 0) {\r\n this.pinmenu.duration(main.offsetHeight - minusHeight);\r\n this.pinmenu.refresh();\r\n } else {\r\n this.pinmenu.duration(0);\r\n this.pinmenu.refresh();\r\n }\r\n }.bind(this)\r\n );\r\n intersectionObserver.observe(this.footer);\r\n\r\n window.addEventListener(\r\n \"orientationchange\",\r\n function() {\r\n setTimeout(\r\n function() {\r\n this.pinmenu.removePin(true);\r\n this.pinMenu();\r\n }.bind(this),\r\n 10\r\n );\r\n }.bind(this),\r\n false\r\n );\r\n }\r\n\r\n scrollPoints() {\r\n var ctrl = new ScrollMagic.Controller();\r\n\r\n this.anchorSections.forEach(section => {\r\n var height = section.offsetHeight;\r\n var anchorLink = document.querySelector(\r\n \"[href='#\" + section.dataset.anchor + \"']\"\r\n );\r\n new ScrollMagic.Scene({\r\n triggerElement: section,\r\n triggerHook: 0.5,\r\n duration: height\r\n })\r\n .on(\"enter\", function() {\r\n anchorLink.classList.add(\"active\");\r\n })\r\n .on(\"leave\", function() {\r\n anchorLink.classList.remove(\"active\");\r\n })\r\n .addTo(ctrl);\r\n });\r\n }\r\n\r\n pinMenu() {\r\n var main = document.querySelector(\"main\");\r\n var minusHeight = window.innerHeight + 50;\r\n var ctrl1 = new ScrollMagic.Controller();\r\n\r\n this.pinmenu = new ScrollMagic.Scene({\r\n triggerElement: \"main\",\r\n triggerHook: 0\r\n })\r\n .setPin(\".anchor-menu\")\r\n .addTo(ctrl1);\r\n }\r\n\r\n getOffsetTop(element) {\r\n let offsetTop = 0;\r\n while (element) {\r\n offsetTop += element.offsetTop;\r\n element = element.offsetParent;\r\n }\r\n return offsetTop;\r\n }\r\n\r\n filterPath(string) {\r\n return string\r\n .replace(/^\\//, \"\")\r\n .replace(/(index|default).[a-zA-Z]{3,4}/, \"\")\r\n .replace(/\\//, \"\");\r\n }\r\n\r\n scrollToAnchor(event, anchorElement) {\r\n if (this.animatedSections) {\r\n this.animatedSections.forEach(element => {\r\n element.classList.add(\"animation-done\");\r\n });\r\n }\r\n\r\n let anchorLink = anchorElement.dataset.anchorlink;\r\n let anchor = document.querySelector(\"[data-anchor='\" + anchorLink + \"']\");\r\n\r\n var scrollToPosition = this.getOffsetTop(anchor) - 145;\r\n\r\n window.scrollTo(0.1, scrollToPosition);\r\n }\r\n\r\n checkForMargin(section) {\r\n var elements = section.children;\r\n var firstSection = elements[1];\r\n var lastElement = section.lastElementChild;\r\n if (lastElement && lastElement.classList.contains(\"section-padding\")) {\r\n section.classList.add(\"add-margin-bottom\");\r\n }\r\n if (firstSection && !firstSection.classList.contains(\"section-padding\")) {\r\n section.classList.add(\"add-margin-top\");\r\n }\r\n }\r\n}\r\n","export default class AnimateSection {\r\n constructor(element) {\r\n this.el = element;\r\n this.sections = this.el.querySelectorAll(\".animate-section\");\r\n this.observeOnScroll = this.observeOnScroll.bind(this);\r\n this.atTop = window.scrollY === 0;\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (location.hash.length == 0) {\r\n this.observeOnScroll();\r\n } else {\r\n this.animateAll();\r\n }\r\n }\r\n\r\n animateAll() {\r\n this.sections.forEach(section => {\r\n section.classList.add(\"animation-done\");\r\n });\r\n }\r\n\r\n observeOnScroll() {\r\n const observer = new IntersectionObserver((entries, observer) => {\r\n entries.forEach((entry, index) => {\r\n setTimeout(() => {\r\n if (this.atTop) {\r\n if (entry.intersectionRatio > 0) {\r\n entry.target.classList.add(\"animation-done\");\r\n if (entry.target.classList.contains(\"animation-done\")) {\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n }\r\n }, 250 * index);\r\n\r\n if (!this.atTop) {\r\n if (entry.intersectionRatio > 0) {\r\n entry.target.classList.add(\"animation-done\");\r\n if (entry.target.classList.contains(\"animation-done\")) {\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n // start observing your element\r\n this.sections.forEach(section => {\r\n observer.observe(section);\r\n });\r\n }\r\n}\r\n","//import users from \"../../json/mockdata-users.json\";\r\nimport { EventBus, EventTypes } from \"../../consts/const-event-types\";\r\n\r\n/*\r\nUse App.js for global functionality\r\n*/\r\n\r\nexport default class App {\r\n constructor(element) {\r\n // save a reference of your component-element so you can access it from your methods:\r\n this.el = element;\r\n\r\n // bind your methods to 'this' when calling them from event-listeners:\r\n this.onAppReady = this.onAppReady.bind(this);\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n // Use init-method to store DOM-references and setup initial event-listeners:\r\n if (this.el)\r\n this.someElement = this.el.querySelector(\"[data-example-js-selector]\");\r\n\r\n // You could listen for all components to be instantiated to make sure events between components are captured:\r\n EventBus.addEventListener(EventTypes.ALL_COMPONENTS_READY, this.onAppReady);\r\n }\r\n\r\n onAppReady(event) {\r\n //console.log(event.type)\r\n\r\n // create your own event-types for component-to-component communication (fx. this event will be picked up by Header.js component):\r\n const eventData = { detail: new Date().toJSON() };\r\n const ev = new CustomEvent(EventTypes.MY_CUSTOM_EVENT, eventData);\r\n EventBus.dispatchEvent(ev);\r\n\r\n // this.exampleES6Features()\r\n // this.exampleRenderSomeContent()\r\n }\r\n\r\n exampleES6Features() {\r\n console.log(\"----------------------------\");\r\n console.log(\"Here are some random ES6+ features...\");\r\n\r\n const someString = \"something is rotten in Denmark\";\r\n const hasDenmark = someString.includes(\"Denmark\");\r\n console.log(\"hasDenmark\", hasDenmark);\r\n\r\n const someNodeList = document.querySelectorAll(\"p\");\r\n console.log(\"someNodeList\", someNodeList);\r\n\r\n // using ES6 syntax to convert the NodeList to an Array (gives access to useful array-methods):\r\n const convertedToArray = [...someNodeList];\r\n console.log(\"nodeList converted to array\", convertedToArray);\r\n\r\n // import json-data:\r\n console.log(\"imported JSON-data\", users);\r\n\r\n // using forEach for looping over array-items:\r\n users.forEach((user, index) => {\r\n // using Spread operators to extract properties:\r\n const { name, gender } = user;\r\n console.log(\"forEach\", index, name, gender);\r\n });\r\n\r\n // using a for..of loop:\r\n for (const user of users) {\r\n console.log(\"for of loop\", user.stars);\r\n }\r\n\r\n // using map to loop and return a new array:\r\n const userNames = users.map(user => user.name);\r\n console.log(\"userNames\", userNames);\r\n\r\n // chain .filter and .map to create new array:\r\n const femaleUserNamesArray = users\r\n .filter(user => user.gender === \"female\")\r\n .map(user => user.name);\r\n console.log(\"femaleUserNamesArray\", femaleUserNamesArray);\r\n\r\n // using reduce to fx. sum up values in array:\r\n const sumUserStars = this.sumUserStars(users);\r\n console.log(\"sumUserStars\", sumUserStars);\r\n console.log(\"----------------------------\");\r\n }\r\n\r\n sumUserStars(users) {\r\n return users.reduce((sum, current) => {\r\n return sum + current.stars;\r\n }, 0);\r\n }\r\n\r\n exampleRenderSomeContent() {\r\n const htmlTemplate = `\r\n
\r\n

\r\n HTML-template created from index.js\r\n
\r\n ${users[0].name} injected\r\n

\r\n
\r\n `;\r\n\r\n if (this.someElement) {\r\n this.someElement.innerHTML = htmlTemplate;\r\n console.log(\"someElement\", this.someElement);\r\n }\r\n }\r\n}\r\n","export default class ConnectionComponent {\r\n constructor(element) {\r\n this.el = element;\r\n this.gridid = this.el.dataset.gridid;\r\n this.nodeId = this.el.dataset.nodeid;\r\n this.title = this.el.dataset.formtitle;\r\n this.endStep = this.el.querySelector(\".end-step\");\r\n this.endStepDescription = this.el.querySelector(\".end-step-description\");\r\n this.slides = this.el.querySelectorAll(\"fieldset\");\r\n this.initialSlide = this.el.querySelector(\".center\");\r\n this.initialSlideNr = this.initialSlide.dataset.slide;\r\n this.slideCounter = this.slides.length;\r\n this.initialStep = this.el.querySelector(\r\n \"[data-step='\" + this.initialSlideNr + \"']\"\r\n );\r\n this.prev = this.el.querySelector(\"[data-prev]\");\r\n this.next = this.el.querySelector(\"[data-next]\");\r\n this.steps = this.el.querySelectorAll(\".connection-steps ul li\");\r\n this.slideContainer = this.el.querySelector(\".fieldset-container\");\r\n this.navigation = this.el.querySelector(\".connection-navigation\");\r\n this.editLink = this.el.querySelectorAll(\".edit\");\r\n this.fileShowContainer = this.el.querySelector(\".upload-files\");\r\n this.floorplanSvg = this.el.querySelector(\".floorplan-svg\");\r\n this.attachments = [];\r\n\r\n this.address = this.el.querySelector(\"#address\");\r\n this.zip = this.el.querySelector(\"#zip\");\r\n this.city = this.el.querySelector(\"#city\");\r\n this.businessname = this.el.querySelector(\"#businessname\");\r\n this.businesscvr = this.el.querySelector(\"#businesscvr\");\r\n this.businessean = this.el.querySelector(\"#businessean\");\r\n this.businessaddress = this.el.querySelector(\"#businessaddress\");\r\n this.businesszip = this.el.querySelector(\"#businesszip\");\r\n this.businesscity = this.el.querySelector(\"#businesscity\");\r\n this.businesscontactname = this.el.querySelector(\"#businesscontactname\");\r\n this.businesscontactphone = this.el.querySelector(\"#businesscontactphone\");\r\n this.businesscontactemail = this.el.querySelector(\"#businesscontactemail\");\r\n this.advisername = this.el.querySelector(\"#advisername\");\r\n this.adveserphone = this.el.querySelector(\"#adviserphone\");\r\n this.adviseremail = this.el.querySelector(\"#adviseremail\");\r\n this.heating = this.el.querySelector(\"#heating\");\r\n this.processing = this.el.querySelector(\"#processing\");\r\n this.forbrug = this.el.querySelector(\"#forbrug\");\r\n this.forventedForbrug = this.el.querySelector(\"#forventedforbrug\");\r\n this.effect = this.el.querySelector(\"#effect\");\r\n this.files = this.el.querySelector(\"#files\");\r\n\r\n this.dato = this.el.querySelector(\"#datepicker\");\r\n this.postFormButton = this.el.querySelector(\".post-form\");\r\n this.dataRow = this.el.querySelectorAll(\".data-row\");\r\n\r\n this.addressContainer = this.el.querySelector(\"[data-address]\");\r\n this.businessContainer = this.el.querySelector(\"[data-business]\");\r\n this.contactContainer = this.el.querySelector(\"[data-contact]\");\r\n this.adviserContainer = this.el.querySelector(\"[data-adviser]\");\r\n this.purposeContainer = this.el.querySelector(\"[data-purpose]\");\r\n this.consumptionContainer = this.el.querySelector(\"[data-consumption]\");\r\n this.expectedContainer = this.el.querySelector(\"[data-expected]\");\r\n this.effectContainer = this.el.querySelector(\"[data-effect]\");\r\n this.fileContainer = this.el.querySelector(\"[data-file]\");\r\n this.dateContainer = this.el.querySelector(\"[data-date]\");\r\n\r\n this.moveSlide = this.moveSlide.bind(this);\r\n this.validateForm = this.validateForm.bind(this);\r\n this.confirmForm = this.confirmForm.bind(this);\r\n this.moveToSlide = this.moveToSlide.bind(this);\r\n this.postform = this.postform.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n let minHeight = this.initialSlide.offsetHeight;\r\n this.slideContainer.style.height = minHeight + 40 + \"px\";\r\n this.initialStep.classList.add(\"active\");\r\n\r\n this.next.addEventListener(\"click\", event => {\r\n let thisActiveSlide = this.el.querySelector(\".center\");\r\n this.validateForm(thisActiveSlide);\r\n });\r\n\r\n this.prev.addEventListener(\"click\", event => {\r\n this.moveSlide(\"backwards\");\r\n });\r\n\r\n this.editLink.forEach(link => {\r\n link.addEventListener(\"click\", event => {\r\n var slideNumber = Number(link.dataset.edit);\r\n this.moveToSlide(slideNumber);\r\n });\r\n });\r\n\r\n this.postFormButton.addEventListener(\"click\", event => {\r\n this.postform();\r\n });\r\n\r\n this.files.addEventListener(\"change\", event => {\r\n if (this.files.files.length > 0) {\r\n this.fileContainer.classList.add(\"active\");\r\n const formData = new FormData();\r\n const files = this.files.files;\r\n for (let i = 0; i < this.files.files.length; i++) {\r\n if (this.files.files[i].size > 10500000) {\r\n alert(\"filen: \" + this.files.files[i].name + \" er for stor\");\r\n return false;\r\n } else {\r\n formData.append(\"files\", this.files.files[i]);\r\n }\r\n }\r\n\r\n fetch(\"/umbraco/api/contact/uploadmedia\", {\r\n method: \"POST\",\r\n body: formData\r\n })\r\n .then(response => response.json())\r\n .then(result => {\r\n this.attachments = this.attachments.concat(result.UploadIds);\r\n });\r\n }\r\n Array.from(this.files.files).forEach(file => {\r\n this.floorplanSvg.classList.add(\"active\");\r\n\r\n this.fileShowContainer.innerHTML =\r\n this.fileShowContainer.innerHTML + \"

Fil: \" + file.name + \"

\";\r\n });\r\n });\r\n }\r\n\r\n moveToSlide(slideNr) {\r\n slideNr = Number(slideNr);\r\n var slideToSlide = this.el.querySelector(\"[data-slide='\" + slideNr + \"']\");\r\n\r\n this.slides.forEach(slide => {\r\n if (slide.dataset.slide > slideNr) {\r\n slide.classList.remove(\"left\");\r\n slide.classList.remove(\"center\");\r\n slide.classList.add(\"right\");\r\n }\r\n });\r\n this.slideContainer.style.height = slideToSlide.offsetHeight + 40 + \"px\";\r\n this.navigation.style.display = \"\";\r\n slideToSlide.classList.add(\"center\");\r\n slideToSlide.classList.remove(\"left\");\r\n\r\n console.log(\"slideToSlide: \", slideToSlide);\r\n this.steps.forEach(step => {\r\n var stepNr = Number(step.dataset.step);\r\n if (stepNr == slideNr) {\r\n step.classList.add(\"active\");\r\n } else {\r\n step.classList.remove(\"active\");\r\n }\r\n });\r\n slideToSlide.scrollIntoView({ block: \"center\" });\r\n }\r\n\r\n validateForm(slide) {\r\n var requiredFields = slide.querySelectorAll(\"[required]\");\r\n var canPostForm = true;\r\n requiredFields.forEach(field => {\r\n var fieldID = field.id;\r\n var errorText = \".error-\" + fieldID;\r\n var errorbox = slide.querySelector(errorText);\r\n if (!field.validity.valid) {\r\n canPostForm = false;\r\n errorbox.classList.add(\"active\");\r\n\r\n this.slideContainer.style.height = slide.offsetHeight + 40 + \"px\";\r\n } else {\r\n errorbox.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n for (let i = 0; i < requiredFields.length; i++) {\r\n if (!requiredFields[i].validity.valid) {\r\n break;\r\n }\r\n }\r\n\r\n if (canPostForm) {\r\n this.moveSlide(\"forward\");\r\n }\r\n }\r\n\r\n moveSlide(direction) {\r\n let thisSlide = this.el.querySelector(\".center\");\r\n let required = thisSlide.querySelectorAll(\"[required]\");\r\n let thisSlideNr = Number(thisSlide.dataset.slide);\r\n let nextSlideNr = thisSlideNr + 1;\r\n let prevSlideNr = thisSlideNr - 1;\r\n let thisStep = this.el.querySelector(\"[data-step='\" + thisSlideNr + \"']\");\r\n\r\n if (direction === \"forward\" && nextSlideNr <= this.slideCounter) {\r\n let nextSlide = this.el.querySelector(\r\n \"[data-slide='\" + nextSlideNr + \"']\"\r\n );\r\n let thisHeader = nextSlide.querySelector(\".h2\");\r\n let nextStep = this.el.querySelector(\"[data-step='\" + nextSlideNr + \"']\");\r\n this.slideContainer.style.height = nextSlide.offsetHeight + 40 + \"px\";\r\n thisStep.classList.remove(\"active\");\r\n nextStep.classList.add(\"active\");\r\n thisSlide.classList.add(\"left\");\r\n thisSlide.classList.remove(\"center\");\r\n nextSlide.classList.add(\"center\");\r\n nextSlide.classList.remove(\"right\");\r\n this.prev.classList.remove(\"inactive\");\r\n if (nextSlideNr === this.slideCounter) {\r\n this.confirmForm();\r\n this.slideContainer.style.height = nextSlide.offsetHeight + 40 + \"px\";\r\n this.navigation.style.display = \"none\";\r\n }\r\n thisHeader.scrollIntoView({ block: \"center\" });\r\n }\r\n\r\n if (direction === \"backwards\" && prevSlideNr > 0) {\r\n let prevSlide = this.el.querySelector(\r\n \"[data-slide='\" + prevSlideNr + \"']\"\r\n );\r\n let thisHeader = prevSlide.querySelector(\".h2\");\r\n let prevStep = this.el.querySelector(\"[data-step='\" + prevSlideNr + \"']\");\r\n this.slideContainer.style.height = prevSlide.offsetHeight + 40 + \"px\";\r\n thisStep.classList.remove(\"active\");\r\n prevStep.classList.add(\"active\");\r\n thisSlide.classList.add(\"right\");\r\n thisSlide.classList.remove(\"center\");\r\n prevSlide.classList.add(\"center\");\r\n prevSlide.classList.remove(\"left\");\r\n this.prev.classList.remove(\"inactive\");\r\n thisHeader.scrollIntoView({ block: \"center\" });\r\n this.next.innerHTML = \"Næste\";\r\n\r\n if (prevSlideNr === 1) {\r\n this.prev.classList.add(\"inactive\");\r\n }\r\n }\r\n }\r\n\r\n confirmForm() {\r\n const addressInfo = `

${this.address.value}
${this.zip.value} ${this.city.value}

`;\r\n\r\n const businessInfo = `

${this.businessname.value}
CVR: ${\r\n this.businesscvr.value\r\n }${\r\n this.businessean.value != \"\" ? `
EAN: ${this.businessean.value}` : ``\r\n }
${this.businessaddress.value}
${this.businesszip.value} ${\r\n this.businesscity.value\r\n }

`;\r\n\r\n const contactInfo = `

${this.businesscontactname.value}
${\r\n this.businesscontactemail.value\r\n }${\r\n this.businesscontactphone.value != \"\"\r\n ? `
${this.businesscontactphone.value}`\r\n : ``\r\n }

`;\r\n\r\n const AdvisorInfo = `

${this.advisername.value}
${\r\n this.adveserphone.value\r\n }${this.adviseremail != \"\" ? `
${this.adviseremail.value}` : ``}

`;\r\n\r\n const consumptionInfo = `

${\r\n this.heating.checked ? `Rumopvarmning` : `Process`\r\n }

`;\r\n\r\n const usageInfo = `

${\r\n this.forbrug.value != \"\" ? this.forbrug.value : `Ikke oplyst`\r\n }

`;\r\n const expectedInfo = `

${\r\n this.forventedForbrug.value != \"\"\r\n ? this.forventedForbrug.value\r\n : `Ikke oplyst`\r\n }

`;\r\n\r\n const effectInfo = `

${\r\n this.effect.value != \"\" ? this.effect.value : `Ikke oplyst`\r\n }

`;\r\n const fileInfo = `

${\r\n this.attachments.length > 0 ? `Tilføjet` : `Mangler`\r\n }

`;\r\n const dateInfo = `

${\r\n this.dato.value != \"\" ? this.dato.value : `Ikke oplyst`\r\n }`;\r\n\r\n this.addressContainer.innerHTML = addressInfo;\r\n this.businessContainer.innerHTML = businessInfo;\r\n this.contactContainer.innerHTML = contactInfo;\r\n this.adviserContainer.innerHTML = AdvisorInfo;\r\n this.purposeContainer.innerHTML = consumptionInfo;\r\n this.consumptionContainer.innerHTML = usageInfo;\r\n this.expectedContainer.innerHTML = expectedInfo;\r\n this.effectContainer.innerHTML = effectInfo;\r\n this.fileContainer.innerHTML = fileInfo;\r\n this.dateContainer.innerHTML = dateInfo;\r\n }\r\n\r\n postform() {\r\n const body = {\r\n title: this.title,\r\n originatingModuleId: this.gridid,\r\n originatingContentId: this.nodeId,\r\n fields: [\r\n {\r\n title: this.address.getAttribute(\"aria-label\"),\r\n value: this.address.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.zip.getAttribute(\"aria-label\"),\r\n value: this.zip.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.city.getAttribute(\"aria-label\"),\r\n value: this.city.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.businessname.getAttribute(\"aria-label\"),\r\n value: this.businessname.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.businesscvr.getAttribute(\"aria-label\"),\r\n value: this.businesscvr.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.businessean.getAttribute(\"aria-label\"),\r\n value: this.businessean.value,\r\n type: \"string\"\r\n },\r\n {\r\n title:\r\n \"Virksomhed \" + this.businessaddress.getAttribute(\"aria-label\"),\r\n value: this.businessaddress.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: \"Virksomhed \" + this.businesszip.getAttribute(\"aria-label\"),\r\n value: this.businesszip.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: \"Virksomhed \" + this.businesscity.getAttribute(\"aria-label\"),\r\n value: this.businesscity.value,\r\n type: \"string\"\r\n },\r\n {\r\n title:\r\n \"Kontakt \" + this.businesscontactname.getAttribute(\"aria-label\"),\r\n value: this.businesscontactname.value,\r\n type: \"string\"\r\n },\r\n {\r\n title:\r\n \"Kontakt \" + this.businesscontactemail.getAttribute(\"aria-label\"),\r\n value: this.businesscontactemail.value,\r\n type: \"string\"\r\n },\r\n {\r\n title:\r\n \"Kontakt \" + this.businesscontactphone.getAttribute(\"aria-label\"),\r\n value: this.businesscontactphone.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: \"Rådgiver \" + this.advisername.getAttribute(\"aria-label\"),\r\n value: this.advisername.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: \"Rådgiver \" + this.adveserphone.getAttribute(\"aria-label\"),\r\n value: this.adveserphone.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: \"Rådgiver \" + this.adviseremail.getAttribute(\"aria-label\"),\r\n value: this.adviseremail.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: \"Rumopvarmning\",\r\n value: this.heating.checked,\r\n type: \"bool\"\r\n },\r\n {\r\n title: \"Process\",\r\n value: this.processing.checked,\r\n type: \"bool\"\r\n },\r\n {\r\n title: this.forbrug.getAttribute(\"aria-label\"),\r\n value: this.forbrug.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.forventedForbrug.getAttribute(\"aria-label\"),\r\n value: this.forventedForbrug.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.effect.getAttribute(\"aria-label\"),\r\n value: this.effect.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.dato.getAttribute(\"aria-label\"),\r\n value: this.dato.value,\r\n type: \"string\"\r\n }\r\n ],\r\n attachments: this.attachments\r\n };\r\n\r\n fetch(\"/umbraco/api/connectionform/submitform\", {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify(body)\r\n })\r\n .then(result => {\r\n if (!result.ok) {\r\n throw result;\r\n }\r\n this.editLink.forEach(edit => {\r\n edit.style.display = \"none\";\r\n });\r\n this.endStep.innerHTML = this.endStep.dataset.success;\r\n this.endStepDescription = this.endStepDescription.dataset.success;\r\n this.endStep.scrollIntoView({ block: \"center\" });\r\n this.postFormButton.style.display = \"none\";\r\n })\r\n .catch(error => {\r\n console.log(\"error\");\r\n //this.errorPopUp.classList.add(\"show-popup\");\r\n });\r\n }\r\n}\r\n","export default class ConnectionComponent {\r\n constructor(element) {\r\n this.el = element;\r\n this.gridid = this.el.dataset.gridid;\r\n this.nodeId = this.el.dataset.nodeid;\r\n this.title = this.el.dataset.formtitle;\r\n this.endStep = this.el.querySelector(\".end-step\");\r\n this.endStepDescription = this.el.querySelector(\".end-step-description\");\r\n this.slides = this.el.querySelectorAll(\"fieldset\");\r\n this.initialSlide = this.el.querySelector(\".center\");\r\n this.initialSlideNr = this.initialSlide.dataset.slide;\r\n this.slideCounter = this.slides.length;\r\n this.initialStep = this.el.querySelector(\r\n \"[data-step='\" + this.initialSlideNr + \"']\"\r\n );\r\n this.prev = this.el.querySelector(\"[data-prev]\");\r\n this.next = this.el.querySelector(\"[data-next]\");\r\n this.steps = this.el.querySelectorAll(\".connection-steps ul li\");\r\n this.slideContainer = this.el.querySelector(\".fieldset-container\");\r\n this.navigation = this.el.querySelector(\".connection-navigation\");\r\n this.editLink = this.el.querySelectorAll(\".edit\");\r\n\r\n this.address = this.el.querySelector(\"#address\");\r\n\r\n this.zip = this.el.querySelector(\"#zip\");\r\n this.city = this.el.querySelector(\"#city\");\r\n this.ownerName = this.el.querySelector(\"#ownername\");\r\n this.ownerPhone = this.el.querySelector(\"#ownerphone\");\r\n this.ownerEmail = this.el.querySelector(\"#owneremail\");\r\n this.ownerAddress = this.el.querySelector(\"#owneraddress\");\r\n this.ownerZip = this.el.querySelector(\"#ownerzip\");\r\n this.ownerCity = this.el.querySelector(\"#ownercity\");\r\n this.otherName = this.el.querySelector(\"#othername\");\r\n this.otherPhone = this.el.querySelector(\"#otherphone\");\r\n this.otherEmail = this.el.querySelector(\"#otheremail\");\r\n this.forbrug = this.el.querySelector(\"#forbrug\");\r\n this.forventedForbrug = this.el.querySelector(\"#forventedforbrug\");\r\n this.arial = this.el.querySelector(\"#arial\");\r\n this.dato = this.el.querySelector(\"#datepicker\");\r\n this.postFormButton = this.el.querySelector(\".post-form\");\r\n this.dataRow = this.el.querySelectorAll(\".data-row\");\r\n\r\n this.addressContainer = this.el.querySelector(\"[data-address]\");\r\n this.ownerContainer = this.el.querySelector(\"[data-owner]\");\r\n this.otherOwnerContainer = this.el.querySelector(\"[data-otherowner]\");\r\n this.usageContainer = this.el.querySelector(\"[data-usage]\");\r\n this.expectedContainer = this.el.querySelector(\"[data-expected]\");\r\n this.areaContainer = this.el.querySelector(\"[data-area]\");\r\n this.dateContainer = this.el.querySelector(\"[data-date]\");\r\n\r\n this.moveSlide = this.moveSlide.bind(this);\r\n this.validateForm = this.validateForm.bind(this);\r\n this.confirmForm = this.confirmForm.bind(this);\r\n this.moveToSlide = this.moveToSlide.bind(this);\r\n this.postform = this.postform.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n let minHeight = this.initialSlide.offsetHeight;\r\n this.slideContainer.style.height = minHeight + 40 + \"px\";\r\n this.initialStep.classList.add(\"active\");\r\n\r\n this.next.addEventListener(\"click\", event => {\r\n let thisActiveSlide = this.el.querySelector(\".center\");\r\n this.validateForm(thisActiveSlide);\r\n });\r\n\r\n this.prev.addEventListener(\"click\", event => {\r\n this.moveSlide(\"backwards\");\r\n });\r\n\r\n this.editLink.forEach(link => {\r\n link.addEventListener(\"click\", event => {\r\n var slideNumber = Number(link.dataset.edit);\r\n this.moveToSlide(slideNumber);\r\n });\r\n });\r\n\r\n this.postFormButton.addEventListener(\"click\", event => {\r\n this.postform();\r\n });\r\n }\r\n\r\n moveToSlide(slideNr) {\r\n slideNr = Number(slideNr);\r\n var slideToSlide = this.el.querySelector(\"[data-slide='\" + slideNr + \"']\");\r\n\r\n this.slides.forEach(slide => {\r\n if (slide.dataset.slide > slideNr) {\r\n slide.classList.remove(\"left\");\r\n slide.classList.remove(\"center\");\r\n slide.classList.add(\"right\");\r\n }\r\n });\r\n this.slideContainer.style.height = slideToSlide.offsetHeight + 40 + \"px\";\r\n this.navigation.style.display = \"\";\r\n slideToSlide.classList.add(\"center\");\r\n slideToSlide.classList.remove(\"left\");\r\n\r\n this.steps.forEach(step => {\r\n var stepNr = Number(step.dataset.step);\r\n if (stepNr == slideNr) {\r\n step.classList.add(\"active\");\r\n } else {\r\n step.classList.remove(\"active\");\r\n }\r\n });\r\n slideToSlide.scrollIntoView({ block: \"center\" });\r\n }\r\n\r\n validateForm(slide) {\r\n var requiredFields = slide.querySelectorAll(\"[required]\");\r\n var canPostForm = true;\r\n requiredFields.forEach(field => {\r\n var fieldID = field.id;\r\n var errorText = \".error-\" + fieldID;\r\n var errorbox = slide.querySelector(errorText);\r\n if (!field.validity.valid) {\r\n canPostForm = false;\r\n errorbox.classList.add(\"active\");\r\n\r\n this.slideContainer.style.height = slide.offsetHeight + 40 + \"px\";\r\n } else {\r\n errorbox.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n for (let i = 0; i < requiredFields.length; i++) {\r\n if (!requiredFields[i].validity.valid) {\r\n break;\r\n }\r\n }\r\n\r\n if (canPostForm) {\r\n this.moveSlide(\"forward\");\r\n }\r\n }\r\n\r\n moveSlide(direction) {\r\n let thisSlide = this.el.querySelector(\".center\");\r\n let required = thisSlide.querySelectorAll(\"[required]\");\r\n let thisSlideNr = Number(thisSlide.dataset.slide);\r\n let nextSlideNr = thisSlideNr + 1;\r\n let prevSlideNr = thisSlideNr - 1;\r\n let thisStep = this.el.querySelector(\"[data-step='\" + thisSlideNr + \"']\");\r\n\r\n if (direction === \"forward\" && nextSlideNr <= this.slideCounter) {\r\n let nextSlide = this.el.querySelector(\r\n \"[data-slide='\" + nextSlideNr + \"']\"\r\n );\r\n let thisHeader = nextSlide.querySelector(\".h2\");\r\n let nextStep = this.el.querySelector(\"[data-step='\" + nextSlideNr + \"']\");\r\n this.slideContainer.style.height = nextSlide.offsetHeight + 40 + \"px\";\r\n thisStep.classList.remove(\"active\");\r\n nextStep.classList.add(\"active\");\r\n thisSlide.classList.add(\"left\");\r\n thisSlide.classList.remove(\"center\");\r\n nextSlide.classList.add(\"center\");\r\n nextSlide.classList.remove(\"right\");\r\n this.prev.classList.remove(\"inactive\");\r\n if (nextSlideNr === this.slideCounter) {\r\n this.confirmForm();\r\n this.slideContainer.style.height = nextSlide.offsetHeight + 40 + \"px\";\r\n this.navigation.style.display = \"none\";\r\n }\r\n thisHeader.scrollIntoView({ block: \"center\" });\r\n }\r\n\r\n if (direction === \"backwards\" && prevSlideNr > 0) {\r\n let prevSlide = this.el.querySelector(\r\n \"[data-slide='\" + prevSlideNr + \"']\"\r\n );\r\n let thisHeader = prevSlide.querySelector(\".h2\");\r\n let prevStep = this.el.querySelector(\"[data-step='\" + prevSlideNr + \"']\");\r\n this.slideContainer.style.height = prevSlide.offsetHeight + 40 + \"px\";\r\n thisStep.classList.remove(\"active\");\r\n prevStep.classList.add(\"active\");\r\n thisSlide.classList.add(\"right\");\r\n thisSlide.classList.remove(\"center\");\r\n prevSlide.classList.add(\"center\");\r\n prevSlide.classList.remove(\"left\");\r\n this.prev.classList.remove(\"inactive\");\r\n thisHeader.scrollIntoView({ block: \"center\" });\r\n this.next.innerHTML = \"Næste\";\r\n\r\n if (prevSlideNr === 1) {\r\n this.prev.classList.add(\"inactive\");\r\n }\r\n }\r\n }\r\n\r\n confirmForm() {\r\n const addressInfo = `

${this.address.value}
${this.zip.value} ${this.city.value}

`;\r\n\r\n const ownerInfo = `

${this.ownerName.value}
${this.ownerEmail.value}${\r\n this.ownerPhone.value != \"\" ? `
${this.ownerPhone.value}` : ``\r\n }
${this.ownerAddress.value}
${this.ownerZip.value} ${\r\n this.ownerCity.value\r\n }

`;\r\n\r\n const altContactInfo = `

${\r\n this.otherName.value != \"\" ||\r\n this.otherPhone.value != \"\" ||\r\n this.otherEmail.value != \"\"\r\n ? `${this.otherName.value != \"\" ? `${this.otherName.value}` : ``}${\r\n this.otherPhone.value != \"\" ? `
${this.otherPhone.value}` : ``\r\n }${\r\n this.otherEmail.value != \"\" ? `
${this.otherEmail.value}` : ``\r\n }`\r\n : `Nej`\r\n }

`;\r\n const usageInfo = `

${\r\n this.forbrug.value != \"\" ? this.forbrug.value : `Ikke oplyst`\r\n }

`;\r\n const expectedInfo = `

${\r\n this.forventedForbrug.value != \"\"\r\n ? this.forventedForbrug.value\r\n : `Ikke oplyst`\r\n }

`;\r\n\r\n const areaInfo = `

${\r\n this.arial.value != \"\" ? this.arial.value : `Ikke oplyst`\r\n }

`;\r\n const dateInfo = `

${\r\n this.dato.value != \"\" ? this.dato.value : `Ikke oplyst`\r\n }`;\r\n\r\n this.addressContainer.innerHTML = addressInfo;\r\n this.ownerContainer.innerHTML = ownerInfo;\r\n\r\n this.otherOwnerContainer.innerHTML = altContactInfo;\r\n this.usageContainer.innerHTML = usageInfo;\r\n this.expectedContainer.innerHTML = expectedInfo;\r\n this.areaContainer.innerHTML = areaInfo;\r\n this.dateContainer.innerHTML = dateInfo;\r\n }\r\n\r\n postform() {\r\n const body = {\r\n title: this.title,\r\n originatingModuleId: this.gridid,\r\n originatingContentId: this.nodeId,\r\n fields: [\r\n {\r\n title: this.address.getAttribute(\"aria-label\"),\r\n value: this.address.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.zip.getAttribute(\"aria-label\"),\r\n value: this.zip.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.city.getAttribute(\"aria-label\"),\r\n value: this.city.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.ownerName.getAttribute(\"aria-label\"),\r\n value: this.ownerName.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.ownerEmail.getAttribute(\"aria-label\"),\r\n value: this.ownerEmail.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.ownerPhone.getAttribute(\"aria-label\"),\r\n value: this.ownerPhone.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.ownerAddress.getAttribute(\"aria-label\"),\r\n value: this.ownerAddress.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: \"Nuværende \" + this.ownerZip.getAttribute(\"aria-label\"),\r\n value: this.ownerZip.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: \"Nuværende \" + this.ownerCity.getAttribute(\"aria-label\"),\r\n value: this.ownerCity.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: \"Kontakt \" + this.otherName.getAttribute(\"aria-label\"),\r\n value: this.otherName.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: \"Kontakt \" + this.otherEmail.getAttribute(\"aria-label\"),\r\n value: this.otherEmail.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: \"Kontakt \" + this.otherPhone.getAttribute(\"aria-label\"),\r\n value: this.otherPhone.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.forbrug.getAttribute(\"aria-label\"),\r\n value: this.forbrug.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.forventedForbrug.getAttribute(\"aria-label\"),\r\n value: this.forventedForbrug.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.arial.getAttribute(\"aria-label\"),\r\n value: this.arial.value,\r\n type: \"string\"\r\n },\r\n {\r\n title: this.dato.getAttribute(\"aria-label\"),\r\n value: this.dato.value,\r\n type: \"string\"\r\n }\r\n ]\r\n };\r\n\r\n fetch(\"/umbraco/api/connectionform/submitform\", {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify(body)\r\n })\r\n .then(result => {\r\n if (!result.ok) {\r\n throw result;\r\n }\r\n this.editLink.forEach(edit => {\r\n edit.style.display = \"none\";\r\n });\r\n this.endStep.innerHTML = this.endStep.dataset.success;\r\n this.endStepDescription = this.endStepDescription.dataset.success;\r\n this.endStep.scrollIntoView({ block: \"center\" });\r\n this.postFormButton.style.display = \"none\";\r\n })\r\n .catch(error => {\r\n //this.errorPopUp.classList.add(\"show-popup\");\r\n });\r\n }\r\n}\r\n","export default class ContactSelect {\r\n constructor(element) {\r\n this.el = element;\r\n this.selectButtons = this.el.querySelectorAll(\"[data-selection]\")\r\n this.selectedSections = this.el.querySelectorAll(\"[data-selectsection]\")\r\n this.activateSection = this.activateSection.bind(this);\r\n this.linkList = this.el.querySelector(\".link-list\");\r\n this.contactListContainer = this.el.querySelector(\".contact-list-container\")\r\n this.init();\r\n }\r\n\r\n init() {\r\n\r\n if (this.selectButtons){\r\n this.selectButtons.forEach(element => {\r\n element.addEventListener('click', e =>{\r\n let activeSection = this.el.querySelector(\".active[data-selection]\")\r\n let sectionName = element.dataset.selection\r\n activeSection.classList.remove(\"active\")\r\n element.classList.add(\"active\")\r\n this.activateSection(element.dataset.selection);\r\n })\r\n });\r\n }\r\n }\r\n\r\n activateSection(selection){\r\n let faqLinks = this.contactListContainer.querySelectorAll(\"a\")\r\n console.log('faqLinks: ', faqLinks)\r\n if (selection != \"faq\"){\r\n this.linkList.classList.remove(\"active\");\r\n }\r\n else if (faqLinks.length > 0){\r\n this.linkList.classList.add(\"active\");\r\n }\r\n let selectedSection = this.el.querySelector(\".active[data-sectionName]\")\r\n if (selectedSection){\r\n selectedSection.classList.remove(\"active\");\r\n }\r\n let activeSection = this.el.querySelector(\"[data-sectionName='\"+ selection +\"']\")\r\n if (activeSection){\r\n activeSection.classList.add(\"active\");\r\n }\r\n \r\n \r\n\r\n }\r\n}","import {\r\n getCookieAcceptance,\r\n setCookie,\r\n getCookieValue,\r\n removeCookie\r\n} from \"../../services/service-cookies\";\r\n\r\nexport default class ContactCall {\r\n constructor(element) {\r\n\r\n this.el = element;\r\n this.contactTab = document.querySelector(\".contact-tab\");\r\n this.zipInput = this.el.querySelector(\"#call-zip\");\r\n this.zipButton = this.el.querySelector(\".cta\");\r\n this.zipButtonText = this.zipButton.dataset.editziptext;\r\n this.validateZip = this.validateZip.bind(this);\r\n this.fallback = this.el.querySelector(\".fallback-contact\");\r\n this.timeTable = this.el.querySelector(\".area-contact\");\r\n this.buildTable = this.buildTable.bind(this);\r\n this.site = this.el.dataset.site;\r\n \r\n this.init();\r\n }\r\n\r\n init() {\r\n const postnummerRegEx = /^[0-9]{4}$/;\r\n let currentZip = getCookieValue(\"evidaZipCode\");\r\n\r\n if (currentZip) {\r\n this.zipInput.value = currentZip;\r\n this.zipButton.disabled = false;\r\n this.zipButton.innerHTML = this.zipButtonText;\r\n this.validateZip(currentZip);\r\n }\r\n\r\n this.zipInput.addEventListener(\"input\", event => {\r\n if (this.zipInput.value.length == 4) {\r\n this.zipButton.disabled = false;\r\n } else {\r\n this.zipButton.disabled = true;\r\n }\r\n });\r\n\r\n this.zipInput.addEventListener(\"keyup\", event => {\r\n if (event.keyCode === 13 && this.zipInput.value.length == 4) {\r\n if (postnummerRegEx.test(this.zipInput.value)) {\r\n let myZip = this.zipInput.value;\r\n this.validateZip(myZip);\r\n }\r\n }\r\n });\r\n\r\n this.zipButton.addEventListener(\"click\", event => {\r\n let myZip = this.zipInput.value;\r\n this.validateZip(myZip);\r\n });\r\n }\r\n\r\n validateZip(zipcode) {\r\n let data = {\r\n postalCode: zipcode\r\n };\r\n\r\n fetch(`/umbraco/api/areas/getareaforpostalcode?site=` + this.site, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n if (json.id > 0) {\r\n this.fallback.classList.remove(\"active\");\r\n setCookie(\"evidaZipCode\", zipcode, 367);\r\n setCookie(\"evidaHelpCookie\", true);\r\n this.buildTable(json);\r\n } else {\r\n removeCookie(\"evidaZipCode\");\r\n removeCookie(\"evidaHelpCookie\");\r\n this.timeTable.classList.remove(\"active\");\r\n this.fallback.classList.add(\"active\");\r\n }\r\n })\r\n .catch(e => {});\r\n }\r\n\r\n buildTable(json) {\r\n const htmlTemplate = `\r\n

\r\n
\r\n ${json.contactSectionOpeningHours}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Mindst risiko\r\n
\r\n
\r\n
\r\n
\r\n Risiko for ventetid\r\n
\r\n
\r\n
\r\n
\r\n Høj risiko for ventetid\r\n
\r\n
\r\n
\r\n
\r\n Lukket\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
 
\r\n
M
\r\n
T
\r\n
O
\r\n
T
\r\n
F
\r\n
\r\n `;\r\n\r\n const timeTableList = json.contactSectionCallTimes\r\n .map(item => {\r\n return `\r\n
\r\n
${item.title}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n `;\r\n })\r\n .join(\"\");\r\n\r\n this.timeTable.innerHTML = \"\";\r\n this.timeTable.classList.add(\"active\");\r\n this.timeTable.innerHTML =\r\n htmlTemplate + timeTableList + \"
\";\r\n }\r\n}\r\n","export default class ContactForm {\r\n constructor(element) {\r\n this.el = element;\r\n\r\n this.site = this.el.dataset.site;\r\n\r\n this.toggleButtons = this.el.querySelectorAll(\".cta-tab\");\r\n this.toggleSection = this.toggleSection.bind(this);\r\n this.callSection = this.el.querySelector(\".contact-call-section\");\r\n this.postSection = this.el.querySelector(\".contact-form-section\");\r\n this.fileContainer = this.el.querySelector(\".upload-files\");\r\n this.validateEmail = this.validateEmail.bind(this);\r\n this.canPost = this.canPost.bind(this);\r\n this.postForm = this.postForm.bind(this);\r\n this.attachments = [];\r\n\r\n this.name = this.el.querySelector(\"#name\");\r\n this.errorName = this.el.querySelector(\".error-name\");\r\n this.email = this.el.querySelector(\"#email\");\r\n this.errorEmail = this.el.querySelector(\".error-email\");\r\n this.phone = this.el.querySelector(\"#phone\");\r\n this.contact = this.el.querySelector(\"#contact\");\r\n this.address = this.el.querySelector(\"#address\");\r\n this.errorAddress = this.el.querySelector(\".error-address\");\r\n this.city = this.el.querySelector(\"#city\");\r\n this.errorCity = this.el.querySelector(\".error-city\");\r\n this.zip = this.el.querySelector(\"#zip\");\r\n this.errorZip = this.el.querySelector(\".error-zip\");\r\n this.subject = this.el.querySelector(\"#subject\");\r\n this.message = this.el.querySelector(\"#message\");\r\n this.files = this.el.querySelector(\"#files\");\r\n this.samtygge = this.el.querySelector(\"#samtygge\");\r\n this.gdpr = this.el.querySelector(\"#gdpr\");\r\n this.errorGdpr = this.el.querySelector(\".error-gdpr\");\r\n this.future = this.el.querySelector(\"#future\");\r\n this.send = this.el.querySelector(\".cta-send\");\r\n this.sectionId = this.send.dataset.sectionid;\r\n this.contactFormRow = this.el.querySelector(\".contact-form-row\");\r\n this.contactReceiptRow = this.el.querySelector(\".contact-receipt-row\");\r\n this.errorPopUp = this.el.querySelector(\".post-error-module\");\r\n this.closeError = this.el.querySelector(\"[data-closeposterror]\");\r\n this.validateForm = this.validateForm.bind(this);\r\n this.spinner = this.el.querySelector(\".form-spinner-overlay\");\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (this.toggleButtons) {\r\n this.toggleButtons.forEach((button) => {\r\n button.addEventListener(\"click\", (event) => {\r\n this.toggleSection(button);\r\n });\r\n });\r\n }\r\n\r\n this.files.addEventListener(\"change\", (event) => {\r\n if (this.files.files.length > 0) {\r\n this.fileContainer.classList.add(\"active\");\r\n\r\n const formData = new FormData();\r\n const files = this.files.files;\r\n\r\n for (let i = 0; i < this.files.files.length; i++) {\r\n if (this.files.files[i].size > 10500000) {\r\n alert(\"filen: \" + this.files.files[i].name + \" er for stor\");\r\n return false;\r\n } else {\r\n formData.append(\"files\", this.files.files[i]);\r\n }\r\n }\r\n\r\n fetch(\"/umbraco/api/contact/uploadmedia\", {\r\n method: \"POST\",\r\n body: formData,\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n this.attachments = this.attachments.concat(result);\r\n });\r\n }\r\n Array.from(this.files.files).forEach((file) => {\r\n this.fileContainer.innerHTML = this.fileContainer.innerHTML + \"

Fil: \" + file.name + \"

\";\r\n });\r\n });\r\n\r\n this.name.addEventListener(\"change\", (event) => {\r\n if (this.name.value.length > 0 && this.errorName.classList.contains(\"active\")) {\r\n this.errorName.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n this.email.addEventListener(\"change\", (event) => {\r\n if (this.email.value.length > 0 && this.errorEmail.classList.contains(\"active\") && this.validateEmail(this.email.value)) {\r\n this.errorEmail.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n this.address.addEventListener(\"change\", (event) => {\r\n if (this.address.value.length > 0 && this.errorAddress.classList.contains(\"active\")) {\r\n this.errorAddress.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n this.city.addEventListener(\"change\", (event) => {\r\n if (this.city.value.length > 0 && this.errorCity.classList.contains(\"active\")) {\r\n this.errorCity.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n this.zip.addEventListener(\"change\", (event) => {\r\n if (this.zip.value.length > 0 && this.errorZip.classList.contains(\"active\")) {\r\n this.errorZip.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n this.gdpr.addEventListener(\"change\", (event) => {\r\n if (this.gdpr.checked && this.errorGdpr.classList.contains(\"active\")) {\r\n this.errorGdpr.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n this.send.addEventListener(\"click\", (event) => {\r\n event.preventDefault();\r\n this.validateForm();\r\n });\r\n\r\n this.closeError.addEventListener(\"click\", (event) => {\r\n event.preventDefault();\r\n this.errorPopUp.classList.remove(\"show-popup\");\r\n });\r\n }\r\n\r\n validateForm() {\r\n var requiredFields = this.el.querySelectorAll(\"[required]\");\r\n var canPostForm = true;\r\n requiredFields.forEach((field) => {\r\n var fieldID = field.id;\r\n var errorText = \".error-\" + fieldID;\r\n var errorbox = this.el.querySelector(errorText);\r\n if (!field.validity.valid) {\r\n canPostForm = false;\r\n errorbox.classList.add(\"active\");\r\n } else {\r\n errorbox.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n for (let i = 0; i < requiredFields.length; i++) {\r\n if (!requiredFields[i].validity.valid) {\r\n requiredFields[i].scrollIntoView({ block: \"center\" });\r\n break;\r\n }\r\n }\r\n\r\n if (canPostForm) {\r\n this.postForm();\r\n }\r\n }\r\n\r\n toggleSection(button) {\r\n let buttonData = button.dataset.section;\r\n\r\n this.toggleButtons.forEach((allbutton) => {\r\n allbutton.classList.remove(\"active\");\r\n });\r\n button.classList.add(\"active\");\r\n if (buttonData == \"call\") {\r\n this.postSection.classList.remove(\"active\");\r\n this.callSection.classList.add(\"active\");\r\n }\r\n if (buttonData == \"post\") {\r\n this.postSection.classList.add(\"active\");\r\n this.callSection.classList.remove(\"active\");\r\n }\r\n }\r\n\r\n validateEmail(email) {\r\n var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(email);\r\n }\r\n\r\n canPost() {\r\n if (this.hasName && this.hasEmail && this.hasPhone && this.hasGdpr) {\r\n this.send.classList.remove(\"inactive\");\r\n } else {\r\n if (!this.send.classList.contains(\"inactive\")) {\r\n this.send.classList.add(\"inactive\");\r\n }\r\n }\r\n }\r\n\r\n postForm() {\r\n var body = {\r\n name: this.name.value,\r\n email: this.email.value,\r\n message: this.message.value,\r\n attachments: this.attachments,\r\n phone: this.phone.value,\r\n permitReplyByPhone: this.contact.checked,\r\n address: this.address.value,\r\n city: this.city.value,\r\n zipCode: this.zip.value,\r\n subject: this.subject.value,\r\n consentSavePhoneAndEmail: this.samtygge.checked,\r\n consentGDPR: this.gdpr.checked,\r\n sectionId: this.sectionId,\r\n site: this.site,\r\n };\r\n\r\n if (this.future) {\r\n body.consentSurveyContact = this.future.checked;\r\n }\r\n\r\n this.send.classList.add(\"hidden\");\r\n this.spinner.classList.add(\"active\");\r\n\r\n fetch(\" /umbraco/api/contact/submitcontactrequest\", {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify(body),\r\n })\r\n .then((result) => {\r\n if (!result.ok) {\r\n throw result;\r\n }\r\n this.contactFormRow.classList.remove(\"active\");\r\n this.contactReceiptRow.classList.add(\"active\");\r\n var scrollOptions = {\r\n behavior: \"smooth\",\r\n block: \"center\",\r\n };\r\n this.contactReceiptRow.scrollIntoView(scrollOptions);\r\n })\r\n .catch((error) => {\r\n this.errorPopUp.classList.add(\"show-popup\");\r\n });\r\n }\r\n}\r\n","export default class ContactSelection {\r\n constructor(element) {\r\n this.el = element;\r\n this.firstLevelBox = this.el.querySelector(\".first-level-support-selected\");\r\n this.firstLevelSelected = this.firstLevelBox.querySelector(\".first-level-selected\");\r\n this.secondLevelBox = this.el.querySelector(\".second-level-support-selected\");\r\n this.secondLevelSelected = this.el.querySelector(\".second-level-selected\");\r\n this.secondLevelSupport = this.el.querySelector(\".second-level-support\");\r\n this.firstLevelContainer = this.el.querySelector(\".first-level-container\");\r\n this.secondLevelContainer = this.el.querySelector(\".second-level-container\");\r\n this.firstLevelContent = this.el.querySelector(\".first-level-content\");\r\n this.secondLevelContent = this.el.querySelector(\".second-level-content\");\r\n this.supportAnchor = this.el.querySelector(\".support-anchor\");\r\n\r\n this.firstLevelQuestions = this.firstLevelContent.querySelectorAll(\"p\");\r\n this.alertText = this.el.querySelector(\".alert-text\");\r\n this.contactList = document.querySelector(\".contact-list\");\r\n this.contactListContainer = this.contactList.querySelector(\".contact-list-container\");\r\n this.contactTabs = document.querySelector(\".contact-tab\");\r\n this.subjectField = document.querySelector(\"#subject\");\r\n this.messageField = document.querySelector(\"#message\");\r\n this.textArea = document.querySelector(\".field-text-area\");\r\n this.subjectContainer = document.querySelector(\".subject-container\");\r\n \r\n this.chooseSubject =\r\n this.firstLevelSelected.dataset.selecttext != null\r\n ? this.firstLevelSelected.dataset.selecttext\r\n : \"Vælg emne\";\r\n this.readmore =\r\n this.firstLevelSelected.dataset.readmore != null\r\n ? this.firstLevelSelected.dataset.readmore\r\n : \"Læs mere\";\r\n this.toggleQuestions = this.toggleQuestions.bind(this);\r\n this.selectQuestion = this.selectQuestion.bind(this);\r\n this.generateResult = this.generateResult.bind(this);\r\n this.buildResult = this.buildResult.bind(this);\r\n this.scrollToContact = this.scrollToContact.bind(this);\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.firstLevelBox.addEventListener(\"click\", event => {\r\n if (this.el.classList.contains(\"section-padding-bottom\")) {\r\n this.el.classList.remove(\"section-padding-bottom\");\r\n }\r\n this.toggleQuestions(\r\n this.firstLevelBox,\r\n this.firstLevelContainer,\r\n this.firstLevelContent\r\n );\r\n });\r\n\r\n this.secondLevelBox.addEventListener(\"click\", event => {\r\n this.toggleQuestions(\r\n this.secondLevelBox,\r\n this.secondLevelContainer,\r\n this.secondLevelContent\r\n );\r\n });\r\n\r\n this.firstLevelQuestions.forEach(element => {\r\n element.addEventListener(\"click\", event => {\r\n this.selectQuestion(element);\r\n });\r\n });\r\n\r\n if (this.supportAnchor) {\r\n this.supportAnchor.addEventListener(\"click\", event => {\r\n this.scrollToContact();\r\n });\r\n }\r\n }\r\n\r\n scrollToContact() {\r\n var scrollToPosition = this.contactTabs.offsetTop;\r\n window.scrollTo(0, scrollToPosition);\r\n }\r\n\r\n selectQuestion(question) {\r\n this.firstLevelSelected.innerHTML = question.innerHTML;\r\n this.firstLevelBox.classList.add(\"selected\");\r\n this.firstLevelContainer.style.height = \"\";\r\n this.firstLevelBox.classList.remove(\"open\");\r\n this.generateResult(question.dataset.value, \"one\");\r\n if (question.innerHTML.toLowerCase() != 'andet'){\r\n this.subjectField.removeAttribute(\"required\");\r\n this.subjectField.value = question.innerHTML;\r\n this.subjectContainer.classList.remove(\"active\");\r\n }else{\r\n this.subjectField.setAttribute(\"required\",\"\");\r\n this.subjectField.value = \"\";\r\n this.subjectContainer.classList.add(\"active\");\r\n }\r\n }\r\n\r\n selectSecondQuestion(question) {\r\n this.secondLevelSelected.innerHTML = question.innerHTML;\r\n this.secondLevelBox.classList.add(\"selected\");\r\n this.secondLevelContainer.style.height = \"\";\r\n this.secondLevelBox.classList.remove(\"open\");\r\n this.generateResult(question.dataset.value, \"two\");\r\n this.subjectField.value = this.firstLevelSelected.innerHTML + \", \" + question.innerHTML;\r\n \r\n }\r\n\r\n toggleQuestions(box, container, content) {\r\n if (box.classList.contains(\"open\")) {\r\n container.style.height = \"\";\r\n box.classList.remove(\"open\");\r\n } else {\r\n var contentHeight = content.offsetHeight + \"px\";\r\n container.style.height = contentHeight;\r\n box.classList.add(\"active\");\r\n box.classList.add(\"open\");\r\n }\r\n this.el.classList.remove(\"section-padding\");\r\n }\r\n\r\n generateResult(id, level) {\r\n let data = {\r\n id: id\r\n };\r\n fetch(`/umbraco/api/contact/getquestion`, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n this.buildResult(json, level);\r\n })\r\n .catch(e => {});\r\n }\r\n\r\n buildResult(json, level) {\r\n if (level == \"one\") {\r\n this.supportAnchor.classList.add(\"active\");\r\n this.contactTabs.classList.add(\"active\");\r\n this.secondLevelSelected.innerHTML = this.chooseSubject;\r\n this.secondLevelBox.classList.remove(\"active\");\r\n this.secondLevelBox.classList.remove(\"selected\");\r\n }\r\n // if (json.richMessage != null) {\r\n // this.alertText.classList.add(\"active\");\r\n // this.alertText.innerHTML = json.richMessage;\r\n // } else {\r\n // this.alertText.classList.remove(\"active\");\r\n // this.alertText.innerHTML = \"\";\r\n // }\r\n if (json.furtherQuestions.length > 0 && level == \"one\") {\r\n this.secondLevelSupport.classList.add(\"active\");\r\n const htmlTemplate = json.furtherQuestions\r\n .map(item => {\r\n return `\r\n

${item.title}

\r\n `;\r\n })\r\n .join(\"\");\r\n this.secondLevelContent.innerHTML = htmlTemplate;\r\n var questions = this.secondLevelContent.querySelectorAll(\"p\");\r\n questions.forEach(element => {\r\n element.addEventListener(\"click\", event => {\r\n this.selectSecondQuestion(element);\r\n });\r\n });\r\n } else if (level == \"one\") {\r\n this.secondLevelSupport.classList.remove(\"active\");\r\n this.secondLevelContent.innerHTML = \"\";\r\n }\r\n if (json.links.length > 0) {\r\n let counter = 0;\r\n let offset = \"\";\r\n const htmlListTemplate = json.links\r\n .map(item => {\r\n counter++;\r\n if (counter % 2 != 0) {\r\n offset = \"col-md-offset-2 col-lg-offset-4\";\r\n } else {\r\n offset = \"col-md-offset-0 col-lg-offset-0\";\r\n }\r\n return `\r\n \r\n `;\r\n })\r\n .join(\"\");\r\n this.contactList.classList.add(\"active\");\r\n this.contactListContainer.innerHTML = htmlListTemplate;\r\n } else {\r\n this.contactList.classList.remove(\"active\");\r\n this.contactListContainer.innerHTML = \"\";\r\n }\r\n }\r\n}\r\n","export default class ContactSelection {\r\n constructor(element) {\r\n this.el = element;\r\n this.firstLevelBox = this.el.querySelector(\".first-level-support-selected\");\r\n this.firstLevelSelected = this.firstLevelBox.querySelector(\".first-level-selected\");\r\n this.secondLevelBox = this.el.querySelector(\".second-level-support-selected\");\r\n this.secondLevelSelected = this.el.querySelector(\".second-level-selected\");\r\n this.secondLevelSupport = this.el.querySelector(\".second-level-support\");\r\n this.firstLevelContainer = this.el.querySelector(\".first-level-container\");\r\n this.secondLevelContainer = this.el.querySelector(\".second-level-container\");\r\n this.firstLevelContent = this.el.querySelector(\".first-level-content\");\r\n this.secondLevelContent = this.el.querySelector(\".second-level-content\");\r\n this.supportAnchor = this.el.querySelector(\".support-anchor\");\r\n this.subjectContainer = document.querySelector(\".subject-container\");\r\n\r\n this.firstLevelQuestions = this.firstLevelContent.querySelectorAll(\"p\");\r\n this.alertText = this.el.querySelector(\".alert-text\");\r\n this.contactList = document.querySelector(\".contact-list\");\r\n this.contactListContainer = this.contactList.querySelector(\".contact-list-container\");\r\n this.contactTabs = document.querySelector(\".contact-tab\");\r\n this.chooseSubject =\r\n this.firstLevelSelected.dataset.selecttext != null\r\n ? this.firstLevelSelected.dataset.selecttext\r\n : \"Vælg emne\";\r\n this.readmore =\r\n this.firstLevelSelected.dataset.readmore != null\r\n ? this.firstLevelSelected.dataset.readmore\r\n : \"Læs mere\";\r\n this.toggleQuestions = this.toggleQuestions.bind(this);\r\n this.selectQuestion = this.selectQuestion.bind(this);\r\n this.generateResult = this.generateResult.bind(this);\r\n this.buildResult = this.buildResult.bind(this);\r\n this.scrollToContact = this.scrollToContact.bind(this);\r\n this.subjectField = document.querySelector(\"#subject\");\r\n this.messageField = document.querySelector(\"#message\");\r\n this.mailFirstLevel = document.querySelector(\".field-container .first-level-selected\");\r\n this.mailSecondLevel = document.querySelector(\".field-container .second-level-selected\");\r\n this.mailSecondLevelSupport = document.querySelector(\".field-container .second-level-support\");\r\n this.textArea = document.querySelector(\".field-text-area\");\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.firstLevelBox.addEventListener(\"click\", event => {\r\n if (this.el.classList.contains(\"section-padding-bottom\")) {\r\n this.el.classList.remove(\"section-padding-bottom\");\r\n }\r\n this.toggleQuestions(\r\n this.firstLevelBox,\r\n this.firstLevelContainer,\r\n this.firstLevelContent\r\n );\r\n });\r\n\r\n this.secondLevelBox.addEventListener(\"click\", event => {\r\n this.toggleQuestions(\r\n this.secondLevelBox,\r\n this.secondLevelContainer,\r\n this.secondLevelContent\r\n );\r\n });\r\n\r\n this.firstLevelQuestions.forEach(element => {\r\n element.addEventListener(\"click\", event => {\r\n this.selectQuestion(element);\r\n });\r\n });\r\n\r\n if (this.supportAnchor) {\r\n this.supportAnchor.addEventListener(\"click\", event => {\r\n this.scrollToContact();\r\n });\r\n }\r\n }\r\n\r\n scrollToContact() {\r\n var scrollToPosition = this.contactTabs.offsetTop;\r\n window.scrollTo(0, scrollToPosition);\r\n }\r\n\r\n selectQuestion(question) {\r\n this.firstLevelSelected.innerHTML = question.innerHTML;\r\n this.firstLevelBox.classList.add(\"selected\");\r\n this.firstLevelContainer.style.height = \"\";\r\n this.firstLevelBox.classList.remove(\"open\");\r\n this.generateResult(question.dataset.value, \"one\");\r\n if (question.innerHTML.toLowerCase() != 'andet'){\r\n this.subjectField.removeAttribute(\"required\");\r\n this.subjectField.value = question.innerHTML;\r\n this.mailFirstLevel.innerHTML = question.innerHTML;\r\n this.subjectContainer.classList.remove(\"active\"); \r\n }else{\r\n this.subjectField.setAttribute(\"required\",\"\");\r\n this.mailFirstLevel.innerHTML = question.innerHTML;\r\n this.subjectContainer.classList.add(\"active\");\r\n this.subjectField.value = \"\";\r\n }\r\n }\r\n\r\n selectSecondQuestion(question) {\r\n this.secondLevelSelected.innerHTML = question.innerHTML;\r\n this.secondLevelBox.classList.add(\"selected\");\r\n this.secondLevelContainer.style.height = \"\";\r\n this.secondLevelBox.classList.remove(\"open\");\r\n this.generateResult(question.dataset.value, \"two\");\r\n this.subjectField.value = this.firstLevelSelected.innerHTML + \", \" + question.innerHTML;\r\n this.mailSecondLevel.innerHTML = question.innerHTML;\r\n }\r\n\r\n toggleQuestions(box, container, content) {\r\n if (box.classList.contains(\"open\")) {\r\n container.style.height = \"\";\r\n box.classList.remove(\"open\");\r\n } else {\r\n var contentHeight = content.offsetHeight + \"px\";\r\n container.style.height = contentHeight;\r\n box.classList.add(\"active\");\r\n box.classList.add(\"open\");\r\n }\r\n this.el.classList.remove(\"section-padding\");\r\n }\r\n\r\n generateResult(id, level) {\r\n let data = {\r\n id: id\r\n };\r\n fetch(`/umbraco/api/contact/getquestion`, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n this.buildResult(json, level);\r\n })\r\n .catch(e => {});\r\n }\r\n\r\n buildResult(json, level) {\r\n if (level == \"one\") {\r\n this.supportAnchor.classList.add(\"active\");\r\n this.contactTabs.classList.add(\"active\");\r\n this.secondLevelSelected.innerHTML = this.chooseSubject;\r\n this.secondLevelBox.classList.remove(\"active\");\r\n this.secondLevelBox.classList.remove(\"selected\");\r\n }\r\n if (json.richMessage != null) {\r\n this.alertText.classList.add(\"active\");\r\n this.alertText.innerHTML = json.richMessage; \r\n } else {\r\n this.alertText.classList.remove(\"active\");\r\n this.alertText.innerHTML = \"\";\r\n }\r\n if (json.furtherQuestions.length > 0 && level == \"one\") {\r\n this.secondLevelSupport.classList.add(\"active\");\r\n this.mailSecondLevelSupport.classList.add(\"active\");\r\n const htmlTemplate = json.furtherQuestions\r\n .map(item => {\r\n return `\r\n

${item.title}

\r\n `;\r\n })\r\n .join(\"\");\r\n this.secondLevelContent.innerHTML = htmlTemplate;\r\n var questions = this.secondLevelContent.querySelectorAll(\"p\");\r\n questions.forEach(element => {\r\n element.addEventListener(\"click\", event => {\r\n this.selectSecondQuestion(element);\r\n });\r\n });\r\n } else if (level == \"one\") {\r\n this.secondLevelSupport.classList.remove(\"active\");\r\n this.mailSecondLevelSupport.classList.remove(\"active\");\r\n this.secondLevelContent.innerHTML = \"\";\r\n }\r\n if (json.links.length > 0) {\r\n let counter = 0;\r\n let offset = \"\";\r\n const htmlListTemplate = json.links\r\n .map(item => {\r\n counter++;\r\n if (counter % 2 != 0) {\r\n offset = \"col-md-offset-2 col-lg-offset-4\";\r\n } else {\r\n offset = \"col-md-offset-0 col-lg-offset-0\";\r\n }\r\n return `\r\n \r\n `;\r\n })\r\n .join(\"\");\r\n this.contactList.classList.add(\"active\");\r\n this.contactListContainer.innerHTML = htmlListTemplate;\r\n } else {\r\n this.contactList.classList.remove(\"active\");\r\n this.contactListContainer.innerHTML = \"\";\r\n }\r\n }\r\n}\r\n","import { EventBus, EventTypes } from \"../../consts/const-event-types\";\r\nimport {\r\n getCookieAcceptance,\r\n setCookie,\r\n getCookieValue,\r\n removeCookie\r\n} from \"../../services/service-cookies\";\r\n\r\n\r\nexport default class EditZip {\r\n constructor(element) {\r\n\r\n this.el = element;\r\n this.openPopUpButton = this.el.querySelector(\".help-popup-toggler\");\r\n this.popUp = this.el.querySelector(\".help-popup-container\");\r\n this.popUpContainer = this.el.querySelector(\".help-popup-content\");\r\n this.closePopUpButton = this.el.querySelector(\".close-container\");\r\n this.openPopUp = this.openPopUp.bind(this)\r\n this.closePopUpNoZip = this.closePopUpNoZip.bind(this);\r\n this.saveZip = this.saveZip.bind(this);\r\n this.popUpForm = this.el.querySelector(\".help-popup-form\");\r\n this.zipInput = this.popUpForm.querySelector(\"input\");\r\n this.zipButton = this.popUpForm.querySelector(\"button\");\r\n this.error = this.popUpContainer.querySelector(\".error-text\");\r\n this.validateZip = this.validateZip.bind(this);\r\n this.site = this.el.dataset.site;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n const postnummerRegEx = /^[0-9]{4}$/;\r\n let currentZip = getCookieValue(\"evidaZipCode\");\r\n if (currentZip) {\r\n this.zipInput.value = currentZip\r\n }\r\n this.openPopUpButton.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n this.openPopUp();\r\n });\r\n\r\n this.closePopUpButton.addEventListener(\"click\", event => {\r\n //this.closePopUp(this.zipInput.value);\r\n this.closePopUpNoZip();\r\n });\r\n\r\n this.zipInput.addEventListener(\"input\", event => {\r\n if (this.error.classList.contains(\"activate\")){\r\n this.error.classList.remove(\"activate\");\r\n var containerHeight = this.popUpContainer.offsetHeight;\r\n this.popUp.style.height = containerHeight + \"px\";\r\n }\r\n if (postnummerRegEx.test(this.zipInput.value)) {\r\n this.zipButton.disabled = false;\r\n } else {\r\n this.zipButton.disabled = true;\r\n }\r\n });\r\n\r\n this.zipButton.addEventListener(\"click\", event => {\r\n let myZip = this.zipInput.value;\r\n this.validateZip(myZip);\r\n });\r\n\r\n this.zipInput.addEventListener(\"keyup\", event => {\r\n if (event.keyCode === 13) {\r\n if (postnummerRegEx.test(this.zipInput.value)) {\r\n let myZip = this.zipInput.value;\r\n this.validateZip(myZip);\r\n }\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n openPopUp() {\r\n this.popUp.classList.remove(\"closed\");\r\n var containerHeight = this.popUpContainer.offsetHeight;\r\n this.popUp.style.height = containerHeight + \"px\";\r\n }\r\n\r\n closePopUpNoZip(){\r\n this.popUp.style.height = \"0px\";\r\n this.popUp.classList.add(\"closed\");\r\n }\r\n\r\n validateZip(zipcode) {\r\n let data = {\r\n postalCode: zipcode\r\n };\r\n\r\n fetch(`/umbraco/api/areas/getareaforpostalcode?site=` + this.site, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n if (json.id > 0) {\r\n this.error.classList.remove(\"activate\");\r\n this.saveZip(zipcode);\r\n } else {\r\n this.error.classList.add(\"activate\");\r\n var containerHeight = this.popUpContainer.offsetHeight;\r\n this.popUp.style.height = containerHeight + \"px\";\r\n }\r\n })\r\n .catch(e => {});\r\n }\r\n\r\n saveZip(zipcoden) {\r\n var newURL = window.location.protocol + \"//\" + window.location.host + \"/\" + window.location.pathname + window.location.search\r\n setCookie(\"evidaZipCode\", zipcoden, 367);\r\n setCookie(\"evidaHelpCookie\", true);\r\n window.location = newURL\r\n }\r\n\r\n}","import bodymovin from \"../../../public/assets/js/bodymovin/lottie_player\";\r\n\r\nexport default class FpHeader {\r\n constructor(element) {\r\n this.el = element;\r\n this.svgContainer = this.el.querySelector(\".svg-container\");\r\n this.main = document.querySelector(\"main\");\r\n this.breadcrumb = document.querySelector(\".breadcrumb-section\");\r\n this.setHeight = this.setHeight.bind(this);\r\n this.hasAnimation = false;\r\n this.init();\r\n }\r\n\r\n init() {\r\n console.log(\"fpInit\")\r\n let resizeTimer = {};\r\n\r\n if (this.svgContainer && !this.hasAnimation) {\r\n console.log('this.svgContainer: ', this.svgContainer);\r\n var animation = this.svgContainer.dataset.animation;\r\n var animdata = bodymovin.loadAnimation({\r\n container: this.svgContainer,\r\n renderer: \"svg\",\r\n autoplay: true,\r\n loop: true,\r\n path: this.svgContainer.dataset.animation\r\n });\r\n animdata.play(console.log(\"load animation\"));\r\n this.setHeight();\r\n window.addEventListener(\"resize\", event => {\r\n clearTimeout(resizeTimer);\r\n resizeTimer = setTimeout(\r\n function() {\r\n this.setHeight();\r\n }.bind(this),\r\n 250\r\n );\r\n });\r\n }\r\n this.hasAnimation = true;\r\n }\r\n\r\n setHeight() {\r\n var styles = window.getComputedStyle(this.breadcrumb);\r\n var margin =\r\n parseFloat(styles[\"marginTop\"]) + parseFloat(styles[\"marginBottom\"]);\r\n var mainStyle = window.getComputedStyle(this.main);\r\n var topPadding =\r\n parseFloat(mainStyle[\"paddingTop\"]) +\r\n parseFloat(mainStyle[\"paddingBottom\"]);\r\n\r\n var addedHeight = topPadding + this.breadcrumb.offsetHeight + margin;\r\n this.el.style.height = \"calc(100vh - \" + addedHeight + \"px)\";\r\n }\r\n}\r\n","import { EventBus, EventTypes } from \"../../consts/const-event-types\";\r\nimport { isMobile } from \"../../services/service-utils\";\r\n\r\nexport default class Header {\r\n constructor(element) {\r\n this.el = element;\r\n this.body = document.querySelector(\"body\");\r\n this.searchOpen = this.el.querySelector(\".navigation-search\");\r\n this.searchClose = this.el.querySelector(\".close\");\r\n this.searchBox = this.el.querySelector(\".search-container\");\r\n this.searchRow = this.searchBox.querySelector(\".row\");\r\n this.menuActivation = this.el.querySelector(\".menulist-activation\");\r\n this.menuList = this.el.querySelector(\".menulist\");\r\n this.menuListContainer = this.el.querySelector(\".menulist-container\");\r\n this.searchInput = this.el.querySelector(\"#search\");\r\n\r\n this.closeMenu = this.el.querySelector(\r\n \".menulist-container .close-container\"\r\n );\r\n this.OpenSearch = this.OpenSearch.bind(this);\r\n this.menuToggle = this.menuToggle.bind(this);\r\n this.onScroll = this.onScroll.bind(this);\r\n\r\n this.menuOpen = false;\r\n this.atTop = false;\r\n this.scrollingUp = false;\r\n this.showBgColor = false;\r\n this.lastScrollY = 0;\r\n this.deltaY = 0;\r\n this.posY = 0;\r\n this.menuHeight = isMobile() ? 64 : 254;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n console.log(\"header\")\r\n let searchHeight = this.searchRow.offsetHeight;\r\n let resizeTimer = {};\r\n let observer = {};\r\n if (!isMobile()) {\r\n document.addEventListener(\"scroll\", this.onScroll);\r\n\r\n this.onScroll();\r\n }\r\n\r\n var ro = new ResizeObserver(entries => {\r\n for (let entry of entries) {\r\n this.menuHeight = this.el.offsetHeight;\r\n }\r\n });\r\n\r\n // Observe one or multiple elements\r\n ro.observe(this.el);\r\n\r\n window.addEventListener(\"resize\", event => {\r\n clearTimeout(resizeTimer);\r\n resizeTimer = setTimeout(\r\n function() {\r\n searchHeight = this.searchRow.offsetHeight;\r\n\r\n if (this.el.classList.contains(\"open\")) {\r\n this.OpenSearch(searchHeight);\r\n }\r\n }.bind(this),\r\n 250\r\n );\r\n });\r\n\r\n this.searchOpen.addEventListener(\"click\", event => {\r\n this.OpenSearch(searchHeight);\r\n this.searchInput.focus();\r\n });\r\n this.searchClose.addEventListener(\"click\", event => {\r\n this.OpenSearch(0);\r\n this.searchInput.blur();\r\n });\r\n\r\n this.menuActivation.addEventListener(\"click\", event => {\r\n this.menuToggle(event);\r\n });\r\n\r\n this.closeMenu.addEventListener(\"click\", event => {\r\n this.menuToggle(event);\r\n });\r\n }\r\n\r\n OpenSearch(setHeight) {\r\n if (setHeight > 0 && !this.el.classList.contains(\"open\")) {\r\n this.el.classList.add(\"open\");\r\n } else {\r\n this.el.classList.remove(\"open\");\r\n setHeight = 0;\r\n }\r\n this.searchBox.style.height = setHeight + \"px\";\r\n }\r\n\r\n menuToggle(e) {\r\n e.preventDefault();\r\n if (this.body.classList.contains(\"active-menu\")) {\r\n this.body.classList.remove(\"active-menu\");\r\n const scrollY = this.body.style.top;\r\n this.body.style.position = \"\";\r\n this.body.style.top = \"\";\r\n window.scrollTo(0, parseInt(scrollY || \"0\") * -1);\r\n } else {\r\n this.body.classList.add(\"active-menu\");\r\n this.body.position = \"fixed\";\r\n this.body.style.top = `-${window.scrollY}px`;\r\n }\r\n }\r\n\r\n onScroll() {\r\n this.atTop = window.pageYOffset === 0;\r\n this.scrollingUp = this.lastScrollY > window.pageYOffset;\r\n this.deltaY = window.pageYOffset - this.lastScrollY;\r\n this.posY -= window.pageYOffset > 0 ? this.deltaY : 0;\r\n if (this.body.classList.contains(\"compact-navigation\")) {\r\n this.menuHeight = 129;\r\n }\r\n\r\n if (!this.scrollingUp) {\r\n if (this.posY < -(this.menuHeight + 5))\r\n this.posY = -(this.menuHeight + 45);\r\n } else {\r\n if (this.posY > 0) this.posY = 0;\r\n }\r\n\r\n if (window.matchMedia(\"(min-width: 767px)\").matches) {\r\n this.el.style.transform = `translateY(${this.posY}px)`;\r\n //this.newMenu.style.transform = `translateY(${this.posY}px) translateX(-100%)`;\r\n }\r\n\r\n this.lastScrollY = window.pageYOffset;\r\n }\r\n}\r\n","import { EventBus, EventTypes } from \"../../consts/const-event-types\";\r\nimport {\r\n getCookieAcceptance,\r\n setCookie,\r\n getCookieValue,\r\n removeCookie\r\n} from \"../../services/service-cookies\";\r\n\r\nexport default class HelpPopUp {\r\n constructor(element) {\r\n this.body = document.querySelector(\"body\");\r\n this.el = element;\r\n this.openPopUpButton = this.el.querySelector(\".help-popup-toggler\");\r\n this.body = document.querySelector(\"body\");\r\n this.openPopUp = this.openPopUp.bind(this);\r\n this.popUp = this.el.querySelector(\".help-popup-container\");\r\n this.popUpContainer = this.el.querySelector(\".help-popup-content\");\r\n this.closePopUpButton = this.el.querySelector(\".close-container\");\r\n //this.popUpForm = this.el.querySelector(\".help-popup-form\");\r\n //this.zipInput = this.popUpForm.querySelector(\"input\");\r\n //this.zipButton = this.popUpForm.querySelector(\"button\");\r\n //this.error = this.popUpContainer.querySelector(\".error-text\");\r\n this.closePopUp = this.closePopUp.bind(this);\r\n this.saveZip = this.saveZip.bind(this);\r\n this.validateZip = this.validateZip.bind(this);\r\n this.closePopUpNoZip = this.closePopUpNoZip.bind(this)\r\n this.site = this.el.dataset.site;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n const postnummerRegEx = /^[0-9]{4}$/;\r\n let currentZip = getCookieValue(\"evidaZipCode\");\r\n let hasClosed = getCookieValue(\"evidaHelpCookie\");\r\n //this.zipButton.disabled = true;\r\n\r\n // if (currentZip) {\r\n // this.openPopUpButton.classList.add(\"hasZip\");\r\n // this.zipInput.value = currentZip;\r\n // this.zipButton.disabled = false;\r\n // } else if (\r\n // !hasClosed &&\r\n // !this.body.classList.contains(\"compact-navigation\") &&\r\n // !getCookieAcceptance(\"evidaHelpCookie\") &&\r\n // !this.body.classList.contains(\"KundesupportSektion\") &&\r\n // !this.body.classList.contains(\"compact-navigation\")\r\n // ) {\r\n // this.openPopUp();\r\n // }\r\n this.openPopUpButton.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n this.openPopUp();\r\n });\r\n\r\n this.closePopUpButton.addEventListener(\"click\", event => {\r\n //this.closePopUp(this.zipInput.value);\r\n this.closePopUpNoZip();\r\n });\r\n\r\n // this.zipInput.addEventListener(\"input\", event => {\r\n // if (postnummerRegEx.test(this.zipInput.value)) {\r\n // this.zipButton.disabled = false;\r\n // } else {\r\n // this.zipButton.disabled = true;\r\n // }\r\n // });\r\n\r\n // this.zipButton.addEventListener(\"click\", event => {\r\n // let myZip = this.zipInput.value;\r\n // this.validateZip(myZip);\r\n // });\r\n\r\n // this.zipInput.addEventListener(\"keyup\", event => {\r\n // if (event.keyCode === 13) {\r\n // if (postnummerRegEx.test(this.zipInput.value)) {\r\n // let myZip = this.zipInput.value;\r\n // this.validateZip(myZip);\r\n // }\r\n // }\r\n // });\r\n }\r\n\r\n validateZip(zipcode) {\r\n let data = {\r\n postalCode: zipcode\r\n };\r\n\r\n fetch(`/umbraco/api/areas/getareaforpostalcode?site=` + this.site, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n if (json.id > 0) {\r\n this.error.classList.remove(\"activate\");\r\n this.saveZip(zipcode);\r\n } else {\r\n this.error.classList.add(\"activate\");\r\n }\r\n })\r\n .catch(e => {});\r\n }\r\n\r\n saveZip(zipcoden) {\r\n var refelalUrl = this.zipButton.dataset.url;\r\n setCookie(\"evidaZipCode\", zipcoden, 367);\r\n setCookie(\"evidaHelpCookie\", true);\r\n window.location.href = refelalUrl;\r\n }\r\n\r\n openPopUp() {\r\n this.popUp.classList.remove(\"closed\");\r\n var containerHeight = this.popUpContainer.offsetHeight;\r\n this.popUp.style.height = containerHeight + \"px\";\r\n }\r\n\r\n closePopUp(zip) {\r\n if (zip.length < 1) {\r\n removeCookie(\"evidaZipCode\");\r\n this.openPopUpButton.classList.remove(\"hasZip\");\r\n }\r\n\r\n if (!getCookieAcceptance(\"evidaHelpCookie\")) {\r\n setCookie(\"evidaHelpCookie\", true);\r\n }\r\n this.popUp.style.height = \"0px\";\r\n\r\n this.popUp.classList.add(\"closed\");\r\n }\r\n\r\n closePopUpNoZip(){\r\n this.popUp.style.height = \"0px\";\r\n\r\n this.popUp.classList.add(\"closed\");\r\n }\r\n\r\n}\r\n","export default class ImageContainer {\r\n constructor(element) {\r\n this.el = element;\r\n this.image = this.el.querySelectorAll(\"img[data-img]\");\r\n this.picture = this.el.querySelectorAll(\".picture-container\");\r\n this.lazyLoadImage = this.lazyLoadImage.bind(this);\r\n this.lazyLoadPicture = this.lazyLoadPicture.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (this.image.length > 0) {\r\n this.lazyLoadImage(this.image);\r\n }\r\n if (this.picture.length > 0) {\r\n this.lazyLoadPicture(this.picture);\r\n }\r\n }\r\n\r\n lazyLoadImage(img) {\r\n let lazyOptions = {\r\n rootMargin: \"0px 0px 200px 0px\",\r\n threshold: [0],\r\n numSteps: 1\r\n };\r\n const imageObserver = new IntersectionObserver((entries, imgObserver) => {\r\n entries.forEach(\r\n entry => {\r\n if (entry.isIntersecting) {\r\n const lazyImage = entry.target;\r\n lazyImage.src = lazyImage.dataset.img;\r\n if (lazyImage.dataset.srcset) {\r\n lazyImage.srcset = lazyImage.dataset.srcset;\r\n }\r\n if (lazyImage.dataset.sizes) {\r\n lazyImage.sizes = lazyImage.dataset.sizes;\r\n }\r\n lazyImage.classList.add(\"lzy_img\");\r\n imgObserver.unobserve(lazyImage);\r\n }\r\n },\r\n { lazyOptions }\r\n );\r\n });\r\n\r\n img.forEach(element => {\r\n imageObserver.observe(element);\r\n });\r\n }\r\n\r\n lazyLoadPicture(picture) {\r\n let lazyOptions = {\r\n rootMargin: \"0px 0px 200px 0px\",\r\n threshold: [0],\r\n numSteps: 1\r\n };\r\n const imageObserver = new IntersectionObserver((entries, imgObserver) => {\r\n entries.forEach(\r\n entry => {\r\n if (entry.isIntersecting) {\r\n const lazyImage = entry.target;\r\n const lazySrc = lazyImage.querySelectorAll(\"source\");\r\n const defaultImage = lazyImage.querySelector(\"img\");\r\n lazySrc.forEach(image => {\r\n if (image.dataset.srcset) {\r\n image.srcset = image.dataset.srcset;\r\n }\r\n });\r\n defaultImage.src = defaultImage.dataset.img;\r\n if (defaultImage.dataset.srcset) {\r\n defaultImage.srcset = defaultImage.dataset.srcset;\r\n }\r\n if (defaultImage.dataset.sizes) {\r\n defaultImage.sizes = lazyImage.dataset.sizes;\r\n }\r\n\r\n defaultImage.classList.add(\"lzy_img\");\r\n imgObserver.unobserve(lazyImage);\r\n }\r\n },\r\n { lazyOptions }\r\n );\r\n });\r\n\r\n picture.forEach(element => {\r\n imageObserver.observe(element);\r\n });\r\n }\r\n}\r\n","import Masonry from \"masonry-layout\";\r\nexport default class MasonryComponent {\r\n constructor(element) {\r\n this.el = element;\r\n this.grid = this.el.querySelector(\".grid\");\r\n this.gridElements = this.el.querySelectorAll(\".grid-item\");\r\n this.gridSizer = this.el.querySelector(\".grid-sizer\");\r\n this.MasonryInit = this.MasonryInit.bind(this);\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (this.grid) {\r\n this.MasonryInit();\r\n }\r\n }\r\n\r\n MasonryInit() {\r\n var elem = this.grid;\r\n var msnry = new Masonry(elem, {\r\n initLayout: false,\r\n itemSelector: \".grid-item\",\r\n columnWidth: \".grid-sizer\",\r\n percentPosition: true,\r\n horizontalOrder: true,\r\n stagger: 30\r\n });\r\n }\r\n}\r\n","import { isDesktop } from \"../../services/service-utils\";\r\n\r\nexport default class AlertComponent {\r\n constructor(element) {\r\n this.el = element;\r\n this.newsInformation = this.el.querySelector(\".news-information\");\r\n this.newsGrid = this.el.querySelector(\".news-grid\");\r\n this.setNewsHeight = this.setNewsHeight.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (this.newsInformation) {\r\n var loadHeight = this.newsInformation.offsetHeight;\r\n this.setNewsHeight(loadHeight);\r\n var ro = new ResizeObserver(entries => {\r\n for (let entry of entries) {\r\n if (loadHeight != this.newsInformation.offsetHeight)\r\n this.setNewsHeight(this.newsInformation.offsetHeight);\r\n loadHeight = this.newsInformation.offsetHeight;\r\n }\r\n });\r\n\r\n ro.observe(this.newsInformation);\r\n }\r\n }\r\n\r\n setNewsHeight(height) {\r\n if (isDesktop()) {\r\n this.el.style.minHeight = height + \"px\";\r\n } else {\r\n this.el.style.minHeight = \"\";\r\n }\r\n }\r\n}\r\n","import Masonry from \"masonry-layout\";\r\nexport default class NewsListComponent {\r\n constructor(element) {\r\n this.el = element;\r\n this.siteName = this.el.dataset.site;\r\n this.grid = this.el.querySelector(\".grid\");\r\n this.pagingContainer = this.el.querySelector(\".paging\");\r\n this.filterButtons = this.el.querySelectorAll(\".filter-category\");\r\n this.searchField = this.el.querySelector(\"#searchnews\");\r\n this.searchButton = this.el.querySelector(\".cta-searchnews\");\r\n this.resetButton = this.el.querySelector(\".delete-search\");\r\n this.resultText = this.el.querySelector(\".result-text\");\r\n this.language = this.el.dataset.language;\r\n\r\n this.testForFilter = this.testForFilter.bind(this);\r\n this.getInitialResult = this.getInitialResult.bind(this);\r\n this.buildResult = this.buildResult.bind(this);\r\n this.newsMasonry = this.newsMasonry.bind(this);\r\n this.usePager = this.usePager.bind(this);\r\n this.filterCategory = this.filterCategory.bind(this);\r\n this.searchNews = this.searchNews.bind(this);\r\n this.pagePerView = this.grid.dataset.take ? this.grid.dataset.take : 10;\r\n this.generatePager = this.generatePager.bind(this);\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.testForFilter(\"Pressemeddelelse\");\r\n this.testForFilter(\"Case study\");\r\n this.getInitialResult();\r\n\r\n this.searchButton.addEventListener(\"click\", event => {\r\n if (this.searchField.value.length > 0) {\r\n this.searchNews(this.searchField.value);\r\n } else {\r\n this.searchNews(\"\");\r\n }\r\n if (this.searchField.value.length > 0) {\r\n this.resetButton.classList.add(\"active\");\r\n } else {\r\n this.resetButton.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n this.searchField.addEventListener(\"keyup\", event => {\r\n if (event.keyCode === 13) {\r\n this.searchNews(this.searchField.value);\r\n if (this.searchField.value.length > 0) {\r\n this.resetButton.classList.add(\"active\");\r\n } else {\r\n this.resetButton.classList.remove(\"active\");\r\n }\r\n }\r\n });\r\n\r\n this.resetButton.addEventListener(\"click\", event => {\r\n this.searchField.value = \"\";\r\n this.searchNews(\"\");\r\n this.resetButton.classList.remove(\"active\");\r\n });\r\n\r\n this.filterButtons.forEach(element => {\r\n element.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n this.filterCategory(element);\r\n });\r\n });\r\n }\r\n\r\n testForFilter(filter) {\r\n let filterButton = this.el.querySelector(\r\n \"[data-category='\" + filter + \"']\"\r\n );\r\n\r\n let data = {\r\n searchText: \"\",\r\n category: filter,\r\n cropAlias: \"Square-medium\",\r\n Take: this.pagePerView,\r\n Site: this.siteName,\r\n Skip: 0\r\n };\r\n\r\n fetch(`/umbraco/api/search/news`, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n if (json.total == 0) {\r\n filterButton.style.display = \"none\";\r\n }\r\n })\r\n .catch(e => {});\r\n }\r\n\r\n getInitialResult() {\r\n const params = new URLSearchParams(location.search);\r\n let pagingParameter =\r\n params.get(\"page\") != null\r\n ? this.pagePerView * (Math.trunc(params.get(\"page\")) - 1)\r\n : 0;\r\n let categoryParam =\r\n params.get(\"category\") != null ? params.get(\"category\") : \"\";\r\n\r\n let searchQuery = params.get(\"query\") != null ? params.get(\"query\") : \"\";\r\n\r\n if (categoryParam.length > 1) {\r\n let filterButton = this.el.querySelector(\r\n \".filter-category[data-category='\" + categoryParam + \"']\"\r\n );\r\n if (filterButton) {\r\n this.el\r\n .querySelector(\".filter-category.active\")\r\n .classList.remove(\"active\");\r\n filterButton.classList.add(\"active\");\r\n }\r\n }\r\n\r\n if (searchQuery.length > 1) {\r\n this.searchField.value = searchQuery;\r\n }\r\n\r\n let data = {\r\n searchText: searchQuery,\r\n category: categoryParam,\r\n cropAlias: \"Square-medium\",\r\n Take: this.pagePerView,\r\n Site: this.siteName,\r\n Skip: pagingParameter\r\n };\r\n \r\n fetch(`/umbraco/api/search/news`, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n this.buildResult(json);\r\n if (json.total > this.pagePerView) {\r\n this.generatePager(json.total);\r\n }\r\n })\r\n .catch(e => {});\r\n }\r\n\r\n buildResult(result) {\r\n const htmlTemplate = result.results\r\n .map(item => {\r\n let date = new Date(item.date);\r\n let formattetDate = date.toLocaleDateString(\"da-DK\");\r\n let tag = item.category;\r\n\r\n if (this.siteName == \"dgc\" && tag == \"Pressemeddelelse\") {\r\n switch (this.language) {\r\n case \"DK\":\r\n tag = \"Udgivelse\"\r\n break;\r\n case \"EN\":\r\n tag = \"Publication\"\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return `\r\n \r\n `;\r\n })\r\n .join(\"\");\r\n\r\n this.newsMasonry(\r\n htmlTemplate,\r\n result.total,\r\n result.count,\r\n result.request.skip\r\n );\r\n }\r\n\r\n newsMasonry(template, total, count, skip) {\r\n var myGrid = this.grid;\r\n var proxyElem = document.createElement(\"div\");\r\n proxyElem.innerHTML = template;\r\n var items = proxyElem.querySelectorAll(\".grid-item\");\r\n var pressentItems = this.grid.querySelectorAll(\".grid-item\");\r\n var msnry = new Masonry(this.grid, {\r\n itemSelector: \".grid-item\",\r\n columnWidth: \".grid__col-sizer\",\r\n percentPosition: true,\r\n horizontalOrder: true,\r\n stagger: 90,\r\n visibleStyle: { transform: \"translateY(0)\", opacity: 1 },\r\n hiddenStyle: { transform: \"translateY(100px)\", opacity: 0 }\r\n });\r\n\r\n if (pressentItems.length > 0) {\r\n msnry.remove(pressentItems);\r\n }\r\n\r\n items.forEach(element => {\r\n myGrid.appendChild(element);\r\n });\r\n msnry.appended(items);\r\n msnry.layout();\r\n\r\n const params = new URLSearchParams(location.search);\r\n const from = skip + 1;\r\n const to = skip + count;\r\n var restulttext =\r\n params.get(\"query\") != null\r\n ? \"

Din søgning på \" +\r\n params.get(\"query\") +\r\n \" gav \" +\r\n total +\r\n \" resultater. Viser \" +\r\n from +\r\n \" - \" +\r\n to +\r\n \" resultater.

\"\r\n : \"

Viser \" +\r\n from +\r\n \" - \" +\r\n to +\r\n \" ud af \" +\r\n total +\r\n \" resultater

\";\r\n\r\n if (total === 0) {\r\n if (params.get(\"query\")) {\r\n restulttext =\r\n \"

Din søgning på \" +\r\n params.get(\"query\") +\r\n \" gav ingen resultater.\";\r\n } else {\r\n restulttext = \"

Din søgning gav ingen resultater.\";\r\n }\r\n }\r\n\r\n this.resultText.innerHTML = restulttext;\r\n this.generatePager(total);\r\n }\r\n\r\n generatePager(total) {\r\n const params = new URLSearchParams(location.search);\r\n let pagingParameter = params.get(\"page\");\r\n let pages = Math.floor(total / this.pagePerView);\r\n let extra = total % this.pagePerView == 0 ? 0 : 1;\r\n let totalPages = pages + extra;\r\n\r\n var pagerTemplate = \"\";\r\n\r\n for (let step = 1; step <= totalPages; step++) {\r\n var isActive =\r\n pagingParameter == step || (step == 1 && pagingParameter == null)\r\n ? \"active\"\r\n : \"\";\r\n\r\n pagerTemplate =\r\n pagerTemplate +\r\n '' +\r\n step +\r\n \"\";\r\n }\r\n var startStep =\r\n '';\r\n var endStep =\r\n '';\r\n\r\n this.pagingContainer.innerHTML = startStep + pagerTemplate + endStep;\r\n this.pageButtons = this.el.querySelectorAll(\".paging-item\");\r\n this.pageButtons.forEach(element => {\r\n element.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n\r\n this.usePager(element, totalPages);\r\n });\r\n });\r\n }\r\n\r\n usePager(button, totalPages) {\r\n const params = new URLSearchParams(location.search);\r\n var activePage = button.dataset.page;\r\n var pressentActiveButton = this.el.querySelector(\".paging-item.active\");\r\n var presentActivePage = pressentActiveButton.dataset.page;\r\n\r\n if (activePage != 0 && activePage != 999) {\r\n this.pageButtons.forEach(element => {\r\n var page = element.dataset.page;\r\n if (activePage == page) {\r\n element.classList.add(\"active\");\r\n params.set(\"page\", page);\r\n window.history.pushState({}, \"\", \"?\" + params.toString()); \r\n this.getInitialResult();\r\n } else {\r\n element.classList.remove(\"active\");\r\n }\r\n });\r\n } else if (activePage == 0 && presentActivePage != 1) {\r\n pressentActiveButton.classList.remove(\"active\");\r\n var newActivePage = pressentActiveButton.previousSibling.classList.add(\r\n \"active\"\r\n );\r\n var newParam = Math.trunc(presentActivePage) - 1;\r\n params.set(\"page\", newParam);\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n\r\n this.getInitialResult();\r\n } else if (activePage == 999 && presentActivePage != totalPages) {\r\n pressentActiveButton.classList.remove(\"active\");\r\n pressentActiveButton.nextSibling.classList.add(\"active\");\r\n var newParam = Math.trunc(presentActivePage) + 1;\r\n params.set(\"page\", newParam);\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n\r\n this.getInitialResult();\r\n } else {\r\n return;\r\n }\r\n window.scroll({\r\n top: 0,\r\n left: 0,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n\r\n filterCategory(filter) {\r\n const params = new URLSearchParams(location.search);\r\n if (params.get(\"page\") != null) {\r\n params.delete(\"page\");\r\n }\r\n let category = filter.dataset.category;\r\n this.el.querySelector(\".filter-category.active\").classList.remove(\"active\");\r\n\r\n if (category == \"all\") {\r\n params.delete(\"category\");\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n } else {\r\n params.set(\"category\", category);\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n }\r\n filter.classList.add(\"active\");\r\n this.getInitialResult();\r\n }\r\n\r\n searchNews(query) {\r\n const params = new URLSearchParams(location.search);\r\n if (params.get(\"page\") != null) {\r\n params.delete(\"page\");\r\n }\r\n if (query.length > 0) {\r\n params.set(\"query\", query);\r\n } else {\r\n params.delete(\"query\");\r\n }\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n this.getInitialResult();\r\n }\r\n}\r\n","import { getCookieValue, setCookie } from \"../../services/service-cookies\";\r\n\r\nexport default class RedirectPopUp {\r\n constructor(element) {\r\n this.el = element;\r\n this.site = this.el.dataset.site;\r\n\r\n this.body = document.querySelector(\"body\");\r\n this.zipInput = this.el.querySelector(\"input\");\r\n this.zipButton = this.el.querySelector(\"button\");\r\n this.error = this.el.querySelector(\".error-text\");\r\n this.myEvida = document.querySelector(\".mybutton\");\r\n\r\n this.repport = document.querySelector(\".self-repporting\");\r\n\r\n this.redirectMyEvida = this.redirectMyEvida.bind(this);\r\n this.saveZip = this.saveZip.bind(this);\r\n this.validateZip = this.validateZip.bind(this);\r\n this.button = \"\";\r\n this.init();\r\n }\r\n\r\n init() {\r\n const postnummerRegEx = /^[0-9]{4}$/;\r\n\r\n this.zipInput.addEventListener(\"input\", event => {\r\n if (postnummerRegEx.test(this.zipInput.value)) {\r\n this.zipButton.disabled = false;\r\n } else {\r\n this.zipButton.disabled = true;\r\n }\r\n });\r\n\r\n this.zipInput.addEventListener(\"keyup\", event => {\r\n if (event.keyCode === 13) {\r\n if (postnummerRegEx.test(this.zipInput.value)) {\r\n let myZip = this.zipInput.value;\r\n this.validateZip(myZip);\r\n }\r\n }\r\n });\r\n\r\n this.zipButton.addEventListener(\"click\", event => {\r\n let myZip = this.zipInput.value;\r\n this.validateZip(myZip);\r\n });\r\n\r\n this.myEvida.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n this.button = \"myevida\";\r\n this.redirectMyEvida(this.button);\r\n });\r\n\r\n this.repport.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n this.button = \"repport\";\r\n this.redirectMyEvida();\r\n });\r\n }\r\n\r\n redirectMyEvida() {\r\n\r\n var zipcode = getCookieValue(\"evidaZipCode\");\r\n\r\n if (zipcode != null) {\r\n let data = {\r\n postalCode: zipcode\r\n };\r\n\r\n fetch(`/umbraco/api/areas/getareaforpostalcode?site=${this.site}`, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n if (json.id > 0) {\r\n this.body.classList.remove(\"active-popup\");\r\n this.el.classList.remove(\"show-popup\");\r\n if (this.button == \"myevida\") {\r\n window.location = json.loginUrl;\r\n } else {\r\n window.location = json.reportingUrl;\r\n }\r\n } else {\r\n this.body.classList.add(\"active-popup\");\r\n this.el.classList.add(\"show-popup\");\r\n }\r\n })\r\n .catch(e => {});\r\n } else {\r\n this.body.classList.add(\"active-popup\");\r\n this.el.classList.add(\"show-popup\");\r\n }\r\n }\r\n\r\n validateZip(zipcode) {\r\n let data = {\r\n postalCode: zipcode\r\n };\r\n\r\n fetch(`/umbraco/api/areas/getareaforpostalcode?site=${this.site}`, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n if (json.id > 0) {\r\n this.error.classList.remove(\"activate\");\r\n this.saveZip(zipcode);\r\n } else {\r\n this.error.classList.add(\"activate\");\r\n }\r\n })\r\n .catch(e => {});\r\n }\r\n\r\n saveZip(zipcoden) {\r\n setCookie(\"evidaZipCode\", zipcoden, 7);\r\n setCookie(\"evidaHelpCookie\", true);\r\n this.redirectMyEvida();\r\n }\r\n}\r\n","export default class RichTextComponent {\r\n constructor(element) {\r\n this.el = element;\r\n this.tables = this.el.querySelectorAll(\"table\");\r\n this.wrapTable = this.wrapTable.bind(this);\r\n this.showSwipe = this.showSwipe.bind(this);\r\n this.hideSwipe = this.hideSwipe.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (this.tables) {\r\n this.tables.forEach(element => {\r\n this.wrapTable(element);\r\n this.showSwipe(element);\r\n });\r\n }\r\n }\r\n\r\n wrapTable(table) {\r\n var wrapper = document.createElement(\"div\");\r\n var showSwipe = document.createElement(\"div\");\r\n var swipeSVG =\r\n \"\";\r\n wrapper.classList.add(\"table-wrapper\");\r\n showSwipe.classList.add(\"show-swipe\");\r\n showSwipe.innerHTML = swipeSVG;\r\n\r\n table.parentNode.insertBefore(wrapper, table);\r\n wrapper.appendChild(table);\r\n wrapper.appendChild(showSwipe);\r\n\r\n wrapper.addEventListener(\"touchstart\", event => {\r\n this.hideSwipe(table);\r\n });\r\n\r\n var ro = new ResizeObserver(entries => {\r\n for (let entry of entries) {\r\n wrapper.scrollTo(0, 0);\r\n this.showSwipe(table);\r\n }\r\n });\r\n\r\n // Observe one or multiple elements\r\n ro.observe(wrapper);\r\n }\r\n\r\n showSwipe(table) {\r\n let tableWidth = table.offsetWidth;\r\n let tableWrapper = this.el.querySelector(\".table-wrapper\");\r\n let richtextWidth = tableWrapper.offsetWidth;\r\n\r\n if (tableWidth > richtextWidth) {\r\n table.classList.add(\"wrap-table\");\r\n }\r\n }\r\n\r\n hideSwipe(table) {\r\n table.classList.remove(\"wrap-table\");\r\n }\r\n}\r\n","export default class GlobalSearch {\r\n constructor(element) {\r\n this.el = element;\r\n this.searchButton = this.el.querySelector(\".search-button\");\r\n this.searchField = this.el.querySelector(\"#search\");\r\n this.searchPageUrl = this.el.dataset.searchUrl;\r\n\r\n this.searchSite = this.searchSite.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.searchButton.addEventListener(\"click\", event => {\r\n if (this.searchField.value.length > 0) {\r\n this.searchSite(this.searchField.value);\r\n } else {\r\n this.searchSite(\"\");\r\n }\r\n });\r\n\r\n this.searchField.addEventListener(\"keyup\", event => {\r\n if (event.keyCode === 13) {\r\n this.searchSite(this.searchField.value);\r\n }\r\n });\r\n }\r\n\r\n searchSite(query) {\r\n console.log(this.searchPageUrl);\r\n const params = new URLSearchParams(location.search);\r\n if (params.get(\"page\") != null) {\r\n params.delete(\"page\");\r\n }\r\n if (query.length > 0) {\r\n params.set(\"query\", query);\r\n } else {\r\n params.delete(\"query\");\r\n }\r\n window.location.replace(this.searchPageUrl + \"?\" + params.toString());\r\n }\r\n}\r\n","export default class SearchComponent {\r\n constructor(element) {\r\n this.el = element;\r\n this.resultList = this.el.querySelector(\".search-result\");\r\n this.resultText = this.el.querySelector(\".result\");\r\n this.pagingContainer = this.el.querySelector(\".paging\");\r\n this.searchField = this.el.querySelector(\"#searchpage\");\r\n this.searchButton = this.el.querySelector(\".cta-pagesearch\");\r\n\r\n this.generateResult = this.generateResult.bind(this);\r\n this.searchSite = this.searchSite.bind(this);\r\n this.pagePerView =\r\n this.el.dataset.paging != null ? this.el.dataset.paging : 20;\r\n this.generatePager = this.generatePager.bind(this);\r\n this.usePager = this.usePager.bind(this);\r\n this.buildResult = this.buildResult.bind(this);\r\n \r\n this.siteName = this.el.dataset.siteName;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n const params = new URLSearchParams(location.search);\r\n if (params.get(\"query\") != null) {\r\n this.searchSite(params.get(\"query\"));\r\n if (this.searchField.value != params.get(\"query\")) {\r\n this.searchField.value = params.get(\"query\");\r\n }\r\n }\r\n\r\n this.searchButton.addEventListener(\"click\", event => {\r\n if (this.searchField.value.length > 0) {\r\n this.searchSite(this.searchField.value);\r\n } else {\r\n this.searchSite(\"\");\r\n }\r\n });\r\n\r\n this.searchField.addEventListener(\"keyup\", event => {\r\n if (event.keyCode === 13) {\r\n this.searchSite(this.searchField.value);\r\n }\r\n });\r\n }\r\n\r\n generateResult() {\r\n const params = new URLSearchParams(location.search);\r\n let pagingParameter =\r\n params.get(\"page\") != null\r\n ? this.pagePerView * (Math.trunc(params.get(\"page\")) - 1)\r\n : 0;\r\n\r\n let searchQuery = params.get(\"query\") != null ? params.get(\"query\") : \"\";\r\n\r\n let data = {\r\n searchText: searchQuery,\r\n Take: this.pagePerView,\r\n Skip: pagingParameter,\r\n siteName: this.siteName\r\n };\r\n\r\n fetch(`/umbraco/api/search/site`, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n // 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n this.buildResult(json);\r\n if (json.total > this.pagePerView) {\r\n this.generatePager(json.total);\r\n } else {\r\n this.pagingContainer.innerHTML = \"\";\r\n }\r\n })\r\n .catch(e => {});\r\n }\r\n\r\n buildResult(result) {\r\n const htmlTemplate = result.results\r\n .map(item => {\r\n let date = new Date(item.date);\r\n let formattetDate = date.toLocaleDateString(\"da-DK\");\r\n return `\r\n

\r\n `;\r\n })\r\n .join(\"\");\r\n\r\n this.resultList.innerHTML = \"\";\r\n this.resultList.innerHTML = htmlTemplate;\r\n\r\n const params = new URLSearchParams(location.search);\r\n var showing =\r\n this.pagePerView < result.total ? this.pagePerView : result.total;\r\n\r\n var resultNode = document.createElement(\"p\");\r\n if (params.get(\"query\") != null) {\r\n var queryNode = document.createElement(\"span\");\r\n queryNode.textContent = params.get(\"query\");\r\n queryNode.classList.add(\"query\");\r\n resultNode.appendChild(document.createTextNode(\"Din søgning på \\\"\"));\r\n resultNode.appendChild(queryNode);\r\n resultNode.appendChild(document.createTextNode(\"\\\" gav \" + result.total + \" resultater.\"));\r\n } else {\r\n resultNode.innerHTML = \"Viser \" +\r\n showing +\r\n \" ud af \" +\r\n result.total +\r\n \" resultater\";\r\n }\r\n this.resultText.innerHTML = \"\";\r\n this.resultText.appendChild(resultNode);\r\n }\r\n\r\n generatePager(total) {\r\n const params = new URLSearchParams(location.search);\r\n let pagingParameter = params.get(\"page\");\r\n let pages = Math.floor(total / this.pagePerView);\r\n let extra = total % this.pagePerView == 0 ? 0 : 1;\r\n let totalPages = pages + extra;\r\n\r\n var pagerTemplate = \"\";\r\n\r\n for (let step = 1; step <= totalPages; step++) {\r\n var isActive =\r\n pagingParameter == step || (step == 1 && pagingParameter == null)\r\n ? \"active\"\r\n : \"\";\r\n\r\n pagerTemplate =\r\n pagerTemplate +\r\n '' +\r\n step +\r\n \"\";\r\n }\r\n var startStep =\r\n '';\r\n var endStep =\r\n '';\r\n\r\n this.pagingContainer.innerHTML = startStep + pagerTemplate + endStep;\r\n this.pageButtons = this.el.querySelectorAll(\".paging-item\");\r\n this.pageButtons.forEach(element => {\r\n element.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n\r\n this.usePager(element, totalPages);\r\n });\r\n });\r\n }\r\n\r\n usePager(button, totalPages) {\r\n const params = new URLSearchParams(location.search);\r\n var activePage = button.dataset.page;\r\n var pressentActiveButton = this.el.querySelector(\".paging-item.active\");\r\n var presentActivePage = pressentActiveButton.dataset.page;\r\n\r\n if (activePage != 0 && activePage != 999) {\r\n this.pageButtons.forEach(element => {\r\n var page = element.dataset.page;\r\n if (activePage == page) {\r\n element.classList.add(\"active\");\r\n params.set(\"page\", page);\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n\r\n this.generateResult();\r\n } else {\r\n element.classList.remove(\"active\");\r\n }\r\n });\r\n } else if (activePage == 0 && presentActivePage != 1) {\r\n pressentActiveButton.classList.remove(\"active\");\r\n var newActivePage = pressentActiveButton.previousSibling.classList.add(\r\n \"active\"\r\n );\r\n var newParam = Math.trunc(presentActivePage) - 1;\r\n params.set(\"page\", newParam);\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n\r\n this.generateResult();\r\n } else if (activePage == 999 && presentActivePage != totalPages) {\r\n pressentActiveButton.classList.remove(\"active\");\r\n pressentActiveButton.nextSibling.classList.add(\"active\");\r\n var newParam = Math.trunc(presentActivePage) + 1;\r\n params.set(\"page\", newParam);\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n\r\n this.generateResult();\r\n } else {\r\n return;\r\n }\r\n window.scroll({\r\n top: 0,\r\n left: 0,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n\r\n searchSite(query) {\r\n const params = new URLSearchParams(location.search);\r\n if (params.get(\"page\") != null) {\r\n params.delete(\"page\");\r\n }\r\n if (query.length > 0) {\r\n params.set(\"query\", query);\r\n } else {\r\n params.delete(\"query\");\r\n }\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n this.generateResult();\r\n }\r\n}\r\n","export default class ShareComponent {\r\n constructor(element) {\r\n this.el = element;\r\n this.twitter = this.el.querySelector(\".twitter-link\");\r\n this.linkedIn = this.el.querySelector(\".linkedin-link\");\r\n this.facebooklink = this.el.querySelector(\".facebook-link\");\r\n this.tweet = this.tweet.bind(this);\r\n this.link = this.link.bind(this);\r\n this.facebook = this.facebook.bind(this)\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (this.twitter) {\r\n this.twitter.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n this.tweet();\r\n });\r\n }\r\n\r\n if (this.linkedIn) {\r\n this.linkedIn.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n this.link();\r\n });\r\n }\r\n\r\n if (this.facebooklink){\r\n this.facebooklink.addEventListener(\"click\", event =>{\r\n event.preventDefault();\r\n this.facebook();\r\n })\r\n }\r\n }\r\n\r\n facebook(){\r\n console.log('window.location.href: ', window.location.href)\r\n window.open(\r\n \"https://www.facebook.com/sharer/sharer.php?u=\" +\r\n `${window.location.href}`\r\n ,\"\"\r\n ,\"menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=300,width=600,top=0,left=50%\"\r\n )\r\n }\r\n\r\n tweet() {\r\n window.open(\r\n \"https://twitter.com/share?url=\" +\r\n escape(window.location.href) +\r\n \"&text=\" +\r\n document.title,\r\n \"\",\r\n \"menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=300,width=600,top=0,left=50%\"\r\n );\r\n return false;\r\n }\r\n\r\n link() {\r\n window.open(\r\n \"https://www.linkedin.com/shareArticle?mini=true&url=\" +\r\n window.location.href +\r\n \"&title=\" +\r\n escape(document.title) +\r\n \"&source=Evida.dk\",\r\n \"\",\r\n \"menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=300,width=600,top=0\"\r\n );\r\n return false;\r\n }\r\n}\r\n","import { isDesktop, detectOverlap } from \"../../services/service-utils\";\r\n\r\nexport default class SupportPage {\r\n constructor(element) {\r\n this.body = document.querySelector(\"body\");\r\n this.el = element;\r\n this.atTop = window.scrollY === 0;\r\n this.toTop = this.el.querySelector(\".to-top\");\r\n this.menu = this.el.querySelector(\".support-menu\");\r\n this.footer = document.querySelector(\"footer\");\r\n this.hideToTop = this.hideToTop.bind(this);\r\n this.scrollToAnchor = this.scrollToAnchor.bind(this);\r\n this.animatedElement = this.el.querySelectorAll(\".animate-section\");\r\n this.init();\r\n }\r\n\r\n init() {\r\n var target = window.location.hash,\r\n target = target.replace(\"#\", \"\");\r\n\r\n // delete hash so the page won't scroll to it\r\n window.location.hash = \"\";\r\n var allAnimated = new Promise((resolve, reject) => {\r\n this.animatedElement.forEach((element, index, array) => {\r\n element.classList.add(\"animation-done\");\r\n if (index === array.length - 1) resolve();\r\n });\r\n });\r\n\r\n allAnimated.then(() => {\r\n if (target) {\r\n this.scrollToAnchor(target);\r\n }\r\n });\r\n\r\n if (this.toTop) {\r\n this.toTop.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n window.scroll({\r\n top: 0,\r\n left: 0,\r\n behavior: \"smooth\"\r\n });\r\n });\r\n }\r\n if (isDesktop()) {\r\n var myrec = this.toTop.getBoundingClientRect();\r\n\r\n if (\r\n detectOverlap(this.toTop, this.menu) ||\r\n detectOverlap(this.toTop, this.footer)\r\n ) {\r\n this.hideToTop(true);\r\n }\r\n\r\n let resizeTimer = {};\r\n window.addEventListener(\"scroll\", event => {\r\n clearTimeout(resizeTimer);\r\n resizeTimer = setTimeout(\r\n function() {\r\n if (\r\n detectOverlap(this.toTop, this.menu) ||\r\n detectOverlap(this.toTop, this.footer)\r\n ) {\r\n this.hideToTop(true);\r\n } else {\r\n this.hideToTop(false);\r\n }\r\n }.bind(this),\r\n 150\r\n );\r\n });\r\n }\r\n }\r\n\r\n scrollToAnchor(target) {\r\n window.onload = function() {\r\n if (target) {\r\n var anchor = this.el.querySelector(\"[name='\" + target + \"']\");\r\n anchor.scrollIntoView({ inline: \"start\" });\r\n }\r\n }.bind(this);\r\n let url = document.location;\r\n url.hash = target;\r\n }\r\n\r\n hideToTop(state) {\r\n if (state) {\r\n this.toTop.classList.add(\"hide\");\r\n } else {\r\n this.toTop.classList.remove(\"hide\");\r\n }\r\n }\r\n}\r\n","export default class SupportList {\r\n constructor(element) {\r\n this.el = element;\r\n this.lists = this.el.querySelectorAll(\".support-subject-list\");\r\n this.openText = this.el.dataset.open;\r\n this.closeText = this.el.dataset.close;\r\n this.listToggle = this.listToggle.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.lists.forEach(element => {\r\n const listButton = element.querySelector(\".open-list\");\r\n if (listButton) {\r\n listButton.addEventListener(\"click\", event => {\r\n this.listToggle(element, listButton);\r\n });\r\n }\r\n });\r\n }\r\n\r\n listToggle(element, button) {\r\n let innerText = this.openText;\r\n let listContainer = element.querySelector(\".support-subject-list-outer\");\r\n let list = listContainer.querySelector(\".support-subject-list-inner\");\r\n let listHeight = list.offsetHeight;\r\n\r\n if (button.classList.contains(\"is-open\")) {\r\n button.classList.remove(\"is-open\");\r\n listContainer.style.height = \"\";\r\n } else {\r\n button.classList.add(\"is-open\");\r\n innerText = this.closeText;\r\n listContainer.style.height = listHeight + \"px\";\r\n }\r\n button.innerHTML = innerText;\r\n }\r\n}\r\n","export default class SupportMenu {\r\n constructor(element) {\r\n this.el = element;\r\n this.container = document.querySelector(\".support-page\")\r\n this.init();\r\n }\r\n\r\n init() {\r\n console.log(\"init\");\r\n let height = this.container.offsetHeight - window.innerHeight;\r\n \r\n var controller = new ScrollMagic.Controller();\r\n var pinMenuToPage = new ScrollMagic.Scene({\r\n triggerElement: this.el,\r\n triggerHook:0,\r\n duration:height\r\n })\r\n .setPin(this.el)\r\n .addTo(controller)\r\n }\r\n}\r\n","export default class SupportSearch {\r\n constructor(element) {\r\n this.el = element;\r\n\r\n this.siteName = this.el.dataset.site;\r\n\r\n this.searchButton = this.el.querySelector(\".support-search-button\");\r\n this.searchField = this.el.querySelector(\"#support-search\");\r\n this.resultList = this.el.querySelector(\".search-result\");\r\n this.resultText = this.el.querySelector(\".result\");\r\n this.pagingContainer = this.el.querySelector(\".paging\");\r\n\r\n this.generateResult = this.generateResult.bind(this);\r\n this.searchSite = this.searchSite.bind(this);\r\n this.pagePerView =\r\n this.el.dataset.paging != null ? this.el.dataset.paging : 10;\r\n this.generatePager = this.generatePager.bind(this);\r\n this.usePager = this.usePager.bind(this);\r\n this.buildResult = this.buildResult.bind(this);\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n const params = new URLSearchParams(location.search);\r\n if (params.get(\"query\") != null) {\r\n this.searchSite(params.get(\"query\"));\r\n if (this.searchField.value != params.get(\"query\")) {\r\n this.searchField.value = params.get(\"query\");\r\n }\r\n }\r\n\r\n this.searchButton.addEventListener(\"click\", event => {\r\n if (this.searchField.value.length > 0) {\r\n this.searchSite(this.searchField.value);\r\n } else {\r\n this.searchSite(\"\");\r\n }\r\n });\r\n\r\n this.searchField.addEventListener(\"keyup\", event => {\r\n if (event.keyCode === 13) {\r\n this.searchSite(this.searchField.value);\r\n }\r\n });\r\n }\r\n\r\n generateResult() {\r\n const params = new URLSearchParams(location.search);\r\n let pagingParameter =\r\n params.get(\"page\") != null\r\n ? this.pagePerView * (Math.trunc(params.get(\"page\")) - 1)\r\n : 0;\r\n\r\n let searchQuery = params.get(\"query\") != null ? params.get(\"query\") : \"\";\r\n\r\n let data = {\r\n types: [\"supportArticle\"],\r\n searchText: searchQuery,\r\n Take: this.pagePerView,\r\n Skip: pagingParameter,\r\n siteName: this.siteName\r\n };\r\n\r\n fetch(`/umbraco/api/search/site`, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n // 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n this.buildResult(json);\r\n if (json.total > this.pagePerView) {\r\n this.generatePager(json.total);\r\n }\r\n })\r\n .catch(e => {});\r\n }\r\n\r\n buildResult(result) {\r\n const htmlTemplate = result.results\r\n .map(item => {\r\n let date = new Date(item.date);\r\n let formattetDate = date.toLocaleDateString(\"da-DK\");\r\n return `\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

${item.title}

\r\n

${item.description}

\r\n \r\n
\r\n
\r\n `;\r\n })\r\n .join(\"\");\r\n\r\n this.resultList.innerHTML = \"\";\r\n this.resultList.innerHTML = htmlTemplate;\r\n\r\n const params = new URLSearchParams(location.search);\r\n var showing =\r\n result.total < this.pagePerView ? result.total : this.pagePerView;\r\n var restulttext =\r\n params.get(\"query\") != null\r\n ? \"

Din søgning på \" +\r\n params.get(\"query\") +\r\n \" gav \" +\r\n result.total +\r\n \" resultater

\"\r\n : \"

Viser \" +\r\n showing +\r\n \" ud af \" +\r\n result.total +\r\n \" resultater

\";\r\n\r\n this.resultText.innerHTML = restulttext;\r\n }\r\n\r\n generatePager(total) {\r\n const params = new URLSearchParams(location.search);\r\n let pagingParameter = params.get(\"page\");\r\n let pages = Math.floor(total / this.pagePerView);\r\n let extra = total % this.pagePerView == 0 ? 0 : 1;\r\n let totalPages = pages + extra;\r\n\r\n var pagerTemplate = \"\";\r\n\r\n for (let step = 1; step <= totalPages; step++) {\r\n var isActive =\r\n pagingParameter == step || (step == 1 && pagingParameter == null)\r\n ? \"active\"\r\n : \"\";\r\n\r\n pagerTemplate =\r\n pagerTemplate +\r\n '' +\r\n step +\r\n \"\";\r\n }\r\n var startStep =\r\n '';\r\n var endStep =\r\n '';\r\n\r\n this.pagingContainer.innerHTML = startStep + pagerTemplate + endStep;\r\n this.pageButtons = this.el.querySelectorAll(\".paging-item\");\r\n this.pageButtons.forEach(element => {\r\n element.addEventListener(\"click\", event => {\r\n event.preventDefault();\r\n\r\n this.usePager(element, totalPages);\r\n });\r\n });\r\n }\r\n\r\n usePager(button, totalPages) {\r\n const params = new URLSearchParams(location.search);\r\n var activePage = button.dataset.page;\r\n var pressentActiveButton = this.el.querySelector(\".paging-item.active\");\r\n var presentActivePage = pressentActiveButton.dataset.page;\r\n\r\n if (activePage != 0 && activePage != 999) {\r\n this.pageButtons.forEach(element => {\r\n var page = element.dataset.page;\r\n if (activePage == page) {\r\n element.classList.add(\"active\");\r\n params.set(\"page\", page);\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n\r\n this.generateResult();\r\n } else {\r\n element.classList.remove(\"active\");\r\n }\r\n });\r\n } else if (activePage == 0 && presentActivePage != 1) {\r\n pressentActiveButton.classList.remove(\"active\");\r\n var newActivePage = pressentActiveButton.previousSibling.classList.add(\r\n \"active\"\r\n );\r\n var newParam = Math.trunc(presentActivePage) - 1;\r\n params.set(\"page\", newParam);\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n\r\n this.generateResult();\r\n } else if (activePage == 999 && presentActivePage != totalPages) {\r\n pressentActiveButton.classList.remove(\"active\");\r\n pressentActiveButton.nextSibling.classList.add(\"active\");\r\n var newParam = Math.trunc(presentActivePage) + 1;\r\n params.set(\"page\", newParam);\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n\r\n this.generateResult();\r\n } else {\r\n return;\r\n }\r\n window.scroll({\r\n top: 0,\r\n left: 0,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n\r\n searchSite(query) {\r\n const params = new URLSearchParams(location.search);\r\n if (params.get(\"page\") != null) {\r\n params.delete(\"page\");\r\n }\r\n if (query.length > 0) {\r\n params.set(\"query\", query);\r\n } else {\r\n params.delete(\"query\");\r\n }\r\n window.history.pushState({}, \"\", \"?\" + params.toString());\r\n this.generateResult();\r\n }\r\n}\r\n","import { EventBus, EventTypes } from \"../../consts/const-event-types\";\r\nimport { isDesktop } from \"../../services/service-utils\";\r\n\r\nexport default class TabModule {\r\n constructor(element) {\r\n this.el = element;\r\n this.tabButtons = this.el.querySelectorAll(\".tab-button\");\r\n this.tabContainer = this.el.querySelector(\".tab-module-container\");\r\n this.tabContent = this.el.querySelectorAll(\".tab-container\");\r\n this.toggleTab = this.toggleTab.bind(this);\r\n this.calculateHeight = this.calculateHeight.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n let resizeTimer = {};\r\n\r\n if (isDesktop()) {\r\n this.calculateHeight();\r\n }\r\n window.addEventListener(\"resize\", event => {\r\n clearTimeout(resizeTimer);\r\n resizeTimer = setTimeout(\r\n function() {\r\n if (isDesktop()) {\r\n this.calculateHeight();\r\n } else {\r\n this.tabContainer.style.height = \"auto\";\r\n }\r\n }.bind(this),\r\n 250\r\n );\r\n });\r\n\r\n this.tabButtons.forEach(element => {\r\n element.addEventListener(\"click\", event => {\r\n this.toggleTab(element.dataset.tab);\r\n });\r\n });\r\n }\r\n\r\n calculateHeight() {\r\n let tabHeighe = 0;\r\n this.tabContent.forEach(element => {\r\n var positionInfo = element.getBoundingClientRect();\r\n var height = element.scrollHeight;\r\n\r\n if (element.offsetHeight > tabHeighe) tabHeighe = element.offsetHeight;\r\n });\r\n\r\n this.tabContainer.style.minHeight = tabHeighe + \"px\";\r\n }\r\n\r\n toggleTab(tabNumber) {\r\n this.tabButtons.forEach(element => {\r\n if (element.dataset.tab === tabNumber) {\r\n element.classList.add(\"active\");\r\n } else {\r\n element.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n this.tabContent.forEach(element => {\r\n if (element.dataset.tabcontent === tabNumber) {\r\n element.classList.add(\"active\");\r\n } else {\r\n element.classList.remove(\"active\");\r\n }\r\n });\r\n }\r\n}\r\n","export default class VimeoComponent {\r\n constructor(element) {\r\n this.el = element;\r\n this.playButton = this.el.querySelector(\".video-play\");\r\n this.playVideo = this.playVideo.bind(this);\r\n this.pauseVideo = this.pauseVideo.bind(this);\r\n this.loadVideo = this.loadVideo.bind(this);\r\n this.videoContainer = this.el.querySelector(\".video-player\");\r\n this.videoID = this.videoContainer?this.videoContainer.dataset.vimeoId:``;\r\n this.videoCover = this.el.querySelector(\".video-cover\");\r\n this.videoEmbed = this.el.querySelector(\".embed-container\");\r\n this.observeOnScroll = this.observeOnScroll.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (this.videoID) {\r\n this.loadVideo(this.videoID);\r\n this.observeOnScroll(this.el, this.videoID);\r\n }\r\n }\r\n\r\n loadVideo(videoID) {\r\n var isLoaded = false;\r\n var options = {\r\n id: videoID,\r\n loop: false\r\n };\r\n var videoContainer = \"video-\" + videoID;\r\n var player = new Vimeo.Player(videoContainer, options);\r\n\r\n player.on(\"loaded\", function() {\r\n isLoaded = true;\r\n });\r\n\r\n if (this.playButton) {\r\n this.playButton.addEventListener(\"click\", event => {\r\n this.videoCover.classList.add(\"active\");\r\n this.videoEmbed.classList.add(\"active\");\r\n player.play();\r\n });\r\n } else {\r\n this.videoEmbed.classList.add(\"active\");\r\n }\r\n }\r\n\r\n playVideo(videoID) {\r\n if (this.videoCover) {\r\n this.videoCover.classList.add(\"active\");\r\n }\r\n this.videoEmbed.classList.add(\"active\");\r\n var options = {\r\n id: videoID,\r\n loop: false\r\n };\r\n var videoContainer = \"video-\" + videoID;\r\n\r\n var player = new Vimeo.Player(videoContainer, options);\r\n\r\n player.play();\r\n }\r\n\r\n observeOnScroll(element, videoID) {\r\n const observer = new IntersectionObserver(\r\n entries => {\r\n entries.forEach(entry => {\r\n if (entry.intersectionRatio * 100 < 50) {\r\n this.pauseVideo(videoID);\r\n }\r\n });\r\n },\r\n {\r\n threshold: [0, 0.25, 0.5, 0.75, 1]\r\n }\r\n );\r\n\r\n observer.observe(element);\r\n }\r\n\r\n pauseVideo(videoID) {\r\n var videoContainer = \"video-\" + videoID;\r\n var PausePlayer = new Vimeo.Player(videoContainer);\r\n\r\n PausePlayer.getPaused()\r\n .then(function(paused) {\r\n if (!paused) {\r\n PausePlayer.pause();\r\n }\r\n })\r\n .catch(function(error) {\r\n // an error occurred\r\n });\r\n }\r\n}\r\n","import {\r\n getCookieAcceptance,\r\n setCookie,\r\n getCookieValue\r\n} from \"../../services/service-cookies\";\r\n\r\nexport default class ZipPopUp {\r\n constructor(element) {\r\n this.el = element;\r\n this.siteName = this.el.dataset.site;\r\n this.zipInput = this.el.querySelector(\"input\");\r\n this.zipButton = this.el.querySelector(\"button\");\r\n this.body = document.querySelector(\"body\");\r\n this.error = this.el.querySelector(\".error-text\");\r\n this.saveZip = this.saveZip.bind(this);\r\n this.validateZip = this.validateZip.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n let currentZip = getCookieValue(\"evidaZipCode\");\r\n const postnummerRegEx = /^[0-9]{4}$/;\r\n\r\n if (!currentZip) {\r\n this.body.classList.add(\"active-popup\");\r\n this.el.classList.add(\"show-popup\");\r\n\r\n this.zipInput.addEventListener(\"input\", event => {\r\n if (postnummerRegEx.test(this.zipInput.value)) {\r\n this.zipButton.disabled = false;\r\n } else {\r\n this.zipButton.disabled = true;\r\n }\r\n });\r\n\r\n this.zipInput.addEventListener(\"keyup\", event => {\r\n if (event.keyCode === 13) {\r\n if (postnummerRegEx.test(this.zipInput.value)) {\r\n let myZip = this.zipInput.value;\r\n this.validateZip(myZip);\r\n }\r\n }\r\n });\r\n\r\n this.zipButton.addEventListener(\"click\", event => {\r\n let myZip = this.zipInput.value;\r\n this.validateZip(myZip);\r\n });\r\n }\r\n }\r\n\r\n validateZip(zipcode) {\r\n let data = {\r\n postalCode: zipcode\r\n };\r\n\r\n fetch(`/umbraco/api/areas/getareaforpostalcode?site=` + this.siteName, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n if (json.id > 0) {\r\n this.error.classList.remove(\"activate\");\r\n this.saveZip(zipcode);\r\n } else {\r\n this.error.classList.add(\"activate\");\r\n }\r\n })\r\n .catch(e => {});\r\n }\r\n\r\n saveZip(zipcoden) {\r\n setCookie(\"evidaZipCode\", zipcoden, 7);\r\n setCookie(\"evidaHelpCookie\", true);\r\n\r\n window.location.reload(true);\r\n this.body.classList.remove(\"active-popup\");\r\n this.el.classList.remove(\"show-popup\");\r\n }\r\n}\r\n","export const EventBus = document.body;\r\n\r\nexport const EventTypes = Object.freeze({\r\n ALL_COMPONENTS_READY: 'ALL_COMPONENTS_READY',\r\n MY_CUSTOM_EVENT: 'MY_CUSTOM_EVENT'\r\n})\r\n","// extracted by mini-css-extract-plugin","/*\r\n * For ES6+ features:\r\n * Either import '@babel/polyfill' here, or\r\n * use https://cdn.polyfill.io/v2/polyfill.min.js (default for this project)\r\n */\r\n\r\nimport \"./dgc.css\";\r\nimport { EventBus, EventTypes } from \"./consts/const-event-types\";\r\n\r\n/*\r\nTo add new components, import them here and add them to the 'components'-array below.\r\nAdd an appropriate selectorName for use in DOM (fx:
):\r\n*/\r\nimport App from \"./components/app/app\";\r\nimport Header from \"./components/header/header\";\r\nimport TabModule from \"./components/tab-module/tab-module\";\r\nimport HelpPopUp from \"./components/help-popup/help-popup\";\r\nimport AnchorMenu from \"./components/anchor-component/anchor-menu\";\r\nimport AlertComponent from \"./components/alert-component/alert-component\";\r\nimport ImageContainer from \"./components/image-container/image-container\";\r\nimport MasonryComponent from \"./components/masonry/masonry\";\r\nimport NewsListComponent from \"./components/newslist-component/newslist-component\";\r\nimport SupportSearch from \"./components/support-search/support-search\";\r\nimport SupportList from \"./components/support-list/support-list\";\r\nimport ZipPopUp from \"./components/zipPopUp/zipPopUp\";\r\nimport NewsComponent from \"./components/news-component/news-component\";\r\nimport AccordionComponent from \"./components/accordion-component/accordion-component\";\r\nimport ContactSelection from \"./components/contact-selection/contact-selection\";\r\nimport VimeoComponent from \"./components/vimeo-component/vimeo-component\";\r\nimport FpHeader from \"./components/fpheader/fpheader\";\r\nimport ShareComponent from \"./components/share-component/share-component\";\r\nimport RichTextComponent from \"./components/richtext-component/richtext-component\";\r\nimport ContactForm from \"./components/contact-selection/contact-form\";\r\nimport AnimateSection from \"./components/animate-section/animate-section\";\r\nimport SearchComponent from \"./components/search-component/search-component\";\r\nimport GlobalSearch from \"./components/search-component/global-search\";\r\nimport SupportPage from \"./components/support-layout/support-layout\";\r\nimport RedirectPopUp from \"./components/redirectZipPopup/redirectPopup\";\r\nimport ContactCall from \"./components/contact-selection/contact-call\";\r\nimport ConnectionComponent from \"./components/connection-component/connection-component\";\r\nimport BusinessConnectionComponent from \"./components/connection-component/businessconnection-component\";\r\nimport Glider from \"./components/Glide/glide\";\r\nimport EditZip from \"./components/edit-zip/edit-zip\";\r\nimport SupportMenu from \"./components/support-menu/support-menu\"\r\nimport ContactSelect from \"./components/contact-page-top/contact-select\"\r\nimport ContactSelectionEmail from \"./components/contact-selection/contact-selection-email\";\r\n\r\nconst components = [\r\n { Class: App, selectorName: \"app\" },\r\n { Class: Header, selectorName: \"header\" },\r\n { Class: TabModule, selectorName: \"tab-module\" },\r\n { Class: HelpPopUp, selectorName: \"help-popup\" },\r\n { Class: AnchorMenu, selectorName: \"anchor-menu\" },\r\n { Class: AlertComponent, selectorName: \"alert-component\" },\r\n { Class: ImageContainer, selectorName: \"image-container\" },\r\n { Class: MasonryComponent, selectorName: \"masonry\" },\r\n { Class: NewsListComponent, selectorName: \"newslist-component\" },\r\n { Class: SupportSearch, selectorName: \"support-search\" },\r\n { Class: SupportList, selectorName: \"support-list\" },\r\n { Class: ZipPopUp, selectorName: \"zipPopUp\" },\r\n { Class: NewsComponent, selectorName: \"news-component\" },\r\n { Class: AccordionComponent, selectorName: \"accordion-component\" },\r\n { Class: ContactSelection, selectorName: \"contact-selection\" },\r\n { Class: VimeoComponent, selectorName: \"vimeo-component\" },\r\n { Class: FpHeader, selectorName: \"fp-header\" },\r\n { Class: ShareComponent, selectorName: \"share-component\" },\r\n { Class: RichTextComponent, selectorName: \"richtext-component\" },\r\n { Class: ContactForm, selectorName: \"contact-form\" },\r\n { Class: AnimateSection, selectorName: \"animate-section\" },\r\n { Class: SearchComponent, selectorName: \"search-component\" },\r\n { Class: GlobalSearch, selectorName: \"global-search\" },\r\n { Class: SupportPage, selectorName: \"support-page\" },\r\n { Class: RedirectPopUp, selectorName: \"redirect-PopUp\" },\r\n { Class: ContactCall, selectorName: \"contact-call\" },\r\n { Class: ConnectionComponent, selectorName: \"connection-component\" },\r\n { Class: ContactSelectionEmail, selectorName: \"contact-selection-email\"},\r\n {\r\n Class: BusinessConnectionComponent,\r\n selectorName: \"businessconnection-component\"\r\n },\r\n { Class: Glider, selectorName: \"glide\" },\r\n {Class: EditZip, selectorName: \"edit-zip\"},\r\n {Class: SupportMenu, selectorName: \"support-menu\"},\r\n {Class: ContactSelect, selectorName: \"contact-select\"},\r\n];\r\n\r\n/*\r\n * ComponentInstantiator traverses the DOM-tree and looks for [data-component='] attributes.\r\n */\r\nclass ComponentInstantiator {\r\n constructor() {\r\n this.createComponents();\r\n this.dispatchReady();\r\n return this;\r\n }\r\n\r\n createComponents() {\r\n this.componentsInstantiated = {};\r\n\r\n components.map(component => {\r\n const nodes = [];\r\n // select all DOM-nodes with the data-component attribute:\r\n const nodeItems = [\r\n ...document.querySelectorAll(\r\n \"[data-component='\" + component.selectorName + \"']\"\r\n )\r\n ];\r\n\r\n nodeItems.map(nodeItem => {\r\n // instantiate component with nodeItem as param:\r\n nodes.push(new component.Class(nodeItem));\r\n });\r\n\r\n // add to componentsList object:\r\n if (nodes.length)\r\n this.componentsInstantiated[component.selectorName] = nodes;\r\n });\r\n }\r\n\r\n dispatchReady() {\r\n const event = new CustomEvent(EventTypes.ALL_COMPONENTS_READY);\r\n EventBus.dispatchEvent(event);\r\n }\r\n\r\n getComponents(selectorName) {\r\n return selectorName\r\n ? this.componentsInstantiated[selectorName]\r\n : this.componentsInstantiated;\r\n }\r\n}\r\n\r\n/* Make your App accessible via window.App */\r\nwindow.App = new ComponentInstantiator();\r\n\r\n/* Access components list */\r\n//console.log(\"components on this page\", window.App.getComponents());\r\n","export const getCookieAcceptance = cname => {\r\n const name = `${cname}=`;\r\n const cookieArray = document.cookie.split(\";\");\r\n\r\n const cValues = cookieArray.map(cookie => {\r\n while (cookie.charAt(0) === \" \") {\r\n cookie = cookie.substring(1);\r\n }\r\n\r\n if (cookie.indexOf(name) === 0) {\r\n return cookie.substring(name.length, cookie.length);\r\n }\r\n return null;\r\n });\r\n\r\n const trueValues = cValues.filter(v => v === \"true\");\r\n const v = trueValues[0];\r\n return Boolean(v === \"true\");\r\n};\r\n\r\nexport const removeCookie = name => {\r\n document.cookie = `${name}=; expires=Thu, 01-Jan-70 00:00:01 GMT;path=/`;\r\n};\r\n\r\nexport const setCookie = (cname, cvalue, exdays) => {\r\n const d = new Date();\r\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\r\n const expires = \"expires=\" + d.toUTCString();\r\n document.cookie = `${cname}=${cvalue};${expires};path=/`;\r\n};\r\n\r\nexport const getCookieValue = name => {\r\n var value = \"; \" + document.cookie;\r\n var parts = value.split(\"; \" + name + \"=\");\r\n if (parts.length == 2)\r\n return parts\r\n .pop()\r\n .split(\";\")\r\n .shift();\r\n};\r\n","export const isMobile = () => {\r\n return window.matchMedia(\"(max-width: 767px)\").matches;\r\n};\r\nexport const isIpad = () => {\r\n return window.matchMedia(\"(min-width: 768px)\").matches;\r\n};\r\n\r\nexport const isDesktop = () => {\r\n return window.matchMedia(\"(min-width: 1024px)\").matches;\r\n};\r\n\r\nexport const getViewPortWidth = () => {\r\n return Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\r\n};\r\n\r\nexport const getViewPortHeight = () => {\r\n return Math.max(\r\n document.documentElement.clientHeight,\r\n window.innerHeight || 0\r\n );\r\n};\r\n\r\nexport const getRandomId = () => {\r\n return `id_${Math.random()\r\n .toString()\r\n .slice(2)}`;\r\n};\r\n\r\nexport const detectOverlap = (elOne, elTwo) => {\r\n var d1_offset = elOne.getBoundingClientRect();\r\n var d1_height = elOne.offsetHeight;\r\n var d1_width = elOne.offsetWidth;\r\n var d1_distance_from_top = d1_offset.top + d1_height;\r\n var d1_distance_from_left = d1_offset.left + d1_width;\r\n\r\n // Div 2 data\r\n var d2_offset = elTwo.getBoundingClientRect();\r\n var d2_height = elTwo.offsetHeight;\r\n var d2_width = elTwo.offsetWidth;\r\n var d2_distance_from_top = d2_offset.top + d2_height;\r\n var d2_distance_from_left = d2_offset.left + d2_width;\r\n\r\n var not_colliding =\r\n d1_distance_from_top < d2_offset.top ||\r\n d1_offset.top > d2_distance_from_top ||\r\n d1_distance_from_left < d2_offset.left ||\r\n d1_offset.left > d2_distance_from_left;\r\n\r\n // Return whether it IS colliding\r\n return !not_colliding;\r\n};\r\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA,WAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA,WAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA,WAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA,WAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CACA;AAAA;AAAA;AAAA;AACA,WAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CACA;AAAA;AAAA;AAAA,oGACA;AACA,WAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACziBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CACA;AACA;AACA;AACA,oGAAA;AACA,WAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC16BA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC/CA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAKA;AAKA;AAEA;AAEA;AAKA;AACA;AAIA;AACA;AACA;AAEA;AAKA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AC7HA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AAGA;AACA;AAIA;AAGA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAGA;AAEA;AACA;AACA;AAGA;AAGA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC/NA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AAFA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAUA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC1GA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAQA;AAQA;AAIA;AAIA;AAGA;AAMA;AAGA;AAGA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AClbA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAMA;AAWA;AAGA;AAMA;AAGA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC3VA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AC9CA;AAKA;AAGA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAyCA;AAEA;AAUA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACvJA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC7OA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAKA;AAEA;AACA;AAKA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAiBA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACnNA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAKA;AAEA;AACA;AAKA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAiBA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACzNA;AACA;AAKA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACzHA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACrDA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACtIA;AACA;AAKA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC7IA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACvFA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAIA;AAGA;AAEA;AACA;AAGA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AAsBA;AAGA;AAMA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAmBA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAKA;AAWA;AACA;AAIA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AC9YA;AAAA;AAGA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;ACpIA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC3DA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACvCA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAkBA;AAGA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAKA;AAWA;AACA;AAIA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACnPA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAMA;AAAA;AAAA;AAAA;AAGA;AAQA;AACA;AAAA;AAAA;AAAA;AAGA;AASA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;ACpEA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC5FA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACpCA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACnBA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAcA;AAGA;AACA;AAEA;AACA;AAEA;AAaA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAKA;AAWA;AACA;AAIA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;AC3OA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACrEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AC5FA;AAIA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACrFA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACLA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAFA;AAIA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvIA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;;;;;;;;;;;;ACvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;;;;;;;;;;;;;;;;A","sourceRoot":""}