{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///IWT.min.js","webpack:///webpack/bootstrap a29a95197f852b37af47","webpack:///./index.js","webpack:///./config.js","webpack:///./src (.*)index\\.js$","webpack:///./src/components/form/index.js","webpack:///external \"jQuery\"","webpack:///./src/components/table/index.js","webpack:///./~/throttle-debounce/throttle.js","webpack:///./src/modules/accordion/index.js","webpack:///./~/fr-accordion/accordion.js","webpack:///./src/modules/carousel/index.js","webpack:///./~/owl.carousel/dist/owl.carousel.js","webpack:///./src/modules/carousel/a11y.js","webpack:///./src/modules/cookiebar/index.js","webpack:///./~/jquery.cookie/jquery.cookie.js","webpack:///./src/modules/cookiebar/cookiebar.js","webpack:///./src/modules/dialog/index.js","webpack:///./~/fr-dialogmodal/dialogmodal.js","webpack:///./src/modules/dropdown/index.js","webpack:///./src/modules/dropdown/dropdown.js","webpack:///./src/modules/header/index.js","webpack:///./~/headroom.js/dist/headroom.js","webpack:///./src/modules/masonry/index.js","webpack:///./~/salvattore/dist/salvattore.js","webpack:///./src/modules/megamenu/index.js","webpack:///./src/modules/megamenu/megamenu.js","webpack:///./src/modules/offcanvas/index.js","webpack:///./~/fr-offcanvas/offcanvas.js","webpack:///./src/modules/random/index.js","webpack:///./src/modules/scrolltop/index.js","webpack:///./src/modules/skiplinks/index.js","webpack:///./~/fr-bypasslinks/bypasslinks.js","webpack:///./src/modules/tooltip/index.js","webpack:///./~/fr-tooltip/tooltip.js","webpack:///./src/modules/treeview/index.js","webpack:///./src/scripts/index.js","webpack:///./src/scripts/console.js","webpack:///./src/scripts/ehnance.js","webpack:///./src/scripts/scrollto.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_4__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_findIndex","ar","predicate","index","length","requireAll","requireContext","keys","forEach","filename","dirname","replace","exclude","Config","excludes","v","match","RegExp","include","includes","push","map","Object","defineProperty","value","CONFIG","webpackContext","req","webpackContextResolve","Error","./components/form/index.js","./components/table/index.js","./modules/accordion/index.js","./modules/carousel/index.js","./modules/cookiebar/index.js","./modules/dialog/index.js","./modules/dropdown/index.js","./modules/header/index.js","./modules/masonry/index.js","./modules/megamenu/index.js","./modules/offcanvas/index.js","./modules/random/index.js","./modules/scrolltop/index.js","./modules/skiplinks/index.js","./modules/tooltip/index.js","./modules/treeview/index.js","./scripts/index.js","resolve","_interopRequireDefault","obj","__esModule","default","_jquery","_jquery2","document","ready","on","is","closest","find","removeClass","addClass","_throttle","_throttle2","defaultOpts","responsiveTableSelector","responsiveTableClass","responsiveTableBreakpoint","initResponsiveTables","opts","window","resize","width","delay","noTrailing","callback","debounceMode","wrapper","exec","lastExec","Number","Date","apply","self","args","clear","timeoutID","undefined","elapsed","arguments","clearTimeout","setTimeout","_frAccordion","_frAccordion2","_accordion","accordion","headerIdPrefix","panelIdPrefix","firstPanelsOpenByDefault","multiselectable","readyClass","Fraccordion","_addA11y","accordionContainer","accordionHeaders","_q","headerSelector","accordionPanels","panelSelector","setAttribute","accordionHeader","accordionPanel","_removeA11y","removeAttribute","_getPanelHeight","panel","style","height","offsetHeight","_setPanelHeight","panelHeight","getBoundingClientRect","transition","transitionLength","_unsetPanelHeight","_hideAllPanels","siblingHeaders","siblingPanels","header","getAttribute","_hidePanel","target","activePanel","doc","getElementById","_showPanel","_bindAccordionEvents","parentNode","_togglePanel","thisContainer","_unbindAccordionEvents","_giveHeaderFocus","headerSet","i","focus","_eventHeaderClick","e","currentTarget","_eventHeaderKeydown","currentHeader","isModifierKey","metaKey","altKey","theseHeaders","currentHeaderIndex","indexOf","keyCode","preventDefault","previousHeaderIndex","nextHeaderIndex","addEventListener","removeEventListener","destroy","accordionContainers","classList","remove","init","querySelector","add","_ref","_ref$selector","selector","_ref$headerSelector","_ref$headerIdPrefix","_ref$panelSelector","_ref$panelIdPrefix","_ref$firstPanelsOpenB","_ref$multiselectable","_ref$readyClass","_ref$transitionLength","docEl","documentElement","el","ctx","slice","querySelectorAll","_owl","_a11y","owlPrev","owlNext","owlItem","jsSelector","owlOpts","nav","items","dots","loop","margin","mouseDrag","URLhashListener","startPosition","responsive","0","768","992","$owl","click","trigger","event","namespace","carousel","relatedTarget","element","current","toggleClass","maximum","minimum","owlCarousel","_typeof","Symbol","iterator","constructor","prototype","$","Owl","options","settings","extend","Defaults","$element","_handlers","_plugins","_supress","_current","_speed","_coordinates","_breakpoint","_width","_items","_clones","_mergers","_widths","_invalidated","_pipe","_drag","time","pointer","stage","start","direction","_states","tags","initializing","animating","dragging","each","proxy","handler","Plugins","key","plugin","charAt","toLowerCase","Workers","priority","worker","filter","run","setup","initialize","center","rewind","touchDrag","pullDrag","freeDrag","stagePadding","merge","mergeFit","autoWidth","rtl","smartSpeed","fluidSpeed","dragEndSpeed","responsiveRefreshRate","responsiveBaseElement","fallbackEasing","info","nestedItemSelector","itemElement","stageElement","refreshClass","loadedClass","loadingClass","rtlClass","responsiveClass","dragClass","itemClass","stageClass","stageOuterClass","grabClass","Width","Default","Inner","Outer","Type","Event","State","cache","relative","$stage","children","grid","css","margin-left","margin-right","toFixed","widths","Math","min","clones","view","max","size","ceil","repeat","append","prepend","normalize","outerHTML","appendTo","prependTo","previous","coordinates","padding","abs","padding-left","padding-right","eq","removeAttr","reset","animate","inner","outer","n","begin","end","matches","op","join","enter","imgs","nestedSelector","preloadAutoWidthImages","wrap","parent","not","refresh","invalidate","registerEventHandlers","leave","viewport","overwrites","breakpoint","attr","property","name","optionsLogic","prepare","item","content","data","update","all","grep","dimension","onThrottledResize","resizeTimer","onResize","isDefaultPrevented","support","onTransitionEnd","onDragStart","onDragEnd","which","transform","split","x","y","position","left","top","stop","type","speed","getTime","one","delta","difference","onDragMove","pull","off","coordinate","transform3d","state","part","suppress","release","isNumeric","reciprocalItemsWidth","elementWidth","mergers","odd","even","multiplier","newPosition","duration","from","to","factor","revert","distance","next","prev","stopPropagation","srcElement","originalTarget","get","innerWidth","clientWidth","empty","jQuery","nodeType","addBack","after","before","splice","images","Image","src","unwrap","contents","removeData","a","o","b","listener","capture","attachEvent","detachEvent","status","count","camelCase","onTrigger","register","concat","object","special","owl","_default","tag","inArray","events","result","originalEvent","touches","changedTouches","pageX","pageY","clientX","clientY","number","isNaN","parseFloat","first","second","fn","option","Array","$this","Constructor","Zepto","AutoRefresh","_core","_interval","_visible","initialized.owl.carousel","autoRefresh","watch","autoRefreshInterval","setInterval","clearInterval","getOwnPropertyNames","Lazy","_loaded","initialized.owl.carousel change.owl.carousel resized.owl.carousel","lazyLoad","load","$item","$elements","image","url","devicePixelRatio","onload","background-image","opacity","handlers","AutoHeight","initialized.owl.carousel refreshed.owl.carousel","autoHeight","changed.owl.carousel","loaded.owl.lazy","autoHeightClass","visible","toArray","heights","maxheight","Video","_videos","_playing","resize.owl.carousel","video","isInFullScreen","refreshed.owl.carousel","prepared.owl.carousel","fetch","play","videoHeight","videoWidth","thumbnail","tnLink","icon","path","dimensions","customTn","srcType","lazyClass","create","ajax","jsonp","dataType","success","thumbnail_large","framegrab_url","html","insertAfter","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","hasClass","Animate","scope","core","swapping","change.owl.carousel","drag.owl.carousel dragged.owl.carousel translated.owl.carousel","translate.owl.carousel","animateOut","animateIn","swap","animation","incoming","outgoing","Autoplay","_timeout","_paused","autoplay","_setAutoPlayInterval","play.owl.autoplay","t","s","stop.owl.autoplay","mouseover.owl.autoplay","autoplayHoverPause","pause","mouseleave.owl.autoplay","touchstart.owl.core","touchend.owl.core","autoplayTimeout","autoplaySpeed","timeout","_getNextTimeout","hidden","Navigation","_initialized","_pages","_controls","_templates","_overrides","dotsData","dotClass","added.owl.carousel","pop","remove.owl.carousel","draw","navText","navSpeed","navElement","navContainer","navContainerClass","navClass","slideBy","dotsClass","dotsEach","dotsSpeed","dotsContainer","override","$relative","$previous","$next","prop","$absolute","control","overides","j","k","lower","upper","disabled","page","getPosition","successor","standard","Hash","_hashes","hash","location","substring","test","prefixed","toUpperCase","prefixes","WebkitTransition","MozTransition","OTransition","WebkitAnimation","MozAnimation","OAnimation","tests","csstransforms","csstransforms3d","csstransitions","cssanimations","String","Owl2A11y","_options","defaults","setCurrent","setupRoot","setupFocus","setupKeyboard","translated.owl.carousel","resized.owl.carousel","eventHandlers","getDocumentKeyUp","eventTarg","targ","focused","action","tabindex","bind","data-owl-carousel-focused","aria-live","navigation","navPlugin","toFocus","$indicators","unbind","documentKeyUp","focusableElems","elem","adjustFocus","elems","enable","newTabIndex","storeTabIndex","currentTabIndex","storedTabIndex","data-owl-temp-tabindex","offs","offset","scrollTo","parseInt","focusable","newFocus","_jquery3","_cookiebar","acceptButton","secure","domain","cookieBar","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","encode","config","raw","encodeURIComponent","decode","decodeURIComponent","stringifyCookieValue","json","JSON","stringify","parseCookieValue","pluses","parse","read","converter","isFunction","cookie","expires","days","setTime","toUTCString","cookies","l","parts","shift","removeCookie","threshold","_hide","$cookiebar","hide","_show","show","_accept","isAccepted","scrollTop","_dialogmodal","_dialogmodal2","_dialogmodal3","dialog","modalSelector","openSelector","closeSelector","isAlert","activeClass","Frdialogmodal","_defer","container","modal","role","_showModal","focusableElements","focusableSelectors","_bindDocKey","_bindClosePointer","_bindContainerPointer","_hideModal","returnfocus","parentElement","_unbindDocKey","_unbindClosePointer","_unbindContainerPointer","currButtonOpen","_handleTabEvent","focusedIndex","activeElement","shiftKey","_eventOpenPointer","button","currModal","_eventClosePointer","_eventContainerPointer","_eventDocKey","_bindOpenPointers","buttons","_unbindOpenPointers","containers","_ref$modalSelector","_ref$openSelector","_ref$closeSelector","_ref$isAlert","_ref$activeClass","_dropdown","Menu","Menutrigger","_classCallCheck","instance","TypeError","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","protoProps","staticProps","at","ariaHidden","selectClass","focusables","opened","componentName","keycodes","38","moveSelected","40","37","39","13","selectActive","9","27","close","placement","$nextSelected","$items","$selected","$focusChild","getSelectedElement","text","keyDown","sendFocus","$trigger","_bindKeyHandling","$menu","menu","toggle","open","_bindbehavior","_headroom","_headroom2","myElement","tolerance","up","down","classes","initial","pinned","unpinned","notTop","bottom","notBottom","scroller","onPin","onUnpin","onTop","onNotTop","onBottom","onNotBottom","headroom","headroomFixed","INTERVAL","windowWidth","headerHeight","_adjustPadding","paddingTop","newWindowWidth","$el","Headroom","Debouncer","ticking","isDOMElement","replacement","normalizeTolerance","lastKnownScrollY","initialised","features","rAF","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","requestTick","rafCallback","handleEvent","cutsTheMustard","debouncer","getScrollY","unpin","contains","pin","pageYOffset","body","getViewportHeight","innerHeight","clientHeight","getElementPhysicalHeight","elm","getScrollerPhysicalHeight","getDocumentHeight","scrollHeight","getElementHeight","getScrollerHeight","isOutOfBounds","currentScrollY","pastTop","pastBottom","toleranceExceeded","shouldUnpin","scrollingDown","pastOffset","shouldPin","scrollingUp","scrollDirection","Masonry","matchMedia","styleMedia","media","createElement","script","getElementsByTagName","insertBefore","getComputedStyle","currentStyle","matchMedium","styleSheet","cssText","textContent","addListener","localMatchMedia","hasMediaQueries","isListening","queries","handleChange","evt","il","mql","listeners","jl","removeListener","lastTime","vendors","cancelAnimationFrame","currTime","timeToCall","CustomEvent","params","bubbles","cancelable","detail","createEvent","initCustomEvent","salvattore","global","grids","mediaRules","mediaQueries","add_to_dataset","dataset","obtainGridSettings","computedStyle","getPropertyValue","matchResult","numberOfColumns","columnClasses","addColumns","columnsItems","columnsFragment","createDocumentFragment","rows","column","rowsFragment","className","row","appendChild","removeColumns","range","createRange","selectNodeContents","columns","extractContents","childNodes","node","HTMLElement","numberOfRowsInFirstColumn","sortedRows","columnIndex","rowIndex","child","recreateColumns","columnsChange","dispatchEvent","mediaQueryChange","getCSSRules","stylesheet","cssRules","sheet","rules","getStylesheets","inlineStyleBlocks","idx","mediaRuleHasColumnsSelector","rule","selectorText","scanMediaQueries","newMediaRules","oldRules","mediaText","rescanMediaQueries","nextElementColumnIndex","fragments","currentRowCount","lowestRowCount","createFragmentsList","quantity","appendElements","elements","prependElements","fragment","firstChild","numberOfColumnsToExtract","lastChild","registerGrid","display","innerHTML","head","gridElements","append_elements","prepend_elements","register_grid","recreate_columns","rescan_media_queries","_megamenu","_megamenu2","addCloseButton","closeButtonClass","closeButtonTemplate","openOnClick","uuidPrefix","menuClass","menuListClass","topNavItemClass","panelClass","panelGroupClass","hoverClass","focusClass","openClass","listToMegaMenu","$ul","_opts","attrs","clone","li","wrapAll","rel","accessibleMegaMenu","Megamenu","AccessibleMegaMenu","_defaults","_name","pluginName","mouseTimeoutID","focusTimeoutID","mouseFocused","justFocused","expr","filters","parents","isTabIndexNotNaN","mapName","img","nodeName","href","Keyboard","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","ESCAPE","HOME","LEFT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SPACE","TAB","UP","keyMap","48","49","50","51","52","53","54","55","56","57","59","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","96","97","98","99","100","101","102","103","104","105","190","_getPlugin","_addUniqueId","_clickHandler","_clickOutsideHandler","_DOMAttrModifiedHandler","_focusInHandler","_focusOutHandler","_keyDownHandler","_mouseDownHandler","_mouseOverHandler","_mouseOutHandler","_toggleExpandedEventHandlers","uuid","keydownTimeoutDuration","keydownSearchString","isTouch","hasOwnProperty","newfocus","that","topli","has","siblings","attrName","newValue","panels","cvox","Api","getCurrentNode","_event","label","regex","topnavitems","tabbables","panelGroups","currentPanelGroup","keycode","found","newString","isTopNavItem","opera","toString","ctrlKey","keydownTimeoutID","reverse","trim","topNavItems","topnavitem","topnavitemlink","topnavitempanel","aria-haspopup","aria-controls","aria-expanded","aria-hidden","getDefaults","getOption","opt","getAllOptions","setOption","reinitialize","createPseudo","dataName","tabbable","tabIndex","isTabIndexNaN","_offcanvas","_offcanvas2","_offcanvas3","contentSelector","_handleModalScroll","_scrollTop","_handleModal","_exports","Froffcanvas","offcanvas","Element","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","_closest","_getPanelId","visibility","_unbindOpenPointer","_bindDocClick","currPanel","blur","_unbindDocClick","_bindOpenPointer","panelId","_eventDocClick","isPanel","isPanelChild","openButtons","closeButton","shuffle","random","CONTAINER_SELECTOR","EXCLUDE_SELECTOR","$container","_toggleScrolltop","scroll","_frBypasslinks","_frBypasslinks2","_bypasslinks","bypassLinks","Frbypasslinks","_addFocusability","link","_removeFocusability","_unbindPointerClick","currTarget","_unbindTargetBlur","_eventPointerClick","_bindTargetBlur","_eventTargetBlur","_bindPointerClick","_frTooltip","_frTooltip2","_tooltip","tooltipSelector","toggleSelector","tooltipIdPrefix","tooltip","Frtooltip","replaceChild","span","_showTooltip","tooltipId","currTooltip","_hideTooltip","tooltipContainers","_unbindToggleEvents","_eventTogglePointer","previousElementSibling","nextElementSibling","_eventTogglePointerLeave","isTooltip","isTooltipchild","_bindToggleEvents","_ref$tooltipSelector","_ref$toggleSelector","_ref$tooltipIdPrefix","Treeview","_collapseAll","treeview","$parents","$visibleItems","_expandGroup","$group","slideDown","animationMs","_collapseGroup","slideUp","_collapseSiblings","classParent","_toggleGroup","_updateStyling","classFocused","_handleKeyDown","curNdx","tab","$activeItem","home","last","space","classMenuHandler","$itemUL","$itemParent","right","$prev","asterisk","_handleKeyPress","chr","fromCharCode","bMatch","itemNdx","itemCnt","$curItem","titleChr","_handleClick","$parent","_bindEvents","$handlers","keydown","keypress","$li","styleMenuHandlerStandalone","ariaLabelHandler","styleMenuHandler","containsExpandedLink","hasAttribute","_","treeviewContainer","_ref$classFocused","_ref$classParent","_ref$classMenuHandler","_ref$styleMenuHandler","_ref$styleMenuHandler2","_ref$ariaLabelHandler","_ref$animationMs","pageup","pagedown","method","noop","methods","console","$header"],"mappings":"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","file":"IWT.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jQuery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"IWT\", [\"jQuery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"IWT\"] = factory(require(\"jQuery\"));\n\telse\n\t\troot[\"IWT\"] = factory(root[\"jQuery\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_4__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jQuery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"IWT\", [\"jQuery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"IWT\"] = factory(require(\"jQuery\"));\n\telse\n\t\troot[\"IWT\"] = factory(root[\"jQuery\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_4__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \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/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tvar Config = __webpack_require__(1);\n\t\n\tfunction _findIndex(ar, predicate) {\n\t for (var index = 0; index < ar.length; index++) {\n\t if (predicate(ar[index])) {\n\t return index;\n\t }\n\t }\n\t return -1;\n\t}\n\t/*\n\t *\tEvery index.js found in src/** directory will be required.\n\t *\n\t * \tToo exclude components or modules\n\t * \t@see config.js\n\t */\n\tfunction requireAll(requireContext) {\n\t var keys = [];\n\t\n\t requireContext.keys().forEach(function (filename) {\n\t var dirname = filename.replace(/\\\\/g, '/').replace(/\\/[^\\/]*$/, '');\n\t\n\t var exclude = -1 !== _findIndex(Config.excludes, function (v) {\n\t return dirname.match(new RegExp(v)) !== null;\n\t });\n\t\n\t var include = !exclude && (Config.includes.length === 0 || -1 !== _findIndex(Config.includes, function (v) {\n\t return dirname.match(new RegExp(v)) !== null;\n\t }));\n\t\n\t if (include) {\n\t // console.log('including: %s', dirname)\n\t keys.push(filename);\n\t } else {\n\t // console.log('excluding: %s', dirname)\n\t }\n\t });\n\t return keys.map(requireContext);\n\t}\n\t\n\texports['default'] = requireAll(__webpack_require__(2));\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\tvar CONFIG = {};\n\t\n\t/*\n\t * Whitelist: use this array of RegEx to include ONLY specific components\n\t * or modules into the final build.\n\t *\n\t * __Example, to include just header + search form + offcanvas:\n\t *\n\t * CONFIG.includes = [\n\t * '(.*)base(.*)',\n\t * '(.*)button(.*)',\n\t * '(.*)components(.*)',\n\t * '(.*)theme(.*)',\n\t * '(.*)utils(.*)',\n\t * '(.*)icons(.*)',\n\t * '(.*)hamburger(.*)',\n\t * '(.*)offcanvas(.*)',\n\t * '(.*)linklist(.*)',\n\t * '(.*)treeview(.*)',\n\t * '(.*)skiplinks(.*)',\n\t * '(.*)form(.*)',\n\t * '(.*)header(.*)'\n\t * ]\n\t *\n\t * @see index.css for possible values\n\t *\n\t */\n\tCONFIG.includes = [];\n\t\n\t/*\n\t * Blacklist: use this array of RegEx to exclude specific omponents\n\t * or modules from the final build.\n\t *\n\t * ie. to exclude all global CSS:\n\t *\n\t * CONFIG.excludes = [ '(.*)base(.*)', '(.*)normalize(.*)' ]\n\t *\n\t * @see index.css for possible values\n\t *\n\t */\n\tCONFIG.excludes = [];\n\t\n\tmodule.exports = CONFIG;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./components/form/index.js\": 3,\n\t\t\"./components/table/index.js\": 5,\n\t\t\"./modules/accordion/index.js\": 7,\n\t\t\"./modules/carousel/index.js\": 13,\n\t\t\"./modules/cookiebar/index.js\": 16,\n\t\t\"./modules/dialog/index.js\": 19,\n\t\t\"./modules/dropdown/index.js\": 23,\n\t\t\"./modules/header/index.js\": 25,\n\t\t\"./modules/masonry/index.js\": 27,\n\t\t\"./modules/megamenu/index.js\": 29,\n\t\t\"./modules/offcanvas/index.js\": 31,\n\t\t\"./modules/random/index.js\": 35,\n\t\t\"./modules/scrolltop/index.js\": 36,\n\t\t\"./modules/skiplinks/index.js\": 37,\n\t\t\"./modules/tooltip/index.js\": 41,\n\t\t\"./modules/treeview/index.js\": 45,\n\t\t\"./scripts/index.js\": 46\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 2;\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t(0, _jquery2['default'])(document).ready(function () {\n\t (0, _jquery2['default'])(':radio, :checkbox').on('change', function () {\n\t if ((0, _jquery2['default'])(this).is(':radio')) {\n\t (0, _jquery2['default'])(this).closest('.Form-field').find('.Form-label.is-checked').removeClass('is-checked');\n\t }\n\t if ((0, _jquery2['default'])(this).is(':checked')) {\n\t (0, _jquery2['default'])(this).closest('.Form-label').addClass('is-checked');\n\t } else {\n\t (0, _jquery2['default'])(this).closest('.Form-label').removeClass('is-checked');\n\t }\n\t });\n\t});\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tvar _throttle = __webpack_require__(6);\n\t\n\tvar _throttle2 = _interopRequireDefault(_throttle);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar defaultOpts = {\n\t responsiveTableSelector: '.js-tableFlip',\n\t responsiveTableClass: 'Table--flip',\n\t responsiveTableBreakpoint: 768\n\t};\n\t\n\tvar initResponsiveTables = function initResponsiveTables(opts) {\n\t (0, _jquery2['default'])(document).ready(function () {\n\t if ((0, _jquery2['default'])(opts.responsiveTableSelector).length > 0) {\n\t (0, _jquery2['default'])(window).resize((0, _throttle2['default'])(250, function () {\n\t if ((0, _jquery2['default'])(window).width() < opts.responsiveTableBreakpoint) {\n\t (0, _jquery2['default'])(opts.responsiveTableSelector).addClass(opts.responsiveTableClass);\n\t } else {\n\t (0, _jquery2['default'])(opts.responsiveTableSelector).removeClass(opts.responsiveTableClass);\n\t }\n\t }));\n\t }\n\t });\n\t};\n\t\n\tinitResponsiveTables(defaultOpts);\n\t\n\texports['default'] = { defaultOpts: defaultOpts, initResponsiveTables: initResponsiveTables };\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\t\n\t/**\n\t * Throttle execution of a function. Especially useful for rate limiting\n\t * execution of handlers on events like resize and scroll.\n\t *\n\t * @param {Number} delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n\t * @param {Boolean} noTrailing Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n\t * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n\t * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n\t * the internal counter is reset)\n\t * @param {Function} callback A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n\t * to `callback` when the throttled-function is executed.\n\t * @param {Boolean} debounceMode If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n\t * schedule `callback` to execute after `delay` ms.\n\t *\n\t * @return {Function} A new, throttled, function.\n\t */\n\tmodule.exports = function (delay, noTrailing, callback, debounceMode) {\n\t\n\t\t// After wrapper has stopped being called, this timeout ensures that\n\t\t// `callback` is executed at the proper times in `throttle` and `end`\n\t\t// debounce modes.\n\t\tvar timeoutID;\n\t\n\t\t// Keep track of the last time `callback` was executed.\n\t\tvar lastExec = 0;\n\t\n\t\t// `noTrailing` defaults to falsy.\n\t\tif (typeof noTrailing !== 'boolean') {\n\t\t\tdebounceMode = callback;\n\t\t\tcallback = noTrailing;\n\t\t\tnoTrailing = undefined;\n\t\t}\n\t\n\t\t// The `wrapper` function encapsulates all of the throttling / debouncing\n\t\t// functionality and when executed will limit the rate at which `callback`\n\t\t// is executed.\n\t\tfunction wrapper() {\n\t\n\t\t\tvar self = this;\n\t\t\tvar elapsed = Number(new Date()) - lastExec;\n\t\t\tvar args = arguments;\n\t\n\t\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\t\tfunction exec() {\n\t\t\t\tlastExec = Number(new Date());\n\t\t\t\tcallback.apply(self, args);\n\t\t\t}\n\t\n\t\t\t// If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t\t// to allow future `callback` executions.\n\t\t\tfunction clear() {\n\t\t\t\ttimeoutID = undefined;\n\t\t\t}\n\t\n\t\t\tif (debounceMode && !timeoutID) {\n\t\t\t\t// Since `wrapper` is being called for the first time and\n\t\t\t\t// `debounceMode` is true (at begin), execute `callback`.\n\t\t\t\texec();\n\t\t\t}\n\t\n\t\t\t// Clear any existing timeout.\n\t\t\tif (timeoutID) {\n\t\t\t\tclearTimeout(timeoutID);\n\t\t\t}\n\t\n\t\t\tif (debounceMode === undefined && elapsed > delay) {\n\t\t\t\t// In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t\t// `callback`.\n\t\t\t\texec();\n\t\t\t} else if (noTrailing !== true) {\n\t\t\t\t// In trailing throttle mode, since `delay` time has not been\n\t\t\t\t// exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t\t// recent execution.\n\t\t\t\t//\n\t\t\t\t// If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t\t// after `delay` ms.\n\t\t\t\t//\n\t\t\t\t// If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t\t// execute after `delay` ms.\n\t\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n\t\t\t}\n\t\t}\n\t\n\t\t// Return the wrapper function.\n\t\treturn wrapper;\n\t};\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\t\n\tvar _frAccordion = __webpack_require__(8);\n\t\n\tvar _frAccordion2 = _interopRequireDefault(_frAccordion);\n\t\n\tvar _accordion = __webpack_require__(9);\n\t\n\tvar _accordion2 = _interopRequireDefault(_accordion);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t/* eslint-enable */\n\t\n\tvar accordion = (0, _frAccordion2['default'])({\n\t\t// String - Use header id on element to tie each accordion panel to its header - see panelIdPrefix\n\t\theaderIdPrefix: 'accordion-header',\n\t\t// String - Use panel id on element to tie each accordion header to its panel - see headerIdPrefix\n\t\tpanelIdPrefix: 'accordion-panel',\n\t\t// Boolean - If set to false, all accordion panels will be closed on init()\n\t\tfirstPanelsOpenByDefault: false,\n\t\t// Boolean - If set to false, each accordion instance will only allow a single panel to be open at a time\n\t\tmultiselectable: true,\n\t\t// String - Class name that will be added to the selector when the component has been initialised\n\t\treadyClass: 'fr-accordion--is-ready'\n\t});\n\t\n\t/* eslint-disable no-unused-vars */\n\t\n\texports['default'] = { accordion: accordion, Fraccordion: _frAccordion2['default'] };\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\r\n\t * @param {object} options Object containing configuration overrides\r\n\t */\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\tvar Fraccordion = function Fraccordion() {\n\t\tvar _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n\t\t _ref$selector = _ref.selector,\n\t\t selector = _ref$selector === undefined ? '.js-fr-accordion' : _ref$selector,\n\t\t _ref$headerSelector = _ref.headerSelector,\n\t\t headerSelector = _ref$headerSelector === undefined ? '.js-fr-accordion__header' : _ref$headerSelector,\n\t\t _ref$headerIdPrefix = _ref.headerIdPrefix,\n\t\t headerIdPrefix = _ref$headerIdPrefix === undefined ? 'accordion-header' : _ref$headerIdPrefix,\n\t\t _ref$panelSelector = _ref.panelSelector,\n\t\t panelSelector = _ref$panelSelector === undefined ? '.js-fr-accordion__panel' : _ref$panelSelector,\n\t\t _ref$panelIdPrefix = _ref.panelIdPrefix,\n\t\t panelIdPrefix = _ref$panelIdPrefix === undefined ? 'accordion-panel' : _ref$panelIdPrefix,\n\t\t _ref$firstPanelsOpenB = _ref.firstPanelsOpenByDefault,\n\t\t firstPanelsOpenByDefault = _ref$firstPanelsOpenB === undefined ? true : _ref$firstPanelsOpenB,\n\t\t _ref$multiselectable = _ref.multiselectable,\n\t\t multiselectable = _ref$multiselectable === undefined ? true : _ref$multiselectable,\n\t\t _ref$readyClass = _ref.readyClass,\n\t\t readyClass = _ref$readyClass === undefined ? 'fr-accordion--is-ready' : _ref$readyClass,\n\t\t _ref$transitionLength = _ref.transitionLength,\n\t\t transitionLength = _ref$transitionLength === undefined ? 250 : _ref$transitionLength;\n\t\n\t\t// CONSTANTS\n\t\tvar doc = document;\n\t\tvar docEl = doc.documentElement;\n\t\tvar _q = function _q(el) {\n\t\t\tvar ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : doc;\n\t\t\treturn [].slice.call(ctx.querySelectorAll(el));\n\t\t};\n\t\n\t\t// SUPPORTS\n\t\tif (!('querySelector' in doc) || !('addEventListener' in window) || !docEl.classList) return;\n\t\n\t\t// SETUP\n\t\t// set accordion element NodeLists\n\t\tvar accordionContainers = _q(selector);\n\t\n\t\t// A11Y\n\t\tfunction _addA11y(accordionContainer) {\n\t\t\t// get accordion elements\n\t\t\tvar accordionHeaders = _q(headerSelector, accordionContainer);\n\t\t\tvar accordionPanels = _q(panelSelector, accordionContainer);\n\t\n\t\t\t// add relevant roles and properties\n\t\t\taccordionContainer.setAttribute('role', 'tablist');\n\t\t\taccordionContainer.setAttribute('aria-multiselectable', multiselectable);\n\t\n\t\t\taccordionHeaders.forEach(function (accordionHeader) {\n\t\t\t\taccordionHeader.setAttribute('role', 'tab');\n\t\t\t\taccordionHeader.setAttribute('aria-controls', accordionHeader.id.replace(headerIdPrefix, panelIdPrefix));\n\t\t\t\t// make headers focusable, this is preferred over wrapping contents in native button element\n\t\t\t\taccordionHeader.setAttribute('tabindex', 0);\n\t\t\t});\n\t\n\t\t\taccordionPanels.forEach(function (accordionPanel) {\n\t\t\t\taccordionPanel.setAttribute('role', 'tabpanel');\n\t\t\t\taccordionPanel.setAttribute('aria-labelledby', accordionPanel.id.replace(panelIdPrefix, headerIdPrefix));\n\t\t\t\t// make tabpanel focusable\n\t\t\t\taccordionPanel.setAttribute('tabindex', 0);\n\t\t\t});\n\t\t}\n\t\tfunction _removeA11y(accordionContainer) {\n\t\t\t// get accordion elements\n\t\t\tvar accordionHeaders = _q(headerSelector, accordionContainer);\n\t\t\tvar accordionPanels = _q(panelSelector, accordionContainer);\n\t\n\t\t\t// remove roles and properties\n\t\t\taccordionContainer.removeAttribute('role');\n\t\t\taccordionContainer.removeAttribute('aria-multiselectable');\n\t\n\t\t\taccordionHeaders.forEach(function (accordionHeader) {\n\t\t\t\taccordionHeader.removeAttribute('role');\n\t\t\t\taccordionHeader.removeAttribute('aria-controls');\n\t\t\t\taccordionHeader.removeAttribute('aria-selected');\n\t\t\t\taccordionHeader.removeAttribute('aria-expanded');\n\t\t\t\t// remove headers focusablility\n\t\t\t\taccordionHeader.removeAttribute('tabindex');\n\t\t\t});\n\t\n\t\t\taccordionPanels.forEach(function (accordionPanel) {\n\t\t\t\taccordionPanel.removeAttribute('role');\n\t\t\t\taccordionPanel.removeAttribute('aria-labelledby');\n\t\t\t\taccordionPanel.removeAttribute('aria-hidden');\n\t\t\t\t// remove tabpanel focusablibility\n\t\t\t\taccordionPanel.removeAttribute('tabindex');\n\t\t\t});\n\t\t}\n\t\n\t\t//\tUTILS\n\t\tfunction _getPanelHeight(panel) {\n\t\t\t//\tset auto height and read offsetHeight\n\t\t\tpanel.style.height = 'auto';\n\t\t\tvar height = panel.offsetHeight;\n\t\t\t//\tremove style\n\t\t\tpanel.style.height = '';\n\t\t\treturn height;\n\t\t}\n\t\tfunction _setPanelHeight(panel) {\n\t\t\t//\tget panel height\n\t\t\tvar panelHeight = _getPanelHeight(panel);\n\t\t\t//\trecalc style and layout\n\t\t\tpanel.getBoundingClientRect();\n\t\t\t//\tset height on panel, reset to 'auto' on transition complete\n\t\t\tpanel.style.height = panelHeight + 'px';\n\t\t\tsetTimeout(function () {\n\t\t\t\tpanel.style.transition = 'none';\n\t\t\t\tpanel.style.height = 'auto';\n\t\t\t\t//\trecalc style and layout\n\t\t\t\tpanel.getBoundingClientRect();\n\t\t\t\tpanel.style.transition = '';\n\t\t\t}, transitionLength);\n\t\t}\n\t\tfunction _unsetPanelHeight(panel) {\n\t\t\t//\tget panel height\n\t\t\tvar panelHeight = _getPanelHeight(panel);\n\t\t\t//\tset panel height from 'auto' to px\n\t\t\tpanel.style.height = panelHeight + 'px';\n\t\t\t//\trecalc style and layout\n\t\t\tpanel.getBoundingClientRect();\n\t\t\t//\treset height\n\t\t\tpanel.style.height = 0;\n\t\t}\n\t\n\t\t// ACTIONS\n\t\tfunction _hideAllPanels(accordionContainer) {\n\t\t\t// get accordion elements\n\t\t\tvar siblingHeaders = _q(headerSelector, accordionContainer);\n\t\t\tvar siblingPanels = _q(panelSelector, accordionContainer);\n\t\n\t\t\t// set inactives\n\t\t\tsiblingHeaders.forEach(function (header) {\n\t\t\t\theader.setAttribute('tabindex', -1);\n\t\t\t\theader.setAttribute('aria-selected', 'false');\n\t\t\t\theader.setAttribute('aria-expanded', 'false');\n\t\t\t});\n\t\t\tsiblingPanels.forEach(function (panel) {\n\t\t\t\tif (panel.getAttribute('aria-hidden') === 'false') _unsetPanelHeight(panel);\n\t\t\t\t//\ttoggle aria-hidden\n\t\t\t\tpanel.setAttribute('aria-hidden', 'true');\n\t\t\t});\n\t\t}\n\t\tfunction _hidePanel(target) {\n\t\t\t//\tget panel\n\t\t\tvar activePanel = doc.getElementById(target.getAttribute('aria-controls'));\n\t\t\ttarget.setAttribute('aria-selected', 'false');\n\t\t\ttarget.setAttribute('aria-expanded', 'false');\n\t\t\t//\ttoggle aria-hidden\n\t\t\t_unsetPanelHeight(activePanel);\n\t\t\tactivePanel.setAttribute('aria-hidden', 'true');\n\t\t}\n\t\tfunction _showPanel(target) {\n\t\t\t//\tget panel\n\t\t\tvar activePanel = doc.getElementById(target.getAttribute('aria-controls'));\n\t\t\t//\tset attributes on header\n\t\t\ttarget.setAttribute('tabindex', 0);\n\t\t\ttarget.setAttribute('aria-selected', 'true');\n\t\t\ttarget.setAttribute('aria-expanded', 'true');\n\t\t\t//\ttoggle aria-hidden and set height on panel\n\t\t\t_setPanelHeight(activePanel);\n\t\t\tactivePanel.setAttribute('aria-hidden', 'false');\n\t\t\tsetTimeout(function () {\n\t\t\t\treturn _bindAccordionEvents(target.parentNode);\n\t\t\t}, transitionLength);\n\t\t}\n\t\tfunction _togglePanel(target) {\n\t\t\t// get context of accordion container and its children\n\t\t\tvar thisContainer = target.parentNode;\n\t\t\t// close target panel if already active\n\t\t\tif (target.getAttribute('aria-selected') === 'true') {\n\t\t\t\t_hidePanel(target);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// if not multiselectable hide all, then show target\n\t\t\tif (!multiselectable) _hideAllPanels(thisContainer);\n\t\n\t\t\t_showPanel(target);\n\t\t\tif (transitionLength > 0) _unbindAccordionEvents(thisContainer);\n\t\t}\n\t\tfunction _giveHeaderFocus(headerSet, i) {\n\t\t\t// remove focusability from inactives\n\t\t\theaderSet.forEach(function (header) {\n\t\t\t\theader.setAttribute('tabindex', -1);\n\t\t\t});\n\t\t\t// set active focus\n\t\t\theaderSet[i].setAttribute('tabindex', 0);\n\t\t\theaderSet[i].focus();\n\t\t}\n\t\n\t\t//\tEVENTS\n\t\tfunction _eventHeaderClick(e) {\n\t\t\t_togglePanel(e.currentTarget);\n\t\t}\n\t\tfunction _eventHeaderKeydown(e) {\n\t\t\t// collect header targets, and their prev/next\n\t\t\tvar currentHeader = e.currentTarget;\n\t\t\tvar isModifierKey = e.metaKey || e.altKey;\n\t\t\t// get context of accordion container and its children\n\t\t\tvar thisContainer = currentHeader.parentNode;\n\t\t\tvar theseHeaders = _q(headerSelector, thisContainer);\n\t\t\tvar currentHeaderIndex = [].indexOf.call(theseHeaders, currentHeader);\n\t\n\t\t\t// don't catch key events when ⌘ or Alt modifier is present\n\t\t\tif (isModifierKey) return;\n\t\n\t\t\t// catch enter/space, left/right and up/down arrow key events\n\t\t\t// if new panel show it, if next/prev move focus\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 13:\n\t\t\t\tcase 32:\n\t\t\t\t\t_togglePanel(currentHeader);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37:\n\t\t\t\tcase 38:\n\t\t\t\t\t{\n\t\t\t\t\t\tvar previousHeaderIndex = currentHeaderIndex === 0 ? theseHeaders.length - 1 : currentHeaderIndex - 1;\n\t\t\t\t\t\t_giveHeaderFocus(theseHeaders, previousHeaderIndex);\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\tcase 39:\n\t\t\t\tcase 40:\n\t\t\t\t\t{\n\t\t\t\t\t\tvar nextHeaderIndex = currentHeaderIndex < theseHeaders.length - 1 ? currentHeaderIndex + 1 : 0;\n\t\t\t\t\t\t_giveHeaderFocus(theseHeaders, nextHeaderIndex);\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\n\t\t//\tBIND EVENTS\n\t\tfunction _bindAccordionEvents(accordionContainer) {\n\t\t\tvar accordionHeaders = _q(headerSelector, accordionContainer);\n\t\t\t// bind all accordion header click and keydown events\n\t\t\taccordionHeaders.forEach(function (accordionHeader) {\n\t\t\t\taccordionHeader.addEventListener('click', _eventHeaderClick);\n\t\t\t\taccordionHeader.addEventListener('keydown', _eventHeaderKeydown);\n\t\t\t});\n\t\t}\n\t\n\t\t//\tUNBIND EVENTS\n\t\tfunction _unbindAccordionEvents(accordionContainer) {\n\t\t\tvar accordionHeaders = _q(headerSelector, accordionContainer);\n\t\t\t// unbind all accordion header click and keydown events\n\t\t\taccordionHeaders.forEach(function (accordionHeader) {\n\t\t\t\taccordionHeader.removeEventListener('click', _eventHeaderClick);\n\t\t\t\taccordionHeader.removeEventListener('keydown', _eventHeaderKeydown);\n\t\t\t});\n\t\t}\n\t\n\t\t// DESTROY\n\t\tfunction destroy() {\n\t\t\taccordionContainers.forEach(function (accordionContainer) {\n\t\t\t\t_removeA11y(accordionContainer);\n\t\t\t\t_unbindAccordionEvents(accordionContainer);\n\t\t\t\taccordionContainer.classList.remove(readyClass);\n\t\t\t});\n\t\t}\n\t\n\t\t// INIT\n\t\tfunction init() {\n\t\t\tif (accordionContainers.length) {\n\t\t\t\taccordionContainers.forEach(function (accordionContainer) {\n\t\t\t\t\t_addA11y(accordionContainer);\n\t\t\t\t\t_bindAccordionEvents(accordionContainer);\n\t\t\t\t\t_hideAllPanels(accordionContainer);\n\t\t\t\t\t// set all first accordion panels active on init if required (default behaviour)\n\t\t\t\t\t// otherwise make sure first accordion header for each is focusable\n\t\t\t\t\tif (firstPanelsOpenByDefault) {\n\t\t\t\t\t\t_togglePanel(accordionContainer.querySelector(headerSelector));\n\t\t\t\t\t} else {\n\t\t\t\t\t\taccordionContainer.querySelector(headerSelector).setAttribute('tabindex', 0);\n\t\t\t\t\t}\n\t\t\t\t\t// set ready style hook\n\t\t\t\t\taccordionContainer.classList.add(readyClass);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tinit();\n\t\n\t\t// REVEAL API\n\t\treturn {\n\t\t\tinit: init,\n\t\t\tdestroy: destroy\n\t\t};\n\t};\n\t\n\t// module exports\n\texports['default'] = Fraccordion;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 10 */,\n/* 11 */,\n/* 12 */,\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tvar _owl = __webpack_require__(14);\n\t\n\tvar _owl2 = _interopRequireDefault(_owl);\n\t\n\tvar _a11y = __webpack_require__(15);\n\t\n\tvar _a11y2 = _interopRequireDefault(_a11y);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t/* eslint-enable no-unused-vars */\n\t\n\t/* eslint-disable no-unused-vars */\n\t\n\tvar opts = {\n\t owlPrev: '.owl-prev',\n\t owlNext: '.owl-next',\n\t owlItem: '.owl-item',\n\t jsSelector: '.owl-carousel',\n\t owlOpts: {\n\t nav: false,\n\t // navText: ['precedente', 'successivo'],\n\t items: 3,\n\t dots: false,\n\t loop: false,\n\t margin: 16,\n\t mouseDrag: true,\n\t URLhashListener: true,\n\t startPosition: 'URLHash',\n\t responsive: {\n\t 0: {\n\t items: 1\n\t },\n\t 768: {\n\t items: 2\n\t },\n\t 992: {\n\t items: 3\n\t }\n\t }\n\t }\n\t};\n\t\n\tvar init = function init() {\n\t var $owl = (0, _jquery2['default'])(opts.jsSelector);\n\t\n\t (0, _jquery2['default'])(opts.owlPrev).click(function () {\n\t return $owl.trigger('prev.owl.carousel');\n\t });\n\t (0, _jquery2['default'])(opts.owlNext).click(function () {\n\t return $owl.trigger('next.owl.carousel');\n\t });\n\t\n\t $owl.on('initialized.owl.carousel changed.owl.carousel refreshed.owl.carousel', function (event) {\n\t if (!event.namespace) return;\n\t\n\t var carousel = event.relatedTarget,\n\t element = event.target,\n\t current = carousel.current();\n\t\n\t (0, _jquery2['default'])(opts.owlNext + '[aria-controls=\\'' + element.id + '\\']').toggleClass('u-visibilityHidden', current === carousel.maximum());\n\t\n\t (0, _jquery2['default'])(opts.owlPrev + '[aria-controls=\\'' + element.id + '\\']').toggleClass('u-visibilityHidden', current === carousel.minimum());\n\t });\n\t\n\t // must be called after events initialization\n\t $owl.owlCarousel(opts.owlOpts);\n\t};\n\t\n\t(0, _jquery2['default'])(document).ready(init);\n\t\n\texports['default'] = {\n\t opts: opts,\n\t init: init\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * Owl Carousel v2.2.0\n\t * Copyright 2013-2016 David Deutsch\n\t * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE)\n\t */\n\t/**\n\t * Owl carousel\n\t * @version 2.1.6\n\t * @author Bartosz Wojciechowski\n\t * @author David Deutsch\n\t * @license The MIT License (MIT)\n\t * @todo Lazy Load Icon\n\t * @todo prevent animationend bubling\n\t * @todo itemsScaleUp\n\t * @todo Test Zepto\n\t * @todo stagePadding calculate wrong active classes\n\t */\n\t;(function ($, window, document, undefined) {\n\t\n\t\t/**\n\t * Creates a carousel.\n\t * @class The Owl Carousel.\n\t * @public\n\t * @param {HTMLElement|jQuery} element - The element to create the carousel for.\n\t * @param {Object} [options] - The options\n\t */\n\t\tfunction Owl(element, options) {\n\t\n\t\t\t/**\n\t * Current settings for the carousel.\n\t * @public\n\t */\n\t\t\tthis.settings = null;\n\t\n\t\t\t/**\n\t * Current options set by the caller including defaults.\n\t * @public\n\t */\n\t\t\tthis.options = $.extend({}, Owl.Defaults, options);\n\t\n\t\t\t/**\n\t * Plugin element.\n\t * @public\n\t */\n\t\t\tthis.$element = $(element);\n\t\n\t\t\t/**\n\t * Proxied event handlers.\n\t * @protected\n\t */\n\t\t\tthis._handlers = {};\n\t\n\t\t\t/**\n\t * References to the running plugins of this carousel.\n\t * @protected\n\t */\n\t\t\tthis._plugins = {};\n\t\n\t\t\t/**\n\t * Currently suppressed events to prevent them from beeing retriggered.\n\t * @protected\n\t */\n\t\t\tthis._supress = {};\n\t\n\t\t\t/**\n\t * Absolute current position.\n\t * @protected\n\t */\n\t\t\tthis._current = null;\n\t\n\t\t\t/**\n\t * Animation speed in milliseconds.\n\t * @protected\n\t */\n\t\t\tthis._speed = null;\n\t\n\t\t\t/**\n\t * Coordinates of all items in pixel.\n\t * @todo The name of this member is missleading.\n\t * @protected\n\t */\n\t\t\tthis._coordinates = [];\n\t\n\t\t\t/**\n\t * Current breakpoint.\n\t * @todo Real media queries would be nice.\n\t * @protected\n\t */\n\t\t\tthis._breakpoint = null;\n\t\n\t\t\t/**\n\t * Current width of the plugin element.\n\t */\n\t\t\tthis._width = null;\n\t\n\t\t\t/**\n\t * All real items.\n\t * @protected\n\t */\n\t\t\tthis._items = [];\n\t\n\t\t\t/**\n\t * All cloned items.\n\t * @protected\n\t */\n\t\t\tthis._clones = [];\n\t\n\t\t\t/**\n\t * Merge values of all items.\n\t * @todo Maybe this could be part of a plugin.\n\t * @protected\n\t */\n\t\t\tthis._mergers = [];\n\t\n\t\t\t/**\n\t * Widths of all items.\n\t */\n\t\t\tthis._widths = [];\n\t\n\t\t\t/**\n\t * Invalidated parts within the update process.\n\t * @protected\n\t */\n\t\t\tthis._invalidated = {};\n\t\n\t\t\t/**\n\t * Ordered list of workers for the update process.\n\t * @protected\n\t */\n\t\t\tthis._pipe = [];\n\t\n\t\t\t/**\n\t * Current state information for the drag operation.\n\t * @todo #261\n\t * @protected\n\t */\n\t\t\tthis._drag = {\n\t\t\t\ttime: null,\n\t\t\t\ttarget: null,\n\t\t\t\tpointer: null,\n\t\t\t\tstage: {\n\t\t\t\t\tstart: null,\n\t\t\t\t\tcurrent: null\n\t\t\t\t},\n\t\t\t\tdirection: null\n\t\t\t};\n\t\n\t\t\t/**\n\t * Current state information and their tags.\n\t * @type {Object}\n\t * @protected\n\t */\n\t\t\tthis._states = {\n\t\t\t\tcurrent: {},\n\t\t\t\ttags: {\n\t\t\t\t\t'initializing': ['busy'],\n\t\t\t\t\t'animating': ['busy'],\n\t\t\t\t\t'dragging': ['interacting']\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.each(['onResize', 'onThrottledResize'], $.proxy(function (i, handler) {\n\t\t\t\tthis._handlers[handler] = $.proxy(this[handler], this);\n\t\t\t}, this));\n\t\n\t\t\t$.each(Owl.Plugins, $.proxy(function (key, plugin) {\n\t\t\t\tthis._plugins[key.charAt(0).toLowerCase() + key.slice(1)] = new plugin(this);\n\t\t\t}, this));\n\t\n\t\t\t$.each(Owl.Workers, $.proxy(function (priority, worker) {\n\t\t\t\tthis._pipe.push({\n\t\t\t\t\t'filter': worker.filter,\n\t\t\t\t\t'run': $.proxy(worker.run, this)\n\t\t\t\t});\n\t\t\t}, this));\n\t\n\t\t\tthis.setup();\n\t\t\tthis.initialize();\n\t\t}\n\t\n\t\t/**\n\t * Default options for the carousel.\n\t * @public\n\t */\n\t\tOwl.Defaults = {\n\t\t\titems: 3,\n\t\t\tloop: false,\n\t\t\tcenter: false,\n\t\t\trewind: false,\n\t\n\t\t\tmouseDrag: true,\n\t\t\ttouchDrag: true,\n\t\t\tpullDrag: true,\n\t\t\tfreeDrag: false,\n\t\n\t\t\tmargin: 0,\n\t\t\tstagePadding: 0,\n\t\n\t\t\tmerge: false,\n\t\t\tmergeFit: true,\n\t\t\tautoWidth: false,\n\t\n\t\t\tstartPosition: 0,\n\t\t\trtl: false,\n\t\n\t\t\tsmartSpeed: 250,\n\t\t\tfluidSpeed: false,\n\t\t\tdragEndSpeed: false,\n\t\n\t\t\tresponsive: {},\n\t\t\tresponsiveRefreshRate: 200,\n\t\t\tresponsiveBaseElement: window,\n\t\n\t\t\tfallbackEasing: 'swing',\n\t\n\t\t\tinfo: false,\n\t\n\t\t\tnestedItemSelector: false,\n\t\t\titemElement: 'div',\n\t\t\tstageElement: 'div',\n\t\n\t\t\trefreshClass: 'owl-refresh',\n\t\t\tloadedClass: 'owl-loaded',\n\t\t\tloadingClass: 'owl-loading',\n\t\t\trtlClass: 'owl-rtl',\n\t\t\tresponsiveClass: 'owl-responsive',\n\t\t\tdragClass: 'owl-drag',\n\t\t\titemClass: 'owl-item',\n\t\t\tstageClass: 'owl-stage',\n\t\t\tstageOuterClass: 'owl-stage-outer',\n\t\t\tgrabClass: 'owl-grab'\n\t\t};\n\t\n\t\t/**\n\t * Enumeration for width.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\t\tOwl.Width = {\n\t\t\tDefault: 'default',\n\t\t\tInner: 'inner',\n\t\t\tOuter: 'outer'\n\t\t};\n\t\n\t\t/**\n\t * Enumeration for types.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\t\tOwl.Type = {\n\t\t\tEvent: 'event',\n\t\t\tState: 'state'\n\t\t};\n\t\n\t\t/**\n\t * Contains all registered plugins.\n\t * @public\n\t */\n\t\tOwl.Plugins = {};\n\t\n\t\t/**\n\t * List of workers involved in the update process.\n\t */\n\t\tOwl.Workers = [{\n\t\t\tfilter: ['width', 'settings'],\n\t\t\trun: function run() {\n\t\t\t\tthis._width = this.$element.width();\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['width', 'items', 'settings'],\n\t\t\trun: function run(cache) {\n\t\t\t\tcache.current = this._items && this._items[this.relative(this._current)];\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['items', 'settings'],\n\t\t\trun: function run() {\n\t\t\t\tthis.$stage.children('.cloned').remove();\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['width', 'items', 'settings'],\n\t\t\trun: function run(cache) {\n\t\t\t\tvar margin = this.settings.margin || '',\n\t\t\t\t grid = !this.settings.autoWidth,\n\t\t\t\t rtl = this.settings.rtl,\n\t\t\t\t css = {\n\t\t\t\t\t'width': 'auto',\n\t\t\t\t\t'margin-left': rtl ? margin : '',\n\t\t\t\t\t'margin-right': rtl ? '' : margin\n\t\t\t\t};\n\t\n\t\t\t\t!grid && this.$stage.children().css(css);\n\t\n\t\t\t\tcache.css = css;\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['width', 'items', 'settings'],\n\t\t\trun: function run(cache) {\n\t\t\t\tvar width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,\n\t\t\t\t merge = null,\n\t\t\t\t iterator = this._items.length,\n\t\t\t\t grid = !this.settings.autoWidth,\n\t\t\t\t widths = [];\n\t\n\t\t\t\tcache.items = {\n\t\t\t\t\tmerge: false,\n\t\t\t\t\twidth: width\n\t\t\t\t};\n\t\n\t\t\t\twhile (iterator--) {\n\t\t\t\t\tmerge = this._mergers[iterator];\n\t\t\t\t\tmerge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;\n\t\n\t\t\t\t\tcache.items.merge = merge > 1 || cache.items.merge;\n\t\n\t\t\t\t\twidths[iterator] = !grid ? this._items[iterator].width() : width * merge;\n\t\t\t\t}\n\t\n\t\t\t\tthis._widths = widths;\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['items', 'settings'],\n\t\t\trun: function run() {\n\t\t\t\tvar clones = [],\n\t\t\t\t items = this._items,\n\t\t\t\t settings = this.settings,\n\t\t\t\t view = Math.max(settings.items * 2, 4),\n\t\t\t\t size = Math.ceil(items.length / 2) * 2,\n\t\t\t\t repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,\n\t\t\t\t append = '',\n\t\t\t\t prepend = '';\n\t\n\t\t\t\trepeat /= 2;\n\t\n\t\t\t\twhile (repeat--) {\n\t\t\t\t\tclones.push(this.normalize(clones.length / 2, true));\n\t\t\t\t\tappend = append + items[clones[clones.length - 1]][0].outerHTML;\n\t\t\t\t\tclones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));\n\t\t\t\t\tprepend = items[clones[clones.length - 1]][0].outerHTML + prepend;\n\t\t\t\t}\n\t\n\t\t\t\tthis._clones = clones;\n\t\n\t\t\t\t$(append).addClass('cloned').appendTo(this.$stage);\n\t\t\t\t$(prepend).addClass('cloned').prependTo(this.$stage);\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['width', 'items', 'settings'],\n\t\t\trun: function run() {\n\t\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\t size = this._clones.length + this._items.length,\n\t\t\t\t iterator = -1,\n\t\t\t\t previous = 0,\n\t\t\t\t current = 0,\n\t\t\t\t coordinates = [];\n\t\n\t\t\t\twhile (++iterator < size) {\n\t\t\t\t\tprevious = coordinates[iterator - 1] || 0;\n\t\t\t\t\tcurrent = this._widths[this.relative(iterator)] + this.settings.margin;\n\t\t\t\t\tcoordinates.push(previous + current * rtl);\n\t\t\t\t}\n\t\n\t\t\t\tthis._coordinates = coordinates;\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['width', 'items', 'settings'],\n\t\t\trun: function run() {\n\t\t\t\tvar padding = this.settings.stagePadding,\n\t\t\t\t coordinates = this._coordinates,\n\t\t\t\t css = {\n\t\t\t\t\t'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,\n\t\t\t\t\t'padding-left': padding || '',\n\t\t\t\t\t'padding-right': padding || ''\n\t\t\t\t};\n\t\n\t\t\t\tthis.$stage.css(css);\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['width', 'items', 'settings'],\n\t\t\trun: function run(cache) {\n\t\t\t\tvar iterator = this._coordinates.length,\n\t\t\t\t grid = !this.settings.autoWidth,\n\t\t\t\t items = this.$stage.children();\n\t\n\t\t\t\tif (grid && cache.items.merge) {\n\t\t\t\t\twhile (iterator--) {\n\t\t\t\t\t\tcache.css.width = this._widths[this.relative(iterator)];\n\t\t\t\t\t\titems.eq(iterator).css(cache.css);\n\t\t\t\t\t}\n\t\t\t\t} else if (grid) {\n\t\t\t\t\tcache.css.width = cache.items.width;\n\t\t\t\t\titems.css(cache.css);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['items'],\n\t\t\trun: function run() {\n\t\t\t\tthis._coordinates.length < 1 && this.$stage.removeAttr('style');\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['width', 'items', 'settings'],\n\t\t\trun: function run(cache) {\n\t\t\t\tcache.current = cache.current ? this.$stage.children().index(cache.current) : 0;\n\t\t\t\tcache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));\n\t\t\t\tthis.reset(cache.current);\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['position'],\n\t\t\trun: function run() {\n\t\t\t\tthis.animate(this.coordinates(this._current));\n\t\t\t}\n\t\t}, {\n\t\t\tfilter: ['width', 'position', 'items', 'settings'],\n\t\t\trun: function run() {\n\t\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\t padding = this.settings.stagePadding * 2,\n\t\t\t\t begin = this.coordinates(this.current()) + padding,\n\t\t\t\t end = begin + this.width() * rtl,\n\t\t\t\t inner,\n\t\t\t\t outer,\n\t\t\t\t matches = [],\n\t\t\t\t i,\n\t\t\t\t n;\n\t\n\t\t\t\tfor (i = 0, n = this._coordinates.length; i < n; i++) {\n\t\t\t\t\tinner = this._coordinates[i - 1] || 0;\n\t\t\t\t\touter = Math.abs(this._coordinates[i]) + padding * rtl;\n\t\n\t\t\t\t\tif (this.op(inner, '<=', begin) && this.op(inner, '>', end) || this.op(outer, '<', begin) && this.op(outer, '>', end)) {\n\t\t\t\t\t\tmatches.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tthis.$stage.children('.active').removeClass('active');\n\t\t\t\tthis.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');\n\t\n\t\t\t\tif (this.settings.center) {\n\t\t\t\t\tthis.$stage.children('.center').removeClass('center');\n\t\t\t\t\tthis.$stage.children().eq(this.current()).addClass('center');\n\t\t\t\t}\n\t\t\t}\n\t\t}];\n\t\n\t\t/**\n\t * Initializes the carousel.\n\t * @protected\n\t */\n\t\tOwl.prototype.initialize = function () {\n\t\t\tthis.enter('initializing');\n\t\t\tthis.trigger('initialize');\n\t\n\t\t\tthis.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);\n\t\n\t\t\tif (this.settings.autoWidth && !this.is('pre-loading')) {\n\t\t\t\tvar imgs, nestedSelector, width;\n\t\t\t\timgs = this.$element.find('img');\n\t\t\t\tnestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;\n\t\t\t\twidth = this.$element.children(nestedSelector).width();\n\t\n\t\t\t\tif (imgs.length && width <= 0) {\n\t\t\t\t\tthis.preloadAutoWidthImages(imgs);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tthis.$element.addClass(this.options.loadingClass);\n\t\n\t\t\t// create stage\n\t\t\tthis.$stage = $('<' + this.settings.stageElement + ' class=\"' + this.settings.stageClass + '\"/>').wrap('
');\n\t\n\t\t\t// append stage\n\t\t\tthis.$element.append(this.$stage.parent());\n\t\n\t\t\t// append content\n\t\t\tthis.replace(this.$element.children().not(this.$stage.parent()));\n\t\n\t\t\t// check visibility\n\t\t\tif (this.$element.is(':visible')) {\n\t\t\t\t// update view\n\t\t\t\tthis.refresh();\n\t\t\t} else {\n\t\t\t\t// invalidate width\n\t\t\t\tthis.invalidate('width');\n\t\t\t}\n\t\n\t\t\tthis.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass);\n\t\n\t\t\t// register event handlers\n\t\t\tthis.registerEventHandlers();\n\t\n\t\t\tthis.leave('initializing');\n\t\t\tthis.trigger('initialized');\n\t\t};\n\t\n\t\t/**\n\t * Setups the current settings.\n\t * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?\n\t * @todo Support for media queries by using `matchMedia` would be nice.\n\t * @public\n\t */\n\t\tOwl.prototype.setup = function () {\n\t\t\tvar viewport = this.viewport(),\n\t\t\t overwrites = this.options.responsive,\n\t\t\t match = -1,\n\t\t\t settings = null;\n\t\n\t\t\tif (!overwrites) {\n\t\t\t\tsettings = $.extend({}, this.options);\n\t\t\t} else {\n\t\t\t\t$.each(overwrites, function (breakpoint) {\n\t\t\t\t\tif (breakpoint <= viewport && breakpoint > match) {\n\t\t\t\t\t\tmatch = Number(breakpoint);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t\tsettings = $.extend({}, this.options, overwrites[match]);\n\t\t\t\tif (typeof settings.stagePadding === 'function') {\n\t\t\t\t\tsettings.stagePadding = settings.stagePadding();\n\t\t\t\t}\n\t\t\t\tdelete settings.responsive;\n\t\n\t\t\t\t// responsive class\n\t\t\t\tif (settings.responsiveClass) {\n\t\t\t\t\tthis.$element.attr('class', this.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\\\S+\\\\s', 'g'), '$1' + match));\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tthis.trigger('change', { property: { name: 'settings', value: settings } });\n\t\t\tthis._breakpoint = match;\n\t\t\tthis.settings = settings;\n\t\t\tthis.invalidate('settings');\n\t\t\tthis.trigger('changed', { property: { name: 'settings', value: this.settings } });\n\t\t};\n\t\n\t\t/**\n\t * Updates option logic if necessery.\n\t * @protected\n\t */\n\t\tOwl.prototype.optionsLogic = function () {\n\t\t\tif (this.settings.autoWidth) {\n\t\t\t\tthis.settings.stagePadding = false;\n\t\t\t\tthis.settings.merge = false;\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Prepares an item before add.\n\t * @todo Rename event parameter `content` to `item`.\n\t * @protected\n\t * @returns {jQuery|HTMLElement} - The item container.\n\t */\n\t\tOwl.prototype.prepare = function (item) {\n\t\t\tvar event = this.trigger('prepare', { content: item });\n\t\n\t\t\tif (!event.data) {\n\t\t\t\tevent.data = $('<' + this.settings.itemElement + '/>').addClass(this.options.itemClass).append(item);\n\t\t\t}\n\t\n\t\t\tthis.trigger('prepared', { content: event.data });\n\t\n\t\t\treturn event.data;\n\t\t};\n\t\n\t\t/**\n\t * Updates the view.\n\t * @public\n\t */\n\t\tOwl.prototype.update = function () {\n\t\t\tvar i = 0,\n\t\t\t n = this._pipe.length,\n\t\t\t filter = $.proxy(function (p) {\n\t\t\t\treturn this[p];\n\t\t\t}, this._invalidated),\n\t\t\t cache = {};\n\t\n\t\t\twhile (i < n) {\n\t\t\t\tif (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {\n\t\t\t\t\tthis._pipe[i].run(cache);\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\n\t\t\tthis._invalidated = {};\n\t\n\t\t\t!this.is('valid') && this.enter('valid');\n\t\t};\n\t\n\t\t/**\n\t * Gets the width of the view.\n\t * @public\n\t * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.\n\t * @returns {Number} - The width of the view in pixel.\n\t */\n\t\tOwl.prototype.width = function (dimension) {\n\t\t\tdimension = dimension || Owl.Width.Default;\n\t\t\tswitch (dimension) {\n\t\t\t\tcase Owl.Width.Inner:\n\t\t\t\tcase Owl.Width.Outer:\n\t\t\t\t\treturn this._width;\n\t\t\t\tdefault:\n\t\t\t\t\treturn this._width - this.settings.stagePadding * 2 + this.settings.margin;\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Refreshes the carousel primarily for adaptive purposes.\n\t * @public\n\t */\n\t\tOwl.prototype.refresh = function () {\n\t\t\tthis.enter('refreshing');\n\t\t\tthis.trigger('refresh');\n\t\n\t\t\tthis.setup();\n\t\n\t\t\tthis.optionsLogic();\n\t\n\t\t\tthis.$element.addClass(this.options.refreshClass);\n\t\n\t\t\tthis.update();\n\t\n\t\t\tthis.$element.removeClass(this.options.refreshClass);\n\t\n\t\t\tthis.leave('refreshing');\n\t\t\tthis.trigger('refreshed');\n\t\t};\n\t\n\t\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\t\tOwl.prototype.onThrottledResize = function () {\n\t\t\twindow.clearTimeout(this.resizeTimer);\n\t\t\tthis.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);\n\t\t};\n\t\n\t\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\t\tOwl.prototype.onResize = function () {\n\t\t\tif (!this._items.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tif (this._width === this.$element.width()) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tif (!this.$element.is(':visible')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tthis.enter('resizing');\n\t\n\t\t\tif (this.trigger('resize').isDefaultPrevented()) {\n\t\t\t\tthis.leave('resizing');\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tthis.invalidate('width');\n\t\n\t\t\tthis.refresh();\n\t\n\t\t\tthis.leave('resizing');\n\t\t\tthis.trigger('resized');\n\t\t};\n\t\n\t\t/**\n\t * Registers event handlers.\n\t * @todo Check `msPointerEnabled`\n\t * @todo #261\n\t * @protected\n\t */\n\t\tOwl.prototype.registerEventHandlers = function () {\n\t\t\tif ($.support.transition) {\n\t\t\t\tthis.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));\n\t\t\t}\n\t\n\t\t\tif (this.settings.responsive !== false) {\n\t\t\t\tthis.on(window, 'resize', this._handlers.onThrottledResize);\n\t\t\t}\n\t\n\t\t\tif (this.settings.mouseDrag) {\n\t\t\t\tthis.$element.addClass(this.options.dragClass);\n\t\t\t\tthis.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));\n\t\t\t\tthis.$stage.on('dragstart.owl.core selectstart.owl.core', function () {\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t}\n\t\n\t\t\tif (this.settings.touchDrag) {\n\t\t\t\tthis.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));\n\t\t\t\tthis.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Handles `touchstart` and `mousedown` events.\n\t * @todo Horizontal swipe threshold as option\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\t\tOwl.prototype.onDragStart = function (event) {\n\t\t\tvar stage = null;\n\t\n\t\t\tif (event.which === 3) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ($.support.transform) {\n\t\t\t\tstage = this.$stage.css('transform').replace(/.*\\(|\\)| /g, '').split(',');\n\t\t\t\tstage = {\n\t\t\t\t\tx: stage[stage.length === 16 ? 12 : 4],\n\t\t\t\t\ty: stage[stage.length === 16 ? 13 : 5]\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tstage = this.$stage.position();\n\t\t\t\tstage = {\n\t\t\t\t\tx: this.settings.rtl ? stage.left + this.$stage.width() - this.width() + this.settings.margin : stage.left,\n\t\t\t\t\ty: stage.top\n\t\t\t\t};\n\t\t\t}\n\t\n\t\t\tif (this.is('animating')) {\n\t\t\t\t$.support.transform ? this.animate(stage.x) : this.$stage.stop();\n\t\t\t\tthis.invalidate('position');\n\t\t\t}\n\t\n\t\t\tthis.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');\n\t\n\t\t\tthis.speed(0);\n\t\n\t\t\tthis._drag.time = new Date().getTime();\n\t\t\tthis._drag.target = $(event.target);\n\t\t\tthis._drag.stage.start = stage;\n\t\t\tthis._drag.stage.current = stage;\n\t\t\tthis._drag.pointer = this.pointer(event);\n\t\n\t\t\t$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));\n\t\n\t\t\t$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function (event) {\n\t\t\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event));\n\t\n\t\t\t\t$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));\n\t\n\t\t\t\tif (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tevent.preventDefault();\n\t\n\t\t\t\tthis.enter('dragging');\n\t\t\t\tthis.trigger('drag');\n\t\t\t}, this));\n\t\t};\n\t\n\t\t/**\n\t * Handles the `touchmove` and `mousemove` events.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\t\tOwl.prototype.onDragMove = function (event) {\n\t\t\tvar minimum = null,\n\t\t\t maximum = null,\n\t\t\t pull = null,\n\t\t\t delta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\t stage = this.difference(this._drag.stage.start, delta);\n\t\n\t\t\tif (!this.is('dragging')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tevent.preventDefault();\n\t\n\t\t\tif (this.settings.loop) {\n\t\t\t\tminimum = this.coordinates(this.minimum());\n\t\t\t\tmaximum = this.coordinates(this.maximum() + 1) - minimum;\n\t\t\t\tstage.x = ((stage.x - minimum) % maximum + maximum) % maximum + minimum;\n\t\t\t} else {\n\t\t\t\tminimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());\n\t\t\t\tmaximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());\n\t\t\t\tpull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;\n\t\t\t\tstage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);\n\t\t\t}\n\t\n\t\t\tthis._drag.stage.current = stage;\n\t\n\t\t\tthis.animate(stage.x);\n\t\t};\n\t\n\t\t/**\n\t * Handles the `touchend` and `mouseup` events.\n\t * @todo #261\n\t * @todo Threshold for click event\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\t\tOwl.prototype.onDragEnd = function (event) {\n\t\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\t stage = this._drag.stage.current,\n\t\t\t direction = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';\n\t\n\t\t\t$(document).off('.owl.core');\n\t\n\t\t\tthis.$element.removeClass(this.options.grabClass);\n\t\n\t\t\tif (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {\n\t\t\t\tthis.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);\n\t\t\t\tthis.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));\n\t\t\t\tthis.invalidate('position');\n\t\t\t\tthis.update();\n\t\n\t\t\t\tthis._drag.direction = direction;\n\t\n\t\t\t\tif (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {\n\t\t\t\t\tthis._drag.target.one('click.owl.core', function () {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif (!this.is('dragging')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tthis.leave('dragging');\n\t\t\tthis.trigger('dragged');\n\t\t};\n\t\n\t\t/**\n\t * Gets absolute position of the closest item for a coordinate.\n\t * @todo Setting `freeDrag` makes `closest` not reusable. See #165.\n\t * @protected\n\t * @param {Number} coordinate - The coordinate in pixel.\n\t * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.\n\t * @return {Number} - The absolute position of the closest item.\n\t */\n\t\tOwl.prototype.closest = function (coordinate, direction) {\n\t\t\tvar position = -1,\n\t\t\t pull = 30,\n\t\t\t width = this.width(),\n\t\t\t coordinates = this.coordinates();\n\t\n\t\t\tif (!this.settings.freeDrag) {\n\t\t\t\t// check closest item\n\t\t\t\t$.each(coordinates, $.proxy(function (index, value) {\n\t\t\t\t\t// on a left pull, check on current index\n\t\t\t\t\tif (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {\n\t\t\t\t\t\tposition = index;\n\t\t\t\t\t\t// on a right pull, check on previous index\n\t\t\t\t\t\t// to do so, subtract width from value and set position = index + 1\n\t\t\t\t\t} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {\n\t\t\t\t\t\tposition = index + 1;\n\t\t\t\t\t} else if (this.op(coordinate, '<', value) && this.op(coordinate, '>', coordinates[index + 1] || value - width)) {\n\t\t\t\t\t\tposition = direction === 'left' ? index + 1 : index;\n\t\t\t\t\t}\n\t\t\t\t\treturn position === -1;\n\t\t\t\t}, this));\n\t\t\t}\n\t\n\t\t\tif (!this.settings.loop) {\n\t\t\t\t// non loop boundries\n\t\t\t\tif (this.op(coordinate, '>', coordinates[this.minimum()])) {\n\t\t\t\t\tposition = coordinate = this.minimum();\n\t\t\t\t} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {\n\t\t\t\t\tposition = coordinate = this.maximum();\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn position;\n\t\t};\n\t\n\t\t/**\n\t * Animates the stage.\n\t * @todo #270\n\t * @public\n\t * @param {Number} coordinate - The coordinate in pixels.\n\t */\n\t\tOwl.prototype.animate = function (coordinate) {\n\t\t\tvar animate = this.speed() > 0;\n\t\n\t\t\tthis.is('animating') && this.onTransitionEnd();\n\t\n\t\t\tif (animate) {\n\t\t\t\tthis.enter('animating');\n\t\t\t\tthis.trigger('translate');\n\t\t\t}\n\t\n\t\t\tif ($.support.transform3d && $.support.transition) {\n\t\t\t\tthis.$stage.css({\n\t\t\t\t\ttransform: 'translate3d(' + coordinate + 'px,0px,0px)',\n\t\t\t\t\ttransition: this.speed() / 1000 + 's'\n\t\t\t\t});\n\t\t\t} else if (animate) {\n\t\t\t\tthis.$stage.animate({\n\t\t\t\t\tleft: coordinate + 'px'\n\t\t\t\t}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));\n\t\t\t} else {\n\t\t\t\tthis.$stage.css({\n\t\t\t\t\tleft: coordinate + 'px'\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Checks whether the carousel is in a specific state or not.\n\t * @param {String} state - The state to check.\n\t * @returns {Boolean} - The flag which indicates if the carousel is busy.\n\t */\n\t\tOwl.prototype.is = function (state) {\n\t\t\treturn this._states.current[state] && this._states.current[state] > 0;\n\t\t};\n\t\n\t\t/**\n\t * Sets the absolute position of the current item.\n\t * @public\n\t * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.\n\t * @returns {Number} - The absolute position of the current item.\n\t */\n\t\tOwl.prototype.current = function (position) {\n\t\t\tif (position === undefined) {\n\t\t\t\treturn this._current;\n\t\t\t}\n\t\n\t\t\tif (this._items.length === 0) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\n\t\t\tposition = this.normalize(position);\n\t\n\t\t\tif (this._current !== position) {\n\t\t\t\tvar event = this.trigger('change', { property: { name: 'position', value: position } });\n\t\n\t\t\t\tif (event.data !== undefined) {\n\t\t\t\t\tposition = this.normalize(event.data);\n\t\t\t\t}\n\t\n\t\t\t\tthis._current = position;\n\t\n\t\t\t\tthis.invalidate('position');\n\t\n\t\t\t\tthis.trigger('changed', { property: { name: 'position', value: this._current } });\n\t\t\t}\n\t\n\t\t\treturn this._current;\n\t\t};\n\t\n\t\t/**\n\t * Invalidates the given part of the update routine.\n\t * @param {String} [part] - The part to invalidate.\n\t * @returns {Array.} - The invalidated parts.\n\t */\n\t\tOwl.prototype.invalidate = function (part) {\n\t\t\tif ($.type(part) === 'string') {\n\t\t\t\tthis._invalidated[part] = true;\n\t\t\t\tthis.is('valid') && this.leave('valid');\n\t\t\t}\n\t\t\treturn $.map(this._invalidated, function (v, i) {\n\t\t\t\treturn i;\n\t\t\t});\n\t\t};\n\t\n\t\t/**\n\t * Resets the absolute position of the current item.\n\t * @public\n\t * @param {Number} position - The absolute position of the new item.\n\t */\n\t\tOwl.prototype.reset = function (position) {\n\t\t\tposition = this.normalize(position);\n\t\n\t\t\tif (position === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tthis._speed = 0;\n\t\t\tthis._current = position;\n\t\n\t\t\tthis.suppress(['translate', 'translated']);\n\t\n\t\t\tthis.animate(this.coordinates(position));\n\t\n\t\t\tthis.release(['translate', 'translated']);\n\t\t};\n\t\n\t\t/**\n\t * Normalizes an absolute or a relative position of an item.\n\t * @public\n\t * @param {Number} position - The absolute or relative position to normalize.\n\t * @param {Boolean} [relative=false] - Whether the given position is relative or not.\n\t * @returns {Number} - The normalized position.\n\t */\n\t\tOwl.prototype.normalize = function (position, relative) {\n\t\t\tvar n = this._items.length,\n\t\t\t m = relative ? 0 : this._clones.length;\n\t\n\t\t\tif (!this.isNumeric(position) || n < 1) {\n\t\t\t\tposition = undefined;\n\t\t\t} else if (position < 0 || position >= n + m) {\n\t\t\t\tposition = ((position - m / 2) % n + n) % n + m / 2;\n\t\t\t}\n\t\n\t\t\treturn position;\n\t\t};\n\t\n\t\t/**\n\t * Converts an absolute position of an item into a relative one.\n\t * @public\n\t * @param {Number} position - The absolute position to convert.\n\t * @returns {Number} - The converted position.\n\t */\n\t\tOwl.prototype.relative = function (position) {\n\t\t\tposition -= this._clones.length / 2;\n\t\t\treturn this.normalize(position, true);\n\t\t};\n\t\n\t\t/**\n\t * Gets the maximum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\t\tOwl.prototype.maximum = function (relative) {\n\t\t\tvar settings = this.settings,\n\t\t\t maximum = this._coordinates.length,\n\t\t\t iterator,\n\t\t\t reciprocalItemsWidth,\n\t\t\t elementWidth;\n\t\n\t\t\tif (settings.loop) {\n\t\t\t\tmaximum = this._clones.length / 2 + this._items.length - 1;\n\t\t\t} else if (settings.autoWidth || settings.merge) {\n\t\t\t\titerator = this._items.length;\n\t\t\t\treciprocalItemsWidth = this._items[--iterator].width();\n\t\t\t\telementWidth = this.$element.width();\n\t\t\t\twhile (iterator--) {\n\t\t\t\t\treciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;\n\t\t\t\t\tif (reciprocalItemsWidth > elementWidth) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmaximum = iterator + 1;\n\t\t\t} else if (settings.center) {\n\t\t\t\tmaximum = this._items.length - 1;\n\t\t\t} else {\n\t\t\t\tmaximum = this._items.length - settings.items;\n\t\t\t}\n\t\n\t\t\tif (relative) {\n\t\t\t\tmaximum -= this._clones.length / 2;\n\t\t\t}\n\t\n\t\t\treturn Math.max(maximum, 0);\n\t\t};\n\t\n\t\t/**\n\t * Gets the minimum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\t\tOwl.prototype.minimum = function (relative) {\n\t\t\treturn relative ? 0 : this._clones.length / 2;\n\t\t};\n\t\n\t\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\t\tOwl.prototype.items = function (position) {\n\t\t\tif (position === undefined) {\n\t\t\t\treturn this._items.slice();\n\t\t\t}\n\t\n\t\t\tposition = this.normalize(position, true);\n\t\t\treturn this._items[position];\n\t\t};\n\t\n\t\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\t\tOwl.prototype.mergers = function (position) {\n\t\t\tif (position === undefined) {\n\t\t\t\treturn this._mergers.slice();\n\t\t\t}\n\t\n\t\t\tposition = this.normalize(position, true);\n\t\t\treturn this._mergers[position];\n\t\t};\n\t\n\t\t/**\n\t * Gets the absolute positions of clones for an item.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @returns {Array.} - The absolute positions of clones for the item or all if no position was given.\n\t */\n\t\tOwl.prototype.clones = function (position) {\n\t\t\tvar odd = this._clones.length / 2,\n\t\t\t even = odd + this._items.length,\n\t\t\t map = function map(index) {\n\t\t\t\treturn index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2;\n\t\t\t};\n\t\n\t\t\tif (position === undefined) {\n\t\t\t\treturn $.map(this._clones, function (v, i) {\n\t\t\t\t\treturn map(i);\n\t\t\t\t});\n\t\t\t}\n\t\n\t\t\treturn $.map(this._clones, function (v, i) {\n\t\t\t\treturn v === position ? map(i) : null;\n\t\t\t});\n\t\t};\n\t\n\t\t/**\n\t * Sets the current animation speed.\n\t * @public\n\t * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.\n\t * @returns {Number} - The current animation speed in milliseconds.\n\t */\n\t\tOwl.prototype.speed = function (speed) {\n\t\t\tif (speed !== undefined) {\n\t\t\t\tthis._speed = speed;\n\t\t\t}\n\t\n\t\t\treturn this._speed;\n\t\t};\n\t\n\t\t/**\n\t * Gets the coordinate of an item.\n\t * @todo The name of this method is missleanding.\n\t * @public\n\t * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.\n\t * @returns {Number|Array.} - The coordinate of the item in pixel or all coordinates.\n\t */\n\t\tOwl.prototype.coordinates = function (position) {\n\t\t\tvar multiplier = 1,\n\t\t\t newPosition = position - 1,\n\t\t\t coordinate;\n\t\n\t\t\tif (position === undefined) {\n\t\t\t\treturn $.map(this._coordinates, $.proxy(function (coordinate, index) {\n\t\t\t\t\treturn this.coordinates(index);\n\t\t\t\t}, this));\n\t\t\t}\n\t\n\t\t\tif (this.settings.center) {\n\t\t\t\tif (this.settings.rtl) {\n\t\t\t\t\tmultiplier = -1;\n\t\t\t\t\tnewPosition = position + 1;\n\t\t\t\t}\n\t\n\t\t\t\tcoordinate = this._coordinates[position];\n\t\t\t\tcoordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;\n\t\t\t} else {\n\t\t\t\tcoordinate = this._coordinates[newPosition] || 0;\n\t\t\t}\n\t\n\t\t\tcoordinate = Math.ceil(coordinate);\n\t\n\t\t\treturn coordinate;\n\t\t};\n\t\n\t\t/**\n\t * Calculates the speed for a translation.\n\t * @protected\n\t * @param {Number} from - The absolute position of the start item.\n\t * @param {Number} to - The absolute position of the target item.\n\t * @param {Number} [factor=undefined] - The time factor in milliseconds.\n\t * @returns {Number} - The time in milliseconds for the translation.\n\t */\n\t\tOwl.prototype.duration = function (from, to, factor) {\n\t\t\tif (factor === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\n\t\t\treturn Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs(factor || this.settings.smartSpeed);\n\t\t};\n\t\n\t\t/**\n\t * Slides to the specified item.\n\t * @public\n\t * @param {Number} position - The position of the item.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\t\tOwl.prototype.to = function (position, speed) {\n\t\t\tvar current = this.current(),\n\t\t\t revert = null,\n\t\t\t distance = position - this.relative(current),\n\t\t\t direction = (distance > 0) - (distance < 0),\n\t\t\t items = this._items.length,\n\t\t\t minimum = this.minimum(),\n\t\t\t maximum = this.maximum();\n\t\n\t\t\tif (this.settings.loop) {\n\t\t\t\tif (!this.settings.rewind && Math.abs(distance) > items / 2) {\n\t\t\t\t\tdistance += direction * -1 * items;\n\t\t\t\t}\n\t\n\t\t\t\tposition = current + distance;\n\t\t\t\trevert = ((position - minimum) % items + items) % items + minimum;\n\t\n\t\t\t\tif (revert !== position && revert - distance <= maximum && revert - distance > 0) {\n\t\t\t\t\tcurrent = revert - distance;\n\t\t\t\t\tposition = revert;\n\t\t\t\t\tthis.reset(current);\n\t\t\t\t}\n\t\t\t} else if (this.settings.rewind) {\n\t\t\t\tmaximum += 1;\n\t\t\t\tposition = (position % maximum + maximum) % maximum;\n\t\t\t} else {\n\t\t\t\tposition = Math.max(minimum, Math.min(maximum, position));\n\t\t\t}\n\t\n\t\t\tthis.speed(this.duration(current, position, speed));\n\t\t\tthis.current(position);\n\t\n\t\t\tif (this.$element.is(':visible')) {\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Slides to the next item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\t\tOwl.prototype.next = function (speed) {\n\t\t\tspeed = speed || false;\n\t\t\tthis.to(this.relative(this.current()) + 1, speed);\n\t\t};\n\t\n\t\t/**\n\t * Slides to the previous item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\t\tOwl.prototype.prev = function (speed) {\n\t\t\tspeed = speed || false;\n\t\t\tthis.to(this.relative(this.current()) - 1, speed);\n\t\t};\n\t\n\t\t/**\n\t * Handles the end of an animation.\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\t\tOwl.prototype.onTransitionEnd = function (event) {\n\t\n\t\t\t// if css2 animation then event object is undefined\n\t\t\tif (event !== undefined) {\n\t\t\t\tevent.stopPropagation();\n\t\n\t\t\t\t// Catch only owl-stage transitionEnd event\n\t\t\t\tif ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tthis.leave('animating');\n\t\t\tthis.trigger('translated');\n\t\t};\n\t\n\t\t/**\n\t * Gets viewport width.\n\t * @protected\n\t * @return {Number} - The width in pixel.\n\t */\n\t\tOwl.prototype.viewport = function () {\n\t\t\tvar width;\n\t\t\tif (this.options.responsiveBaseElement !== window) {\n\t\t\t\twidth = $(this.options.responsiveBaseElement).width();\n\t\t\t} else if (window.innerWidth) {\n\t\t\t\twidth = window.innerWidth;\n\t\t\t} else if (document.documentElement && document.documentElement.clientWidth) {\n\t\t\t\twidth = document.documentElement.clientWidth;\n\t\t\t} else {\n\t\t\t\tthrow 'Can not detect viewport width.';\n\t\t\t}\n\t\t\treturn width;\n\t\t};\n\t\n\t\t/**\n\t * Replaces the current content.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The new content.\n\t */\n\t\tOwl.prototype.replace = function (content) {\n\t\t\tthis.$stage.empty();\n\t\t\tthis._items = [];\n\t\n\t\t\tif (content) {\n\t\t\t\tcontent = content instanceof jQuery ? content : $(content);\n\t\t\t}\n\t\n\t\t\tif (this.settings.nestedItemSelector) {\n\t\t\t\tcontent = content.find('.' + this.settings.nestedItemSelector);\n\t\t\t}\n\t\n\t\t\tcontent.filter(function () {\n\t\t\t\treturn this.nodeType === 1;\n\t\t\t}).each($.proxy(function (index, item) {\n\t\t\t\titem = this.prepare(item);\n\t\t\t\tthis.$stage.append(item);\n\t\t\t\tthis._items.push(item);\n\t\t\t\tthis._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t\t}, this));\n\t\n\t\t\tthis.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);\n\t\n\t\t\tthis.invalidate('items');\n\t\t};\n\t\n\t\t/**\n\t * Adds an item.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The item content to add.\n\t * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.\n\t */\n\t\tOwl.prototype.add = function (content, position) {\n\t\t\tvar current = this.relative(this._current);\n\t\n\t\t\tposition = position === undefined ? this._items.length : this.normalize(position, true);\n\t\t\tcontent = content instanceof jQuery ? content : $(content);\n\t\n\t\t\tthis.trigger('add', { content: content, position: position });\n\t\n\t\t\tcontent = this.prepare(content);\n\t\n\t\t\tif (this._items.length === 0 || position === this._items.length) {\n\t\t\t\tthis._items.length === 0 && this.$stage.append(content);\n\t\t\t\tthis._items.length !== 0 && this._items[position - 1].after(content);\n\t\t\t\tthis._items.push(content);\n\t\t\t\tthis._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t\t} else {\n\t\t\t\tthis._items[position].before(content);\n\t\t\t\tthis._items.splice(position, 0, content);\n\t\t\t\tthis._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t\t}\n\t\n\t\t\tthis._items[current] && this.reset(this._items[current].index());\n\t\n\t\t\tthis.invalidate('items');\n\t\n\t\t\tthis.trigger('added', { content: content, position: position });\n\t\t};\n\t\n\t\t/**\n\t * Removes an item by its position.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {Number} position - The relative position of the item to remove.\n\t */\n\t\tOwl.prototype.remove = function (position) {\n\t\t\tposition = this.normalize(position, true);\n\t\n\t\t\tif (position === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tthis.trigger('remove', { content: this._items[position], position: position });\n\t\n\t\t\tthis._items[position].remove();\n\t\t\tthis._items.splice(position, 1);\n\t\t\tthis._mergers.splice(position, 1);\n\t\n\t\t\tthis.invalidate('items');\n\t\n\t\t\tthis.trigger('removed', { content: null, position: position });\n\t\t};\n\t\n\t\t/**\n\t * Preloads images with auto width.\n\t * @todo Replace by a more generic approach\n\t * @protected\n\t */\n\t\tOwl.prototype.preloadAutoWidthImages = function (images) {\n\t\t\timages.each($.proxy(function (i, element) {\n\t\t\t\tthis.enter('pre-loading');\n\t\t\t\telement = $(element);\n\t\t\t\t$(new Image()).one('load', $.proxy(function (e) {\n\t\t\t\t\telement.attr('src', e.target.src);\n\t\t\t\t\telement.css('opacity', 1);\n\t\t\t\t\tthis.leave('pre-loading');\n\t\t\t\t\t!this.is('pre-loading') && !this.is('initializing') && this.refresh();\n\t\t\t\t}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));\n\t\t\t}, this));\n\t\t};\n\t\n\t\t/**\n\t * Destroys the carousel.\n\t * @public\n\t */\n\t\tOwl.prototype.destroy = function () {\n\t\n\t\t\tthis.$element.off('.owl.core');\n\t\t\tthis.$stage.off('.owl.core');\n\t\t\t$(document).off('.owl.core');\n\t\n\t\t\tif (this.settings.responsive !== false) {\n\t\t\t\twindow.clearTimeout(this.resizeTimer);\n\t\t\t\tthis.off(window, 'resize', this._handlers.onThrottledResize);\n\t\t\t}\n\t\n\t\t\tfor (var i in this._plugins) {\n\t\t\t\tthis._plugins[i].destroy();\n\t\t\t}\n\t\n\t\t\tthis.$stage.children('.cloned').remove();\n\t\n\t\t\tthis.$stage.unwrap();\n\t\t\tthis.$stage.children().contents().unwrap();\n\t\t\tthis.$stage.children().unwrap();\n\t\n\t\t\tthis.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\\\S+\\\\s', 'g'), '')).removeData('owl.carousel');\n\t\t};\n\t\n\t\t/**\n\t * Operators to calculate right-to-left and left-to-right.\n\t * @protected\n\t * @param {Number} [a] - The left side operand.\n\t * @param {String} [o] - The operator.\n\t * @param {Number} [b] - The right side operand.\n\t */\n\t\tOwl.prototype.op = function (a, o, b) {\n\t\t\tvar rtl = this.settings.rtl;\n\t\t\tswitch (o) {\n\t\t\t\tcase '<':\n\t\t\t\t\treturn rtl ? a > b : a < b;\n\t\t\t\tcase '>':\n\t\t\t\t\treturn rtl ? a < b : a > b;\n\t\t\t\tcase '>=':\n\t\t\t\t\treturn rtl ? a <= b : a >= b;\n\t\t\t\tcase '<=':\n\t\t\t\t\treturn rtl ? a >= b : a <= b;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Attaches to an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The event handler to attach.\n\t * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.\n\t */\n\t\tOwl.prototype.on = function (element, event, listener, capture) {\n\t\t\tif (element.addEventListener) {\n\t\t\t\telement.addEventListener(event, listener, capture);\n\t\t\t} else if (element.attachEvent) {\n\t\t\t\telement.attachEvent('on' + event, listener);\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Detaches from an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The attached event handler to detach.\n\t * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.\n\t */\n\t\tOwl.prototype.off = function (element, event, listener, capture) {\n\t\t\tif (element.removeEventListener) {\n\t\t\t\telement.removeEventListener(event, listener, capture);\n\t\t\t} else if (element.detachEvent) {\n\t\t\t\telement.detachEvent('on' + event, listener);\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Triggers a public event.\n\t * @todo Remove `status`, `relatedTarget` should be used instead.\n\t * @protected\n\t * @param {String} name - The event name.\n\t * @param {*} [data=null] - The event data.\n\t * @param {String} [namespace=carousel] - The event namespace.\n\t * @param {String} [state] - The state which is associated with the event.\n\t * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.\n\t * @returns {Event} - The event arguments.\n\t */\n\t\tOwl.prototype.trigger = function (name, data, namespace, state, enter) {\n\t\t\tvar status = {\n\t\t\t\titem: { count: this._items.length, index: this.current() }\n\t\t\t},\n\t\t\t handler = $.camelCase($.grep(['on', name, namespace], function (v) {\n\t\t\t\treturn v;\n\t\t\t}).join('-').toLowerCase()),\n\t\t\t event = $.Event([name, 'owl', namespace || 'carousel'].join('.').toLowerCase(), $.extend({ relatedTarget: this }, status, data));\n\t\n\t\t\tif (!this._supress[name]) {\n\t\t\t\t$.each(this._plugins, function (name, plugin) {\n\t\t\t\t\tif (plugin.onTrigger) {\n\t\t\t\t\t\tplugin.onTrigger(event);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t\tthis.register({ type: Owl.Type.Event, name: name });\n\t\t\t\tthis.$element.trigger(event);\n\t\n\t\t\t\tif (this.settings && typeof this.settings[handler] === 'function') {\n\t\t\t\t\tthis.settings[handler].call(this, event);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn event;\n\t\t};\n\t\n\t\t/**\n\t * Enters a state.\n\t * @param name - The state name.\n\t */\n\t\tOwl.prototype.enter = function (name) {\n\t\t\t$.each([name].concat(this._states.tags[name] || []), $.proxy(function (i, name) {\n\t\t\t\tif (this._states.current[name] === undefined) {\n\t\t\t\t\tthis._states.current[name] = 0;\n\t\t\t\t}\n\t\n\t\t\t\tthis._states.current[name]++;\n\t\t\t}, this));\n\t\t};\n\t\n\t\t/**\n\t * Leaves a state.\n\t * @param name - The state name.\n\t */\n\t\tOwl.prototype.leave = function (name) {\n\t\t\t$.each([name].concat(this._states.tags[name] || []), $.proxy(function (i, name) {\n\t\t\t\tthis._states.current[name]--;\n\t\t\t}, this));\n\t\t};\n\t\n\t\t/**\n\t * Registers an event or state.\n\t * @public\n\t * @param {Object} object - The event or state to register.\n\t */\n\t\tOwl.prototype.register = function (object) {\n\t\t\tif (object.type === Owl.Type.Event) {\n\t\t\t\tif (!$.event.special[object.name]) {\n\t\t\t\t\t$.event.special[object.name] = {};\n\t\t\t\t}\n\t\n\t\t\t\tif (!$.event.special[object.name].owl) {\n\t\t\t\t\tvar _default = $.event.special[object.name]._default;\n\t\t\t\t\t$.event.special[object.name]._default = function (e) {\n\t\t\t\t\t\tif (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {\n\t\t\t\t\t\t\treturn _default.apply(this, arguments);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn e.namespace && e.namespace.indexOf('owl') > -1;\n\t\t\t\t\t};\n\t\t\t\t\t$.event.special[object.name].owl = true;\n\t\t\t\t}\n\t\t\t} else if (object.type === Owl.Type.State) {\n\t\t\t\tif (!this._states.tags[object.name]) {\n\t\t\t\t\tthis._states.tags[object.name] = object.tags;\n\t\t\t\t} else {\n\t\t\t\t\tthis._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);\n\t\t\t\t}\n\t\n\t\t\t\tthis._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function (tag, i) {\n\t\t\t\t\treturn $.inArray(tag, this._states.tags[object.name]) === i;\n\t\t\t\t}, this));\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Suppresses events.\n\t * @protected\n\t * @param {Array.} events - The events to suppress.\n\t */\n\t\tOwl.prototype.suppress = function (events) {\n\t\t\t$.each(events, $.proxy(function (index, event) {\n\t\t\t\tthis._supress[event] = true;\n\t\t\t}, this));\n\t\t};\n\t\n\t\t/**\n\t * Releases suppressed events.\n\t * @protected\n\t * @param {Array.} events - The events to release.\n\t */\n\t\tOwl.prototype.release = function (events) {\n\t\t\t$.each(events, $.proxy(function (index, event) {\n\t\t\t\tdelete this._supress[event];\n\t\t\t}, this));\n\t\t};\n\t\n\t\t/**\n\t * Gets unified pointer coordinates from event.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} - The `mousedown` or `touchstart` event.\n\t * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.\n\t */\n\t\tOwl.prototype.pointer = function (event) {\n\t\t\tvar result = { x: null, y: null };\n\t\n\t\t\tevent = event.originalEvent || event || window.event;\n\t\n\t\t\tevent = event.touches && event.touches.length ? event.touches[0] : event.changedTouches && event.changedTouches.length ? event.changedTouches[0] : event;\n\t\n\t\t\tif (event.pageX) {\n\t\t\t\tresult.x = event.pageX;\n\t\t\t\tresult.y = event.pageY;\n\t\t\t} else {\n\t\t\t\tresult.x = event.clientX;\n\t\t\t\tresult.y = event.clientY;\n\t\t\t}\n\t\n\t\t\treturn result;\n\t\t};\n\t\n\t\t/**\n\t * Determines if the input is a Number or something that can be coerced to a Number\n\t * @protected\n\t * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested\n\t * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number\n\t */\n\t\tOwl.prototype.isNumeric = function (number) {\n\t\t\treturn !isNaN(parseFloat(number));\n\t\t};\n\t\n\t\t/**\n\t * Gets the difference of two vectors.\n\t * @todo #261\n\t * @protected\n\t * @param {Object} - The first vector.\n\t * @param {Object} - The second vector.\n\t * @returns {Object} - The difference.\n\t */\n\t\tOwl.prototype.difference = function (first, second) {\n\t\t\treturn {\n\t\t\t\tx: first.x - second.x,\n\t\t\t\ty: first.y - second.y\n\t\t\t};\n\t\t};\n\t\n\t\t/**\n\t * The jQuery Plugin for the Owl Carousel\n\t * @todo Navigation plugin `next` and `prev`\n\t * @public\n\t */\n\t\t$.fn.owlCarousel = function (option) {\n\t\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\t\n\t\t\treturn this.each(function () {\n\t\t\t\tvar $this = $(this),\n\t\t\t\t data = $this.data('owl.carousel');\n\t\n\t\t\t\tif (!data) {\n\t\t\t\t\tdata = new Owl(this, (typeof option === 'undefined' ? 'undefined' : _typeof(option)) == 'object' && option);\n\t\t\t\t\t$this.data('owl.carousel', data);\n\t\n\t\t\t\t\t$.each(['next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'], function (i, event) {\n\t\t\t\t\t\tdata.register({ type: Owl.Type.Event, name: event });\n\t\t\t\t\t\tdata.$element.on(event + '.owl.carousel.core', $.proxy(function (e) {\n\t\t\t\t\t\t\tif (e.namespace && e.relatedTarget !== this) {\n\t\t\t\t\t\t\t\tthis.suppress([event]);\n\t\t\t\t\t\t\t\tdata[event].apply(this, [].slice.call(arguments, 1));\n\t\t\t\t\t\t\t\tthis.release([event]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, data));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\n\t\t\t\tif (typeof option == 'string' && option.charAt(0) !== '_') {\n\t\t\t\t\tdata[option].apply(data, args);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\n\t\t/**\n\t * The constructor for the jQuery Plugin\n\t * @public\n\t */\n\t\t$.fn.owlCarousel.Constructor = Owl;\n\t})(window.Zepto || window.jQuery, window, document);\n\t\n\t/**\n\t * AutoRefresh Plugin\n\t * @version 2.1.0\n\t * @author Artus Kolanowski\n\t * @author David Deutsch\n\t * @license The MIT License (MIT)\n\t */\n\t;(function ($, window, document, undefined) {\n\t\n\t\t/**\n\t * Creates the auto refresh plugin.\n\t * @class The Auto Refresh Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\t\tvar AutoRefresh = function AutoRefresh(carousel) {\n\t\t\t/**\n\t * Reference to the core.\n\t * @protected\n\t * @type {Owl}\n\t */\n\t\t\tthis._core = carousel;\n\t\n\t\t\t/**\n\t * Refresh interval.\n\t * @protected\n\t * @type {number}\n\t */\n\t\t\tthis._interval = null;\n\t\n\t\t\t/**\n\t * Whether the element is currently visible or not.\n\t * @protected\n\t * @type {Boolean}\n\t */\n\t\t\tthis._visible = null;\n\t\n\t\t\t/**\n\t * All event handlers.\n\t * @protected\n\t * @type {Object}\n\t */\n\t\t\tthis._handlers = {\n\t\t\t\t'initialized.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._core.settings.autoRefresh) {\n\t\t\t\t\t\tthis.watch();\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t};\n\t\n\t\t\t// set default options\n\t\t\tthis._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);\n\t\n\t\t\t// register event handlers\n\t\t\tthis._core.$element.on(this._handlers);\n\t\t};\n\t\n\t\t/**\n\t * Default options.\n\t * @public\n\t */\n\t\tAutoRefresh.Defaults = {\n\t\t\tautoRefresh: true,\n\t\t\tautoRefreshInterval: 500\n\t\t};\n\t\n\t\t/**\n\t * Watches the element.\n\t */\n\t\tAutoRefresh.prototype.watch = function () {\n\t\t\tif (this._interval) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tthis._visible = this._core.$element.is(':visible');\n\t\t\tthis._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);\n\t\t};\n\t\n\t\t/**\n\t * Refreshes the element.\n\t */\n\t\tAutoRefresh.prototype.refresh = function () {\n\t\t\tif (this._core.$element.is(':visible') === this._visible) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tthis._visible = !this._visible;\n\t\n\t\t\tthis._core.$element.toggleClass('owl-hidden', !this._visible);\n\t\n\t\t\tthis._visible && this._core.invalidate('width') && this._core.refresh();\n\t\t};\n\t\n\t\t/**\n\t * Destroys the plugin.\n\t */\n\t\tAutoRefresh.prototype.destroy = function () {\n\t\t\tvar handler, property;\n\t\n\t\t\twindow.clearInterval(this._interval);\n\t\n\t\t\tfor (handler in this._handlers) {\n\t\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t\t}\n\t\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t\t}\n\t\t};\n\t\n\t\t$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;\n\t})(window.Zepto || window.jQuery, window, document);\n\t\n\t/**\n\t * Lazy Plugin\n\t * @version 2.1.0\n\t * @author Bartosz Wojciechowski\n\t * @author David Deutsch\n\t * @license The MIT License (MIT)\n\t */\n\t;(function ($, window, document, undefined) {\n\t\n\t\t/**\n\t * Creates the lazy plugin.\n\t * @class The Lazy Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\t\tvar Lazy = function Lazy(carousel) {\n\t\n\t\t\t/**\n\t * Reference to the core.\n\t * @protected\n\t * @type {Owl}\n\t */\n\t\t\tthis._core = carousel;\n\t\n\t\t\t/**\n\t * Already loaded items.\n\t * @protected\n\t * @type {Array.}\n\t */\n\t\t\tthis._loaded = [];\n\t\n\t\t\t/**\n\t * Event handlers.\n\t * @protected\n\t * @type {Object}\n\t */\n\t\t\tthis._handlers = {\n\t\t\t\t'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (!e.namespace) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (!this._core.settings || !this._core.settings.lazyLoad) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (e.property && e.property.name == 'position' || e.type == 'initialized') {\n\t\t\t\t\t\tvar settings = this._core.settings,\n\t\t\t\t\t\t n = settings.center && Math.ceil(settings.items / 2) || settings.items,\n\t\t\t\t\t\t i = settings.center && n * -1 || 0,\n\t\t\t\t\t\t position = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,\n\t\t\t\t\t\t clones = this._core.clones().length,\n\t\t\t\t\t\t load = $.proxy(function (i, v) {\n\t\t\t\t\t\t\tthis.load(v);\n\t\t\t\t\t\t}, this);\n\t\n\t\t\t\t\t\twhile (i++ < n) {\n\t\t\t\t\t\t\tthis.load(clones / 2 + this._core.relative(position));\n\t\t\t\t\t\t\tclones && $.each(this._core.clones(this._core.relative(position)), load);\n\t\t\t\t\t\t\tposition++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t};\n\t\n\t\t\t// set the default options\n\t\t\tthis._core.options = $.extend({}, Lazy.Defaults, this._core.options);\n\t\n\t\t\t// register event handler\n\t\t\tthis._core.$element.on(this._handlers);\n\t\t};\n\t\n\t\t/**\n\t * Default options.\n\t * @public\n\t */\n\t\tLazy.Defaults = {\n\t\t\tlazyLoad: false\n\t\t};\n\t\n\t\t/**\n\t * Loads all resources of an item at the specified position.\n\t * @param {Number} position - The absolute position of the item.\n\t * @protected\n\t */\n\t\tLazy.prototype.load = function (position) {\n\t\t\tvar $item = this._core.$stage.children().eq(position),\n\t\t\t $elements = $item && $item.find('.owl-lazy');\n\t\n\t\t\tif (!$elements || $.inArray($item.get(0), this._loaded) > -1) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t$elements.each($.proxy(function (index, element) {\n\t\t\t\tvar $element = $(element),\n\t\t\t\t image,\n\t\t\t\t url = window.devicePixelRatio > 1 && $element.attr('data-src-retina') || $element.attr('data-src');\n\t\n\t\t\t\tthis._core.trigger('load', { element: $element, url: url }, 'lazy');\n\t\n\t\t\t\tif ($element.is('img')) {\n\t\t\t\t\t$element.one('load.owl.lazy', $.proxy(function () {\n\t\t\t\t\t\t$element.css('opacity', 1);\n\t\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t\t}, this)).attr('src', url);\n\t\t\t\t} else {\n\t\t\t\t\timage = new Image();\n\t\t\t\t\timage.onload = $.proxy(function () {\n\t\t\t\t\t\t$element.css({\n\t\t\t\t\t\t\t'background-image': 'url(' + url + ')',\n\t\t\t\t\t\t\t'opacity': '1'\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t\t}, this);\n\t\t\t\t\timage.src = url;\n\t\t\t\t}\n\t\t\t}, this));\n\t\n\t\t\tthis._loaded.push($item.get(0));\n\t\t};\n\t\n\t\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\t\tLazy.prototype.destroy = function () {\n\t\t\tvar handler, property;\n\t\n\t\t\tfor (handler in this.handlers) {\n\t\t\t\tthis._core.$element.off(handler, this.handlers[handler]);\n\t\t\t}\n\t\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t\t}\n\t\t};\n\t\n\t\t$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;\n\t})(window.Zepto || window.jQuery, window, document);\n\t\n\t/**\n\t * AutoHeight Plugin\n\t * @version 2.1.0\n\t * @author Bartosz Wojciechowski\n\t * @author David Deutsch\n\t * @license The MIT License (MIT)\n\t */\n\t;(function ($, window, document, undefined) {\n\t\n\t\t/**\n\t * Creates the auto height plugin.\n\t * @class The Auto Height Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\t\tvar AutoHeight = function AutoHeight(carousel) {\n\t\t\t/**\n\t * Reference to the core.\n\t * @protected\n\t * @type {Owl}\n\t */\n\t\t\tthis._core = carousel;\n\t\n\t\t\t/**\n\t * All event handlers.\n\t * @protected\n\t * @type {Object}\n\t */\n\t\t\tthis._handlers = {\n\t\t\t\t'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._core.settings.autoHeight) {\n\t\t\t\t\t\tthis.update();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'changed.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._core.settings.autoHeight && e.property.name == 'position') {\n\t\t\t\t\t\tthis.update();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'loaded.owl.lazy': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._core.settings.autoHeight && e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {\n\t\t\t\t\t\tthis.update();\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t};\n\t\n\t\t\t// set default options\n\t\t\tthis._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);\n\t\n\t\t\t// register event handlers\n\t\t\tthis._core.$element.on(this._handlers);\n\t\t};\n\t\n\t\t/**\n\t * Default options.\n\t * @public\n\t */\n\t\tAutoHeight.Defaults = {\n\t\t\tautoHeight: false,\n\t\t\tautoHeightClass: 'owl-height'\n\t\t};\n\t\n\t\t/**\n\t * Updates the view.\n\t */\n\t\tAutoHeight.prototype.update = function () {\n\t\t\tvar start = this._core._current,\n\t\t\t end = start + this._core.settings.items,\n\t\t\t visible = this._core.$stage.children().toArray().slice(start, end),\n\t\t\t heights = [],\n\t\t\t maxheight = 0;\n\t\n\t\t\t$.each(visible, function (index, item) {\n\t\t\t\theights.push($(item).height());\n\t\t\t});\n\t\n\t\t\tmaxheight = Math.max.apply(null, heights);\n\t\n\t\t\tthis._core.$stage.parent().height(maxheight).addClass(this._core.settings.autoHeightClass);\n\t\t};\n\t\n\t\tAutoHeight.prototype.destroy = function () {\n\t\t\tvar handler, property;\n\t\n\t\t\tfor (handler in this._handlers) {\n\t\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t\t}\n\t\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t\t}\n\t\t};\n\t\n\t\t$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;\n\t})(window.Zepto || window.jQuery, window, document);\n\t\n\t/**\n\t * Video Plugin\n\t * @version 2.1.0\n\t * @author Bartosz Wojciechowski\n\t * @author David Deutsch\n\t * @license The MIT License (MIT)\n\t */\n\t;(function ($, window, document, undefined) {\n\t\n\t\t/**\n\t * Creates the video plugin.\n\t * @class The Video Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\t\tvar Video = function Video(carousel) {\n\t\t\t/**\n\t * Reference to the core.\n\t * @protected\n\t * @type {Owl}\n\t */\n\t\t\tthis._core = carousel;\n\t\n\t\t\t/**\n\t * Cache all video URLs.\n\t * @protected\n\t * @type {Object}\n\t */\n\t\t\tthis._videos = {};\n\t\n\t\t\t/**\n\t * Current playing item.\n\t * @protected\n\t * @type {jQuery}\n\t */\n\t\t\tthis._playing = null;\n\t\n\t\t\t/**\n\t * All event handlers.\n\t * @todo The cloned content removale is too late\n\t * @protected\n\t * @type {Object}\n\t */\n\t\t\tthis._handlers = {\n\t\t\t\t'initialized.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace) {\n\t\t\t\t\t\tthis._core.register({ type: 'state', name: 'playing', tags: ['interacting'] });\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'resize.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._core.settings.video && this.isInFullScreen()) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'refreshed.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._core.is('resizing')) {\n\t\t\t\t\t\tthis._core.$stage.find('.cloned .owl-video-frame').remove();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'changed.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && e.property.name === 'position' && this._playing) {\n\t\t\t\t\t\tthis.stop();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'prepared.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (!e.namespace) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar $element = $(e.content).find('.owl-video');\n\t\n\t\t\t\t\tif ($element.length) {\n\t\t\t\t\t\t$element.css('display', 'none');\n\t\t\t\t\t\tthis.fetch($element, $(e.content));\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t};\n\t\n\t\t\t// set default options\n\t\t\tthis._core.options = $.extend({}, Video.Defaults, this._core.options);\n\t\n\t\t\t// register event handlers\n\t\t\tthis._core.$element.on(this._handlers);\n\t\n\t\t\tthis._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function (e) {\n\t\t\t\tthis.play(e);\n\t\t\t}, this));\n\t\t};\n\t\n\t\t/**\n\t * Default options.\n\t * @public\n\t */\n\t\tVideo.Defaults = {\n\t\t\tvideo: false,\n\t\t\tvideoHeight: false,\n\t\t\tvideoWidth: false\n\t\t};\n\t\n\t\t/**\n\t * Gets the video ID and the type (YouTube/Vimeo/vzaar only).\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {jQuery} item - The item containing the video.\n\t */\n\t\tVideo.prototype.fetch = function (target, item) {\n\t\t\tvar type = function () {\n\t\t\t\tif (target.attr('data-vimeo-id')) {\n\t\t\t\t\treturn 'vimeo';\n\t\t\t\t} else if (target.attr('data-vzaar-id')) {\n\t\t\t\t\treturn 'vzaar';\n\t\t\t\t} else {\n\t\t\t\t\treturn 'youtube';\n\t\t\t\t}\n\t\t\t}(),\n\t\t\t id = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),\n\t\t\t width = target.attr('data-width') || this._core.settings.videoWidth,\n\t\t\t height = target.attr('data-height') || this._core.settings.videoHeight,\n\t\t\t url = target.attr('href');\n\t\n\t\t\tif (url) {\n\t\n\t\t\t\t/*\n\t \t\tParses the id's out of the following urls (and probably more):\n\t \t\thttps://www.youtube.com/watch?v=:id\n\t \t\thttps://youtu.be/:id\n\t \t\thttps://vimeo.com/:id\n\t \t\thttps://vimeo.com/channels/:channel/:id\n\t \t\thttps://vimeo.com/groups/:group/videos/:id\n\t \t\thttps://app.vzaar.com/videos/:id\n\t \t\t\tVisual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F\n\t */\n\t\n\t\t\t\tid = url.match(/(http:|https:|)\\/\\/(player.|www.|app.)?(vimeo\\.com|youtu(be\\.com|\\.be|be\\.googleapis\\.com)|vzaar\\.com)\\/(video\\/|videos\\/|embed\\/|channels\\/.+\\/|groups\\/.+\\/|watch\\?v=|v\\/)?([A-Za-z0-9._%-]*)(\\&\\S+)?/);\n\t\n\t\t\t\tif (id[3].indexOf('youtu') > -1) {\n\t\t\t\t\ttype = 'youtube';\n\t\t\t\t} else if (id[3].indexOf('vimeo') > -1) {\n\t\t\t\t\ttype = 'vimeo';\n\t\t\t\t} else if (id[3].indexOf('vzaar') > -1) {\n\t\t\t\t\ttype = 'vzaar';\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Video URL not supported.');\n\t\t\t\t}\n\t\t\t\tid = id[6];\n\t\t\t} else {\n\t\t\t\tthrow new Error('Missing video URL.');\n\t\t\t}\n\t\n\t\t\tthis._videos[url] = {\n\t\t\t\ttype: type,\n\t\t\t\tid: id,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\n\t\t\titem.attr('data-video', url);\n\t\n\t\t\tthis.thumbnail(target, this._videos[url]);\n\t\t};\n\t\n\t\t/**\n\t * Creates video thumbnail.\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {Object} info - The video info object.\n\t * @see `fetch`\n\t */\n\t\tVideo.prototype.thumbnail = function (target, video) {\n\t\t\tvar tnLink,\n\t\t\t icon,\n\t\t\t path,\n\t\t\t dimensions = video.width && video.height ? 'style=\"width:' + video.width + 'px;height:' + video.height + 'px;\"' : '',\n\t\t\t customTn = target.find('img'),\n\t\t\t srcType = 'src',\n\t\t\t lazyClass = '',\n\t\t\t settings = this._core.settings,\n\t\t\t create = function create(path) {\n\t\t\t\ticon = '
';\n\t\n\t\t\t\tif (settings.lazyLoad) {\n\t\t\t\t\ttnLink = '
';\n\t\t\t\t} else {\n\t\t\t\t\ttnLink = '
';\n\t\t\t\t}\n\t\t\t\ttarget.after(tnLink);\n\t\t\t\ttarget.after(icon);\n\t\t\t};\n\t\n\t\t\t// wrap video content into owl-video-wrapper div\n\t\t\ttarget.wrap('
');\n\t\n\t\t\tif (this._core.settings.lazyLoad) {\n\t\t\t\tsrcType = 'data-src';\n\t\t\t\tlazyClass = 'owl-lazy';\n\t\t\t}\n\t\n\t\t\t// custom thumbnail\n\t\t\tif (customTn.length) {\n\t\t\t\tcreate(customTn.attr(srcType));\n\t\t\t\tcustomTn.remove();\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tif (video.type === 'youtube') {\n\t\t\t\tpath = \"//img.youtube.com/vi/\" + video.id + \"/hqdefault.jpg\";\n\t\t\t\tcreate(path);\n\t\t\t} else if (video.type === 'vimeo') {\n\t\t\t\t$.ajax({\n\t\t\t\t\ttype: 'GET',\n\t\t\t\t\turl: '//vimeo.com/api/v2/video/' + video.id + '.json',\n\t\t\t\t\tjsonp: 'callback',\n\t\t\t\t\tdataType: 'jsonp',\n\t\t\t\t\tsuccess: function success(data) {\n\t\t\t\t\t\tpath = data[0].thumbnail_large;\n\t\t\t\t\t\tcreate(path);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (video.type === 'vzaar') {\n\t\t\t\t$.ajax({\n\t\t\t\t\ttype: 'GET',\n\t\t\t\t\turl: '//vzaar.com/api/videos/' + video.id + '.json',\n\t\t\t\t\tjsonp: 'callback',\n\t\t\t\t\tdataType: 'jsonp',\n\t\t\t\t\tsuccess: function success(data) {\n\t\t\t\t\t\tpath = data.framegrab_url;\n\t\t\t\t\t\tcreate(path);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Stops the current video.\n\t * @public\n\t */\n\t\tVideo.prototype.stop = function () {\n\t\t\tthis._core.trigger('stop', null, 'video');\n\t\t\tthis._playing.find('.owl-video-frame').remove();\n\t\t\tthis._playing.removeClass('owl-video-playing');\n\t\t\tthis._playing = null;\n\t\t\tthis._core.leave('playing');\n\t\t\tthis._core.trigger('stopped', null, 'video');\n\t\t};\n\t\n\t\t/**\n\t * Starts the current video.\n\t * @public\n\t * @param {Event} event - The event arguments.\n\t */\n\t\tVideo.prototype.play = function (event) {\n\t\t\tvar target = $(event.target),\n\t\t\t item = target.closest('.' + this._core.settings.itemClass),\n\t\t\t video = this._videos[item.attr('data-video')],\n\t\t\t width = video.width || '100%',\n\t\t\t height = video.height || this._core.$stage.height(),\n\t\t\t html;\n\t\n\t\t\tif (this._playing) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tthis._core.enter('playing');\n\t\t\tthis._core.trigger('play', null, 'video');\n\t\n\t\t\titem = this._core.items(this._core.relative(item.index()));\n\t\n\t\t\tthis._core.reset(item.index());\n\t\n\t\t\tif (video.type === 'youtube') {\n\t\t\t\thtml = '';\n\t\t\t} else if (video.type === 'vimeo') {\n\t\t\t\thtml = '';\n\t\t\t} else if (video.type === 'vzaar') {\n\t\t\t\thtml = '';\n\t\t\t}\n\t\n\t\t\t$('
' + html + '
').insertAfter(item.find('.owl-video'));\n\t\n\t\t\tthis._playing = item.addClass('owl-video-playing');\n\t\t};\n\t\n\t\t/**\n\t * Checks whether an video is currently in full screen mode or not.\n\t * @todo Bad style because looks like a readonly method but changes members.\n\t * @protected\n\t * @returns {Boolean}\n\t */\n\t\tVideo.prototype.isInFullScreen = function () {\n\t\t\tvar element = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n\t\n\t\t\treturn element && $(element).parent().hasClass('owl-video-frame');\n\t\t};\n\t\n\t\t/**\n\t * Destroys the plugin.\n\t */\n\t\tVideo.prototype.destroy = function () {\n\t\t\tvar handler, property;\n\t\n\t\t\tthis._core.$element.off('click.owl.video');\n\t\n\t\t\tfor (handler in this._handlers) {\n\t\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t\t}\n\t\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t\t}\n\t\t};\n\t\n\t\t$.fn.owlCarousel.Constructor.Plugins.Video = Video;\n\t})(window.Zepto || window.jQuery, window, document);\n\t\n\t/**\n\t * Animate Plugin\n\t * @version 2.1.0\n\t * @author Bartosz Wojciechowski\n\t * @author David Deutsch\n\t * @license The MIT License (MIT)\n\t */\n\t;(function ($, window, document, undefined) {\n\t\n\t\t/**\n\t * Creates the animate plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\t\tvar Animate = function Animate(scope) {\n\t\t\tthis.core = scope;\n\t\t\tthis.core.options = $.extend({}, Animate.Defaults, this.core.options);\n\t\t\tthis.swapping = true;\n\t\t\tthis.previous = undefined;\n\t\t\tthis.next = undefined;\n\t\n\t\t\tthis.handlers = {\n\t\t\t\t'change.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\t\tthis.previous = this.core.current();\n\t\t\t\t\t\tthis.next = e.property.value;\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace) {\n\t\t\t\t\t\tthis.swapping = e.type == 'translated';\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'translate.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {\n\t\t\t\t\t\tthis.swap();\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t};\n\t\n\t\t\tthis.core.$element.on(this.handlers);\n\t\t};\n\t\n\t\t/**\n\t * Default options.\n\t * @public\n\t */\n\t\tAnimate.Defaults = {\n\t\t\tanimateOut: false,\n\t\t\tanimateIn: false\n\t\t};\n\t\n\t\t/**\n\t * Toggles the animation classes whenever an translations starts.\n\t * @protected\n\t * @returns {Boolean|undefined}\n\t */\n\t\tAnimate.prototype.swap = function () {\n\t\n\t\t\tif (this.core.settings.items !== 1) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif (!$.support.animation || !$.support.transition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tthis.core.speed(0);\n\t\n\t\t\tvar left,\n\t\t\t clear = $.proxy(this.clear, this),\n\t\t\t previous = this.core.$stage.children().eq(this.previous),\n\t\t\t next = this.core.$stage.children().eq(this.next),\n\t\t\t incoming = this.core.settings.animateIn,\n\t\t\t outgoing = this.core.settings.animateOut;\n\t\n\t\t\tif (this.core.current() === this.previous) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif (outgoing) {\n\t\t\t\tleft = this.core.coordinates(this.previous) - this.core.coordinates(this.next);\n\t\t\t\tprevious.one($.support.animation.end, clear).css({ 'left': left + 'px' }).addClass('animated owl-animated-out').addClass(outgoing);\n\t\t\t}\n\t\n\t\t\tif (incoming) {\n\t\t\t\tnext.one($.support.animation.end, clear).addClass('animated owl-animated-in').addClass(incoming);\n\t\t\t}\n\t\t};\n\t\n\t\tAnimate.prototype.clear = function (e) {\n\t\t\t$(e.target).css({ 'left': '' }).removeClass('animated owl-animated-out owl-animated-in').removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut);\n\t\t\tthis.core.onTransitionEnd();\n\t\t};\n\t\n\t\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\t\tAnimate.prototype.destroy = function () {\n\t\t\tvar handler, property;\n\t\n\t\t\tfor (handler in this.handlers) {\n\t\t\t\tthis.core.$element.off(handler, this.handlers[handler]);\n\t\t\t}\n\t\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t\t}\n\t\t};\n\t\n\t\t$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;\n\t})(window.Zepto || window.jQuery, window, document);\n\t\n\t/**\n\t * Autoplay Plugin\n\t * @version 2.1.0\n\t * @author Bartosz Wojciechowski\n\t * @author Artus Kolanowski\n\t * @author David Deutsch\n\t * @license The MIT License (MIT)\n\t */\n\t;(function ($, window, document, undefined) {\n\t\n\t\t/**\n\t * Creates the autoplay plugin.\n\t * @class The Autoplay Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\t\tvar Autoplay = function Autoplay(carousel) {\n\t\t\t/**\n\t * Reference to the core.\n\t * @protected\n\t * @type {Owl}\n\t */\n\t\t\tthis._core = carousel;\n\t\n\t\t\t/**\n\t * The autoplay timeout.\n\t * @type {Timeout}\n\t */\n\t\t\tthis._timeout = null;\n\t\n\t\t\t/**\n\t * Indicates whenever the autoplay is paused.\n\t * @type {Boolean}\n\t */\n\t\t\tthis._paused = false;\n\t\n\t\t\t/**\n\t * All event handlers.\n\t * @protected\n\t * @type {Object}\n\t */\n\t\t\tthis._handlers = {\n\t\t\t\t'changed.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && e.property.name === 'settings') {\n\t\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\t\tthis.play();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.stop();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.namespace && e.property.name === 'position') {\n\t\t\t\t\t\t//console.log('play?', e);\n\t\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\t\tthis._setAutoPlayInterval();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'initialized.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._core.settings.autoplay) {\n\t\t\t\t\t\tthis.play();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'play.owl.autoplay': $.proxy(function (e, t, s) {\n\t\t\t\t\tif (e.namespace) {\n\t\t\t\t\t\tthis.play(t, s);\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'stop.owl.autoplay': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace) {\n\t\t\t\t\t\tthis.stop();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'mouseover.owl.autoplay': $.proxy(function () {\n\t\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'mouseleave.owl.autoplay': $.proxy(function () {\n\t\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\t\tthis.play();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'touchstart.owl.core': $.proxy(function () {\n\t\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'touchend.owl.core': $.proxy(function () {\n\t\t\t\t\tif (this._core.settings.autoplayHoverPause) {\n\t\t\t\t\t\tthis.play();\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t};\n\t\n\t\t\t// register event handlers\n\t\t\tthis._core.$element.on(this._handlers);\n\t\n\t\t\t// set default options\n\t\t\tthis._core.options = $.extend({}, Autoplay.Defaults, this._core.options);\n\t\t};\n\t\n\t\t/**\n\t * Default options.\n\t * @public\n\t */\n\t\tAutoplay.Defaults = {\n\t\t\tautoplay: false,\n\t\t\tautoplayTimeout: 5000,\n\t\t\tautoplayHoverPause: false,\n\t\t\tautoplaySpeed: false\n\t\t};\n\t\n\t\t/**\n\t * Starts the autoplay.\n\t * @public\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t */\n\t\tAutoplay.prototype.play = function (timeout, speed) {\n\t\t\tthis._paused = false;\n\t\n\t\t\tif (this._core.is('rotating')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tthis._core.enter('rotating');\n\t\n\t\t\tthis._setAutoPlayInterval();\n\t\t};\n\t\n\t\t/**\n\t * Gets a new timeout\n\t * @private\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t * @return {Timeout}\n\t */\n\t\tAutoplay.prototype._getNextTimeout = function (timeout, speed) {\n\t\t\tif (this._timeout) {\n\t\t\t\twindow.clearTimeout(this._timeout);\n\t\t\t}\n\t\t\treturn window.setTimeout($.proxy(function () {\n\t\t\t\tif (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._core.next(speed || this._core.settings.autoplaySpeed);\n\t\t\t}, this), timeout || this._core.settings.autoplayTimeout);\n\t\t};\n\t\n\t\t/**\n\t * Sets autoplay in motion.\n\t * @private\n\t */\n\t\tAutoplay.prototype._setAutoPlayInterval = function () {\n\t\t\tthis._timeout = this._getNextTimeout();\n\t\t};\n\t\n\t\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\t\tAutoplay.prototype.stop = function () {\n\t\t\tif (!this._core.is('rotating')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\twindow.clearTimeout(this._timeout);\n\t\t\tthis._core.leave('rotating');\n\t\t};\n\t\n\t\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\t\tAutoplay.prototype.pause = function () {\n\t\t\tif (!this._core.is('rotating')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tthis._paused = true;\n\t\t};\n\t\n\t\t/**\n\t * Destroys the plugin.\n\t */\n\t\tAutoplay.prototype.destroy = function () {\n\t\t\tvar handler, property;\n\t\n\t\t\tthis.stop();\n\t\n\t\t\tfor (handler in this._handlers) {\n\t\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t\t}\n\t\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t\t}\n\t\t};\n\t\n\t\t$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;\n\t})(window.Zepto || window.jQuery, window, document);\n\t\n\t/**\n\t * Navigation Plugin\n\t * @version 2.1.0\n\t * @author Artus Kolanowski\n\t * @author David Deutsch\n\t * @license The MIT License (MIT)\n\t */\n\t;(function ($, window, document, undefined) {\n\t\t'use strict';\n\t\n\t\t/**\n\t * Creates the navigation plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} carousel - The Owl Carousel.\n\t */\n\t\n\t\tvar Navigation = function Navigation(carousel) {\n\t\t\t/**\n\t * Reference to the core.\n\t * @protected\n\t * @type {Owl}\n\t */\n\t\t\tthis._core = carousel;\n\t\n\t\t\t/**\n\t * Indicates whether the plugin is initialized or not.\n\t * @protected\n\t * @type {Boolean}\n\t */\n\t\t\tthis._initialized = false;\n\t\n\t\t\t/**\n\t * The current paging indexes.\n\t * @protected\n\t * @type {Array}\n\t */\n\t\t\tthis._pages = [];\n\t\n\t\t\t/**\n\t * All DOM elements of the user interface.\n\t * @protected\n\t * @type {Object}\n\t */\n\t\t\tthis._controls = {};\n\t\n\t\t\t/**\n\t * Markup for an indicator.\n\t * @protected\n\t * @type {Array.}\n\t */\n\t\t\tthis._templates = [];\n\t\n\t\t\t/**\n\t * The carousel element.\n\t * @type {jQuery}\n\t */\n\t\t\tthis.$element = this._core.$element;\n\t\n\t\t\t/**\n\t * Overridden methods of the carousel.\n\t * @protected\n\t * @type {Object}\n\t */\n\t\t\tthis._overrides = {\n\t\t\t\tnext: this._core.next,\n\t\t\t\tprev: this._core.prev,\n\t\t\t\tto: this._core.to\n\t\t\t};\n\t\n\t\t\t/**\n\t * All event handlers.\n\t * @protected\n\t * @type {Object}\n\t */\n\t\t\tthis._handlers = {\n\t\t\t\t'prepared.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\t\tthis._templates.push('
' + $(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '
');\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'added.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\t\tthis._templates.splice(e.position, 0, this._templates.pop());\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'remove.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\t\tthis._templates.splice(e.position, 1);\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'changed.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\t\tthis.draw();\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'initialized.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && !this._initialized) {\n\t\t\t\t\t\tthis._core.trigger('initialize', null, 'navigation');\n\t\t\t\t\t\tthis.initialize();\n\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\tthis.draw();\n\t\t\t\t\t\tthis._initialized = true;\n\t\t\t\t\t\tthis._core.trigger('initialized', null, 'navigation');\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'refreshed.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._initialized) {\n\t\t\t\t\t\tthis._core.trigger('refresh', null, 'navigation');\n\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\tthis.draw();\n\t\t\t\t\t\tthis._core.trigger('refreshed', null, 'navigation');\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t};\n\t\n\t\t\t// set default options\n\t\t\tthis._core.options = $.extend({}, Navigation.Defaults, this._core.options);\n\t\n\t\t\t// register event handlers\n\t\t\tthis.$element.on(this._handlers);\n\t\t};\n\t\n\t\t/**\n\t * Default options.\n\t * @public\n\t * @todo Rename `slideBy` to `navBy`\n\t */\n\t\tNavigation.Defaults = {\n\t\t\tnav: false,\n\t\t\tnavText: ['prev', 'next'],\n\t\t\tnavSpeed: false,\n\t\t\tnavElement: 'div',\n\t\t\tnavContainer: false,\n\t\t\tnavContainerClass: 'owl-nav',\n\t\t\tnavClass: ['owl-prev', 'owl-next'],\n\t\t\tslideBy: 1,\n\t\t\tdotClass: 'owl-dot',\n\t\t\tdotsClass: 'owl-dots',\n\t\t\tdots: true,\n\t\t\tdotsEach: false,\n\t\t\tdotsData: false,\n\t\t\tdotsSpeed: false,\n\t\t\tdotsContainer: false\n\t\t};\n\t\n\t\t/**\n\t * Initializes the layout of the plugin and extends the carousel.\n\t * @protected\n\t */\n\t\tNavigation.prototype.initialize = function () {\n\t\t\tvar override,\n\t\t\t settings = this._core.settings;\n\t\n\t\t\t// create DOM structure for relative navigation\n\t\t\tthis._controls.$relative = (settings.navContainer ? $(settings.navContainer) : $('
').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');\n\t\n\t\t\tthis._controls.$previous = $('<' + settings.navElement + '>').addClass(settings.navClass[0]).html(settings.navText[0]).prependTo(this._controls.$relative).on('click', $.proxy(function (e) {\n\t\t\t\tthis.prev(settings.navSpeed);\n\t\t\t}, this));\n\t\t\tthis._controls.$next = $('<' + settings.navElement + '>').addClass(settings.navClass[1]).html(settings.navText[1]).appendTo(this._controls.$relative).on('click', $.proxy(function (e) {\n\t\t\t\tthis.next(settings.navSpeed);\n\t\t\t}, this));\n\t\n\t\t\t// create DOM structure for absolute navigation\n\t\t\tif (!settings.dotsData) {\n\t\t\t\tthis._templates = [$('
').addClass(settings.dotClass).append($('')).prop('outerHTML')];\n\t\t\t}\n\t\n\t\t\tthis._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer) : $('
').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');\n\t\n\t\t\tthis._controls.$absolute.on('click', 'div', $.proxy(function (e) {\n\t\t\t\tvar index = $(e.target).parent().is(this._controls.$absolute) ? $(e.target).index() : $(e.target).parent().index();\n\t\n\t\t\t\te.preventDefault();\n\t\n\t\t\t\tthis.to(index, settings.dotsSpeed);\n\t\t\t}, this));\n\t\n\t\t\t// override public methods of the carousel\n\t\t\tfor (override in this._overrides) {\n\t\t\t\tthis._core[override] = $.proxy(this[override], this);\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Destroys the plugin.\n\t * @protected\n\t */\n\t\tNavigation.prototype.destroy = function () {\n\t\t\tvar handler, control, property, override;\n\t\n\t\t\tfor (handler in this._handlers) {\n\t\t\t\tthis.$element.off(handler, this._handlers[handler]);\n\t\t\t}\n\t\t\tfor (control in this._controls) {\n\t\t\t\tthis._controls[control].remove();\n\t\t\t}\n\t\t\tfor (override in this.overides) {\n\t\t\t\tthis._core[override] = this._overrides[override];\n\t\t\t}\n\t\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Updates the internal state.\n\t * @protected\n\t */\n\t\tNavigation.prototype.update = function () {\n\t\t\tvar i,\n\t\t\t j,\n\t\t\t k,\n\t\t\t lower = this._core.clones().length / 2,\n\t\t\t upper = lower + this._core.items().length,\n\t\t\t maximum = this._core.maximum(true),\n\t\t\t settings = this._core.settings,\n\t\t\t size = settings.center || settings.autoWidth || settings.dotsData ? 1 : settings.dotsEach || settings.items;\n\t\n\t\t\tif (settings.slideBy !== 'page') {\n\t\t\t\tsettings.slideBy = Math.min(settings.slideBy, settings.items);\n\t\t\t}\n\t\n\t\t\tif (settings.dots || settings.slideBy == 'page') {\n\t\t\t\tthis._pages = [];\n\t\n\t\t\t\tfor (i = lower, j = 0, k = 0; i < upper; i++) {\n\t\t\t\t\tif (j >= size || j === 0) {\n\t\t\t\t\t\tthis._pages.push({\n\t\t\t\t\t\t\tstart: Math.min(maximum, i - lower),\n\t\t\t\t\t\t\tend: i - lower + size - 1\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (Math.min(maximum, i - lower) === maximum) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tj = 0, ++k;\n\t\t\t\t\t}\n\t\t\t\t\tj += this._core.mergers(this._core.relative(i));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Draws the user interface.\n\t * @todo The option `dotsData` wont work.\n\t * @protected\n\t */\n\t\tNavigation.prototype.draw = function () {\n\t\t\tvar difference,\n\t\t\t settings = this._core.settings,\n\t\t\t disabled = this._core.items().length <= settings.items,\n\t\t\t index = this._core.relative(this._core.current()),\n\t\t\t loop = settings.loop || settings.rewind;\n\t\n\t\t\tthis._controls.$relative.toggleClass('disabled', !settings.nav || disabled);\n\t\n\t\t\tif (settings.nav) {\n\t\t\t\tthis._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));\n\t\t\t\tthis._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));\n\t\t\t}\n\t\n\t\t\tthis._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);\n\t\n\t\t\tif (settings.dots) {\n\t\t\t\tdifference = this._pages.length - this._controls.$absolute.children().length;\n\t\n\t\t\t\tif (settings.dotsData && difference !== 0) {\n\t\t\t\t\tthis._controls.$absolute.html(this._templates.join(''));\n\t\t\t\t} else if (difference > 0) {\n\t\t\t\t\tthis._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));\n\t\t\t\t} else if (difference < 0) {\n\t\t\t\t\tthis._controls.$absolute.children().slice(difference).remove();\n\t\t\t\t}\n\t\n\t\t\t\tthis._controls.$absolute.find('.active').removeClass('active');\n\t\t\t\tthis._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t * Extends event data.\n\t * @protected\n\t * @param {Event} event - The event object which gets thrown.\n\t */\n\t\tNavigation.prototype.onTrigger = function (event) {\n\t\t\tvar settings = this._core.settings;\n\t\n\t\t\tevent.page = {\n\t\t\t\tindex: $.inArray(this.current(), this._pages),\n\t\t\t\tcount: this._pages.length,\n\t\t\t\tsize: settings && (settings.center || settings.autoWidth || settings.dotsData ? 1 : settings.dotsEach || settings.items)\n\t\t\t};\n\t\t};\n\t\n\t\t/**\n\t * Gets the current page position of the carousel.\n\t * @protected\n\t * @returns {Number}\n\t */\n\t\tNavigation.prototype.current = function () {\n\t\t\tvar current = this._core.relative(this._core.current());\n\t\t\treturn $.grep(this._pages, $.proxy(function (page, index) {\n\t\t\t\treturn page.start <= current && page.end >= current;\n\t\t\t}, this)).pop();\n\t\t};\n\t\n\t\t/**\n\t * Gets the current succesor/predecessor position.\n\t * @protected\n\t * @returns {Number}\n\t */\n\t\tNavigation.prototype.getPosition = function (successor) {\n\t\t\tvar position,\n\t\t\t length,\n\t\t\t settings = this._core.settings;\n\t\n\t\t\tif (settings.slideBy == 'page') {\n\t\t\t\tposition = $.inArray(this.current(), this._pages);\n\t\t\t\tlength = this._pages.length;\n\t\t\t\tsuccessor ? ++position : --position;\n\t\t\t\tposition = this._pages[(position % length + length) % length].start;\n\t\t\t} else {\n\t\t\t\tposition = this._core.relative(this._core.current());\n\t\t\t\tlength = this._core.items().length;\n\t\t\t\tsuccessor ? position += settings.slideBy : position -= settings.slideBy;\n\t\t\t}\n\t\n\t\t\treturn position;\n\t\t};\n\t\n\t\t/**\n\t * Slides to the next item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\t\tNavigation.prototype.next = function (speed) {\n\t\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);\n\t\t};\n\t\n\t\t/**\n\t * Slides to the previous item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\t\tNavigation.prototype.prev = function (speed) {\n\t\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);\n\t\t};\n\t\n\t\t/**\n\t * Slides to the specified item or page.\n\t * @public\n\t * @param {Number} position - The position of the item or page.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.\n\t */\n\t\tNavigation.prototype.to = function (position, speed, standard) {\n\t\t\tvar length;\n\t\n\t\t\tif (!standard && this._pages.length) {\n\t\t\t\tlength = this._pages.length;\n\t\t\t\t$.proxy(this._overrides.to, this._core)(this._pages[(position % length + length) % length].start, speed);\n\t\t\t} else {\n\t\t\t\t$.proxy(this._overrides.to, this._core)(position, speed);\n\t\t\t}\n\t\t};\n\t\n\t\t$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;\n\t})(window.Zepto || window.jQuery, window, document);\n\t\n\t/**\n\t * Hash Plugin\n\t * @version 2.1.0\n\t * @author Artus Kolanowski\n\t * @author David Deutsch\n\t * @license The MIT License (MIT)\n\t */\n\t;(function ($, window, document, undefined) {\n\t\t'use strict';\n\t\n\t\t/**\n\t * Creates the hash plugin.\n\t * @class The Hash Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\t\n\t\tvar Hash = function Hash(carousel) {\n\t\t\t/**\n\t * Reference to the core.\n\t * @protected\n\t * @type {Owl}\n\t */\n\t\t\tthis._core = carousel;\n\t\n\t\t\t/**\n\t * Hash index for the items.\n\t * @protected\n\t * @type {Object}\n\t */\n\t\t\tthis._hashes = {};\n\t\n\t\t\t/**\n\t * The carousel element.\n\t * @type {jQuery}\n\t */\n\t\t\tthis.$element = this._core.$element;\n\t\n\t\t\t/**\n\t * All event handlers.\n\t * @protected\n\t * @type {Object}\n\t */\n\t\t\tthis._handlers = {\n\t\t\t\t'initialized.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && this._core.settings.startPosition === 'URLHash') {\n\t\t\t\t\t\t$(window).trigger('hashchange.owl.navigation');\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'prepared.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace) {\n\t\t\t\t\t\tvar hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');\n\t\n\t\t\t\t\t\tif (!hash) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tthis._hashes[hash] = e.content;\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\t'changed.owl.carousel': $.proxy(function (e) {\n\t\t\t\t\tif (e.namespace && e.property.name === 'position') {\n\t\t\t\t\t\tvar current = this._core.items(this._core.relative(this._core.current())),\n\t\t\t\t\t\t hash = $.map(this._hashes, function (item, hash) {\n\t\t\t\t\t\t\treturn item === current ? hash : null;\n\t\t\t\t\t\t}).join();\n\t\n\t\t\t\t\t\tif (!hash || window.location.hash.slice(1) === hash) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\twindow.location.hash = hash;\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t};\n\t\n\t\t\t// set default options\n\t\t\tthis._core.options = $.extend({}, Hash.Defaults, this._core.options);\n\t\n\t\t\t// register the event handlers\n\t\t\tthis.$element.on(this._handlers);\n\t\n\t\t\t// register event listener for hash navigation\n\t\t\t$(window).on('hashchange.owl.navigation', $.proxy(function (e) {\n\t\t\t\tvar hash = window.location.hash.substring(1),\n\t\t\t\t items = this._core.$stage.children(),\n\t\t\t\t position = this._hashes[hash] && items.index(this._hashes[hash]);\n\t\n\t\t\t\tif (position === undefined || position === this._core.current()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tthis._core.to(this._core.relative(position), false, true);\n\t\t\t}, this));\n\t\t};\n\t\n\t\t/**\n\t * Default options.\n\t * @public\n\t */\n\t\tHash.Defaults = {\n\t\t\tURLhashListener: false\n\t\t};\n\t\n\t\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\t\tHash.prototype.destroy = function () {\n\t\t\tvar handler, property;\n\t\n\t\t\t$(window).off('hashchange.owl.navigation');\n\t\n\t\t\tfor (handler in this._handlers) {\n\t\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t\t}\n\t\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t\t}\n\t\t};\n\t\n\t\t$.fn.owlCarousel.Constructor.Plugins.Hash = Hash;\n\t})(window.Zepto || window.jQuery, window, document);\n\t\n\t/**\n\t * Support Plugin\n\t *\n\t * @version 2.1.0\n\t * @author Vivid Planet Software GmbH\n\t * @author Artus Kolanowski\n\t * @author David Deutsch\n\t * @license The MIT License (MIT)\n\t */\n\t;(function ($, window, document, undefined) {\n\t\n\t\tvar style = $('').get(0).style,\n\t\t prefixes = 'Webkit Moz O ms'.split(' '),\n\t\t events = {\n\t\t\ttransition: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitTransition: 'webkitTransitionEnd',\n\t\t\t\t\tMozTransition: 'transitionend',\n\t\t\t\t\tOTransition: 'oTransitionEnd',\n\t\t\t\t\ttransition: 'transitionend'\n\t\t\t\t}\n\t\t\t},\n\t\t\tanimation: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitAnimation: 'webkitAnimationEnd',\n\t\t\t\t\tMozAnimation: 'animationend',\n\t\t\t\t\tOAnimation: 'oAnimationEnd',\n\t\t\t\t\tanimation: 'animationend'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t tests = {\n\t\t\tcsstransforms: function csstransforms() {\n\t\t\t\treturn !!test('transform');\n\t\t\t},\n\t\t\tcsstransforms3d: function csstransforms3d() {\n\t\t\t\treturn !!test('perspective');\n\t\t\t},\n\t\t\tcsstransitions: function csstransitions() {\n\t\t\t\treturn !!test('transition');\n\t\t\t},\n\t\t\tcssanimations: function cssanimations() {\n\t\t\t\treturn !!test('animation');\n\t\t\t}\n\t\t};\n\t\n\t\tfunction test(property, prefixed) {\n\t\t\tvar result = false,\n\t\t\t upper = property.charAt(0).toUpperCase() + property.slice(1);\n\t\n\t\t\t$.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function (i, property) {\n\t\t\t\tif (style[property] !== undefined) {\n\t\t\t\t\tresult = prefixed ? property : true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\n\t\t\treturn result;\n\t\t}\n\t\n\t\tfunction prefixed(property) {\n\t\t\treturn test(property, true);\n\t\t}\n\t\n\t\tif (tests.csstransitions()) {\n\t\t\t/* jshint -W053 */\n\t\t\t$.support.transition = new String(prefixed('transition'));\n\t\t\t$.support.transition.end = events.transition.end[$.support.transition];\n\t\t}\n\t\n\t\tif (tests.cssanimations()) {\n\t\t\t/* jshint -W053 */\n\t\t\t$.support.animation = new String(prefixed('animation'));\n\t\t\t$.support.animation.end = events.animation.end[$.support.animation];\n\t\t}\n\t\n\t\tif (tests.csstransforms()) {\n\t\t\t/* jshint -W053 */\n\t\t\t$.support.transform = new String(prefixed('transform'));\n\t\t\t$.support.transform3d = tests.csstransforms3d();\n\t\t}\n\t})(window.Zepto || window.jQuery, window, document);\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Owl Carousel v2 Accessibility Plugin\n\t * Version 0.2.1\n\t *\n\t * https://github.com/rtrvrtg/owlcarousel2-a11ylayer\n\t *\n\t * The MIT License (MIT)\n\t *\n\t * Copyright (c) 2015 Geoffrey Roberts\n\t *\n\t * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t * of this software and associated documentation files (the \"Software\"), to deal\n\t * in the Software without restriction, including without limitation the rights\n\t * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t * copies of the Software, and to permit persons to whom the Software is\n\t * furnished to do so, subject to the following conditions:\n\t *\n\t * The above copyright notice and this permission notice shall be included in\n\t * all copies or substantial portions of the Software.\n\t *\n\t * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t * THE SOFTWARE.\n\t *\n\t *\n\t * © Geoffrey Roberts 2016\n\t */\n\t\n\t;\n\t(function ($, window) {\n\t\n\t var Owl2A11y = function Owl2A11y(carousel) {\n\t this._core = carousel;\n\t this._initialized = false;\n\t\n\t this._core._options = $.extend(Owl2A11y.defaults, this._core.options);\n\t\n\t this.$element = this._core.$element;\n\t\n\t var setCurrent = $.proxy(function (e) {\n\t this.setCurrent(e);\n\t }, this);\n\t\n\t this._handlers = {\n\t 'initialized.owl.carousel': $.proxy(function (e) {\n\t this.setupRoot();\n\t if (e.namespace && !this._initialized) {\n\t this.setupFocus();\n\t this.setupKeyboard();\n\t }\n\t this.setCurrent(e);\n\t }, this),\n\t 'changed.owl.carousel': setCurrent,\n\t 'translated.owl.carousel': setCurrent,\n\t 'refreshed.owl.carousel': setCurrent,\n\t 'resized.owl.carousel': setCurrent\n\t };\n\t this.$element.on(this._handlers);\n\t };\n\t\n\t /* PREFERENCES */\n\t\n\t /**\n\t * Contains default parameters, if there were any.\n\t */\n\t Owl2A11y.defaults = {};\n\t\n\t /* EVENT HANDLERS */\n\t\n\t /**\n\t * Adds support for things that don't map nicely to the root object\n\t * such as event handlers.\n\t */\n\t Owl2A11y.eventHandlers = {};\n\t\n\t /**\n\t * Get a callback for keyup events within this carousel.\n\t *\n\t * @return callback\n\t * An event callback that takes an Event as an argument.\n\t */\n\t Owl2A11y.prototype.getDocumentKeyUp = function () {\n\t var self = this;\n\t return function (e) {\n\t var eventTarg = $(e.target),\n\t targ = self.focused(eventTarg),\n\t action = null;\n\t\n\t if (!!targ) {\n\t if (e.keyCode == 37 || e.keyCode == 38) {\n\t action = 'prev.owl.carousel';\n\t } else if (e.keyCode == 39 || e.keyCode == 40) {\n\t action = 'next.owl.carousel';\n\t } else if (e.keyCode == 13) {\n\t if (eventTarg.hasClass('owl-prev')) action = 'prev.owl.carousel';else if (eventTarg.hasClass('owl-next')) action = 'next.owl.carousel';else if (eventTarg.hasClass('owl-dot')) action = 'click';\n\t }\n\t\n\t if (!!action) targ.trigger(action);\n\t }\n\t };\n\t };\n\t\n\t /* SETUP AND TEAR DOWN */\n\t\n\t /**\n\t * Assign attributes to the root element.\n\t */\n\t Owl2A11y.prototype.setupRoot = function () {\n\t this.$element.attr({\n\t // @FIXME\n\t // role: 'listbox',\n\t tabindex: '0'\n\t });\n\t };\n\t\n\t /**\n\t * Setup keyboard events for this carousel.\n\t */\n\t Owl2A11y.prototype.setupKeyboard = function () {\n\t // Only needed to initialise once for the entire document\n\t if (!this.$element.attr('data-owl-access-keyup')) {\n\t this.$element.bind('keyup', this.getDocumentKeyUp()).attr('data-owl-access-keyup', '1');\n\t }\n\t this.$element.attr('data-owl-carousel-focusable', '1');\n\t };\n\t\n\t /**\n\t * Setup focusing behaviour for the carousel.\n\t */\n\t Owl2A11y.prototype.setupFocus = function () {\n\t // Only needed to initialise once for the entire document\n\t this.$element.bind('focusin', function () {\n\t $(this).attr({\n\t 'data-owl-carousel-focused': '1',\n\t 'aria-live': 'polite'\n\t }).trigger('stop.owl.autoplay');\n\t }).bind('focusout', function () {\n\t $(this).attr({\n\t 'data-owl-carousel-focused': '0',\n\t 'aria-live': 'off'\n\t }).trigger('play.owl.autoplay');\n\t });\n\t\n\t // Add tabindex to allow navigation to be focused.\n\t if (!!this._core._plugins.navigation) {\n\t var navPlugin = this._core._plugins.navigation,\n\t toFocus = [];\n\t if (!!navPlugin._controls.$previous) {\n\t toFocus.push(navPlugin._controls.$previous);\n\t }\n\t if (!!navPlugin._controls.$next) {\n\t toFocus.push(navPlugin._controls.$next);\n\t }\n\t if (!!navPlugin._controls.$indicators) {\n\t toFocus.push(navPlugin._controls.$indicators.children());\n\t }\n\t $.each(toFocus, function () {\n\t this.attr('tabindex', '0');\n\t });\n\t }\n\t };\n\t\n\t /**\n\t * Assign attributes to the root element.\n\t */\n\t Owl2A11y.prototype.destroy = function () {\n\t this.$element.unbind('keyup', this.eventHandlers.documentKeyUp).removeAttr('data-owl-access-keyup data-owl-carousel-focusable').unbind('focusin focusout');\n\t };\n\t\n\t /* HELPER FUNCTIONS */\n\t\n\t /**\n\t * Identifies all focusable elements within a given element.\n\t *\n\t * @param DOMElement elem\n\t * A DOM element.\n\t *\n\t * @return jQuery\n\t * A jQuery object that may refer to zero or more focusable elements.\n\t */\n\t Owl2A11y.prototype.focusableElems = function (elem) {\n\t return $(elem).find('a, input, select, button, *[tabindex]');\n\t };\n\t\n\t /**\n\t * Identifies all focusable elements within a given element.\n\t *\n\t * @param jQeury elems\n\t * A jQuery object that may refer to zero or more focusable elements.\n\t * @param boolean enable\n\t * Whether focus is to be enabled on these elements or not.\n\t */\n\t Owl2A11y.prototype.adjustFocus = function (elems, enable) {\n\t elems.each(function () {\n\t var item = $(this);\n\t var newTabIndex = '0',\n\t storeTabIndex = '0',\n\t currentTabIndex = item.attr('tabindex'),\n\t storedTabIndex = item.attr('data-owl-temp-tabindex');\n\t\n\t if (enable) {\n\t newTabIndex = typeof storedTabIndex != 'undefined' && storedTabIndex != '-1' ? item.attr('data-owl-temp-tabindex') : '0';\n\t storedTabIndex = newTabIndex;\n\t } else {\n\t newTabIndex = '-1';\n\t storedTabIndex = typeof currentTabIndex != 'undefined' || currentTabIndex != '-1' ? currentTabIndex : '0';\n\t }\n\t\n\t item.attr({\n\t tabindex: newTabIndex,\n\t 'data-owl-temp-tabindex': storeTabIndex\n\t });\n\t });\n\t };\n\t\n\t /**\n\t * Get the root element if we are focused within it.\n\t *\n\t * @param DOMElement targ\n\t * An element that might be within this carousel.\n\t *\n\t * @return mixed\n\t * Either the jQuery element containing the root element, or NULL.\n\t */\n\t Owl2A11y.prototype.focused = function (targ) {\n\t var targ = $(targ);\n\t if (targ.attr('data-owl-carousel-focused') == 1) {\n\t return targ;\n\t }\n\t var closest = targ.closest('[data-owl-carousel-focused=\"1\"]');\n\t if (closest.length > 0) return closest;\n\t return null;\n\t };\n\t\n\t /* UPDATE FUNCTIONS */\n\t\n\t /**\n\t * Identify active elements, set WAI-ARIA sttributes accordingly,\n\t * scroll to show element if we need to, and set up focusing.\n\t *\n\t * @param Event e\n\t * The triggering event.\n\t */\n\t Owl2A11y.prototype.setCurrent = function () {\n\t var targ = this.focused($(':focus')),\n\t element = this._core.$element,\n\t stage = this._core.$stage,\n\t focusableElems = this.focusableElems,\n\t adjustFocus = this.adjustFocus;\n\t\n\t if (!!stage) {\n\t var offs = stage.offset();\n\t if (!!targ) {\n\t window.scrollTo(offs.left, offs.top - parseInt($('body').css('padding-top'), 10));\n\t }\n\t\n\t this._core.$stage.children().each(function () {\n\t var item = $(this);\n\t var focusable = focusableElems(this);\n\t\n\t // Use the active class to determine if we can see it or not.\n\t // Pretty lazy, but the Owl API doesn't make it easy to tell\n\t // from indices alone.\n\t if (item.hasClass('active')) {\n\t item.attr('aria-hidden', 'false');\n\t adjustFocus(focusable, true);\n\t } else {\n\t item.attr('aria-hidden', 'true');\n\t adjustFocus(focusable, false);\n\t }\n\t });\n\t\n\t if (!!targ) {\n\t // Focus on the root element after we're done moving,\n\t // but only if we're not using the controls.\n\t setTimeout(function () {\n\t var newFocus = element;\n\t if ($(':focus').closest('.owl-controls').length) {\n\t newFocus = $(':focus');\n\t }\n\t newFocus.focus();\n\t }, 250);\n\t }\n\t }\n\t };\n\t\n\t $.fn.owlCarousel.Constructor.Plugins['Owl2A11y'] = Owl2A11y;\n\t})(window.Zepto || window.jQuery, window);\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tvar _jquery3 = __webpack_require__(17);\n\t\n\tvar _jquery4 = _interopRequireDefault(_jquery3);\n\t\n\tvar _cookiebar = __webpack_require__(18);\n\t\n\tvar _cookiebar2 = _interopRequireDefault(_cookiebar);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t/* eslint-enable no-unused-vars */\n\t\n\t/* eslint-disable no-unused-vars */\n\t\n\tvar opts = {\n\t 'acceptButton': '.js-cookieBarAccept',\n\t 'secure': false,\n\t 'path': '/',\n\t 'domain': ''\n\t};\n\t\n\t(0, _jquery2['default'])(document).ready(function () {\n\t (0, _jquery2['default'])('.js-CookieBar').cookieBar(opts);\n\t});\n\t\n\texports['default'] = {\n\t opts: opts\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/*!\n\t * jQuery Cookie Plugin v1.4.1\n\t * https://github.com/carhartl/jquery-cookie\n\t *\n\t * Copyright 2013 Klaus Hartl\n\t * Released under the MIT license\n\t */\n\t(function (factory) {\n\t\tif (true) {\n\t\t\t// AMD\n\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(4)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\t} else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {\n\t\t\t// CommonJS\n\t\t\tfactory(require('jquery'));\n\t\t} else {\n\t\t\t// Browser globals\n\t\t\tfactory(jQuery);\n\t\t}\n\t})(function ($) {\n\t\n\t\tvar pluses = /\\+/g;\n\t\n\t\tfunction encode(s) {\n\t\t\treturn config.raw ? s : encodeURIComponent(s);\n\t\t}\n\t\n\t\tfunction decode(s) {\n\t\t\treturn config.raw ? s : decodeURIComponent(s);\n\t\t}\n\t\n\t\tfunction stringifyCookieValue(value) {\n\t\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t\t}\n\t\n\t\tfunction parseCookieValue(s) {\n\t\t\tif (s.indexOf('\"') === 0) {\n\t\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t\t}\n\t\n\t\t\ttry {\n\t\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t\t} catch (e) {}\n\t\t}\n\t\n\t\tfunction read(s, converter) {\n\t\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t\t}\n\t\n\t\tvar config = $.cookie = function (key, value, options) {\n\t\n\t\t\t// Write\n\t\n\t\t\tif (value !== undefined && !$.isFunction(value)) {\n\t\t\t\toptions = $.extend({}, config.defaults, options);\n\t\n\t\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\t\tvar days = options.expires,\n\t\t\t\t\t t = options.expires = new Date();\n\t\t\t\t\tt.setTime(+t + days * 864e+5);\n\t\t\t\t}\n\t\n\t\t\t\treturn document.cookie = [encode(key), '=', stringifyCookieValue(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : ''].join('');\n\t\t\t}\n\t\n\t\t\t// Read\n\t\n\t\t\tvar result = key ? undefined : {};\n\t\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling $.cookie().\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\n\t\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar name = decode(parts.shift());\n\t\t\t\tvar cookie = parts.join('=');\n\t\n\t\t\t\tif (key && key === name) {\n\t\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\t\tresult = read(cookie, value);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\n\t\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn result;\n\t\t};\n\t\n\t\tconfig.defaults = {};\n\t\n\t\t$.removeCookie = function (key, options) {\n\t\t\tif ($.cookie(key) === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// Must not alter options, thus extending a fresh object...\n\t\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\t\treturn !$.cookie(key);\n\t\t};\n\t});\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t_jquery2['default'].fn.cookieBar = function (options) {\n\t var settings = _jquery2['default'].extend({\n\t 'acceptButton': '.js-cookieBarAccept',\n\t 'secure': false,\n\t 'path': '/',\n\t 'domain': '',\n\t 'threshold': 500\n\t }, options);\n\t\n\t var _hide = function _hide($cookiebar) {\n\t $cookiebar.attr('aria-hidden', 'true').attr('aria-live', 'off').hide();\n\t };\n\t\n\t var _show = function _show($cookiebar) {\n\t $cookiebar.attr('aria-hidden', 'false').attr('aria-live', 'polite').show();\n\t };\n\t\n\t var _accept = function _accept($cookiebar) {\n\t _jquery2['default'].cookie('cookiebar', 'hide', {\n\t path: settings.path,\n\t secure: settings.secure,\n\t domain: settings.domain,\n\t expires: 30\n\t });\n\t (0, _jquery2['default'])(document).trigger('accept.cookiebar', [$cookiebar]);\n\t };\n\t\n\t (0, _jquery2['default'])(document).on('accept.cookiebar', function (e, $cookiebar) {\n\t _hide($cookiebar);\n\t });\n\t\n\t _jquery2['default'].cookieBar = _jquery2['default'].cookieBar || {};\n\t\n\t _jquery2['default'].cookieBar.isAccepted = function () {\n\t return _jquery2['default'].cookie('cookiebar') === 'hide';\n\t };\n\t\n\t return this.each(function () {\n\t var $cookiebar = (0, _jquery2['default'])(this);\n\t\n\t if (!_jquery2['default'].cookieBar.isAccepted()) {\n\t if (settings.threshold > 0) {\n\t (0, _jquery2['default'])(window).on('scroll.cookiebar', function () {\n\t if ((0, _jquery2['default'])(window).scrollTop() > settings.threshold) {\n\t (0, _jquery2['default'])(window).unbind('scroll.cookiebar');\n\t _accept($cookiebar);\n\t }\n\t });\n\t }\n\t _show($cookiebar);\n\t }\n\t\n\t $cookiebar.find(settings.acceptButton).click(function () {\n\t _accept($cookiebar);\n\t return false;\n\t });\n\t });\n\t};\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _dialogmodal = __webpack_require__(20);\n\t\n\tvar _dialogmodal2 = _interopRequireDefault(_dialogmodal);\n\t\n\tvar _dialogmodal3 = __webpack_require__(21);\n\t\n\tvar _dialogmodal4 = _interopRequireDefault(_dialogmodal3);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t/* eslint-enable */\n\t\n\tvar dialog = (0, _dialogmodal2['default'])({\n\t // String - Outer container selector, hook for JS init() method\n\t selector: '.js-fr-dialogmodal',\n\t\n\t // String - Modal selector, the element that represents the modal\n\t modalSelector: '.js-fr-dialogmodal-modal',\n\t\n\t // String - Selector for the open button\n\t openSelector: '.js-fr-dialogmodal-open',\n\t\n\t // String - Selector for the close button\n\t closeSelector: '.js-fr-dialogmodal-close',\n\t\n\t // Boolean - Switches the dialog role to alertdialog, only use this when representing an alert, error or warning\n\t isAlert: false,\n\t\n\t // String - Class name that will be added to the selector when the component has been initialised\n\t readyClass: 'fr-dialogmodal--is-ready',\n\t\n\t // String - Class name that will be added to the selector when the component is active\n\t activeClass: 'fr-dialogmodal--is-active'\n\t});\n\t\n\t/* eslint-disable no-unused-vars */\n\t\n\texports['default'] = { dialog: dialog, Frdialogmodal: _dialogmodal2['default'] };\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\r\n\t * @param {object} options Object containing configuration overrides\r\n\t */\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\tvar Frdialogmodal = function Frdialogmodal() {\n\t\tvar _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n\t\t _ref$selector = _ref.selector,\n\t\t selector = _ref$selector === undefined ? '.js-fr-dialogmodal' : _ref$selector,\n\t\t _ref$modalSelector = _ref.modalSelector,\n\t\t modalSelector = _ref$modalSelector === undefined ? '.js-fr-dialogmodal-modal' : _ref$modalSelector,\n\t\t _ref$openSelector = _ref.openSelector,\n\t\t openSelector = _ref$openSelector === undefined ? '.js-fr-dialogmodal-open' : _ref$openSelector,\n\t\t _ref$closeSelector = _ref.closeSelector,\n\t\t closeSelector = _ref$closeSelector === undefined ? '.js-fr-dialogmodal-close' : _ref$closeSelector,\n\t\t _ref$isAlert = _ref.isAlert,\n\t\t isAlert = _ref$isAlert === undefined ? false : _ref$isAlert,\n\t\t _ref$readyClass = _ref.readyClass,\n\t\t readyClass = _ref$readyClass === undefined ? 'fr-dialogmodal--is-ready' : _ref$readyClass,\n\t\t _ref$activeClass = _ref.activeClass,\n\t\t activeClass = _ref$activeClass === undefined ? 'fr-dialogmodal--is-active' : _ref$activeClass;\n\t\n\t\t// CONSTANTS\n\t\tvar doc = document;\n\t\tvar docEl = doc.documentElement;\n\t\tvar _q = function _q(el) {\n\t\t\tvar ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : doc;\n\t\t\treturn [].slice.call(ctx.querySelectorAll(el));\n\t\t};\n\t\n\t\t// SUPPORTS\n\t\tif (!('querySelector' in doc) || !('addEventListener' in window) || !docEl.classList) return;\n\t\n\t\t// SETUP\n\t\t// set dialog modal element NodeLists\n\t\tvar containers = _q(selector);\n\t\tvar focusableSelectors = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n\t\t//\tTEMP\n\t\tvar currButtonOpen = null;\n\t\tvar currModal = null;\n\t\t//\telements within modal\n\t\tvar focusableElements = null;\n\t\n\t\t//\tUTILS\n\t\tfunction _defer(fn) {\n\t\t\t//\twrapped in setTimeout to delay binding until previous rendering has completed\n\t\t\tif (typeof fn === 'function') setTimeout(fn, 0);\n\t\t}\n\t\n\t\t//\tA11Y\n\t\tfunction _addA11y(container) {\n\t\t\tvar modal = _q(modalSelector, container)[0];\n\t\t\tvar role = isAlert ? 'alertdialog' : 'dialog';\n\t\t\t//\tadd relevant roles and properties\n\t\t\tcontainer.setAttribute('aria-hidden', true);\n\t\t\tmodal.setAttribute('role', role);\n\t\t}\n\t\tfunction _removeA11y(container) {\n\t\t\tvar modal = _q(modalSelector, container)[0];\n\t\t\t//\tadd relevant roles and properties\n\t\t\tcontainer.removeAttribute('aria-hidden');\n\t\t\tmodal.removeAttribute('role');\n\t\t}\n\t\n\t\t//\tACTIONS\n\t\tfunction _showModal(container, modal) {\n\t\t\t//\tshow container and focus the modal\n\t\t\tcontainer.setAttribute('aria-hidden', false);\n\t\t\tmodal.setAttribute('tabindex', -1);\n\t\t\t//\tset first/last focusable elements\n\t\t\tfocusableElements = _q(focusableSelectors.join(), modal);\n\t\t\t//\tfocus first element if exists, otherwise focus modal element\n\t\t\tif (focusableElements.length) focusableElements[0].focus();else modal.focus();\n\t\t\t//\tupdate bound events\n\t\t\t_defer(_bindDocKey);\n\t\t\t_defer(_bindClosePointer);\n\t\t\t//\tif contents are not interactive, bind click off\n\t\t\tif (!isAlert) _defer(_bindContainerPointer);\n\t\t\t//\treset scroll\n\t\t\tmodal.scrollTop = 0;\n\t\t\t//\tupdate style hook\n\t\t\tcontainer.classList.add(activeClass);\n\t\t}\n\t\tfunction _hideModal(modal) {\n\t\t\tvar returnfocus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\t\n\t\t\t//\tget container element\n\t\t\tvar container = modal.parentElement;\n\t\t\t//\tshow container and focus the modal\n\t\t\tcontainer.setAttribute('aria-hidden', true);\n\t\t\tmodal.removeAttribute('tabindex');\n\t\t\t//\tupdate bound events\n\t\t\t_unbindDocKey();\n\t\t\t_unbindClosePointer();\n\t\t\t//\tif contents are not interactive, unbind click off\n\t\t\tif (!isAlert) _unbindContainerPointer();\n\t\t\t//\tupdate style hook\n\t\t\tcontainer.classList.remove(activeClass);\n\t\t\t//\treturn focus to button that opened the modal and reset the reference\n\t\t\tif (returnfocus) {\n\t\t\t\tcurrButtonOpen.focus();\n\t\t\t\tcurrButtonOpen = null;\n\t\t\t}\n\t\t}\n\t\tfunction _handleTabEvent(e) {\n\t\t\t//\tget the index of the current active element within the modal\n\t\t\tvar focusedIndex = focusableElements.indexOf(doc.activeElement);\n\t\t\t//\thandle TAB event if need to skip\n\t\t\t//\tif first element is focused and shiftkey is in use\n\t\t\tif (e.shiftKey && (focusedIndex === 0 || focusedIndex === -1)) {\n\t\t\t\t//\tfocus last item within modal\n\t\t\t\tfocusableElements[focusableElements.length - 1].focus();\n\t\t\t\te.preventDefault();\n\t\t\t\t//\tif last element is focused and shiftkey is not in use\n\t\t\t} else if (!e.shiftKey && focusedIndex === focusableElements.length - 1) {\n\t\t\t\t//\tfocus first item within modal\n\t\t\t\tfocusableElements[0].focus();\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t\n\t\t//\tEVENTS\n\t\tfunction _eventOpenPointer(e) {\n\t\t\t//\tget related elements\n\t\t\tvar button = e.currentTarget;\n\t\t\tvar container = doc.getElementById(button.getAttribute('aria-controls'));\n\t\t\tvar modal = _q(modalSelector, container)[0];\n\t\t\t//\tsave element references\n\t\t\tcurrButtonOpen = button;\n\t\t\tcurrModal = modal;\n\t\t\t//\tshow modal\n\t\t\t_showModal(container, modal);\n\t\t}\n\t\tfunction _eventClosePointer() {\n\t\t\t_hideModal(currModal);\n\t\t}\n\t\tfunction _eventContainerPointer(e) {\n\t\t\tvar container = currModal.parentElement;\n\t\t\t//\tcheck if target is modal container (but not modal)\n\t\t\tif (e.target === container) _hideModal(currModal);\n\t\t}\n\t\tfunction _eventDocKey(e) {\n\t\t\t//\tESC key\n\t\t\tif (e.keyCode === 27) _hideModal(currModal);\n\t\t\t//\tTAB key\n\t\t\tif (e.keyCode === 9) _handleTabEvent(e);\n\t\t}\n\t\n\t\t//\tBIND EVENTS\n\t\tfunction _bindOpenPointers(container) {\n\t\t\tvar id = container.getAttribute('id');\n\t\t\tvar buttons = _q(openSelector + '[aria-controls=\"' + id + '\"]');\n\t\t\tbuttons.forEach(function (button) {\n\t\t\t\treturn button.addEventListener('click', _eventOpenPointer);\n\t\t\t});\n\t\t}\n\t\tfunction _bindClosePointer() {\n\t\t\tvar modal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : currModal;\n\t\n\t\t\tvar button = _q(closeSelector, modal)[0];\n\t\t\tbutton.addEventListener('click', _eventClosePointer);\n\t\t}\n\t\tfunction _bindContainerPointer() {\n\t\t\tvar modal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : currModal;\n\t\n\t\t\tvar container = modal.parentElement;\n\t\t\tcontainer.addEventListener('click', _eventContainerPointer);\n\t\t}\n\t\tfunction _bindDocKey() {\n\t\t\tdoc.addEventListener('keydown', _eventDocKey);\n\t\t}\n\t\n\t\t//\tUNBIND EVENTS\n\t\tfunction _unbindOpenPointers(container) {\n\t\t\tvar id = container.getAttribute('id');\n\t\t\tvar buttons = doc.querySelectorAll(openSelector + '[aria-controls=\"' + id + '\"]');\n\t\t\tbuttons.forEach(function (button) {\n\t\t\t\treturn button.removeEventListener('click', _eventOpenPointer);\n\t\t\t});\n\t\t}\n\t\tfunction _unbindClosePointer() {\n\t\t\tvar modal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : currModal;\n\t\n\t\t\tvar button = _q(closeSelector, modal)[0];\n\t\t\tbutton.removeEventListener('click', _eventClosePointer);\n\t\t}\n\t\tfunction _unbindContainerPointer() {\n\t\t\tvar container = currModal.parentElement;\n\t\t\tcontainer.removeEventListener('click', _eventContainerPointer);\n\t\t}\n\t\tfunction _unbindDocKey() {\n\t\t\tdoc.removeEventListener('keydown', _eventDocKey);\n\t\t}\n\t\n\t\t//\tDESTROY\n\t\tfunction destroy() {\n\t\t\t//\tloop through available modals\n\t\t\tcontainers.forEach(function (container) {\n\t\t\t\tvar modal = _q(modalSelector, container)[0];\n\t\t\t\tmodal.removeAttribute('tabindex');\n\t\t\t\t_removeA11y(container);\n\t\t\t\t_unbindOpenPointers(container);\n\t\t\t\t_unbindClosePointer(modal);\n\t\t\t\t_unbindContainerPointer(modal);\n\t\t\t\t//\tremove ready, active style hooks\n\t\t\t\tcontainer.classList.remove(readyClass, activeClass);\n\t\t\t});\n\t\t\t_unbindDocKey();\n\t\t}\n\t\n\t\t//\tINIT\n\t\tfunction init() {\n\t\t\t//\tcancel if no modals found\n\t\t\tif (!containers.length) return;\n\t\t\t//\tloop through available modals\n\t\t\tcontainers.forEach(function (container) {\n\t\t\t\t_addA11y(container);\n\t\t\t\t_bindOpenPointers(container);\n\t\t\t\t// set ready style hook\n\t\t\t\tcontainer.classList.add(readyClass);\n\t\t\t});\n\t\t}\n\t\tinit();\n\t\n\t\t// REVEAL API\n\t\treturn {\n\t\t\tinit: init,\n\t\t\tdestroy: destroy\n\t\t};\n\t};\n\t\n\t// module exports\n\texports['default'] = Frdialogmodal;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 22 */,\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tvar _dropdown = __webpack_require__(24);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t// auto-init on enhance (which is called on domready)\n\t\n\t_jquery2['default'].fn['menu'] = function () {\n\t return this.each(function () {\n\t new _dropdown.Menu(this).init();\n\t });\n\t};\n\t\n\t(0, _jquery2['default'])(document).bind('enhance', function (e) {\n\t (0, _jquery2['default'])('[data-menu]', e.target)['menu']();\n\t});\n\t\n\t_jquery2['default'].fn['menu-trigger'] = function () {\n\t return this.each(function () {\n\t new _dropdown.Menutrigger(this).init();\n\t });\n\t};\n\t\n\t(0, _jquery2['default'])(document).bind('enhance', function (e) {\n\t (0, _jquery2['default'])('[data-menu-trigger]', e.target)['menu-trigger']();\n\t});\n\t\n\texports['default'] = {\n\t Menu: _dropdown.Menu,\n\t Menutrigger: _dropdown.Menutrigger\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\t/*\n\t * Fork of\n\t *\n\t * ! Menu - v0.1.3 - 2016-02-17\n\t * https://github.com/filamentgroup/menu\n\t * Copyright (c) 2016 Scott Jehl Licensed MIT\n\t */\n\tvar at = {\n\t ariaHidden: 'aria-hidden'\n\t};\n\tvar selectClass = 'is-selected';\n\tvar focusables = 'a,input,[tabindex]';\n\t\n\tvar Menu = function () {\n\t function Menu(element) {\n\t _classCallCheck(this, Menu);\n\t\n\t if (!element) {\n\t throw new Error('Element required to initialize object');\n\t }\n\t this.element = element;\n\t this.$element = (0, _jquery2['default'])(element);\n\t this.opened = true;\n\t this.componentName = 'Menu';\n\t\n\t this.keycodes = {\n\t 38: function _(e) {\n\t this.moveSelected('prev');\n\t e.preventDefault();\n\t },\n\t\n\t 40: function _(e) {\n\t this.moveSelected('next');\n\t e.preventDefault();\n\t },\n\t\n\t // add right / left key navigation\n\t 37: function _(e) {\n\t this.moveSelected('prev');\n\t e.preventDefault();\n\t },\n\t\n\t 39: function _(e) {\n\t this.moveSelected('next');\n\t e.preventDefault();\n\t },\n\t\n\t 13: function _() {\n\t // return the selected value\n\t return this.selectActive();\n\t },\n\t\n\t 9: function _(e) {\n\t this.moveSelected(e.shiftKey ? 'prev' : 'next');\n\t e.preventDefault();\n\t },\n\t\n\t 27: function _() {\n\t this.close();\n\t }\n\t };\n\t }\n\t\n\t _createClass(Menu, [{\n\t key: 'moveSelected',\n\t value: function moveSelected(placement, focus) {\n\t var $items = this.$element.find('li'),\n\t $selected = $items.filter('.' + selectClass),\n\t $nextSelected;\n\t\n\t if (!$selected.length || placement === 'start') {\n\t $nextSelected = $items.eq(0);\n\t } else if (placement === 'next') {\n\t $nextSelected = $selected.next();\n\t if (!$nextSelected.length) {\n\t $nextSelected = $items.eq(0);\n\t }\n\t } else {\n\t $nextSelected = $selected.prev();\n\t if (!$nextSelected.length) {\n\t $nextSelected = $items.eq($items.length - 1);\n\t }\n\t }\n\t $selected.removeClass(selectClass);\n\t $nextSelected.addClass(selectClass);\n\t\n\t if (focus || (0, _jquery2['default'])(window.document.activeElement).closest($selected).length) {\n\t if ($nextSelected.is(focusables)) {\n\t $nextSelected[0].focus();\n\t } else {\n\t var $focusChild = $nextSelected.find(focusables);\n\t if ($focusChild.length) {\n\t $focusChild[0].focus();\n\t }\n\t }\n\t }\n\t }\n\t }, {\n\t key: 'getSelectedElement',\n\t value: function getSelectedElement() {\n\t return this.$element.find('li.' + selectClass);\n\t }\n\t }, {\n\t key: 'selectActive',\n\t value: function selectActive() {\n\t var trigger = this.$element.data(this.componentName + '-trigger');\n\t var $selected = this.getSelectedElement();\n\t\n\t if (trigger && (0, _jquery2['default'])(trigger).is('input')) {\n\t trigger.value = $selected.text();\n\t }\n\t $selected.trigger(this.componentName + ':select');\n\t this.close();\n\t return $selected.text();\n\t }\n\t }, {\n\t key: 'keyDown',\n\t value: function keyDown(e) {\n\t var fn = this.keycodes[e.keyCode] || function () {};\n\t return fn.call(this, e);\n\t }\n\t }, {\n\t key: '_bindKeyHandling',\n\t value: function _bindKeyHandling() {\n\t var self = this;\n\t this.$element.bind('keydown', function (e) {\n\t self.keyDown(e);\n\t }).bind('mouseover', function (e) {\n\t self.$element.find('.' + selectClass).removeClass(selectClass);\n\t (0, _jquery2['default'])(e.target).closest('li').addClass(selectClass);\n\t }).bind('mouseleave', function (e) {\n\t (0, _jquery2['default'])(e.target).closest('li').removeClass(selectClass);\n\t }).bind('click', function () {\n\t self.selectActive();\n\t });\n\t }\n\t }, {\n\t key: 'open',\n\t value: function open(trigger, sendFocus) {\n\t if (this.opened) {\n\t return;\n\t }\n\t this.$element.attr(at.ariaHidden, false);\n\t this.$element.data(this.componentName + '-trigger', trigger);\n\t this.opened = true;\n\t this.moveSelected('start', sendFocus);\n\t this.$element.trigger(this.componentName + ':open');\n\t }\n\t }, {\n\t key: 'close',\n\t value: function close() {\n\t if (!this.opened) {\n\t return;\n\t }\n\t this.$element.attr(at.ariaHidden, true);\n\t this.opened = false;\n\t var $trigger = this.$element.data(this.componentName + '-trigger');\n\t if ($trigger) {\n\t $trigger.focus();\n\t }\n\t this.$element.trigger(this.componentName + ':close');\n\t }\n\t }, {\n\t key: 'toggle',\n\t value: function toggle(trigger, sendFocus) {\n\t this[this.opened ? 'close' : 'open'](trigger, sendFocus);\n\t }\n\t }, {\n\t key: 'init',\n\t value: function init() {\n\t // prevent re-init\n\t if (this.$element.data(this.componentName)) {\n\t return;\n\t }\n\t this.$element.data(this.componentName, this);\n\t\n\t this.$element.attr('role', 'menu')\n\t // @FIXME\n\t // ita-web-toolkit mod:\n\t // be careful with the following as menuitem(s)\n\t // get a special treatment by screen readers\n\t .find('li').attr('role', 'menuitem');\n\t\n\t this.close();\n\t var self = this;\n\t\n\t // close on any click, even on the menu\n\t (0, _jquery2['default'])(document).bind('mouseup', function () {\n\t self.close();\n\t });\n\t\n\t this._bindKeyHandling();\n\t\n\t this.$element.trigger(this.componentName + ':init');\n\t }\n\t }]);\n\t\n\t return Menu;\n\t}();\n\t\n\tvar Menutrigger = function () {\n\t function Menutrigger(element) {\n\t _classCallCheck(this, Menutrigger);\n\t\n\t if (!element) {\n\t throw new Error('Element required to initialize object');\n\t }\n\t this.element = element;\n\t this.$element = (0, _jquery2['default'])(element);\n\t this.$menu = (0, _jquery2['default'])('#' + this.$element.attr('data-menu-trigger'));\n\t this.menu = this.$menu.data('Menu');\n\t this.componentName = 'Menutrigger';\n\t }\n\t\n\t _createClass(Menutrigger, [{\n\t key: '_bindbehavior',\n\t value: function _bindbehavior() {\n\t var self = this;\n\t\n\t if (this.$element.is('a')) {\n\t this.$element.attr('role', 'button').bind('click', function (e) {\n\t e.preventDefault();\n\t self.menu.toggle(this, true);\n\t });\n\t } else if (this.$element.is('button')) {\n\t this.$element.bind('click', function (e) {\n\t e.preventDefault();\n\t self.menu.toggle(this, true);\n\t });\n\t } else if (this.$element.is('input')) {\n\t this.$element.bind('input keyup', function () {\n\t if (this.value === '') {\n\t self.menu.close();\n\t } else {\n\t self.menu.open(this, false);\n\t }\n\t }).bind('input keydown', function (e) {\n\t self.menu.keyDown(e);\n\t }).bind('focus click', function () {\n\t if (this.value !== '') {\n\t self.menu.open();\n\t }\n\t }).bind('blur', function () {\n\t self.menu.close();\n\t });\n\t }\n\t }\n\t }, {\n\t key: 'init',\n\t value: function init() {\n\t // prevent re-init\n\t if (this.$element.data(this.componentName)) {\n\t return;\n\t }\n\t this.$element.data(this.componentName, this);\n\t\n\t // add attrs\n\t this.$element.attr('aria-controls', this.$menu.attr('id'));\n\t this.$element.attr('aria-haspopup', 'true');\n\t\n\t this._bindbehavior();\n\t\n\t this.$element.trigger(this.componentName + ':init');\n\t }\n\t }]);\n\t\n\t return Menutrigger;\n\t}();\n\t\n\texports['default'] = {\n\t Menu: Menu,\n\t Menutrigger: Menutrigger\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tvar _headroom = __webpack_require__(26);\n\t\n\tvar _headroom2 = _interopRequireDefault(_headroom);\n\t\n\tvar _throttle = __webpack_require__(6);\n\t\n\tvar _throttle2 = _interopRequireDefault(_throttle);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t// Headroom for fixed sticky header\n\t\n\tvar myElement = document.querySelector('.js-Headroom');\n\t\n\tvar opts = {\n\t // vertical offset in px before element is first unpinned\n\t offset: 0,\n\t // you can specify tolerance individually for up/down scroll\n\t tolerance: {\n\t up: 20,\n\t down: 10\n\t },\n\t // css classes to apply\n\t classes: {\n\t // when element is initialised\n\t initial: 'Headroom',\n\t // when scrolling up\n\t pinned: 'Headroom--pinned',\n\t // when scrolling down\n\t unpinned: 'Headroom--unpinned',\n\t // when above offset\n\t top: 'Headroom--top',\n\t // when below offset\n\t notTop: 'Headroom--not-top',\n\t // when at bottom of scoll area\n\t bottom: 'Headroom--bottom',\n\t // when not at bottom of scroll area\n\t notBottom: 'Headroom--not-bottom'\n\t },\n\t // element to listen to scroll events on, defaults to `window`\n\t scroller: window,\n\t // callback when pinned, `this` is headroom object\n\t onPin: function onPin() {},\n\t // callback when unpinned, `this` is headroom object\n\t onUnpin: function onUnpin() {},\n\t // callback when above offset, `this` is headroom object\n\t onTop: function onTop() {},\n\t // callback when below offset, `this` is headroom object\n\t onNotTop: function onNotTop() {},\n\t // callback when at bottom of page, `this` is headroom object\n\t onBottom: function onBottom() {},\n\t // callback when moving away from bottom of page, `this` is headroom object\n\t onNotBottom: function onNotBottom() {}\n\t};\n\t\n\tvar headroom = null;\n\t\n\tif (myElement) {\n\t headroom = new _headroom2['default'](myElement, opts);\n\t headroom.init();\n\t}\n\t\n\t/*\n\t *\tMake space when using fixed header.\n\t *\n\t *\t\tThe no-js alternative is to set up body padding inside CSS\n\t *\t \tassuming you know the exact header height in pixel\n\t *\t \t(expanded and minimized for all viewport width)\n\t */\n\tvar headroomFixed = '.Headroom--fixed';\n\t\n\tif ((0, _jquery2['default'])('.' + opts.classes.initial).is(headroomFixed)) {\n\t var INTERVAL = 250;\n\t\n\t var windowWidth = (0, _jquery2['default'])(window).width();\n\t\n\t // Needs to be here due to CSS transition (see on Safari)\n\t var headerHeight = (0, _jquery2['default'])(headroomFixed).height();\n\t\n\t var _adjustPadding = function _adjustPadding() {\n\t var paddingTop = headerHeight;\n\t\n\t (0, _jquery2['default'])('body').css({\n\t paddingTop: paddingTop + 'px'\n\t });\n\t };\n\t\n\t // Set up padding on page load\n\t (0, _jquery2['default'])(document).ready(function () {\n\t (0, _jquery2['default'])(headroomFixed).css({\n\t position: 'fixed',\n\t top: 0\n\t });\n\t _adjustPadding();\n\t });\n\t\n\t // Make padding respond to window resize\n\t (0, _jquery2['default'])(window).resize((0, _throttle2['default'])(INTERVAL, function () {\n\t var newWindowWidth = (0, _jquery2['default'])(window).width();\n\t var height = (0, _jquery2['default'])(headroomFixed).height();\n\t // Android browser triggers a resize event on scroll to top\n\t // so we check for changes in window width\n\t if (newWindowWidth !== windowWidth) {\n\t windowWidth = newWindowWidth;\n\t headerHeight = height;\n\t setTimeout(_adjustPadding, INTERVAL);\n\t }\n\t }));\n\t\n\t (0, _jquery2['default'])(headroomFixed).on('transitionend', (0, _throttle2['default'])(INTERVAL, function () {\n\t var height = (0, _jquery2['default'])(this).height();\n\t if (headerHeight < height) {\n\t // This happens *only* after a resize\n\t // _and_ when scrolling to top\n\t headerHeight = height;\n\t _adjustPadding();\n\t }\n\t }));\n\t}\n\t\n\t/*\n\t * Toggle search-form visibility for mobile\n\t */\n\t(0, _jquery2['default'])('.js-Header-search-trigger').click(function (e) {\n\t (0, _jquery2['default'])('.js-Header-search-trigger').each(function (i, el) {\n\t var $el = (0, _jquery2['default'])(el);\n\t if ('true' === $el.attr('aria-hidden')) {\n\t $el.attr('aria-hidden', 'false');\n\t $el.removeClass('u-hidden');\n\t } else {\n\t $el.attr('aria-hidden', 'true');\n\t $el.addClass('u-hidden');\n\t }\n\t });\n\t (0, _jquery2['default'])('#' + (0, _jquery2['default'])(e.target).attr('aria-controls')).toggleClass('is-active');\n\t});\n\t\n\texports['default'] = {\n\t Headroom: _headroom2['default'],\n\t headroom: headroom\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/*!\n\t * headroom.js v0.9.3 - Give your page some headroom. Hide your header until you need it\n\t * Copyright (c) 2016 Nick Williams - http://wicky.nillia.ms/headroom.js\n\t * License: MIT\n\t */\n\t\n\t(function (root, factory) {\n\t 'use strict';\n\t\n\t if (true) {\n\t // AMD. Register as an anonymous module.\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {\n\t // COMMONJS\n\t module.exports = factory();\n\t } else {\n\t // BROWSER\n\t root.Headroom = factory();\n\t }\n\t})(undefined, function () {\n\t 'use strict';\n\t\n\t /* exported features */\n\t\n\t var features = {\n\t bind: !!function () {}.bind,\n\t classList: 'classList' in document.documentElement,\n\t rAF: !!(window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame)\n\t };\n\t window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n\t\n\t /**\n\t * Handles debouncing of events via requestAnimationFrame\n\t * @see http://www.html5rocks.com/en/tutorials/speed/animations/\n\t * @param {Function} callback The callback to handle whichever event\n\t */\n\t function Debouncer(callback) {\n\t this.callback = callback;\n\t this.ticking = false;\n\t }\n\t Debouncer.prototype = {\n\t constructor: Debouncer,\n\t\n\t /**\n\t * dispatches the event to the supplied callback\n\t * @private\n\t */\n\t update: function update() {\n\t this.callback && this.callback();\n\t this.ticking = false;\n\t },\n\t\n\t /**\n\t * ensures events don't get stacked\n\t * @private\n\t */\n\t requestTick: function requestTick() {\n\t if (!this.ticking) {\n\t requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this)));\n\t this.ticking = true;\n\t }\n\t },\n\t\n\t /**\n\t * Attach this as the event listeners\n\t */\n\t handleEvent: function handleEvent() {\n\t this.requestTick();\n\t }\n\t };\n\t /**\n\t * Check if object is part of the DOM\n\t * @constructor\n\t * @param {Object} obj element to check\n\t */\n\t function isDOMElement(obj) {\n\t return obj && typeof window !== 'undefined' && (obj === window || obj.nodeType);\n\t }\n\t\n\t /**\n\t * Helper function for extending objects\n\t */\n\t function extend(object /*, objectN ... */) {\n\t if (arguments.length <= 0) {\n\t throw new Error('Missing arguments in extend function');\n\t }\n\t\n\t var result = object || {},\n\t key,\n\t i;\n\t\n\t for (i = 1; i < arguments.length; i++) {\n\t var replacement = arguments[i] || {};\n\t\n\t for (key in replacement) {\n\t // Recurse into object except if the object is a DOM element\n\t if (_typeof(result[key]) === 'object' && !isDOMElement(result[key])) {\n\t result[key] = extend(result[key], replacement[key]);\n\t } else {\n\t result[key] = result[key] || replacement[key];\n\t }\n\t }\n\t }\n\t\n\t return result;\n\t }\n\t\n\t /**\n\t * Helper function for normalizing tolerance option to object format\n\t */\n\t function normalizeTolerance(t) {\n\t return t === Object(t) ? t : { down: t, up: t };\n\t }\n\t\n\t /**\n\t * UI enhancement for fixed headers.\n\t * Hides header when scrolling down\n\t * Shows header when scrolling up\n\t * @constructor\n\t * @param {DOMElement} elem the header element\n\t * @param {Object} options options for the widget\n\t */\n\t function Headroom(elem, options) {\n\t options = extend(options, Headroom.options);\n\t\n\t this.lastKnownScrollY = 0;\n\t this.elem = elem;\n\t this.tolerance = normalizeTolerance(options.tolerance);\n\t this.classes = options.classes;\n\t this.offset = options.offset;\n\t this.scroller = options.scroller;\n\t this.initialised = false;\n\t this.onPin = options.onPin;\n\t this.onUnpin = options.onUnpin;\n\t this.onTop = options.onTop;\n\t this.onNotTop = options.onNotTop;\n\t this.onBottom = options.onBottom;\n\t this.onNotBottom = options.onNotBottom;\n\t }\n\t Headroom.prototype = {\n\t constructor: Headroom,\n\t\n\t /**\n\t * Initialises the widget\n\t */\n\t init: function init() {\n\t if (!Headroom.cutsTheMustard) {\n\t return;\n\t }\n\t\n\t this.debouncer = new Debouncer(this.update.bind(this));\n\t this.elem.classList.add(this.classes.initial);\n\t\n\t // defer event registration to handle browser \n\t // potentially restoring previous scroll position\n\t setTimeout(this.attachEvent.bind(this), 100);\n\t\n\t return this;\n\t },\n\t\n\t /**\n\t * Unattaches events and removes any classes that were added\n\t */\n\t destroy: function destroy() {\n\t var classes = this.classes;\n\t\n\t this.initialised = false;\n\t this.elem.classList.remove(classes.unpinned, classes.pinned, classes.top, classes.notTop, classes.initial);\n\t this.scroller.removeEventListener('scroll', this.debouncer, false);\n\t },\n\t\n\t /**\n\t * Attaches the scroll event\n\t * @private\n\t */\n\t attachEvent: function attachEvent() {\n\t if (!this.initialised) {\n\t this.lastKnownScrollY = this.getScrollY();\n\t this.initialised = true;\n\t this.scroller.addEventListener('scroll', this.debouncer, false);\n\t\n\t this.debouncer.handleEvent();\n\t }\n\t },\n\t\n\t /**\n\t * Unpins the header if it's currently pinned\n\t */\n\t unpin: function unpin() {\n\t var classList = this.elem.classList,\n\t classes = this.classes;\n\t\n\t if (classList.contains(classes.pinned) || !classList.contains(classes.unpinned)) {\n\t classList.add(classes.unpinned);\n\t classList.remove(classes.pinned);\n\t this.onUnpin && this.onUnpin.call(this);\n\t }\n\t },\n\t\n\t /**\n\t * Pins the header if it's currently unpinned\n\t */\n\t pin: function pin() {\n\t var classList = this.elem.classList,\n\t classes = this.classes;\n\t\n\t if (classList.contains(classes.unpinned)) {\n\t classList.remove(classes.unpinned);\n\t classList.add(classes.pinned);\n\t this.onPin && this.onPin.call(this);\n\t }\n\t },\n\t\n\t /**\n\t * Handles the top states\n\t */\n\t top: function top() {\n\t var classList = this.elem.classList,\n\t classes = this.classes;\n\t\n\t if (!classList.contains(classes.top)) {\n\t classList.add(classes.top);\n\t classList.remove(classes.notTop);\n\t this.onTop && this.onTop.call(this);\n\t }\n\t },\n\t\n\t /**\n\t * Handles the not top state\n\t */\n\t notTop: function notTop() {\n\t var classList = this.elem.classList,\n\t classes = this.classes;\n\t\n\t if (!classList.contains(classes.notTop)) {\n\t classList.add(classes.notTop);\n\t classList.remove(classes.top);\n\t this.onNotTop && this.onNotTop.call(this);\n\t }\n\t },\n\t\n\t bottom: function bottom() {\n\t var classList = this.elem.classList,\n\t classes = this.classes;\n\t\n\t if (!classList.contains(classes.bottom)) {\n\t classList.add(classes.bottom);\n\t classList.remove(classes.notBottom);\n\t this.onBottom && this.onBottom.call(this);\n\t }\n\t },\n\t\n\t /**\n\t * Handles the not top state\n\t */\n\t notBottom: function notBottom() {\n\t var classList = this.elem.classList,\n\t classes = this.classes;\n\t\n\t if (!classList.contains(classes.notBottom)) {\n\t classList.add(classes.notBottom);\n\t classList.remove(classes.bottom);\n\t this.onNotBottom && this.onNotBottom.call(this);\n\t }\n\t },\n\t\n\t /**\n\t * Gets the Y scroll position\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY\n\t * @return {Number} pixels the page has scrolled along the Y-axis\n\t */\n\t getScrollY: function getScrollY() {\n\t return this.scroller.pageYOffset !== undefined ? this.scroller.pageYOffset : this.scroller.scrollTop !== undefined ? this.scroller.scrollTop : (document.documentElement || document.body.parentNode || document.body).scrollTop;\n\t },\n\t\n\t /**\n\t * Gets the height of the viewport\n\t * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript\n\t * @return {int} the height of the viewport in pixels\n\t */\n\t getViewportHeight: function getViewportHeight() {\n\t return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\n\t },\n\t\n\t /**\n\t * Gets the physical height of the DOM element\n\t * @param {Object} elm the element to calculate the physical height of which\n\t * @return {int} the physical height of the element in pixels\n\t */\n\t getElementPhysicalHeight: function getElementPhysicalHeight(elm) {\n\t return Math.max(elm.offsetHeight, elm.clientHeight);\n\t },\n\t\n\t /**\n\t * Gets the physical height of the scroller element\n\t * @return {int} the physical height of the scroller element in pixels\n\t */\n\t getScrollerPhysicalHeight: function getScrollerPhysicalHeight() {\n\t return this.scroller === window || this.scroller === document.body ? this.getViewportHeight() : this.getElementPhysicalHeight(this.scroller);\n\t },\n\t\n\t /**\n\t * Gets the height of the document\n\t * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/\n\t * @return {int} the height of the document in pixels\n\t */\n\t getDocumentHeight: function getDocumentHeight() {\n\t var body = document.body,\n\t documentElement = document.documentElement;\n\t\n\t return Math.max(body.scrollHeight, documentElement.scrollHeight, body.offsetHeight, documentElement.offsetHeight, body.clientHeight, documentElement.clientHeight);\n\t },\n\t\n\t /**\n\t * Gets the height of the DOM element\n\t * @param {Object} elm the element to calculate the height of which\n\t * @return {int} the height of the element in pixels\n\t */\n\t getElementHeight: function getElementHeight(elm) {\n\t return Math.max(elm.scrollHeight, elm.offsetHeight, elm.clientHeight);\n\t },\n\t\n\t /**\n\t * Gets the height of the scroller element\n\t * @return {int} the height of the scroller element in pixels\n\t */\n\t getScrollerHeight: function getScrollerHeight() {\n\t return this.scroller === window || this.scroller === document.body ? this.getDocumentHeight() : this.getElementHeight(this.scroller);\n\t },\n\t\n\t /**\n\t * determines if the scroll position is outside of document boundaries\n\t * @param {int} currentScrollY the current y scroll position\n\t * @return {bool} true if out of bounds, false otherwise\n\t */\n\t isOutOfBounds: function isOutOfBounds(currentScrollY) {\n\t var pastTop = currentScrollY < 0,\n\t pastBottom = currentScrollY + this.getScrollerPhysicalHeight() > this.getScrollerHeight();\n\t\n\t return pastTop || pastBottom;\n\t },\n\t\n\t /**\n\t * determines if the tolerance has been exceeded\n\t * @param {int} currentScrollY the current scroll y position\n\t * @return {bool} true if tolerance exceeded, false otherwise\n\t */\n\t toleranceExceeded: function toleranceExceeded(currentScrollY, direction) {\n\t return Math.abs(currentScrollY - this.lastKnownScrollY) >= this.tolerance[direction];\n\t },\n\t\n\t /**\n\t * determine if it is appropriate to unpin\n\t * @param {int} currentScrollY the current y scroll position\n\t * @param {bool} toleranceExceeded has the tolerance been exceeded?\n\t * @return {bool} true if should unpin, false otherwise\n\t */\n\t shouldUnpin: function shouldUnpin(currentScrollY, toleranceExceeded) {\n\t var scrollingDown = currentScrollY > this.lastKnownScrollY,\n\t pastOffset = currentScrollY >= this.offset;\n\t\n\t return scrollingDown && pastOffset && toleranceExceeded;\n\t },\n\t\n\t /**\n\t * determine if it is appropriate to pin\n\t * @param {int} currentScrollY the current y scroll position\n\t * @param {bool} toleranceExceeded has the tolerance been exceeded?\n\t * @return {bool} true if should pin, false otherwise\n\t */\n\t shouldPin: function shouldPin(currentScrollY, toleranceExceeded) {\n\t var scrollingUp = currentScrollY < this.lastKnownScrollY,\n\t pastOffset = currentScrollY <= this.offset;\n\t\n\t return scrollingUp && toleranceExceeded || pastOffset;\n\t },\n\t\n\t /**\n\t * Handles updating the state of the widget\n\t */\n\t update: function update() {\n\t var currentScrollY = this.getScrollY(),\n\t scrollDirection = currentScrollY > this.lastKnownScrollY ? 'down' : 'up',\n\t toleranceExceeded = this.toleranceExceeded(currentScrollY, scrollDirection);\n\t\n\t if (this.isOutOfBounds(currentScrollY)) {\n\t // Ignore bouncy scrolling in OSX\n\t return;\n\t }\n\t\n\t if (currentScrollY <= this.offset) {\n\t this.top();\n\t } else {\n\t this.notTop();\n\t }\n\t\n\t if (currentScrollY + this.getViewportHeight() >= this.getScrollerHeight()) {\n\t this.bottom();\n\t } else {\n\t this.notBottom();\n\t }\n\t\n\t if (this.shouldUnpin(currentScrollY, toleranceExceeded)) {\n\t this.unpin();\n\t } else if (this.shouldPin(currentScrollY, toleranceExceeded)) {\n\t this.pin();\n\t }\n\t\n\t this.lastKnownScrollY = currentScrollY;\n\t }\n\t };\n\t /**\n\t * Default options\n\t * @type {Object}\n\t */\n\t Headroom.options = {\n\t tolerance: {\n\t up: 0,\n\t down: 0\n\t },\n\t offset: 0,\n\t scroller: window,\n\t classes: {\n\t pinned: 'headroom--pinned',\n\t unpinned: 'headroom--unpinned',\n\t top: 'headroom--top',\n\t notTop: 'headroom--not-top',\n\t bottom: 'headroom--bottom',\n\t notBottom: 'headroom--not-bottom',\n\t initial: 'headroom'\n\t }\n\t };\n\t Headroom.cutsTheMustard = typeof features !== 'undefined' && features.rAF && features.bind && features.classList;\n\t\n\t return Headroom;\n\t});\n\n/***/ },\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar Masonry = null;\n\t\n\t(0, _jquery2['default'])(function () {\n\t if ((0, _jquery2['default'])('.js-Masonry-container').length > 0) {\n\t try {\n\t Masonry = __webpack_require__(28);\n\t } catch (e) {\n\t /* HEY, I'm IE8 */\n\t }\n\t }\n\t});\n\t\n\texports['default'] = {\n\t Masonry: Masonry\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/*!\n\t * Salvattore 1.0.9 by @rnmp and @ppold\n\t * https://github.com/rnmp/salvattore\n\t */\n\t(function (root, factory) {\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.salvattore = factory();\n\t }\n\t})(undefined, function () {\n\t /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */\n\t\n\t if (!window.matchMedia) {\n\t window.matchMedia = function () {\n\t \"use strict\";\n\t\n\t // For browsers that support matchMedium api such as IE 9 and webkit\n\t\n\t var styleMedia = window.styleMedia || window.media;\n\t\n\t // For those that don't support matchMedium\n\t if (!styleMedia) {\n\t var style = document.createElement('style'),\n\t script = document.getElementsByTagName('script')[0],\n\t info = null;\n\t\n\t style.type = 'text/css';\n\t style.id = 'matchmediajs-test';\n\t\n\t script.parentNode.insertBefore(style, script);\n\t\n\t // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n\t info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle;\n\t\n\t styleMedia = {\n\t matchMedium: function matchMedium(media) {\n\t var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\t\n\t // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n\t if (style.styleSheet) {\n\t style.styleSheet.cssText = text;\n\t } else {\n\t style.textContent = text;\n\t }\n\t\n\t // Test if media query is true or false\n\t return info.width === '1px';\n\t }\n\t };\n\t }\n\t\n\t return function (media) {\n\t return {\n\t matches: styleMedia.matchMedium(media || 'all'),\n\t media: media || 'all'\n\t };\n\t };\n\t }();\n\t }\n\t\n\t /*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n\t (function () {\n\t \"use strict\";\n\t\n\t // Bail out for browsers that have addListener support\n\t\n\t if (window.matchMedia && window.matchMedia('all').addListener) {\n\t return false;\n\t }\n\t\n\t var localMatchMedia = window.matchMedia,\n\t hasMediaQueries = localMatchMedia('only all').matches,\n\t isListening = false,\n\t timeoutID = 0,\n\t // setTimeout for debouncing 'handleChange'\n\t queries = [],\n\t // Contains each 'mql' and associated 'listeners' if 'addListener' is used\n\t handleChange = function handleChange(evt) {\n\t // Debounce\n\t clearTimeout(timeoutID);\n\t\n\t timeoutID = setTimeout(function () {\n\t for (var i = 0, il = queries.length; i < il; i++) {\n\t var mql = queries[i].mql,\n\t listeners = queries[i].listeners || [],\n\t matches = localMatchMedia(mql.media).matches;\n\t\n\t // Update mql.matches value and call listeners\n\t // Fire listeners only if transitioning to or from matched state\n\t if (matches !== mql.matches) {\n\t mql.matches = matches;\n\t\n\t for (var j = 0, jl = listeners.length; j < jl; j++) {\n\t listeners[j].call(window, mql);\n\t }\n\t }\n\t }\n\t }, 30);\n\t };\n\t\n\t window.matchMedia = function (media) {\n\t var mql = localMatchMedia(media),\n\t listeners = [],\n\t index = 0;\n\t\n\t mql.addListener = function (listener) {\n\t // Changes would not occur to css media type so return now (Affects IE <= 8)\n\t if (!hasMediaQueries) {\n\t return;\n\t }\n\t\n\t // Set up 'resize' listener for browsers that support CSS3 media queries (Not for IE <= 8)\n\t // There should only ever be 1 resize listener running for performance\n\t if (!isListening) {\n\t isListening = true;\n\t window.addEventListener('resize', handleChange, true);\n\t }\n\t\n\t // Push object only if it has not been pushed already\n\t if (index === 0) {\n\t index = queries.push({\n\t mql: mql,\n\t listeners: listeners\n\t });\n\t }\n\t\n\t listeners.push(listener);\n\t };\n\t\n\t mql.removeListener = function (listener) {\n\t for (var i = 0, il = listeners.length; i < il; i++) {\n\t if (listeners[i] === listener) {\n\t listeners.splice(i, 1);\n\t }\n\t }\n\t };\n\t\n\t return mql;\n\t };\n\t })();\n\t\n\t // http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n\t // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\t\n\t // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n\t\n\t // MIT license\n\t\n\t (function () {\n\t \"use strict\";\n\t\n\t var lastTime = 0;\n\t var vendors = ['ms', 'moz', 'webkit', 'o'];\n\t for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n\t window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n\t window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n\t }\n\t\n\t if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {\n\t var currTime = new Date().getTime();\n\t var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n\t var id = window.setTimeout(function () {\n\t callback(currTime + timeToCall);\n\t }, timeToCall);\n\t lastTime = currTime + timeToCall;\n\t return id;\n\t };\n\t\n\t if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n\t clearTimeout(id);\n\t };\n\t })();\n\t\n\t // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent\n\t\n\t if (typeof window.CustomEvent !== \"function\") {\n\t (function () {\n\t \"use strict\";\n\t\n\t function CustomEvent(event, params) {\n\t params = params || { bubbles: false, cancelable: false, detail: undefined };\n\t var evt = document.createEvent('CustomEvent');\n\t evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n\t return evt;\n\t }\n\t\n\t CustomEvent.prototype = window.Event.prototype;\n\t\n\t window.CustomEvent = CustomEvent;\n\t })();\n\t }\n\t\n\t /* jshint laxcomma: true */\n\t var salvattore = function (global, document, undefined) {\n\t \"use strict\";\n\t\n\t var self = {},\n\t grids = [],\n\t mediaRules = [],\n\t mediaQueries = [],\n\t add_to_dataset = function add_to_dataset(element, key, value) {\n\t // uses dataset function or a fallback for *:nth-child(\" + numberOfColumns + \"n-\" + i + \")\";\n\t columnsItems.push(items.querySelectorAll(selector));\n\t }\n\t\n\t columnsItems.forEach(function append_to_grid_fragment(rows) {\n\t var column = document.createElement(\"div\"),\n\t rowsFragment = document.createDocumentFragment();\n\t\n\t column.className = columnClasses.join(\" \");\n\t\n\t Array.prototype.forEach.call(rows, function append_to_column(row) {\n\t rowsFragment.appendChild(row);\n\t });\n\t column.appendChild(rowsFragment);\n\t columnsFragment.appendChild(column);\n\t });\n\t\n\t grid.appendChild(columnsFragment);\n\t add_to_dataset(grid, 'columns', numberOfColumns);\n\t };\n\t\n\t self.removeColumns = function removeColumns(grid) {\n\t // removes all the columns from a grid, and returns a list\n\t // of items sorted by the ordering of columns.\n\t\n\t var range = document.createRange();\n\t range.selectNodeContents(grid);\n\t\n\t var columns = Array.prototype.filter.call(range.extractContents().childNodes, function filter_elements(node) {\n\t return node instanceof global.HTMLElement;\n\t });\n\t\n\t var numberOfColumns = columns.length,\n\t numberOfRowsInFirstColumn = columns[0].childNodes.length,\n\t sortedRows = new Array(numberOfRowsInFirstColumn * numberOfColumns);\n\t\n\t Array.prototype.forEach.call(columns, function iterate_columns(column, columnIndex) {\n\t Array.prototype.forEach.call(column.children, function iterate_rows(row, rowIndex) {\n\t sortedRows[rowIndex * numberOfColumns + columnIndex] = row;\n\t });\n\t });\n\t\n\t var container = document.createElement(\"div\");\n\t add_to_dataset(container, 'columns', 0);\n\t\n\t sortedRows.filter(function filter_non_null(child) {\n\t return !!child;\n\t }).forEach(function append_row(child) {\n\t container.appendChild(child);\n\t });\n\t\n\t return container;\n\t };\n\t\n\t self.recreateColumns = function recreateColumns(grid) {\n\t // removes all the columns from the grid, and adds them again,\n\t // it is used when the number of columns change.\n\t\n\t global.requestAnimationFrame(function render_after_css_mediaQueryChange() {\n\t self.addColumns(grid, self.removeColumns(grid));\n\t var columnsChange = new CustomEvent(\"columnsChange\");\n\t grid.dispatchEvent(columnsChange);\n\t });\n\t };\n\t\n\t self.mediaQueryChange = function mediaQueryChange(mql) {\n\t // recreates the columns when a media query matches the current state\n\t // of the browser.\n\t\n\t if (mql.matches) {\n\t Array.prototype.forEach.call(grids, self.recreateColumns);\n\t }\n\t };\n\t\n\t self.getCSSRules = function getCSSRules(stylesheet) {\n\t // returns a list of css rules from a stylesheet\n\t\n\t var cssRules;\n\t try {\n\t cssRules = stylesheet.sheet.cssRules || stylesheet.sheet.rules;\n\t } catch (e) {\n\t return [];\n\t }\n\t\n\t return cssRules || [];\n\t };\n\t\n\t self.getStylesheets = function getStylesheets() {\n\t // returns a list of all the styles in the document (that are accessible).\n\t\n\t var inlineStyleBlocks = Array.prototype.slice.call(document.querySelectorAll(\"style\"));\n\t inlineStyleBlocks.forEach(function (stylesheet, idx) {\n\t if (stylesheet.type !== 'text/css' && stylesheet.type !== '') {\n\t inlineStyleBlocks.splice(idx, 1);\n\t }\n\t });\n\t\n\t return Array.prototype.concat.call(inlineStyleBlocks, Array.prototype.slice.call(document.querySelectorAll(\"link[rel='stylesheet']\")));\n\t };\n\t\n\t self.mediaRuleHasColumnsSelector = function mediaRuleHasColumnsSelector(rules) {\n\t // checks if a media query css rule has in its contents a selector that\n\t // styles the grid.\n\t\n\t var i, rule;\n\t\n\t try {\n\t i = rules.length;\n\t } catch (e) {\n\t i = 0;\n\t }\n\t\n\t while (i--) {\n\t rule = rules[i];\n\t if (rule.selectorText && rule.selectorText.match(/\\[data-columns\\](.*)::?before$/)) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t };\n\t\n\t self.scanMediaQueries = function scanMediaQueries() {\n\t // scans all the stylesheets for selectors that style grids,\n\t // if the matchMedia API is supported.\n\t\n\t var newMediaRules = [];\n\t\n\t if (!global.matchMedia) {\n\t return;\n\t }\n\t\n\t self.getStylesheets().forEach(function extract_rules(stylesheet) {\n\t Array.prototype.forEach.call(self.getCSSRules(stylesheet), function filter_by_column_selector(rule) {\n\t // rule.media throws an 'not implemented error' in ie9 for import rules occasionally\n\t try {\n\t if (rule.media && rule.cssRules && self.mediaRuleHasColumnsSelector(rule.cssRules)) {\n\t newMediaRules.push(rule);\n\t }\n\t } catch (e) {}\n\t });\n\t });\n\t\n\t // remove matchMedia listeners from the old rules\n\t var oldRules = mediaRules.filter(function (el) {\n\t return newMediaRules.indexOf(el) === -1;\n\t });\n\t mediaQueries.filter(function (el) {\n\t return oldRules.indexOf(el.rule) !== -1;\n\t }).forEach(function (el) {\n\t el.mql.removeListener(self.mediaQueryChange);\n\t });\n\t mediaQueries = mediaQueries.filter(function (el) {\n\t return oldRules.indexOf(el.rule) === -1;\n\t });\n\t\n\t // add matchMedia listeners to the new rules\n\t newMediaRules.filter(function (el) {\n\t return mediaRules.indexOf(el) == -1;\n\t }).forEach(function (rule) {\n\t var mql = global.matchMedia(rule.media.mediaText);\n\t mql.addListener(self.mediaQueryChange);\n\t mediaQueries.push({ rule: rule, mql: mql });\n\t });\n\t\n\t // swap mediaRules with the new set\n\t mediaRules.length = 0;\n\t mediaRules = newMediaRules;\n\t };\n\t\n\t self.rescanMediaQueries = function rescanMediaQueries() {\n\t self.scanMediaQueries();\n\t Array.prototype.forEach.call(grids, self.recreateColumns);\n\t };\n\t\n\t self.nextElementColumnIndex = function nextElementColumnIndex(grid, fragments) {\n\t // returns the index of the column where the given element must be added.\n\t\n\t var children = grid.children,\n\t m = children.length,\n\t lowestRowCount = 0,\n\t child,\n\t currentRowCount,\n\t i,\n\t index = 0;\n\t for (i = 0; i < m; i++) {\n\t child = children[i];\n\t currentRowCount = child.children.length + (fragments[i].children || fragments[i].childNodes).length;\n\t if (lowestRowCount === 0) {\n\t lowestRowCount = currentRowCount;\n\t }\n\t if (currentRowCount < lowestRowCount) {\n\t index = i;\n\t lowestRowCount = currentRowCount;\n\t }\n\t }\n\t\n\t return index;\n\t };\n\t\n\t self.createFragmentsList = function createFragmentsList(quantity) {\n\t // returns a list of fragments\n\t\n\t var fragments = new Array(quantity),\n\t i = 0;\n\t\n\t while (i !== quantity) {\n\t fragments[i] = document.createDocumentFragment();\n\t i++;\n\t }\n\t\n\t return fragments;\n\t };\n\t\n\t self.appendElements = function appendElements(grid, elements) {\n\t // adds a list of elements to the end of a grid\n\t\n\t var columns = grid.children,\n\t numberOfColumns = columns.length,\n\t fragments = self.createFragmentsList(numberOfColumns);\n\t\n\t Array.prototype.forEach.call(elements, function append_to_next_fragment(element) {\n\t var columnIndex = self.nextElementColumnIndex(grid, fragments);\n\t fragments[columnIndex].appendChild(element);\n\t });\n\t\n\t Array.prototype.forEach.call(columns, function insert_column(column, index) {\n\t column.appendChild(fragments[index]);\n\t });\n\t };\n\t\n\t self.prependElements = function prependElements(grid, elements) {\n\t // adds a list of elements to the start of a grid\n\t\n\t var columns = grid.children,\n\t numberOfColumns = columns.length,\n\t fragments = self.createFragmentsList(numberOfColumns),\n\t columnIndex = numberOfColumns - 1;\n\t\n\t elements.forEach(function append_to_next_fragment(element) {\n\t var fragment = fragments[columnIndex];\n\t fragment.insertBefore(element, fragment.firstChild);\n\t if (columnIndex === 0) {\n\t columnIndex = numberOfColumns - 1;\n\t } else {\n\t columnIndex--;\n\t }\n\t });\n\t\n\t Array.prototype.forEach.call(columns, function insert_column(column, index) {\n\t column.insertBefore(fragments[index], column.firstChild);\n\t });\n\t\n\t // populates a fragment with n columns till the right\n\t var fragment = document.createDocumentFragment(),\n\t numberOfColumnsToExtract = elements.length % numberOfColumns;\n\t\n\t while (numberOfColumnsToExtract-- !== 0) {\n\t fragment.appendChild(grid.lastChild);\n\t }\n\t\n\t // adds the fragment to the left\n\t grid.insertBefore(fragment, grid.firstChild);\n\t };\n\t\n\t self.registerGrid = function registerGrid(grid) {\n\t if (global.getComputedStyle(grid).display === \"none\") {\n\t return;\n\t }\n\t\n\t // retrieve the list of items from the grid itself\n\t var range = document.createRange();\n\t range.selectNodeContents(grid);\n\t\n\t var items = document.createElement(\"div\");\n\t items.appendChild(range.extractContents());\n\t\n\t add_to_dataset(items, 'columns', 0);\n\t self.addColumns(grid, items);\n\t grids.push(grid);\n\t };\n\t\n\t self.init = function init() {\n\t // adds required CSS rule to hide 'content' based\n\t // configuration.\n\t\n\t var css = document.createElement(\"style\");\n\t css.innerHTML = \"[data-columns]::before{display:block;visibility:hidden;position:absolute;font-size:1px;}\";\n\t document.head.appendChild(css);\n\t\n\t // scans all the grids in the document and generates\n\t // columns from their configuration.\n\t\n\t var gridElements = document.querySelectorAll(\"[data-columns]\");\n\t Array.prototype.forEach.call(gridElements, self.registerGrid);\n\t self.scanMediaQueries();\n\t };\n\t\n\t self.init();\n\t\n\t return {\n\t appendElements: self.appendElements,\n\t prependElements: self.prependElements,\n\t registerGrid: self.registerGrid,\n\t recreateColumns: self.recreateColumns,\n\t rescanMediaQueries: self.rescanMediaQueries,\n\t init: self.init,\n\t\n\t // maintains backwards compatibility with underscore style method names\n\t append_elements: self.appendElements,\n\t prepend_elements: self.prependElements,\n\t register_grid: self.registerGrid,\n\t recreate_columns: self.recreateColumns,\n\t rescan_media_queries: self.rescanMediaQueries\n\t };\n\t }(window, window.document);\n\t\n\t return salvattore;\n\t});\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tvar _megamenu = __webpack_require__(30);\n\t\n\tvar _megamenu2 = _interopRequireDefault(_megamenu);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t// ASAP hide megamenu panels\n\t(0, _jquery2['default'])('.js-megamenu').addClass('is-ready');\n\t\n\tvar opts = {\n\t /* add a close button to every subnav */\n\t addCloseButton: false,\n\t\n\t closeButtonClass: 'js-Megamenu-close',\n\t\n\t closeButtonTemplate: '',\n\t\n\t /* if false open menu on hover */\n\t openOnClick: true,\n\t\n\t /* prefix for generated unique id attributes, which are required\n\t to indicate aria-owns, aria-controls and aria-labelledby */\n\t uuidPrefix: 'megamenu',\n\t\n\t /* css class used to define the megamenu styling */\n\t menuClass: 'Megamenu',\n\t\n\t menuListClass: 'Megamenu-list',\n\t\n\t /* css class for a top-level navigation item in the megamenu */\n\t topNavItemClass: 'Megamenu-item',\n\t\n\t /* css class for a megamenu panel */\n\t panelClass: 'Megamenu-subnav',\n\t\n\t /* css class for a group of items within a megamenu panel */\n\t panelGroupClass: 'Megamenu-subnavGroup',\n\t\n\t /* css class for the hover state */\n\t hoverClass: 'is-hover',\n\t\n\t /* css class for the focus state */\n\t focusClass: 'is-focus',\n\t\n\t /* css class for the open state */\n\t openClass: 'is-open'\n\t};\n\t\n\t/*\n\t *\tTakes a Treeview and makes it work with Megamenu\n\t */\n\tvar listToMegaMenu = function listToMegaMenu($ul, _opts) {\n\t var attrs = 'class aria-expanded aria-hidden role tabindex';\n\t return $ul.clone().removeAttr(attrs).addClass(_opts.menuListClass).find('*').removeAttr(attrs).end().find('> li').each(function (i, li) {\n\t (0, _jquery2['default'])(li).addClass(function () {\n\t var className = (0, _jquery2['default'])(this).data('megamenu-class');\n\t return className ? className : _opts.topNavItemClass;\n\t }).find('[data-megamenu-class]').addClass(function () {\n\t return (0, _jquery2['default'])(this).data('megamenu-class');\n\t }).end().find('a')\n\t // make item tabbable, this is required !\n\t // .attr('href', '#')\n\t .end().find('> ul > li').unwrap().wrap('
    ').end().find('> ul').wrapAll('
    ');\n\t }).end();\n\t};\n\t\n\t(0, _jquery2['default'])(document).ready(function () {\n\t (0, _jquery2['default'])('.js-megamenu').each(function (i, el) {\n\t var $el = (0, _jquery2['default'])(el);\n\t var rel = (0, _jquery2['default'])(el).data('rel');\n\t\n\t if ($el.find('ul').length === 0 && rel && (0, _jquery2['default'])(rel).length > 0) {\n\t var $menu = listToMegaMenu((0, _jquery2['default'])(rel), opts);\n\t $el.append($menu);\n\t // @FIXME: make space for javascript rendered megamenu\n\t if ((0, _jquery2['default'])('header').css('position') === 'fixed') {\n\t (0, _jquery2['default'])('body').css({\n\t paddingTop: '+=' + $el.height() + 'px'\n\t });\n\t }\n\t }\n\t\n\t $el.accessibleMegaMenu(opts);\n\t\n\t if (opts.addCloseButton) {\n\t (0, _jquery2['default'])(opts.closeButtonTemplate).appendTo((0, _jquery2['default'])('.' + opts.panelClass));\n\t }\n\t\n\t (0, _jquery2['default'])('.' + opts.closeButtonClass).on('click', function () {\n\t var e = _jquery2['default'].Event('keydown');\n\t e.which = 27;\n\t (0, _jquery2['default'])('.' + opts.menuClass).trigger(e);\n\t return false;\n\t });\n\t });\n\t});\n\t\n\texports['default'] = {\n\t opts: opts,\n\t listToMegaMenu: listToMegaMenu,\n\t Megamenu: _megamenu2['default']\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 30 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/*\n\tCopyright © 2013 Adobe Systems Incorporated.\n\t\n\tLicensed under the Apache License, Version 2.0 (the “License”)\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\thttp://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an “AS IS” BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n\t*/\n\t\n\t/**\n\t * @fileOverview accessibleMegaMenu plugin\n\t *\n\t *

    Licensed under the Apache License, Version 2.0 (the “License”)\n\t *
    Copyright © 2013 Adobe Systems Incorporated.\n\t *
    Project page https://github.com/adobe-accessibility/Accessible-Mega-Menu\n\t * @version 0.1\n\t * @author Michael Jordan\n\t * @requires jquery\n\t */\n\t\n\t/*jslint browser: true, devel: true, plusplus: true, nomen: true */\n\t/*global jQuery */\n\t(function ($, window, document) {\n\t var pluginName = 'accessibleMegaMenu',\n\t defaults = {\n\t openOnClick: false,\n\t uuidPrefix: 'accessible-megamenu', // unique ID's are required to indicate aria-owns, aria-controls and aria-labelledby\n\t menuClass: 'accessible-megamenu', // default css class used to define the megamenu styling\n\t topNavItemClass: 'accessible-megamenu-top-nav-item', // default css class for a top-level navigation item in the megamenu\n\t panelClass: 'accessible-megamenu-panel', // default css class for a megamenu panel\n\t panelGroupClass: 'accessible-megamenu-panel-group', // default css class for a group of items within a megamenu panel\n\t hoverClass: 'hover', // default css class for the hover state\n\t focusClass: 'focus', // default css class for the focus state\n\t openClass: 'open' // default css class for the open state\n\t },\n\t Keyboard = {\n\t BACKSPACE: 8,\n\t COMMA: 188,\n\t DELETE: 46,\n\t DOWN: 40,\n\t END: 35,\n\t ENTER: 13,\n\t ESCAPE: 27,\n\t HOME: 36,\n\t LEFT: 37,\n\t PAGE_DOWN: 34,\n\t PAGE_UP: 33,\n\t PERIOD: 190,\n\t RIGHT: 39,\n\t SPACE: 32,\n\t TAB: 9,\n\t UP: 38,\n\t keyMap: {\n\t 48: '0',\n\t 49: '1',\n\t 50: '2',\n\t 51: '3',\n\t 52: '4',\n\t 53: '5',\n\t 54: '6',\n\t 55: '7',\n\t 56: '8',\n\t 57: '9',\n\t 59: '',\n\t 65: 'a',\n\t 66: 'b',\n\t 67: 'c',\n\t 68: 'd',\n\t 69: 'e',\n\t 70: 'f',\n\t 71: 'g',\n\t 72: 'h',\n\t 73: 'i',\n\t 74: 'j',\n\t 75: 'k',\n\t 76: 'l',\n\t 77: 'm',\n\t 78: 'n',\n\t 79: 'o',\n\t 80: 'p',\n\t 81: 'q',\n\t 82: 'r',\n\t 83: 's',\n\t 84: 't',\n\t 85: 'u',\n\t 86: 'v',\n\t 87: 'w',\n\t 88: 'x',\n\t 89: 'y',\n\t 90: 'z',\n\t 96: '0',\n\t 97: '1',\n\t 98: '2',\n\t 99: '3',\n\t 100: '4',\n\t 101: '5',\n\t 102: '6',\n\t 103: '7',\n\t 104: '8',\n\t 105: '9',\n\t 190: '.'\n\t }\n\t };\n\t /**\n\t * @desc Creates a new accessible mega menu instance.\n\t * @param {jquery} element\n\t * @param {object} [options] Mega Menu options\n\t * @param {string} [options.uuidPrefix=accessible-megamenu] - Prefix for generated unique id attributes, which are required to indicate aria-owns, aria-controls and aria-labelledby\n\t * @param {string} [options.menuClass=accessible-megamenu] - CSS class used to define the megamenu styling\n\t * @param {string} [options.topNavItemClass=accessible-megamenu-top-nav-item] - CSS class for a top-level navigation item in the megamenu\n\t * @param {string} [options.panelClass=accessible-megamenu-panel] - CSS class for a megamenu panel\n\t * @param {string} [options.panelGroupClass=accessible-megamenu-panel-group] - CSS class for a group of items within a megamenu panel\n\t * @param {string} [options.hoverClass=hover] - CSS class for the hover state\n\t * @param {string} [options.focusClass=focus] - CSS class for the focus state\n\t * @param {string} [options.openClass=open] - CSS class for the open state\n\t * @constructor\n\t */\n\t function AccessibleMegaMenu(element, options) {\n\t this.element = element;\n\t\n\t // merge optional settings and defaults into settings\n\t this.settings = $.extend({}, defaults, options);\n\t\n\t this._defaults = defaults;\n\t this._name = pluginName;\n\t\n\t this.mouseTimeoutID = null;\n\t this.focusTimeoutID = null;\n\t this.mouseFocused = false;\n\t this.justFocused = false;\n\t\n\t this.init();\n\t }\n\t\n\t AccessibleMegaMenu.prototype = function () {\n\t\n\t /* private attributes and methods ------------------------ */\n\t var uuid = 0,\n\t keydownTimeoutDuration = 1000,\n\t keydownSearchString = '',\n\t isTouch = typeof window.hasOwnProperty === 'function' && !!window.hasOwnProperty('ontouchstart'),\n\t _getPlugin,\n\t _addUniqueId,\n\t _togglePanel,\n\t _clickHandler,\n\t _clickOutsideHandler,\n\t _DOMAttrModifiedHandler,\n\t _focusInHandler,\n\t _focusOutHandler,\n\t _keyDownHandler,\n\t _mouseDownHandler,\n\t _mouseOverHandler,\n\t _mouseOutHandler,\n\t _toggleExpandedEventHandlers;\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_getPlugin\n\t * @desc Returns the parent accessibleMegaMenu instance for a given element\n\t * @param {jQuery} element\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _getPlugin = function _getPlugin(element) {\n\t return $(element).closest(':data(plugin_' + pluginName + ')').data('plugin_' + pluginName);\n\t };\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_addUniqueId\n\t * @desc Adds a unique id and element.\n\t * The id string starts with the\n\t * string defined in settings.uuidPrefix.\n\t * @param {jQuery} element\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _addUniqueId = function _addUniqueId(element) {\n\t element = $(element);\n\t var settings = this.settings;\n\t if (!element.attr('id')) {\n\t element.attr('id', settings.uuidPrefix + '-' + new Date().getTime() + '-' + ++uuid);\n\t }\n\t };\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_togglePanel\n\t * @desc Toggle the display of mega menu panels in response to an event.\n\t * The optional boolean value 'hide' forces all panels to hide.\n\t * @param {event} event\n\t * @param {Boolean} [hide] Hide all mega menu panels when true\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _togglePanel = function _togglePanel(event, hide) {\n\t var target = $(event.target),\n\t that = this,\n\t settings = this.settings,\n\t menu = this.menu,\n\t topli = target.closest('.' + settings.topNavItemClass),\n\t panel = target.hasClass(settings.panelClass) ? target : target.closest('.' + settings.panelClass),\n\t newfocus;\n\t\n\t _toggleExpandedEventHandlers.call(this, true);\n\t\n\t if (hide) {\n\t topli = menu.find('.' + settings.topNavItemClass + ' .' + settings.openClass + ':first').closest('.' + settings.topNavItemClass);\n\t if (!(topli.is(event.relatedTarget) || topli.has(event.relatedTarget).length > 0)) {\n\t if ((event.type === 'mouseout' || event.type === 'focusout') && topli.has(document.activeElement).length > 0) {\n\t return;\n\t }\n\t topli.find('[aria-expanded]').attr('aria-expanded', 'false').removeClass(settings.openClass).filter('.' + settings.panelClass).attr('aria-hidden', 'true');\n\t if (event.type === 'keydown' && event.keyCode === Keyboard.ESCAPE || event.type === 'DOMAttrModified') {\n\t newfocus = topli.find(':tabbable:first');\n\t setTimeout(function () {\n\t menu.find('[aria-expanded].' + that.settings.panelClass).off('DOMAttrModified.accessible-megamenu');\n\t newfocus.focus();\n\t that.justFocused = false;\n\t }, 99);\n\t }\n\t } else if (topli.length === 0) {\n\t menu.find('[aria-expanded=true]').attr('aria-expanded', 'false').removeClass(settings.openClass).filter('.' + settings.panelClass).attr('aria-hidden', 'true');\n\t }\n\t } else {\n\t clearTimeout(that.focusTimeoutID);\n\t topli.siblings().find('[aria-expanded]').attr('aria-expanded', 'false').removeClass(settings.openClass).filter('.' + settings.panelClass).attr('aria-hidden', 'true');\n\t topli.find('[aria-expanded]').attr('aria-expanded', 'true').addClass(settings.openClass).filter('.' + settings.panelClass).attr('aria-hidden', 'false');\n\t if (event.type === 'mouseover' && target.is(':tabbable') && topli.length === 1 && panel.length === 0 && menu.has(document.activeElement).length > 0) {\n\t target.focus();\n\t that.justFocused = false;\n\t }\n\t\n\t _toggleExpandedEventHandlers.call(that);\n\t }\n\t };\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_clickHandler\n\t * @desc Handle click event on mega menu item\n\t * @param {event} Event object\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _clickHandler = function _clickHandler(event) {\n\t var target = $(event.currentTarget),\n\t topli = target.closest('.' + this.settings.topNavItemClass),\n\t panel = target.closest('.' + this.settings.panelClass);\n\t if (topli.length === 1 && panel.length === 0 && topli.find('.' + this.settings.panelClass).length === 1) {\n\t if (!target.hasClass(this.settings.openClass)) {\n\t event.preventDefault();\n\t event.stopPropagation();\n\t _togglePanel.call(this, event);\n\t this.justFocused = false;\n\t } else {\n\t if (this.justFocused) {\n\t event.preventDefault();\n\t event.stopPropagation();\n\t this.justFocused = false;\n\t } else if (isTouch) {\n\t event.preventDefault();\n\t event.stopPropagation();\n\t _togglePanel.call(this, event, target.hasClass(this.settings.openClass));\n\t }\n\t }\n\t }\n\t };\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_clickOutsideHandler\n\t * @desc Handle click event outside of a the megamenu\n\t * @param {event} Event object\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _clickOutsideHandler = function _clickOutsideHandler(event) {\n\t if ($(event.target).closest(this.menu).length === 0) {\n\t event.preventDefault();\n\t event.stopPropagation();\n\t _togglePanel.call(this, event, true);\n\t }\n\t };\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_DOMAttrModifiedHandler\n\t * @desc Handle DOMAttrModified event on panel to respond to Windows 8 Narrator ExpandCollapse pattern\n\t * @param {event} Event object\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _DOMAttrModifiedHandler = function _DOMAttrModifiedHandler(event) {\n\t if (event.originalEvent.attrName === 'aria-expanded' && event.originalEvent.newValue === 'false' && $(event.target).hasClass(this.settings.openClass)) {\n\t event.preventDefault();\n\t event.stopPropagation();\n\t _togglePanel.call(this, event, true);\n\t }\n\t };\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_focusInHandler\n\t * @desc Handle focusin event on mega menu item.\n\t * @param {event} Event object\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _focusInHandler = function _focusInHandler(event) {\n\t clearTimeout(this.focusTimeoutID);\n\t var target = $(event.target),\n\t panel = target.closest('.' + this.settings.panelClass);\n\t target.addClass(this.settings.focusClass).on('click.accessible-megamenu', $.proxy(_clickHandler, this));\n\t this.justFocused = !this.mouseFocused;\n\t this.mouseFocused = false;\n\t if (this.panels.not(panel).filter('.' + this.settings.openClass).length) {\n\t _togglePanel.call(this, event);\n\t }\n\t };\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_focusOutHandler\n\t * @desc Handle focusout event on mega menu item.\n\t * @param {event} Event object\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _focusOutHandler = function _focusOutHandler(event) {\n\t this.justFocused = false;\n\t var that = this,\n\t target = $(event.target),\n\t topli = target.closest('.' + this.settings.topNavItemClass);\n\t\n\t target\n\t // .removeClass(this.settings.focusClass)\n\t .off('click.accessible-megamenu');\n\t\n\t if (window.cvox) {\n\t // If ChromeVox is running...\n\t that.focusTimeoutID = setTimeout(function () {\n\t window.cvox.Api.getCurrentNode(function (node) {\n\t if (topli.has(node).length) {\n\t // and the current node being voiced is in\n\t // the mega menu, clearTimeout,\n\t // so the panel stays open.\n\t clearTimeout(that.focusTimeoutID);\n\t } else {\n\t that.focusTimeoutID = setTimeout(function (scope, _event, hide) {\n\t _togglePanel.call(scope, _event, hide);\n\t }, 275, that, event, true);\n\t }\n\t });\n\t }, 25);\n\t } else {\n\t that.focusTimeoutID = setTimeout(function () {\n\t _togglePanel.call(that, event, true);\n\t }, 300);\n\t }\n\t };\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_keyDownHandler\n\t * @desc Handle keydown event on mega menu.\n\t * @param {event} Event object\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _keyDownHandler = function _keyDownHandler(event) {\n\t var that = this.constructor === AccessibleMegaMenu ? this : _getPlugin(this),\n\t // determine the AccessibleMegaMenu plugin instance\n\t settings = that.settings,\n\t target = $($(this).is('.' + settings.hoverClass + ':tabbable') ? this : event.target),\n\t // if the element is hovered the target is this, otherwise, its the focused element\n\t menu = that.menu,\n\t topnavitems = that.topnavitems,\n\t topli = target.closest('.' + settings.topNavItemClass),\n\t tabbables = menu.find(':tabbable'),\n\t panel = target.hasClass(settings.panelClass) ? target : target.closest('.' + settings.panelClass),\n\t panelGroups = panel.find('.' + settings.panelGroupClass),\n\t currentPanelGroup = target.closest('.' + settings.panelGroupClass),\n\t next,\n\t keycode = event.keyCode || event.which,\n\t start,\n\t i,\n\t o,\n\t label,\n\t found = false,\n\t newString = Keyboard.keyMap[event.keyCode] || '',\n\t regex,\n\t isTopNavItem = topli.length === 1 && panel.length === 0;\n\t\n\t if (target.is('input:focus, select:focus, textarea:focus, button:focus')) {\n\t // if the event target is a form element we should handle keydown normally\n\t return;\n\t }\n\t\n\t if (target.is('.' + settings.hoverClass + ':tabbable')) {\n\t $('html').off('keydown.accessible-megamenu');\n\t }\n\t\n\t switch (keycode) {\n\t case Keyboard.ESCAPE:\n\t _togglePanel.call(that, event, true);\n\t break;\n\t case Keyboard.DOWN:\n\t event.preventDefault();\n\t if (isTopNavItem) {\n\t _togglePanel.call(that, event);\n\t found = topli.find('.' + settings.panelClass + ' :tabbable:first').focus().length === 1;\n\t } else {\n\t found = tabbables.filter(':gt(' + tabbables.index(target) + '):first').focus().length === 1;\n\t }\n\t\n\t if (!found && window.opera && opera.toString() === '[object Opera]' && (event.ctrlKey || event.metaKey)) {\n\t tabbables = $(':tabbable');\n\t i = tabbables.index(target);\n\t found = $(':tabbable:gt(' + $(':tabbable').index(target) + '):first').focus().length === 1;\n\t }\n\t break;\n\t case Keyboard.UP:\n\t event.preventDefault();\n\t if (isTopNavItem && target.hasClass(settings.openClass)) {\n\t _togglePanel.call(that, event, true);\n\t next = topnavitems.filter(':lt(' + topnavitems.index(topli) + '):last');\n\t if (next.children('.' + settings.panelClass).length) {\n\t found = next.children().attr('aria-expanded', 'true').addClass(settings.openClass).filter('.' + settings.panelClass).attr('aria-hidden', 'false').find(':tabbable:last').focus() === 1;\n\t }\n\t } else if (!isTopNavItem) {\n\t found = tabbables.filter(':lt(' + tabbables.index(target) + '):last').focus().length === 1;\n\t }\n\t\n\t if (!found && window.opera && opera.toString() === '[object Opera]' && (event.ctrlKey || event.metaKey)) {\n\t tabbables = $(':tabbable');\n\t i = tabbables.index(target);\n\t found = $(':tabbable:lt(' + $(':tabbable').index(target) + '):first').focus().length === 1;\n\t }\n\t break;\n\t case Keyboard.RIGHT:\n\t event.preventDefault();\n\t if (isTopNavItem) {\n\t found = topnavitems.filter(':gt(' + topnavitems.index(topli) + '):first').find(':tabbable:first').focus().length === 1;\n\t } else {\n\t if (panelGroups.length && currentPanelGroup.length) {\n\t // if the current panel contains panel groups, and we are able to focus the first tabbable element of the next panel group\n\t found = panelGroups.filter(':gt(' + panelGroups.index(currentPanelGroup) + '):first').find(':tabbable:first').focus().length === 1;\n\t }\n\t\n\t if (!found) {\n\t found = topli.find(':tabbable:first').focus().length === 1;\n\t }\n\t }\n\t break;\n\t case Keyboard.LEFT:\n\t event.preventDefault();\n\t if (isTopNavItem) {\n\t found = topnavitems.filter(':lt(' + topnavitems.index(topli) + '):last').find(':tabbable:first').focus().length === 1;\n\t } else {\n\t if (panelGroups.length && currentPanelGroup.length) {\n\t // if the current panel contains panel groups, and we are able to focus the first tabbable element of the previous panel group\n\t found = panelGroups.filter(':lt(' + panelGroups.index(currentPanelGroup) + '):last').find(':tabbable:first').focus().length === 1;\n\t }\n\t\n\t if (!found) {\n\t found = topli.find(':tabbable:first').focus().length === 1;\n\t }\n\t }\n\t break;\n\t case Keyboard.TAB:\n\t i = tabbables.index(target);\n\t if (event.shiftKey && isTopNavItem && target.hasClass(settings.openClass)) {\n\t _togglePanel.call(that, event, true);\n\t next = topnavitems.filter(':lt(' + topnavitems.index(topli) + '):last');\n\t if (next.children('.' + settings.panelClass).length) {\n\t found = next.children().attr('aria-expanded', 'true').addClass(settings.openClass).filter('.' + settings.panelClass).attr('aria-hidden', 'false').find(':tabbable:last').focus();\n\t }\n\t } else if (event.shiftKey && i > 0) {\n\t found = tabbables.filter(':lt(' + i + '):last').focus().length === 1;\n\t } else if (!event.shiftKey && i < tabbables.length - 1) {\n\t found = tabbables.filter(':gt(' + i + '):first').focus().length === 1;\n\t } else if (window.opera && opera.toString() === '[object Opera]') {\n\t tabbables = $(':tabbable');\n\t i = tabbables.index(target);\n\t if (event.shiftKey) {\n\t found = $(':tabbable:lt(' + $(':tabbable').index(target) + '):last').focus().length === 1;\n\t } else {\n\t found = $(':tabbable:gt(' + $(':tabbable').index(target) + '):first').focus().length === 1;\n\t }\n\t }\n\t\n\t if (found) {\n\t event.preventDefault();\n\t }\n\t break;\n\t case Keyboard.SPACE:\n\t if (isTopNavItem) {\n\t event.preventDefault();\n\t _clickHandler.call(that, event);\n\t } else {\n\t return;\n\t }\n\t break;\n\t case Keyboard.ENTER:\n\t return;\n\t break;\n\t default:\n\t // alphanumeric filter\n\t clearTimeout(this.keydownTimeoutID);\n\t\n\t keydownSearchString += newString !== keydownSearchString ? newString : '';\n\t\n\t if (keydownSearchString.length === 0) {\n\t return;\n\t }\n\t\n\t this.keydownTimeoutID = setTimeout(function () {\n\t keydownSearchString = '';\n\t }, keydownTimeoutDuration);\n\t\n\t if (isTopNavItem && !target.hasClass(settings.openClass)) {\n\t tabbables = tabbables.filter(':not(.' + settings.panelClass + ' :tabbable)');\n\t } else {\n\t tabbables = topli.find(':tabbable');\n\t }\n\t\n\t if (event.shiftKey) {\n\t tabbables = $(tabbables.get().reverse());\n\t }\n\t\n\t for (i = 0; i < tabbables.length; i++) {\n\t o = tabbables.eq(i);\n\t if (o.is(target)) {\n\t start = keydownSearchString.length === 1 ? i + 1 : i;\n\t break;\n\t }\n\t }\n\t\n\t regex = new RegExp('^' + keydownSearchString.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&'), 'i');\n\t\n\t for (i = start; i < tabbables.length; i++) {\n\t o = tabbables.eq(i);\n\t label = $.trim(o.text());\n\t if (regex.test(label)) {\n\t found = true;\n\t o.focus();\n\t break;\n\t }\n\t }\n\t if (!found) {\n\t for (i = 0; i < start; i++) {\n\t o = tabbables.eq(i);\n\t label = $.trim(o.text());\n\t if (regex.test(label)) {\n\t o.focus();\n\t break;\n\t }\n\t }\n\t }\n\t break;\n\t }\n\t that.justFocused = false;\n\t };\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_mouseDownHandler\n\t * @desc Handle mousedown event on mega menu.\n\t * @param {event} Event object\n\t * @memberof accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _mouseDownHandler = function _mouseDownHandler(event) {\n\t if ($(event.target).is(this.settings.panelClass) || $(event.target).closest(':focusable').length) {\n\t this.mouseFocused = true;\n\t }\n\t this.mouseTimeoutID = setTimeout(function () {\n\t clearTimeout(this.focusTimeoutID);\n\t }, 1);\n\t };\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_mouseOverHandler\n\t * @desc Handle mouseover event on mega menu.\n\t * @param {event} Event object\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _mouseOverHandler = function _mouseOverHandler(event) {\n\t clearTimeout(this.mouseTimeoutID);\n\t $(event.target).addClass(this.settings.hoverClass);\n\t _togglePanel.call(this, event);\n\t if ($(event.target).is(':tabbable')) {\n\t $('html').on('keydown.accessible-megamenu', $.proxy(_keyDownHandler, event.target));\n\t }\n\t };\n\t\n\t /**\n\t * @name jQuery.fn.accessibleMegaMenu~_mouseOutHandler\n\t * @desc Handle mouseout event on mega menu.\n\t * @param {event} Event object\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @inner\n\t * @private\n\t */\n\t _mouseOutHandler = function _mouseOutHandler(event) {\n\t var that = this;\n\t $(event.target).removeClass(that.settings.hoverClass);\n\t\n\t that.mouseTimeoutID = setTimeout(function () {\n\t _togglePanel.call(that, event, true);\n\t }, 250);\n\t if ($(event.target).is(':tabbable')) {\n\t $('html').off('keydown.accessible-megamenu');\n\t }\n\t };\n\t\n\t _toggleExpandedEventHandlers = function _toggleExpandedEventHandlers(hide) {\n\t var menu = this.menu;\n\t if (hide) {\n\t $('html').off('mouseup.outside-accessible-megamenu, touchend.outside-accessible-megamenu, mspointerup.outside-accessible-megamenu, pointerup.outside-accessible-megamenu');\n\t\n\t menu.find('[aria-expanded].' + this.settings.panelClass).off('DOMAttrModified.accessible-megamenu');\n\t } else {\n\t $('html').on('mouseup.outside-accessible-megamenu, touchend.outside-accessible-megamenu, mspointerup.outside-accessible-megamenu, pointerup.outside-accessible-megamenu', $.proxy(_clickOutsideHandler, this));\n\t\n\t /* Narrator in Windows 8 automatically toggles the aria-expanded property on double tap or click.\n\t To respond to the change to collapse the panel, we must add a listener for a DOMAttrModified event. */\n\t menu.find('[aria-expanded=true].' + this.settings.panelClass).on('DOMAttrModified.accessible-megamenu', $.proxy(_DOMAttrModifiedHandler, this));\n\t }\n\t };\n\t\n\t /* public attributes and methods ------------------------- */\n\t return {\n\t constructor: AccessibleMegaMenu,\n\t\n\t /**\n\t * @lends jQuery.fn.accessibleMegaMenu\n\t * @desc Initializes an instance of the accessibleMegaMenu plugins\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @instance\n\t */\n\t init: function init() {\n\t var settings = this.settings,\n\t nav = $(this.element),\n\t menu = nav.children().first(),\n\t\n\t // Only filter to those items with the selector class\n\t topnavitems = this.settings.topNavItems ? menu.children(this.settings.topNavItems) : menu.children();\n\t this.start(settings, nav, menu, topnavitems);\n\t },\n\t\n\t start: function start(settings, nav, menu, topnavitems) {\n\t var that = this;\n\t this.settings = settings;\n\t this.menu = menu;\n\t this.topnavitems = topnavitems;\n\t\n\t nav.attr('role', 'navigation');\n\t menu.addClass(settings.menuClass);\n\t topnavitems.each(function (i, topnavitem) {\n\t var topnavitemlink, topnavitempanel;\n\t topnavitem = $(topnavitem);\n\t // @FIXME: Add classed manually !!!\n\t // topnavitem.addClass(settings.topNavItemClass)\n\t topnavitemlink = topnavitem.find(':tabbable:first');\n\t topnavitempanel = topnavitem.children(':not(:tabbable):last');\n\t _addUniqueId.call(that, topnavitemlink);\n\t if (topnavitempanel.length) {\n\t _addUniqueId.call(that, topnavitempanel);\n\t topnavitemlink.attr({\n\t 'aria-haspopup': true,\n\t 'aria-controls': topnavitempanel.attr('id'),\n\t 'aria-expanded': false\n\t });\n\t\n\t topnavitempanel.attr({\n\t 'role': 'group',\n\t 'aria-expanded': false,\n\t 'aria-hidden': true\n\t }).addClass(settings.panelClass).not('[aria-labelledby]').attr('aria-labelledby', topnavitemlink.attr('id'));\n\t }\n\t });\n\t\n\t this.panels = menu.find('.' + settings.panelClass);\n\t\n\t menu.on('focusin.accessible-megamenu', ':focusable, .' + settings.panelClass, $.proxy(_focusInHandler, this)).on('focusout.accessible-megamenu', ':focusable, .' + settings.panelClass, $.proxy(_focusOutHandler, this)).on('keydown.accessible-megamenu', $.proxy(_keyDownHandler, this)).on('mousedown.accessible-megamenu', $.proxy(_mouseDownHandler, this));\n\t\n\t if (!settings.openOnClick) {\n\t menu.on('mouseover.accessible-megamenu', $.proxy(_mouseOverHandler, this)).on('mouseout.accessible-megamenu', $.proxy(_mouseOutHandler, this));\n\t } else {\n\t menu.on('click.accessible-megamenu', $.proxy(_mouseOverHandler, this));\n\t }\n\t\n\t if (isTouch) {\n\t menu.on('touchstart.accessible-megamenu', $.proxy(_clickHandler, this));\n\t }\n\t\n\t menu.find('hr').attr('role', 'separator');\n\t\n\t if ($(document.activeElement).closest(menu).length) {\n\t $(document.activeElement).trigger('focusin.accessible-megamenu');\n\t }\n\t },\n\t\n\t /**\n\t * @desc Get default values\n\t * @example $(selector).accessibleMegaMenu('getDefaults')\n\t * @return {object}\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @instance\n\t */\n\t getDefaults: function getDefaults() {\n\t return this._defaults;\n\t },\n\t\n\t /**\n\t * @desc Get any option set to plugin using its name (as string)\n\t * @example $(selector).accessibleMegaMenu('getOption', some_option)\n\t * @param {string} opt\n\t * @return {string}\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @instance\n\t */\n\t getOption: function getOption(opt) {\n\t return this.settings[opt];\n\t },\n\t\n\t /**\n\t * @desc Get all options\n\t * @example $(selector).accessibleMegaMenu('getAllOptions')\n\t * @return {object}\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @instance\n\t */\n\t getAllOptions: function getAllOptions() {\n\t return this.settings;\n\t },\n\t\n\t /**\n\t * @desc Set option\n\t * @example $(selector).accessibleMegaMenu('setOption', 'option_name', 'option_value', reinitialize)\n\t * @param {string} opt - Option name\n\t * @param {string} val - Option value\n\t * @param {boolean} [reinitialize] - boolean to re-initialize the menu.\n\t * @memberof jQuery.fn.accessibleMegaMenu\n\t * @instance\n\t */\n\t setOption: function setOption(opt, value, reinitialize) {\n\t this.settings[opt] = value;\n\t if (reinitialize) {\n\t this.init();\n\t }\n\t }\n\t };\n\t }();\n\t\n\t /*\n\t * @param {object} [options] Mega Menu options\n\t * @param {string} [options.uuidPrefix=accessible-megamenu] - Prefix for generated unique id attributes, which are required to indicate aria-owns, aria-controls and aria-labelledby\n\t * @param {string} [options.menuClass=accessible-megamenu] - CSS class used to define the megamenu styling\n\t * @param {string} [options.topNavItemClass=accessible-megamenu-top-nav-item] - CSS class for a top-level navigation item in the megamenu\n\t * @param {string} [options.panelClass=accessible-megamenu-panel] - CSS class for a megamenu panel\n\t * @param {string} [options.panelGroupClass=accessible-megamenu-panel-group] - CSS class for a group of items within a megamenu panel\n\t * @param {string} [options.hoverClass=hover] - CSS class for the hover state\n\t * @param {string} [options.focusClass=focus] - CSS class for the focus state\n\t * @param {string} [options.openClass=open] - CSS class for the open state\n\t */\n\t $.fn[pluginName] = function (options) {\n\t return this.each(function () {\n\t if (!$.data(this, 'plugin_' + pluginName)) {\n\t $.data(this, 'plugin_' + pluginName, new $.fn[pluginName].AccessibleMegaMenu(this, options));\n\t }\n\t });\n\t };\n\t\n\t $.fn[pluginName].AccessibleMegaMenu = AccessibleMegaMenu;\n\t\n\t /* :focusable and :tabbable selectors from\n\t https://raw.github.com/jquery/jquery-ui/master/ui/jquery.ui.core.js */\n\t\n\t /**\n\t * @private\n\t */\n\t function visible(element) {\n\t return $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function () {\n\t return $.css(this, 'visibility') === 'hidden';\n\t }).length;\n\t }\n\t\n\t /**\n\t * @private\n\t */\n\t function _focusable(element, isTabIndexNotNaN) {\n\t var map,\n\t mapName,\n\t img,\n\t nodeName = element.nodeName.toLowerCase();\n\t if ('area' === nodeName) {\n\t map = element.parentNode;\n\t mapName = map.name;\n\t if (!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {\n\t return false;\n\t }\n\t img = $('img[usemap=#' + mapName + ']')[0];\n\t return !!img && visible(img);\n\t }\n\t return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) &&\n\t // the element and all of its ancestors must be visible\n\t visible(element);\n\t }\n\t\n\t $.extend($.expr[':'], {\n\t data: $.expr.createPseudo ? $.expr.createPseudo(function (dataName) {\n\t return function (elem) {\n\t return !!$.data(elem, dataName);\n\t };\n\t }) : // support: jQuery <1.8\n\t function (elem, i, match) {\n\t return !!$.data(elem, match[3]);\n\t },\n\t\n\t focusable: function focusable(element) {\n\t return _focusable(element, !isNaN($.attr(element, 'tabindex')));\n\t },\n\t\n\t tabbable: function tabbable(element) {\n\t var tabIndex = $.attr(element, 'tabindex'),\n\t isTabIndexNaN = isNaN(tabIndex);\n\t return (isTabIndexNaN || tabIndex >= 0) && _focusable(element, !isTabIndexNaN);\n\t }\n\t });\n\t})(jQuery, window, document);\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tvar _offcanvas = __webpack_require__(32);\n\t\n\tvar _offcanvas2 = _interopRequireDefault(_offcanvas);\n\t\n\tvar _offcanvas3 = __webpack_require__(33);\n\t\n\tvar _offcanvas4 = _interopRequireDefault(_offcanvas3);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t/* eslint-enable */\n\t\n\tvar opts = {\n\t // String - panel\n\t panelSelector: '.Offcanvas',\n\t\n\t // String - content\n\t contentSelector: '.Offcanvas-content',\n\t\n\t // String - content\n\t modalSelector: '.Offcanvas--modal',\n\t\n\t // String - trigger\n\t jsSelector: '.js-fr-offcanvas-open',\n\t\n\t // String - Selector for the open button(s)\n\t openSelector: '.js-fr-offcanvas-open',\n\t\n\t // String - Selector for the close button\n\t closeSelector: '.js-fr-offcanvas-close',\n\t\n\t // String - Class name that will be added to the selector when the component has been initialised\n\t readyClass: 'is-ready',\n\t\n\t // String - Class name that will be added to the selector when the panel is visible\n\t activeClass: 'is-active'\n\t};\n\t\n\t/*\n\t * Prevent scroll on body when offcanvas is visible\n\t * (the touchmove handler targets iOS devices)\n\t */\n\t\n\t\n\t/* eslint-disable no-unused-vars */\n\t\n\tvar _handleModalScroll = function _handleModalScroll() {\n\t (0, _jquery2['default'])(opts.contentSelector).on('transitionend', function () {\n\t if (!(0, _jquery2['default'])(opts.panelSelector).hasClass(opts.activeClass)) {\n\t (0, _jquery2['default'])(window).off('scroll.offcanvas');\n\t (0, _jquery2['default'])(document).off('touchmove.offcanvas');\n\t } else {\n\t var _scrollTop = (0, _jquery2['default'])(window).scrollTop();\n\t (0, _jquery2['default'])(window).on('scroll.offcanvas', function () {\n\t return (0, _jquery2['default'])(window).scrollTop(_scrollTop);\n\t });\n\t (0, _jquery2['default'])(document).on('touchmove.offcanvas', function () {\n\t return (0, _jquery2['default'])(window).scrollTop(_scrollTop);\n\t });\n\t }\n\t });\n\t};\n\t\n\t/*\n\t *\tFIXME: hack to show / hide the background panel\n\t */\n\tvar _handleModal = function _handleModal(e) {\n\t if (e && (0, _jquery2['default'])(opts.panelSelector).hasClass(opts.activeClass) && !(0, _jquery2['default'])(e.target).is(opts.contentSelector)) {\n\t // for some odd reason plain jquery click() does not work here\n\t // // so we add that get(0) call\n\t (0, _jquery2['default'])(opts.closeSelector).get(0).click();\n\t }\n\t // we're using \"one\" here instead of \"bind\" because\n\t // otherwise $(opts.closeSelector).click() would trigger\n\t // a click on modal again looping forever\n\t (0, _jquery2['default'])(opts.modalSelector).one('click', _handleModal);\n\t};\n\t\n\tvar _exports = {\n\t Froffcanvas: _offcanvas2['default'],\n\t opts: opts\n\t};\n\t\n\t(0, _jquery2['default'])(document).ready(function () {\n\t var _scrollTop = (0, _jquery2['default'])(window).scrollTop();\n\t\n\t (0, _jquery2['default'])(opts.openSelector).add((0, _jquery2['default'])(opts.closeSelector)).click(function (e) {\n\t _scrollTop = (0, _jquery2['default'])(window).scrollTop();\n\t e.preventDefault();\n\t });\n\t\n\t (0, _jquery2['default'])(opts.panelSelector).on('focus', function () {\n\t (0, _jquery2['default'])(window).scrollTop(_scrollTop);\n\t });\n\t\n\t _handleModal();\n\t _handleModalScroll();\n\t\n\t _exports.offcanvas = (0, _offcanvas2['default'])(opts);\n\t});\n\t\n\texports['default'] = _exports;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 32 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// Polyfill matches as per https://github.com/jonathantneal/closest\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tElement.prototype.matches = Element.prototype.matches || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t\n\t/**\n\t * @param {object} options Object containing configuration overrides\n\t */\n\tvar Froffcanvas = function Froffcanvas() {\n\t var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n\t _ref$selector = _ref.selector,\n\t selector = _ref$selector === undefined ? '.js-fr-offcanvas' : _ref$selector,\n\t _ref$openSelector = _ref.openSelector,\n\t openSelector = _ref$openSelector === undefined ? '.js-fr-offcanvas-open' : _ref$openSelector,\n\t _ref$closeSelector = _ref.closeSelector,\n\t closeSelector = _ref$closeSelector === undefined ? '.js-fr-offcanvas-close' : _ref$closeSelector,\n\t _ref$readyClass = _ref.readyClass,\n\t readyClass = _ref$readyClass === undefined ? 'fr-offcanvas--is-ready' : _ref$readyClass,\n\t _ref$activeClass = _ref.activeClass,\n\t activeClass = _ref$activeClass === undefined ? 'fr-offcanvas--is-active' : _ref$activeClass;\n\t\n\t // CONSTANTS\n\t var doc = document;\n\t var docEl = doc.documentElement;\n\t var _q = function _q(el) {\n\t var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : doc;\n\t return [].slice.call(ctx.querySelectorAll(el));\n\t };\n\t\n\t // SUPPORTS\n\t if (!('querySelector' in doc) || !('addEventListener' in window) || !docEl.classList) return;\n\t\n\t // SETUP\n\t // set offcanvas element NodeLists\n\t var panels = _q(selector);\n\t\n\t // TEMP\n\t var currButtonOpen = null;\n\t var currPanel = null;\n\t\n\t // UTILS\n\t function _defer(fn) {\n\t // wrapped in setTimeout to delay binding until previous rendering has completed\n\t if (typeof fn === 'function') setTimeout(fn, 0);\n\t }\n\t function _closest(el, selector) {\n\t while (el) {\n\t if (el.matches(selector)) break;\n\t el = el.parentElement;\n\t }\n\t return el;\n\t }\n\t function _getPanelId(panel) {\n\t return panel.getAttribute('id');\n\t }\n\t\n\t // A11Y\n\t function _addA11y(panel) {\n\t // add aria-hidden attribute\n\t panel.setAttribute('aria-hidden', true);\n\t }\n\t function _removeA11y(panel) {\n\t // remove aria-hidden attribute\n\t panel.removeAttribute('aria-hidden');\n\t }\n\t\n\t // ACTIONS\n\t function _showPanel(panel) {\n\t // set visibility to override any previous set style\n\t panel.style.visibility = 'visible';\n\t // remove aria-hidden, add focus\n\t panel.setAttribute('aria-hidden', false);\n\t panel.setAttribute('tabindex', -1);\n\t panel.focus();\n\t // sort out events\n\t _defer(_unbindOpenPointer);\n\t _defer(_bindDocKey);\n\t _defer(_bindDocClick);\n\t _defer(_bindClosePointer);\n\t // reset scroll position\n\t panel.scrollTop = 0;\n\t // add active class\n\t panel.classList.add(activeClass);\n\t }\n\t function _hidePanel() {\n\t var panel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : currPanel;\n\t var returnfocus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\t\n\t // add aria-hidden, remove focus\n\t panel.setAttribute('aria-hidden', true);\n\t panel.removeAttribute('tabindex');\n\t panel.blur();\n\t // set visibility to override any previous set style\n\t panel.style.visibility = 'hidden';\n\t // sort out events\n\t _unbindClosePointer(panel);\n\t _unbindDocKey();\n\t _unbindDocClick();\n\t _bindOpenPointer(panel);\n\t // remove active class\n\t panel.classList.remove(activeClass);\n\t // return focus to button that opened the panel and reset the reference\n\t if (returnfocus) {\n\t currButtonOpen.focus();\n\t currButtonOpen = null;\n\t }\n\t }\n\t function destroy() {\n\t panels.forEach(function (panel) {\n\t // remove attributes\n\t _removeA11y(panel);\n\t // unbind local events\n\t _unbindOpenPointer(panel);\n\t _unbindClosePointer(panel);\n\t // remove class\n\t panel.classList.remove(readyClass);\n\t panel.classList.remove(activeClass);\n\t panel.style.visibility = '';\n\t });\n\t // unbind global events\n\t _unbindDocClick();\n\t _unbindDocKey();\n\t // reset temp references\n\t currButtonOpen = null;\n\t currPanel = null;\n\t }\n\t\n\t // EVENTS\n\t function _eventOpenPointer(e) {\n\t // get panel\n\t var panelId = e.currentTarget.getAttribute('aria-controls');\n\t var panel = doc.getElementById(panelId);\n\t // hide any open panels\n\t if (currPanel) _hidePanel(currPanel, false);\n\t // save temp panel/button\n\t currButtonOpen = e.currentTarget;\n\t currPanel = panel;\n\t // show\n\t _showPanel(panel);\n\t }\n\t function _eventClosePointer() {\n\t _hidePanel();\n\t }\n\t function _eventDocClick(e) {\n\t // check if target is panel or child of\n\t var isPanel = e.target === currPanel;\n\t var isPanelChild = _closest(e.target, selector);\n\t if (!isPanel && !isPanelChild) _hidePanel();\n\t }\n\t function _eventDocKey(e) {\n\t // esc key\n\t if (e.keyCode === 27) _hidePanel();\n\t }\n\t\n\t // BIND EVENTS\n\t function _bindOpenPointer(panel) {\n\t var openButtons = _q(openSelector + '[aria-controls=\"' + _getPanelId(panel) + '\"]'); // is this selector totally crazy?\n\t openButtons.forEach(function (button) {\n\t return button.addEventListener('click', _eventOpenPointer);\n\t });\n\t }\n\t function _bindClosePointer() {\n\t var panel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : currPanel;\n\t\n\t var closeButton = _q(closeSelector, panel)[0];\n\t closeButton.addEventListener('click', _eventClosePointer);\n\t }\n\t function _bindDocClick() {\n\t doc.addEventListener('click', _eventDocClick);\n\t }\n\t function _bindDocKey() {\n\t doc.addEventListener('keydown', _eventDocKey);\n\t }\n\t\n\t // UNBIND EVENTS\n\t function _unbindOpenPointer() {\n\t var panel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : currPanel;\n\t\n\t var openButtons = _q(openSelector + '[aria-controls=\"' + _getPanelId(panel) + '\"]'); // yep its totally crazy\n\t openButtons.forEach(function (button) {\n\t return button.removeEventListener('click', _eventOpenPointer);\n\t });\n\t }\n\t function _unbindClosePointer() {\n\t var panel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : currPanel;\n\t\n\t var closeButton = _q(closeSelector, panel)[0];\n\t closeButton.removeEventListener('click', _eventClosePointer);\n\t }\n\t function _unbindDocClick() {\n\t doc.removeEventListener('click', _eventDocClick);\n\t }\n\t function _unbindDocKey() {\n\t doc.removeEventListener('keydown', _eventDocKey);\n\t }\n\t\n\t // INIT\n\t function init() {\n\t if (!panels) return;\n\t // loop through each offcanvas element\n\t panels.forEach(function (panel) {\n\t _addA11y(panel);\n\t _bindOpenPointer(panel);\n\t panel.classList.add(readyClass);\n\t });\n\t }\n\t init();\n\t\n\t // REVEAL API\n\t return {\n\t init: init,\n\t destroy: destroy\n\t };\n\t};\n\t\n\t// module exports\n\texports['default'] = Froffcanvas;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 33 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 34 */,\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t/*\n\t * Randomize order of children in container (.js-randomize)\n\t */\n\t(0, _jquery2['default'])(function () {\n\t var CONTAINER_SELECTOR = '.js-randomize';\n\t var EXCLUDE_SELECTOR = '.js-randomize-exclude';\n\t\n\t function shuffle(o) {\n\t for (var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x) {}\n\t return o;\n\t }\n\t\n\t (0, _jquery2['default'])(CONTAINER_SELECTOR).each(function (i, container) {\n\t var $container = (0, _jquery2['default'])(container);\n\t $container.html(shuffle($container.children().not(EXCLUDE_SELECTOR).get()));\n\t });\n\t});\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tvar _throttle = __webpack_require__(6);\n\t\n\tvar _throttle2 = _interopRequireDefault(_throttle);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar threshold = 100;\n\t\n\tvar _toggleScrolltop = function _toggleScrolltop() {\n\t (0, _jquery2['default'])(window).scrollTop() > threshold ? (0, _jquery2['default'])('.js-scrollTop').show() : (0, _jquery2['default'])('.js-scrollTop').hide();\n\t};\n\t\n\t(0, _jquery2['default'])(window).scroll((0, _throttle2['default'])(500, _toggleScrolltop));\n\t(0, _jquery2['default'])(document).ready(_toggleScrolltop);\n\t\n\texports['default'] = {\n\t threshold: threshold\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _frBypasslinks = __webpack_require__(38);\n\t\n\tvar _frBypasslinks2 = _interopRequireDefault(_frBypasslinks);\n\t\n\tvar _bypasslinks = __webpack_require__(39);\n\t\n\tvar _bypasslinks2 = _interopRequireDefault(_bypasslinks);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t/* eslint-enable */\n\t\n\tvar bypassLinks = (0, _frBypasslinks2['default'])({\n\t selector: '.js-fr-bypasslinks'\n\t});\n\t\n\t/* eslint-disable no-unused-vars */\n\t\n\texports['default'] = { bypassLinks: bypassLinks, Frbypasslinks: _frBypasslinks2['default'] };\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 38 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * @param {object} options Object containing configuration overrides\n\t */\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\tvar Frbypasslinks = function Frbypasslinks() {\n\t\tvar _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n\t\t _ref$selector = _ref.selector,\n\t\t selector = _ref$selector === undefined ? '.js-fr-bypasslinks' : _ref$selector;\n\t\n\t\t//\tCONSTANTS\n\t\tvar doc = document;\n\t\tvar _q = function _q(el) {\n\t\t\tvar ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : doc;\n\t\t\treturn [].slice.call(ctx.querySelectorAll(el));\n\t\t};\n\t\n\t\t//\tSUPPORTS\n\t\tif (!('querySelector' in doc) || !('addEventListener' in window)) return;\n\t\n\t\t//\tSETUP\n\t\t// get bypass links NodeList\n\t\tvar container = _q(selector)[0];\n\t\n\t\t//\tTEMP\n\t\tvar currTarget = null;\n\t\n\t\t//\tACTIONS\n\t\tfunction _addFocusability(link) {\n\t\t\t//\tget target element\n\t\t\tvar id = link.getAttribute('href').slice(1);\n\t\t\tvar target = doc.getElementById(id);\n\t\t\t//\tset tabindex to allow focus\n\t\t\tif (target) target.setAttribute('tabindex', -1);\n\t\t}\n\t\tfunction _removeFocusability(link) {\n\t\t\t//\tget target element\n\t\t\tvar id = link.getAttribute('href').slice(1);\n\t\t\tvar target = doc.getElementById(id);\n\t\t\t//\tremove ability to focus (stops user highlighting element on click)\n\t\t\tif (target) target.removeAttribute('tabindex');\n\t\t}\n\t\tfunction destroy() {\n\t\t\t//\tloop through each bypass link and remove event bindings\n\t\t\t_q('a', container).forEach(function (link) {\n\t\t\t\t_unbindPointerClick(link);\n\t\t\t\t_addFocusability(link);\n\t\t\t});\n\t\t\tif (currTarget) _unbindTargetBlur(currTarget);\n\t\t}\n\t\n\t\t//\tEVENTS\n\t\tfunction _eventPointerClick(e) {\n\t\t\t//\tget target element\n\t\t\tvar id = e.target.getAttribute('href').slice(1);\n\t\t\tvar target = doc.getElementById(id);\n\t\n\t\t\t// don't try to apply relevant atts/focus if target isn't present\n\t\t\tif (!target) return;\n\t\t\t//\tset tabindex to allow focus\n\t\t\ttarget.setAttribute('tabindex', -1);\n\t\t\ttarget.focus();\n\t\t\t//\tsave target reference\n\t\t\tcurrTarget = target;\n\t\t\t//\tbind blur event on target\n\t\t\t_bindTargetBlur(target);\n\t\t}\n\t\tfunction _eventTargetBlur(e) {\n\t\t\t//\tremove ability to focus (stops user highlighting element on click)\n\t\t\te.target.removeAttribute('tabindex');\n\t\t\t//\tremove target reference\n\t\t\tcurrTarget = null;\n\t\t\t//\tunbind blur event\n\t\t\t_unbindTargetBlur(e.target);\n\t\t}\n\t\n\t\t//\tBIND EVENTS\n\t\tfunction _bindPointerClick(link) {\n\t\t\t//\tbind interaction event\n\t\t\tlink.addEventListener('click', _eventPointerClick);\n\t\t}\n\t\tfunction _bindTargetBlur(target) {\n\t\t\t//\tbind blur event on target element\n\t\t\ttarget.addEventListener('blur', _eventTargetBlur);\n\t\t}\n\t\n\t\t//\tUNBIND EVENTS\n\t\tfunction _unbindPointerClick(link) {\n\t\t\t//\tunbind interaction event\n\t\t\tlink.removeEventListener('click', _eventPointerClick);\n\t\t}\n\t\tfunction _unbindTargetBlur(target) {\n\t\t\t//\tunbind blur event on target element\n\t\t\ttarget.removeEventListener('blur', _eventTargetBlur);\n\t\t}\n\t\n\t\t//\tINIT\n\t\tfunction init() {\n\t\t\t//\tdetect if bypass links exist in the document\n\t\t\tif (!container) return;\n\t\t\t//\tloop through each bypass link\n\t\t\t_q('a', container).forEach(function (link) {\n\t\t\t\t_bindPointerClick(link);\n\t\t\t\t_removeFocusability(link);\n\t\t\t});\n\t\t}\n\t\tinit();\n\t\n\t\t// REVEAL API\n\t\treturn {\n\t\t\tinit: init,\n\t\t\tdestroy: destroy\n\t\t};\n\t};\n\t\n\t// module exports\n\texports['default'] = Frbypasslinks;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 39 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 40 */,\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _frTooltip = __webpack_require__(42);\n\t\n\tvar _frTooltip2 = _interopRequireDefault(_frTooltip);\n\t\n\tvar _tooltip = __webpack_require__(43);\n\t\n\tvar _tooltip2 = _interopRequireDefault(_tooltip);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t/* eslint-enable */\n\t\n\tvar opts = {\n\t // String - Container selector, hook for JS init() method\n\t selector: '.js-fr-tooltip',\n\t\n\t // String - Selector to define the tooltip element\n\t tooltipSelector: '.js-fr-tooltip-tooltip',\n\t\n\t // String - Selector to define the toggle element controlling the tooltip\n\t toggleSelector: '.js-fr-tooltip-toggle',\n\t\n\t // String - Prefix for the id applied to each tooltip as a reference for the toggle\n\t tooltipIdPrefix: 'tooltip',\n\t\n\t // String - Class name that will be added to the selector when the component has been initialised\n\t readyClass: 'fr-tooltip--is-ready'\n\t};\n\t\n\t/* eslint-disable no-unused-vars */\n\t\n\tvar tooltip = (0, _frTooltip2['default'])(opts);\n\t\n\texports['default'] = {\n\t tooltip: tooltip,\n\t Frtooltip: _frTooltip2['default'],\n\t opts: opts\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 42 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// Polyfill matches as per https://github.com/jonathantneal/closest\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\tElement.prototype.matches = Element.prototype.matches || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t\n\t/**\n\t * @param {object} options Object containing configuration overrides\n\t */\n\tvar Frtooltip = function Frtooltip() {\n\t\tvar _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n\t\t _ref$selector = _ref.selector,\n\t\t selector = _ref$selector === undefined ? '.js-fr-tooltip' : _ref$selector,\n\t\t _ref$tooltipSelector = _ref.tooltipSelector,\n\t\t tooltipSelector = _ref$tooltipSelector === undefined ? '.js-fr-tooltip-tooltip' : _ref$tooltipSelector,\n\t\t _ref$toggleSelector = _ref.toggleSelector,\n\t\t toggleSelector = _ref$toggleSelector === undefined ? '.js-fr-tooltip-toggle' : _ref$toggleSelector,\n\t\t _ref$tooltipIdPrefix = _ref.tooltipIdPrefix,\n\t\t tooltipIdPrefix = _ref$tooltipIdPrefix === undefined ? 'tooltip' : _ref$tooltipIdPrefix,\n\t\t _ref$readyClass = _ref.readyClass,\n\t\t readyClass = _ref$readyClass === undefined ? 'fr-tooltip--is-ready' : _ref$readyClass;\n\t\n\t\t// CONSTANTS\n\t\tvar doc = document;\n\t\tvar docEl = doc.documentElement;\n\t\tvar _q = function _q(el) {\n\t\t\tvar ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : doc;\n\t\t\treturn [].slice.call(ctx.querySelectorAll(el));\n\t\t};\n\t\n\t\t// SUPPORTS\n\t\tif (!('querySelector' in doc) || !('addEventListener' in window) || !docEl.classList) return;\n\t\n\t\t// SETUP\n\t\tvar tooltipContainers = _q(selector);\n\t\n\t\t//\tTEMP\n\t\tvar currTooltip = null;\n\t\n\t\t//\tUTILS\n\t\tfunction _defer(fn) {\n\t\t\t//\twrapped in setTimeout to delay binding until previous rendering has completed\n\t\t\tif (typeof fn === 'function') setTimeout(fn, 0);\n\t\t}\n\t\tfunction _closest(el, selector) {\n\t\t\twhile (el) {\n\t\t\t\tif (el.matches(selector)) break;\n\t\t\t\tel = el.parentElement;\n\t\t\t}\n\t\t\treturn el;\n\t\t}\n\t\n\t\t//\tA11Y\n\t\tfunction _addA11y(container, i) {\n\t\t\t//\tget relative elements\n\t\t\tvar toggle = _q(toggleSelector, container)[0];\n\t\t\tvar tooltip = _q(tooltipSelector, container)[0];\n\t\t\t//\tcreate new button and replace toggle\n\t\t\tvar button = doc.createElement('button');\n\t\t\tbutton.setAttribute('class', toggle.getAttribute('class'));\n\t\t\tbutton.setAttribute('aria-expanded', 'false');\n\t\t\tbutton.setAttribute('aria-describedby', '');\n\t\t\tbutton.textContent = toggle.textContent;\n\t\t\tcontainer.replaceChild(button, toggle);\n\t\t\t//\tadd tooltip attributes\n\t\t\ttooltip.setAttribute('role', 'tooltip');\n\t\t\ttooltip.setAttribute('id', tooltipIdPrefix + '-' + i);\n\t\t\ttooltip.setAttribute('aria-hidden', 'true');\n\t\t\ttooltip.setAttribute('aria-live', 'polite');\n\t\t}\n\t\tfunction _removeA11y(container) {\n\t\t\t//\tget relative elements\n\t\t\tvar toggle = _q(toggleSelector, container)[0];\n\t\t\tvar tooltip = _q(tooltipSelector, container)[0];\n\t\t\t//\tcreate new span and replace toggle\n\t\t\tvar span = doc.createElement('span');\n\t\t\tspan.setAttribute('class', toggle.getAttribute('class'));\n\t\t\tspan.textContent = toggle.textContent;\n\t\t\tcontainer.replaceChild(span, toggle);\n\t\t\t//\tremove tooltip attributes\n\t\t\ttooltip.removeAttribute('role');\n\t\t\ttooltip.removeAttribute('id');\n\t\t\ttooltip.removeAttribute('aria-hidden');\n\t\t\ttooltip.removeAttribute('aria-live');\n\t\t}\n\t\n\t\t// ACTIONS\n\t\tfunction _showTooltip(toggle, tooltip) {\n\t\t\t//\tassign describedby matching tooltip reference\n\t\t\tvar tooltipId = tooltip.getAttribute('id');\n\t\t\ttoggle.setAttribute('aria-describedby', tooltipId);\n\t\t\t//\tset visible state\n\t\t\ttoggle.setAttribute('aria-expanded', 'true');\n\t\t\ttooltip.setAttribute('aria-hidden', 'false');\n\t\t\t//\tstore temp reference to tooltip\n\t\t\tcurrTooltip = tooltip;\n\t\t\t//\tbind doc close events\n\t\t\t_defer(_bindDocClick);\n\t\t\t_defer(_bindDocKey);\n\t\t}\n\t\tfunction _hideTooltip(toggle, tooltip) {\n\t\t\t//\tremove tooltip reference\n\t\t\ttoggle.setAttribute('aria-describedby', '');\n\t\t\t//\tset visible state\n\t\t\ttoggle.setAttribute('aria-expanded', 'false');\n\t\t\ttooltip.setAttribute('aria-hidden', 'true');\n\t\t\t//\tremove tooltip temp reference\n\t\t\tcurrTooltip = null;\n\t\t\t//\tunbind doc close events\n\t\t\t_unbindDocClick();\n\t\t\t_unbindDocKey();\n\t\t}\n\t\tfunction destroy() {\n\t\t\ttooltipContainers.forEach(function (container, i) {\n\t\t\t\t_removeA11y(container, i);\n\t\t\t\t_unbindToggleEvents(container);\n\t\t\t\tcontainer.classList.remove(readyClass);\n\t\t\t});\n\t\t\t//\treset temp references\n\t\t\tcurrTooltip = null;\n\t\t\t//\tunbind global events\n\t\t\t_unbindDocClick();\n\t\t\t_unbindDocKey();\n\t\t}\n\t\n\t\t// EVENTS\n\t\tfunction _eventTogglePointer(e) {\n\t\t\t//\tclose any open tooltips\n\t\t\tif (currTooltip) _hideTooltip(currTooltip.previousElementSibling, currTooltip);\n\t\t\t//\tget relevant tooltip elements\n\t\t\tvar toggle = e.target;\n\t\t\tvar tooltip = toggle.nextElementSibling;\n\t\t\t//\tshow or hide if toggle is 'expanded'\n\t\t\tif (toggle.getAttribute('aria-expanded') === 'false') {\n\t\t\t\t_showTooltip(toggle, tooltip);\n\t\t\t} else {\n\t\t\t\t_hideTooltip(toggle, tooltip);\n\t\t\t}\n\t\t}\n\t\tfunction _eventTogglePointerLeave() {\n\t\t\tif (currTooltip) _hideTooltip(currTooltip.previousElementSibling, currTooltip);\n\t\t}\n\t\tfunction _eventDocClick(e) {\n\t\t\t//\tcheck if target is panel or child of\n\t\t\tvar isTooltip = e.target === currTooltip;\n\t\t\tvar isTooltipchild = _closest(e.target, tooltipSelector);\n\t\t\tif (!isTooltip && !isTooltipchild) _hideTooltip(currTooltip.previousElementSibling, currTooltip);\n\t\t}\n\t\tfunction _eventDocKey(e) {\n\t\t\t//\tesc key\n\t\t\tif (e.keyCode === 27) _hideTooltip(currTooltip.previousElementSibling, currTooltip);\n\t\t}\n\t\n\t\t// BIND EVENTS\n\t\tfunction _bindToggleEvents(container) {\n\t\t\tvar toggle = _q(toggleSelector, container)[0];\n\t\t\ttoggle.addEventListener('click', _eventTogglePointer);\n\t\t\ttoggle.addEventListener('mouseenter', _eventTogglePointer);\n\t\t\ttoggle.addEventListener('mouseleave', _eventTogglePointerLeave);\n\t\t}\n\t\tfunction _bindDocClick() {\n\t\t\tdoc.addEventListener('click', _eventDocClick);\n\t\t\tdoc.addEventListener('touchstart', _eventDocClick);\n\t\t}\n\t\tfunction _bindDocKey() {\n\t\t\tdoc.addEventListener('keydown', _eventDocKey);\n\t\t}\n\t\n\t\t//\tUNBIND EVENTS\n\t\tfunction _unbindToggleEvents(container) {\n\t\t\tvar toggle = _q(toggleSelector, container)[0];\n\t\t\ttoggle.removeEventListener('click', _eventTogglePointer);\n\t\t\ttoggle.removeEventListener('mouseenter', _eventTogglePointer);\n\t\t\ttoggle.removeEventListener('mouseleave', _eventTogglePointerLeave);\n\t\t}\n\t\tfunction _unbindDocClick() {\n\t\t\tdoc.removeEventListener('click', _eventDocClick);\n\t\t\tdoc.removeEventListener('touchstart', _eventDocClick);\n\t\t}\n\t\tfunction _unbindDocKey() {\n\t\t\tdoc.removeEventListener('keydown', _eventDocKey);\n\t\t}\n\t\n\t\t// INIT\n\t\tfunction init() {\n\t\t\tif (!tooltipContainers) return;\n\t\t\t//\tloop through each tooltip element\n\t\t\ttooltipContainers.forEach(function (container, i) {\n\t\t\t\t_addA11y(container, i);\n\t\t\t\t_bindToggleEvents(container);\n\t\t\t\tcontainer.classList.add(readyClass);\n\t\t\t});\n\t\t}\n\t\tinit();\n\t\n\t\t// REVEAL API\n\t\treturn {\n\t\t\tinit: init,\n\t\t\tdestroy: destroy\n\t\t};\n\t};\n\t\n\t// module exports\n\texports['default'] = Frtooltip;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 43 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 44 */,\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t/*\n\t *\tTODO:\n\t *\t\t- repack as a frend _component and CSS\n\t *\t\t- refactor without jQuery\n\t */\n\t\n\t/*\n\t * Porting of http://www.oaa-accessibility.org/examplep/treeview1/\n\t */\n\tvar Treeview = function Treeview() {\n\t var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n\t _ref$selector = _ref.selector,\n\t selector = _ref$selector === undefined ? '.js-Treeview' : _ref$selector,\n\t _ref$classFocused = _ref.classFocused,\n\t classFocused = _ref$classFocused === undefined ? 'hasFocus' : _ref$classFocused,\n\t _ref$classParent = _ref.classParent,\n\t classParent = _ref$classParent === undefined ? 'Treeview-parent' : _ref$classParent,\n\t _ref$classMenuHandler = _ref.classMenuHandler,\n\t classMenuHandler = _ref$classMenuHandler === undefined ? 'js-Treeview-handler' : _ref$classMenuHandler,\n\t _ref$styleMenuHandler = _ref.styleMenuHandler,\n\t styleMenuHandler = _ref$styleMenuHandler === undefined ? 'Treeview-handler--default' : _ref$styleMenuHandler,\n\t _ref$styleMenuHandler2 = _ref.styleMenuHandlerStandalone,\n\t styleMenuHandlerStandalone = _ref$styleMenuHandler2 === undefined ? 'Treeview-handler--standalone' : _ref$styleMenuHandler2,\n\t _ref$ariaLabelHandler = _ref.ariaLabelHandler,\n\t ariaLabelHandler = _ref$ariaLabelHandler === undefined ? 'expand' : _ref$ariaLabelHandler,\n\t _ref$multiselectable = _ref.multiselectable,\n\t multiselectable = _ref$multiselectable === undefined ? true : _ref$multiselectable,\n\t _ref$animationMs = _ref.animationMs,\n\t animationMs = _ref$animationMs === undefined ? 100 : _ref$animationMs;\n\t\n\t var keys = {\n\t tab: 9,\n\t enter: 13,\n\t space: 32,\n\t pageup: 33,\n\t pagedown: 34,\n\t end: 35,\n\t home: 36,\n\t left: 37,\n\t up: 38,\n\t right: 39,\n\t down: 40,\n\t asterisk: 106\n\t };\n\t\n\t function _collapseAll(treeview) {\n\t treeview.$parents.each(function () {\n\t if ((0, _jquery2['default'])(this).attr('aria-expanded') == 'false') {\n\t (0, _jquery2['default'])(this).children('ul').attr('aria-hidden', 'true');\n\t }\n\t });\n\t treeview.$visibleItems = treeview.$el.find('li:visible');\n\t }\n\t\n\t function _expandGroup(treeview, $item) {\n\t var $group = $item.children('ul');\n\t $group.slideDown(animationMs, function () {\n\t $group.attr('aria-hidden', 'false');\n\t $item.attr('aria-expanded', 'true');\n\t treeview.$visibleItems = treeview.$el.find('li:visible');\n\t });\n\t }\n\t\n\t function _collapseGroup(treeview, $item) {\n\t var $group = $item.children('ul');\n\t $group.slideUp(animationMs, function () {\n\t $group.attr('aria-hidden', 'true');\n\t $item.attr('aria-expanded', 'false');\n\t treeview.$visibleItems = treeview.$el.find('li:visible');\n\t });\n\t }\n\t\n\t function _collapseSiblings(treeview, $item) {\n\t $item.closest('ul').find('> .' + classParent).not($item).each(function (i, el) {\n\t _collapseGroup(treeview, (0, _jquery2['default'])(el));\n\t });\n\t }\n\t\n\t function _toggleGroup(treeview, $item) {\n\t if (!multiselectable) {\n\t _collapseSiblings(treeview, $item);\n\t }\n\t if ($item.attr('aria-expanded') == 'true') {\n\t _collapseGroup(treeview, $item);\n\t } else {\n\t _expandGroup(treeview, $item);\n\t }\n\t }\n\t\n\t function _updateStyling(treeview, $item) {\n\t treeview.$items.removeClass(classFocused).attr('tabindex', '-1');\n\t $item.addClass(classFocused).attr('tabindex', '0');\n\t }\n\t\n\t function _handleKeyDown(treeview, $item, e) {\n\t var curNdx = treeview.$visibleItems.index($item);\n\t\n\t if (e.altKey || e.ctrlKey || e.shiftKey && e.keyCode != keys.tab) {\n\t return true;\n\t }\n\t\n\t // if (!$(e.currentTarget).is('.' + classMenuHandler)) {\n\t // return true\n\t // }\n\t\n\t switch (e.keyCode) {\n\t case keys.tab:\n\t {\n\t treeview.$activeItem = null;\n\t $item.removeClass(classFocused);\n\t return true;\n\t }\n\t\n\t case keys.home:\n\t {\n\t treeview.$activeItem = treeview.$parents.first();\n\t treeview.$activeItem.find(':focusable:first').focus();\n\t e.stopPropagation();\n\t return false;\n\t }\n\t\n\t case keys.end:\n\t {\n\t treeview.$activeItem = treeview.$visibleItems.last();\n\t treeview.$activeItem.find(':focusable:first').focus();\n\t e.stopPropagation();\n\t return false;\n\t }\n\t\n\t case keys.enter:\n\t case keys.space:\n\t {\n\t if ((0, _jquery2['default'])(e.currentTarget).is('.' + classMenuHandler)) {\n\t _toggleGroup(treeview, $item);\n\t e.stopPropagation();\n\t return false;\n\t }\n\t return true;\n\t }\n\t\n\t case keys.left:\n\t {\n\t if ($item.is('.' + classParent) && $item.attr('aria-expanded') == 'true') {\n\t _collapseGroup(treeview, $item);\n\t } else {\n\t var $itemUL = $item.parent();\n\t var $itemParent = $itemUL.parent();\n\t treeview.$activeItem = $itemParent;\n\t treeview.$activeItem.find(':focusable:first').focus();\n\t }\n\t e.stopPropagation();\n\t return false;\n\t }\n\t\n\t case keys.right:\n\t {\n\t if (!$item.is('.' + classParent)) {\n\t // do nothing\n\t } else if ($item.attr('aria-expanded') == 'false') {\n\t _expandGroup(treeview, $item);\n\t } else {\n\t treeview.$activeItem = $item.children('ul').children('li').first();\n\t treeview.$activeItem.find(':focusable:first').focus();\n\t }\n\t e.stopPropagation();\n\t return false;\n\t }\n\t\n\t case keys.up:\n\t {\n\t if (curNdx > 0) {\n\t var $prev = treeview.$visibleItems.eq(curNdx - 1);\n\t treeview.$activeItem = $prev;\n\t $prev.find(':focusable:first').focus();\n\t }\n\t e.stopPropagation();\n\t return false;\n\t }\n\t\n\t case keys.down:\n\t {\n\t if (curNdx < treeview.$visibleItems.length - 1) {\n\t var $next = treeview.$visibleItems.eq(curNdx + 1);\n\t treeview.$activeItem = $next;\n\t $next.find(':focusable:first').focus();\n\t }\n\t e.stopPropagation();\n\t return false;\n\t }\n\t\n\t case keys.asterisk:\n\t {\n\t treeview.$parents.each(function () {\n\t _expandGroup(treeview, (0, _jquery2['default'])(this));\n\t });\n\t e.stopPropagation();\n\t return false;\n\t }\n\t\n\t }\n\t return true;\n\t }\n\t\n\t function _handleKeyPress(treeview, $item, e) {\n\t if (e.altKey || e.ctrlKey || e.shiftKey) {\n\t // do nothing\n\t return true;\n\t }\n\t\n\t switch (e.keyCode) {\n\t case keys.tab:\n\t {\n\t return true;\n\t }\n\t case keys.enter:\n\t case keys.home:\n\t case keys.end:\n\t case keys.left:\n\t case keys.right:\n\t case keys.up:\n\t case keys.down:\n\t {\n\t e.stopPropagation();\n\t return false;\n\t }\n\t default:\n\t {\n\t var chr = String.fromCharCode(e.which);\n\t var bMatch = false;\n\t var itemNdx = treeview.$visibleItems.index($item);\n\t var itemCnt = treeview.$visibleItems.length;\n\t var curNdx = itemNdx + 1;\n\t\n\t // check if the active item was the last one on the list\n\t if (curNdx == itemCnt) {\n\t curNdx = 0;\n\t }\n\t\n\t // Iterate through the menu items (starting from the current item and wrapping) until a match is found\n\t // or the loop returns to the current menu item\n\t while (curNdx != itemNdx) {\n\t\n\t var $curItem = treeview.$visibleItems.eq(curNdx);\n\t var titleChr = $curItem.text().charAt(0);\n\t\n\t if ($curItem.is('.' + classParent)) {\n\t titleChr = $curItem.find('span').text().charAt(0);\n\t }\n\t\n\t if (titleChr.toLowerCase() == chr) {\n\t bMatch = true;\n\t break;\n\t }\n\t\n\t curNdx = curNdx + 1;\n\t\n\t if (curNdx == itemCnt) {\n\t // reached the end of the list, start again at the beginning\n\t curNdx = 0;\n\t }\n\t }\n\t\n\t if (bMatch == true) {\n\t treeview.$activeItem = treeview.$visibleItems.eq(curNdx);\n\t treeview.$activeItem.find(':focusable:first').focus();\n\t }\n\t\n\t e.stopPropagation();\n\t return false;\n\t }\n\t }\n\t\n\t return true;\n\t }\n\t\n\t function _handleClick(treeview, $item, e) {\n\t if (e.altKey || e.ctrlKey || e.shiftKey) {\n\t // do nothing\n\t return true;\n\t }\n\t\n\t // closest('li')\n\t var $parent = $item.closest('li');\n\t\n\t treeview.$activeItem = $parent;\n\t _updateStyling(treeview, $parent);\n\t _toggleGroup(treeview, $parent);\n\t\n\t e.stopPropagation();\n\t return false;\n\t }\n\t\n\t function _bindEvents(treeview) {\n\t treeview.$handlers.click(function (e) {\n\t return _handleClick(treeview, (0, _jquery2['default'])(this), e);\n\t });\n\t\n\t treeview.$items.keydown(function (e) {\n\t return _handleKeyDown(treeview, (0, _jquery2['default'])(this), e);\n\t });\n\t\n\t treeview.$items.keypress(function (e) {\n\t return _handleKeyPress(treeview, (0, _jquery2['default'])(this), e);\n\t });\n\t\n\t treeview.$handlers.keydown(function (e) {\n\t return _handleKeyDown(treeview, (0, _jquery2['default'])(this).closest('li'), e);\n\t });\n\t\n\t treeview.$handlers.keypress(function (e) {\n\t return _handleKeyPress(treeview, (0, _jquery2['default'])(this).closest('li'), e);\n\t });\n\t\n\t (0, _jquery2['default'])(document).click(function () {\n\t if (treeview.$activeItem != null) {\n\t treeview.$activeItem.removeClass(classFocused);\n\t treeview.$activeItem = null;\n\t }\n\t return true;\n\t });\n\t }\n\t\n\t function destroy() {\n\t /* TODO */\n\t }\n\t\n\t function _addA11y($el) {\n\t $el.attr('role', 'tree');\n\t\n\t // Put role=\"treeitem\" on every LI\n\t // Put aria-expanded=\"false\" on every LI (if it has no aria-expanded attr)\n\t // Put tabindex=\"-1\" on every LI (if it's not the first one)\n\t // Put class= on every LI that contains an UL\n\t $el.find('li').each(function (i, li) {\n\t var $li = (0, _jquery2['default'])(li);\n\t $li.attr('role', 'treeitem');\n\t // .attr('tabindex', (0 === i) ? '0' : '-1')\n\t // .find('a[href]').not('[href^=#]').attr('tabindex', 0)\n\t // .parent().attr('aria-label', function() { return $(this).text() })\n\t if ($li.find('ul').length !== 0) {\n\t\n\t $li.children('a').not('[href=#]').append('');\n\t\n\t $li.children(\"a[href='#']\").addClass(classMenuHandler).addClass(styleMenuHandler).attr('aria-label', ariaLabelHandler).attr('role', 'button');\n\t\n\t var containsExpandedLink = $li.find('[aria-expanded=true]').length > 0 || $li.find('.is-current').length > 0;\n\t\n\t if (!li.hasAttribute('aria-expanded') && !containsExpandedLink) {\n\t $li.attr('aria-expanded', 'false');\n\t } else if (containsExpandedLink) {\n\t $li.attr('aria-expanded', 'true');\n\t }\n\t $li.addClass(classParent);\n\t }\n\t });\n\t // Put role=\"group\" on every contained UL\n\t $el.find('ul').attr('role', 'group');\n\t }\n\t\n\t function init() {\n\t (0, _jquery2['default'])(selector).each(function (_, treeviewContainer) {\n\t var $el = (0, _jquery2['default'])(treeviewContainer);\n\t _addA11y($el);\n\t var treeview = {\n\t $el: $el,\n\t $items: $el.find('li'),\n\t $parents: $el.find('.' + classParent),\n\t $handlers: $el.find('.' + classMenuHandler),\n\t $visibleItems: null,\n\t $activeItem: null\n\t };\n\t _collapseAll(treeview);\n\t _bindEvents(treeview);\n\t });\n\t }\n\t\n\t init();\n\t\n\t // REVEAL API\n\t return {\n\t init: init,\n\t destroy: destroy\n\t };\n\t};\n\t\n\tnew Treeview();\n\t\n\texports['default'] = {\n\t Treeview: Treeview\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t__webpack_require__(47);\n\t__webpack_require__(48);\n\t__webpack_require__(49);\n\n/***/ },\n/* 47 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// Avoid `console` errors in browsers that lack a console.\n\t(function () {\n\t var method;\n\t var noop = function noop() {};\n\t var methods = ['assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 'timeStamp', 'trace', 'warn'];\n\t var length = methods.length;\n\t var console = window.console = window.console || {};\n\t\n\t while (length--) {\n\t method = methods[length];\n\t\n\t // Only stub undefined methods.\n\t if (!console[method]) {\n\t console[method] = noop;\n\t }\n\t }\n\t})();\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t(0, _jquery2['default'])(function () {\n\t (0, _jquery2['default'])(document).bind('enhance', function () {\n\t (0, _jquery2['default'])('body').addClass('enhanced');\n\t });\n\t (0, _jquery2['default'])(document).trigger('enhance');\n\t});\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _jquery = __webpack_require__(4);\n\t\n\tvar _jquery2 = _interopRequireDefault(_jquery);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t(0, _jquery2['default'])(document).ready(function () {\n\t var $header = (0, _jquery2['default'])('header');\n\t (0, _jquery2['default'])('.js-scrollTo').on('click', function () {\n\t var offset = (0, _jquery2['default'])(_jquery2['default'].attr(this, 'href')).offset();\n\t (0, _jquery2['default'])('html, body').animate({\n\t scrollTop: (offset ? offset.top : 0) - ($header.length && $header.css('position') === 'fixed' ? $header.height() : 0)\n\t }, 250);\n\t });\n\t});\n\n/***/ }\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// IWT.min.js"," \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\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap a29a95197f852b37af47","const Config = require('./config')\n\nfunction _findIndex(ar, predicate) {\n for (let index = 0; index < ar.length; index++) {\n if (predicate(ar[index])) {\n return index\n }\n }\n return -1\n}\n/*\n *\tEvery index.js found in src/** directory will be required.\n *\n * \tToo exclude components or modules\n * \t@see config.js\n */\nfunction requireAll(requireContext) {\n let keys = []\n\n requireContext.keys().forEach((filename) => {\n const dirname = filename.replace(/\\\\/g, '/').replace(/\\/[^\\/]*$/, '')\n\n const exclude = -1 !== _findIndex(Config.excludes, function(v) {\n return dirname.match(new RegExp(v)) !== null\n })\n\n const include = !exclude &&\n (Config.includes.length === 0 ||\n (-1 !== _findIndex(Config.includes, function(v) {\n return dirname.match(new RegExp(v)) !== null\n })))\n\n if (include) {\n // console.log('including: %s', dirname)\n keys.push(filename)\n } else {\n // console.log('excluding: %s', dirname)\n }\n })\n return keys.map(requireContext)\n}\n\nexport default requireAll(require.context('./src', true, /(.*)index\\.js$/))\n\n\n\n// WEBPACK FOOTER //\n// ./index.js","const CONFIG = {}\n\n/*\n * Whitelist: use this array of RegEx to include ONLY specific components\n * or modules into the final build.\n *\n * __Example, to include just header + search form + offcanvas:\n *\n * CONFIG.includes = [\n * '(.*)base(.*)',\n * '(.*)button(.*)',\n * '(.*)components(.*)',\n * '(.*)theme(.*)',\n * '(.*)utils(.*)',\n * '(.*)icons(.*)',\n * '(.*)hamburger(.*)',\n * '(.*)offcanvas(.*)',\n * '(.*)linklist(.*)',\n * '(.*)treeview(.*)',\n * '(.*)skiplinks(.*)',\n * '(.*)form(.*)',\n * '(.*)header(.*)'\n * ]\n *\n * @see index.css for possible values\n *\n */\nCONFIG.includes = []\n\n/*\n * Blacklist: use this array of RegEx to exclude specific omponents\n * or modules from the final build.\n *\n * ie. to exclude all global CSS:\n *\n * CONFIG.excludes = [ '(.*)base(.*)', '(.*)normalize(.*)' ]\n *\n * @see index.css for possible values\n *\n */\nCONFIG.excludes = []\n\nmodule.exports = CONFIG\n\n\n\n// WEBPACK FOOTER //\n// ./config.js","var map = {\n\t\"./components/form/index.js\": 3,\n\t\"./components/table/index.js\": 5,\n\t\"./modules/accordion/index.js\": 7,\n\t\"./modules/carousel/index.js\": 13,\n\t\"./modules/cookiebar/index.js\": 16,\n\t\"./modules/dialog/index.js\": 19,\n\t\"./modules/dropdown/index.js\": 23,\n\t\"./modules/header/index.js\": 25,\n\t\"./modules/masonry/index.js\": 27,\n\t\"./modules/megamenu/index.js\": 29,\n\t\"./modules/offcanvas/index.js\": 31,\n\t\"./modules/random/index.js\": 35,\n\t\"./modules/scrolltop/index.js\": 36,\n\t\"./modules/skiplinks/index.js\": 37,\n\t\"./modules/tooltip/index.js\": 41,\n\t\"./modules/treeview/index.js\": 45,\n\t\"./scripts/index.js\": 46\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src (.*)index\\.js$\n// module id = 2\n// module chunks = 0 1","import $ from 'jquery'\n\n$(document).ready(function() {\n $(':radio, :checkbox').on('change', function() {\n if ($(this).is(':radio')) {\n $(this).closest('.Form-field').find('.Form-label.is-checked').removeClass('is-checked')\n }\n if ($(this).is(':checked')) {\n $(this).closest('.Form-label').addClass('is-checked')\n } else {\n $(this).closest('.Form-label').removeClass('is-checked')\n }\n })\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/form/index.js","module.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 4\n// module chunks = 0 1","import $ from 'jquery'\nimport debounce from 'throttle-debounce/throttle'\n\nconst defaultOpts = {\n responsiveTableSelector: '.js-tableFlip',\n responsiveTableClass: 'Table--flip',\n responsiveTableBreakpoint: 768,\n}\n\nconst initResponsiveTables = function(opts) {\n $(document).ready(function() {\n if ($(opts.responsiveTableSelector).length > 0) {\n $(window).resize(debounce(250, function() {\n if ($(window).width() < opts.responsiveTableBreakpoint) {\n $(opts.responsiveTableSelector).addClass(opts.responsiveTableClass)\n } else {\n $(opts.responsiveTableSelector).removeClass(opts.responsiveTableClass)\n }\n }))\n }\n })\n}\n\ninitResponsiveTables(defaultOpts)\n\nexport default { defaultOpts, initResponsiveTables }\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/table/index.js","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {Number} delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {Boolean} noTrailing Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n * the internal counter is reset)\n * @param {Function} callback A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the throttled-function is executed.\n * @param {Boolean} debounceMode If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n * schedule `callback` to execute after `delay` ms.\n *\n * @return {Function} A new, throttled, function.\n */\nmodule.exports = function ( delay, noTrailing, callback, debounceMode ) {\n\n\t// After wrapper has stopped being called, this timeout ensures that\n\t// `callback` is executed at the proper times in `throttle` and `end`\n\t// debounce modes.\n\tvar timeoutID;\n\n\t// Keep track of the last time `callback` was executed.\n\tvar lastExec = 0;\n\n\t// `noTrailing` defaults to falsy.\n\tif ( typeof noTrailing !== 'boolean' ) {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t// The `wrapper` function encapsulates all of the throttling / debouncing\n\t// functionality and when executed will limit the rate at which `callback`\n\t// is executed.\n\tfunction wrapper () {\n\n\t\tvar self = this;\n\t\tvar elapsed = Number(new Date()) - lastExec;\n\t\tvar args = arguments;\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec () {\n\t\t\tlastExec = Number(new Date());\n\t\t\tcallback.apply(self, args);\n\t\t}\n\n\t\t// If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t// to allow future `callback` executions.\n\t\tfunction clear () {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif ( debounceMode && !timeoutID ) {\n\t\t\t// Since `wrapper` is being called for the first time and\n\t\t\t// `debounceMode` is true (at begin), execute `callback`.\n\t\t\texec();\n\t\t}\n\n\t\t// Clear any existing timeout.\n\t\tif ( timeoutID ) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\n\t\tif ( debounceMode === undefined && elapsed > delay ) {\n\t\t\t// In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t// `callback`.\n\t\t\texec();\n\n\t\t} else if ( noTrailing !== true ) {\n\t\t\t// In trailing throttle mode, since `delay` time has not been\n\t\t\t// exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t// recent execution.\n\t\t\t//\n\t\t\t// If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t// after `delay` ms.\n\t\t\t//\n\t\t\t// If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t// execute after `delay` ms.\n\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n\t\t}\n\n\t}\n\n\t// Return the wrapper function.\n\treturn wrapper;\n\n};\n\n\n\n// WEBPACK FOOTER //\n// ./~/throttle-debounce/throttle.js","import Fraccordion from 'fr-accordion'\n\n/* eslint-disable no-unused-vars */\n\nimport stylesheet from 'fr-accordion/accordion.css'\n\n/* eslint-enable */\n\nconst accordion = Fraccordion({\n\t// String - Use header id on element to tie each accordion panel to its header - see panelIdPrefix\n\theaderIdPrefix: 'accordion-header',\n\t// String - Use panel id on element to tie each accordion header to its panel - see headerIdPrefix\n\tpanelIdPrefix: 'accordion-panel',\n\t// Boolean - If set to false, all accordion panels will be closed on init()\n\tfirstPanelsOpenByDefault: false,\n\t// Boolean - If set to false, each accordion instance will only allow a single panel to be open at a time\n\tmultiselectable: true,\n\t// String - Class name that will be added to the selector when the component has been initialised\n\treadyClass: 'fr-accordion--is-ready'\n})\n\nexport default { accordion, Fraccordion }\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/accordion/index.js","'use strict';\r\n\r\n/**\r\n * @param {object} options Object containing configuration overrides\r\n */\r\nconst Fraccordion = function ({\r\n\t\tselector: selector = '.js-fr-accordion',\r\n\t\theaderSelector: headerSelector = '.js-fr-accordion__header',\r\n\t\theaderIdPrefix: headerIdPrefix = 'accordion-header',\r\n\t\tpanelSelector: panelSelector = '.js-fr-accordion__panel',\r\n\t\tpanelIdPrefix: panelIdPrefix = 'accordion-panel',\r\n\t\tfirstPanelsOpenByDefault: firstPanelsOpenByDefault = true,\r\n\t\tmultiselectable: multiselectable = true,\r\n\t\treadyClass: readyClass = 'fr-accordion--is-ready',\r\n\t\ttransitionLength: transitionLength = 250\r\n\t} = {}) {\r\n\r\n\r\n\t// CONSTANTS\r\n\tconst doc = document;\r\n\tconst docEl = doc.documentElement;\r\n\tconst _q = (el, ctx = doc) => [].slice.call(ctx.querySelectorAll(el));\r\n\r\n\r\n\t// SUPPORTS\r\n\tif (!('querySelector' in doc) || !('addEventListener' in window) || !docEl.classList) return;\r\n\r\n\r\n\t// SETUP\r\n\t// set accordion element NodeLists\r\n\tlet accordionContainers = _q(selector);\r\n\r\n\r\n\t// A11Y\r\n\tfunction _addA11y (accordionContainer) {\r\n\t\t// get accordion elements\r\n\t\tconst accordionHeaders = _q(headerSelector, accordionContainer);\r\n\t\tconst accordionPanels = _q(panelSelector, accordionContainer);\r\n\r\n\t\t// add relevant roles and properties\r\n\t\taccordionContainer.setAttribute('role', 'tablist');\r\n\t\taccordionContainer.setAttribute('aria-multiselectable', multiselectable);\r\n\r\n\t\taccordionHeaders.forEach((accordionHeader) => {\r\n\t\t\taccordionHeader.setAttribute('role', 'tab');\r\n\t\t\taccordionHeader.setAttribute('aria-controls', accordionHeader.id.replace(headerIdPrefix, panelIdPrefix));\r\n\t\t\t// make headers focusable, this is preferred over wrapping contents in native button element\r\n\t\t\taccordionHeader.setAttribute('tabindex', 0);\r\n\t\t});\r\n\r\n\t\taccordionPanels.forEach((accordionPanel) => {\r\n\t\t\taccordionPanel.setAttribute('role', 'tabpanel');\r\n\t\t\taccordionPanel.setAttribute('aria-labelledby', accordionPanel.id.replace(panelIdPrefix, headerIdPrefix));\r\n\t\t\t// make tabpanel focusable\r\n\t\t\taccordionPanel.setAttribute('tabindex', 0);\r\n\t\t});\r\n\t}\r\n\tfunction _removeA11y (accordionContainer) {\r\n\t\t// get accordion elements\r\n\t\tconst accordionHeaders = _q(headerSelector, accordionContainer);\r\n\t\tconst accordionPanels = _q(panelSelector, accordionContainer);\r\n\r\n\t\t// remove roles and properties\r\n\t\taccordionContainer.removeAttribute('role');\r\n\t\taccordionContainer.removeAttribute('aria-multiselectable');\r\n\r\n\t\taccordionHeaders.forEach((accordionHeader) => {\r\n\t\t\taccordionHeader.removeAttribute('role');\r\n\t\t\taccordionHeader.removeAttribute('aria-controls');\r\n\t\t\taccordionHeader.removeAttribute('aria-selected');\r\n\t\t\taccordionHeader.removeAttribute('aria-expanded');\r\n\t\t\t// remove headers focusablility\r\n\t\t\taccordionHeader.removeAttribute('tabindex');\r\n\t\t});\r\n\r\n\t\taccordionPanels.forEach((accordionPanel) => {\r\n\t\t\taccordionPanel.removeAttribute('role');\r\n\t\t\taccordionPanel.removeAttribute('aria-labelledby');\r\n\t\t\taccordionPanel.removeAttribute('aria-hidden');\r\n\t\t\t// remove tabpanel focusablibility\r\n\t\t\taccordionPanel.removeAttribute('tabindex');\r\n\t\t});\r\n\t}\r\n\r\n\r\n\t//\tUTILS\r\n\tfunction _getPanelHeight (panel) {\r\n\t\t//\tset auto height and read offsetHeight\r\n\t\tpanel.style.height = 'auto';\r\n\t\tlet height = panel.offsetHeight;\r\n\t\t//\tremove style\r\n\t\tpanel.style.height = '';\r\n\t\treturn height;\r\n\t}\r\n\tfunction _setPanelHeight (panel) {\r\n\t\t//\tget panel height\r\n\t\tlet panelHeight = _getPanelHeight(panel);\r\n\t\t//\trecalc style and layout\r\n\t\tpanel.getBoundingClientRect();\r\n\t\t//\tset height on panel, reset to 'auto' on transition complete\r\n\t\tpanel.style.height = panelHeight + 'px';\r\n\t\tsetTimeout(() => {\r\n\t\t\tpanel.style.transition = 'none';\r\n\t\t\tpanel.style.height = 'auto'\r\n\t\t\t//\trecalc style and layout\r\n\t\t\tpanel.getBoundingClientRect();\r\n\t\t\tpanel.style.transition = '';\r\n\t\t}, transitionLength);\r\n\t}\r\n\tfunction _unsetPanelHeight (panel) {\r\n\t\t//\tget panel height\r\n\t\tlet panelHeight = _getPanelHeight(panel);\r\n\t\t//\tset panel height from 'auto' to px\r\n\t\tpanel.style.height = panelHeight + 'px';\r\n\t\t//\trecalc style and layout\r\n\t\tpanel.getBoundingClientRect();\r\n\t\t//\treset height\r\n\t\tpanel.style.height = 0;\r\n\t}\r\n\r\n\r\n\t// ACTIONS\r\n\tfunction _hideAllPanels (accordionContainer) {\r\n\t\t// get accordion elements\r\n\t\tconst siblingHeaders = _q(headerSelector, accordionContainer);\r\n\t\tconst siblingPanels = _q(panelSelector, accordionContainer);\r\n\r\n\t\t// set inactives\r\n\t\tsiblingHeaders.forEach((header) => {\r\n\t\t\theader.setAttribute('tabindex', -1);\r\n\t\t\theader.setAttribute('aria-selected', 'false');\r\n\t\t\theader.setAttribute('aria-expanded', 'false');\r\n\t\t});\r\n\t\tsiblingPanels.forEach((panel) => {\r\n\t\t\tif (panel.getAttribute('aria-hidden') === 'false') _unsetPanelHeight(panel);\r\n\t\t\t//\ttoggle aria-hidden\r\n\t\t\tpanel.setAttribute('aria-hidden', 'true');\r\n\t\t});\r\n\t}\r\n\tfunction _hidePanel (target) {\r\n\t\t//\tget panel\r\n\t\tlet activePanel = doc.getElementById(target.getAttribute('aria-controls'));\r\n\t\ttarget.setAttribute('aria-selected', 'false');\r\n\t\ttarget.setAttribute('aria-expanded', 'false');\r\n\t\t//\ttoggle aria-hidden\r\n\t\t_unsetPanelHeight(activePanel);\r\n\t\tactivePanel.setAttribute('aria-hidden', 'true');\r\n\t}\r\n\tfunction _showPanel (target) {\r\n\t\t//\tget panel\r\n\t\tlet activePanel = doc.getElementById(target.getAttribute('aria-controls'));\r\n\t\t//\tset attributes on header\r\n\t\ttarget.setAttribute('tabindex', 0);\r\n\t\ttarget.setAttribute('aria-selected', 'true');\r\n\t\ttarget.setAttribute('aria-expanded', 'true');\r\n\t\t//\ttoggle aria-hidden and set height on panel\r\n\t\t_setPanelHeight(activePanel);\r\n\t\tactivePanel.setAttribute('aria-hidden', 'false');\r\n\t\tsetTimeout(() => _bindAccordionEvents(target.parentNode), transitionLength);\r\n\t}\r\n\tfunction _togglePanel (target) {\r\n\t\t// get context of accordion container and its children\r\n\t\tlet thisContainer = target.parentNode;\r\n\t\t// close target panel if already active\r\n\t\tif (target.getAttribute('aria-selected') === 'true') {\r\n\t\t\t_hidePanel(target);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// if not multiselectable hide all, then show target\r\n\t\tif (!multiselectable) _hideAllPanels(thisContainer);\r\n\r\n\t\t_showPanel(target);\r\n\t\tif (transitionLength > 0) _unbindAccordionEvents(thisContainer);\r\n\t}\r\n\tfunction _giveHeaderFocus (headerSet, i) {\r\n\t\t// remove focusability from inactives\r\n\t\theaderSet.forEach((header) => {\r\n\t\t\theader.setAttribute('tabindex', -1);\r\n\t\t});\r\n\t\t// set active focus\r\n\t\theaderSet[i].setAttribute('tabindex', 0);\r\n\t\theaderSet[i].focus();\r\n\t}\r\n\r\n\r\n\t//\tEVENTS\r\n\tfunction _eventHeaderClick (e) {\r\n\t\t_togglePanel(e.currentTarget);\r\n\t}\r\n\tfunction _eventHeaderKeydown (e) {\r\n\t\t// collect header targets, and their prev/next\r\n\t\tlet currentHeader = e.currentTarget;\r\n\t\tlet isModifierKey = e.metaKey || e.altKey;\r\n\t\t// get context of accordion container and its children\r\n\t\tlet thisContainer = currentHeader.parentNode;\r\n\t\tlet theseHeaders = _q(headerSelector, thisContainer);\r\n\t\tlet currentHeaderIndex = [].indexOf.call(theseHeaders, currentHeader);\r\n\r\n\t\t// don't catch key events when ⌘ or Alt modifier is present\r\n\t\tif (isModifierKey) return;\r\n\r\n\t\t// catch enter/space, left/right and up/down arrow key events\r\n\t\t// if new panel show it, if next/prev move focus\r\n\t\tswitch (e.keyCode) {\r\n\t\t\tcase 13:\r\n\t\t\tcase 32:\r\n\t\t\t\t_togglePanel(currentHeader);\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tbreak;\r\n\t\t\tcase 37:\r\n\t\t\tcase 38: {\r\n\t\t\t\tlet previousHeaderIndex = (currentHeaderIndex === 0) ? theseHeaders.length - 1 : currentHeaderIndex - 1;\r\n\t\t\t\t_giveHeaderFocus(theseHeaders, previousHeaderIndex);\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase 39:\r\n\t\t\tcase 40: {\r\n\t\t\t\tlet nextHeaderIndex = (currentHeaderIndex < theseHeaders.length - 1) ? currentHeaderIndex + 1 : 0;\r\n\t\t\t\t_giveHeaderFocus(theseHeaders, nextHeaderIndex);\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//\tBIND EVENTS\r\n\tfunction _bindAccordionEvents (accordionContainer) {\r\n\t\tconst accordionHeaders = _q(headerSelector, accordionContainer);\r\n\t\t// bind all accordion header click and keydown events\r\n\t\taccordionHeaders.forEach((accordionHeader) => {\r\n\t\t\taccordionHeader.addEventListener('click', _eventHeaderClick);\r\n\t\t\taccordionHeader.addEventListener('keydown', _eventHeaderKeydown);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\t//\tUNBIND EVENTS\r\n\tfunction _unbindAccordionEvents (accordionContainer) {\r\n\t\tconst accordionHeaders = _q(headerSelector, accordionContainer);\r\n\t\t// unbind all accordion header click and keydown events\r\n\t\taccordionHeaders.forEach((accordionHeader) => {\r\n\t\t\taccordionHeader.removeEventListener('click', _eventHeaderClick);\r\n\t\t\taccordionHeader.removeEventListener('keydown', _eventHeaderKeydown);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\t// DESTROY\r\n\tfunction destroy () {\r\n\t\taccordionContainers.forEach((accordionContainer) => {\r\n\t\t\t_removeA11y(accordionContainer);\r\n\t\t\t_unbindAccordionEvents(accordionContainer);\r\n\t\t\taccordionContainer.classList.remove(readyClass);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\t// INIT\r\n\tfunction init () {\r\n\t\tif (accordionContainers.length) {\r\n\t\t\taccordionContainers.forEach((accordionContainer) => {\r\n\t\t\t\t_addA11y(accordionContainer);\r\n\t\t\t\t_bindAccordionEvents(accordionContainer);\r\n\t\t\t\t_hideAllPanels(accordionContainer);\r\n\t\t\t\t// set all first accordion panels active on init if required (default behaviour)\r\n\t\t\t\t// otherwise make sure first accordion header for each is focusable\r\n\t\t\t\tif (firstPanelsOpenByDefault) {\r\n\t\t\t\t\t_togglePanel(accordionContainer.querySelector(headerSelector));\r\n\t\t\t\t} else {\r\n\t\t\t\t\taccordionContainer.querySelector(headerSelector).setAttribute('tabindex', 0);\r\n\t\t\t\t}\r\n\t\t\t\t// set ready style hook\r\n\t\t\t\taccordionContainer.classList.add(readyClass);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\tinit();\r\n\r\n\r\n\t// REVEAL API\r\n\treturn {\r\n\t\tinit,\r\n\t\tdestroy\r\n\t}\r\n\r\n}\r\n\r\n\r\n// module exports\r\nexport default Fraccordion;\r\n\n\n\n// WEBPACK FOOTER //\n// ./~/fr-accordion/accordion.js","import $ from 'jquery'\n\n/* eslint-disable no-unused-vars */\n\nimport owlCarousel from 'owl.carousel'\nimport a11y from './a11y'\n\n/* eslint-enable no-unused-vars */\n\nconst opts = {\n owlPrev: '.owl-prev',\n owlNext: '.owl-next',\n owlItem: '.owl-item',\n jsSelector: '.owl-carousel',\n owlOpts: {\n nav: false,\n // navText: ['precedente', 'successivo'],\n items: 3,\n dots: false,\n loop: false,\n margin: 16,\n mouseDrag: true,\n URLhashListener: true,\n startPosition: 'URLHash',\n responsive: {\n 0: {\n items: 1\n },\n 768: {\n items: 2\n },\n 992: {\n items: 3\n }\n }\n }\n}\n\nconst init = function() {\n const $owl = $(opts.jsSelector)\n\n $(opts.owlPrev).click(() => $owl.trigger('prev.owl.carousel'))\n $(opts.owlNext).click(() => $owl.trigger('next.owl.carousel'))\n\n $owl.on('initialized.owl.carousel changed.owl.carousel refreshed.owl.carousel', (event) => {\n if (!event.namespace) return\n\n var carousel = event.relatedTarget,\n element = event.target,\n current = carousel.current()\n\n $(`${opts.owlNext}[aria-controls='${element.id}']`)\n .toggleClass('u-visibilityHidden', current === carousel.maximum())\n\n $(`${opts.owlPrev}[aria-controls='${element.id}']`)\n .toggleClass('u-visibilityHidden', current === carousel.minimum())\n })\n\n // must be called after events initialization\n $owl.owlCarousel(opts.owlOpts)\n}\n\n$(document).ready(init)\n\nexport default {\n opts,\n init\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/carousel/index.js","/**\n * Owl Carousel v2.2.0\n * Copyright 2013-2016 David Deutsch\n * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE)\n */\n/**\n * Owl carousel\n * @version 2.1.6\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n * @todo Lazy Load Icon\n * @todo prevent animationend bubling\n * @todo itemsScaleUp\n * @todo Test Zepto\n * @todo stagePadding calculate wrong active classes\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates a carousel.\n\t * @class The Owl Carousel.\n\t * @public\n\t * @param {HTMLElement|jQuery} element - The element to create the carousel for.\n\t * @param {Object} [options] - The options\n\t */\n\tfunction Owl(element, options) {\n\n\t\t/**\n\t\t * Current settings for the carousel.\n\t\t * @public\n\t\t */\n\t\tthis.settings = null;\n\n\t\t/**\n\t\t * Current options set by the caller including defaults.\n\t\t * @public\n\t\t */\n\t\tthis.options = $.extend({}, Owl.Defaults, options);\n\n\t\t/**\n\t\t * Plugin element.\n\t\t * @public\n\t\t */\n\t\tthis.$element = $(element);\n\n\t\t/**\n\t\t * Proxied event handlers.\n\t\t * @protected\n\t\t */\n\t\tthis._handlers = {};\n\n\t\t/**\n\t\t * References to the running plugins of this carousel.\n\t\t * @protected\n\t\t */\n\t\tthis._plugins = {};\n\n\t\t/**\n\t\t * Currently suppressed events to prevent them from beeing retriggered.\n\t\t * @protected\n\t\t */\n\t\tthis._supress = {};\n\n\t\t/**\n\t\t * Absolute current position.\n\t\t * @protected\n\t\t */\n\t\tthis._current = null;\n\n\t\t/**\n\t\t * Animation speed in milliseconds.\n\t\t * @protected\n\t\t */\n\t\tthis._speed = null;\n\n\t\t/**\n\t\t * Coordinates of all items in pixel.\n\t\t * @todo The name of this member is missleading.\n\t\t * @protected\n\t\t */\n\t\tthis._coordinates = [];\n\n\t\t/**\n\t\t * Current breakpoint.\n\t\t * @todo Real media queries would be nice.\n\t\t * @protected\n\t\t */\n\t\tthis._breakpoint = null;\n\n\t\t/**\n\t\t * Current width of the plugin element.\n\t\t */\n\t\tthis._width = null;\n\n\t\t/**\n\t\t * All real items.\n\t\t * @protected\n\t\t */\n\t\tthis._items = [];\n\n\t\t/**\n\t\t * All cloned items.\n\t\t * @protected\n\t\t */\n\t\tthis._clones = [];\n\n\t\t/**\n\t\t * Merge values of all items.\n\t\t * @todo Maybe this could be part of a plugin.\n\t\t * @protected\n\t\t */\n\t\tthis._mergers = [];\n\n\t\t/**\n\t\t * Widths of all items.\n\t\t */\n\t\tthis._widths = [];\n\n\t\t/**\n\t\t * Invalidated parts within the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._invalidated = {};\n\n\t\t/**\n\t\t * Ordered list of workers for the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._pipe = [];\n\n\t\t/**\n\t\t * Current state information for the drag operation.\n\t\t * @todo #261\n\t\t * @protected\n\t\t */\n\t\tthis._drag = {\n\t\t\ttime: null,\n\t\t\ttarget: null,\n\t\t\tpointer: null,\n\t\t\tstage: {\n\t\t\t\tstart: null,\n\t\t\t\tcurrent: null\n\t\t\t},\n\t\t\tdirection: null\n\t\t};\n\n\t\t/**\n\t\t * Current state information and their tags.\n\t\t * @type {Object}\n\t\t * @protected\n\t\t */\n\t\tthis._states = {\n\t\t\tcurrent: {},\n\t\t\ttags: {\n\t\t\t\t'initializing': [ 'busy' ],\n\t\t\t\t'animating': [ 'busy' ],\n\t\t\t\t'dragging': [ 'interacting' ]\n\t\t\t}\n\t\t};\n\n\t\t$.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {\n\t\t\tthis._handlers[handler] = $.proxy(this[handler], this);\n\t\t}, this));\n\n\t\t$.each(Owl.Plugins, $.proxy(function(key, plugin) {\n\t\t\tthis._plugins[key.charAt(0).toLowerCase() + key.slice(1)]\n\t\t\t\t= new plugin(this);\n\t\t}, this));\n\n\t\t$.each(Owl.Workers, $.proxy(function(priority, worker) {\n\t\t\tthis._pipe.push({\n\t\t\t\t'filter': worker.filter,\n\t\t\t\t'run': $.proxy(worker.run, this)\n\t\t\t});\n\t\t}, this));\n\n\t\tthis.setup();\n\t\tthis.initialize();\n\t}\n\n\t/**\n\t * Default options for the carousel.\n\t * @public\n\t */\n\tOwl.Defaults = {\n\t\titems: 3,\n\t\tloop: false,\n\t\tcenter: false,\n\t\trewind: false,\n\n\t\tmouseDrag: true,\n\t\ttouchDrag: true,\n\t\tpullDrag: true,\n\t\tfreeDrag: false,\n\n\t\tmargin: 0,\n\t\tstagePadding: 0,\n\n\t\tmerge: false,\n\t\tmergeFit: true,\n\t\tautoWidth: false,\n\n\t\tstartPosition: 0,\n\t\trtl: false,\n\n\t\tsmartSpeed: 250,\n\t\tfluidSpeed: false,\n\t\tdragEndSpeed: false,\n\n\t\tresponsive: {},\n\t\tresponsiveRefreshRate: 200,\n\t\tresponsiveBaseElement: window,\n\n\t\tfallbackEasing: 'swing',\n\n\t\tinfo: false,\n\n\t\tnestedItemSelector: false,\n\t\titemElement: 'div',\n\t\tstageElement: 'div',\n\n\t\trefreshClass: 'owl-refresh',\n\t\tloadedClass: 'owl-loaded',\n\t\tloadingClass: 'owl-loading',\n\t\trtlClass: 'owl-rtl',\n\t\tresponsiveClass: 'owl-responsive',\n\t\tdragClass: 'owl-drag',\n\t\titemClass: 'owl-item',\n\t\tstageClass: 'owl-stage',\n\t\tstageOuterClass: 'owl-stage-outer',\n\t\tgrabClass: 'owl-grab'\n\t};\n\n\t/**\n\t * Enumeration for width.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Width = {\n\t\tDefault: 'default',\n\t\tInner: 'inner',\n\t\tOuter: 'outer'\n\t};\n\n\t/**\n\t * Enumeration for types.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Type = {\n\t\tEvent: 'event',\n\t\tState: 'state'\n\t};\n\n\t/**\n\t * Contains all registered plugins.\n\t * @public\n\t */\n\tOwl.Plugins = {};\n\n\t/**\n\t * List of workers involved in the update process.\n\t */\n\tOwl.Workers = [ {\n\t\tfilter: [ 'width', 'settings' ],\n\t\trun: function() {\n\t\t\tthis._width = this.$element.width();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = this._items && this._items[this.relative(this._current)];\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tthis.$stage.children('.cloned').remove();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar margin = this.settings.margin || '',\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\trtl = this.settings.rtl,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': 'auto',\n\t\t\t\t\t'margin-left': rtl ? margin : '',\n\t\t\t\t\t'margin-right': rtl ? '' : margin\n\t\t\t\t};\n\n\t\t\t!grid && this.$stage.children().css(css);\n\n\t\t\tcache.css = css;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,\n\t\t\t\tmerge = null,\n\t\t\t\titerator = this._items.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\twidths = [];\n\n\t\t\tcache.items = {\n\t\t\t\tmerge: false,\n\t\t\t\twidth: width\n\t\t\t};\n\n\t\t\twhile (iterator--) {\n\t\t\t\tmerge = this._mergers[iterator];\n\t\t\t\tmerge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;\n\n\t\t\t\tcache.items.merge = merge > 1 || cache.items.merge;\n\n\t\t\t\twidths[iterator] = !grid ? this._items[iterator].width() : width * merge;\n\t\t\t}\n\n\t\t\tthis._widths = widths;\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar clones = [],\n\t\t\t\titems = this._items,\n\t\t\t\tsettings = this.settings,\n\t\t\t\tview = Math.max(settings.items * 2, 4),\n\t\t\t\tsize = Math.ceil(items.length / 2) * 2,\n\t\t\t\trepeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,\n\t\t\t\tappend = '',\n\t\t\t\tprepend = '';\n\n\t\t\trepeat /= 2;\n\n\t\t\twhile (repeat--) {\n\t\t\t\tclones.push(this.normalize(clones.length / 2, true));\n\t\t\t\tappend = append + items[clones[clones.length - 1]][0].outerHTML;\n\t\t\t\tclones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));\n\t\t\t\tprepend = items[clones[clones.length - 1]][0].outerHTML + prepend;\n\t\t\t}\n\n\t\t\tthis._clones = clones;\n\n\t\t\t$(append).addClass('cloned').appendTo(this.$stage);\n\t\t\t$(prepend).addClass('cloned').prependTo(this.$stage);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tsize = this._clones.length + this._items.length,\n\t\t\t\titerator = -1,\n\t\t\t\tprevious = 0,\n\t\t\t\tcurrent = 0,\n\t\t\t\tcoordinates = [];\n\n\t\t\twhile (++iterator < size) {\n\t\t\t\tprevious = coordinates[iterator - 1] || 0;\n\t\t\t\tcurrent = this._widths[this.relative(iterator)] + this.settings.margin;\n\t\t\t\tcoordinates.push(previous + current * rtl);\n\t\t\t}\n\n\t\t\tthis._coordinates = coordinates;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar padding = this.settings.stagePadding,\n\t\t\t\tcoordinates = this._coordinates,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,\n\t\t\t\t\t'padding-left': padding || '',\n\t\t\t\t\t'padding-right': padding || ''\n\t\t\t\t};\n\n\t\t\tthis.$stage.css(css);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar iterator = this._coordinates.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\titems = this.$stage.children();\n\n\t\t\tif (grid && cache.items.merge) {\n\t\t\t\twhile (iterator--) {\n\t\t\t\t\tcache.css.width = this._widths[this.relative(iterator)];\n\t\t\t\t\titems.eq(iterator).css(cache.css);\n\t\t\t\t}\n\t\t\t} else if (grid) {\n\t\t\t\tcache.css.width = cache.items.width;\n\t\t\t\titems.css(cache.css);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tfilter: [ 'items' ],\n\t\trun: function() {\n\t\t\tthis._coordinates.length < 1 && this.$stage.removeAttr('style');\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = cache.current ? this.$stage.children().index(cache.current) : 0;\n\t\t\tcache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));\n\t\t\tthis.reset(cache.current);\n\t\t}\n\t}, {\n\t\tfilter: [ 'position' ],\n\t\trun: function() {\n\t\t\tthis.animate(this.coordinates(this._current));\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'position', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tpadding = this.settings.stagePadding * 2,\n\t\t\t\tbegin = this.coordinates(this.current()) + padding,\n\t\t\t\tend = begin + this.width() * rtl,\n\t\t\t\tinner, outer, matches = [], i, n;\n\n\t\t\tfor (i = 0, n = this._coordinates.length; i < n; i++) {\n\t\t\t\tinner = this._coordinates[i - 1] || 0;\n\t\t\t\touter = Math.abs(this._coordinates[i]) + padding * rtl;\n\n\t\t\t\tif ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))\n\t\t\t\t\t|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {\n\t\t\t\t\tmatches.push(i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$stage.children('.active').removeClass('active');\n\t\t\tthis.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');\n\n\t\t\tif (this.settings.center) {\n\t\t\t\tthis.$stage.children('.center').removeClass('center');\n\t\t\t\tthis.$stage.children().eq(this.current()).addClass('center');\n\t\t\t}\n\t\t}\n\t} ];\n\n\t/**\n\t * Initializes the carousel.\n\t * @protected\n\t */\n\tOwl.prototype.initialize = function() {\n\t\tthis.enter('initializing');\n\t\tthis.trigger('initialize');\n\n\t\tthis.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);\n\n\t\tif (this.settings.autoWidth && !this.is('pre-loading')) {\n\t\t\tvar imgs, nestedSelector, width;\n\t\t\timgs = this.$element.find('img');\n\t\t\tnestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;\n\t\t\twidth = this.$element.children(nestedSelector).width();\n\n\t\t\tif (imgs.length && width <= 0) {\n\t\t\t\tthis.preloadAutoWidthImages(imgs);\n\t\t\t}\n\t\t}\n\n\t\tthis.$element.addClass(this.options.loadingClass);\n\n\t\t// create stage\n\t\tthis.$stage = $('<' + this.settings.stageElement + ' class=\"' + this.settings.stageClass + '\"/>')\n\t\t\t.wrap('

    ');\n\n\t\t// append stage\n\t\tthis.$element.append(this.$stage.parent());\n\n\t\t// append content\n\t\tthis.replace(this.$element.children().not(this.$stage.parent()));\n\n\t\t// check visibility\n\t\tif (this.$element.is(':visible')) {\n\t\t\t// update view\n\t\t\tthis.refresh();\n\t\t} else {\n\t\t\t// invalidate width\n\t\t\tthis.invalidate('width');\n\t\t}\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.addClass(this.options.loadedClass);\n\n\t\t// register event handlers\n\t\tthis.registerEventHandlers();\n\n\t\tthis.leave('initializing');\n\t\tthis.trigger('initialized');\n\t};\n\n\t/**\n\t * Setups the current settings.\n\t * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?\n\t * @todo Support for media queries by using `matchMedia` would be nice.\n\t * @public\n\t */\n\tOwl.prototype.setup = function() {\n\t\tvar viewport = this.viewport(),\n\t\t\toverwrites = this.options.responsive,\n\t\t\tmatch = -1,\n\t\t\tsettings = null;\n\n\t\tif (!overwrites) {\n\t\t\tsettings = $.extend({}, this.options);\n\t\t} else {\n\t\t\t$.each(overwrites, function(breakpoint) {\n\t\t\t\tif (breakpoint <= viewport && breakpoint > match) {\n\t\t\t\t\tmatch = Number(breakpoint);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsettings = $.extend({}, this.options, overwrites[match]);\n\t\t\tif (typeof settings.stagePadding === 'function') {\n\t\t\t\tsettings.stagePadding = settings.stagePadding();\n\t\t\t}\n\t\t\tdelete settings.responsive;\n\n\t\t\t// responsive class\n\t\t\tif (settings.responsiveClass) {\n\t\t\t\tthis.$element.attr('class',\n\t\t\t\t\tthis.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\\\S+\\\\s', 'g'), '$1' + match)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.trigger('change', { property: { name: 'settings', value: settings } });\n\t\tthis._breakpoint = match;\n\t\tthis.settings = settings;\n\t\tthis.invalidate('settings');\n\t\tthis.trigger('changed', { property: { name: 'settings', value: this.settings } });\n\t};\n\n\t/**\n\t * Updates option logic if necessery.\n\t * @protected\n\t */\n\tOwl.prototype.optionsLogic = function() {\n\t\tif (this.settings.autoWidth) {\n\t\t\tthis.settings.stagePadding = false;\n\t\t\tthis.settings.merge = false;\n\t\t}\n\t};\n\n\t/**\n\t * Prepares an item before add.\n\t * @todo Rename event parameter `content` to `item`.\n\t * @protected\n\t * @returns {jQuery|HTMLElement} - The item container.\n\t */\n\tOwl.prototype.prepare = function(item) {\n\t\tvar event = this.trigger('prepare', { content: item });\n\n\t\tif (!event.data) {\n\t\t\tevent.data = $('<' + this.settings.itemElement + '/>')\n\t\t\t\t.addClass(this.options.itemClass).append(item)\n\t\t}\n\n\t\tthis.trigger('prepared', { content: event.data });\n\n\t\treturn event.data;\n\t};\n\n\t/**\n\t * Updates the view.\n\t * @public\n\t */\n\tOwl.prototype.update = function() {\n\t\tvar i = 0,\n\t\t\tn = this._pipe.length,\n\t\t\tfilter = $.proxy(function(p) { return this[p] }, this._invalidated),\n\t\t\tcache = {};\n\n\t\twhile (i < n) {\n\t\t\tif (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {\n\t\t\t\tthis._pipe[i].run(cache);\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\n\t\tthis._invalidated = {};\n\n\t\t!this.is('valid') && this.enter('valid');\n\t};\n\n\t/**\n\t * Gets the width of the view.\n\t * @public\n\t * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.\n\t * @returns {Number} - The width of the view in pixel.\n\t */\n\tOwl.prototype.width = function(dimension) {\n\t\tdimension = dimension || Owl.Width.Default;\n\t\tswitch (dimension) {\n\t\t\tcase Owl.Width.Inner:\n\t\t\tcase Owl.Width.Outer:\n\t\t\t\treturn this._width;\n\t\t\tdefault:\n\t\t\t\treturn this._width - this.settings.stagePadding * 2 + this.settings.margin;\n\t\t}\n\t};\n\n\t/**\n\t * Refreshes the carousel primarily for adaptive purposes.\n\t * @public\n\t */\n\tOwl.prototype.refresh = function() {\n\t\tthis.enter('refreshing');\n\t\tthis.trigger('refresh');\n\n\t\tthis.setup();\n\n\t\tthis.optionsLogic();\n\n\t\tthis.$element.addClass(this.options.refreshClass);\n\n\t\tthis.update();\n\n\t\tthis.$element.removeClass(this.options.refreshClass);\n\n\t\tthis.leave('refreshing');\n\t\tthis.trigger('refreshed');\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onThrottledResize = function() {\n\t\twindow.clearTimeout(this.resizeTimer);\n\t\tthis.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onResize = function() {\n\t\tif (!this._items.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._width === this.$element.width()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.$element.is(':visible')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.enter('resizing');\n\n\t\tif (this.trigger('resize').isDefaultPrevented()) {\n\t\t\tthis.leave('resizing');\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.invalidate('width');\n\n\t\tthis.refresh();\n\n\t\tthis.leave('resizing');\n\t\tthis.trigger('resized');\n\t};\n\n\t/**\n\t * Registers event handlers.\n\t * @todo Check `msPointerEnabled`\n\t * @todo #261\n\t * @protected\n\t */\n\tOwl.prototype.registerEventHandlers = function() {\n\t\tif ($.support.transition) {\n\t\t\tthis.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));\n\t\t}\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\tthis.on(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tif (this.settings.mouseDrag) {\n\t\t\tthis.$element.addClass(this.options.dragClass);\n\t\t\tthis.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });\n\t\t}\n\n\t\tif (this.settings.touchDrag){\n\t\t\tthis.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));\n\t\t}\n\t};\n\n\t/**\n\t * Handles `touchstart` and `mousedown` events.\n\t * @todo Horizontal swipe threshold as option\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragStart = function(event) {\n\t\tvar stage = null;\n\n\t\tif (event.which === 3) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ($.support.transform) {\n\t\t\tstage = this.$stage.css('transform').replace(/.*\\(|\\)| /g, '').split(',');\n\t\t\tstage = {\n\t\t\t\tx: stage[stage.length === 16 ? 12 : 4],\n\t\t\t\ty: stage[stage.length === 16 ? 13 : 5]\n\t\t\t};\n\t\t} else {\n\t\t\tstage = this.$stage.position();\n\t\t\tstage = {\n\t\t\t\tx: this.settings.rtl ?\n\t\t\t\t\tstage.left + this.$stage.width() - this.width() + this.settings.margin :\n\t\t\t\t\tstage.left,\n\t\t\t\ty: stage.top\n\t\t\t};\n\t\t}\n\n\t\tif (this.is('animating')) {\n\t\t\t$.support.transform ? this.animate(stage.x) : this.$stage.stop()\n\t\t\tthis.invalidate('position');\n\t\t}\n\n\t\tthis.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');\n\n\t\tthis.speed(0);\n\n\t\tthis._drag.time = new Date().getTime();\n\t\tthis._drag.target = $(event.target);\n\t\tthis._drag.stage.start = stage;\n\t\tthis._drag.stage.current = stage;\n\t\tthis._drag.pointer = this.pointer(event);\n\n\t\t$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));\n\n\t\t$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {\n\t\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event));\n\n\t\t\t$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));\n\n\t\t\tif (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.enter('dragging');\n\t\t\tthis.trigger('drag');\n\t\t}, this));\n\t};\n\n\t/**\n\t * Handles the `touchmove` and `mousemove` events.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragMove = function(event) {\n\t\tvar minimum = null,\n\t\t\tmaximum = null,\n\t\t\tpull = null,\n\t\t\tdelta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this.difference(this._drag.stage.start, delta);\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tif (this.settings.loop) {\n\t\t\tminimum = this.coordinates(this.minimum());\n\t\t\tmaximum = this.coordinates(this.maximum() + 1) - minimum;\n\t\t\tstage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;\n\t\t} else {\n\t\t\tminimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());\n\t\t\tmaximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());\n\t\t\tpull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;\n\t\t\tstage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);\n\t\t}\n\n\t\tthis._drag.stage.current = stage;\n\n\t\tthis.animate(stage.x);\n\t};\n\n\t/**\n\t * Handles the `touchend` and `mouseup` events.\n\t * @todo #261\n\t * @todo Threshold for click event\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragEnd = function(event) {\n\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this._drag.stage.current,\n\t\t\tdirection = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';\n\n\t\t$(document).off('.owl.core');\n\n\t\tthis.$element.removeClass(this.options.grabClass);\n\n\t\tif (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {\n\t\t\tthis.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);\n\t\t\tthis.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));\n\t\t\tthis.invalidate('position');\n\t\t\tthis.update();\n\n\t\t\tthis._drag.direction = direction;\n\n\t\t\tif (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {\n\t\t\t\tthis._drag.target.one('click.owl.core', function() { return false; });\n\t\t\t}\n\t\t}\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.leave('dragging');\n\t\tthis.trigger('dragged');\n\t};\n\n\t/**\n\t * Gets absolute position of the closest item for a coordinate.\n\t * @todo Setting `freeDrag` makes `closest` not reusable. See #165.\n\t * @protected\n\t * @param {Number} coordinate - The coordinate in pixel.\n\t * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.\n\t * @return {Number} - The absolute position of the closest item.\n\t */\n\tOwl.prototype.closest = function(coordinate, direction) {\n\t\tvar position = -1,\n\t\t\tpull = 30,\n\t\t\twidth = this.width(),\n\t\t\tcoordinates = this.coordinates();\n\n\t\tif (!this.settings.freeDrag) {\n\t\t\t// check closest item\n\t\t\t$.each(coordinates, $.proxy(function(index, value) {\n\t\t\t\t// on a left pull, check on current index\n\t\t\t\tif (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {\n\t\t\t\t\tposition = index;\n\t\t\t\t// on a right pull, check on previous index\n\t\t\t\t// to do so, subtract width from value and set position = index + 1\n\t\t\t\t} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {\n\t\t\t\t\tposition = index + 1;\n\t\t\t\t} else if (this.op(coordinate, '<', value)\n\t\t\t\t\t&& this.op(coordinate, '>', coordinates[index + 1] || value - width)) {\n\t\t\t\t\tposition = direction === 'left' ? index + 1 : index;\n\t\t\t\t}\n\t\t\t\treturn position === -1;\n\t\t\t}, this));\n\t\t}\n\n\t\tif (!this.settings.loop) {\n\t\t\t// non loop boundries\n\t\t\tif (this.op(coordinate, '>', coordinates[this.minimum()])) {\n\t\t\t\tposition = coordinate = this.minimum();\n\t\t\t} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {\n\t\t\t\tposition = coordinate = this.maximum();\n\t\t\t}\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Animates the stage.\n\t * @todo #270\n\t * @public\n\t * @param {Number} coordinate - The coordinate in pixels.\n\t */\n\tOwl.prototype.animate = function(coordinate) {\n\t\tvar animate = this.speed() > 0;\n\n\t\tthis.is('animating') && this.onTransitionEnd();\n\n\t\tif (animate) {\n\t\t\tthis.enter('animating');\n\t\t\tthis.trigger('translate');\n\t\t}\n\n\t\tif ($.support.transform3d && $.support.transition) {\n\t\t\tthis.$stage.css({\n\t\t\t\ttransform: 'translate3d(' + coordinate + 'px,0px,0px)',\n\t\t\t\ttransition: (this.speed() / 1000) + 's'\n\t\t\t});\n\t\t} else if (animate) {\n\t\t\tthis.$stage.animate({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));\n\t\t} else {\n\t\t\tthis.$stage.css({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Checks whether the carousel is in a specific state or not.\n\t * @param {String} state - The state to check.\n\t * @returns {Boolean} - The flag which indicates if the carousel is busy.\n\t */\n\tOwl.prototype.is = function(state) {\n\t\treturn this._states.current[state] && this._states.current[state] > 0;\n\t};\n\n\t/**\n\t * Sets the absolute position of the current item.\n\t * @public\n\t * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.\n\t * @returns {Number} - The absolute position of the current item.\n\t */\n\tOwl.prototype.current = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._current;\n\t\t}\n\n\t\tif (this._items.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tposition = this.normalize(position);\n\n\t\tif (this._current !== position) {\n\t\t\tvar event = this.trigger('change', { property: { name: 'position', value: position } });\n\n\t\t\tif (event.data !== undefined) {\n\t\t\t\tposition = this.normalize(event.data);\n\t\t\t}\n\n\t\t\tthis._current = position;\n\n\t\t\tthis.invalidate('position');\n\n\t\t\tthis.trigger('changed', { property: { name: 'position', value: this._current } });\n\t\t}\n\n\t\treturn this._current;\n\t};\n\n\t/**\n\t * Invalidates the given part of the update routine.\n\t * @param {String} [part] - The part to invalidate.\n\t * @returns {Array.} - The invalidated parts.\n\t */\n\tOwl.prototype.invalidate = function(part) {\n\t\tif ($.type(part) === 'string') {\n\t\t\tthis._invalidated[part] = true;\n\t\t\tthis.is('valid') && this.leave('valid');\n\t\t}\n\t\treturn $.map(this._invalidated, function(v, i) { return i });\n\t};\n\n\t/**\n\t * Resets the absolute position of the current item.\n\t * @public\n\t * @param {Number} position - The absolute position of the new item.\n\t */\n\tOwl.prototype.reset = function(position) {\n\t\tposition = this.normalize(position);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._speed = 0;\n\t\tthis._current = position;\n\n\t\tthis.suppress([ 'translate', 'translated' ]);\n\n\t\tthis.animate(this.coordinates(position));\n\n\t\tthis.release([ 'translate', 'translated' ]);\n\t};\n\n\t/**\n\t * Normalizes an absolute or a relative position of an item.\n\t * @public\n\t * @param {Number} position - The absolute or relative position to normalize.\n\t * @param {Boolean} [relative=false] - Whether the given position is relative or not.\n\t * @returns {Number} - The normalized position.\n\t */\n\tOwl.prototype.normalize = function(position, relative) {\n\t\tvar n = this._items.length,\n\t\t\tm = relative ? 0 : this._clones.length;\n\n\t\tif (!this.isNumeric(position) || n < 1) {\n\t\t\tposition = undefined;\n\t\t} else if (position < 0 || position >= n + m) {\n\t\t\tposition = ((position - m / 2) % n + n) % n + m / 2;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Converts an absolute position of an item into a relative one.\n\t * @public\n\t * @param {Number} position - The absolute position to convert.\n\t * @returns {Number} - The converted position.\n\t */\n\tOwl.prototype.relative = function(position) {\n\t\tposition -= this._clones.length / 2;\n\t\treturn this.normalize(position, true);\n\t};\n\n\t/**\n\t * Gets the maximum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.maximum = function(relative) {\n\t\tvar settings = this.settings,\n\t\t\tmaximum = this._coordinates.length,\n\t\t\titerator,\n\t\t\treciprocalItemsWidth,\n\t\t\telementWidth;\n\n\t\tif (settings.loop) {\n\t\t\tmaximum = this._clones.length / 2 + this._items.length - 1;\n\t\t} else if (settings.autoWidth || settings.merge) {\n\t\t\titerator = this._items.length;\n\t\t\treciprocalItemsWidth = this._items[--iterator].width();\n\t\t\telementWidth = this.$element.width();\n\t\t\twhile (iterator--) {\n\t\t\t\treciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;\n\t\t\t\tif (reciprocalItemsWidth > elementWidth) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaximum = iterator + 1;\n\t\t} else if (settings.center) {\n\t\t\tmaximum = this._items.length - 1;\n\t\t} else {\n\t\t\tmaximum = this._items.length - settings.items;\n\t\t}\n\n\t\tif (relative) {\n\t\t\tmaximum -= this._clones.length / 2;\n\t\t}\n\n\t\treturn Math.max(maximum, 0);\n\t};\n\n\t/**\n\t * Gets the minimum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.minimum = function(relative) {\n\t\treturn relative ? 0 : this._clones.length / 2;\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.items = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._items.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._items[position];\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.mergers = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._mergers.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._mergers[position];\n\t};\n\n\t/**\n\t * Gets the absolute positions of clones for an item.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @returns {Array.} - The absolute positions of clones for the item or all if no position was given.\n\t */\n\tOwl.prototype.clones = function(position) {\n\t\tvar odd = this._clones.length / 2,\n\t\t\teven = odd + this._items.length,\n\t\t\tmap = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._clones, function(v, i) { return map(i) });\n\t\t}\n\n\t\treturn $.map(this._clones, function(v, i) { return v === position ? map(i) : null });\n\t};\n\n\t/**\n\t * Sets the current animation speed.\n\t * @public\n\t * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.\n\t * @returns {Number} - The current animation speed in milliseconds.\n\t */\n\tOwl.prototype.speed = function(speed) {\n\t\tif (speed !== undefined) {\n\t\t\tthis._speed = speed;\n\t\t}\n\n\t\treturn this._speed;\n\t};\n\n\t/**\n\t * Gets the coordinate of an item.\n\t * @todo The name of this method is missleanding.\n\t * @public\n\t * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.\n\t * @returns {Number|Array.} - The coordinate of the item in pixel or all coordinates.\n\t */\n\tOwl.prototype.coordinates = function(position) {\n\t\tvar multiplier = 1,\n\t\t\tnewPosition = position - 1,\n\t\t\tcoordinate;\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._coordinates, $.proxy(function(coordinate, index) {\n\t\t\t\treturn this.coordinates(index);\n\t\t\t}, this));\n\t\t}\n\n\t\tif (this.settings.center) {\n\t\t\tif (this.settings.rtl) {\n\t\t\t\tmultiplier = -1;\n\t\t\t\tnewPosition = position + 1;\n\t\t\t}\n\n\t\t\tcoordinate = this._coordinates[position];\n\t\t\tcoordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;\n\t\t} else {\n\t\t\tcoordinate = this._coordinates[newPosition] || 0;\n\t\t}\n\n\t\tcoordinate = Math.ceil(coordinate);\n\n\t\treturn coordinate;\n\t};\n\n\t/**\n\t * Calculates the speed for a translation.\n\t * @protected\n\t * @param {Number} from - The absolute position of the start item.\n\t * @param {Number} to - The absolute position of the target item.\n\t * @param {Number} [factor=undefined] - The time factor in milliseconds.\n\t * @returns {Number} - The time in milliseconds for the translation.\n\t */\n\tOwl.prototype.duration = function(from, to, factor) {\n\t\tif (factor === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));\n\t};\n\n\t/**\n\t * Slides to the specified item.\n\t * @public\n\t * @param {Number} position - The position of the item.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.to = function(position, speed) {\n\t\tvar current = this.current(),\n\t\t\trevert = null,\n\t\t\tdistance = position - this.relative(current),\n\t\t\tdirection = (distance > 0) - (distance < 0),\n\t\t\titems = this._items.length,\n\t\t\tminimum = this.minimum(),\n\t\t\tmaximum = this.maximum();\n\n\t\tif (this.settings.loop) {\n\t\t\tif (!this.settings.rewind && Math.abs(distance) > items / 2) {\n\t\t\t\tdistance += direction * -1 * items;\n\t\t\t}\n\n\t\t\tposition = current + distance;\n\t\t\trevert = ((position - minimum) % items + items) % items + minimum;\n\n\t\t\tif (revert !== position && revert - distance <= maximum && revert - distance > 0) {\n\t\t\t\tcurrent = revert - distance;\n\t\t\t\tposition = revert;\n\t\t\t\tthis.reset(current);\n\t\t\t}\n\t\t} else if (this.settings.rewind) {\n\t\t\tmaximum += 1;\n\t\t\tposition = (position % maximum + maximum) % maximum;\n\t\t} else {\n\t\t\tposition = Math.max(minimum, Math.min(maximum, position));\n\t\t}\n\n\t\tthis.speed(this.duration(current, position, speed));\n\t\tthis.current(position);\n\n\t\tif (this.$element.is(':visible')) {\n\t\t\tthis.update();\n\t\t}\n\t};\n\n\t/**\n\t * Slides to the next item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.next = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) + 1, speed);\n\t};\n\n\t/**\n\t * Slides to the previous item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.prev = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) - 1, speed);\n\t};\n\n\t/**\n\t * Handles the end of an animation.\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onTransitionEnd = function(event) {\n\n\t\t// if css2 animation then event object is undefined\n\t\tif (event !== undefined) {\n\t\t\tevent.stopPropagation();\n\n\t\t\t// Catch only owl-stage transitionEnd event\n\t\t\tif ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.leave('animating');\n\t\tthis.trigger('translated');\n\t};\n\n\t/**\n\t * Gets viewport width.\n\t * @protected\n\t * @return {Number} - The width in pixel.\n\t */\n\tOwl.prototype.viewport = function() {\n\t\tvar width;\n\t\tif (this.options.responsiveBaseElement !== window) {\n\t\t\twidth = $(this.options.responsiveBaseElement).width();\n\t\t} else if (window.innerWidth) {\n\t\t\twidth = window.innerWidth;\n\t\t} else if (document.documentElement && document.documentElement.clientWidth) {\n\t\t\twidth = document.documentElement.clientWidth;\n\t\t} else {\n\t\t\tthrow 'Can not detect viewport width.';\n\t\t}\n\t\treturn width;\n\t};\n\n\t/**\n\t * Replaces the current content.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The new content.\n\t */\n\tOwl.prototype.replace = function(content) {\n\t\tthis.$stage.empty();\n\t\tthis._items = [];\n\n\t\tif (content) {\n\t\t\tcontent = (content instanceof jQuery) ? content : $(content);\n\t\t}\n\n\t\tif (this.settings.nestedItemSelector) {\n\t\t\tcontent = content.find('.' + this.settings.nestedItemSelector);\n\t\t}\n\n\t\tcontent.filter(function() {\n\t\t\treturn this.nodeType === 1;\n\t\t}).each($.proxy(function(index, item) {\n\t\t\titem = this.prepare(item);\n\t\t\tthis.$stage.append(item);\n\t\t\tthis._items.push(item);\n\t\t\tthis._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}, this));\n\n\t\tthis.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);\n\n\t\tthis.invalidate('items');\n\t};\n\n\t/**\n\t * Adds an item.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The item content to add.\n\t * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.\n\t */\n\tOwl.prototype.add = function(content, position) {\n\t\tvar current = this.relative(this._current);\n\n\t\tposition = position === undefined ? this._items.length : this.normalize(position, true);\n\t\tcontent = content instanceof jQuery ? content : $(content);\n\n\t\tthis.trigger('add', { content: content, position: position });\n\n\t\tcontent = this.prepare(content);\n\n\t\tif (this._items.length === 0 || position === this._items.length) {\n\t\t\tthis._items.length === 0 && this.$stage.append(content);\n\t\t\tthis._items.length !== 0 && this._items[position - 1].after(content);\n\t\t\tthis._items.push(content);\n\t\t\tthis._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t} else {\n\t\t\tthis._items[position].before(content);\n\t\t\tthis._items.splice(position, 0, content);\n\t\t\tthis._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}\n\n\t\tthis._items[current] && this.reset(this._items[current].index());\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('added', { content: content, position: position });\n\t};\n\n\t/**\n\t * Removes an item by its position.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {Number} position - The relative position of the item to remove.\n\t */\n\tOwl.prototype.remove = function(position) {\n\t\tposition = this.normalize(position, true);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.trigger('remove', { content: this._items[position], position: position });\n\n\t\tthis._items[position].remove();\n\t\tthis._items.splice(position, 1);\n\t\tthis._mergers.splice(position, 1);\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('removed', { content: null, position: position });\n\t};\n\n\t/**\n\t * Preloads images with auto width.\n\t * @todo Replace by a more generic approach\n\t * @protected\n\t */\n\tOwl.prototype.preloadAutoWidthImages = function(images) {\n\t\timages.each($.proxy(function(i, element) {\n\t\t\tthis.enter('pre-loading');\n\t\t\telement = $(element);\n\t\t\t$(new Image()).one('load', $.proxy(function(e) {\n\t\t\t\telement.attr('src', e.target.src);\n\t\t\t\telement.css('opacity', 1);\n\t\t\t\tthis.leave('pre-loading');\n\t\t\t\t!this.is('pre-loading') && !this.is('initializing') && this.refresh();\n\t\t\t}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));\n\t\t}, this));\n\t};\n\n\t/**\n\t * Destroys the carousel.\n\t * @public\n\t */\n\tOwl.prototype.destroy = function() {\n\n\t\tthis.$element.off('.owl.core');\n\t\tthis.$stage.off('.owl.core');\n\t\t$(document).off('.owl.core');\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\twindow.clearTimeout(this.resizeTimer);\n\t\t\tthis.off(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tfor (var i in this._plugins) {\n\t\t\tthis._plugins[i].destroy();\n\t\t}\n\n\t\tthis.$stage.children('.cloned').remove();\n\n\t\tthis.$stage.unwrap();\n\t\tthis.$stage.children().contents().unwrap();\n\t\tthis.$stage.children().unwrap();\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.refreshClass)\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.removeClass(this.options.loadedClass)\n\t\t\t.removeClass(this.options.rtlClass)\n\t\t\t.removeClass(this.options.dragClass)\n\t\t\t.removeClass(this.options.grabClass)\n\t\t\t.attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\\\S+\\\\s', 'g'), ''))\n\t\t\t.removeData('owl.carousel');\n\t};\n\n\t/**\n\t * Operators to calculate right-to-left and left-to-right.\n\t * @protected\n\t * @param {Number} [a] - The left side operand.\n\t * @param {String} [o] - The operator.\n\t * @param {Number} [b] - The right side operand.\n\t */\n\tOwl.prototype.op = function(a, o, b) {\n\t\tvar rtl = this.settings.rtl;\n\t\tswitch (o) {\n\t\t\tcase '<':\n\t\t\t\treturn rtl ? a > b : a < b;\n\t\t\tcase '>':\n\t\t\t\treturn rtl ? a < b : a > b;\n\t\t\tcase '>=':\n\t\t\t\treturn rtl ? a <= b : a >= b;\n\t\t\tcase '<=':\n\t\t\t\treturn rtl ? a >= b : a <= b;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\t/**\n\t * Attaches to an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The event handler to attach.\n\t * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.\n\t */\n\tOwl.prototype.on = function(element, event, listener, capture) {\n\t\tif (element.addEventListener) {\n\t\t\telement.addEventListener(event, listener, capture);\n\t\t} else if (element.attachEvent) {\n\t\t\telement.attachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Detaches from an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The attached event handler to detach.\n\t * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.\n\t */\n\tOwl.prototype.off = function(element, event, listener, capture) {\n\t\tif (element.removeEventListener) {\n\t\t\telement.removeEventListener(event, listener, capture);\n\t\t} else if (element.detachEvent) {\n\t\t\telement.detachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Triggers a public event.\n\t * @todo Remove `status`, `relatedTarget` should be used instead.\n\t * @protected\n\t * @param {String} name - The event name.\n\t * @param {*} [data=null] - The event data.\n\t * @param {String} [namespace=carousel] - The event namespace.\n\t * @param {String} [state] - The state which is associated with the event.\n\t * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.\n\t * @returns {Event} - The event arguments.\n\t */\n\tOwl.prototype.trigger = function(name, data, namespace, state, enter) {\n\t\tvar status = {\n\t\t\titem: { count: this._items.length, index: this.current() }\n\t\t}, handler = $.camelCase(\n\t\t\t$.grep([ 'on', name, namespace ], function(v) { return v })\n\t\t\t\t.join('-').toLowerCase()\n\t\t), event = $.Event(\n\t\t\t[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),\n\t\t\t$.extend({ relatedTarget: this }, status, data)\n\t\t);\n\n\t\tif (!this._supress[name]) {\n\t\t\t$.each(this._plugins, function(name, plugin) {\n\t\t\t\tif (plugin.onTrigger) {\n\t\t\t\t\tplugin.onTrigger(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.register({ type: Owl.Type.Event, name: name });\n\t\t\tthis.$element.trigger(event);\n\n\t\t\tif (this.settings && typeof this.settings[handler] === 'function') {\n\t\t\t\tthis.settings[handler].call(this, event);\n\t\t\t}\n\t\t}\n\n\t\treturn event;\n\t};\n\n\t/**\n\t * Enters a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.enter = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tif (this._states.current[name] === undefined) {\n\t\t\t\tthis._states.current[name] = 0;\n\t\t\t}\n\n\t\t\tthis._states.current[name]++;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Leaves a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.leave = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tthis._states.current[name]--;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Registers an event or state.\n\t * @public\n\t * @param {Object} object - The event or state to register.\n\t */\n\tOwl.prototype.register = function(object) {\n\t\tif (object.type === Owl.Type.Event) {\n\t\t\tif (!$.event.special[object.name]) {\n\t\t\t\t$.event.special[object.name] = {};\n\t\t\t}\n\n\t\t\tif (!$.event.special[object.name].owl) {\n\t\t\t\tvar _default = $.event.special[object.name]._default;\n\t\t\t\t$.event.special[object.name]._default = function(e) {\n\t\t\t\t\tif (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {\n\t\t\t\t\t\treturn _default.apply(this, arguments);\n\t\t\t\t\t}\n\t\t\t\t\treturn e.namespace && e.namespace.indexOf('owl') > -1;\n\t\t\t\t};\n\t\t\t\t$.event.special[object.name].owl = true;\n\t\t\t}\n\t\t} else if (object.type === Owl.Type.State) {\n\t\t\tif (!this._states.tags[object.name]) {\n\t\t\t\tthis._states.tags[object.name] = object.tags;\n\t\t\t} else {\n\t\t\t\tthis._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);\n\t\t\t}\n\n\t\t\tthis._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {\n\t\t\t\treturn $.inArray(tag, this._states.tags[object.name]) === i;\n\t\t\t}, this));\n\t\t}\n\t};\n\n\t/**\n\t * Suppresses events.\n\t * @protected\n\t * @param {Array.} events - The events to suppress.\n\t */\n\tOwl.prototype.suppress = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tthis._supress[event] = true;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Releases suppressed events.\n\t * @protected\n\t * @param {Array.} events - The events to release.\n\t */\n\tOwl.prototype.release = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tdelete this._supress[event];\n\t\t}, this));\n\t};\n\n\t/**\n\t * Gets unified pointer coordinates from event.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} - The `mousedown` or `touchstart` event.\n\t * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.\n\t */\n\tOwl.prototype.pointer = function(event) {\n\t\tvar result = { x: null, y: null };\n\n\t\tevent = event.originalEvent || event || window.event;\n\n\t\tevent = event.touches && event.touches.length ?\n\t\t\tevent.touches[0] : event.changedTouches && event.changedTouches.length ?\n\t\t\t\tevent.changedTouches[0] : event;\n\n\t\tif (event.pageX) {\n\t\t\tresult.x = event.pageX;\n\t\t\tresult.y = event.pageY;\n\t\t} else {\n\t\t\tresult.x = event.clientX;\n\t\t\tresult.y = event.clientY;\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t/**\n\t * Determines if the input is a Number or something that can be coerced to a Number\n\t * @protected\n\t * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested\n\t * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number\n\t */\n\tOwl.prototype.isNumeric = function(number) {\n\t\treturn !isNaN(parseFloat(number));\n\t};\n\n\t/**\n\t * Gets the difference of two vectors.\n\t * @todo #261\n\t * @protected\n\t * @param {Object} - The first vector.\n\t * @param {Object} - The second vector.\n\t * @returns {Object} - The difference.\n\t */\n\tOwl.prototype.difference = function(first, second) {\n\t\treturn {\n\t\t\tx: first.x - second.x,\n\t\t\ty: first.y - second.y\n\t\t};\n\t};\n\n\t/**\n\t * The jQuery Plugin for the Owl Carousel\n\t * @todo Navigation plugin `next` and `prev`\n\t * @public\n\t */\n\t$.fn.owlCarousel = function(option) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\n\t\treturn this.each(function() {\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('owl.carousel');\n\n\t\t\tif (!data) {\n\t\t\t\tdata = new Owl(this, typeof option == 'object' && option);\n\t\t\t\t$this.data('owl.carousel', data);\n\n\t\t\t\t$.each([\n\t\t\t\t\t'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'\n\t\t\t\t], function(i, event) {\n\t\t\t\t\tdata.register({ type: Owl.Type.Event, name: event });\n\t\t\t\t\tdata.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {\n\t\t\t\t\t\tif (e.namespace && e.relatedTarget !== this) {\n\t\t\t\t\t\t\tthis.suppress([ event ]);\n\t\t\t\t\t\t\tdata[event].apply(this, [].slice.call(arguments, 1));\n\t\t\t\t\t\t\tthis.release([ event ]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, data));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof option == 'string' && option.charAt(0) !== '_') {\n\t\t\t\tdata[option].apply(data, args);\n\t\t\t}\n\t\t});\n\t};\n\n\t/**\n\t * The constructor for the jQuery Plugin\n\t * @public\n\t */\n\t$.fn.owlCarousel.Constructor = Owl;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * AutoRefresh Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto refresh plugin.\n\t * @class The Auto Refresh Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoRefresh = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Refresh interval.\n\t\t * @protected\n\t\t * @type {number}\n\t\t */\n\t\tthis._interval = null;\n\n\t\t/**\n\t\t * Whether the element is currently visible or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._visible = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoRefresh) {\n\t\t\t\t\tthis.watch();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoRefresh.Defaults = {\n\t\tautoRefresh: true,\n\t\tautoRefreshInterval: 500\n\t};\n\n\t/**\n\t * Watches the element.\n\t */\n\tAutoRefresh.prototype.watch = function() {\n\t\tif (this._interval) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = this._core.$element.is(':visible');\n\t\tthis._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);\n\t};\n\n\t/**\n\t * Refreshes the element.\n\t */\n\tAutoRefresh.prototype.refresh = function() {\n\t\tif (this._core.$element.is(':visible') === this._visible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = !this._visible;\n\n\t\tthis._core.$element.toggleClass('owl-hidden', !this._visible);\n\n\t\tthis._visible && (this._core.invalidate('width') && this._core.refresh());\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoRefresh.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\twindow.clearInterval(this._interval);\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Lazy Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the lazy plugin.\n\t * @class The Lazy Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Lazy = function(carousel) {\n\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Already loaded items.\n\t\t * @protected\n\t\t * @type {Array.}\n\t\t */\n\t\tthis._loaded = [];\n\n\t\t/**\n\t\t * Event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this._core.settings || !this._core.settings.lazyLoad) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ((e.property && e.property.name == 'position') || e.type == 'initialized') {\n\t\t\t\t\tvar settings = this._core.settings,\n\t\t\t\t\t\tn = (settings.center && Math.ceil(settings.items / 2) || settings.items),\n\t\t\t\t\t\ti = ((settings.center && n * -1) || 0),\n\t\t\t\t\t\tposition = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,\n\t\t\t\t\t\tclones = this._core.clones().length,\n\t\t\t\t\t\tload = $.proxy(function(i, v) { this.load(v) }, this);\n\n\t\t\t\t\twhile (i++ < n) {\n\t\t\t\t\t\tthis.load(clones / 2 + this._core.relative(position));\n\t\t\t\t\t\tclones && $.each(this._core.clones(this._core.relative(position)), load);\n\t\t\t\t\t\tposition++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set the default options\n\t\tthis._core.options = $.extend({}, Lazy.Defaults, this._core.options);\n\n\t\t// register event handler\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tLazy.Defaults = {\n\t\tlazyLoad: false\n\t};\n\n\t/**\n\t * Loads all resources of an item at the specified position.\n\t * @param {Number} position - The absolute position of the item.\n\t * @protected\n\t */\n\tLazy.prototype.load = function(position) {\n\t\tvar $item = this._core.$stage.children().eq(position),\n\t\t\t$elements = $item && $item.find('.owl-lazy');\n\n\t\tif (!$elements || $.inArray($item.get(0), this._loaded) > -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t$elements.each($.proxy(function(index, element) {\n\t\t\tvar $element = $(element), image,\n\t\t\t\turl = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src');\n\n\t\t\tthis._core.trigger('load', { element: $element, url: url }, 'lazy');\n\n\t\t\tif ($element.is('img')) {\n\t\t\t\t$element.one('load.owl.lazy', $.proxy(function() {\n\t\t\t\t\t$element.css('opacity', 1);\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this)).attr('src', url);\n\t\t\t} else {\n\t\t\t\timage = new Image();\n\t\t\t\timage.onload = $.proxy(function() {\n\t\t\t\t\t$element.css({\n\t\t\t\t\t\t'background-image': 'url(' + url + ')',\n\t\t\t\t\t\t'opacity': '1'\n\t\t\t\t\t});\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this);\n\t\t\t\timage.src = url;\n\t\t\t}\n\t\t}, this));\n\n\t\tthis._loaded.push($item.get(0));\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tLazy.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis._core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * AutoHeight Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto height plugin.\n\t * @class The Auto Height Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoHeight = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight && e.property.name == 'position'){\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'loaded.owl.lazy': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight\n\t\t\t\t\t&& e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoHeight.Defaults = {\n\t\tautoHeight: false,\n\t\tautoHeightClass: 'owl-height'\n\t};\n\n\t/**\n\t * Updates the view.\n\t */\n\tAutoHeight.prototype.update = function() {\n\t\tvar start = this._core._current,\n\t\t\tend = start + this._core.settings.items,\n\t\t\tvisible = this._core.$stage.children().toArray().slice(start, end),\n\t\t\theights = [],\n\t\t\tmaxheight = 0;\n\n\t\t$.each(visible, function(index, item) {\n\t\t\theights.push($(item).height());\n\t\t});\n\n\t\tmaxheight = Math.max.apply(null, heights);\n\n\t\tthis._core.$stage.parent()\n\t\t\t.height(maxheight)\n\t\t\t.addClass(this._core.settings.autoHeightClass);\n\t};\n\n\tAutoHeight.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Video Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the video plugin.\n\t * @class The Video Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Video = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Cache all video URLs.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._videos = {};\n\n\t\t/**\n\t\t * Current playing item.\n\t\t * @protected\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis._playing = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @todo The cloned content removale is too late\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'resize.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.video && this.isInFullScreen()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.is('resizing')) {\n\t\t\t\t\tthis._core.$stage.find('.cloned .owl-video-frame').remove();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position' && this._playing) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar $element = $(e.content).find('.owl-video');\n\n\t\t\t\tif ($element.length) {\n\t\t\t\t\t$element.css('display', 'none');\n\t\t\t\t\tthis.fetch($element, $(e.content));\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Video.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\tthis._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {\n\t\t\tthis.play(e);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tVideo.Defaults = {\n\t\tvideo: false,\n\t\tvideoHeight: false,\n\t\tvideoWidth: false\n\t};\n\n\t/**\n\t * Gets the video ID and the type (YouTube/Vimeo/vzaar only).\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {jQuery} item - The item containing the video.\n\t */\n\tVideo.prototype.fetch = function(target, item) {\n\t\t\tvar type = (function() {\n\t\t\t\t\tif (target.attr('data-vimeo-id')) {\n\t\t\t\t\t\treturn 'vimeo';\n\t\t\t\t\t} else if (target.attr('data-vzaar-id')) {\n\t\t\t\t\t\treturn 'vzaar'\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 'youtube';\n\t\t\t\t\t}\n\t\t\t\t})(),\n\t\t\t\tid = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),\n\t\t\t\twidth = target.attr('data-width') || this._core.settings.videoWidth,\n\t\t\t\theight = target.attr('data-height') || this._core.settings.videoHeight,\n\t\t\t\turl = target.attr('href');\n\n\t\tif (url) {\n\n\t\t\t/*\n\t\t\t\t\tParses the id's out of the following urls (and probably more):\n\t\t\t\t\thttps://www.youtube.com/watch?v=:id\n\t\t\t\t\thttps://youtu.be/:id\n\t\t\t\t\thttps://vimeo.com/:id\n\t\t\t\t\thttps://vimeo.com/channels/:channel/:id\n\t\t\t\t\thttps://vimeo.com/groups/:group/videos/:id\n\t\t\t\t\thttps://app.vzaar.com/videos/:id\n\n\t\t\t\t\tVisual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F\n\t\t\t*/\n\n\t\t\tid = url.match(/(http:|https:|)\\/\\/(player.|www.|app.)?(vimeo\\.com|youtu(be\\.com|\\.be|be\\.googleapis\\.com)|vzaar\\.com)\\/(video\\/|videos\\/|embed\\/|channels\\/.+\\/|groups\\/.+\\/|watch\\?v=|v\\/)?([A-Za-z0-9._%-]*)(\\&\\S+)?/);\n\n\t\t\tif (id[3].indexOf('youtu') > -1) {\n\t\t\t\ttype = 'youtube';\n\t\t\t} else if (id[3].indexOf('vimeo') > -1) {\n\t\t\t\ttype = 'vimeo';\n\t\t\t} else if (id[3].indexOf('vzaar') > -1) {\n\t\t\t\ttype = 'vzaar';\n\t\t\t} else {\n\t\t\t\tthrow new Error('Video URL not supported.');\n\t\t\t}\n\t\t\tid = id[6];\n\t\t} else {\n\t\t\tthrow new Error('Missing video URL.');\n\t\t}\n\n\t\tthis._videos[url] = {\n\t\t\ttype: type,\n\t\t\tid: id,\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\n\t\titem.attr('data-video', url);\n\n\t\tthis.thumbnail(target, this._videos[url]);\n\t};\n\n\t/**\n\t * Creates video thumbnail.\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {Object} info - The video info object.\n\t * @see `fetch`\n\t */\n\tVideo.prototype.thumbnail = function(target, video) {\n\t\tvar tnLink,\n\t\t\ticon,\n\t\t\tpath,\n\t\t\tdimensions = video.width && video.height ? 'style=\"width:' + video.width + 'px;height:' + video.height + 'px;\"' : '',\n\t\t\tcustomTn = target.find('img'),\n\t\t\tsrcType = 'src',\n\t\t\tlazyClass = '',\n\t\t\tsettings = this._core.settings,\n\t\t\tcreate = function(path) {\n\t\t\t\ticon = '
    ';\n\n\t\t\t\tif (settings.lazyLoad) {\n\t\t\t\t\ttnLink = '
    ';\n\t\t\t\t} else {\n\t\t\t\t\ttnLink = '
    ';\n\t\t\t\t}\n\t\t\t\ttarget.after(tnLink);\n\t\t\t\ttarget.after(icon);\n\t\t\t};\n\n\t\t// wrap video content into owl-video-wrapper div\n\t\ttarget.wrap('
    ');\n\n\t\tif (this._core.settings.lazyLoad) {\n\t\t\tsrcType = 'data-src';\n\t\t\tlazyClass = 'owl-lazy';\n\t\t}\n\n\t\t// custom thumbnail\n\t\tif (customTn.length) {\n\t\t\tcreate(customTn.attr(srcType));\n\t\t\tcustomTn.remove();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (video.type === 'youtube') {\n\t\t\tpath = \"//img.youtube.com/vi/\" + video.id + \"/hqdefault.jpg\";\n\t\t\tcreate(path);\n\t\t} else if (video.type === 'vimeo') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vimeo.com/api/v2/video/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data[0].thumbnail_large;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (video.type === 'vzaar') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vzaar.com/api/videos/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data.framegrab_url;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Stops the current video.\n\t * @public\n\t */\n\tVideo.prototype.stop = function() {\n\t\tthis._core.trigger('stop', null, 'video');\n\t\tthis._playing.find('.owl-video-frame').remove();\n\t\tthis._playing.removeClass('owl-video-playing');\n\t\tthis._playing = null;\n\t\tthis._core.leave('playing');\n\t\tthis._core.trigger('stopped', null, 'video');\n\t};\n\n\t/**\n\t * Starts the current video.\n\t * @public\n\t * @param {Event} event - The event arguments.\n\t */\n\tVideo.prototype.play = function(event) {\n\t\tvar target = $(event.target),\n\t\t\titem = target.closest('.' + this._core.settings.itemClass),\n\t\t\tvideo = this._videos[item.attr('data-video')],\n\t\t\twidth = video.width || '100%',\n\t\t\theight = video.height || this._core.$stage.height(),\n\t\t\thtml;\n\n\t\tif (this._playing) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('playing');\n\t\tthis._core.trigger('play', null, 'video');\n\n\t\titem = this._core.items(this._core.relative(item.index()));\n\n\t\tthis._core.reset(item.index());\n\n\t\tif (video.type === 'youtube') {\n\t\t\thtml = '';\n\t\t} else if (video.type === 'vimeo') {\n\t\t\thtml = '';\n\t\t} else if (video.type === 'vzaar') {\n\t\t\thtml = '';\n\t\t}\n\n\t\t$('
    ' + html + '
    ').insertAfter(item.find('.owl-video'));\n\n\t\tthis._playing = item.addClass('owl-video-playing');\n\t};\n\n\t/**\n\t * Checks whether an video is currently in full screen mode or not.\n\t * @todo Bad style because looks like a readonly method but changes members.\n\t * @protected\n\t * @returns {Boolean}\n\t */\n\tVideo.prototype.isInFullScreen = function() {\n\t\tvar element = document.fullscreenElement || document.mozFullScreenElement ||\n\t\t\t\tdocument.webkitFullscreenElement;\n\n\t\treturn element && $(element).parent().hasClass('owl-video-frame');\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tVideo.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis._core.$element.off('click.owl.video');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Video = Video;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Animate Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the animate plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Animate = function(scope) {\n\t\tthis.core = scope;\n\t\tthis.core.options = $.extend({}, Animate.Defaults, this.core.options);\n\t\tthis.swapping = true;\n\t\tthis.previous = undefined;\n\t\tthis.next = undefined;\n\n\t\tthis.handlers = {\n\t\t\t'change.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.previous = this.core.current();\n\t\t\t\t\tthis.next = e.property.value;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.swapping = e.type == 'translated';\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'translate.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {\n\t\t\t\t\tthis.swap();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\tthis.core.$element.on(this.handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAnimate.Defaults = {\n\t\tanimateOut: false,\n\t\tanimateIn: false\n\t};\n\n\t/**\n\t * Toggles the animation classes whenever an translations starts.\n\t * @protected\n\t * @returns {Boolean|undefined}\n\t */\n\tAnimate.prototype.swap = function() {\n\n\t\tif (this.core.settings.items !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!$.support.animation || !$.support.transition) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.core.speed(0);\n\n\t\tvar left,\n\t\t\tclear = $.proxy(this.clear, this),\n\t\t\tprevious = this.core.$stage.children().eq(this.previous),\n\t\t\tnext = this.core.$stage.children().eq(this.next),\n\t\t\tincoming = this.core.settings.animateIn,\n\t\t\toutgoing = this.core.settings.animateOut;\n\n\t\tif (this.core.current() === this.previous) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (outgoing) {\n\t\t\tleft = this.core.coordinates(this.previous) - this.core.coordinates(this.next);\n\t\t\tprevious.one($.support.animation.end, clear)\n\t\t\t\t.css( { 'left': left + 'px' } )\n\t\t\t\t.addClass('animated owl-animated-out')\n\t\t\t\t.addClass(outgoing);\n\t\t}\n\n\t\tif (incoming) {\n\t\t\tnext.one($.support.animation.end, clear)\n\t\t\t\t.addClass('animated owl-animated-in')\n\t\t\t\t.addClass(incoming);\n\t\t}\n\t};\n\n\tAnimate.prototype.clear = function(e) {\n\t\t$(e.target).css( { 'left': '' } )\n\t\t\t.removeClass('animated owl-animated-out owl-animated-in')\n\t\t\t.removeClass(this.core.settings.animateIn)\n\t\t\t.removeClass(this.core.settings.animateOut);\n\t\tthis.core.onTransitionEnd();\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tAnimate.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis.core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Autoplay Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the autoplay plugin.\n\t * @class The Autoplay Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Autoplay = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * The autoplay timeout.\n\t\t * @type {Timeout}\n\t\t */\n\t\tthis._timeout = null;\n\n\t\t/**\n\t\t * Indicates whenever the autoplay is paused.\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._paused = false;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'settings') {\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis.play();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.stop();\n\t\t\t\t\t}\n\t\t\t\t} else if (e.namespace && e.property.name === 'position') {\n\t\t\t\t\t//console.log('play?', e);\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis._setAutoPlayInterval();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoplay) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'play.owl.autoplay': $.proxy(function(e, t, s) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.play(t, s);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'stop.owl.autoplay': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseover.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseleave.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchstart.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchend.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Autoplay.Defaults, this._core.options);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoplay.Defaults = {\n\t\tautoplay: false,\n\t\tautoplayTimeout: 5000,\n\t\tautoplayHoverPause: false,\n\t\tautoplaySpeed: false\n\t};\n\n\t/**\n\t * Starts the autoplay.\n\t * @public\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t */\n\tAutoplay.prototype.play = function(timeout, speed) {\n\t\tthis._paused = false;\n\n\t\tif (this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('rotating');\n\n\t\tthis._setAutoPlayInterval();\n\t};\n\n\t/**\n\t * Gets a new timeout\n\t * @private\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t * @return {Timeout}\n\t */\n\tAutoplay.prototype._getNextTimeout = function(timeout, speed) {\n\t\tif ( this._timeout ) {\n\t\t\twindow.clearTimeout(this._timeout);\n\t\t}\n\t\treturn window.setTimeout($.proxy(function() {\n\t\t\tif (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._core.next(speed || this._core.settings.autoplaySpeed);\n\t\t}, this), timeout || this._core.settings.autoplayTimeout);\n\t};\n\n\t/**\n\t * Sets autoplay in motion.\n\t * @private\n\t */\n\tAutoplay.prototype._setAutoPlayInterval = function() {\n\t\tthis._timeout = this._getNextTimeout();\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.stop = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.clearTimeout(this._timeout);\n\t\tthis._core.leave('rotating');\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.pause = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._paused = true;\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoplay.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis.stop();\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Navigation Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the navigation plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} carousel - The Owl Carousel.\n\t */\n\tvar Navigation = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Indicates whether the plugin is initialized or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._initialized = false;\n\n\t\t/**\n\t\t * The current paging indexes.\n\t\t * @protected\n\t\t * @type {Array}\n\t\t */\n\t\tthis._pages = [];\n\n\t\t/**\n\t\t * All DOM elements of the user interface.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._controls = {};\n\n\t\t/**\n\t\t * Markup for an indicator.\n\t\t * @protected\n\t\t * @type {Array.}\n\t\t */\n\t\tthis._templates = [];\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * Overridden methods of the carousel.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._overrides = {\n\t\t\tnext: this._core.next,\n\t\t\tprev: this._core.prev,\n\t\t\tto: this._core.to\n\t\t};\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.push('
    ' +\n\t\t\t\t\t\t$(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '
    ');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'added.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 0, this._templates.pop());\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'remove.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 1);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.draw();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && !this._initialized) {\n\t\t\t\t\tthis._core.trigger('initialize', null, 'navigation');\n\t\t\t\t\tthis.initialize();\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._initialized = true;\n\t\t\t\t\tthis._core.trigger('initialized', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._initialized) {\n\t\t\t\t\tthis._core.trigger('refresh', null, 'navigation');\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._core.trigger('refreshed', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Navigation.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t * @todo Rename `slideBy` to `navBy`\n\t */\n\tNavigation.Defaults = {\n\t\tnav: false,\n\t\tnavText: [ 'prev', 'next' ],\n\t\tnavSpeed: false,\n\t\tnavElement: 'div',\n\t\tnavContainer: false,\n\t\tnavContainerClass: 'owl-nav',\n\t\tnavClass: [ 'owl-prev', 'owl-next' ],\n\t\tslideBy: 1,\n\t\tdotClass: 'owl-dot',\n\t\tdotsClass: 'owl-dots',\n\t\tdots: true,\n\t\tdotsEach: false,\n\t\tdotsData: false,\n\t\tdotsSpeed: false,\n\t\tdotsContainer: false\n\t};\n\n\t/**\n\t * Initializes the layout of the plugin and extends the carousel.\n\t * @protected\n\t */\n\tNavigation.prototype.initialize = function() {\n\t\tvar override,\n\t\t\tsettings = this._core.settings;\n\n\t\t// create DOM structure for relative navigation\n\t\tthis._controls.$relative = (settings.navContainer ? $(settings.navContainer)\n\t\t\t: $('
    ').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$previous = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[0])\n\t\t\t.html(settings.navText[0])\n\t\t\t.prependTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.prev(settings.navSpeed);\n\t\t\t}, this));\n\t\tthis._controls.$next = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[1])\n\t\t\t.html(settings.navText[1])\n\t\t\t.appendTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.next(settings.navSpeed);\n\t\t\t}, this));\n\n\t\t// create DOM structure for absolute navigation\n\t\tif (!settings.dotsData) {\n\t\t\tthis._templates = [ $('
    ')\n\t\t\t\t.addClass(settings.dotClass)\n\t\t\t\t.append($(''))\n\t\t\t\t.prop('outerHTML') ];\n\t\t}\n\n\t\tthis._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)\n\t\t\t: $('
    ').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$absolute.on('click', 'div', $.proxy(function(e) {\n\t\t\tvar index = $(e.target).parent().is(this._controls.$absolute)\n\t\t\t\t? $(e.target).index() : $(e.target).parent().index();\n\n\t\t\te.preventDefault();\n\n\t\t\tthis.to(index, settings.dotsSpeed);\n\t\t}, this));\n\n\t\t// override public methods of the carousel\n\t\tfor (override in this._overrides) {\n\t\t\tthis._core[override] = $.proxy(this[override], this);\n\t\t}\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @protected\n\t */\n\tNavigation.prototype.destroy = function() {\n\t\tvar handler, control, property, override;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (control in this._controls) {\n\t\t\tthis._controls[control].remove();\n\t\t}\n\t\tfor (override in this.overides) {\n\t\t\tthis._core[override] = this._overrides[override];\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t/**\n\t * Updates the internal state.\n\t * @protected\n\t */\n\tNavigation.prototype.update = function() {\n\t\tvar i, j, k,\n\t\t\tlower = this._core.clones().length / 2,\n\t\t\tupper = lower + this._core.items().length,\n\t\t\tmaximum = this._core.maximum(true),\n\t\t\tsettings = this._core.settings,\n\t\t\tsize = settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items;\n\n\t\tif (settings.slideBy !== 'page') {\n\t\t\tsettings.slideBy = Math.min(settings.slideBy, settings.items);\n\t\t}\n\n\t\tif (settings.dots || settings.slideBy == 'page') {\n\t\t\tthis._pages = [];\n\n\t\t\tfor (i = lower, j = 0, k = 0; i < upper; i++) {\n\t\t\t\tif (j >= size || j === 0) {\n\t\t\t\t\tthis._pages.push({\n\t\t\t\t\t\tstart: Math.min(maximum, i - lower),\n\t\t\t\t\t\tend: i - lower + size - 1\n\t\t\t\t\t});\n\t\t\t\t\tif (Math.min(maximum, i - lower) === maximum) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tj = 0, ++k;\n\t\t\t\t}\n\t\t\t\tj += this._core.mergers(this._core.relative(i));\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Draws the user interface.\n\t * @todo The option `dotsData` wont work.\n\t * @protected\n\t */\n\tNavigation.prototype.draw = function() {\n\t\tvar difference,\n\t\t\tsettings = this._core.settings,\n\t\t\tdisabled = this._core.items().length <= settings.items,\n\t\t\tindex = this._core.relative(this._core.current()),\n\t\t\tloop = settings.loop || settings.rewind;\n\n\t\tthis._controls.$relative.toggleClass('disabled', !settings.nav || disabled);\n\n\t\tif (settings.nav) {\n\t\t\tthis._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));\n\t\t\tthis._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));\n\t\t}\n\n\t\tthis._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);\n\n\t\tif (settings.dots) {\n\t\t\tdifference = this._pages.length - this._controls.$absolute.children().length;\n\n\t\t\tif (settings.dotsData && difference !== 0) {\n\t\t\t\tthis._controls.$absolute.html(this._templates.join(''));\n\t\t\t} else if (difference > 0) {\n\t\t\t\tthis._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));\n\t\t\t} else if (difference < 0) {\n\t\t\t\tthis._controls.$absolute.children().slice(difference).remove();\n\t\t\t}\n\n\t\t\tthis._controls.$absolute.find('.active').removeClass('active');\n\t\t\tthis._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');\n\t\t}\n\t};\n\n\t/**\n\t * Extends event data.\n\t * @protected\n\t * @param {Event} event - The event object which gets thrown.\n\t */\n\tNavigation.prototype.onTrigger = function(event) {\n\t\tvar settings = this._core.settings;\n\n\t\tevent.page = {\n\t\t\tindex: $.inArray(this.current(), this._pages),\n\t\t\tcount: this._pages.length,\n\t\t\tsize: settings && (settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items)\n\t\t};\n\t};\n\n\t/**\n\t * Gets the current page position of the carousel.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.current = function() {\n\t\tvar current = this._core.relative(this._core.current());\n\t\treturn $.grep(this._pages, $.proxy(function(page, index) {\n\t\t\treturn page.start <= current && page.end >= current;\n\t\t}, this)).pop();\n\t};\n\n\t/**\n\t * Gets the current succesor/predecessor position.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.getPosition = function(successor) {\n\t\tvar position, length,\n\t\t\tsettings = this._core.settings;\n\n\t\tif (settings.slideBy == 'page') {\n\t\t\tposition = $.inArray(this.current(), this._pages);\n\t\t\tlength = this._pages.length;\n\t\t\tsuccessor ? ++position : --position;\n\t\t\tposition = this._pages[((position % length) + length) % length].start;\n\t\t} else {\n\t\t\tposition = this._core.relative(this._core.current());\n\t\t\tlength = this._core.items().length;\n\t\t\tsuccessor ? position += settings.slideBy : position -= settings.slideBy;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Slides to the next item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.next = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);\n\t};\n\n\t/**\n\t * Slides to the previous item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.prev = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);\n\t};\n\n\t/**\n\t * Slides to the specified item or page.\n\t * @public\n\t * @param {Number} position - The position of the item or page.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.\n\t */\n\tNavigation.prototype.to = function(position, speed, standard) {\n\t\tvar length;\n\n\t\tif (!standard && this._pages.length) {\n\t\t\tlength = this._pages.length;\n\t\t\t$.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);\n\t\t} else {\n\t\t\t$.proxy(this._overrides.to, this._core)(position, speed);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Hash Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the hash plugin.\n\t * @class The Hash Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Hash = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Hash index for the items.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._hashes = {};\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.startPosition === 'URLHash') {\n\t\t\t\t\t$(window).trigger('hashchange.owl.navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tvar hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');\n\n\t\t\t\t\tif (!hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._hashes[hash] = e.content;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position') {\n\t\t\t\t\tvar current = this._core.items(this._core.relative(this._core.current())),\n\t\t\t\t\t\thash = $.map(this._hashes, function(item, hash) {\n\t\t\t\t\t\t\treturn item === current ? hash : null;\n\t\t\t\t\t\t}).join();\n\n\t\t\t\t\tif (!hash || window.location.hash.slice(1) === hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\twindow.location.hash = hash;\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Hash.Defaults, this._core.options);\n\n\t\t// register the event handlers\n\t\tthis.$element.on(this._handlers);\n\n\t\t// register event listener for hash navigation\n\t\t$(window).on('hashchange.owl.navigation', $.proxy(function(e) {\n\t\t\tvar hash = window.location.hash.substring(1),\n\t\t\t\titems = this._core.$stage.children(),\n\t\t\t\tposition = this._hashes[hash] && items.index(this._hashes[hash]);\n\n\t\t\tif (position === undefined || position === this._core.current()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._core.to(this._core.relative(position), false, true);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tHash.Defaults = {\n\t\tURLhashListener: false\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tHash.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\t$(window).off('hashchange.owl.navigation');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Hash = Hash;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Support Plugin\n *\n * @version 2.1.0\n * @author Vivid Planet Software GmbH\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\tvar style = $('').get(0).style,\n\t\tprefixes = 'Webkit Moz O ms'.split(' '),\n\t\tevents = {\n\t\t\ttransition: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitTransition: 'webkitTransitionEnd',\n\t\t\t\t\tMozTransition: 'transitionend',\n\t\t\t\t\tOTransition: 'oTransitionEnd',\n\t\t\t\t\ttransition: 'transitionend'\n\t\t\t\t}\n\t\t\t},\n\t\t\tanimation: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitAnimation: 'webkitAnimationEnd',\n\t\t\t\t\tMozAnimation: 'animationend',\n\t\t\t\t\tOAnimation: 'oAnimationEnd',\n\t\t\t\t\tanimation: 'animationend'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttests = {\n\t\t\tcsstransforms: function() {\n\t\t\t\treturn !!test('transform');\n\t\t\t},\n\t\t\tcsstransforms3d: function() {\n\t\t\t\treturn !!test('perspective');\n\t\t\t},\n\t\t\tcsstransitions: function() {\n\t\t\t\treturn !!test('transition');\n\t\t\t},\n\t\t\tcssanimations: function() {\n\t\t\t\treturn !!test('animation');\n\t\t\t}\n\t\t};\n\n\tfunction test(property, prefixed) {\n\t\tvar result = false,\n\t\t\tupper = property.charAt(0).toUpperCase() + property.slice(1);\n\n\t\t$.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {\n\t\t\tif (style[property] !== undefined) {\n\t\t\t\tresult = prefixed ? property : true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction prefixed(property) {\n\t\treturn test(property, true);\n\t}\n\n\tif (tests.csstransitions()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transition = new String(prefixed('transition'))\n\t\t$.support.transition.end = events.transition.end[ $.support.transition ];\n\t}\n\n\tif (tests.cssanimations()) {\n\t\t/* jshint -W053 */\n\t\t$.support.animation = new String(prefixed('animation'))\n\t\t$.support.animation.end = events.animation.end[ $.support.animation ];\n\t}\n\n\tif (tests.csstransforms()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transform = new String(prefixed('transform'));\n\t\t$.support.transform3d = tests.csstransforms3d();\n\t}\n\n})(window.Zepto || window.jQuery, window, document);\n\n\n\n// WEBPACK FOOTER //\n// ./~/owl.carousel/dist/owl.carousel.js","/**\n * Owl Carousel v2 Accessibility Plugin\n * Version 0.2.1\n *\n * https://github.com/rtrvrtg/owlcarousel2-a11ylayer\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 Geoffrey Roberts\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n *\n * © Geoffrey Roberts 2016\n */\n\n;\n(function($, window) {\n\n var Owl2A11y = function(carousel) {\n this._core = carousel\n this._initialized = false\n\n this._core._options = $.extend(Owl2A11y.defaults, this._core.options)\n\n this.$element = this._core.$element\n\n var setCurrent = $.proxy(function(e) {\n this.setCurrent(e)\n }, this)\n\n this._handlers = {\n 'initialized.owl.carousel': $.proxy(function(e) {\n this.setupRoot()\n if (e.namespace && !this._initialized) {\n this.setupFocus()\n this.setupKeyboard()\n }\n this.setCurrent(e)\n }, this),\n 'changed.owl.carousel': setCurrent,\n 'translated.owl.carousel': setCurrent,\n 'refreshed.owl.carousel': setCurrent,\n 'resized.owl.carousel': setCurrent\n }\n this.$element.on(this._handlers)\n }\n\n\n /* PREFERENCES */\n\n /**\n * Contains default parameters, if there were any.\n */\n Owl2A11y.defaults = {}\n\n\n /* EVENT HANDLERS */\n\n /**\n * Adds support for things that don't map nicely to the root object\n * such as event handlers.\n */\n Owl2A11y.eventHandlers = {}\n\n /**\n * Get a callback for keyup events within this carousel.\n *\n * @return callback\n * An event callback that takes an Event as an argument.\n */\n Owl2A11y.prototype.getDocumentKeyUp = function() {\n var self = this\n return function(e) {\n var eventTarg = $(e.target),\n targ = self.focused(eventTarg),\n action = null\n\n if (!!targ) {\n if (e.keyCode == 37 || e.keyCode == 38) {\n action = 'prev.owl.carousel'\n } else if (e.keyCode == 39 || e.keyCode == 40) {\n action = 'next.owl.carousel'\n } else if (e.keyCode == 13) {\n if (eventTarg.hasClass('owl-prev')) action = 'prev.owl.carousel'\n else if (eventTarg.hasClass('owl-next')) action = 'next.owl.carousel'\n else if (eventTarg.hasClass('owl-dot')) action = 'click'\n }\n\n if (!!action) targ.trigger(action)\n\n }\n }\n }\n\n\n /* SETUP AND TEAR DOWN */\n\n /**\n * Assign attributes to the root element.\n */\n Owl2A11y.prototype.setupRoot = function() {\n this.$element.attr({\n // @FIXME\n // role: 'listbox',\n tabindex: '0'\n })\n }\n\n /**\n * Setup keyboard events for this carousel.\n */\n Owl2A11y.prototype.setupKeyboard = function() {\n // Only needed to initialise once for the entire document\n if (!this.$element.attr('data-owl-access-keyup')) {\n this.$element.bind('keyup', this.getDocumentKeyUp())\n .attr('data-owl-access-keyup', '1')\n }\n this.$element.attr('data-owl-carousel-focusable', '1')\n }\n\n /**\n * Setup focusing behaviour for the carousel.\n */\n Owl2A11y.prototype.setupFocus = function() {\n // Only needed to initialise once for the entire document\n this.$element.bind('focusin', function() {\n $(this).attr({\n 'data-owl-carousel-focused': '1',\n 'aria-live': 'polite'\n }).trigger('stop.owl.autoplay')\n }).bind('focusout', function() {\n $(this).attr({\n 'data-owl-carousel-focused': '0',\n 'aria-live': 'off'\n }).trigger('play.owl.autoplay')\n })\n\n // Add tabindex to allow navigation to be focused.\n if (!!this._core._plugins.navigation) {\n var navPlugin = this._core._plugins.navigation,\n toFocus = []\n if (!!navPlugin._controls.$previous) {\n toFocus.push(navPlugin._controls.$previous)\n }\n if (!!navPlugin._controls.$next) {\n toFocus.push(navPlugin._controls.$next)\n }\n if (!!navPlugin._controls.$indicators) {\n toFocus.push(navPlugin._controls.$indicators.children())\n }\n $.each(toFocus, function() {\n this.attr('tabindex', '0')\n })\n }\n }\n\n /**\n * Assign attributes to the root element.\n */\n Owl2A11y.prototype.destroy = function() {\n this.$element.unbind('keyup', this.eventHandlers.documentKeyUp)\n .removeAttr('data-owl-access-keyup data-owl-carousel-focusable')\n .unbind('focusin focusout')\n }\n\n\n /* HELPER FUNCTIONS */\n\n /**\n * Identifies all focusable elements within a given element.\n *\n * @param DOMElement elem\n * A DOM element.\n *\n * @return jQuery\n * A jQuery object that may refer to zero or more focusable elements.\n */\n Owl2A11y.prototype.focusableElems = function(elem) {\n return $(elem).find('a, input, select, button, *[tabindex]')\n }\n\n /**\n * Identifies all focusable elements within a given element.\n *\n * @param jQeury elems\n * A jQuery object that may refer to zero or more focusable elements.\n * @param boolean enable\n * Whether focus is to be enabled on these elements or not.\n */\n Owl2A11y.prototype.adjustFocus = function(elems, enable) {\n elems.each(function() {\n var item = $(this)\n var newTabIndex = '0',\n storeTabIndex = '0',\n currentTabIndex = item.attr('tabindex'),\n storedTabIndex = item.attr('data-owl-temp-tabindex')\n\n if (enable) {\n newTabIndex = (\n typeof(storedTabIndex) != 'undefined' && (storedTabIndex != '-1') ?\n item.attr('data-owl-temp-tabindex') :\n '0'\n )\n storedTabIndex = newTabIndex\n } else {\n newTabIndex = '-1'\n storedTabIndex = (\n (typeof(currentTabIndex) != 'undefined') || (currentTabIndex != '-1') ?\n currentTabIndex :\n '0'\n )\n }\n\n item.attr({\n tabindex: newTabIndex,\n 'data-owl-temp-tabindex': storeTabIndex\n })\n })\n }\n\n /**\n * Get the root element if we are focused within it.\n *\n * @param DOMElement targ\n * An element that might be within this carousel.\n *\n * @return mixed\n * Either the jQuery element containing the root element, or NULL.\n */\n Owl2A11y.prototype.focused = function(targ) {\n var targ = $(targ)\n if (targ.attr('data-owl-carousel-focused') == 1) {\n return targ\n }\n var closest = targ.closest('[data-owl-carousel-focused=\"1\"]')\n if (closest.length > 0) return closest\n return null\n }\n\n\n /* UPDATE FUNCTIONS */\n\n /**\n * Identify active elements, set WAI-ARIA sttributes accordingly,\n * scroll to show element if we need to, and set up focusing.\n *\n * @param Event e\n * The triggering event.\n */\n Owl2A11y.prototype.setCurrent = function() {\n var targ = this.focused($(':focus')),\n element = this._core.$element,\n stage = this._core.$stage,\n focusableElems = this.focusableElems,\n adjustFocus = this.adjustFocus\n\n if (!!stage) {\n var offs = stage.offset()\n if (!!targ) {\n window.scrollTo(\n offs.left,\n offs.top - parseInt($('body').css('padding-top'), 10)\n )\n }\n\n this._core.$stage.children().each(function() {\n var item = $(this)\n var focusable = focusableElems(this)\n\n // Use the active class to determine if we can see it or not.\n // Pretty lazy, but the Owl API doesn't make it easy to tell\n // from indices alone.\n if (item.hasClass('active')) {\n item.attr('aria-hidden', 'false')\n adjustFocus(focusable, true)\n } else {\n item.attr('aria-hidden', 'true')\n adjustFocus(focusable, false)\n }\n })\n\n if (!!targ) {\n // Focus on the root element after we're done moving,\n // but only if we're not using the controls.\n setTimeout(function() {\n var newFocus = element\n if ($(':focus').closest('.owl-controls').length) {\n newFocus = $(':focus')\n }\n newFocus.focus()\n }, 250)\n }\n }\n }\n\n $.fn.owlCarousel.Constructor.Plugins['Owl2A11y'] = Owl2A11y\n\n})(window.Zepto || window.jQuery, window)\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/carousel/a11y.js","import $ from 'jquery'\n\n/* eslint-disable no-unused-vars */\n\nimport cookie from 'jquery.cookie'\nimport cookieBar from './cookiebar'\n\n/* eslint-enable no-unused-vars */\n\nconst opts = {\n 'acceptButton': '.js-cookieBarAccept',\n 'secure': false,\n 'path': '/',\n 'domain': ''\n}\n\n$(document).ready(function() {\n $('.js-CookieBar').cookieBar(opts)\n})\n\nexport default {\n opts\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/cookiebar/index.js","/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2013 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// CommonJS\n\t\tfactory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction encode(s) {\n\t\treturn config.raw ? s : encodeURIComponent(s);\n\t}\n\n\tfunction decode(s) {\n\t\treturn config.raw ? s : decodeURIComponent(s);\n\t}\n\n\tfunction stringifyCookieValue(value) {\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t}\n\n\tfunction parseCookieValue(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\n\t\ttry {\n\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(e) {}\n\t}\n\n\tfunction read(s, converter) {\n\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// Write\n\n\t\tif (value !== undefined && !$.isFunction(value)) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setTime(+t + days * 864e+5);\n\t\t\t}\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path ? '; path=' + options.path : '',\n\t\t\t\toptions.domain ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// Read\n\n\t\tvar result = key ? undefined : {};\n\n\t\t// To prevent the for loop in the first place assign an empty array\n\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t// calling $.cookie().\n\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\n\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('=');\n\t\t\tvar name = decode(parts.shift());\n\t\t\tvar cookie = parts.join('=');\n\n\t\t\tif (key && key === name) {\n\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\tresult = read(cookie, value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\tresult[name] = cookie;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\tif ($.cookie(key) === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Must not alter options, thus extending a fresh object...\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\treturn !$.cookie(key);\n\t};\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./~/jquery.cookie/jquery.cookie.js","import $ from 'jquery'\n\n$.fn.cookieBar = function(options) {\n const settings = $.extend({\n 'acceptButton': '.js-cookieBarAccept',\n 'secure': false,\n 'path': '/',\n 'domain': '',\n 'threshold': 500\n }, options)\n\n const _hide = ($cookiebar) => {\n $cookiebar\n .attr('aria-hidden', 'true')\n .attr('aria-live', 'off')\n .hide()\n }\n\n const _show = ($cookiebar) => {\n $cookiebar\n .attr('aria-hidden', 'false')\n .attr('aria-live', 'polite')\n .show()\n }\n\n const _accept = function($cookiebar) {\n $.cookie('cookiebar', 'hide', {\n path: settings.path,\n secure: settings.secure,\n domain: settings.domain,\n expires: 30\n })\n $(document).trigger('accept.cookiebar', [$cookiebar])\n }\n\n $(document).on('accept.cookiebar', (e, $cookiebar) => {\n _hide($cookiebar)\n })\n\n $.cookieBar = $.cookieBar || {}\n\n $.cookieBar.isAccepted = function() {\n return $.cookie('cookiebar') === 'hide'\n }\n\n return this.each(function() {\n var $cookiebar = $(this)\n\n if (!$.cookieBar.isAccepted()) {\n if (settings.threshold > 0) {\n $(window).on('scroll.cookiebar', (function() {\n if ($(window).scrollTop() > settings.threshold) {\n $(window).unbind('scroll.cookiebar')\n _accept($cookiebar)\n }\n }))\n }\n _show($cookiebar)\n }\n\n $cookiebar\n .find(settings.acceptButton)\n .click(function() {\n _accept($cookiebar)\n return false\n })\n\n })\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/cookiebar/cookiebar.js","import Frdialogmodal from 'fr-dialogmodal/dialogmodal.js'\n\n/* eslint-disable no-unused-vars */\n\nimport stylesheet from 'fr-dialogmodal/dialogmodal.css'\n\n/* eslint-enable */\n\nvar dialog = Frdialogmodal({\n // String - Outer container selector, hook for JS init() method\n selector: '.js-fr-dialogmodal',\n\n // String - Modal selector, the element that represents the modal\n modalSelector: '.js-fr-dialogmodal-modal',\n\n // String - Selector for the open button\n openSelector: '.js-fr-dialogmodal-open',\n\n // String - Selector for the close button\n closeSelector: '.js-fr-dialogmodal-close',\n\n // Boolean - Switches the dialog role to alertdialog, only use this when representing an alert, error or warning\n isAlert: false,\n\n // String - Class name that will be added to the selector when the component has been initialised\n readyClass: 'fr-dialogmodal--is-ready',\n\n // String - Class name that will be added to the selector when the component is active\n activeClass: 'fr-dialogmodal--is-active'\n})\n\nexport default { dialog, Frdialogmodal }\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/dialog/index.js","'use strict';\r\n\r\n/**\r\n * @param {object} options Object containing configuration overrides\r\n */\r\nconst Frdialogmodal = function ({\r\n\t\tselector: selector = '.js-fr-dialogmodal',\r\n\t\tmodalSelector: modalSelector = '.js-fr-dialogmodal-modal',\r\n\t\topenSelector: openSelector = '.js-fr-dialogmodal-open',\r\n\t\tcloseSelector: closeSelector = '.js-fr-dialogmodal-close',\r\n\t\tisAlert: isAlert = false,\r\n\t\treadyClass: readyClass = 'fr-dialogmodal--is-ready',\r\n\t\tactiveClass: activeClass = 'fr-dialogmodal--is-active'\r\n\t} = {}) {\r\n\r\n\r\n\t// CONSTANTS\r\n\tconst doc = document;\r\n\tconst docEl = doc.documentElement;\r\n\tconst _q = (el, ctx = doc) => [].slice.call(ctx.querySelectorAll(el));\r\n\r\n\r\n\t// SUPPORTS\r\n\tif (!('querySelector' in doc) || !('addEventListener' in window) || !docEl.classList) return;\r\n\r\n\r\n\t// SETUP\r\n\t// set dialog modal element NodeLists\r\n\tconst containers = _q(selector);\r\n\tconst focusableSelectors = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\r\n\t//\tTEMP\r\n\tlet currButtonOpen = null;\r\n\tlet currModal = null;\r\n\t//\telements within modal\r\n\tlet focusableElements = null;\r\n\r\n\r\n\t//\tUTILS\r\n\tfunction _defer (fn) {\r\n\t\t//\twrapped in setTimeout to delay binding until previous rendering has completed\r\n\t\tif (typeof fn === 'function') setTimeout(fn, 0);\r\n\t}\r\n\r\n\r\n\t//\tA11Y\r\n\tfunction _addA11y (container) {\r\n\t\tlet modal = _q(modalSelector, container)[0];\r\n\t\tlet role = isAlert ? 'alertdialog' : 'dialog';\r\n\t\t//\tadd relevant roles and properties\r\n\t\tcontainer.setAttribute('aria-hidden', true);\r\n\t\tmodal.setAttribute('role', role);\r\n\t}\r\n\tfunction _removeA11y (container) {\r\n\t\tlet modal = _q(modalSelector, container)[0];\r\n\t\t//\tadd relevant roles and properties\r\n\t\tcontainer.removeAttribute('aria-hidden');\r\n\t\tmodal.removeAttribute('role');\r\n\t}\r\n\r\n\r\n\t//\tACTIONS\r\n\tfunction _showModal (container, modal) {\r\n\t\t//\tshow container and focus the modal\r\n\t\tcontainer.setAttribute('aria-hidden', false);\r\n\t\tmodal.setAttribute('tabindex', -1);\r\n\t\t//\tset first/last focusable elements\r\n\t\tfocusableElements = _q(focusableSelectors.join(), modal);\r\n\t\t//\tfocus first element if exists, otherwise focus modal element\r\n\t\tif (focusableElements.length) focusableElements[0].focus();\r\n\t\telse modal.focus();\r\n\t\t//\tupdate bound events\r\n\t\t_defer(_bindDocKey);\r\n\t\t_defer(_bindClosePointer);\r\n\t\t//\tif contents are not interactive, bind click off\r\n\t\tif (!isAlert) _defer(_bindContainerPointer);\r\n\t\t//\treset scroll\r\n\t\tmodal.scrollTop = 0;\r\n\t\t//\tupdate style hook\r\n\t\tcontainer.classList.add(activeClass);\r\n\t}\r\n\tfunction _hideModal (modal, returnfocus = true) {\r\n\t\t//\tget container element\r\n\t\tlet container = modal.parentElement;\r\n\t\t//\tshow container and focus the modal\r\n\t\tcontainer.setAttribute('aria-hidden', true);\r\n\t\tmodal.removeAttribute('tabindex');\r\n\t\t//\tupdate bound events\r\n\t\t_unbindDocKey();\r\n\t\t_unbindClosePointer();\r\n\t\t//\tif contents are not interactive, unbind click off\r\n\t\tif (!isAlert) _unbindContainerPointer();\r\n\t\t//\tupdate style hook\r\n\t\tcontainer.classList.remove(activeClass);\r\n\t\t//\treturn focus to button that opened the modal and reset the reference\r\n\t\tif (returnfocus) {\r\n\t\t\tcurrButtonOpen.focus();\r\n\t\t\tcurrButtonOpen = null;\r\n\t\t}\r\n\t}\r\n\tfunction _handleTabEvent (e) {\r\n\t\t//\tget the index of the current active element within the modal\r\n\t\tlet focusedIndex = focusableElements.indexOf(doc.activeElement);\r\n\t\t//\thandle TAB event if need to skip\r\n\t\t//\tif first element is focused and shiftkey is in use\r\n\t\tif (e.shiftKey && (focusedIndex === 0 || focusedIndex === -1)) {\r\n\t\t\t//\tfocus last item within modal\r\n\t\t\tfocusableElements[focusableElements.length - 1].focus();\r\n\t\t\te.preventDefault();\r\n\t\t//\tif last element is focused and shiftkey is not in use\r\n\t\t} else if (!e.shiftKey && focusedIndex === focusableElements.length - 1) {\r\n\t\t\t//\tfocus first item within modal\r\n\t\t\tfocusableElements[0].focus();\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//\tEVENTS\r\n\tfunction _eventOpenPointer (e) {\r\n\t\t//\tget related elements\r\n\t\tlet button = e.currentTarget;\r\n\t\tlet container = doc.getElementById(button.getAttribute('aria-controls'));\r\n\t\tlet modal = _q(modalSelector, container)[0];\r\n\t\t//\tsave element references\r\n\t\tcurrButtonOpen = button;\r\n\t\tcurrModal = modal;\r\n\t\t//\tshow modal\r\n\t\t_showModal(container, modal);\r\n\t}\r\n\tfunction _eventClosePointer () {\r\n\t\t_hideModal(currModal);\r\n\t}\r\n\tfunction _eventContainerPointer (e) {\r\n\t\tlet container = currModal.parentElement;\r\n\t\t//\tcheck if target is modal container (but not modal)\r\n\t\tif (e.target === container) _hideModal(currModal);\r\n\t}\r\n\tfunction _eventDocKey (e) {\r\n\t\t//\tESC key\r\n\t\tif (e.keyCode === 27) _hideModal(currModal);\r\n\t\t//\tTAB key\r\n\t\tif (e.keyCode === 9) _handleTabEvent(e);\r\n\t}\r\n\r\n\r\n\t//\tBIND EVENTS\r\n\tfunction _bindOpenPointers (container) {\r\n\t\tlet id = container.getAttribute('id');\r\n\t\tlet buttons = _q(`${openSelector}[aria-controls=\"${id}\"]`);\r\n\t\tbuttons.forEach(button => button.addEventListener('click', _eventOpenPointer));\r\n\t}\r\n\tfunction _bindClosePointer (modal = currModal) {\r\n\t\tlet button = _q(closeSelector, modal)[0];\r\n\t\tbutton.addEventListener('click', _eventClosePointer);\r\n\t}\r\n\tfunction _bindContainerPointer (modal = currModal) {\r\n\t\tlet container = modal.parentElement;\r\n\t\tcontainer.addEventListener('click', _eventContainerPointer);\r\n\t}\r\n\tfunction _bindDocKey () {\r\n\t\tdoc.addEventListener('keydown', _eventDocKey);\r\n\t}\r\n\r\n\r\n\t//\tUNBIND EVENTS\r\n\tfunction _unbindOpenPointers (container) {\r\n\t\tlet id = container.getAttribute('id');\r\n\t\tlet buttons = doc.querySelectorAll(`${openSelector}[aria-controls=\"${id}\"]`);\r\n\t\tbuttons.forEach(button => button.removeEventListener('click', _eventOpenPointer));\r\n\t}\r\n\tfunction _unbindClosePointer (modal = currModal) {\r\n\t\tlet button = _q(closeSelector, modal)[0];\r\n\t\tbutton.removeEventListener('click', _eventClosePointer);\r\n\t}\r\n\tfunction _unbindContainerPointer () {\r\n\t\tlet container = currModal.parentElement;\r\n\t\tcontainer.removeEventListener('click', _eventContainerPointer);\r\n\t}\r\n\tfunction _unbindDocKey () {\r\n\t\tdoc.removeEventListener('keydown', _eventDocKey);\r\n\t}\r\n\r\n\r\n\t//\tDESTROY\r\n\tfunction destroy () {\r\n\t\t//\tloop through available modals\r\n\t\tcontainers.forEach(container => {\r\n\t\t\tlet modal = _q(modalSelector, container)[0];\r\n\t\t\tmodal.removeAttribute('tabindex');\r\n\t\t\t_removeA11y(container);\r\n\t\t\t_unbindOpenPointers(container);\r\n\t\t\t_unbindClosePointer(modal);\r\n\t\t\t_unbindContainerPointer(modal);\r\n\t\t\t//\tremove ready, active style hooks\r\n\t\t\tcontainer.classList.remove(readyClass, activeClass);\r\n\t\t});\r\n\t\t_unbindDocKey();\r\n\t}\r\n\r\n\r\n\t//\tINIT\r\n\tfunction init () {\r\n\t\t//\tcancel if no modals found\r\n\t\tif (!containers.length) return;\r\n\t\t//\tloop through available modals\r\n\t\tcontainers.forEach(container => {\r\n\t\t\t_addA11y(container);\r\n\t\t\t_bindOpenPointers(container);\r\n\t\t\t// set ready style hook\r\n\t\t\tcontainer.classList.add(readyClass);\r\n\t\t});\r\n\t}\r\n\tinit();\r\n\r\n\r\n\t// REVEAL API\r\n\treturn {\r\n\t\tinit,\r\n\t\tdestroy\r\n\t}\r\n\r\n}\r\n\r\n\r\n// module exports\r\nexport default Frdialogmodal;\r\n\n\n\n// WEBPACK FOOTER //\n// ./~/fr-dialogmodal/dialogmodal.js","import $ from 'jquery'\nimport {\n Menu,\n Menutrigger\n} from './dropdown'\n\n// auto-init on enhance (which is called on domready)\n\n$.fn['menu'] = function() {\n return this.each(function() {\n new Menu(this).init()\n })\n}\n\n$(document).bind('enhance', function(e) {\n $('[data-menu]', e.target)['menu']()\n})\n\n$.fn['menu-trigger'] = function() {\n return this.each(function() {\n new Menutrigger(this).init()\n })\n}\n\n$(document).bind('enhance', function(e) {\n $('[data-menu-trigger]', e.target)['menu-trigger']()\n})\n\nexport default {\n Menu,\n Menutrigger\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/dropdown/index.js","import $ from 'jquery'\n/*\n * Fork of\n *\n * ! Menu - v0.1.3 - 2016-02-17\n * https://github.com/filamentgroup/menu\n * Copyright (c) 2016 Scott Jehl Licensed MIT\n */\nconst at = {\n ariaHidden: 'aria-hidden'\n}\nconst selectClass = 'is-selected'\nconst focusables = 'a,input,[tabindex]'\n\nclass Menu {\n\n constructor(element) {\n if (!element) {\n throw new Error('Element required to initialize object')\n }\n this.element = element\n this.$element = $(element)\n this.opened = true\n this.componentName = 'Menu'\n\n this.keycodes = {\n 38: function(e) {\n this.moveSelected('prev')\n e.preventDefault()\n },\n\n 40: function(e) {\n this.moveSelected('next')\n e.preventDefault()\n },\n\n // add right / left key navigation\n 37: function(e) {\n this.moveSelected('prev')\n e.preventDefault()\n },\n\n 39: function(e) {\n this.moveSelected('next')\n e.preventDefault()\n },\n\n 13: function() {\n // return the selected value\n return this.selectActive()\n },\n\n 9: function(e) {\n this.moveSelected(e.shiftKey ? 'prev' : 'next')\n e.preventDefault()\n },\n\n 27: function() {\n this.close()\n }\n }\n }\n\n moveSelected(placement, focus) {\n var $items = this.$element.find('li'),\n $selected = $items.filter('.' + selectClass),\n $nextSelected\n\n if (!$selected.length || placement === 'start') {\n $nextSelected = $items.eq(0)\n } else if (placement === 'next') {\n $nextSelected = $selected.next()\n if (!$nextSelected.length) {\n $nextSelected = $items.eq(0)\n }\n } else {\n $nextSelected = $selected.prev()\n if (!$nextSelected.length) {\n $nextSelected = $items.eq($items.length - 1)\n }\n }\n $selected.removeClass(selectClass)\n $nextSelected.addClass(selectClass)\n\n if (focus || $(window.document.activeElement).closest($selected).length) {\n if ($nextSelected.is(focusables)) {\n $nextSelected[0].focus()\n } else {\n var $focusChild = $nextSelected.find(focusables)\n if ($focusChild.length) {\n $focusChild[0].focus()\n }\n }\n }\n }\n\n getSelectedElement() {\n return this.$element.find('li.' + selectClass)\n }\n\n selectActive() {\n var trigger = this.$element.data(this.componentName + '-trigger')\n var $selected = this.getSelectedElement()\n\n if (trigger && $(trigger).is('input')) {\n trigger.value = $selected.text()\n }\n $selected.trigger(this.componentName + ':select')\n this.close()\n return $selected.text()\n }\n\n keyDown(e) {\n var fn = this.keycodes[e.keyCode] || function() {}\n return fn.call(this, e)\n }\n\n _bindKeyHandling() {\n var self = this\n this.$element\n .bind('keydown', function(e) {\n self.keyDown(e)\n })\n .bind('mouseover', function(e) {\n self.$element.find('.' + selectClass).removeClass(selectClass)\n $(e.target).closest('li').addClass(selectClass)\n })\n .bind('mouseleave', function(e) {\n $(e.target).closest('li').removeClass(selectClass)\n })\n .bind('click', function() {\n self.selectActive()\n })\n }\n\n open(trigger, sendFocus) {\n if (this.opened) {\n return\n }\n this.$element.attr(at.ariaHidden, false)\n this.$element.data(this.componentName + '-trigger', trigger)\n this.opened = true\n this.moveSelected('start', sendFocus)\n this.$element.trigger(this.componentName + ':open')\n }\n\n close() {\n if (!this.opened) {\n return\n }\n this.$element.attr(at.ariaHidden, true)\n this.opened = false\n var $trigger = this.$element.data(this.componentName + '-trigger')\n if ($trigger) {\n $trigger.focus()\n }\n this.$element.trigger(this.componentName + ':close')\n }\n\n toggle(trigger, sendFocus) {\n this[this.opened ? 'close' : 'open'](trigger, sendFocus)\n }\n\n init() {\n // prevent re-init\n if (this.$element.data(this.componentName)) {\n return\n }\n this.$element.data(this.componentName, this)\n\n this.$element.attr('role', 'menu')\n // @FIXME\n // ita-web-toolkit mod:\n // be careful with the following as menuitem(s)\n // get a special treatment by screen readers\n .find('li').attr('role', 'menuitem')\n\n this.close()\n var self = this\n\n // close on any click, even on the menu\n $(document).bind('mouseup', function() {\n self.close()\n })\n\n this._bindKeyHandling()\n\n this.$element.trigger(this.componentName + ':init')\n }\n\n}\n\n\nclass Menutrigger {\n\n constructor(element) {\n if (!element) {\n throw new Error('Element required to initialize object')\n }\n this.element = element\n this.$element = $(element)\n this.$menu = $('#' + this.$element.attr('data-menu-trigger'))\n this.menu = this.$menu.data('Menu')\n this.componentName = 'Menutrigger'\n }\n\n _bindbehavior() {\n var self = this\n\n if (this.$element.is('a')) {\n this.$element\n .attr('role', 'button')\n .bind('click', function(e) {\n e.preventDefault()\n self.menu.toggle(this, true)\n })\n } else if (this.$element.is('button')) {\n this.$element\n .bind('click', function(e) {\n e.preventDefault()\n self.menu.toggle(this, true)\n })\n } else if (this.$element.is('input')) {\n this.$element\n .bind('input keyup', function() {\n if (this.value === '') {\n self.menu.close()\n } else {\n self.menu.open(this, false)\n }\n\n })\n .bind('input keydown', function(e) {\n self.menu.keyDown(e)\n })\n .bind('focus click', function() {\n if (this.value !== '') {\n self.menu.open()\n }\n })\n .bind('blur', function() {\n self.menu.close()\n })\n }\n }\n\n init() {\n // prevent re-init\n if (this.$element.data(this.componentName)) {\n return\n }\n this.$element.data(this.componentName, this)\n\n // add attrs\n this.$element.attr('aria-controls', this.$menu.attr('id'))\n this.$element.attr('aria-haspopup', 'true')\n\n this._bindbehavior()\n\n this.$element.trigger(this.componentName + ':init')\n }\n\n}\n\nexport default {\n Menu,\n Menutrigger\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/dropdown/dropdown.js","import $ from 'jquery'\nimport Headroom from 'headroom.js'\nimport debounce from 'throttle-debounce/throttle'\n\n// Headroom for fixed sticky header\n\nconst myElement = document.querySelector('.js-Headroom')\n\nconst opts = {\n // vertical offset in px before element is first unpinned\n offset: 0,\n // you can specify tolerance individually for up/down scroll\n tolerance: {\n up: 20,\n down: 10\n },\n // css classes to apply\n classes: {\n // when element is initialised\n initial: 'Headroom',\n // when scrolling up\n pinned: 'Headroom--pinned',\n // when scrolling down\n unpinned: 'Headroom--unpinned',\n // when above offset\n top: 'Headroom--top',\n // when below offset\n notTop: 'Headroom--not-top',\n // when at bottom of scoll area\n bottom: 'Headroom--bottom',\n // when not at bottom of scroll area\n notBottom: 'Headroom--not-bottom'\n },\n // element to listen to scroll events on, defaults to `window`\n scroller: window,\n // callback when pinned, `this` is headroom object\n onPin: function() {},\n // callback when unpinned, `this` is headroom object\n onUnpin: function() {},\n // callback when above offset, `this` is headroom object\n onTop: function() {},\n // callback when below offset, `this` is headroom object\n onNotTop: function() {},\n // callback when at bottom of page, `this` is headroom object\n onBottom: function() {},\n // callback when moving away from bottom of page, `this` is headroom object\n onNotBottom: function() {}\n}\n\nlet headroom = null\n\nif (myElement) {\n headroom = new Headroom(myElement, opts)\n headroom.init()\n}\n\n/*\n *\tMake space when using fixed header.\n *\n *\t\tThe no-js alternative is to set up body padding inside CSS\n *\t \tassuming you know the exact header height in pixel\n *\t \t(expanded and minimized for all viewport width)\n */\nconst headroomFixed = '.Headroom--fixed'\n\nif ($('.' + opts.classes.initial).is(headroomFixed)) {\n const INTERVAL = 250\n\n let windowWidth = $(window).width()\n\n // Needs to be here due to CSS transition (see on Safari)\n let headerHeight = $(headroomFixed).height()\n\n const _adjustPadding = function() {\n const paddingTop = headerHeight\n\n $('body').css({\n paddingTop: paddingTop + 'px'\n })\n }\n\n // Set up padding on page load\n $(document).ready(() => {\n $(headroomFixed).css({\n position: 'fixed',\n top: 0\n })\n _adjustPadding()\n })\n\n // Make padding respond to window resize\n $(window).resize(debounce(INTERVAL, function() {\n const newWindowWidth = $(window).width()\n const height = $(headroomFixed).height()\n // Android browser triggers a resize event on scroll to top\n // so we check for changes in window width\n if (newWindowWidth !== windowWidth) {\n windowWidth = newWindowWidth\n headerHeight = height\n setTimeout(_adjustPadding, INTERVAL)\n }\n }))\n\n $(headroomFixed).on('transitionend', debounce(INTERVAL, function() {\n const height = $(this).height()\n if (headerHeight < height) {\n // This happens *only* after a resize\n // _and_ when scrolling to top\n headerHeight = height\n _adjustPadding()\n }\n }))\n\n}\n\n/*\n * Toggle search-form visibility for mobile\n */\n$('.js-Header-search-trigger').click((e) => {\n $('.js-Header-search-trigger').each((i, el) => {\n const $el = $(el)\n if ('true' === $el.attr('aria-hidden')) {\n $el.attr('aria-hidden', 'false')\n $el.removeClass('u-hidden')\n } else {\n $el.attr('aria-hidden', 'true')\n $el.addClass('u-hidden')\n }\n })\n $('#' + $(e.target).attr('aria-controls')).toggleClass('is-active')\n})\n\nexport default {\n Headroom,\n headroom\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/header/index.js","/*!\n * headroom.js v0.9.3 - Give your page some headroom. Hide your header until you need it\n * Copyright (c) 2016 Nick Williams - http://wicky.nillia.ms/headroom.js\n * License: MIT\n */\n\n(function(root, factory) {\n 'use strict';\n\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n }\n else if (typeof exports === 'object') {\n // COMMONJS\n module.exports = factory();\n }\n else {\n // BROWSER\n root.Headroom = factory();\n }\n}(this, function() {\n 'use strict';\n\n /* exported features */\n \n var features = {\n bind : !!(function(){}.bind),\n classList : 'classList' in document.documentElement,\n rAF : !!(window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame)\n };\n window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n \n /**\n * Handles debouncing of events via requestAnimationFrame\n * @see http://www.html5rocks.com/en/tutorials/speed/animations/\n * @param {Function} callback The callback to handle whichever event\n */\n function Debouncer (callback) {\n this.callback = callback;\n this.ticking = false;\n }\n Debouncer.prototype = {\n constructor : Debouncer,\n \n /**\n * dispatches the event to the supplied callback\n * @private\n */\n update : function() {\n this.callback && this.callback();\n this.ticking = false;\n },\n \n /**\n * ensures events don't get stacked\n * @private\n */\n requestTick : function() {\n if(!this.ticking) {\n requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this)));\n this.ticking = true;\n }\n },\n \n /**\n * Attach this as the event listeners\n */\n handleEvent : function() {\n this.requestTick();\n }\n };\n /**\n * Check if object is part of the DOM\n * @constructor\n * @param {Object} obj element to check\n */\n function isDOMElement(obj) {\n return obj && typeof window !== 'undefined' && (obj === window || obj.nodeType);\n }\n \n /**\n * Helper function for extending objects\n */\n function extend (object /*, objectN ... */) {\n if(arguments.length <= 0) {\n throw new Error('Missing arguments in extend function');\n }\n \n var result = object || {},\n key,\n i;\n \n for (i = 1; i < arguments.length; i++) {\n var replacement = arguments[i] || {};\n \n for (key in replacement) {\n // Recurse into object except if the object is a DOM element\n if(typeof result[key] === 'object' && ! isDOMElement(result[key])) {\n result[key] = extend(result[key], replacement[key]);\n }\n else {\n result[key] = result[key] || replacement[key];\n }\n }\n }\n \n return result;\n }\n \n /**\n * Helper function for normalizing tolerance option to object format\n */\n function normalizeTolerance (t) {\n return t === Object(t) ? t : { down : t, up : t };\n }\n \n /**\n * UI enhancement for fixed headers.\n * Hides header when scrolling down\n * Shows header when scrolling up\n * @constructor\n * @param {DOMElement} elem the header element\n * @param {Object} options options for the widget\n */\n function Headroom (elem, options) {\n options = extend(options, Headroom.options);\n \n this.lastKnownScrollY = 0;\n this.elem = elem;\n this.tolerance = normalizeTolerance(options.tolerance);\n this.classes = options.classes;\n this.offset = options.offset;\n this.scroller = options.scroller;\n this.initialised = false;\n this.onPin = options.onPin;\n this.onUnpin = options.onUnpin;\n this.onTop = options.onTop;\n this.onNotTop = options.onNotTop;\n this.onBottom = options.onBottom;\n this.onNotBottom = options.onNotBottom;\n }\n Headroom.prototype = {\n constructor : Headroom,\n \n /**\n * Initialises the widget\n */\n init : function() {\n if(!Headroom.cutsTheMustard) {\n return;\n }\n \n this.debouncer = new Debouncer(this.update.bind(this));\n this.elem.classList.add(this.classes.initial);\n \n // defer event registration to handle browser \n // potentially restoring previous scroll position\n setTimeout(this.attachEvent.bind(this), 100);\n \n return this;\n },\n \n /**\n * Unattaches events and removes any classes that were added\n */\n destroy : function() {\n var classes = this.classes;\n \n this.initialised = false;\n this.elem.classList.remove(classes.unpinned, classes.pinned, classes.top, classes.notTop, classes.initial);\n this.scroller.removeEventListener('scroll', this.debouncer, false);\n },\n \n /**\n * Attaches the scroll event\n * @private\n */\n attachEvent : function() {\n if(!this.initialised){\n this.lastKnownScrollY = this.getScrollY();\n this.initialised = true;\n this.scroller.addEventListener('scroll', this.debouncer, false);\n \n this.debouncer.handleEvent();\n }\n },\n \n /**\n * Unpins the header if it's currently pinned\n */\n unpin : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(classList.contains(classes.pinned) || !classList.contains(classes.unpinned)) {\n classList.add(classes.unpinned);\n classList.remove(classes.pinned);\n this.onUnpin && this.onUnpin.call(this);\n }\n },\n \n /**\n * Pins the header if it's currently unpinned\n */\n pin : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(classList.contains(classes.unpinned)) {\n classList.remove(classes.unpinned);\n classList.add(classes.pinned);\n this.onPin && this.onPin.call(this);\n }\n },\n \n /**\n * Handles the top states\n */\n top : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.top)) {\n classList.add(classes.top);\n classList.remove(classes.notTop);\n this.onTop && this.onTop.call(this);\n }\n },\n \n /**\n * Handles the not top state\n */\n notTop : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.notTop)) {\n classList.add(classes.notTop);\n classList.remove(classes.top);\n this.onNotTop && this.onNotTop.call(this);\n }\n },\n \n bottom : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.bottom)) {\n classList.add(classes.bottom);\n classList.remove(classes.notBottom);\n this.onBottom && this.onBottom.call(this);\n }\n },\n \n /**\n * Handles the not top state\n */\n notBottom : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.notBottom)) {\n classList.add(classes.notBottom);\n classList.remove(classes.bottom);\n this.onNotBottom && this.onNotBottom.call(this);\n }\n },\n \n /**\n * Gets the Y scroll position\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY\n * @return {Number} pixels the page has scrolled along the Y-axis\n */\n getScrollY : function() {\n return (this.scroller.pageYOffset !== undefined)\n ? this.scroller.pageYOffset\n : (this.scroller.scrollTop !== undefined)\n ? this.scroller.scrollTop\n : (document.documentElement || document.body.parentNode || document.body).scrollTop;\n },\n \n /**\n * Gets the height of the viewport\n * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript\n * @return {int} the height of the viewport in pixels\n */\n getViewportHeight : function () {\n return window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n },\n \n /**\n * Gets the physical height of the DOM element\n * @param {Object} elm the element to calculate the physical height of which\n * @return {int} the physical height of the element in pixels\n */\n getElementPhysicalHeight : function (elm) {\n return Math.max(\n elm.offsetHeight,\n elm.clientHeight\n );\n },\n \n /**\n * Gets the physical height of the scroller element\n * @return {int} the physical height of the scroller element in pixels\n */\n getScrollerPhysicalHeight : function () {\n return (this.scroller === window || this.scroller === document.body)\n ? this.getViewportHeight()\n : this.getElementPhysicalHeight(this.scroller);\n },\n \n /**\n * Gets the height of the document\n * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/\n * @return {int} the height of the document in pixels\n */\n getDocumentHeight : function () {\n var body = document.body,\n documentElement = document.documentElement;\n \n return Math.max(\n body.scrollHeight, documentElement.scrollHeight,\n body.offsetHeight, documentElement.offsetHeight,\n body.clientHeight, documentElement.clientHeight\n );\n },\n \n /**\n * Gets the height of the DOM element\n * @param {Object} elm the element to calculate the height of which\n * @return {int} the height of the element in pixels\n */\n getElementHeight : function (elm) {\n return Math.max(\n elm.scrollHeight,\n elm.offsetHeight,\n elm.clientHeight\n );\n },\n \n /**\n * Gets the height of the scroller element\n * @return {int} the height of the scroller element in pixels\n */\n getScrollerHeight : function () {\n return (this.scroller === window || this.scroller === document.body)\n ? this.getDocumentHeight()\n : this.getElementHeight(this.scroller);\n },\n \n /**\n * determines if the scroll position is outside of document boundaries\n * @param {int} currentScrollY the current y scroll position\n * @return {bool} true if out of bounds, false otherwise\n */\n isOutOfBounds : function (currentScrollY) {\n var pastTop = currentScrollY < 0,\n pastBottom = currentScrollY + this.getScrollerPhysicalHeight() > this.getScrollerHeight();\n \n return pastTop || pastBottom;\n },\n \n /**\n * determines if the tolerance has been exceeded\n * @param {int} currentScrollY the current scroll y position\n * @return {bool} true if tolerance exceeded, false otherwise\n */\n toleranceExceeded : function (currentScrollY, direction) {\n return Math.abs(currentScrollY-this.lastKnownScrollY) >= this.tolerance[direction];\n },\n \n /**\n * determine if it is appropriate to unpin\n * @param {int} currentScrollY the current y scroll position\n * @param {bool} toleranceExceeded has the tolerance been exceeded?\n * @return {bool} true if should unpin, false otherwise\n */\n shouldUnpin : function (currentScrollY, toleranceExceeded) {\n var scrollingDown = currentScrollY > this.lastKnownScrollY,\n pastOffset = currentScrollY >= this.offset;\n \n return scrollingDown && pastOffset && toleranceExceeded;\n },\n \n /**\n * determine if it is appropriate to pin\n * @param {int} currentScrollY the current y scroll position\n * @param {bool} toleranceExceeded has the tolerance been exceeded?\n * @return {bool} true if should pin, false otherwise\n */\n shouldPin : function (currentScrollY, toleranceExceeded) {\n var scrollingUp = currentScrollY < this.lastKnownScrollY,\n pastOffset = currentScrollY <= this.offset;\n \n return (scrollingUp && toleranceExceeded) || pastOffset;\n },\n \n /**\n * Handles updating the state of the widget\n */\n update : function() {\n var currentScrollY = this.getScrollY(),\n scrollDirection = currentScrollY > this.lastKnownScrollY ? 'down' : 'up',\n toleranceExceeded = this.toleranceExceeded(currentScrollY, scrollDirection);\n \n if(this.isOutOfBounds(currentScrollY)) { // Ignore bouncy scrolling in OSX\n return;\n }\n \n if (currentScrollY <= this.offset ) {\n this.top();\n } else {\n this.notTop();\n }\n \n if(currentScrollY + this.getViewportHeight() >= this.getScrollerHeight()) {\n this.bottom();\n }\n else {\n this.notBottom();\n }\n \n if(this.shouldUnpin(currentScrollY, toleranceExceeded)) {\n this.unpin();\n }\n else if(this.shouldPin(currentScrollY, toleranceExceeded)) {\n this.pin();\n }\n \n this.lastKnownScrollY = currentScrollY;\n }\n };\n /**\n * Default options\n * @type {Object}\n */\n Headroom.options = {\n tolerance : {\n up : 0,\n down : 0\n },\n offset : 0,\n scroller: window,\n classes : {\n pinned : 'headroom--pinned',\n unpinned : 'headroom--unpinned',\n top : 'headroom--top',\n notTop : 'headroom--not-top',\n bottom : 'headroom--bottom',\n notBottom : 'headroom--not-bottom',\n initial : 'headroom'\n }\n };\n Headroom.cutsTheMustard = typeof features !== 'undefined' && features.rAF && features.bind && features.classList;\n\n return Headroom;\n}));\n\n\n// WEBPACK FOOTER //\n// ./~/headroom.js/dist/headroom.js","import $ from 'jquery'\n\nlet Masonry = null\n\n$(() => {\n if ($('.js-Masonry-container').length > 0) {\n try {\n Masonry = require('salvattore')\n } catch (e) {\n /* HEY, I'm IE8 */\n }\n }\n})\n\nexport default {\n Masonry\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/masonry/index.js","/*!\n * Salvattore 1.0.9 by @rnmp and @ppold\n * https://github.com/rnmp/salvattore\n */\n(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.salvattore = factory();\n }\n}(this, function() {\n/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */\n\nif (!window.matchMedia) {\n window.matchMedia = function() {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n var styleMedia = (window.styleMedia || window.media);\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n\n script.parentNode.insertBefore(style, script);\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;\n\n styleMedia = {\n matchMedium: function(media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n\n return function(media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n }();\n}\n\n/*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n(function(){\n \"use strict\";\n\n // Bail out for browsers that have addListener support\n if (window.matchMedia && window.matchMedia('all').addListener) {\n return false;\n }\n\n var localMatchMedia = window.matchMedia,\n hasMediaQueries = localMatchMedia('only all').matches,\n isListening = false,\n timeoutID = 0, // setTimeout for debouncing 'handleChange'\n queries = [], // Contains each 'mql' and associated 'listeners' if 'addListener' is used\n handleChange = function(evt) {\n // Debounce\n clearTimeout(timeoutID);\n\n timeoutID = setTimeout(function() {\n for (var i = 0, il = queries.length; i < il; i++) {\n var mql = queries[i].mql,\n listeners = queries[i].listeners || [],\n matches = localMatchMedia(mql.media).matches;\n\n // Update mql.matches value and call listeners\n // Fire listeners only if transitioning to or from matched state\n if (matches !== mql.matches) {\n mql.matches = matches;\n\n for (var j = 0, jl = listeners.length; j < jl; j++) {\n listeners[j].call(window, mql);\n }\n }\n }\n }, 30);\n };\n\n window.matchMedia = function(media) {\n var mql = localMatchMedia(media),\n listeners = [],\n index = 0;\n\n mql.addListener = function(listener) {\n // Changes would not occur to css media type so return now (Affects IE <= 8)\n if (!hasMediaQueries) {\n return;\n }\n\n // Set up 'resize' listener for browsers that support CSS3 media queries (Not for IE <= 8)\n // There should only ever be 1 resize listener running for performance\n if (!isListening) {\n isListening = true;\n window.addEventListener('resize', handleChange, true);\n }\n\n // Push object only if it has not been pushed already\n if (index === 0) {\n index = queries.push({\n mql : mql,\n listeners : listeners\n });\n }\n\n listeners.push(listener);\n };\n\n mql.removeListener = function(listener) {\n for (var i = 0, il = listeners.length; i < il; i++){\n if (listeners[i] === listener){\n listeners.splice(i, 1);\n }\n }\n };\n\n return mql;\n };\n}());\n\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n\n// MIT license\n\n(function() {\n \"use strict\";\n\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] ||\n window[vendors[x]+'CancelRequestAnimationFrame'];\n }\n\n if (!window.requestAnimationFrame)\n window.requestAnimationFrame = function(callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = window.setTimeout(function() { callback(currTime + timeToCall); },\n timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n\n if (!window.cancelAnimationFrame)\n window.cancelAnimationFrame = function(id) {\n clearTimeout(id);\n };\n}());\n\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent\n\nif (typeof window.CustomEvent !== \"function\") {\n (function() {\n \"use strict\";\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n\n CustomEvent.prototype = window.Event.prototype;\n\n window.CustomEvent = CustomEvent;\n })();\n}\n\n/* jshint laxcomma: true */\nvar salvattore = (function (global, document, undefined) {\n\"use strict\";\n\nvar self = {},\n grids = [],\n mediaRules = [],\n mediaQueries = [],\n add_to_dataset = function(element, key, value) {\n // uses dataset function or a fallback for *:nth-child(\" + numberOfColumns + \"n-\" + i + \")\";\n columnsItems.push(items.querySelectorAll(selector));\n }\n\n columnsItems.forEach(function append_to_grid_fragment(rows) {\n var column = document.createElement(\"div\")\n , rowsFragment = document.createDocumentFragment()\n ;\n\n column.className = columnClasses.join(\" \");\n\n Array.prototype.forEach.call(rows, function append_to_column(row) {\n rowsFragment.appendChild(row);\n });\n column.appendChild(rowsFragment);\n columnsFragment.appendChild(column);\n });\n\n grid.appendChild(columnsFragment);\n add_to_dataset(grid, 'columns', numberOfColumns);\n};\n\n\nself.removeColumns = function removeColumns(grid) {\n // removes all the columns from a grid, and returns a list\n // of items sorted by the ordering of columns.\n\n var range = document.createRange();\n range.selectNodeContents(grid);\n\n var columns = Array.prototype.filter.call(range.extractContents().childNodes, function filter_elements(node) {\n return node instanceof global.HTMLElement;\n });\n\n var numberOfColumns = columns.length\n , numberOfRowsInFirstColumn = columns[0].childNodes.length\n , sortedRows = new Array(numberOfRowsInFirstColumn * numberOfColumns)\n ;\n\n Array.prototype.forEach.call(columns, function iterate_columns(column, columnIndex) {\n Array.prototype.forEach.call(column.children, function iterate_rows(row, rowIndex) {\n sortedRows[rowIndex * numberOfColumns + columnIndex] = row;\n });\n });\n\n var container = document.createElement(\"div\");\n add_to_dataset(container, 'columns', 0);\n\n sortedRows.filter(function filter_non_null(child) {\n return !!child;\n }).forEach(function append_row(child) {\n container.appendChild(child);\n });\n\n return container;\n};\n\n\nself.recreateColumns = function recreateColumns(grid) {\n // removes all the columns from the grid, and adds them again,\n // it is used when the number of columns change.\n\n global.requestAnimationFrame(function render_after_css_mediaQueryChange() {\n self.addColumns(grid, self.removeColumns(grid));\n var columnsChange = new CustomEvent(\"columnsChange\");\n grid.dispatchEvent(columnsChange);\n });\n};\n\n\nself.mediaQueryChange = function mediaQueryChange(mql) {\n // recreates the columns when a media query matches the current state\n // of the browser.\n\n if (mql.matches) {\n Array.prototype.forEach.call(grids, self.recreateColumns);\n }\n};\n\n\nself.getCSSRules = function getCSSRules(stylesheet) {\n // returns a list of css rules from a stylesheet\n\n var cssRules;\n try {\n cssRules = stylesheet.sheet.cssRules || stylesheet.sheet.rules;\n } catch (e) {\n return [];\n }\n\n return cssRules || [];\n};\n\n\nself.getStylesheets = function getStylesheets() {\n // returns a list of all the styles in the document (that are accessible).\n\n var inlineStyleBlocks = Array.prototype.slice.call(document.querySelectorAll(\"style\"));\n inlineStyleBlocks.forEach(function(stylesheet, idx) {\n if (stylesheet.type !== 'text/css' && stylesheet.type !== '') {\n inlineStyleBlocks.splice(idx, 1);\n }\n });\n\n return Array.prototype.concat.call(\n inlineStyleBlocks,\n Array.prototype.slice.call(document.querySelectorAll(\"link[rel='stylesheet']\"))\n );\n};\n\n\nself.mediaRuleHasColumnsSelector = function mediaRuleHasColumnsSelector(rules) {\n // checks if a media query css rule has in its contents a selector that\n // styles the grid.\n\n var i, rule;\n\n try {\n i = rules.length;\n }\n catch (e) {\n i = 0;\n }\n\n while (i--) {\n rule = rules[i];\n if (rule.selectorText && rule.selectorText.match(/\\[data-columns\\](.*)::?before$/)) {\n return true;\n }\n }\n\n return false;\n};\n\n\nself.scanMediaQueries = function scanMediaQueries() {\n // scans all the stylesheets for selectors that style grids,\n // if the matchMedia API is supported.\n\n var newMediaRules = [];\n\n if (!global.matchMedia) {\n return;\n }\n\n self.getStylesheets().forEach(function extract_rules(stylesheet) {\n Array.prototype.forEach.call(self.getCSSRules(stylesheet), function filter_by_column_selector(rule) {\n // rule.media throws an 'not implemented error' in ie9 for import rules occasionally\n try {\n if (rule.media && rule.cssRules && self.mediaRuleHasColumnsSelector(rule.cssRules)) {\n newMediaRules.push(rule);\n }\n } catch (e) {}\n });\n });\n\n // remove matchMedia listeners from the old rules\n var oldRules = mediaRules.filter(function (el) {\n return newMediaRules.indexOf(el) === -1;\n });\n mediaQueries.filter(function (el) {\n return oldRules.indexOf(el.rule) !== -1;\n }).forEach(function (el) {\n el.mql.removeListener(self.mediaQueryChange);\n });\n mediaQueries = mediaQueries.filter(function (el) {\n return oldRules.indexOf(el.rule) === -1;\n });\n\n // add matchMedia listeners to the new rules\n newMediaRules.filter(function (el) {\n return mediaRules.indexOf(el) == -1;\n }).forEach(function (rule) {\n var mql = global.matchMedia(rule.media.mediaText);\n mql.addListener(self.mediaQueryChange);\n mediaQueries.push({rule: rule, mql:mql});\n });\n\n // swap mediaRules with the new set\n mediaRules.length = 0;\n mediaRules = newMediaRules;\n};\n\n\nself.rescanMediaQueries = function rescanMediaQueries() {\n self.scanMediaQueries();\n Array.prototype.forEach.call(grids, self.recreateColumns);\n};\n\n\nself.nextElementColumnIndex = function nextElementColumnIndex(grid, fragments) {\n // returns the index of the column where the given element must be added.\n\n var children = grid.children\n , m = children.length\n , lowestRowCount = 0\n , child\n , currentRowCount\n , i\n , index = 0\n ;\n for (i = 0; i < m; i++) {\n child = children[i];\n currentRowCount = child.children.length + (fragments[i].children || fragments[i].childNodes).length;\n if(lowestRowCount === 0) {\n lowestRowCount = currentRowCount;\n }\n if(currentRowCount < lowestRowCount) {\n index = i;\n lowestRowCount = currentRowCount;\n }\n }\n\n return index;\n};\n\n\nself.createFragmentsList = function createFragmentsList(quantity) {\n // returns a list of fragments\n\n var fragments = new Array(quantity)\n , i = 0\n ;\n\n while (i !== quantity) {\n fragments[i] = document.createDocumentFragment();\n i++;\n }\n\n return fragments;\n};\n\n\nself.appendElements = function appendElements(grid, elements) {\n // adds a list of elements to the end of a grid\n\n var columns = grid.children\n , numberOfColumns = columns.length\n , fragments = self.createFragmentsList(numberOfColumns)\n ;\n\n Array.prototype.forEach.call(elements, function append_to_next_fragment(element) {\n var columnIndex = self.nextElementColumnIndex(grid, fragments);\n fragments[columnIndex].appendChild(element);\n });\n\n Array.prototype.forEach.call(columns, function insert_column(column, index) {\n column.appendChild(fragments[index]);\n });\n};\n\n\nself.prependElements = function prependElements(grid, elements) {\n // adds a list of elements to the start of a grid\n\n var columns = grid.children\n , numberOfColumns = columns.length\n , fragments = self.createFragmentsList(numberOfColumns)\n , columnIndex = numberOfColumns - 1\n ;\n\n elements.forEach(function append_to_next_fragment(element) {\n var fragment = fragments[columnIndex];\n fragment.insertBefore(element, fragment.firstChild);\n if (columnIndex === 0) {\n columnIndex = numberOfColumns - 1;\n } else {\n columnIndex--;\n }\n });\n\n Array.prototype.forEach.call(columns, function insert_column(column, index) {\n column.insertBefore(fragments[index], column.firstChild);\n });\n\n // populates a fragment with n columns till the right\n var fragment = document.createDocumentFragment()\n , numberOfColumnsToExtract = elements.length % numberOfColumns\n ;\n\n while (numberOfColumnsToExtract-- !== 0) {\n fragment.appendChild(grid.lastChild);\n }\n\n // adds the fragment to the left\n grid.insertBefore(fragment, grid.firstChild);\n};\n\n\nself.registerGrid = function registerGrid (grid) {\n if (global.getComputedStyle(grid).display === \"none\") {\n return;\n }\n\n // retrieve the list of items from the grid itself\n var range = document.createRange();\n range.selectNodeContents(grid);\n\n var items = document.createElement(\"div\");\n items.appendChild(range.extractContents());\n\n\n add_to_dataset(items, 'columns', 0);\n self.addColumns(grid, items);\n grids.push(grid);\n};\n\n\nself.init = function init() {\n // adds required CSS rule to hide 'content' based\n // configuration.\n\n var css = document.createElement(\"style\");\n css.innerHTML = \"[data-columns]::before{display:block;visibility:hidden;position:absolute;font-size:1px;}\";\n document.head.appendChild(css);\n\n // scans all the grids in the document and generates\n // columns from their configuration.\n\n var gridElements = document.querySelectorAll(\"[data-columns]\");\n Array.prototype.forEach.call(gridElements, self.registerGrid);\n self.scanMediaQueries();\n};\n\nself.init();\n\nreturn {\n appendElements: self.appendElements,\n prependElements: self.prependElements,\n registerGrid: self.registerGrid,\n recreateColumns: self.recreateColumns,\n rescanMediaQueries: self.rescanMediaQueries,\n init: self.init,\n\n // maintains backwards compatibility with underscore style method names\n append_elements: self.appendElements,\n prepend_elements: self.prependElements,\n register_grid: self.registerGrid,\n recreate_columns: self.recreateColumns,\n rescan_media_queries: self.rescanMediaQueries\n};\n\n})(window, window.document);\n\nreturn salvattore;\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./~/salvattore/dist/salvattore.js","import $ from 'jquery'\nimport Megamenu from './megamenu'\n\n// ASAP hide megamenu panels\n$('.js-megamenu').addClass('is-ready')\n\nconst opts = {\n /* add a close button to every subnav */\n addCloseButton: false,\n\n closeButtonClass: 'js-Megamenu-close',\n\n closeButtonTemplate: ``,\n\n /* if false open menu on hover */\n openOnClick: true,\n\n /* prefix for generated unique id attributes, which are required\n to indicate aria-owns, aria-controls and aria-labelledby */\n uuidPrefix: 'megamenu',\n\n /* css class used to define the megamenu styling */\n menuClass: 'Megamenu',\n\n menuListClass: 'Megamenu-list',\n\n /* css class for a top-level navigation item in the megamenu */\n topNavItemClass: 'Megamenu-item',\n\n /* css class for a megamenu panel */\n panelClass: 'Megamenu-subnav',\n\n /* css class for a group of items within a megamenu panel */\n panelGroupClass: 'Megamenu-subnavGroup',\n\n /* css class for the hover state */\n hoverClass: 'is-hover',\n\n /* css class for the focus state */\n focusClass: 'is-focus',\n\n /* css class for the open state */\n openClass: 'is-open'\n}\n\n/*\n *\tTakes a Treeview and makes it work with Megamenu\n */\nconst listToMegaMenu = ($ul, _opts) => {\n const attrs = 'class aria-expanded aria-hidden role tabindex'\n return $ul\n .clone()\n .removeAttr(attrs)\n .addClass(_opts.menuListClass)\n .find('*')\n .removeAttr(attrs)\n .end()\n .find('> li')\n .each(function(i, li) {\n $(li)\n .addClass(function() {\n let className = $(this).data('megamenu-class')\n return className ? className : _opts.topNavItemClass\n })\n .find('[data-megamenu-class]')\n .addClass(function() {\n return $(this).data('megamenu-class')\n })\n .end()\n .find('a')\n // make item tabbable, this is required !\n // .attr('href', '#')\n .end()\n .find('> ul > li')\n .unwrap()\n .wrap(`
      `)\n .end()\n .find('> ul')\n .wrapAll(`
      `)\n })\n .end()\n}\n\n$(document).ready(function() {\n $('.js-megamenu').each((i, el) => {\n const $el = $(el)\n const rel = $(el).data('rel')\n\n if ($el.find('ul').length === 0 && rel && $(rel).length > 0) {\n let $menu = listToMegaMenu($(rel), opts)\n $el.append($menu)\n // @FIXME: make space for javascript rendered megamenu\n if ($('header').css('position') === 'fixed') {\n $('body').css({\n paddingTop: '+=' + $el.height() + 'px'\n })\n }\n }\n\n $el.accessibleMegaMenu(opts)\n\n if (opts.addCloseButton) {\n $(opts.closeButtonTemplate).appendTo($('.' + opts.panelClass))\n }\n\n $('.' + opts.closeButtonClass).on('click', function() {\n const e = $.Event('keydown')\n e.which = 27\n $('.' + opts.menuClass).trigger(e)\n return false\n })\n\n })\n})\n\nexport default {\n opts,\n listToMegaMenu,\n Megamenu\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/megamenu/index.js","/*\nCopyright © 2013 Adobe Systems Incorporated.\n\nLicensed under the Apache License, Version 2.0 (the “License”)\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an “AS IS” BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * @fileOverview accessibleMegaMenu plugin\n *\n *

      Licensed under the Apache License, Version 2.0 (the “License”)\n *
      Copyright © 2013 Adobe Systems Incorporated.\n *
      Project page https://github.com/adobe-accessibility/Accessible-Mega-Menu\n * @version 0.1\n * @author Michael Jordan\n * @requires jquery\n */\n\n/*jslint browser: true, devel: true, plusplus: true, nomen: true */\n/*global jQuery */\n(function($, window, document) {\n var pluginName = 'accessibleMegaMenu',\n defaults = {\n openOnClick: false,\n uuidPrefix: 'accessible-megamenu', // unique ID's are required to indicate aria-owns, aria-controls and aria-labelledby\n menuClass: 'accessible-megamenu', // default css class used to define the megamenu styling\n topNavItemClass: 'accessible-megamenu-top-nav-item', // default css class for a top-level navigation item in the megamenu\n panelClass: 'accessible-megamenu-panel', // default css class for a megamenu panel\n panelGroupClass: 'accessible-megamenu-panel-group', // default css class for a group of items within a megamenu panel\n hoverClass: 'hover', // default css class for the hover state\n focusClass: 'focus', // default css class for the focus state\n openClass: 'open' // default css class for the open state\n },\n Keyboard = {\n BACKSPACE: 8,\n COMMA: 188,\n DELETE: 46,\n DOWN: 40,\n END: 35,\n ENTER: 13,\n ESCAPE: 27,\n HOME: 36,\n LEFT: 37,\n PAGE_DOWN: 34,\n PAGE_UP: 33,\n PERIOD: 190,\n RIGHT: 39,\n SPACE: 32,\n TAB: 9,\n UP: 38,\n keyMap: {\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: '',\n 65: 'a',\n 66: 'b',\n 67: 'c',\n 68: 'd',\n 69: 'e',\n 70: 'f',\n 71: 'g',\n 72: 'h',\n 73: 'i',\n 74: 'j',\n 75: 'k',\n 76: 'l',\n 77: 'm',\n 78: 'n',\n 79: 'o',\n 80: 'p',\n 81: 'q',\n 82: 'r',\n 83: 's',\n 84: 't',\n 85: 'u',\n 86: 'v',\n 87: 'w',\n 88: 'x',\n 89: 'y',\n 90: 'z',\n 96: '0',\n 97: '1',\n 98: '2',\n 99: '3',\n 100: '4',\n 101: '5',\n 102: '6',\n 103: '7',\n 104: '8',\n 105: '9',\n 190: '.'\n }\n }\n /**\n * @desc Creates a new accessible mega menu instance.\n * @param {jquery} element\n * @param {object} [options] Mega Menu options\n * @param {string} [options.uuidPrefix=accessible-megamenu] - Prefix for generated unique id attributes, which are required to indicate aria-owns, aria-controls and aria-labelledby\n * @param {string} [options.menuClass=accessible-megamenu] - CSS class used to define the megamenu styling\n * @param {string} [options.topNavItemClass=accessible-megamenu-top-nav-item] - CSS class for a top-level navigation item in the megamenu\n * @param {string} [options.panelClass=accessible-megamenu-panel] - CSS class for a megamenu panel\n * @param {string} [options.panelGroupClass=accessible-megamenu-panel-group] - CSS class for a group of items within a megamenu panel\n * @param {string} [options.hoverClass=hover] - CSS class for the hover state\n * @param {string} [options.focusClass=focus] - CSS class for the focus state\n * @param {string} [options.openClass=open] - CSS class for the open state\n * @constructor\n */\n function AccessibleMegaMenu(element, options) {\n this.element = element\n\n // merge optional settings and defaults into settings\n this.settings = $.extend({}, defaults, options)\n\n this._defaults = defaults\n this._name = pluginName\n\n this.mouseTimeoutID = null\n this.focusTimeoutID = null\n this.mouseFocused = false\n this.justFocused = false\n\n this.init()\n }\n\n AccessibleMegaMenu.prototype = (function() {\n\n /* private attributes and methods ------------------------ */\n var uuid = 0,\n keydownTimeoutDuration = 1000,\n keydownSearchString = '',\n isTouch = typeof window.hasOwnProperty === 'function' && !!window.hasOwnProperty('ontouchstart'),\n _getPlugin,\n _addUniqueId,\n _togglePanel,\n _clickHandler,\n _clickOutsideHandler,\n _DOMAttrModifiedHandler,\n _focusInHandler,\n _focusOutHandler,\n _keyDownHandler,\n _mouseDownHandler,\n _mouseOverHandler,\n _mouseOutHandler,\n _toggleExpandedEventHandlers\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_getPlugin\n * @desc Returns the parent accessibleMegaMenu instance for a given element\n * @param {jQuery} element\n * @memberof jQuery.fn.accessibleMegaMenu\n * @inner\n * @private\n */\n _getPlugin = function(element) {\n return $(element).closest(':data(plugin_' + pluginName + ')').data('plugin_' + pluginName)\n }\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_addUniqueId\n * @desc Adds a unique id and element.\n * The id string starts with the\n * string defined in settings.uuidPrefix.\n * @param {jQuery} element\n * @memberof jQuery.fn.accessibleMegaMenu\n * @inner\n * @private\n */\n _addUniqueId = function(element) {\n element = $(element)\n var settings = this.settings\n if (!element.attr('id')) {\n element.attr('id', settings.uuidPrefix + '-' + new Date().getTime() + '-' + (++uuid))\n }\n }\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_togglePanel\n * @desc Toggle the display of mega menu panels in response to an event.\n * The optional boolean value 'hide' forces all panels to hide.\n * @param {event} event\n * @param {Boolean} [hide] Hide all mega menu panels when true\n * @memberof jQuery.fn.accessibleMegaMenu\n * @inner\n * @private\n */\n _togglePanel = function(event, hide) {\n var target = $(event.target),\n that = this,\n settings = this.settings,\n menu = this.menu,\n topli = target.closest('.' + settings.topNavItemClass),\n panel = target.hasClass(settings.panelClass) ? target : target.closest('.' + settings.panelClass),\n newfocus\n\n _toggleExpandedEventHandlers.call(this, true)\n\n if (hide) {\n topli = menu.find('.' + settings.topNavItemClass + ' .' + settings.openClass + ':first').closest('.' + settings.topNavItemClass)\n if (!(topli.is(event.relatedTarget) || topli.has(event.relatedTarget).length > 0)) {\n if ((event.type === 'mouseout' || event.type === 'focusout') && topli.has(document.activeElement).length > 0) {\n return\n }\n topli.find('[aria-expanded]')\n .attr('aria-expanded', 'false')\n .removeClass(settings.openClass)\n .filter('.' + settings.panelClass)\n .attr('aria-hidden', 'true')\n if ((event.type === 'keydown' && event.keyCode === Keyboard.ESCAPE) || event.type === 'DOMAttrModified') {\n newfocus = topli.find(':tabbable:first')\n setTimeout(function() {\n menu.find('[aria-expanded].' + that.settings.panelClass).off('DOMAttrModified.accessible-megamenu')\n newfocus.focus()\n that.justFocused = false\n }, 99)\n }\n } else if (topli.length === 0) {\n menu.find('[aria-expanded=true]')\n .attr('aria-expanded', 'false')\n .removeClass(settings.openClass)\n .filter('.' + settings.panelClass)\n .attr('aria-hidden', 'true')\n }\n } else {\n clearTimeout(that.focusTimeoutID)\n topli.siblings()\n .find('[aria-expanded]')\n .attr('aria-expanded', 'false')\n .removeClass(settings.openClass)\n .filter('.' + settings.panelClass)\n .attr('aria-hidden', 'true')\n topli.find('[aria-expanded]')\n .attr('aria-expanded', 'true')\n .addClass(settings.openClass)\n .filter('.' + settings.panelClass)\n .attr('aria-hidden', 'false')\n if (event.type === 'mouseover' && target.is(':tabbable') && topli.length === 1 && panel.length === 0 && menu.has(document.activeElement).length > 0) {\n target.focus()\n that.justFocused = false\n }\n\n _toggleExpandedEventHandlers.call(that)\n }\n }\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_clickHandler\n * @desc Handle click event on mega menu item\n * @param {event} Event object\n * @memberof jQuery.fn.accessibleMegaMenu\n * @inner\n * @private\n */\n _clickHandler = function(event) {\n var target = $(event.currentTarget),\n topli = target.closest('.' + this.settings.topNavItemClass),\n panel = target.closest('.' + this.settings.panelClass)\n if (topli.length === 1 &&\n panel.length === 0 &&\n topli.find('.' + this.settings.panelClass).length === 1) {\n if (!target.hasClass(this.settings.openClass)) {\n event.preventDefault()\n event.stopPropagation()\n _togglePanel.call(this, event)\n this.justFocused = false\n } else {\n if (this.justFocused) {\n event.preventDefault()\n event.stopPropagation()\n this.justFocused = false\n } else if (isTouch) {\n event.preventDefault()\n event.stopPropagation()\n _togglePanel.call(this, event, target.hasClass(this.settings.openClass))\n }\n }\n }\n }\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_clickOutsideHandler\n * @desc Handle click event outside of a the megamenu\n * @param {event} Event object\n * @memberof jQuery.fn.accessibleMegaMenu\n * @inner\n * @private\n */\n _clickOutsideHandler = function(event) {\n if ($(event.target).closest(this.menu).length === 0) {\n event.preventDefault()\n event.stopPropagation()\n _togglePanel.call(this, event, true)\n }\n }\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_DOMAttrModifiedHandler\n * @desc Handle DOMAttrModified event on panel to respond to Windows 8 Narrator ExpandCollapse pattern\n * @param {event} Event object\n * @memberof jQuery.fn.accessibleMegaMenu\n * @inner\n * @private\n */\n _DOMAttrModifiedHandler = function(event) {\n if (event.originalEvent.attrName === 'aria-expanded' &&\n event.originalEvent.newValue === 'false' &&\n $(event.target).hasClass(this.settings.openClass)) {\n event.preventDefault()\n event.stopPropagation()\n _togglePanel.call(this, event, true)\n }\n }\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_focusInHandler\n * @desc Handle focusin event on mega menu item.\n * @param {event} Event object\n * @memberof jQuery.fn.accessibleMegaMenu\n * @inner\n * @private\n */\n _focusInHandler = function(event) {\n clearTimeout(this.focusTimeoutID)\n var target = $(event.target),\n panel = target.closest('.' + this.settings.panelClass)\n target\n .addClass(this.settings.focusClass)\n .on('click.accessible-megamenu', $.proxy(_clickHandler, this))\n this.justFocused = !this.mouseFocused\n this.mouseFocused = false\n if (this.panels.not(panel).filter('.' + this.settings.openClass).length) {\n _togglePanel.call(this, event)\n }\n }\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_focusOutHandler\n * @desc Handle focusout event on mega menu item.\n * @param {event} Event object\n * @memberof jQuery.fn.accessibleMegaMenu\n * @inner\n * @private\n */\n _focusOutHandler = function(event) {\n this.justFocused = false\n var that = this,\n target = $(event.target),\n topli = target.closest('.' + this.settings.topNavItemClass)\n\n target\n // .removeClass(this.settings.focusClass)\n .off('click.accessible-megamenu')\n\n if (window.cvox) {\n // If ChromeVox is running...\n that.focusTimeoutID = setTimeout(function() {\n window.cvox.Api.getCurrentNode(function(node) {\n if (topli.has(node).length) {\n // and the current node being voiced is in\n // the mega menu, clearTimeout,\n // so the panel stays open.\n clearTimeout(that.focusTimeoutID)\n } else {\n that.focusTimeoutID = setTimeout(function(scope, _event, hide) {\n _togglePanel.call(scope, _event, hide)\n }, 275, that, event, true)\n }\n })\n }, 25)\n } else {\n that.focusTimeoutID = setTimeout(function() {\n _togglePanel.call(that, event, true)\n }, 300)\n }\n }\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_keyDownHandler\n * @desc Handle keydown event on mega menu.\n * @param {event} Event object\n * @memberof jQuery.fn.accessibleMegaMenu\n * @inner\n * @private\n */\n _keyDownHandler = function(event) {\n var that = (this.constructor === AccessibleMegaMenu) ? this : _getPlugin(this), // determine the AccessibleMegaMenu plugin instance\n settings = that.settings,\n target = $($(this).is('.' + settings.hoverClass + ':tabbable') ? this : event.target), // if the element is hovered the target is this, otherwise, its the focused element\n menu = that.menu,\n topnavitems = that.topnavitems,\n topli = target.closest('.' + settings.topNavItemClass),\n tabbables = menu.find(':tabbable'),\n panel = target.hasClass(settings.panelClass) ? target : target.closest('.' + settings.panelClass),\n panelGroups = panel.find('.' + settings.panelGroupClass),\n currentPanelGroup = target.closest('.' + settings.panelGroupClass),\n next,\n keycode = event.keyCode || event.which,\n start,\n i,\n o,\n label,\n found = false,\n newString = Keyboard.keyMap[event.keyCode] || '',\n regex,\n isTopNavItem = (topli.length === 1 && panel.length === 0)\n\n if (target.is('input:focus, select:focus, textarea:focus, button:focus')) {\n // if the event target is a form element we should handle keydown normally\n return\n }\n\n if (target.is('.' + settings.hoverClass + ':tabbable')) {\n $('html').off('keydown.accessible-megamenu')\n }\n\n switch (keycode) {\n case Keyboard.ESCAPE:\n _togglePanel.call(that, event, true)\n break\n case Keyboard.DOWN:\n event.preventDefault()\n if (isTopNavItem) {\n _togglePanel.call(that, event)\n found = (topli.find('.' + settings.panelClass + ' :tabbable:first').focus().length === 1)\n } else {\n found = (tabbables.filter(':gt(' + tabbables.index(target) + '):first').focus().length === 1)\n }\n\n if (!found && window.opera && opera.toString() === '[object Opera]' && (event.ctrlKey || event.metaKey)) {\n tabbables = $(':tabbable')\n i = tabbables.index(target)\n found = ($(':tabbable:gt(' + $(':tabbable').index(target) + '):first').focus().length === 1)\n }\n break\n case Keyboard.UP:\n event.preventDefault()\n if (isTopNavItem && target.hasClass(settings.openClass)) {\n _togglePanel.call(that, event, true)\n next = topnavitems.filter(':lt(' + topnavitems.index(topli) + '):last')\n if (next.children('.' + settings.panelClass).length) {\n found = (next.children()\n .attr('aria-expanded', 'true')\n .addClass(settings.openClass)\n .filter('.' + settings.panelClass)\n .attr('aria-hidden', 'false')\n .find(':tabbable:last')\n .focus() === 1)\n }\n } else if (!isTopNavItem) {\n found = (tabbables.filter(':lt(' + tabbables.index(target) + '):last').focus().length === 1)\n }\n\n if (!found && window.opera && opera.toString() === '[object Opera]' && (event.ctrlKey || event.metaKey)) {\n tabbables = $(':tabbable')\n i = tabbables.index(target)\n found = ($(':tabbable:lt(' + $(':tabbable').index(target) + '):first').focus().length === 1)\n }\n break\n case Keyboard.RIGHT:\n event.preventDefault()\n if (isTopNavItem) {\n found = (topnavitems.filter(':gt(' + topnavitems.index(topli) + '):first').find(':tabbable:first').focus().length === 1)\n } else {\n if (panelGroups.length && currentPanelGroup.length) {\n // if the current panel contains panel groups, and we are able to focus the first tabbable element of the next panel group\n found = (panelGroups.filter(':gt(' + panelGroups.index(currentPanelGroup) + '):first').find(':tabbable:first').focus().length === 1)\n }\n\n if (!found) {\n found = (topli.find(':tabbable:first').focus().length === 1)\n }\n }\n break\n case Keyboard.LEFT:\n event.preventDefault()\n if (isTopNavItem) {\n found = (topnavitems.filter(':lt(' + topnavitems.index(topli) + '):last').find(':tabbable:first').focus().length === 1)\n } else {\n if (panelGroups.length && currentPanelGroup.length) {\n // if the current panel contains panel groups, and we are able to focus the first tabbable element of the previous panel group\n found = (panelGroups.filter(':lt(' + panelGroups.index(currentPanelGroup) + '):last').find(':tabbable:first').focus().length === 1)\n }\n\n if (!found) {\n found = (topli.find(':tabbable:first').focus().length === 1)\n }\n }\n break\n case Keyboard.TAB:\n i = tabbables.index(target)\n if (event.shiftKey && isTopNavItem && target.hasClass(settings.openClass)) {\n _togglePanel.call(that, event, true)\n next = topnavitems.filter(':lt(' + topnavitems.index(topli) + '):last')\n if (next.children('.' + settings.panelClass).length) {\n found = next.children()\n .attr('aria-expanded', 'true')\n .addClass(settings.openClass)\n .filter('.' + settings.panelClass)\n .attr('aria-hidden', 'false')\n .find(':tabbable:last')\n .focus()\n }\n } else if (event.shiftKey && i > 0) {\n found = (tabbables.filter(':lt(' + i + '):last').focus().length === 1)\n } else if (!event.shiftKey && i < tabbables.length - 1) {\n found = (tabbables.filter(':gt(' + i + '):first').focus().length === 1)\n } else if (window.opera && opera.toString() === '[object Opera]') {\n tabbables = $(':tabbable')\n i = tabbables.index(target)\n if (event.shiftKey) {\n found = ($(':tabbable:lt(' + $(':tabbable').index(target) + '):last').focus().length === 1)\n } else {\n found = ($(':tabbable:gt(' + $(':tabbable').index(target) + '):first').focus().length === 1)\n }\n }\n\n if (found) {\n event.preventDefault()\n }\n break\n case Keyboard.SPACE:\n if (isTopNavItem) {\n event.preventDefault()\n _clickHandler.call(that, event)\n } else {\n return\n }\n break\n case Keyboard.ENTER:\n return\n break\n default:\n // alphanumeric filter\n clearTimeout(this.keydownTimeoutID)\n\n keydownSearchString += newString !== keydownSearchString ? newString : ''\n\n if (keydownSearchString.length === 0) {\n return\n }\n\n this.keydownTimeoutID = setTimeout(function() {\n keydownSearchString = ''\n }, keydownTimeoutDuration)\n\n if (isTopNavItem && !target.hasClass(settings.openClass)) {\n tabbables = tabbables.filter(':not(.' + settings.panelClass + ' :tabbable)')\n } else {\n tabbables = topli.find(':tabbable')\n }\n\n if (event.shiftKey) {\n tabbables = $(tabbables.get()\n .reverse())\n }\n\n for (i = 0; i < tabbables.length; i++) {\n o = tabbables.eq(i)\n if (o.is(target)) {\n start = (keydownSearchString.length === 1) ? i + 1 : i\n break\n }\n }\n\n regex = new RegExp('^' + keydownSearchString.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&'), 'i')\n\n for (i = start; i < tabbables.length; i++) {\n o = tabbables.eq(i)\n label = $.trim(o.text())\n if (regex.test(label)) {\n found = true\n o.focus()\n break\n }\n }\n if (!found) {\n for (i = 0; i < start; i++) {\n o = tabbables.eq(i)\n label = $.trim(o.text())\n if (regex.test(label)) {\n o.focus()\n break\n }\n }\n }\n break\n }\n that.justFocused = false\n }\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_mouseDownHandler\n * @desc Handle mousedown event on mega menu.\n * @param {event} Event object\n * @memberof accessibleMegaMenu\n * @inner\n * @private\n */\n _mouseDownHandler = function(event) {\n if ($(event.target).is(this.settings.panelClass) || $(event.target).closest(':focusable').length) {\n this.mouseFocused = true\n }\n this.mouseTimeoutID = setTimeout(function() {\n clearTimeout(this.focusTimeoutID)\n }, 1)\n }\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_mouseOverHandler\n * @desc Handle mouseover event on mega menu.\n * @param {event} Event object\n * @memberof jQuery.fn.accessibleMegaMenu\n * @inner\n * @private\n */\n _mouseOverHandler = function(event) {\n clearTimeout(this.mouseTimeoutID)\n $(event.target)\n .addClass(this.settings.hoverClass)\n _togglePanel.call(this, event)\n if ($(event.target).is(':tabbable')) {\n $('html').on('keydown.accessible-megamenu', $.proxy(_keyDownHandler, event.target))\n }\n }\n\n /**\n * @name jQuery.fn.accessibleMegaMenu~_mouseOutHandler\n * @desc Handle mouseout event on mega menu.\n * @param {event} Event object\n * @memberof jQuery.fn.accessibleMegaMenu\n * @inner\n * @private\n */\n _mouseOutHandler = function(event) {\n var that = this\n $(event.target)\n .removeClass(that.settings.hoverClass)\n\n that.mouseTimeoutID = setTimeout(function() {\n _togglePanel.call(that, event, true)\n }, 250)\n if ($(event.target).is(':tabbable')) {\n $('html').off('keydown.accessible-megamenu')\n }\n }\n\n _toggleExpandedEventHandlers = function(hide) {\n var menu = this.menu\n if (hide) {\n $('html').off('mouseup.outside-accessible-megamenu, touchend.outside-accessible-megamenu, mspointerup.outside-accessible-megamenu, pointerup.outside-accessible-megamenu')\n\n menu.find('[aria-expanded].' + this.settings.panelClass).off('DOMAttrModified.accessible-megamenu')\n } else {\n $('html').on('mouseup.outside-accessible-megamenu, touchend.outside-accessible-megamenu, mspointerup.outside-accessible-megamenu, pointerup.outside-accessible-megamenu', $.proxy(_clickOutsideHandler, this))\n\n /* Narrator in Windows 8 automatically toggles the aria-expanded property on double tap or click.\n To respond to the change to collapse the panel, we must add a listener for a DOMAttrModified event. */\n menu.find('[aria-expanded=true].' + this.settings.panelClass).on('DOMAttrModified.accessible-megamenu', $.proxy(_DOMAttrModifiedHandler, this))\n }\n }\n\n /* public attributes and methods ------------------------- */\n return {\n constructor: AccessibleMegaMenu,\n\n /**\n * @lends jQuery.fn.accessibleMegaMenu\n * @desc Initializes an instance of the accessibleMegaMenu plugins\n * @memberof jQuery.fn.accessibleMegaMenu\n * @instance\n */\n init: function() {\n var settings = this.settings,\n nav = $(this.element),\n menu = nav.children().first(),\n // Only filter to those items with the selector class\n topnavitems = this.settings.topNavItems ?\n menu.children(this.settings.topNavItems) :\n menu.children()\n this.start(settings, nav, menu, topnavitems)\n },\n\n start: function(settings, nav, menu, topnavitems) {\n var that = this\n this.settings = settings\n this.menu = menu\n this.topnavitems = topnavitems\n\n nav.attr('role', 'navigation')\n menu.addClass(settings.menuClass)\n topnavitems.each(function(i, topnavitem) {\n var topnavitemlink, topnavitempanel\n topnavitem = $(topnavitem)\n // @FIXME: Add classed manually !!!\n // topnavitem.addClass(settings.topNavItemClass)\n topnavitemlink = topnavitem.find(':tabbable:first')\n topnavitempanel = topnavitem.children(':not(:tabbable):last')\n _addUniqueId.call(that, topnavitemlink)\n if (topnavitempanel.length) {\n _addUniqueId.call(that, topnavitempanel)\n topnavitemlink.attr({\n 'aria-haspopup': true,\n 'aria-controls': topnavitempanel.attr('id'),\n 'aria-expanded': false\n })\n\n topnavitempanel.attr({\n 'role': 'group',\n 'aria-expanded': false,\n 'aria-hidden': true\n })\n .addClass(settings.panelClass)\n .not('[aria-labelledby]')\n .attr('aria-labelledby', topnavitemlink.attr('id'))\n }\n })\n\n this.panels = menu.find('.' + settings.panelClass)\n\n menu.on('focusin.accessible-megamenu', ':focusable, .' + settings.panelClass, $.proxy(_focusInHandler, this))\n .on('focusout.accessible-megamenu', ':focusable, .' + settings.panelClass, $.proxy(_focusOutHandler, this))\n .on('keydown.accessible-megamenu', $.proxy(_keyDownHandler, this))\n .on('mousedown.accessible-megamenu', $.proxy(_mouseDownHandler, this))\n\n if (!settings.openOnClick) {\n menu.on('mouseover.accessible-megamenu', $.proxy(_mouseOverHandler, this))\n .on('mouseout.accessible-megamenu', $.proxy(_mouseOutHandler, this))\n }\n else {\n menu.on('click.accessible-megamenu', $.proxy(_mouseOverHandler, this))\n }\n\n if (isTouch) {\n menu.on('touchstart.accessible-megamenu', $.proxy(_clickHandler, this))\n }\n\n menu.find('hr').attr('role', 'separator')\n\n if ($(document.activeElement).closest(menu).length) {\n $(document.activeElement).trigger('focusin.accessible-megamenu')\n }\n },\n\n /**\n * @desc Get default values\n * @example $(selector).accessibleMegaMenu('getDefaults')\n * @return {object}\n * @memberof jQuery.fn.accessibleMegaMenu\n * @instance\n */\n getDefaults: function() {\n return this._defaults\n },\n\n /**\n * @desc Get any option set to plugin using its name (as string)\n * @example $(selector).accessibleMegaMenu('getOption', some_option)\n * @param {string} opt\n * @return {string}\n * @memberof jQuery.fn.accessibleMegaMenu\n * @instance\n */\n getOption: function(opt) {\n return this.settings[opt]\n },\n\n /**\n * @desc Get all options\n * @example $(selector).accessibleMegaMenu('getAllOptions')\n * @return {object}\n * @memberof jQuery.fn.accessibleMegaMenu\n * @instance\n */\n getAllOptions: function() {\n return this.settings\n },\n\n /**\n * @desc Set option\n * @example $(selector).accessibleMegaMenu('setOption', 'option_name', 'option_value', reinitialize)\n * @param {string} opt - Option name\n * @param {string} val - Option value\n * @param {boolean} [reinitialize] - boolean to re-initialize the menu.\n * @memberof jQuery.fn.accessibleMegaMenu\n * @instance\n */\n setOption: function(opt, value, reinitialize) {\n this.settings[opt] = value\n if (reinitialize) {\n this.init()\n }\n }\n }\n }())\n\n /*\n * @param {object} [options] Mega Menu options\n * @param {string} [options.uuidPrefix=accessible-megamenu] - Prefix for generated unique id attributes, which are required to indicate aria-owns, aria-controls and aria-labelledby\n * @param {string} [options.menuClass=accessible-megamenu] - CSS class used to define the megamenu styling\n * @param {string} [options.topNavItemClass=accessible-megamenu-top-nav-item] - CSS class for a top-level navigation item in the megamenu\n * @param {string} [options.panelClass=accessible-megamenu-panel] - CSS class for a megamenu panel\n * @param {string} [options.panelGroupClass=accessible-megamenu-panel-group] - CSS class for a group of items within a megamenu panel\n * @param {string} [options.hoverClass=hover] - CSS class for the hover state\n * @param {string} [options.focusClass=focus] - CSS class for the focus state\n * @param {string} [options.openClass=open] - CSS class for the open state\n */\n $.fn[pluginName] = function(options) {\n return this.each(function() {\n if (!$.data(this, 'plugin_' + pluginName)) {\n $.data(this, 'plugin_' + pluginName, new $.fn[pluginName].AccessibleMegaMenu(this, options))\n }\n })\n }\n\n $.fn[pluginName].AccessibleMegaMenu = AccessibleMegaMenu\n\n /* :focusable and :tabbable selectors from\n https://raw.github.com/jquery/jquery-ui/master/ui/jquery.ui.core.js */\n\n /**\n * @private\n */\n function visible(element) {\n return $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function() {\n return $.css(this, 'visibility') === 'hidden'\n }).length\n }\n\n /**\n * @private\n */\n function focusable(element, isTabIndexNotNaN) {\n var map, mapName, img,\n nodeName = element.nodeName.toLowerCase()\n if ('area' === nodeName) {\n map = element.parentNode\n mapName = map.name\n if (!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {\n return false\n }\n img = $('img[usemap=#' + mapName + ']')[0]\n return !!img && visible(img)\n }\n return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled :\n 'a' === nodeName ?\n element.href || isTabIndexNotNaN :\n isTabIndexNotNaN) &&\n // the element and all of its ancestors must be visible\n visible(element)\n }\n\n $.extend($.expr[':'], {\n data: $.expr.createPseudo ? $.expr.createPseudo(function(dataName) {\n return function(elem) {\n return !!$.data(elem, dataName)\n }\n }) : // support: jQuery <1.8\n function(elem, i, match) {\n return !!$.data(elem, match[3])\n },\n\n focusable: function(element) {\n return focusable(element, !isNaN($.attr(element, 'tabindex')))\n },\n\n tabbable: function(element) {\n var tabIndex = $.attr(element, 'tabindex'),\n isTabIndexNaN = isNaN(tabIndex)\n return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN)\n }\n })\n}(jQuery, window, document))\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/megamenu/megamenu.js","import $ from 'jquery'\n\nimport Froffcanvas from 'fr-offcanvas/offcanvas'\n\n/* eslint-disable no-unused-vars */\n\nimport stylesheet from 'fr-offcanvas/offcanvas.css'\n\n/* eslint-enable */\n\nconst opts = {\n // String - panel\n panelSelector: '.Offcanvas',\n\n // String - content\n contentSelector: '.Offcanvas-content',\n\n // String - content\n modalSelector: '.Offcanvas--modal',\n\n // String - trigger\n jsSelector: '.js-fr-offcanvas-open',\n\n // String - Selector for the open button(s)\n openSelector: '.js-fr-offcanvas-open',\n\n // String - Selector for the close button\n closeSelector: '.js-fr-offcanvas-close',\n\n // String - Class name that will be added to the selector when the component has been initialised\n readyClass: 'is-ready',\n\n // String - Class name that will be added to the selector when the panel is visible\n activeClass: 'is-active'\n}\n\n/*\n * Prevent scroll on body when offcanvas is visible\n * (the touchmove handler targets iOS devices)\n */\nconst _handleModalScroll = () => {\n $(opts.contentSelector).on('transitionend', function() {\n if (!$(opts.panelSelector).hasClass(opts.activeClass)) {\n $(window).off('scroll.offcanvas')\n $(document).off('touchmove.offcanvas')\n } else {\n const _scrollTop = $(window).scrollTop()\n $(window).on('scroll.offcanvas', () => $(window).scrollTop(_scrollTop))\n $(document).on('touchmove.offcanvas', () => $(window).scrollTop(_scrollTop))\n }\n })\n}\n\n/*\n *\tFIXME: hack to show / hide the background panel\n */\nconst _handleModal = (e) => {\n if (e && $(opts.panelSelector).hasClass(opts.activeClass) &&\n !$(e.target).is(opts.contentSelector)) {\n // for some odd reason plain jquery click() does not work here\n // // so we add that get(0) call\n $(opts.closeSelector).get(0).click()\n }\n // we're using \"one\" here instead of \"bind\" because\n // otherwise $(opts.closeSelector).click() would trigger\n // a click on modal again looping forever\n $(opts.modalSelector).one('click', _handleModal)\n}\n\nlet _exports = {\n Froffcanvas,\n opts\n}\n\n$(document).ready(() => {\n let _scrollTop = $(window).scrollTop()\n\n $(opts.openSelector)\n .add($(opts.closeSelector))\n .click((e) => {\n _scrollTop = $(window).scrollTop()\n e.preventDefault()\n })\n\n $(opts.panelSelector).on('focus', () => {\n $(window).scrollTop(_scrollTop)\n })\n\n _handleModal()\n _handleModalScroll()\n\n _exports.offcanvas = Froffcanvas(opts)\n})\n\nexport default _exports\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/offcanvas/index.js","'use strict';\n\n// Polyfill matches as per https://github.com/jonathantneal/closest\nElement.prototype.matches = Element.prototype.matches ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.oMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n\n/**\n * @param {object} options Object containing configuration overrides\n */\nconst Froffcanvas = function({\n selector: selector = '.js-fr-offcanvas',\n openSelector: openSelector = '.js-fr-offcanvas-open',\n closeSelector: closeSelector = '.js-fr-offcanvas-close',\n readyClass: readyClass = 'fr-offcanvas--is-ready',\n activeClass: activeClass = 'fr-offcanvas--is-active'\n } = {}) {\n\n\n // CONSTANTS\n const doc = document;\n const docEl = doc.documentElement;\n const _q = (el, ctx = doc) => [].slice.call(ctx.querySelectorAll(el));\n\n\n // SUPPORTS\n if (!('querySelector' in doc) || !('addEventListener' in window) || !docEl.classList) return;\n\n\n // SETUP\n // set offcanvas element NodeLists\n const panels = _q(selector);\n\n // TEMP\n let currButtonOpen = null;\n let currPanel = null;\n\n\n // UTILS\n function _defer (fn) {\n // wrapped in setTimeout to delay binding until previous rendering has completed\n if (typeof fn === 'function') setTimeout(fn, 0);\n }\n function _closest (el, selector) {\n while (el) {\n if (el.matches(selector)) break;\n el = el.parentElement;\n }\n return el;\n }\n function _getPanelId (panel) {\n return panel.getAttribute('id');\n }\n\n\n // A11Y\n function _addA11y (panel) {\n // add aria-hidden attribute\n panel.setAttribute('aria-hidden', true);\n }\n function _removeA11y (panel) {\n // remove aria-hidden attribute\n panel.removeAttribute('aria-hidden');\n }\n\n\n // ACTIONS\n function _showPanel (panel) {\n // set visibility to override any previous set style\n panel.style.visibility = 'visible';\n // remove aria-hidden, add focus\n panel.setAttribute('aria-hidden', false);\n panel.setAttribute('tabindex', -1);\n panel.focus();\n // sort out events\n _defer(_unbindOpenPointer);\n _defer(_bindDocKey);\n _defer(_bindDocClick);\n _defer(_bindClosePointer);\n // reset scroll position\n panel.scrollTop = 0;\n // add active class\n panel.classList.add(activeClass);\n }\n function _hidePanel (panel = currPanel, returnfocus = true) {\n // add aria-hidden, remove focus\n panel.setAttribute('aria-hidden', true);\n panel.removeAttribute('tabindex');\n panel.blur();\n // set visibility to override any previous set style\n panel.style.visibility = 'hidden';\n // sort out events\n _unbindClosePointer(panel);\n _unbindDocKey();\n _unbindDocClick();\n _bindOpenPointer(panel);\n // remove active class\n panel.classList.remove(activeClass);\n // return focus to button that opened the panel and reset the reference\n if (returnfocus) {\n currButtonOpen.focus();\n currButtonOpen = null;\n }\n }\n function destroy () {\n panels.forEach((panel) => {\n // remove attributes\n _removeA11y(panel);\n // unbind local events\n _unbindOpenPointer(panel);\n _unbindClosePointer(panel);\n // remove class\n panel.classList.remove(readyClass);\n panel.classList.remove(activeClass);\n panel.style.visibility = '';\n });\n // unbind global events\n _unbindDocClick();\n _unbindDocKey();\n // reset temp references\n currButtonOpen = null;\n currPanel = null;\n }\n\n\n // EVENTS\n function _eventOpenPointer (e) {\n // get panel\n let panelId = e.currentTarget.getAttribute('aria-controls');\n let panel = doc.getElementById(panelId);\n // hide any open panels\n if (currPanel) _hidePanel(currPanel, false);\n // save temp panel/button\n currButtonOpen = e.currentTarget;\n currPanel = panel;\n // show\n _showPanel(panel);\n }\n function _eventClosePointer () {\n _hidePanel();\n }\n function _eventDocClick (e) {\n // check if target is panel or child of\n let isPanel = e.target === currPanel;\n let isPanelChild = _closest(e.target, selector);\n if (!isPanel && !isPanelChild) _hidePanel();\n }\n function _eventDocKey (e) {\n // esc key\n if (e.keyCode === 27) _hidePanel();\n }\n\n\n // BIND EVENTS\n function _bindOpenPointer (panel) {\n const openButtons = _q(`${openSelector}[aria-controls=\"${_getPanelId(panel)}\"]`); // is this selector totally crazy?\n openButtons.forEach((button) => button.addEventListener('click', _eventOpenPointer));\n }\n function _bindClosePointer (panel = currPanel) {\n var closeButton = _q(closeSelector, panel)[0];\n closeButton.addEventListener('click', _eventClosePointer);\n }\n function _bindDocClick () {\n doc.addEventListener('click', _eventDocClick);\n }\n function _bindDocKey () {\n doc.addEventListener('keydown', _eventDocKey);\n }\n\n\n // UNBIND EVENTS\n function _unbindOpenPointer (panel = currPanel) {\n const openButtons = _q(`${openSelector}[aria-controls=\"${_getPanelId(panel)}\"]`); // yep its totally crazy\n openButtons.forEach((button) => button.removeEventListener('click', _eventOpenPointer));\n }\n function _unbindClosePointer (panel = currPanel) {\n var closeButton = _q(closeSelector, panel)[0];\n closeButton.removeEventListener('click', _eventClosePointer);\n }\n function _unbindDocClick () {\n doc.removeEventListener('click', _eventDocClick);\n }\n function _unbindDocKey () {\n doc.removeEventListener('keydown', _eventDocKey);\n }\n\n\n // INIT\n function init () {\n if (!panels) return;\n // loop through each offcanvas element\n panels.forEach((panel) => {\n _addA11y(panel);\n _bindOpenPointer(panel);\n panel.classList.add(readyClass);\n });\n }\n init();\n\n\n // REVEAL API\n return {\n init,\n destroy\n }\n}\n\n\n// module exports\nexport default Froffcanvas;\n\n\n\n// WEBPACK FOOTER //\n// ./~/fr-offcanvas/offcanvas.js","import $ from 'jquery'\n\n/*\n * Randomize order of children in container (.js-randomize)\n */\n$(() => {\n const CONTAINER_SELECTOR = '.js-randomize'\n const EXCLUDE_SELECTOR = '.js-randomize-exclude'\n\n function shuffle(o) {\n for (let j, x, i = o.length; i; j = parseInt(Math.random() * i),\n x = o[--i], o[i] = o[j], o[j] = x);\n return o\n }\n\n $(CONTAINER_SELECTOR).each((i, container) => {\n let $container = $(container)\n $container.html(shuffle($container.children().not(EXCLUDE_SELECTOR).get()))\n })\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/random/index.js","import $ from 'jquery'\nimport debounce from 'throttle-debounce/throttle'\n\nconst threshold = 100\n\nconst _toggleScrolltop = () => {\n ($(window).scrollTop() > threshold) ?\n $('.js-scrollTop').show() :\n $('.js-scrollTop').hide()\n}\n\n$(window).scroll(debounce(500, _toggleScrolltop))\n$(document).ready(_toggleScrolltop)\n\nexport default {\n threshold\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/scrolltop/index.js","import Frbypasslinks from 'fr-bypasslinks'\n\n/* eslint-disable no-unused-vars */\n\nimport stylesheet from 'fr-bypasslinks/bypasslinks.css'\n\n/* eslint-enable */\n\nconst bypassLinks = Frbypasslinks({\n selector: '.js-fr-bypasslinks'\n})\n\nexport default { bypassLinks, Frbypasslinks }\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/skiplinks/index.js","'use strict';\n\n/**\n * @param {object} options Object containing configuration overrides\n */\nconst Frbypasslinks = function({\n\t\tselector: selector = '.js-fr-bypasslinks'\n\t} = {}) {\n\n\n\t//\tCONSTANTS\n\tconst doc = document;\n\tconst _q = (el, ctx = doc) => [].slice.call(ctx.querySelectorAll(el));\n\n\n\t//\tSUPPORTS\n\tif (!('querySelector' in doc) || !('addEventListener' in window)) return;\n\n\n\t//\tSETUP\n\t// get bypass links NodeList\n\tconst container = _q(selector)[0];\n\n\t//\tTEMP\n\tlet currTarget = null;\n\n\n\t//\tACTIONS\n\tfunction _addFocusability (link) {\n\t\t//\tget target element\n\t\tlet id = link.getAttribute('href').slice(1);\n\t\tlet target = doc.getElementById(id);\n\t\t//\tset tabindex to allow focus\n\t\tif (target) target.setAttribute('tabindex', -1);\n\t}\n\tfunction _removeFocusability (link) {\n\t\t//\tget target element\n\t\tlet id = link.getAttribute('href').slice(1);\n\t\tlet target = doc.getElementById(id);\n\t\t//\tremove ability to focus (stops user highlighting element on click)\n\t\tif (target) target.removeAttribute('tabindex');\n\t}\n\tfunction destroy () {\n\t\t//\tloop through each bypass link and remove event bindings\n\t\t_q('a', container).forEach(link => {\n\t\t\t_unbindPointerClick(link)\n\t\t\t_addFocusability(link);\n\t\t});\n\t\tif (currTarget) _unbindTargetBlur(currTarget);\n\t}\n\n\n\t//\tEVENTS\n\tfunction _eventPointerClick (e) {\n\t\t//\tget target element\n\t\tlet id = e.target.getAttribute('href').slice(1);\n\t\tlet target = doc.getElementById(id);\n\n\t\t// don't try to apply relevant atts/focus if target isn't present\n\t\tif (!target) return;\n\t\t//\tset tabindex to allow focus\n\t\ttarget.setAttribute('tabindex', -1);\n\t\ttarget.focus();\n\t\t//\tsave target reference\n\t\tcurrTarget = target;\n\t\t//\tbind blur event on target\n\t\t_bindTargetBlur(target);\n\t}\n\tfunction _eventTargetBlur (e) {\n\t\t//\tremove ability to focus (stops user highlighting element on click)\n\t\te.target.removeAttribute('tabindex');\n\t\t//\tremove target reference\n\t\tcurrTarget = null;\n\t\t//\tunbind blur event\n\t\t_unbindTargetBlur(e.target);\n\t}\n\n\n\t//\tBIND EVENTS\n\tfunction _bindPointerClick (link) {\n\t\t//\tbind interaction event\n\t\tlink.addEventListener('click', _eventPointerClick);\n\t}\n\tfunction _bindTargetBlur (target) {\n\t\t//\tbind blur event on target element\n\t\ttarget.addEventListener('blur', _eventTargetBlur);\n\t}\n\n\n\t//\tUNBIND EVENTS\n\tfunction _unbindPointerClick (link) {\n\t\t//\tunbind interaction event\n\t\tlink.removeEventListener('click', _eventPointerClick);\n\t}\n\tfunction _unbindTargetBlur (target) {\n\t\t//\tunbind blur event on target element\n\t\ttarget.removeEventListener('blur', _eventTargetBlur);\n\t}\n\n\n\t//\tINIT\n\tfunction init () {\n\t\t//\tdetect if bypass links exist in the document\n\t\tif (!container) return;\n\t\t//\tloop through each bypass link\n\t\t_q('a', container).forEach(link => {\n\t\t\t_bindPointerClick(link);\n\t\t\t_removeFocusability(link);\n\t\t});\n\t}\n\tinit();\n\n\n\t// REVEAL API\n\treturn {\n\t\tinit,\n\t\tdestroy\n\t}\n}\n\n\n// module exports\nexport default Frbypasslinks;\n\n\n// WEBPACK FOOTER //\n// ./~/fr-bypasslinks/bypasslinks.js","import Frtooltip from 'fr-tooltip'\n\n/* eslint-disable no-unused-vars */\n\nimport stylesheet from 'fr-tooltip/tooltip.css'\n\n/* eslint-enable */\n\nconst opts = {\n // String - Container selector, hook for JS init() method\n selector: '.js-fr-tooltip',\n\n // String - Selector to define the tooltip element\n tooltipSelector: '.js-fr-tooltip-tooltip',\n\n // String - Selector to define the toggle element controlling the tooltip\n toggleSelector: '.js-fr-tooltip-toggle',\n\n // String - Prefix for the id applied to each tooltip as a reference for the toggle\n tooltipIdPrefix: 'tooltip',\n\n // String - Class name that will be added to the selector when the component has been initialised\n readyClass: 'fr-tooltip--is-ready'\n}\n\nconst tooltip = Frtooltip(opts)\n\nexport default {\n tooltip,\n Frtooltip,\n opts\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/tooltip/index.js","'use strict';\n\n// Polyfill matches as per https://github.com/jonathantneal/closest\nElement.prototype.matches = Element.prototype.matches ||\n\t\t\t\t\t\t\tElement.prototype.mozMatchesSelector ||\n\t\t\t\t\t\t\tElement.prototype.msMatchesSelector ||\n\t\t\t\t\t\t\tElement.prototype.oMatchesSelector ||\n\t\t\t\t\t\t\tElement.prototype.webkitMatchesSelector;\n\n/**\n * @param {object} options Object containing configuration overrides\n */\nconst Frtooltip = function ({\n\t\tselector: selector = '.js-fr-tooltip',\n\t\ttooltipSelector: tooltipSelector = '.js-fr-tooltip-tooltip',\n\t\ttoggleSelector: toggleSelector = '.js-fr-tooltip-toggle',\n\t\ttooltipIdPrefix: tooltipIdPrefix = 'tooltip',\n\t\treadyClass: readyClass = 'fr-tooltip--is-ready'\n\t} = {}) {\n\n\n\t// CONSTANTS\n\tconst doc = document;\n\tconst docEl = doc.documentElement;\n\tconst _q = (el, ctx = doc) => [].slice.call(ctx.querySelectorAll(el));\n\n\n\t// SUPPORTS\n\tif (!('querySelector' in doc) || !('addEventListener' in window) || !docEl.classList) return;\n\n\n\t// SETUP\n\tlet tooltipContainers = _q(selector);\n\n\t//\tTEMP\n\tlet currTooltip = null;\n\n\n\t//\tUTILS\n\tfunction _defer (fn) {\n\t\t//\twrapped in setTimeout to delay binding until previous rendering has completed\n\t\tif (typeof fn === 'function') setTimeout(fn, 0);\n\t}\n\tfunction _closest (el, selector) {\n\t\twhile (el) {\n\t\t\tif (el.matches(selector)) break;\n\t\t\tel = el.parentElement;\n\t\t}\n\t\treturn el;\n\t}\n\n\n\t//\tA11Y\n\tfunction _addA11y (container, i) {\n\t\t//\tget relative elements\n\t\tlet toggle = _q(toggleSelector, container)[0];\n\t\tlet tooltip = _q(tooltipSelector, container)[0];\n\t\t//\tcreate new button and replace toggle\n\t\tvar button = doc.createElement('button');\n\t\tbutton.setAttribute('class', toggle.getAttribute('class'));\n\t\tbutton.setAttribute('aria-expanded', 'false');\n\t\tbutton.setAttribute('aria-describedby', '');\n\t\tbutton.textContent = toggle.textContent;\n\t\tcontainer.replaceChild(button, toggle);\n\t\t//\tadd tooltip attributes\n\t\ttooltip.setAttribute('role', 'tooltip');\n\t\ttooltip.setAttribute('id', tooltipIdPrefix + '-' + i);\n\t\ttooltip.setAttribute('aria-hidden', 'true');\n\t\ttooltip.setAttribute('aria-live', 'polite');\n\t}\n\tfunction _removeA11y (container) {\n\t\t//\tget relative elements\n\t\tlet toggle = _q(toggleSelector, container)[0];\n\t\tlet tooltip = _q(tooltipSelector, container)[0];\n\t\t//\tcreate new span and replace toggle\n\t\tvar span = doc.createElement('span');\n\t\tspan.setAttribute('class', toggle.getAttribute('class'));\n\t\tspan.textContent = toggle.textContent;\n\t\tcontainer.replaceChild(span, toggle);\n\t\t//\tremove tooltip attributes\n\t\ttooltip.removeAttribute('role');\n\t\ttooltip.removeAttribute('id');\n\t\ttooltip.removeAttribute('aria-hidden');\n\t\ttooltip.removeAttribute('aria-live');\n\t}\n\n\n\t// ACTIONS\n\tfunction _showTooltip (toggle, tooltip) {\n\t\t//\tassign describedby matching tooltip reference\n\t\tlet tooltipId = tooltip.getAttribute('id');\n\t\ttoggle.setAttribute('aria-describedby', tooltipId);\n\t\t//\tset visible state\n\t\ttoggle.setAttribute('aria-expanded', 'true');\n\t\ttooltip.setAttribute('aria-hidden', 'false');\n\t\t//\tstore temp reference to tooltip\n\t\tcurrTooltip = tooltip;\n\t\t//\tbind doc close events\n\t\t_defer(_bindDocClick);\n\t\t_defer(_bindDocKey);\n\t}\n\tfunction _hideTooltip (toggle, tooltip) {\n\t\t//\tremove tooltip reference\n\t\ttoggle.setAttribute('aria-describedby', '');\n\t\t//\tset visible state\n\t\ttoggle.setAttribute('aria-expanded', 'false');\n\t\ttooltip.setAttribute('aria-hidden', 'true');\n\t\t//\tremove tooltip temp reference\n\t\tcurrTooltip = null;\n\t\t//\tunbind doc close events\n\t\t_unbindDocClick();\n\t\t_unbindDocKey();\n\t}\n\tfunction destroy () {\n\t\ttooltipContainers.forEach((container, i) => {\n\t\t\t_removeA11y(container, i);\n\t\t\t_unbindToggleEvents(container);\n\t\t\tcontainer.classList.remove(readyClass);\n\t\t});\n\t\t//\treset temp references\n\t\tcurrTooltip = null;\n\t\t//\tunbind global events\n\t\t_unbindDocClick();\n\t\t_unbindDocKey();\n\t}\n\n\n\t// EVENTS\n\tfunction _eventTogglePointer (e) {\n\t\t//\tclose any open tooltips\n\t\tif (currTooltip) _hideTooltip(currTooltip.previousElementSibling, currTooltip);\n\t\t//\tget relevant tooltip elements\n\t\tlet toggle = e.target;\n\t\tlet tooltip = toggle.nextElementSibling;\n\t\t//\tshow or hide if toggle is 'expanded'\n\t\tif (toggle.getAttribute('aria-expanded') === 'false') {\n\t\t\t_showTooltip(toggle, tooltip);\n\t\t} else {\n\t\t\t_hideTooltip(toggle, tooltip);\n\t\t}\n\t}\n\tfunction _eventTogglePointerLeave () {\n\t\tif (currTooltip) _hideTooltip(currTooltip.previousElementSibling, currTooltip);\n\t}\n\tfunction _eventDocClick (e) {\n\t\t//\tcheck if target is panel or child of\n\t\tlet isTooltip = e.target === currTooltip;\n\t\tlet isTooltipchild = _closest(e.target, tooltipSelector);\n\t\tif (!isTooltip && !isTooltipchild) _hideTooltip(currTooltip.previousElementSibling, currTooltip);\n\t}\n\tfunction _eventDocKey (e) {\n\t\t//\tesc key\n\t\tif (e.keyCode === 27) _hideTooltip(currTooltip.previousElementSibling, currTooltip);\n\t}\n\n\n\t// BIND EVENTS\n\tfunction _bindToggleEvents (container) {\n\t\tconst toggle = _q(toggleSelector, container)[0];\n\t\ttoggle.addEventListener('click', _eventTogglePointer);\n\t\ttoggle.addEventListener('mouseenter', _eventTogglePointer);\n\t\ttoggle.addEventListener('mouseleave', _eventTogglePointerLeave);\n\t}\n\tfunction _bindDocClick () {\n\t\tdoc.addEventListener('click', _eventDocClick);\n\t\tdoc.addEventListener('touchstart', _eventDocClick);\n\t}\n\tfunction _bindDocKey () {\n\t\tdoc.addEventListener('keydown', _eventDocKey);\n\t}\n\n\n\t//\tUNBIND EVENTS\n\tfunction _unbindToggleEvents (container) {\n\t\tconst toggle = _q(toggleSelector, container)[0];\n\t\ttoggle.removeEventListener('click', _eventTogglePointer);\n\t\ttoggle.removeEventListener('mouseenter', _eventTogglePointer);\n\t\ttoggle.removeEventListener('mouseleave', _eventTogglePointerLeave);\n\t}\n\tfunction _unbindDocClick () {\n\t\tdoc.removeEventListener('click', _eventDocClick);\n\t\tdoc.removeEventListener('touchstart', _eventDocClick);\n\t}\n\tfunction _unbindDocKey () {\n\t\tdoc.removeEventListener('keydown', _eventDocKey);\n\t}\n\n\n\t// INIT\n\tfunction init () {\n\t\tif (!tooltipContainers) return;\n\t\t//\tloop through each tooltip element\n\t\ttooltipContainers.forEach((container, i) => {\n\t\t\t_addA11y(container, i);\n\t\t\t_bindToggleEvents(container);\n\t\t\tcontainer.classList.add(readyClass);\n\t\t});\n\t}\n\tinit();\n\n\n\t// REVEAL API\n\treturn {\n\t\tinit,\n\t\tdestroy\n\t}\n}\n\n\n// module exports\nexport default Frtooltip;\n\n\n// WEBPACK FOOTER //\n// ./~/fr-tooltip/tooltip.js","import $ from 'jquery'\n\n/*\n *\tTODO:\n *\t\t- repack as a frend _component and CSS\n *\t\t- refactor without jQuery\n */\n\n/*\n * Porting of http://www.oaa-accessibility.org/examplep/treeview1/\n */\nconst Treeview = function({\n selector: selector = '.js-Treeview',\n classFocused: classFocused = 'hasFocus',\n classParent: classParent = 'Treeview-parent',\n classMenuHandler: classMenuHandler = 'js-Treeview-handler',\n styleMenuHandler: styleMenuHandler = 'Treeview-handler--default',\n styleMenuHandlerStandalone: styleMenuHandlerStandalone = 'Treeview-handler--standalone',\n ariaLabelHandler: ariaLabelHandler = 'expand',\n multiselectable: multiselectable = true,\n animationMs: animationMs = 100,\n} = {}) {\n\n const keys = {\n tab: 9,\n enter: 13,\n space: 32,\n pageup: 33,\n pagedown: 34,\n end: 35,\n home: 36,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n asterisk: 106\n }\n\n function _collapseAll(treeview) {\n treeview.$parents.each(function() {\n if ($(this).attr('aria-expanded') == 'false') {\n $(this).children('ul').attr('aria-hidden', 'true')\n }\n })\n treeview.$visibleItems = treeview.$el.find('li:visible')\n }\n\n function _expandGroup(treeview, $item) {\n let $group = $item.children('ul')\n $group.slideDown(animationMs, () => {\n $group.attr('aria-hidden', 'false')\n $item.attr('aria-expanded', 'true')\n treeview.$visibleItems = treeview.$el.find('li:visible')\n })\n }\n\n function _collapseGroup(treeview, $item) {\n let $group = $item.children('ul')\n $group.slideUp(animationMs, () => {\n $group.attr('aria-hidden', 'true')\n $item.attr('aria-expanded', 'false')\n treeview.$visibleItems = treeview.$el.find('li:visible')\n })\n }\n\n function _collapseSiblings(treeview, $item) {\n $item.closest('ul')\n .find('> .' + classParent)\n .not($item)\n .each((i, el) => {\n _collapseGroup(treeview, $(el))\n })\n }\n\n function _toggleGroup(treeview, $item) {\n if (!multiselectable) {\n _collapseSiblings(treeview, $item)\n }\n if ($item.attr('aria-expanded') == 'true') {\n _collapseGroup(treeview, $item)\n } else {\n _expandGroup(treeview, $item)\n }\n }\n\n function _updateStyling(treeview, $item) {\n treeview.$items.removeClass(classFocused).attr('tabindex', '-1')\n $item.addClass(classFocused).attr('tabindex', '0')\n }\n\n function _handleKeyDown(treeview, $item, e) {\n let curNdx = treeview.$visibleItems.index($item)\n\n if ((e.altKey || e.ctrlKey) ||\n (e.shiftKey && e.keyCode != keys.tab)) {\n return true\n }\n\n // if (!$(e.currentTarget).is('.' + classMenuHandler)) {\n // return true\n // }\n\n switch (e.keyCode) {\n case keys.tab:\n {\n treeview.$activeItem = null\n $item.removeClass(classFocused)\n return true\n }\n\n case keys.home:\n {\n treeview.$activeItem = treeview.$parents.first()\n treeview.$activeItem.find(':focusable:first').focus()\n e.stopPropagation()\n return false\n }\n\n case keys.end:\n {\n treeview.$activeItem = treeview.$visibleItems.last()\n treeview.$activeItem.find(':focusable:first').focus()\n e.stopPropagation()\n return false\n }\n\n case keys.enter:\n case keys.space:\n {\n if ($(e.currentTarget).is('.' + classMenuHandler)) {\n _toggleGroup(treeview, $item)\n e.stopPropagation()\n return false\n }\n return true\n }\n\n case keys.left:\n {\n if ($item.is('.' + classParent) && $item.attr('aria-expanded') == 'true') {\n _collapseGroup(treeview, $item)\n } else {\n let $itemUL = $item.parent()\n let $itemParent = $itemUL.parent()\n treeview.$activeItem = $itemParent\n treeview.$activeItem.find(':focusable:first').focus()\n }\n e.stopPropagation()\n return false\n }\n\n case keys.right:\n {\n if (!$item.is('.' + classParent)) {\n // do nothing\n } else if ($item.attr('aria-expanded') == 'false') {\n _expandGroup(treeview, $item)\n } else {\n treeview.$activeItem = $item.children('ul').children('li').first()\n treeview.$activeItem.find(':focusable:first').focus()\n }\n e.stopPropagation()\n return false\n }\n\n case keys.up:\n {\n if (curNdx > 0) {\n let $prev = treeview.$visibleItems.eq(curNdx - 1)\n treeview.$activeItem = $prev\n $prev.find(':focusable:first').focus()\n }\n e.stopPropagation()\n return false\n }\n\n case keys.down:\n {\n if (curNdx < treeview.$visibleItems.length - 1) {\n let $next = treeview.$visibleItems.eq(curNdx + 1)\n treeview.$activeItem = $next\n $next.find(':focusable:first').focus()\n }\n e.stopPropagation()\n return false\n }\n\n case keys.asterisk:\n {\n treeview.$parents.each(function() {\n _expandGroup(treeview, $(this))\n })\n e.stopPropagation()\n return false\n }\n\n }\n return true\n }\n\n function _handleKeyPress(treeview, $item, e) {\n if (e.altKey || e.ctrlKey || e.shiftKey) {\n // do nothing\n return true\n }\n\n switch (e.keyCode) {\n case keys.tab:\n {\n return true\n }\n case keys.enter:\n case keys.home:\n case keys.end:\n case keys.left:\n case keys.right:\n case keys.up:\n case keys.down:\n {\n e.stopPropagation()\n return false\n }\n default:\n {\n let chr = String.fromCharCode(e.which)\n let bMatch = false\n let itemNdx = treeview.$visibleItems.index($item)\n let itemCnt = treeview.$visibleItems.length\n let curNdx = itemNdx + 1\n\n // check if the active item was the last one on the list\n if (curNdx == itemCnt) {\n curNdx = 0\n }\n\n // Iterate through the menu items (starting from the current item and wrapping) until a match is found\n // or the loop returns to the current menu item\n while (curNdx != itemNdx) {\n\n let $curItem = treeview.$visibleItems.eq(curNdx)\n let titleChr = $curItem.text().charAt(0)\n\n if ($curItem.is('.' + classParent)) {\n titleChr = $curItem.find('span').text().charAt(0)\n }\n\n if (titleChr.toLowerCase() == chr) {\n bMatch = true\n break\n }\n\n curNdx = curNdx + 1\n\n if (curNdx == itemCnt) {\n // reached the end of the list, start again at the beginning\n curNdx = 0\n }\n }\n\n if (bMatch == true) {\n treeview.$activeItem = treeview.$visibleItems.eq(curNdx)\n treeview.$activeItem.find(':focusable:first').focus()\n }\n\n e.stopPropagation()\n return false\n }\n }\n\n return true\n }\n\n function _handleClick(treeview, $item, e) {\n if (e.altKey || e.ctrlKey || e.shiftKey) {\n // do nothing\n return true\n }\n\n // closest('li')\n const $parent = $item.closest('li')\n\n treeview.$activeItem = $parent\n _updateStyling(treeview, $parent)\n _toggleGroup(treeview, $parent)\n\n e.stopPropagation()\n return false\n }\n\n function _bindEvents(treeview) {\n treeview.$handlers.click(function(e) {\n return _handleClick(treeview, $(this), e)\n })\n\n treeview.$items.keydown(function(e) {\n return _handleKeyDown(treeview, $(this), e)\n })\n\n treeview.$items.keypress(function(e) {\n return _handleKeyPress(treeview, $(this), e)\n })\n\n treeview.$handlers.keydown(function(e) {\n return _handleKeyDown(treeview, $(this).closest('li'), e)\n })\n\n treeview.$handlers.keypress(function(e) {\n return _handleKeyPress(treeview, $(this).closest('li'), e)\n })\n\n $(document).click(function() {\n if (treeview.$activeItem != null) {\n treeview.$activeItem.removeClass(classFocused)\n treeview.$activeItem = null\n }\n return true\n })\n }\n\n function destroy() {\n /* TODO */\n }\n\n function _addA11y($el) {\n $el.attr('role', 'tree')\n\n // Put role=\"treeitem\" on every LI\n // Put aria-expanded=\"false\" on every LI (if it has no aria-expanded attr)\n // Put tabindex=\"-1\" on every LI (if it's not the first one)\n // Put class= on every LI that contains an UL\n $el.find('li').each(function(i, li) {\n const $li = $(li)\n $li\n .attr('role', 'treeitem')\n // .attr('tabindex', (0 === i) ? '0' : '-1')\n // .find('a[href]').not('[href^=#]').attr('tabindex', 0)\n // .parent().attr('aria-label', function() { return $(this).text() })\n if ($li.find('ul').length !== 0) {\n\n $li.children('a').not('[href=#]')\n .append(``)\n\n $li.children(\"a[href='#']\")\n .addClass(classMenuHandler)\n .addClass(styleMenuHandler)\n .attr('aria-label', ariaLabelHandler)\n .attr('role', 'button')\n\n const containsExpandedLink =\n $li.find('[aria-expanded=true]').length > 0\n || $li.find('.is-current').length > 0\n\n if (!li.hasAttribute('aria-expanded') && !containsExpandedLink) {\n $li.attr('aria-expanded', 'false')\n }\n else if (containsExpandedLink) {\n $li.attr('aria-expanded', 'true')\n }\n $li.addClass(classParent)\n }\n })\n // Put role=\"group\" on every contained UL\n $el.find('ul').attr('role', 'group')\n }\n\n function init() {\n $(selector).each((_, treeviewContainer) => {\n const $el = $(treeviewContainer)\n _addA11y($el)\n let treeview = {\n $el: $el,\n $items: $el.find('li'),\n $parents: $el.find('.' + classParent),\n $handlers: $el.find('.' + classMenuHandler),\n $visibleItems: null,\n $activeItem: null\n }\n _collapseAll(treeview)\n _bindEvents(treeview)\n })\n }\n\n init()\n\n // REVEAL API\n return {\n init,\n destroy\n }\n\n}\n\nnew Treeview()\n\nexport default {\n Treeview\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/treeview/index.js","require('./console')\nrequire('./ehnance')\nrequire('./scrollto')\n\n\n\n// WEBPACK FOOTER //\n// ./src/scripts/index.js","// Avoid `console` errors in browsers that lack a console.\n(function() {\n var method\n var noop = function() {}\n var methods = [\n 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',\n 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',\n 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',\n 'timeStamp', 'trace', 'warn'\n ]\n var length = methods.length\n var console = (window.console = window.console || {})\n\n while (length--) {\n method = methods[length]\n\n // Only stub undefined methods.\n if (!console[method]) {\n console[method] = noop\n }\n }\n}())\n\n\n\n// WEBPACK FOOTER //\n// ./src/scripts/console.js","import $ from 'jquery'\n\n$(function() {\n $(document).bind('enhance', function() {\n $('body').addClass('enhanced')\n })\n $(document).trigger('enhance')\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/scripts/ehnance.js","import $ from 'jquery'\n\n$(document).ready(() => {\n const $header = $('header')\n $('.js-scrollTo').on('click', function() {\n const offset = $($.attr(this, 'href')).offset()\n $('html, body').animate({\n scrollTop: (offset ? offset.top : 0) -\n (($header.length && $header.css('position') === 'fixed') ? $header.height() : 0)\n }, 250)\n })\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/scripts/scrollto.js"],"sourceRoot":""}