{"version":3,"sources":["app.js"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","window","factory","define","amd","matchesSelector","matchesMethod","ElemProto","Element","prototype","matches","prefixes","method","elem","selector","2","global","this","EvEmitter","proto","on","eventName","listener","events","_events","listeners","indexOf","push","once","onceEvents","_onceEvents","off","index","splice","emitEvent","args","slice","onceListeners","apply","allOff","3","fizzyUIUtils","utils","extend","b","prop","modulo","num","div","arraySlice","Array","makeArray","obj","isArray","undefined","removeFrom","ary","getParent","parentNode","document","body","getQueryElement","querySelector","handleEvent","event","type","filterFindElements","elems","ffElems","forEach","HTMLElement","childElems","querySelectorAll","debounceMethod","_class","methodName","threshold","timeoutName","timeout","clearTimeout","arguments","_this","setTimeout","docReady","callback","readyState","addEventListener","toDashed","str","replace","match","$1","$2","toLowerCase","console","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","jQuery","options","attr","getAttribute","JSON","parse","error","className","instance","data","desandro-matches-selector","4","Flickity","insert","cells","_makeCells","len","fragment","createDocumentFragment","cell","appendChild","element","getCellsFragment","isAppend","slider","insertCellElement","insertBefore","endCells","_sizeCells","cellChange","append","prepend","remove","getCells","minCellIndex","Math","min","cellSizeChange","getCell","getSize","changedCellIndex","isPositioningSlider","prevSelectedElem","selectedElement","_positionCells","_getWrapShiftCells","setGallerySize","selectedIndex","getCellSlideIndex","slides","select","positionSliderAtSelected","./flickity","fizzy-ui-utils","5","animatePrototype","startAnimation","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","x","integratePhysics","positionSlider","settle","requestAnimationFrame","wrapAround","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","style","transform","firstSlide","positionX","target","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","position","percentPosition","round","size","innerWidth","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","cellShift","wrapShift","outerWidth","_unshiftCells","getFrictionFactor","applyForce","force","getRestingPosition","isDraggable","dragForce","dragX","selectedAttraction","6","Cell","parent","create","setAttribute","originSide","destroy","unselect","side","removeAttribute","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","width","cellAlign","sideOffset","adjustedX","classList","add","removeChild","get-size","7","Unidragger","defaults","draggable","dragThreshold","createMethods","_touchActionValue","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handles","viewport","bindHandles","unbindHandles","bindDrag","unbindDrag","pointerDown","pointer","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","activeElement","pointerDownBlur","pointerDownScroll","getScrollPosition","_pointerDownDefault","pointerDownPointer","pageX","pageY","_bindPostStartEvents","focusNodes","INPUT","TEXTAREA","SELECT","pageXOffset","y","pageYOffset","nodeName","focus","isTouchStart","isTouchPointer","pointerType","isFocusNode","preventDefault","hasDragStarted","moveVector","abs","pointerUp","isTouchScrolling","_dragPointerUp","pointerDone","removeEventListener","dragStart","dragStartPosition","pointerMove","_dragPointerMove","_dragMove","dragMove","previousDragX","direction","originBound","max","endBound","getLastSlide","dragMoveTime","Date","dragEnd","freeScroll","dragEndRestingSelect","restingX","dragEndBoostSelect","isDragSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","increment","minDistance","Infinity","condition","contain","dist","minDist","isWrapAround","slideIndex","slide","wrap","floor","delta","staticClick","clickedCell","getParentCell","cellElem","cellIndex","onscroll","scroll","scrollMoveX","scrollMoveY","_pointerDone","unidragger","8","Slide","_Flickity","getComputedStyle","moveElements","toElem","GUID","instances","queryElement","flickityGUID","option","$element","constructor","_create","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","resize","id","guid","createElement","_createSlider","watchCSS","activate","opts","isActive","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","cellSelector","positionCells","map","getLastCell","maxCellHeight","cellX","startCell","outerHeight","updateSlides","_containSlides","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","addCell","updateSelectedSlide","groupCells","number","parseInt","percentMatch","percent","_init","reposition","setCellAlign","cellAlignShorthands","center","left","right","shorthand","height","adaptiveHeight","gapX","_getGapCells","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","emitArgs","$event","jQEvent","Event","trigger","isWrap","isInstant","_wrapSelect","prevIndex","wrapIndex","backWrapDelta","forewardWrapDelta","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","initialIndex","queryCell","selectCell","value","getAdjacentCellElements","adjCount","cellElems","uiChange","childUIPointerDown","onresize","isDragging","content","deactivate","onkeydown","isNotFocused","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","preventScroll","scrollTo","removeData","bridget","setJQuery","jq","./animate","./cell","./slide","ev-emitter","9","./add-remove-cell","./drag","./lazyload","./page-dots","./player","./prev-next-button","10","LazyLoader","img","flickity","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","getCellLazyImages","src","srcset","onload","complete","onerror","11","Unipointer","PageDots","Object","holder","dots","handleClick","onClick","bind","setDots","bindStartEvent","unbindStartEvent","addDots","removeDots","count","newDots","dot","updateSelected","selectedDot","onTap","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","unipointer","12","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","hidden","tick","time","autoPlay","clear","stop","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","13","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","path","pathMovements","shape","x0","x1","y1","x2","y2","x3","getArrowMovements","arrowShape","onclick","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","14","isOriginLeft","lastCell","lastMargin","15","getStyleSize","parseFloat","isNaN","logError","message","measurements","measurementsLength","getStyle","isBoxSizeOuter","isSetup","padding","borderStyle","borderWidth","boxSizing","documentElement","setup","nodeType","display","innerHeight","getZeroSize","offsetWidth","offsetHeight","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","16","root","Headroom","features","rAF","webkitRequestAnimationFrame","mozRequestAnimationFrame","Debouncer","ticking","object","key","result","replacement","lastKnownScrollY","tolerance","down","up","classes","offset","scroller","initialised","onPin","onUnpin","onTop","onNotTop","onBottom","onNotBottom","requestTick","rafCallback","init","cutsTheMustard","debouncer","initial","attachEvent","hasOwnProperty","getScrollY","unpin","contains","pinned","unpinned","pin","top","notTop","bottom","notBottom","scrollTop","getViewportHeight","clientHeight","getElementPhysicalHeight","elm","getScrollerPhysicalHeight","getDocumentHeight","scrollHeight","getElementHeight","getScrollerHeight","isOutOfBounds","currentScrollY","pastTop","pastBottom","toleranceExceeded","shouldUnpin","scrollingDown","pastOffset","shouldPin","scrollingUp","scrollDirection","17","_bindHandles","isAdd","bindMethod","touchAction","handle","_bindStartEvent","PointerEvent","cursorNodes","OPTION","clickTypes","radio","checkbox","button","submit","image","file","isCursorNode","isClickType","isOkay","_pointerReset","focused","blur","_dragStart","_dragEnd","_staticClick","isPreventingClicks","isIgnoringMouseUp","getPointerPoint","18","startEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointerId","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","onmouseup","_pointerUp","onpointerup","ontouchend","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","19","./app/about","./app/article-detail","./app/articles-landing","./app/capabilities","./app/capability-detail","./app/careers","./app/contact-us","./app/experiences","./app/general-content","./app/global-solutions","./app/homepage","./app/lazy-load","./app/location-detail","./app/locations","./app/perspectives-detail","./app/professional-detail","./app/professionals","./app/prototypes","./app/site-search-results","./app/topic-detail","./app/util-helper","./app/variables","./lg-home","20","getElementById","./angled-polygon","21","Accordions","$accordion","optionsLogic","$accordionModule","$accordionSlides","$accordionNodes","exclusive","duration","triggerClass","accordionContentClass","parentClass","activeClass","accordionTitleLink","expandedByDefault","bindEvents","find","openExpandedByDefault","collapseAll","removeClass","each","el","$","end","sendToAccordionTitleUrl","$accordionTitleElement","titleUrl","location","href","collapseAccordion","$trigger","_self","$collapseContent","sectionHeight","css","ariaLabel","expandAccordion","addClass","toggleVisibility","$parentNode","closest","hasClass","ev","stopPropagation","22","svgAnglePadding","horizontalOffsetTriangle","polygonBlackOffsetY","polygonRedOffsetX","advancedFilters","polygonImgBlack","polygonImgRed","svgPolygonPoints","svgPolygonPointsRed","cachedSvgPolygonPoints","hasAttribute","cachedSvgPolygonPointsRed","domContent","isMobile","imageAspectRatio","computeDegreesToRadians","degree","PI","composePolygonPoints","polygonSvg","dimensions","pointRightEdge","pointMiddleEdgeX","pointMiddleEdge","pointLeftEdge","resizeDesktop","pixelVal","contentHeight","getBoundingClientRect","svgWidth","svgHeight","ceil","sin","setPolygonSizeBlack","polygonGroup","setPolygonSizeRed","newDimensions","setImageDimensions","resizeSVGHero","23","animationSearchHelpers","pageConfig","$appliedFilters","elementStates","slideToSearchResults","searchForm","filtersOffset","searchFormID","applySelectedFilter","filterName","$htmlFilter","log","prependTo","focusOnSearchResults","searchResultsContent","searchResultsID","cacheElements","resultsDOM","pageConfiguration","showLoadingScreen","$loadingScreen","hideLoadingScreen","transitionFromDefaultToResults","defaultContent","searchPromoPanelID","fadeOut","aria-hidden","showSearchResults","resultsBody","fadeIn","transitionToSearchDefault","keywordEntrySectionOffset","siteHeaderHeight","defaultContentID","slideUp","./variables","24","ReadMore","articleDetail","readMoreNode","stickyShare","./read-more","./sticky-share","25","pageOptions","impactfulCTA","selectDropdowns","articlesLanding","pageName","$dropdowns","$selectEl","$selectedItem","text","./animation-search-helpers","./impactful-cta","./search-landing-filters","./select-dropdown","26","$youtubeVideos","currentVideoId","firstScriptTag","tag","$playerContainer","$closeButton","$restrictedFocusElements","activePlayerClass","firstLoad","$initialVideoHighlight","first","openVideo","playVideo","displayVideoContainer","closeVideo","removeAttr","animatedSections","section","$section","pauseTransitionClass","pauseVideo","getElementsByTagName","onYouTubeIframeAPIReady","YT","videoId","frameborder","playerVars","autoplay","showinfo","onReady","onStateChange","youtubeId","currentTarget","dataset","loadVideoById","27","$capabilitiesCompact","$viewMoreToggle","capabilitiesCompact","isChildrenExpanded","expandChildren","slideDown","collapseChildren","toggleView","initScrollToggle","$wrapper","28","Scrollspy","capabilities","alphaSearch","ready","$credentialsAccordion","./accordion","./scrollspy","29","Accordion","SliderCarousel","capabilityDetail","carouselNode","$focusAreas","BuildVideoPlayer","./build-video-player","./scroll-on-load","./slider-carousel","30","searchFiltersForm","focusableSelector","CareersGCFilters","handleContentDisplay","initClearAllEvent","$clearAll","advancedSearchInit","toggleClass","initSubmitEvent","setDropdownAccessibility","matchMedia","31","$accordionBuckets","$readMore","./careers-gc-filters","./sidenav","./vertical-corner","32","inquiryTypeShow","selectDropdown","$contactUsForm","$inquiryDropdown","$form","33","contactUs","./contact-us-form","34","dynamicTabs","windowResize","keys","directions","updateNavigation","clickedNavNode","$tabsNav","tabActiveClass","$tabButtons","aria-selected","tabindex","resetClasses","$activePanel","$tabs","transitionOutClass","beltWrapperClass","transitionInClass","panelActiveClass","transitionActivePanel","activePanelID","$beltWrapper","aria-expanded","transitionTiming","transitionPanel","showNextPanel","navNode","wasAutomatic","panelID","autoScrollNextPanel","$nextTab","currentTabIndex","tabCount","eq","clearIntervalOption","timeoutID","clearInterval","defaultOptions","autoScroll","navDirection","panelClass","contentClasses","navClass","navBtnClass","$panels","nextTab","autoscrollTimer","setInterval","35","experiences","36","generalContent","readMoreNodes","item","$accordions","globalPerspectives","perspectivesMenu","dynamicTabsLogic","mobileMenuInit","ToggleMenu","expandableMenu","showOptions","navOptionsClass","selectedOptionClass","updateMobileLabel","./dynamic-tabs","./toggle-menu","38","toStr","isCallable","maxSafeInteger","toLength","w","from","toString","fn","pow","Number","isFinite","toInteger","arrayLike","items","TypeError","T","mapFn","kValue","A","k","URLSearchParams","searchString","self","get","name","results","RegExp","exec","decodeURI","searchParams","$el","$dropdownList","$dropdownItem","dropdownArray","$dropdownButton","$sections","toggleDropdown","activateSection","accordionId","activeSection","activeAccordion","goToSection","searchForAccordion","search","globalSolutions","$globalAccordion","GlobalSolutionsProducts","./global-solutions-products","40","$heroIntro","$scrollBtn","globalVars","heroIntro","headerHeight","maxLengthComponent","maxLength","substring","trim","41","homepage","./global-perspectives","./hero-intro","./newsletter-carousel","42","$impactfulCTA","setupHoverFeature","isIpad","isIphone","43","lazyLoadImages","lazyLoadBackgroundImages","$images","44","locationMap","locationDetail","office","serializedOffice","mapNode","./location-map","45","LocationFilters","$keywordSearch","$currentLocation","util","setupHandlers","keypress","handleFindNearestOfficeSearch","click","handleFindNearestOfficeCurrentLocationClick","resetMap","searchQuery","val","geocode","currentLocation","offices","getNearestOffice","closestOffice","populateSearchWithCurrentLocation","showOffice","getCurrentLocation","address","mapModule","$Map","$LocationMap","google","maps","setCenter","lat","lng","setZoom","./location-utilities","46","LocationMap","$node","$locationImage","$officeName","$address1","$address2","$address3","$address4","$phone","$fax","$searchInput","$getDirectionsButton","$currentLocationButton","selectedOffice","serializedOffices","reverseGeocode","markerImage","url","markers","infoWindows","marker","Marker","latLng","icon","currentOffice","format","infoWindow","InfoWindow","addListener","setContent","open","close","handleSearchForDirections","handleUseCurrentLocationClick","input","origin","destination","getDirections","formattedLocation","city","zip","country","phone","hide","fax","47","navigator","geolocation","getCurrentPosition","coords","latitude","longitude","geocoder","status","geometry","resolvedCoords","resolvedLocation","formatted_address","mindif","dif","PythagorasEquirectangular","lat1","lon1","lat2","lon2","Deg2Rad","cos","sqrt","deg","48","locations","./location-landing-filters","49","newsletterCarousel","tabLogic","50","perspectivesDetail","./reader-progress","51","professionalDetail","flexAreaLink","$label","lawyerHeader","getElementsByClassName","sectionHeader","labelText","textContent","getQueryString","ctrlKey","metaKey","String","fromCharCode","which","reloadWithQueryStringVars","print","./capabilities-compact","52","professionals","53","pushArray","toPush","defineProperty","predicate","list","thisArg","copy","array","stringify","54","$expandNode","$ReadMore","$contentCollapsed","labelCollapsed","labelExpanded","visibility","animationSpeed","scrollUpOnCollapse","expandContent","collapseContent","55","$readerProgress","$readerProgressBar","$progressBody","headerOffsets","magicController","sceneCollection","readerProgress","stickyMenuInit","ScrollMagic","Scene","triggerElement","triggerHook","setClassToggle","addTo","magicSceneInit","toFixed","56","scrollToSection","counter","scrollChecker","vueAppsLoaded","sectionOffset","57","$scrollspy","$menu","$menuItems","$navList","$navLinks","$scrollSections","$mobileToggle","nodeCollection","activeNavClass","mobileToggleClass","scrollspy","sectionName","$sectionModule","finalOffset","sectionId","updatedUrl","updateQueryString","history","pushState","updateNavStatus","addMagicSceneSection","navItem","moduleName","menuEventsInit","sectionID","onMobileBreakpointCrossed","populateNodeCollection","$sectionNode","$navNode","filter","hrefAttribute","mqList","58","SearchLandingFilters","initAlphaOptions","$this","handleKeywordInputs","59","updateFacadeText","initializeDropdowns","runCallback","selectLabel","$selectLabel","currentText","siblings","$selectDropdowns","60","$sideNav","$currentChildPage","initialized","setupDesktopLogic","setupMobileLogic","isChildPage","openParentAccordion","sideNav","61","62","$carousel","$Carousel","$dotsContainer","$slides","$container","dotsHtml","margin","adjustSlides","adjustDots","moveToSlide","empty","numDots","$dot","$dots","63","$stickyMenu","$stickyModule","stickyOffset","anchoredBottomOffset","pageOffset","setupWindowOffsets","initPageScroll","isStickyClass","isAnchoredBottomClass","rAFTicker","windowScrollLogic","requestTicker","64","toggleEl","classOptions","$toggleMenu","$expandableMenu","classNames","navOptions","updateToggleLabel","updateNavState","$navOption","toggleMenu","65","66","vueAppStates","relatedExperience","perspectivesNewsEvents","helperUtils","getDocDimen","winDimen","parseQueryString","split","reduce","ret","param","parts","decodeURIComponent","getQueryParams","field","string","uri","hash","substr","re","separator","queryStringVars","existingQueryVars","newQueryVars","newUrl","pair","queryStringVar","newQueryVar","lastTime","vendors","cancelAnimationFrame","currTime","getTime","timeToCall","67","setupValues","mqMobile","device","elements","$siteHeader","isMobileLandscape","isTabletMax","Controller","tableLanscape","changed","userAgent","callbacks","running","runCallbacks","addCallback","68","aroundCorner","$aroundCorner","$reel","$frame","$tileNodes","beltWidth","frameHeight","setupParallaxAnimation","updateParallaxValues","resizeControllerLogic","inViewPlatform","tweenOffset","setPin","setTween","$module","getPropertyValue","wheelDelta","currentScrollPosition","69","header","siteheader","navigation","is_nav_open","subnav_open","$siteSearchInput","query","landingPage","encodeURIComponent","$peopleSearchInput","peopleLanding","$capabilitiesSearchInput","capabilitiesLanding","headroom.js","70","herocarousel","hero_carousel","hero_carousel_cell_count","hero_button","autoplay_duration","hero_flkty","hero_paused","71","./header","./hero-carousel","./language-menu","./navigation","./quote-carousel","./region-carousel","72","language_menu","menu","menu_button","menu_links","menu_options","open_menu","close_menu","set_focus","73","nav_container","search_container","nav_secondary","toggle_nav","toggle_subnav","toggle_search","close_nav","close_active_subnavs","close_search","close_all","pause_hero_carousel","get_cookie_object","cookie","search_toggle_button","mobile_search_toggle_button","search_form","search_input","open_search","nav_toggle_button","open_nav","sub_nav_links","sub_nav_link","bind_links","event_binding","close_subnav","open_subnav","target_subnav","nextElementSibling","current_page","link","subnav","74","quotecarousel","quote_carousel","quote_carousel_cell_count","flkty","75","regioncarousel","region_carousel","region_carousel_cell_count"],"mappings":"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","file":"app.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x -= this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n var isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n if ( isResting ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i = 0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i = 0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n\n},{\"fizzy-ui-utils\":3}],6:[function(require,module,exports){\n// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size',\n ], function( getSize ) {\n return factory( window, getSize );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n this.element.style[ this.parent.originSide ] = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var sideOffset = this.parent.originSide === 'left' ? 1 : -1;\n\n var adjustedX = this.parent.options.percentPosition ?\n x * sideOffset * ( this.parent.size.innerWidth / this.size.width ) :\n x * sideOffset;\n\n this.element.style.transform = 'translateX(' +\n this.parent.getPositionValue( adjustedX ) + ')';\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} shift - 0, 1, or -1\n */\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n} ) );\n\n},{\"get-size\":15}],7:[function(require,module,exports){\n// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x %= this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return dist < minDist;\n };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n\n},{\"./flickity\":8,\"fizzy-ui-utils\":3,\"unidragger\":17}],8:[function(require,module,exports){\n// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate',\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n/* eslint-enable max-params */\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i = index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n } );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match( /^(\\d+)%$/ );\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n /* eslint-disable-next-line no-invalid-this */\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5,\n },\n left: {\n left: 0,\n right: 1,\n },\n right: {\n right: 0,\n left: 1,\n },\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i = 0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i = 0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match( /^[#.]?[\\d/]/ ) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility || isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus ...\n // #Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n } );\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n\n},{\"./animate\":5,\"./cell\":6,\"./slide\":14,\"ev-emitter\":2,\"fizzy-ui-utils\":3,\"get-size\":15}],9:[function(require,module,exports){\n/*!\n * Flickity v2.3.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n} )( window, function factory( Flickity ) {\n return Flickity;\n} );\n\n},{\"./add-remove-cell\":4,\"./drag\":7,\"./flickity\":8,\"./lazyload\":10,\"./page-dots\":11,\"./player\":12,\"./prev-next-button\":13}],10:[function(require,module,exports){\n// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n } );\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n\n},{\"./flickity\":8,\"fizzy-ui-utils\":3}],11:[function(require,module,exports){\n// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n\n},{\"./flickity\":8,\"fizzy-ui-utils\":3,\"unipointer\":18}],12:[function(require,module,exports){\n// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity',\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n\n},{\"./flickity\":8,\"ev-emitter\":2,\"fizzy-ui-utils\":3}],13:[function(require,module,exports){\n// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path' );\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n\n},{\"./flickity\":8,\"fizzy-ui-utils\":3,\"unipointer\":18}],14:[function(require,module,exports){\n// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n } );\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n } );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\nreturn Slide;\n\n} ) );\n\n},{}],15:[function(require,module,exports){\n/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n\n},{}],16:[function(require,module,exports){\n/*!\n * headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it\n * Copyright (c) 2017 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 \n for (var key in classes) {\n if(classes.hasOwnProperty(key)) {\n this.elem.classList.remove(classes[key]);\n }\n }\n \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},{}],17:[function(require,module,exports){\n/*!\n * Unidragger v2.4.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n\n},{\"unipointer\":18}],18:[function(require,module,exports){\n/*!\n * Unipointer v2.4.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n } else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n\n},{\"ev-emitter\":2}],19:[function(require,module,exports){\n'use strict';\n\n(function (window) {\n\n 'use strict';\n\n require('./app/prototypes');\n\n require('./app/variables');\n\n require('./app/util-helper');\n\n require('./app/homepage');\n\n require('./app/professionals');\n\n require('./app/professional-detail');\n\n require('./app/capabilities');\n\n require('./app/capability-detail');\n\n require('./app/experiences');\n\n require('./app/about');\n\n require('./app/general-content');\n\n require('./app/locations');\n\n require('./app/location-detail');\n\n require('./app/articles-landing');\n\n require('./app/article-detail');\n\n require('./app/site-search-results');\n\n require('./app/contact-us');\n\n require('./app/careers');\n\n require('./app/topic-detail');\n\n require('./lg-home');\n\n require('./app/lazy-load').init();\n\n require('./app/global-solutions');\n\n require('./app/perspectives-detail');\n})(window);\n\n},{\"./app/about\":20,\"./app/article-detail\":24,\"./app/articles-landing\":25,\"./app/capabilities\":28,\"./app/capability-detail\":29,\"./app/careers\":31,\"./app/contact-us\":33,\"./app/experiences\":35,\"./app/general-content\":36,\"./app/global-solutions\":39,\"./app/homepage\":41,\"./app/lazy-load\":43,\"./app/location-detail\":44,\"./app/locations\":48,\"./app/perspectives-detail\":50,\"./app/professional-detail\":51,\"./app/professionals\":52,\"./app/prototypes\":53,\"./app/site-search-results\":61,\"./app/topic-detail\":65,\"./app/util-helper\":66,\"./app/variables\":67,\"./lg-home\":71}],20:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n var aboutLanding = document.getElementById('about-landing');\n\n if (!aboutLanding) {\n return;\n }\n\n //include large polygon;\n require('./angled-polygon');\n\n //return for garbage collection\n aboutLanding = null;\n}();\n\n},{\"./angled-polygon\":22}],21:[function(require,module,exports){\n'use strict';\n\nfunction Accordions($accordion, optionsLogic) {\n this.$accordionModule = $accordion;\n this.$accordionSlides = null;\n this.$accordionNodes = null;\n this.options = optionsLogic || {\n exclusive: false,\n duration: 350, //in ms,\n triggerClass: 'js-accordion-trigger',\n accordionContentClass: 'js-accordion-content',\n parentClass: 'js-accordion-node',\n activeClass: 'is-expanded',\n accordionTitleLink: 'js-accordion-node-link',\n expandedByDefault: 'js-expanded-by-default'\n };\n\n this.bindEvents();\n this.init();\n}\n\nAccordions.prototype.init = function init() {\n var _self = this;\n _self.$accordionNodes = _self.$accordionModule.find('.' + _self.options.parentClass);\n _self.$accordionSlides = _self.$accordionModule.find('.' + _self.options.accordionContentClass);\n _self.openExpandedByDefault();\n};\n\nAccordions.prototype.openExpandedByDefault = function openExpandedByDefault() {\n var _self = this;\n\n var expandedByDefaultAccordions = _self.$accordionModule.find(\".\" + _self.options.expandedByDefault);\n var triggers = expandedByDefaultAccordions.find(\".\" + _self.options.triggerClass);\n\n triggers.trigger(\"click.Accordions\");\n};\n\nAccordions.prototype.collapseAll = function collaseAll() {\n this.$accordionNodes.removeClass(this.options.activeClass);\n\n this.$accordionNodes.each(function (index, el) {\n $(el).find('.' + this.options.triggerClass).attr('aria-expanded', 'false').end().find('.' + this.options.accordionContentClass).attr('aria-hidden', true);\n });\n};\n\nAccordions.prototype.sendToAccordionTitleUrl = function sendToAccordionTitleUrl($accordionTitleElement) {\n if ($accordionTitleElement.length) {\n var titleUrl = $accordionTitleElement.data(\"url\");\n if (titleUrl.length) window.location.href = titleUrl;\n }\n};\n\nAccordions.prototype.collapseAccordion = function collapse($accordion, $trigger) {\n var _self = this;\n\n //Collapse Accordion Content, \n var $collapseContent = $accordion.find('.' + this.options.accordionContentClass),\n\n // get the height of the element's inner content, regardless of its actual size\n sectionHeight = $collapseContent[0].scrollHeight;\n\n requestAnimationFrame(function () {\n $collapseContent.height(sectionHeight + 'px');\n\n requestAnimationFrame(function () {\n $collapseContent.height(0 + 'px');\n });\n });\n\n $collapseContent[0].addEventListener('transitionend', function (e) {\n // remove this event listener so it only gets triggered once\n $collapseContent[0].removeEventListener('transitionend', void 0);\n\n // remove \"height\" from the element's inline styles, so it can return to its initial value\n $collapseContent.css('height', '').attr('aria-hidden', true).attr('tabindex', -1);\n\n $accordion.removeClass(_self.options.activeClass);\n });\n\n //aria attribute updates\n if ($trigger.length) {\n $trigger.attr('aria-expanded', 'false');\n\n var ariaLabel = $trigger.attr('aria-label');\n $trigger.attr('aria-label', ariaLabel.replace('Collapse', 'Expand'));\n } else {\n var $trigger = $accordion.find('.' + this.options.triggerClass);\n var ariaLabel = $trigger.attr('aria-label');\n\n $trigger.attr('aria-expanded', 'false').attr('aria-label', ariaLabel.replace('Collapse', 'Expand'));\n }\n};\n\nAccordions.prototype.expandAccordion = function expand($accordion, $trigger) {\n if (this.options.exclusive) {\n this.collapseAll();\n }\n\n var _self = this;\n\n //Expand Accordion Content, \n var $collapseContent = $accordion.find('.' + this.options.accordionContentClass),\n\n // get the height of the element's inner content, regardless of its actual size\n sectionHeight = $collapseContent[0].scrollHeight;\n\n requestAnimationFrame(function () {\n $collapseContent.height(sectionHeight + 'px');\n });\n\n $collapseContent[0].addEventListener('transitionend', function (e) {\n // remove this event listener so it only gets triggered once\n $collapseContent[0].removeEventListener('transitionend', void 0);\n\n // remove \"height\" from the element's inline styles, so it can return to its initial value\n $collapseContent.css('height', '').attr('aria-hidden', false).attr('tabindex', 1);\n\n $accordion.addClass(_self.options.activeClass);\n });\n\n if ($trigger.length) {\n $trigger.attr('aria-expanded', 'true');\n\n var ariaLabel = $trigger.attr('aria-label');\n $trigger.attr('aria-label', ariaLabel.replace('Expand', 'Collapse'));\n } else {\n var $trigger = $accordion.find('.' + this.options.triggerClass);\n var ariaLabel = $trigger.attr('aria-label');\n $trigger.attr('aria-expanded', 'true').attr('aria-label', ariaLabel.replace('Expand', 'Collapse'));\n }\n};\n\nAccordions.prototype.toggleVisibility = function toggle($trigger) {\n var $parentNode = $trigger.closest('.' + this.options.parentClass);\n\n $parentNode.hasClass(this.options.activeClass) ? this.collapseAccordion($parentNode, $trigger) : this.expandAccordion($parentNode, $trigger);\n};\n\nAccordions.prototype.bindEvents = function bindEvents() {\n var _self = this;\n\n //initialize events\n _self.$accordionModule.on('click.Accordions', '.' + _self.options.triggerClass, function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n\n _self.toggleVisibility($(this));\n });\n\n _self.$accordionModule.on('click.Accordions', '.' + _self.options.accordionTitleLink, function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n\n _self.sendToAccordionTitleUrl($(this));\n });\n\n //if accordion is exclusive, we cache elements for future use\n if (_self.options.exclusive) {\n _self.$accordionSlides = _self.$accordionModule.find('.' + _self.options.accordionContentClass);\n _self.$accordionNodes = _self.$accordionModule.find('.' + _self.options.parentClass);\n }\n};\n\nmodule.exports = Accordions;\n\n},{}],22:[function(require,module,exports){\n'use strict';\n\n$(function () {\n var svg = document.getElementById('angled-polygon-svg'),\n module = document.getElementById('angled-polygon'),\n advancedFilters = document.getElementById('advanced-filters-categories'),\n\n\n //images\n polygonImgBlack = document.getElementById('angled-polygon-black-img'),\n polygonImgRed = document.getElementById('angled-polygon-red-img'),\n\n\n //Polygons that we will modify, depending if the content extend a certain threshold or if we are on mobile\n svgPolygonPoints = document.getElementById('angled-polygon-points'),\n svgPolygonPointsRed = document.getElementById('angled-polygon-points-red'),\n cachedSvgPolygonPoints = !!svgPolygonPoints && svgPolygonPoints.hasAttribute('points') ? svgPolygonPoints.getAttribute('points') : '',\n cachedSvgPolygonPointsRed = !!svgPolygonPointsRed && svgPolygonPointsRed.hasAttribute('points') ? svgPolygonPointsRed.getAttribute('points') : '',\n\n\n //content\n domContent = document.getElementById('angled-hero-body'),\n isMobile = false,\n pWidth = !!polygonImgRed ? polygonImgRed.getAttribute('width') : 0,\n pHeight = !!polygonImgRed ? polygonImgRed.getAttribute('height') : 0,\n imageAspectRatio = pWidth / pHeight;\n\n var largeDesktopBreakpoint = 1300;\n\n var svgAnglePadding, horizontalOffsetTriangle, polygonBlackOffsetY, polygonRedOffsetX;\n\n //utility functions\n var emConversion = function emConversion(pixelVal) {\n return Math.ceil(pixelVal / 16) + 'em';\n };\n\n var computeDegreesToRadians = function computeDegreesToRadians(degree) {\n return degree * Math.PI / 180;\n };\n\n var composePolygonPoints = function composePolygonPoints(polygonSvg, dimensions) {\n\n if (!!polygonSvg) {\n polygonSvg.setAttribute('points', dimensions.width + ' 0 ' + dimensions.width + ' ' + dimensions.pointRightEdge + ' ' + dimensions.pointMiddleEdgeX + ' ' + dimensions.pointMiddleEdge + ' 0 ' + dimensions.pointLeftEdge + ' 0 0');\n }\n };\n\n var setPolygonSizeBlack = function setPolygonSizeBlack(svgWidth, svgHeight) {\n\n var polygonSvg = document.getElementById('angled-polygon-points');\n\n var dimensions = {\n width: svgWidth - 30, //15 padding on both sides,\n height: svgHeight - polygonBlackOffsetY,\n pointRightEdge: 0,\n pointMiddleEdge: 0,\n pointMiddleEdgeX: horizontalOffsetTriangle,\n pointLeftEdge: 0\n };\n\n dimensions.pointLeftEdge = horizontalOffsetTriangle * Math.sin(computeDegreesToRadians(10.029)) / Math.sin(computeDegreesToRadians(79));\n\n dimensions.pointRightEdge = (dimensions.width - horizontalOffsetTriangle) * Math.sin(computeDegreesToRadians(10.029)) / Math.sin(computeDegreesToRadians(79));\n\n dimensions.pointLeftEdge = svgHeight - dimensions.pointLeftEdge - polygonBlackOffsetY;\n\n dimensions.pointRightEdge = svgHeight - dimensions.pointRightEdge - polygonBlackOffsetY;\n\n dimensions.pointMiddleEdge = svgHeight - polygonBlackOffsetY;\n\n if (window.innerWidth < largeDesktopBreakpoint) {\n composePolygonPoints(polygonSvg, dimensions);\n } else if (!!polygonSvg) {\n polygonSvg.setAttribute('points', cachedSvgPolygonPoints);\n }\n };\n\n var setPolygonSizeRed = function setPolygonSizeRed(svgWidth, svgHeight) {\n\n var polygonSvg = document.getElementById('angled-polygon-points-red'),\n polygonGroup = document.getElementById('angled-polygon-red-face');\n\n var dimensions = {\n width: svgWidth - 30 - polygonRedOffsetX * 2, //15 padding on both sides, 26 triangle inset\n height: svgHeight,\n pointRightEdge: 0,\n pointMiddleEdge: 0,\n pointMiddleEdgeX: horizontalOffsetTriangle - polygonRedOffsetX,\n pointLeftEdge: 0\n };\n\n dimensions.pointLeftEdge = dimensions.pointMiddleEdgeX * Math.sin(computeDegreesToRadians(10.029)) / Math.sin(computeDegreesToRadians(79));\n\n dimensions.pointRightEdge = (dimensions.width - dimensions.pointMiddleEdgeX) * Math.sin(computeDegreesToRadians(10.029)) / Math.sin(computeDegreesToRadians(79));\n\n dimensions.pointLeftEdge = svgHeight - dimensions.pointLeftEdge;\n\n dimensions.pointRightEdge = svgHeight - dimensions.pointRightEdge;\n\n dimensions.pointMiddleEdge = svgHeight;\n\n if (window.innerWidth < largeDesktopBreakpoint) {\n composePolygonPoints(polygonSvg, dimensions);\n\n if (!!polygonGroup) {\n polygonGroup.setAttribute('transform', 'translate(' + (polygonRedOffsetX + 15) + ', 0)');\n }\n\n if (!!polygonImgRed) {\n polygonImgRed.setAttribute('x', polygonRedOffsetX * -1);\n }\n } else {\n\n if (!!polygonSvg) {\n polygonSvg.setAttribute('points', cachedSvgPolygonPointsRed);\n }\n\n if (!!polygonGroup) {\n polygonGroup.setAttribute('transform', 'translate(' + polygonGroup.getAttribute('data-transform') + ')');\n }\n\n if (!!polygonImgRed) {\n polygonImgRed.setAttribute('x', polygonImgRed.getAttribute('data-offset-x'));\n }\n }\n };\n\n var setImageDimensions = function setImageDimensions(svgWidth, svgHeight) {\n\n if (!!polygonImgRed && polygonImgRed.getAttribute('height') > svgHeight) {\n return;\n }\n\n var newDimensions;\n\n if (svgWidth / svgHeight < imageAspectRatio) {\n newDimensions = {\n height: svgHeight,\n width: imageAspectRatio * svgHeight\n };\n } else {\n newDimensions = {\n height: imageAspectRatio / svgWidth,\n width: svgWidth\n };\n }\n\n if (!!polygonImgBlack) {\n polygonImgBlack.setAttribute('width', newDimensions.width);\n polygonImgBlack.setAttribute('height', newDimensions.height);\n }\n\n if (!!polygonImgRed) {\n polygonImgRed.setAttribute('width', newDimensions.width);\n polygonImgRed.setAttribute('height', newDimensions.height);\n }\n };\n\n var setupMeasurements = function setupMeasurements() {\n isMobile = window.innerWidth < 900 ? true : false;\n\n svgAnglePadding = isMobile ? 160 : 280, horizontalOffsetTriangle = isMobile ? 60 : 140, polygonBlackOffsetY = isMobile ? 24 : 65, polygonRedOffsetX = isMobile ? 15 : 26;\n };\n\n var resizeDesktop = function resizeDesktop() {\n\n setupMeasurements();\n\n var contentHeight = domContent.getBoundingClientRect().bottom + window.pageYOffset,\n svgWidth = window.innerWidth + 30,\n svgHeight = contentHeight + svgAnglePadding;\n\n //determine if advanced filters are present on page and we are in tablet more\n if (!!advancedFilters && window.innerWidth < 900) {\n contentHeight = contentHeight + advancedFilters.scrollHeight;\n svgHeight = contentHeight + svgAnglePadding;\n }\n\n if (window.innerWidth < largeDesktopBreakpoint) {\n if (!!svg) {\n svg.setAttribute('viewBox', '0 0 ' + svgWidth + ' ' + svgHeight);\n }\n if (!!module) {\n module.setAttribute('class', 'angled-polygon full-width');\n module.setAttribute('style', 'height: ' + emConversion(svgHeight - 5));\n }\n } else {\n if (!!svg) {\n svg.setAttribute('viewBox', svg.getAttribute('default-viewbox'));\n }\n\n if (!!module) {\n module.setAttribute('class', 'angled-polygon');\n module.removeAttribute('style');\n }\n }\n\n setPolygonSizeBlack(svgWidth, svgHeight);\n\n setPolygonSizeRed(svgWidth, svgHeight);\n\n setImageDimensions(svgWidth, svgHeight);\n };\n\n resizeDesktop();\n\n window.addEventListener('resize', resizeDesktop);\n\n window.resizeSVGHero = resizeDesktop;\n});\n\n},{}],23:[function(require,module,exports){\n'use strict';\n\nvar animationSearchHelpers,\n pageConfig,\n timeoutDelay = 750,\n $loadingScreen,\n $appliedFilters,\n globalVars = require('./variables'),\n cachedElements = globalVars.elementStates;\n\nanimationSearchHelpers = {\n\tslideToSearchResults: function slideToSearchResults() {\n\n\t\tvar searchForm,\n\t\t filtersOffset,\n\t\t _self = this;\n\n\t\tsearchForm = !!pageConfig.searchFormID ? document.getElementById(pageConfig.searchFormID) : document.getElementById('search-landing-filters');\n\n\t\t//compute offset of searchFilters\n\t\tfiltersOffset = parseInt(searchForm.getBoundingClientRect().bottom + window.pageYOffset, 10);\n\n\t\tfiltersOffset = Math.ceil(filtersOffset);\n\n\t\t$('html,body').animate({\n\t\t\tscrollTop: filtersOffset\n\t\t}, 500, function () {\n\t\t\t// _self.focusOnSearchResults();\n\t\t});\n\n\t\tsearchForm = null;\n\t},\n\tapplySelectedFilter: function applySelectedFilter(filterName) {\n\n\t\tvar $htmlFilter = $('
  • ' + filterName + '' + '');\n\n\t\tconsole.log('klsdjkl');\n\n\t\t$htmlFilter.prependTo($appliedFilters);\n\t},\n\tfocusOnSearchResults: function focusOnSearchResults() {\n\t\tvar searchResultsContent = document.getElementById(pageConfig.searchResultsID);\n\n\t\t$(searchResultsContent).focus();\n\n\t\tsearchResultsContent = null;\n\t},\n\tcacheElements: function cacheElements() {\n\n\t\tvar resultsDOM = !!pageConfig.searchResultsID ? document.getElementById(pageConfig.searchResultsID) : document.getElementById('search-entity-landing-results');\n\n\t\t$appliedFilters = $(resultsDOM).find('.js-applied-filters');\n\n\t\tresultsDOM = null;\n\t},\n\tinit: function init(pageConfiguration) {\n\t\tpageConfig = pageConfiguration;\n\n\t\t//back to top init\n\t\tif (pageConfiguration != null) {\n\t\t\tpageConfig = pageConfiguration;\n\t\t} else {\n\t\t\tpageConfig = {};\n\t\t}\n\n\t\tthis.cacheElements();\n\t},\n\tshowLoadingScreen: function showLoadingScreen() {\n\t\t$loadingScreen.addClass('show-loading-screen');\n\t},\n\thideLoadingScreen: function hideLoadingScreen() {\n\t\t$loadingScreen.removeClass('show-loading-screen');\n\t},\n\ttransitionFromDefaultToResults: function transitionFromDefaultToResults() {\n\t\tvar defaultContent,\n\t\t _self = this;\n\n\t\tdefaultContent = !!pageConfig.searchPromoPanelID ? document.getElementById(pageConfig.searchPromoPanelID) : document.getElementById('search-landing-default');\n\n\t\t// this.showLoadingScreen();\n\n\t\tif (!!defaultContent) {\n\n\t\t\t$(defaultContent).fadeOut('slow', function () {\n\t\t\t\t$(this).attr({\n\t\t\t\t\t'aria-hidden': true,\n\t\t\t\t\t'tabIndex': -1\n\t\t\t\t});\n\n\t\t\t\t_self.showSearchResults();\n\n\t\t\t\tdefaultContent = null;\n\t\t\t});\n\t\t} else {\n\t\t\t_self.showSearchResults();\n\t\t}\n\t},\n\tshowSearchResults: function showSearchResults() {\n\t\tvar resultsBody,\n\t\t _self = this;\n\n\t\tresultsBody = !!pageConfig.searchResultsID ? document.getElementById(pageConfig.searchResultsID) : document.getElementById('search-landing-results');\n\n\t\tif (resultsBody.getAttribute('aria-hidden') === 'true') {\n\n\t\t\t$(resultsBody).fadeIn('fast', function () {\n\n\t\t\t\t$(this).attr({\n\t\t\t\t\t'aria-hidden': false,\n\t\t\t\t\t'tabIndex': 0\n\t\t\t\t});\n\n\t\t\t\t_self.slideToSearchResults();\n\n\t\t\t\t//_self.hideLoadingScreen();\n\t\t\t});\n\n\t\t\tresultsBody = null;\n\t\t} else {\n\n\t\t\t_self.slideToSearchResults();\n\n\t\t\tresultsBody = null;\n\n\t\t\t//setTimeout(_self.hideLoadingScreen, timeoutDelay);\n\t\t}\n\t},\n\ttransitionToSearchDefault: function transitionToSearchDefault() {\n\n\t\tvar resultsBody,\n\t\t defaultContent,\n\t\t timeoutID,\n\t\t keywordEntrySectionOffset,\n\t\t siteHeaderHeight,\n\t\t _self = this;\n\n\t\tdefaultContent = !!pageConfig.defaultContentID ? document.getElementById(pageConfig.defaultContentID) : false;\n\t\tresultsBody = !!pageConfig.searchResultsID ? document.getElementById(pageConfig.searchResultsID) : document.getElementById('search-landing-results');\n\n\t\tthis.showLoadingScreen();\n\n\t\tsiteHeaderHeight = $('.js-site-header').outerHeight();\n\t\tkeywordEntrySectionOffset = $('.js-entity-search-control').offset();\n\n\t\t$('html,body').animate({\n\t\t\tscrollTop: keywordEntrySectionOffset ? keywordEntrySectionOffset.top - siteHeaderHeight : 0\n\t\t}, timeoutDelay);\n\n\t\t//if default content exists on the page, then we will fade out the current display and fade in the respected content\n\t\tif (!!defaultContent) {\n\t\t\t$(resultsBody).slideUp(timeoutDelay, function () {\n\t\t\t\t$(this).attr({\n\t\t\t\t\t'aria-hidden': true,\n\t\t\t\t\t'tabIndex': -1\n\t\t\t\t});\n\n\t\t\t\t_self.hideLoadingScreen();\n\n\t\t\t\t$(defaultContent).fadeIn('fast', function () {\n\n\t\t\t\t\t$(this).attr({\n\t\t\t\t\t\t'aria-hidden': false,\n\t\t\t\t\t\t'tabIndex': 0\n\t\t\t\t\t});\n\n\t\t\t\t\tresultsBody = defaultContent = null;\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\t//default content doesnt exist so we simply scroll to thte top and hide the loading screen;\n\n\t\t\tsetTimeout(function () {\n\t\t\t\t_self.hideLoadingScreen();\n\t\t\t}, timeoutDelay);\n\t\t}\n\t}\n};\n\nmodule.exports = animationSearchHelpers;\n\n},{\"./variables\":67}],24:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var articleDetail = document.getElementById('article-detail'),\n\n\n //modules\n ReadMore;\n\n if (!articleDetail) {\n return;\n }\n\n /**Read More**/\n ReadMore = require('./read-more');\n var readMoreNode = $(articleDetail).find('.js-read-more');\n if (readMoreNode.length) {\n new ReadMore(readMoreNode);\n }\n /**Read More**/\n\n window.stickyShare = require('./sticky-share');\n\n window.stickyShare.init();\n\n //return for garbage collection\n articleDetail = null;\n}();\n\n},{\"./read-more\":54,\"./sticky-share\":63}],25:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var articlesLanding = document.getElementById('articles-landing'),\n\n\n //modules\n pageOptions,\n searchLandingFilters,\n impactfulCTA,\n selectDropdowns;\n\n if (!articlesLanding) {\n return;\n }\n\n pageOptions = {\n pageName: 'articles-landing',\n searchPromoPanelID: 'search-entity-landing-promo',\n searchResultsID: 'search-entity-landing-results'\n };\n\n //attach helpers to window, and allow acccess animation interactivity within custom framework(ex. angularJS,knockout.js)\n window.animationSearchHelpers = require('./animation-search-helpers');\n window.animationSearchHelpers.init(pageOptions);\n\n //BackEnd Developers can overwrite floowing Search landing filters, only for template specific behavior\n searchLandingFilters = require('./search-landing-filters');\n searchLandingFilters.init(pageOptions);\n\n //initiate selectdropdowns\n selectDropdowns = require('./select-dropdown');\n\n var $dropdowns = $(articlesLanding).find('.js-select-dropdown');\n\n selectDropdowns($dropdowns, function selectDropdownCallback($selectEl, $selectedItem) {\n\n if (!!$selectedItem) {\n window.animationSearchHelpers.applySelectedFilter($selectedItem.text());\n }\n });\n\n impactfulCTA = require('./impactful-cta');\n\n $(function () {\n impactfulCTA.init();\n });\n\n //include large polygon;\n require('./angled-polygon');\n\n //return for garbage collection\n articlesLanding = $dropdowns = null;\n}();\n\n},{\"./angled-polygon\":22,\"./animation-search-helpers\":23,\"./impactful-cta\":42,\"./search-landing-filters\":58,\"./select-dropdown\":59}],26:[function(require,module,exports){\n'use strict';\n\nfunction BuildVideoPlayer($youtubeVideos, pageOptions) {\n var player,\n currentVideoId,\n $playerContainer = $('.js-video-player'),\n $closeButton = $('.js-close-video'),\n $restrictedFocusElements = [$('#site-header *'), $('.skip-to'), $('.main-content *'), $('.site-footer *')],\n activePlayerClass = 'show-video-player',\n firstLoad = true;\n\n var $initialVideoHighlight = $youtubeVideos.first();\n\n loadAPI();\n\n if ($initialVideoHighlight.attr('data-youtube-id')) {\n currentVideoId = $initialVideoHighlight.data('youtube-id');\n window.onYouTubeIframeAPIReady = function () {\n player = new YT.Player('video-iframe', {\n videoId: currentVideoId,\n frameborder: 0,\n height: '390',\n width: '640',\n playerVars: { autoplay: 0, showinfo: 0 },\n events: {\n 'onReady': function onReady() {},\n 'onStateChange': function onStateChange() {}\n }\n });\n };\n }\n\n $youtubeVideos.on('click', handleContainerClick);\n $closeButton.on('click', closeVideo);\n $playerContainer.on('click', function (event) {\n if ($(event.target).hasClass('js-video-player')) {\n event.stopPropagation();\n closeVideo();\n }\n });\n\n function loadAPI() {\n var firstScriptTag;\n var tag = document.createElement('script');\n\n tag.src = 'https://www.youtube.com/iframe_api';\n firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n }\n\n function handleContainerClick(event) {\n var youtubeId = event.currentTarget.dataset.youtubeId;\n if (youtubeId) {\n if (youtubeId !== currentVideoId) {\n currentVideoId = youtubeId;\n player.loadVideoById({ 'videoId': currentVideoId });\n openVideo();\n } else {\n openVideo();\n }\n }\n }\n\n function openVideo() {\n player.playVideo();\n if (firstLoad) {\n setTimeout(function () {\n displayVideoContainer();\n firstLoad = false;\n }, 200);\n } else {\n displayVideoContainer();\n }\n }\n\n function closeVideo(event) {\n $playerContainer.removeClass(activePlayerClass);\n $('body').removeClass('lock-scroll');\n reinstateFocus();\n player.pauseVideo();\n }\n\n function displayVideoContainer() {\n $playerContainer.addClass(activePlayerClass);\n $('body').addClass('lock-scroll');\n restrictFocus();\n }\n\n function restrictFocus() {\n if ($restrictedFocusElements) {\n $restrictedFocusElements.forEach(function (elem) {\n $(elem).attr('tabindex', -1);\n });\n }\n\n if (pageOptions && pageOptions.animatedSections) {\n pageOptions.animatedSections.forEach(function (section) {\n var $section = $(section);\n $section.addClass(pageOptions.pauseTransitionClass);\n });\n }\n }\n\n function reinstateFocus() {\n if ($restrictedFocusElements) {\n $restrictedFocusElements.forEach(function (elem) {\n $(elem).removeAttr('tabindex');\n });\n }\n\n if (pageOptions && pageOptions.animatedSections) {\n pageOptions.animatedSections.forEach(function (section) {\n var $section = $(section);\n $section.removeClass(pageOptions.pauseTransitionClass);\n });\n }\n }\n}\n\nmodule.exports = BuildVideoPlayer;\n\n},{}],27:[function(require,module,exports){\n'use strict';\n\nvar $capabilitiesCompact,\n $viewMoreToggle,\n childrenToShow,\n animationClass = 'animate-in',\n isChildrenExpanded = false,\n\n\n//Module Exports\ncapabilitiesCompact;\n\ncapabilitiesCompact = {\n\n\texpandChildren: function expandChildren() {\n\n\t\t$viewMoreToggle.find('.btn-ghost-label').text($capabilitiesCompact.data('label-less'));\n\n\t\t$capabilitiesCompact.find('.listing-capabilities-option__read-more').slideDown();\n\n\t\tisChildrenExpanded = true;\n\t},\n\tcollapseChildren: function collapseChildren() {\n\t\t$viewMoreToggle.find('.btn-ghost-label').text($capabilitiesCompact.data('label-more'));\n\n\t\t$capabilitiesCompact.find('.listing-capabilities-option__read-more').slideUp();\n\n\t\tisChildrenExpanded = false;\n\t},\n\ttoggleView: function toggleView() {\n\t\tisChildrenExpanded ? this.collapseChildren() : this.expandChildren();\n\t},\n\tinitScrollToggle: function initScrollToggle() {\n\n\t\tvar _self = this;\n\n\t\t$viewMoreToggle.on('click', function (ev) {\n\t\t\tev.preventDefault();\n\t\t\tev.stopPropagation();\n\n\t\t\t_self.toggleView();\n\t\t});\n\t},\n\tinit: function init($wrapper) {\n\n\t\t//initialize Variables\n\t\t$capabilitiesCompact = $wrapper || $('.capabilities-compact');\n\n\t\t$viewMoreToggle = $capabilitiesCompact.find('.btn-text-load-more');\n\n\t\tchildrenToShow = $capabilitiesCompact.data('child-selector') || 3;\n\n\t\tthis.initScrollToggle();\n\t}\n};\n\nmodule.exports = capabilitiesCompact;\n\n},{}],28:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var capabilities = document.getElementById('capabilities-landing'),\n\n\n // modules\n pageOptions,\n searchLandingFilters,\n Accordion,\n Scrollspy,\n impactfulCTA,\n selectDropdowns;\n\n if (!capabilities) {\n return;\n }\n\n pageOptions = {\n pageName: 'capabilities-landing',\n searchPromoPanelID: 'search-entity-landing-promo',\n searchResultsID: 'search-entity-landing-results',\n alphaSearch: false\n };\n\n // Initialize scrollspy\n Scrollspy = require('./scrollspy');\n // Initializing without $window.ready doesn't work here for some reason\n $(window).ready(function () {\n Scrollspy.init();\n });\n\n // attach helpers to window, and allow acccess animation interactivity within custom framework(ex. angularJS,knockout.js)\n window.animationSearchHelpers = require('./animation-search-helpers');\n window.animationSearchHelpers.init(pageOptions);\n\n // initialize credentials accordion if it exists\n var $credentialsAccordion = $(capabilities).find('.js-accordion');\n if ($credentialsAccordion.length) {\n Accordion = require('./accordion');\n new Accordion($credentialsAccordion);\n }\n\n // BackEnd Developers can overwrite floowing Search landing filters, only for template specific behavior\n searchLandingFilters = require('./search-landing-filters');\n searchLandingFilters.init(pageOptions);\n\n // include large polygon;\n require('./angled-polygon');\n\n impactfulCTA = require('./impactful-cta');\n $(function () {\n impactfulCTA.init();\n });\n\n //return for garbage collection\n capabilities = null;\n}();\n\n},{\"./accordion\":21,\"./angled-polygon\":22,\"./animation-search-helpers\":23,\"./impactful-cta\":42,\"./scrollspy\":57,\"./search-landing-filters\":58}],29:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var capabilityDetail = document.getElementById('capability-detail'),\n ReadMore,\n Accordion,\n SliderCarousel,\n Scrollspy,\n BuildVideoPlayer;\n\n if (!capabilityDetail) {\n return;\n }\n\n // Initialize overview\n ReadMore = require('./read-more');\n var readMoreNode = $(capabilityDetail).find('.js-read-more');\n\n if (readMoreNode.length) {\n new ReadMore(readMoreNode);\n }\n\n // Initialize overview\n SliderCarousel = require('./slider-carousel');\n var carouselNode = $(capabilityDetail).find('.js-slider-carousel');\n\n if (carouselNode.length) {\n new SliderCarousel(carouselNode);\n }\n\n // Initialize credentials accordion if it exists\n Accordion = require('./accordion');\n var $focusAreas = $(capabilityDetail).find('.js-accordion');\n\n if ($focusAreas.length) {\n new Accordion($focusAreas);\n }\n\n // Initialize scrollspy\n Scrollspy = require('./scrollspy');\n Scrollspy.init();\n\n // Initialize video player\n var $youtubeVideos = $('.js-youtube-video');\n if ($youtubeVideos.length) {\n BuildVideoPlayer = require('./build-video-player');\n BuildVideoPlayer($youtubeVideos);\n }\n\n // Scroll page on load\n require('./scroll-on-load');\n\n //return for garbage collection\n capabilityDetail = readMoreNode = null;\n}();\n\n},{\"./accordion\":21,\"./build-video-player\":26,\"./read-more\":54,\"./scroll-on-load\":56,\"./scrollspy\":57,\"./slider-carousel\":62}],30:[function(require,module,exports){\n'use strict';\n\nvar searchFiltersForm, pageOptions, $clearAll, focusableSelector, CareersGCFilters;\n\nCareersGCFilters = {\n\n handleContentDisplay: function handleContentDisplay() {\n var searchResultsContent = document.getElementById(pageOptions.searchResultsID);\n\n searchResultsContent.getAttribute('aria-hidden') === 'true' ? window.animationSearchHelpers.transitionFromDefaultToResults() : window.animationSearchHelpers.showSearchResults();\n\n searchResultsContent = null;\n },\n\n initClearAllEvent: function initClearAllEvent() {\n $clearAll.on('click.clearResults', function (ev) {\n ev.stopPropagation();\n window.animationSearchHelpers.transitionToSearchDefault();\n });\n },\n\n transitionToSearchDefault: function transitionToSearchDefault() {\n window.animationSearchHelpers.transitionToSearchDefault();\n },\n\n advancedSearchInit: function advancedSearchInit() {\n var $advancedFilters = $(searchFiltersForm).find('.js-advanced-filters');\n\n $advancedFilters.on('click', '.js-categories-trigger', function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n\n $(this).toggleClass('is-expanded');\n });\n },\n\n initSubmitEvent: function initSubmitEvent() {\n var _self = this;\n\n $(searchFiltersForm).submit(function (ev) {\n ev.preventDefault();\n\n _self.handleContentDisplay();\n });\n },\n\n // $('');\n\n setDropdownAccessibility: function setDropdownAccessibility() {\n var tablet = window.matchMedia('(max-width: 56.1875em)');\n if (tablet.matches) {\n $('.js-categories').attr('aria-hidden', true).find(focusableSelector).attr('tabindex', -1);\n } else {\n $('.js-categories').attr('aria-hidden', false).find(focusableSelector).attr('tabindex', 0);\n }\n },\n\n init: function init(pageConfig) {\n if (!pageConfig) {\n console.log('invalid argument, need Object supplied');\n }\n\n pageOptions = pageConfig;\n pageOptions.searchFormID = pageOptions.searchFormID || 'search-landing-filters';\n\n searchFiltersForm = document.getElementById(pageOptions.searchFormID);\n\n // Assign jQuery elements\n focusableSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]';\n\n this.initSubmitEvent();\n this.advancedSearchInit();\n this.setDropdownAccessibility();\n $(window).resize(this.setDropdownAccessibility);\n\n var _self = this;\n }\n};\n\nmodule.exports = CareersGCFilters;\n\n},{}],31:[function(require,module,exports){\n'use strict';\n\n// YouTube Videos\n\nvar BuildVideoPlayer = require('./build-video-player');\nvar $youtubeVideos = $('.video-header-play-button.js-youtube-video');\n\nif ($youtubeVideos.length) {\n BuildVideoPlayer = require('./build-video-player');\n BuildVideoPlayer($youtubeVideos);\n}\n\n// Vertical Scrolling for Page Blocks\nvar $pageBlocks = $('#page-blocks');\nif ($pageBlocks.length) {\n var verticalCorner = require('./vertical-corner');\n verticalCorner.init();\n}\n\n// Hover State for Featured CTA Buttons\nvar $featuredCtas = $('#featured-ctas');\nif ($featuredCtas.length) {\n var impactfulCTA = require('./impactful-cta');\n $(function () {\n impactfulCTA.init();\n });\n};\n\n// Accordion Buckets\nvar $accordionBuckets = $('.js-accordion');\nif ($accordionBuckets.length) {\n var Accordion = require('./accordion');\n $accordionBuckets.each(function (index, el) {\n new Accordion($(el));\n });\n}\n\nvar pageOptions = {\n pageName: 'careers-gc',\n searchResultsID: 'careers-gc-results'\n};\n//BackEnd Developers can overwrite floowing Search landing filters, only for template specific behavior\nvar careersGCFilters = require('./careers-gc-filters');\ncareersGCFilters.init(pageOptions);\n\n// School Interview Search\nvar $schoolSearch = $('.school-interview');\n//if ($schoolSearch.length) {\n// var SchoolSearch = require('./school-search');\n// $schoolSearch.each(function (index, el) {\n// new SchoolSearch($(el));\n// });\n//}\n\n// Side Nav\nvar sideNav = require('./sidenav');\nsideNav.init();\n\n// Read More\nvar ReadMore = require('./read-more');\nvar $readMore = $('.js-read-more');\nif ($readMore.length) {\n new ReadMore($readMore);\n}\n\n},{\"./accordion\":21,\"./build-video-player\":26,\"./careers-gc-filters\":30,\"./impactful-cta\":42,\"./read-more\":54,\"./sidenav\":60,\"./vertical-corner\":68}],32:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n\n\tvar initFormLogic, inquiryTypeShow, selectDropdown, $contactUsForm, $inquiryDropdown;\n\n\tinquiryTypeShow = function inquiryTypeShow($selectEl, $selectedItem) {\n\n\t\t//For Template Purposes\n\n\t\t$contactUsForm.find('.form-message-send').slideDown();\n\t};\n\n\tinitFormLogic = function initFormLogic($form) {\n\n\t\t$contactUsForm = !!$form ? $form : $('.js-contact-us-form');\n\n\t\tselectDropdown = require('./select-dropdown');\n\n\t\t$inquiryDropdown = $contactUsForm.find('.js-inquiry-dropdown');\n\n\t\tselectDropdown($inquiryDropdown, inquiryTypeShow);\n\t};\n\n\treturn {\n\t\tinit: initFormLogic\n\t};\n}();\n\n},{\"./select-dropdown\":59}],33:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var contactUs = document.getElementById('contact-us-page'),\n\n\n //modules\n contactUsForm;\n\n if (!contactUs) {\n return;\n }\n\n contactUsForm = require('./contact-us-form');\n\n contactUsForm.init($(contactUs).find('.js-contact-us-form'));\n\n //return for garbage collection\n contactUs = null;\n}();\n\n},{\"./contact-us-form\":32}],34:[function(require,module,exports){\n'use strict';\n\nvar dynamicTabs,\n// Module imports\nglobalVars, windowResize;\n\n// Global variables\nglobalVars = require('./variables');\n\nwindowResize = globalVars.windowResize;\n\nvar keys = {\n\tleft: 37,\n\tup: 38,\n\tright: 39,\n\tdown: 40\n};\n\nvar directions = {};\ndirections[keys.left] = -1;\ndirections[keys.up] = -1;\ndirections[keys.right] = 1;\ndirections[keys.down] = 1;\n\ndynamicTabs = {\n\tupdateNavigation: function updateNavigation(clickedNavNode) {\n\t\t//clear all nav items\n\t\tthis.$tabsNav.find('.' + this.options.tabActiveClass).removeClass(this.options.tabActiveClass).children();\n\n\t\t//setActiveNode\n\t\tthis.$tabButtons.attr({ 'aria-selected': false, 'tabindex': -1 });\n\t\t$(clickedNavNode).attr({ 'aria-selected': true, 'tabindex': 0 }).parent().addClass(this.options.tabActiveClass);\n\t},\n\tresetClasses: function resetClasses($activePanel) {\n\t\tthis.$tabs.removeClass(this.options.transitionOutClass).find('.' + this.options.beltWrapperClass).css('height', '');\n\n\t\t$activePanel.removeClass(this.options.transitionInClass).addClass(this.options.panelActiveClass);\n\n\t\tthis.isAnimating = false;\n\t},\n\ttransitionActivePanel: function transitionActivePanel() {\n\t\tvar _self = this,\n\t\t $activePanel = $('#' + this.activePanelID),\n\t\t $beltWrapper = _self.$tabs.find('.' + _self.options.beltWrapperClass);\n\n\t\t//find current active panel and remove class\n\t\tthis.$tabs.find('.' + this.options.panelActiveClass).removeClass(this.options.panelActiveClass).attr({\n\t\t\t'aria-hidden': true,\n\t\t\t'aria-expanded': false,\n\t\t\t'tabindex': '-1'\n\t\t}).find('a, button').attr('tabindex', -1);\n\n\t\t$activePanel.addClass(this.options.transitionInClass).attr({\n\t\t\t'aria-hidden': false,\n\t\t\t'aria-expanded': true,\n\t\t\t'tabindex': '0'\n\t\t}).find('a, button').attr('tabindex', 0);\n\n\t\t$beltWrapper.css('height', $activePanel.height() + 'px');\n\n\t\tsetTimeout(function () {\n\t\t\t_self.resetClasses($activePanel);\n\t\t\t_self = null;\n\t\t}, this.options.transitionTiming);\n\n\t\t$beltWrapper = null;\n\t},\n\ttransitionPanel: function transitionPanel() {\n\t\tvar _self = this,\n\t\t $beltWrapper = _self.$tabs.find('.' + _self.options.beltWrapperClass);\n\n\t\tthis.$tabs.addClass(_self.options.transitionOutClass);\n\n\t\t$beltWrapper.css('height', $beltWrapper.height() + 'px');\n\n\t\tsetTimeout(function () {\n\t\t\t_self.transitionActivePanel($beltWrapper);\n\t\t\t_self = null;\n\t\t}, this.options.transitionTiming);\n\n\t\t$beltWrapper = null;\n\t},\n\tshowNextPanel: function showNextPanel(navNode, wasAutomatic) {\n\t\tvar panelID = navNode.getAttribute('href');\n\n\t\tthis.activePanelID = panelID.slice(1);\n\n\t\tthis.isAnimating = true;\n\n\t\tthis.transitionPanel();\n\n\t\tthis.updateNavigation(navNode);\n\n\t\tif (!wasAutomatic) {\n\t\t\tnavNode.focus();\n\t\t}\n\n\t\tif (typeof this.options.callback === 'function') {\n\t\t\tthis.options.callback($(navNode));\n\t\t}\n\t},\n\tautoScrollNextPanel: function autoScrollNextPanel() {\n\t\tvar _self = this,\n\t\t $nextTab;\n\n\t\tif (_self.currentTabIndex < _self.tabCount) {\n\t\t\t$nextTab = _self.$tabsNav.children().eq(_self.currentTabIndex);\n\t\t\t_self.currentTabIndex++;\n\t\t} else {\n\t\t\t_self.currentTabIndex = 1;\n\t\t\t$nextTab = _self.$tabsNav.children().first();\n\t\t}\n\n\t\tvar button = $nextTab.find('a:first')[0];\n\t\t_self.showNextPanel(button, true);\n\t},\n\tclearIntervalOption: function clearIntervalOption() {\n\n\t\tif (this.timeoutID) {\n\t\t\twindow.clearInterval(this.timeoutID);\n\n\t\t\tthis.timeoutID = null;\n\t\t}\n\t},\n\tinit: function init($tabs, options) {\n\t\tvar defaultOptions = {\n\t\t\tautoScroll: false,\n\t\t\tcallback: undefined,\n\t\t\tnavDirection: 'horizontal',\n\n\t\t\ttransitionTiming: 700,\n\t\t\ttransitionOutClass: 'is-transitioning-out',\n\t\t\ttransitionInClass: 'is-transitioning-in',\n\n\t\t\tbeltWrapperClass: 'js-belt',\n\t\t\tpanelClass: 'js-panel',\n\t\t\tpanelActiveClass: 'is-panel-shown',\n\t\t\tpauseTransitionClass: 'transition-paused',\n\t\t\tcontentClasses: '',\n\n\t\t\tnavClass: 'global-perspectives-nav',\n\t\t\tnavBtnClass: 'js-nav-btn',\n\t\t\ttabActiveClass: 'is-active-tab'\n\t\t};\n\n\t\tthis.options = $.extend(defaultOptions, options || {});\n\t\tthis.isAnimating = false;\n\t\tthis.activePanelID = null;\n\t\tthis.$tabs = !!$tabs ? $tabs : $('.dynamicTabs');\n\t\tthis.$tabsNav = this.$tabs.find('.' + this.options.navClass);\n\t\tthis.$tabButtons = this.$tabs.find('.' + this.options.navBtnClass);\n\t\tthis.$panels = this.$tabs.find('[role=\"tabpanel\"]');\n\t\tthis.tabCount = this.$tabsNav.children().length;\n\t\t// Only used in when auto-play (autoScroll) is on\n\t\tthis.currentTabIndex = parseInt(this.$tabsNav.data('initial-active-tab')) || 1;\n\n\t\t// Set up events\n\t\tvar _self = this;\n\t\tthis.$tabsNav.on('click mousedown', '.' + this.options.navBtnClass, function (e) {\n\t\t\te.preventDefault();\n\t\t\t_self.clearIntervalOption();\n\t\t\tvar clickedBtn = this;\n\t\t\tif ($(clickedBtn).parent().hasClass(_self.options.tabActiveClass) || _self.isAnimating) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_self.showNextPanel(clickedBtn);\n\t\t});\n\t\tthis.$tabsNav.on('keydown', '.' + this.options.navBtnClass, function (e) {\n\t\t\tif (_self.options.navDirection === 'horizontal') {\n\t\t\t\tif (e.keyCode === keys.left || e.keyCode === keys.right) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t_self.clearIntervalOption();\n\t\t\t\t\tif (_self.isAnimating) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar direction = directions[e.keyCode];\n\t\t\t\t\tvar nextTab = _self.$tabButtons.eq(_self.$tabButtons.index(this) + direction)[0];\n\t\t\t\t\tif (nextTab) {\n\t\t\t\t\t\t_self.showNextPanel(nextTab);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else /* if (this.options.navDirection === 'vertical') */{\n\t\t\t\t\tif (e.keyCode === keys.up || e.keyCode === keys.down) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation(); // Prevent scroll\n\t\t\t\t\t\t_self.clearIntervalOption();\n\t\t\t\t\t\tif (_self.isAnimating) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar direction = directions[e.keyCode];\n\t\t\t\t\t\tvar nextTab = _self.$tabButtons.eq(_self.$tabButtons.index(this) + direction)[0];\n\t\t\t\t\t\tif (nextTab) {\n\t\t\t\t\t\t\t_self.showNextPanel(nextTab);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t});\n\t\tthis.$tabsNav.on('mouseover focusin', '.' + this.options.navBtnClass, this.clearIntervalOption);\n\t\tthis.$tabs.on('mouseover focusin', this.options.contentClasses, this.clearIntervalOption);\n\n\t\t// Set up auto-scroll timer (if necessary)\n\t\tthis.autoscrollTimer = parseInt(this.$tabsNav.data('autoscroll-timer'));\n\t\tif (this.autoscrollTimer == 0 || this.autoscrollTimer == undefined) {\n\t\t\tthis.options.autoScroll = false;\n\t\t}\n\t\tif (this.options.autoScroll) {\n\t\t\t_self.timeoutID = window.setInterval(function () {\n\t\t\t\tif (!_self.$tabsNav.hasClass(_self.options.pauseTransitionClass)) {\n\t\t\t\t\t_self.autoScrollNextPanel();\n\t\t\t\t}\n\t\t\t}, this.autoscrollTimer * 1000);\n\t\t}\n\n\t\t// Set initial accessibility attrs\n\t\tthis.$panels.attr({ 'aria-hidden': true, 'tabindex': '-1' }).find('a, button').attr('tabindex', -1);\n\t\tthis.$panels.eq(_self.currentTabIndex - 1).attr({ 'aria-hidden': false, 'tabindex': '0' }).find('a, button').attr('tabindex', 0);\n\t\tthis.$tabButtons.attr('tabindex', -1);\n\t\tthis.$tabs.find('.is-selected').children().attr({ 'aria-selected': true, 'tabindex': 0 });\n\t}\n};\n\nmodule.exports = dynamicTabs;\n\n},{\"./variables\":67}],35:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var experiences = document.getElementById('experience-landing'),\n\n\n //modules\n pageOptions,\n searchLandingFilters,\n selectDropdowns;\n\n if (!experiences) {\n return;\n }\n\n pageOptions = {\n pageName: 'experiences-landing',\n searchPromoPanelID: 'search-entity-landing-promo',\n searchResultsID: 'search-entity-landing-results',\n alphaSearch: false\n };\n\n //attach helpers to window, and allow acccess animation interactivity within custom framework(ex. angularJS,knockout.js)\n window.animationSearchHelpers = require('./animation-search-helpers');\n window.animationSearchHelpers.init(pageOptions);\n\n //BackEnd Developers can overwrite floowing Search landing filters, only for template specific behavior\n searchLandingFilters = require('./search-landing-filters');\n\n searchLandingFilters.init(pageOptions);\n\n //initiate selectdropdowns\n selectDropdowns = require('./select-dropdown');\n\n var $dropdowns = $(experiences).find('.js-select-dropdown');\n\n selectDropdowns($dropdowns, function selectDropdownCallback($selectEl, $selectedItem) {\n\n if (!!$selectedItem) {\n window.animationSearchHelpers.applySelectedFilter($selectedItem.text());\n }\n });\n\n //back to gc\n $dropdowns = null;\n\n //include large polygon;\n require('./angled-polygon');\n\n //return for garbage collection\n experiences = null;\n}();\n\n},{\"./angled-polygon\":22,\"./animation-search-helpers\":23,\"./search-landing-filters\":58,\"./select-dropdown\":59}],36:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var generalContent = document.getElementById('general-content'),\n\n\n //modules\n ReadMore,\n impactfulCTA,\n Accordion,\n sideNav;\n\n if (!generalContent) {\n if (document.getElementById('ss-embed-frame')) {\n $('#ss-embed-frame').attr('onload', 'window.scrollTo(0, 500)');\n }\n return;\n }\n\n //initialize overview\n ReadMore = require('./read-more');\n\n var readMoreNodes = $(generalContent).find('.js-read-more');\n\n if (readMoreNodes.length) {\n $.each(readMoreNodes, function (index, item) {\n new ReadMore($(item));\n });\n }\n\n Accordion = require('./accordion');\n\n var $accordions = $(generalContent).find('.js-accordion');\n\n if ($accordions.length) {\n\n $accordions.each(function (index, el) {\n new Accordion($(el));\n });\n }\n\n sideNav = require('./sidenav');\n\n sideNav.init();\n\n impactfulCTA = require('./impactful-cta');\n\n $(function () {\n impactfulCTA.init();\n });\n\n //return for garbage collection\n generalContent = readMoreNodes = null;\n}();\n\n},{\"./accordion\":21,\"./impactful-cta\":42,\"./read-more\":54,\"./sidenav\":60}],37:[function(require,module,exports){\n'use strict';\n\nvar globalPerspectives,\n\n\n//module imports\ndynamicTabs = require('./dynamic-tabs'),\n perspectivesMenu;\n\nglobalPerspectives = {\n dynamicTabsLogic: null,\n mobileMenuInit: function mobileMenuInit() {\n var ToggleMenu = require('./toggle-menu');\n\n perspectivesMenu = new ToggleMenu($('.js-global-perspectives').find('.js-menu'), {\n triggerClass: 'js-nav-toggle',\n expandableMenu: 'js-menu',\n showOptions: 'show-regions-menu',\n navOptionsClass: 'js-nav-btn',\n selectedOptionClass: 'is-selected'\n });\n },\n clearIntervalOption: function clearIntervalOption() {\n\n this.dynamicTabsLogic.clearIntervalOption();\n },\n init: function init() {\n\n if ($('.js-global-perspectives').length === 0) {\n return;\n }\n\n this.mobileMenuInit();\n\n this.dynamicTabsLogic = Object.create(dynamicTabs);\n\n this.dynamicTabsLogic.init($('.js-global-perspectives'), {\n transitionTiming: 350,\n panelActiveClass: 'is-region-shown',\n contentClasses: '.global-perspective-region-title, .global-perspective-content-container',\n tabActiveClass: 'is-selected',\n autoScroll: true,\n callback: perspectivesMenu.updateMobileLabel.bind(perspectivesMenu)\n });\n }\n};\n\nmodule.exports = globalPerspectives;\n\n},{\"./dynamic-tabs\":34,\"./toggle-menu\":64}],38:[function(require,module,exports){\n\"use strict\";\n\nvar GlobalSolutionsProducts = function GlobalSolutionsProducts() {\n\n // Production steps of ECMA-262, Edition 6, 22.1.2.1\n if (!Array.from) {\n Array.from = function () {\n var toStr = Object.prototype.toString;\n var isCallable = function isCallable(fn) {\n return typeof fn === \"function\" || toStr.call(fn) === \"[object Function]\";\n };\n var toInteger = function toInteger(value) {\n var number = Number(value);\n if (isNaN(number)) {\n return 0;\n }\n if (number === 0 || !isFinite(number)) {\n return number;\n }\n return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));\n };\n var maxSafeInteger = Math.pow(2, 53) - 1;\n var toLength = function toLength(value) {\n var len = toInteger(value);\n return Math.min(Math.max(len, 0), maxSafeInteger);\n };\n\n // The length property of the from method is 1.\n return function from(arrayLike /*, mapFn, thisArg */) {\n // 1. Let C be the this value.\n var C = this;\n\n // 2. Let items be ToObject(arrayLike).\n var items = Object(arrayLike);\n\n // 3. ReturnIfAbrupt(items).\n if (arrayLike == null) {\n throw new TypeError(\"Array.from requires an array-like object - not null or undefined\");\n }\n\n // 4. If mapfn is undefined, then let mapping be false.\n var mapFn = arguments.length > 1 ? arguments[1] : void undefined;\n var T;\n if (typeof mapFn !== \"undefined\") {\n // 5. else\n // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.\n if (!isCallable(mapFn)) {\n throw new TypeError(\"Array.from: when provided, the second argument must be a function\");\n }\n\n // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.\n if (arguments.length > 2) {\n T = arguments[2];\n }\n }\n\n // 10. Let lenValue be Get(items, \"length\").\n // 11. Let len be ToLength(lenValue).\n var len = toLength(items.length);\n\n // 13. If IsConstructor(C) is true, then\n // 13. a. Let A be the result of calling the [[Construct]] internal method\n // of C with an argument list containing the single item len.\n // 14. a. Else, Let A be ArrayCreate(len).\n var A = isCallable(C) ? Object(new C(len)) : new Array(len);\n\n // 16. Let k be 0.\n var k = 0;\n // 17. Repeat, while k < len… (also steps a - h)\n var kValue;\n while (k < len) {\n kValue = items[k];\n if (mapFn) {\n A[k] = typeof T === \"undefined\" ? mapFn(kValue, k) : mapFn.call(T, kValue, k);\n } else {\n A[k] = kValue;\n }\n k += 1;\n }\n // 18. Let putStatus be Put(A, \"length\", len, true).\n A.length = len;\n // 20. Return A.\n return A;\n };\n }();\n }\n\n (function (w) {\n\n w.URLSearchParams = w.URLSearchParams || function (searchString) {\n var self = this;\n self.searchString = searchString;\n self.get = function (name) {\n var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(self.searchString);\n if (results == null) {\n return null;\n } else {\n return decodeURI(results[1]) || 0;\n }\n };\n };\n })(window);\n\n // define DOM elements\n var $el = $('#products');\n var $dropdownList = $el.find('.products-dropdown__items');\n var $dropdownItem = $el.find('.products-dropdown__item');\n var dropdownArray = Array.from($dropdownList[0].children);\n var $dropdownButton = $el.find('#dropdown-button');\n var $sections = $el.find('.products__content');\n var $section = $el.find('.products__section');\n\n // bind events\n $dropdownButton.on('click', toggleDropdown);\n $dropdownItem.on('click', function () {\n toggleDropdown();\n activateSection(this, undefined, true);\n });\n\n function init() {\n var searchParams = new URLSearchParams(window.location.search);\n if (searchParams.get('group')) {\n dropdownArray.map(function (item) {\n var accordionId = searchParams.get('product') ? searchParams.get('product') : '';\n if ($(item).data('group-id') == searchParams.get('group')) {\n return activateSection(item, accordionId, true);\n }\n });\n } else {\n activateSection(dropdownArray[0]);\n }\n }\n function toggleDropdown() {\n $dropdownList.toggleClass('products-dropdown__items--active');\n }\n function activateSection(section, accordionId, scrollTo) {\n console.log(section);\n var id = $(section).data('group-id');\n var name = $(section).text();\n var activeSection = $sections.find(\"[data-group-id='\" + id + \"']\");\n $dropdownButton.text(name);\n // if (id !== 'all'){ \n $section.css('display', 'none');\n activeSection.css('display', 'block');\n searchForAccordion(activeSection, accordionId, scrollTo);\n // }\n // else {\n // $section.css('display', 'block')\n // activeSection.css('display', 'none')\n // if (scrollTo)\n // goToSection($section)\n // }\n }\n function searchForAccordion(section, id, scrollTo) {\n var activeAccordion;\n Array.from($(section).children()).map(function (item) {\n if ($(item).data('product-id') == id) {\n $(item).find('.js-accordion-trigger').trigger('click');\n activeAccordion = item;\n }\n });\n if (activeAccordion) {\n goToSection(activeAccordion);\n } else if (scrollTo) {\n goToSection(section);\n }\n }\n function goToSection(el) {\n $('html,body').animate({\n scrollTop: $(el).offset().top - 150\n }, 500);\n }\n\n init();\n};\n\nmodule.exports = GlobalSolutionsProducts;\n\n},{}],39:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function () {\n \"use strict\";\n\n var globalSolutions = document.getElementById(\"global-solutions\"),\n ReadMore,\n Accordion,\n Scrollspy,\n GlobalSolutionsProducts;\n\n if (!globalSolutions) {\n return;\n }\n\n // Initialize overview\n ReadMore = require(\"./read-more\");\n var readMoreNode = $(globalSolutions).find(\".js-read-more\");\n\n if (readMoreNode.length) {\n new ReadMore(readMoreNode);\n }\n\n // Initialize scrollspy\n Scrollspy = require(\"./scrollspy\");\n Scrollspy.init();\n\n // initialize accordion if it exists\n var $globalAccordion = $(globalSolutions).find(\".js-accordion\");\n if ($globalAccordion.length) {\n Accordion = require(\"./accordion\");\n new Accordion($globalAccordion);\n }\n\n var $product = $(globalSolutions).find('.products');\n if ($product.length) {\n GlobalSolutionsProducts = require('./global-solutions-products');\n GlobalSolutionsProducts();\n // new GlobalSolutionsProducts($product)\n // console.log(GlobalSolutionsProducts)\n }\n}();\n\n},{\"./accordion\":21,\"./global-solutions-products\":38,\"./read-more\":54,\"./scrollspy\":57}],40:[function(require,module,exports){\n'use strict';\n\nvar $heroIntro,\n $scrollBtn,\n animationClass = 'animate-in',\n VideoPlayer,\n\n//Module Exports\nglobalVars,\n heroIntro,\n VideoPlayer;\n\nheroIntro = {\n\n\tinitScrollToggle: function initScrollToggle() {\n\t\t$scrollBtn.on('click', function (e) {\n\t\t\t$('body,html').animate({\n\t\t\t\tscrollTop: $('.js-hero-intro').next().offset().top - globalVars.elementStates.headerHeight\n\t\t\t}, 600);\n\n\t\t\t$('.js-hero-intro').next().attr('tabindex', '-1');\n\t\t\t$('.js-hero-intro').next().focus();\n\t\t});\n\n\t\t$('.js-hero-intro').next().attr('tabindex', '-1');\n\t\t$('.js-hero-intro').next().focus();\n\t},\n\tinit: function init($wrapper) {\n\n\t\t//initialize Variables\n\t\t$heroIntro = !!$wrapper ? $wrapper : $('.js-hero-intro');\n\n\t\t$scrollBtn = $heroIntro.find('.js-scroll-to');\n\n\t\t//setup classes for is in view header\n\t\t$heroIntro.find('.js-message').addClass(animationClass);\n\n\t\t//put max length\n\t\tvar maxLengthComponent = $('[js-max-length]');\n\t\tif (maxLengthComponent.length > 0) {\n\t\t\tvar maxLength = parseInt(maxLengthComponent.attr('js-max-length'));\n\t\t\tif (maxLengthComponent.text().length > maxLength) maxLengthComponent.text(maxLengthComponent.text().substring(0, maxLength).trim() + \"...\");\n\t\t}\n\n\t\tthis.initScrollToggle();\n\n\t\tglobalVars = require('./variables');\n\n\t\t$heroIntro = null;\n\t}\n};\n\nmodule.exports = heroIntro;\n\n},{\"./variables\":67}],41:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var homepage = document.getElementById('homepage'),\n\n\n //modules\n SectionNav,\n BuildVideoPlayer,\n newsletterCarousel,\n heroIntro;\n\n if (!homepage) {\n return;\n }\n\n heroIntro = require('./hero-intro');\n\n heroIntro.init();\n\n window.globalPerspectives = require('./global-perspectives');\n\n window.globalPerspectives.init();\n\n newsletterCarousel = require('./newsletter-carousel');\n\n newsletterCarousel.init();\n\n //setup video events\n var $youtubeVideos = $('.js-youtube-video');\n if ($youtubeVideos.length) {\n BuildVideoPlayer = require('./build-video-player');\n\n var pageOptions = {\n animatedSections: [$('.js-global-perspectives')],\n pauseTransitionClass: 'transition-paused'\n };\n\n BuildVideoPlayer($youtubeVideos, pageOptions);\n }\n\n //return for garbage collection\n homepage = null;\n}();\n\n},{\"./build-video-player\":26,\"./global-perspectives\":37,\"./hero-intro\":40,\"./newsletter-carousel\":49}],42:[function(require,module,exports){\n'use strict';\n\nvar impactfulCTA = function () {\n 'use strict';\n\n //Is In View Header\n\n var $impactfulCTA, initModule, setupHoverFeature, globalVars;\n\n //initialize credentials accordion if it exists\n\n setupHoverFeature = function setupHoverFeature() {\n $impactfulCTA.on('mouseenter mouseleave', '.js-hover-trigger', function (event) {\n\n if (globalVars.isIpad || globalVars.isIphone) return;\n\n switch (event.type) {\n case 'mouseenter':\n\n $impactfulCTA.addClass('is-hovered');\n\n break;\n case 'mouseleave':\n\n $impactfulCTA.removeClass('is-hovered');\n\n break;\n }\n });\n };\n\n initModule = function initModule() {\n //initialize Variables\n $impactfulCTA = $('.js-impactful-cta');\n\n if (!$impactfulCTA.length && !$impactfulCTA.find('.js-hover-trigger').length) {\n return;\n }\n //setup classes for is in view header\n globalVars = require('./variables');\n\n if ($impactfulCTA.length) {\n setupHoverFeature();\n } else {\n return;\n }\n };\n\n return {\n init: initModule\n };\n}();\n\nmodule.exports = impactfulCTA;\n\n},{\"./variables\":67}],43:[function(require,module,exports){\n'use strict';\n\nvar lazyLoad;\n\nlazyLoad = function () {\n 'use strict';\n\n var lazyLoadImages, lazyLoadBackgroundImages, initializeLazyLoad;\n\n lazyLoadImages = function lazyLoadImages($images) {\n if ($images.length) {\n\n $images.each(function (index, el) {\n var $el = $(el);\n\n $el.attr('src', $el.data('lazy-img')).attr('data-lazy-img', '');\n });\n }\n\n $images = null;\n };\n\n lazyLoadBackgroundImages = function lazyLoadBackgroundImages($images) {\n\n if ($images.length) {\n\n $images.each(function (index, el) {\n var $el = $(el);\n\n $el.attr('src', $el.data('lazy-img'));\n\n $el.css('background-image', 'url(' + $el.data('lazy-background-img') + ')').attr('lazy-background-img', '');\n });\n }\n\n $images = null;\n };\n\n initializeLazyLoad = function initializeLazyLoad() {\n\n lazyLoadImages($('[data-lazy-img]'));\n\n lazyLoadBackgroundImages($('[data-lazy-background-img]'));\n };\n\n return {\n init: initializeLazyLoad\n };\n}();\n\nmodule.exports = lazyLoad;\n\n},{}],44:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var locationDetail = document.getElementById('location-detail'),\n\n\n //modules\n ReadMore,\n pageOptions,\n locationMap,\n impactfulCTA,\n scrollspy;\n\n if (!locationDetail) {\n return;\n }\n pageOptions = {\n pageName: 'location-detail',\n searchPromoPanelID: 'search-entity-landing-promo',\n alphaSearch: false\n };\n\n //initialize overview\n ReadMore = require('./read-more');\n\n var readMoreNode = $(locationDetail).find('.js-read-more');\n\n if (readMoreNode.length) {\n new ReadMore(readMoreNode);\n }\n\n var office = window.serializedOffice;\n locationMap = require('./location-map');\n\n var mapNode = $(locationDetail).find('.js-location-header');\n if (mapNode.length) {\n pageOptions.locationMap = new locationMap(mapNode, office);\n }\n\n //vertical corner - horizontal scroller\n require('./vertical-corner').init();\n\n //scrollspy initialization\n scrollspy = require('./scrollspy');\n\n scrollspy.init();\n\n require('./scroll-on-load');\n\n impactfulCTA = require('./impactful-cta');\n\n $(function () {\n impactfulCTA.init();\n });\n\n //return for garbage collection\n locationDetail = readMoreNode = null;\n}();\n\n},{\"./impactful-cta\":42,\"./location-map\":46,\"./read-more\":54,\"./scroll-on-load\":56,\"./scrollspy\":57,\"./vertical-corner\":68}],45:[function(require,module,exports){\n'use strict';\n\nvar util = require('./location-utilities');\n\nvar LocationFilters, pageOptions, searchFiltersForm, $keywordSearch, $currentLocation, $clearAll;\n\nLocationFilters = {\n init: function init(pageConfig) {\n if (!pageConfig) {\n console.log('invalid argument, need Object supplied');\n }\n\n var _self = this;\n\n pageOptions = pageConfig;\n pageOptions.searchFormID = pageOptions.searchFormID || 'search-landing-filters';\n\n searchFiltersForm = document.getElementById(pageOptions.searchFormID);\n $keywordSearch = $(searchFiltersForm).find('.js-keyword-search').find('input');\n $currentLocation = $(searchFiltersForm).find('.js-current-location-search');\n $clearAll = $('.js-clear-map');\n\n _self.setupHandlers();\n },\n\n setupHandlers: function setupHandlers() {\n var _self = this;\n\n $keywordSearch.keypress(function (e) {\n if (e.keyCode == 13) {\n e.preventDefault();\n _self.handleFindNearestOfficeSearch();\n }\n });\n\n $currentLocation.click(function (e) {\n e.preventDefault();\n _self.handleFindNearestOfficeCurrentLocationClick();\n });\n\n $(searchFiltersForm).submit(function (e) {\n e.preventDefault();\n _self.handleFindNearestOfficeSearch();\n });\n\n $clearAll.click(function (e) {\n e.preventDefault();\n _self.resetMap();\n });\n },\n\n handleFindNearestOfficeSearch: function handleFindNearestOfficeSearch() {\n var _self = this;\n var searchQuery = $keywordSearch.val();\n\n if (searchQuery) {\n util.geocode(searchQuery, function (currentLocation) {\n var offices = pageOptions.locationMap.offices;\n util.getNearestOffice(currentLocation, offices, function (closestOffice) {\n _self.populateSearchWithCurrentLocation(currentLocation);\n pageOptions.locationMap.showOffice(closestOffice);\n });\n });\n } else {\n _self.handleFindNearestOfficeCurrentLocationClick();\n }\n },\n\n handleFindNearestOfficeCurrentLocationClick: function handleFindNearestOfficeCurrentLocationClick() {\n var _self = this;\n util.getCurrentLocation(function (currentLocation) {\n var offices = pageOptions.locationMap.offices;\n util.getNearestOffice(currentLocation, offices, pageOptions.locationMap.showOffice.bind(pageOptions.locationMap));\n });\n },\n\n populateSearchWithCurrentLocation: function populateSearchWithCurrentLocation(currentLocation) {\n util.geocode(currentLocation, function (address) {\n $('#keywordSearch').val(address);\n });\n },\n\n resetMap: function resetMap() {\n var mapModule = pageOptions.locationMap;\n\n mapModule.$Map.width('100%');\n mapModule.$LocationMap.removeClass('show-image');\n google.maps.event.trigger(window.map, 'resize');\n $keywordSearch.focus();\n window.map.setCenter({ lat: 20, lng: 0 });\n window.map.setZoom(2);\n }\n};\n\nmodule.exports = LocationFilters;\n\n},{\"./location-utilities\":47}],46:[function(require,module,exports){\n'use strict';\n\nvar util = require('./location-utilities');\n\nfunction LocationMap($node, office) {\n this.$LocationMap = $node;\n this.$Map = $node.find('.map');\n this.$locationImage = $node.find('.location-image');\n this.$officeName = this.$locationImage.find('.city-name');\n this.$address1 = this.$locationImage.find('.address-one');\n this.$address2 = this.$locationImage.find('.address-two');\n this.$address3 = this.$locationImage.find('.address-three');\n this.$address4 = this.$locationImage.find('.address-four');\n this.$phone = this.$locationImage.find('.phone');\n this.$fax = this.$locationImage.find('.fax');\n this.$searchInput = $node.find('.keyword-search-input');\n this.$getDirectionsButton = $node.find('.get-directions');\n this.$currentLocationButton = $node.find('.location-searchbox-nearest-office');\n\n this.selectedOffice;\n if (office) {\n this.selectedOffice = office;\n this.init(office);\n } else {\n this.offices = window.serializedOffices;\n this.init();\n }\n}\n\nfunction populateSearchWithCurrentLocation(currentLocation) {\n reverseGeocode(currentLocation, function (address) {\n $('.location-searchbox-input').val(address);\n });\n};\n\nLocationMap.prototype.init = function (office) {\n var _self = this;\n\n $(window).on('googleMapsLoaded', function () {\n var markerImage = {\n url: '/assets/site/public/images/map-marker.png'\n };\n var markers = [],\n infoWindows = [];\n\n if (!office) {\n for (var i = 0; i < _self.offices.length; i++) {\n var currentOffice = _self.offices[i];\n\n var marker = new google.maps.Marker({\n map: window.map,\n position: currentOffice.latLng,\n icon: markerImage\n });\n\n markers.push(marker);\n\n var content = ''.format(currentOffice.url, currentOffice.name);\n var infoWindow = new google.maps.InfoWindow();\n\n infoWindows.push(infoWindow);\n\n google.maps.event.addListener(marker, 'click', function (marker, content, infoWindow) {\n return function () {\n infoWindow.setContent(content);\n infoWindow.open(map, marker);\n };\n }(marker, content, infoWindow));\n }\n\n google.maps.event.addListener(map, 'click', function (event) {\n for (var i = 0; i < infoWindows.length; i++) {\n infoWindows[i].close();\n }\n });\n } else {\n var marker = new google.maps.Marker({\n map: window.map,\n position: office.latLng,\n icon: markerImage\n });\n\n _self.showOffice(office);\n _self.bindEvents();\n }\n });\n};\n\nLocationMap.prototype.bindEvents = function bindEvents() {\n var _self = this;\n\n this.$getDirectionsButton.click(function () {\n _self.handleSearchForDirections();\n });\n\n _self.$currentLocationButton.click(function () {\n _self.handleUseCurrentLocationClick();\n });\n};\n\nLocationMap.prototype.handleSearchForDirections = function () {\n var _self = this;\n var input = _self.$searchInput.val();\n\n if (input) {\n util.geocode(input, function (origin) {\n var destination = _self.selectedOffice.latLng;\n util.getDirections(origin, destination);\n });\n } else {\n _self.handleUseCurrentLocationClick();\n }\n};\n\nLocationMap.prototype.handleUseCurrentLocationClick = function () {\n var _self = this;\n util.getCurrentLocation(function (currentLocation) {\n var destination = _self.selectedOffice.latLng;\n util.getDirections(currentLocation, destination, populateSearchWithCurrentLocation);\n });\n};\n\nLocationMap.prototype.showOffice = function (office) {\n if (!office) return;\n\n this.$Map.width($('#locations-landing').length ? '50%' : '100%');\n\n this.$LocationMap.addClass('show-image');\n google.maps.event.trigger(window.map, 'resize');\n\n window.map.setCenter(office.latLng);\n window.map.setZoom(12);\n\n this.$locationImage.css('background-image', 'url(' + office.img + ')');\n this.$officeName.text(office.name);\n this.$officeName.attr('href', office.url);\n\n this.$address1.text(office.address);\n var formattedLocation = office.city + ', ' + office.state + ' ' + office.zip;\n this.$address2.text(formattedLocation);\n this.$address3.text(office.country);\n\n if (office.phone) {\n this.$phone.text(office.phone);\n this.$phone.attr('href', 'tel:' + office.phone);\n } else {\n this.$phone.hide();\n }\n\n if (office.fax) {\n this.$fax.text(office.fax);\n } else {\n this.$fax.hide();\n }\n};\n\nmodule.exports = LocationMap;\n\n},{\"./location-utilities\":47}],47:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n getCurrentLocation: function getCurrentLocation(callback) {\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(function (position) {\n var currentLocation = { lat: position.coords.latitude, lng: position.coords.longitude };\n callback(currentLocation);\n });\n }\n },\n\n getDirections: function getDirections(origin, destination, callback) {\n var url = 'https://www.google.com/maps/dir/{0}/{1}/'.format(origin.lat + ',' + origin.lng, destination.lat + ',' + destination.lng);\n window.open(url, 'google_directions', 'menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes');\n if (callback) callback(origin);\n },\n\n geocode: function geocode(address, callback) {\n if (geocoder) {\n geocoder.geocode({ 'address': address }, function (results, status) {\n if (status == 'OK' && results[0]) {\n var location = results[0].geometry.location;\n var resolvedCoords = { lat: location.lat(), lng: location.lng() };\n callback(resolvedCoords);\n }\n });\n }\n },\n\n reverseGeocode: function reverseGeocode(latLng, callback) {\n if (geocoder) {\n geocoder.geocode({ 'location': latLng }, function (results, status) {\n if (status == 'OK' && results[0]) {\n var resolvedLocation = results[0];\n callback(resolvedLocation.formatted_address);\n }\n });\n }\n },\n\n getNearestOffice: function getNearestOffice(currentLocation, offices, callback) {\n var _self = this;\n var mindif = 99999,\n closest;\n\n if (currentLocation) {\n for (var i = 0; i < offices.length; i++) {\n var dif = _self.PythagorasEquirectangular(currentLocation.lat, currentLocation.lng, offices[i].latLng.lat, offices[i].latLng.lng);\n if (dif < mindif) {\n closest = i;\n mindif = dif;\n }\n }\n\n if (closest || closest === 0) {\n var closestOffice = offices[closest];\n callback(closestOffice);\n }\n }\n },\n\n PythagorasEquirectangular: function PythagorasEquirectangular(lat1, lon1, lat2, lon2) {\n var _self = this;\n\n lat1 = _self.Deg2Rad(lat1);\n lat2 = _self.Deg2Rad(lat2);\n lon1 = _self.Deg2Rad(lon1);\n lon2 = _self.Deg2Rad(lon2);\n var R = 6371; // km\n var x = (lon2 - lon1) * Math.cos((lat1 + lat2) / 2);\n var y = lat2 - lat1;\n var d = Math.sqrt(x * x + y * y) * R;\n return d;\n },\n\n Deg2Rad: function Deg2Rad(deg) {\n return deg * Math.PI / 180;\n }\n};\n\n},{}],48:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var locations = document.getElementById('locations-landing'),\n\n\n //modules\n pageOptions,\n LocationLandingFilters,\n locationMap,\n impactfulCTA,\n selectDropdowns;\n\n if (!locations) {\n return;\n }\n\n pageOptions = {\n pageName: 'locations-landing',\n searchPromoPanelID: 'search-entity-landing-promo',\n alphaSearch: false\n };\n\n //attach helpers to window, and allow acccess animation interactivity within custom framework(ex. angularJS,knockout.js)\n\n locationMap = require('./location-map');\n var mapNode = $(locations).find('.location-map');\n if (mapNode.length) {\n pageOptions.locationMap = new locationMap(mapNode);\n }\n //BackEnd Developers can overwrite floowing Search landing filters, only for template specific behavior\n LocationLandingFilters = require('./location-landing-filters');\n\n LocationLandingFilters.init(pageOptions);\n\n impactfulCTA = require('./impactful-cta');\n\n $(function () {\n impactfulCTA.init();\n });\n\n //return for garbage collection\n locations = null;\n}();\n\n},{\"./impactful-cta\":42,\"./location-landing-filters\":45,\"./location-map\":46}],49:[function(require,module,exports){\n'use strict';\n\nvar newsletterCarousel,\n\n\n//module imports\ndynamicTabs = require('./dynamic-tabs');\n\nnewsletterCarousel = {\n\n\tinit: function init() {\n\n\t\tif ($('.js-newsletter-carousel').length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.tabLogic = Object.create(dynamicTabs);\n\n\t\tthis.tabLogic.init($('.js-newsletter-carousel'), {\n\t\t\ttransitionTiming: 350,\n\t\t\tbeltWrapperClass: 'js-newsletter-slides',\n\t\t\tpanelActiveClass: 'is-issue-shown',\n\t\t\tnavClass: 'newsletter-carousel-nav',\n\t\t\tnavDirection: 'vertical',\n\t\t\tnavBtnClass: 'newsletter-carousel-btn',\n\t\t\ttabActiveClass: 'is-selected'\n\t\t});\n\t}\n};\n\nmodule.exports = newsletterCarousel;\n\n},{\"./dynamic-tabs\":34}],50:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function () {\n \"use strict\";\n\n var perspectivesDetail = document.getElementById(\"perspectives-detail\"),\n ReadMore,\n Scrollspy;\n\n if (!perspectivesDetail) {\n return;\n }\n\n // Initialize overview\n ReadMore = require(\"./read-more\");\n var readMoreNode = $(perspectivesDetail).find(\".js-read-more\");\n\n if (readMoreNode.length) {\n new ReadMore(readMoreNode);\n }\n\n window.stickyShare = require('./sticky-share');\n\n window.stickyShare.init();\n\n // Initialize scrollspy\n Scrollspy = require(\"./scrollspy\");\n Scrollspy.init();\n\n require(\"./reader-progress\").init();\n\n perspectivesDetail = null;\n}();\n\n},{\"./read-more\":54,\"./reader-progress\":55,\"./scrollspy\":57,\"./sticky-share\":63}],51:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var professionalDetail = document.getElementById('professional-detail'),\n\n\n //modules\n ReadMore,\n Accordion,\n scrollspy,\n capabilitiesCompact;\n\n if (!professionalDetail) {\n return;\n }\n\n //initialize overview\n ReadMore = require('./read-more');\n\n var readMoreNodes = $(professionalDetail).find('.js-read-more');\n\n if (readMoreNodes.length) {\n $.each(readMoreNodes, function (index, item) {\n new ReadMore($(item));\n });\n }\n\n //initialize credentials accordion if it exists\n Accordion = require('./accordion');\n\n var $credentialsAccordion = $(professionalDetail).find('.js-accordion');\n\n if ($credentialsAccordion.length) {\n new Accordion($credentialsAccordion);\n }\n\n //scrollspy initialization\n scrollspy = require('./scrollspy');\n scrollspy.init();\n\n // Ensure Flex Area menu option populated\n var flexAreaLink = document.querySelector(\"a[href='#flex-area']\");\n var $label = $(flexAreaLink).find('.scrollspy-nav-label');\n\n if ($label.length) {\n var lawyerHeader = document.getElementsByClassName('lawyerHeader')[0];\n var sectionHeader = document.getElementsByClassName('flex-area-title')[0];\n\n var labelText = \"\";\n\n if (sectionHeader) {\n labelText = sectionHeader.textContent;\n }\n\n if (!!lawyerHeader) {\n if (labelText == \"\") {\n labelText = lawyerHeader.textContent;\n }\n $label.text(labelText);\n $label.attr('title', 'Jump to ' + lawyerHeader.textContent + ' Section');\n $(flexAreaLink).attr('title', 'Jump to ' + lawyerHeader.textContent + ' Section');\n }\n }\n\n capabilitiesCompact = require('./capabilities-compact');\n capabilitiesCompact.init();\n\n if ($('main#professional-detail')) {\n window.addEventListener('keydown', function (event) {\n if (!window.getQueryString('p') && (event.ctrlKey || event.metaKey) && String.fromCharCode(event.which).toLowerCase() == 'p') {\n event.preventDefault();\n window.reloadWithQueryStringVars({ 'print': 1 });\n }\n });\n }\n\n require('./scroll-on-load');\n\n //return for garbage collection\n professionalDetail = readMoreNodes = null;\n}();\n\n},{\"./accordion\":21,\"./capabilities-compact\":27,\"./read-more\":54,\"./scroll-on-load\":56,\"./scrollspy\":57}],52:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var professionals = document.getElementById('professionals-landing'),\n\n\n //modules\n pageOptions,\n searchLandingFilters,\n selectDropdowns;\n\n if (!professionals) {\n return;\n }\n\n pageOptions = {\n pageName: 'professionals-landing',\n searchPromoPanelID: 'search-entity-landing-promo',\n searchResultsID: 'search-entity-landing-results',\n alphaSearch: true\n };\n\n //attach helpers to window, and allow acccess animation interactivity within custom framework(ex. angularJS,knockout.js)\n window.animationSearchHelpers = require('./animation-search-helpers');\n window.animationSearchHelpers.init(pageOptions);\n\n //BackEnd Developers can overwrite floowing Search landing filters, only for template specific behavior\n searchLandingFilters = require('./search-landing-filters');\n searchLandingFilters.init(pageOptions);\n\n //initiate selectdropdowns\n selectDropdowns = require('./select-dropdown');\n\n var $dropdowns = $(professionals).find('.js-select-dropdown');\n\n selectDropdowns($dropdowns, function selectDropdownCallback($selectEl, $selectedItem) {\n\n if (!!$selectedItem) {\n window.animationSearchHelpers.applySelectedFilter($selectedItem.text());\n }\n });\n\n window.BuildVideoPlayer = require('./build-video-player');\n\n //back to gc\n $dropdowns = null;\n\n //return for garbage collection\n professionals = null;\n}();\n\n},{\"./animation-search-helpers\":23,\"./build-video-player\":26,\"./search-landing-filters\":58,\"./select-dropdown\":59}],53:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n if (!String.prototype.format) {\n String.prototype.format = function () {\n var args = arguments;\n return this.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] != 'undefined' ? args[number] : match;\n });\n };\n }\n\n if (!Array.prototype.pushArray) {\n Array.prototype.pushArray = function () {\n var toPush = this.concat.apply([], arguments);\n for (var i = 0, len = toPush.length; i < len; ++i) {\n this.push(toPush[i]);\n }\n };\n }\n\n // Mozilla MDN Polyfill: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find#Polyfill\n if (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, \"find\", {\n value: function value(predicate) {\n if (this === null) {\n throw new TypeError('Array.prototype.find called on null or undefined');\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n var list = Object(this);\n var length = list.length >>> 0;\n var thisArg = arguments[1];\n var value;\n\n for (var i = 0; i < length; i++) {\n value = list[i];\n if (predicate.call(thisArg, value, i, list)) {\n return value;\n }\n }\n return undefined;\n }\n });\n }\n\n if (!Array.prototype.copy) {\n Object.defineProperty(Array.prototype, 'copy', {\n value: function value() {\n if (this === null || this === undefined) {\n throw new TypeError('Array.prototype.copy called on null or undefined');\n }\n var array = Object(this);\n return JSON.parse(JSON.stringify(array));\n }\n });\n }\n\n if (!Array.prototype.remove) {\n Object.defineProperty(Array.prototype, 'remove', {\n value: function value(item) {\n if (this === null || this === undefined) {\n throw new TypeError('Array.prototype.copy called on null or undefined');\n }\n var array = Object(this);\n var index = array.indexOf(item);\n if (index > -1) {\n array.splice(index, 1);\n }\n }\n });\n }\n}();\n\n},{}],54:[function(require,module,exports){\n'use strict';\n\nfunction ReadMore($expandNode) {\n this.$ReadMore = $expandNode;\n this.$trigger = this.$ReadMore.find('.js-toggle-btn');\n this.$contentCollapsed = this.$ReadMore.find('.js-full-copy');\n this.labelCollapsed = this.$contentCollapsed.data('label-more');\n this.labelExpanded = this.$contentCollapsed.data('label-less');\n this.visibility = false;\n this.activeClass = 'is-expanded';\n this.animationSpeed = 350;\n this.scrollUpOnCollapse = false;\n\n this.bindEvents();\n}\n\nReadMore.prototype.expandContent = function readMore() {\n this.visibility = true;\n\n this.$contentCollapsed.slideDown(this.animationSpeed, function () {\n if (window.stickyShare !== undefined) {\n window.stickyShare.update();\n }\n }).attr('aria-expanded', true).attr('aria-hidden', false).attr('tabindex', -1).focus();\n\n this.$trigger.addClass(this.activeClass).attr('aria-expanded', true).find('.btn-ghost-label').text(this.labelExpanded);\n};\n\nReadMore.prototype.collapseContent = function readLess() {\n\n var _self = this;\n\n this.visibility = false;\n\n this.$contentCollapsed.slideUp(this.animationSpeed, function () {\n if (window.stickyShare !== undefined) {\n window.stickyShare.update();\n }\n }).attr('aria-expanded', false).attr('aria-hidden', true).attr('tabindex', -1);\n\n this.$trigger.removeClass(this.activeClass).attr('aria-expanded', false).find('.btn-ghost-label').text(_self.labelCollapsed);\n\n if (this.scrollUpOnCollapse) {\n $('body,html').animate({ scrollTop: this.$ReadMore.offset().top }, this.animationSpeed);\n }\n};\n\nReadMore.prototype.toggleVisibility = function toggle() {\n this.visibility === true ? this.collapseContent() : this.expandContent();\n};\n\nReadMore.prototype.bindEvents = function bindEvents() {\n\n var _self = this;\n\n this.scrollUpOnCollapse = this.$ReadMore.data('scroll-on-collapse');\n\n _self.$trigger.on('click.ReadMore', function (ev) {\n ev.preventDefault();\n\n _self.toggleVisibility();\n });\n};\n\nmodule.exports = ReadMore;\n\n},{}],55:[function(require,module,exports){\n'use strict';\n\nvar $readerProgress,\n $readerProgressBar,\n $progressBody,\n\n//offsets/classes\nheaderOffsets,\n stickyClass = 'reader-progress--sticky',\n\n\n//magic controller\nmagicController,\n sceneCollection,\n\n\n//modules\nglobalVars,\n readerProgress;\n\nreaderProgress = {\n stickyMenuInit: function stickyMenuInit(headerOffsets) {\n sceneCollection['reader'] = new ScrollMagic.Scene({\n triggerElement: $readerProgress[0],\n triggerHook: 0,\n offset: headerOffsets\n }).setClassToggle($readerProgress[0], stickyClass).addTo(magicController);\n },\n magicSceneInit: function magicSceneInit() {\n sceneCollection['reader-body'] = new ScrollMagic.Scene({\n triggerElement: $progressBody[0],\n triggerHook: 1,\n duration: function duration() {\n return $progressBody.outerHeight();\n }\n }).on('progress', function (e) {\n $readerProgressBar.width(e.progress.toFixed(2) * 100 + '%');\n })\n // .addIndicators()\n .addTo(magicController);\n },\n init: function init() {\n //globalVariables\n globalVars = require('./variables');\n\n magicController = globalVars.magicController;\n sceneCollection = globalVars.sceneCollection;\n\n //initialize elements;\n $readerProgress = $('.js-reader-progress');\n $readerProgressBar = $readerProgress.find('.js-reader-progress__bar');\n $progressBody = $('.js-reader-progress-body');\n\n headerOffsets = (globalVars.isMobile ? globalVars.elementStates.headerHeight * -1 : 0) - 30;\n\n this.stickyMenuInit(headerOffsets);\n this.magicSceneInit();\n }\n};\n\nmodule.exports = readerProgress;\n\n},{\"./variables\":67}],56:[function(require,module,exports){\n'use strict';\n\nvar globalVars = require('./variables'),\n scrollToSection = window.getQueryString('section');\n\nif (scrollToSection) {\n\tvar counter = 0;\n\tvar scrollChecker = setInterval(function () {\n\t\tif (counter > 10) clearInterval(scrollChecker);\n\n\t\tif (window.vueAppsLoaded()) {\n\t\t\tclearInterval(scrollChecker);\n\n\t\t\tvar sectionId = '#' + scrollToSection,\n\t\t\t $section = $(sectionId);\n\n\t\t\tif ($section.length) {\n\t\t\t\tvar sectionOffset = $section.offset().top;\n\t\t\t\tif (globalVars.isMobile) {\n\t\t\t\t\tsectionOffset = sectionOffset - 70;\n\t\t\t\t}\n\n\t\t\t\t$('html,body').animate({\n\t\t\t\t\tscrollTop: sectionOffset\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t} else {\n\t\t\tcounter++;\n\t\t}\n\t}, 100);\n}\n\n},{\"./variables\":67}],57:[function(require,module,exports){\n'use strict';\n\nvar $scrollspy,\n $menu,\n $menuItems,\n $navList,\n $navLinks,\n $scrollSections,\n $mobileToggle,\n nodeCollection,\n\n\n//offsets/classes\nheaderOffsets,\n activeNavClass,\n mobileToggleClass,\n removeExposedNavOnce = false,\n\n\n//magic controller\nmagicController,\n sceneCollection,\n\n\n//modules\nglobalVars,\n windowResize,\n scrollspy;\n\nscrollspy = {\n stickyMenuInit: function stickyMenuInit(headerOffsets) {\n sceneCollection['sticky-menu'] = new ScrollMagic.Scene({\n triggerElement: $scrollspy[0],\n triggerHook: 0,\n offset: headerOffsets,\n duration: function duration() {\n return Math.ceil($scrollspy.height()) - Math.ceil($menu.outerHeight());\n }\n }).on('enter leave', function (e) {\n e.type === 'enter' ? $menu.addClass('is-sticky') : $menu.removeClass('is-sticky');\n }).on('end', function (e) {\n e.state === 'AFTER' ? $menu.addClass('is-sticky-bottom') : $menu.removeClass('is-sticky-bottom');\n })\n //.addIndicators()\n .addTo(magicController);\n\n //setup initial state\n $menuItems.eq(0).addClass(activeNavClass);\n },\n\n scrollToSection: function scrollToSection(sectionName) {\n var $sectionModule = nodeCollection[sectionName].module,\n sectionOffset = $sectionModule.offset().top,\n finalOffset = sectionOffset + headerOffsets;\n\n var sectionId = $sectionModule.attr('id');\n var updatedUrl = window.updateQueryString(window.location.href, 'section', sectionId);\n window.history.pushState({ section: sectionId }, sectionId, updatedUrl);\n\n if (globalVars.isMobile) {\n finalOffset = finalOffset - 70;\n } //magic number is height of subnavigation;\n\n $('html,body').animate({ scrollTop: finalOffset }, 500, function () {\n $sectionModule[0].focus();\n });\n },\n\n magicSceneInit: function magicSceneInit() {\n var updateNavStatus,\n addMagicSceneSection,\n resizeMagicLogic,\n _self = this;\n\n //updating navigation\n updateNavStatus = function updateNavStatus(sectionName) {\n $menuItems.removeClass(activeNavClass);\n\n if (!!sectionName) {\n nodeCollection[sectionName].navItem.addClass(activeNavClass);\n }\n\n $mobileToggle.text(nodeCollection[sectionName].navItem.text());\n };\n\n addMagicSceneSection = function addMagicSceneSection(key) {\n\n var moduleName = key;\n\n sceneCollection[moduleName + 'scene'] = new ScrollMagic.Scene({\n triggerElement: nodeCollection[moduleName].module[0],\n duration: function duration() {\n return nodeCollection[moduleName].module.outerHeight();\n }\n }).on('enter', function () {\n updateNavStatus(moduleName);\n })\n // .addIndicators()\n .addTo(magicController);\n };\n\n Object.keys(nodeCollection).forEach(function (key, index) {\n addMagicSceneSection(key);\n });\n\n //dont need sections anymore, have it garbage collected;\n addMagicSceneSection = null;\n },\n\n menuEventsInit: function menuEventsInit() {\n var _self = this;\n $menu.on('click.scrollspy', '.js-link', function (ev) {\n\n ev.stopPropagation();\n ev.preventDefault();\n\n var sectionID = this.getAttribute('href');\n\n sectionID = sectionID.slice(1).toLowerCase();\n\n _self.scrollToSection(sectionID);\n\n if ($menu.hasClass(mobileToggleClass)) {\n $menu.removeClass(mobileToggleClass).find('.scrollspy-nav-list').attr('aria-hidden', 'true');\n\n $(this).attr('aria-expanded', 'false');\n }\n });\n\n //mobile toggle\n $mobileToggle.on('click', function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n\n if ($menu.hasClass(mobileToggleClass)) {\n $menu.removeClass(mobileToggleClass);\n $navList.attr('aria-hidden', true);\n $navLinks.attr('tabindex', -1);\n $mobileToggle.attr('aria-expanded', 'false');\n } else {\n $menu.addClass(mobileToggleClass);\n $navList.attr('aria-hidden', false);\n $navLinks.attr('tabindex', 0);\n $mobileToggle.attr('aria-expanded', 'true');\n }\n });\n },\n onMobileBreakpointCrossed: function onMobileBreakpointCrossed(isMobile) {\n if (isMobile) {\n // dropdown menu display\n if ($menu.hasClass(mobileToggleClass)) {\n // dropdown menu is open\n $navList.attr('aria-hidden', false);\n $navLinks.attr('tabindex', 0);\n $mobileToggle.attr('aria-expanded', 'true');\n } else {\n // dropdown menu is closed\n $navList.attr('aria-hidden', true);\n $navLinks.attr('tabindex', -1);\n $mobileToggle.attr('aria-expanded', 'false');\n }\n } else {\n // horizontal menu display (always open)\n $navList.removeAttr('aria-hidden');\n $navLinks.removeAttr('tabindex');\n $mobileToggle.attr('aria-expanded', 'true');\n }\n },\n init: function init() {\n\n var populateNodeCollection;\n\n //globalVariables\n globalVars = require('./variables');\n\n magicController = globalVars.magicController;\n sceneCollection = globalVars.sceneCollection;\n\n //initialize elements;\n $scrollspy = $('.js-scrollspy');\n $menu = $scrollspy.find('.js-scrollspy-nav');\n $menuItems = $menu.find('.js-option');\n $navList = $menu.find('.scrollspy-nav-list');\n $navLinks = $navList.find('.scrollspy-nav-link');\n $scrollSections = $scrollspy.find('.js-scrollspy-section');\n $mobileToggle = $menu.find('.js-nav-toggle');\n\n //variables\n activeNavClass = 'is-inview';\n mobileToggleClass = 'show-menu';\n headerOffsets = globalVars.elementStates.headerHeight * -1 - 20;\n\n nodeCollection = {};\n\n populateNodeCollection = function populateNodeCollection($sectionNode) {\n $sectionNode.attr('tabindex', -1);\n var sectionID = $sectionNode[0].getAttribute('id'),\n $navNode = $menuItems.filter(function (index) {\n\n var hrefAttribute = $(this).find('.js-link')[0].getAttribute('href');\n\n return sectionID === hrefAttribute.slice(1);\n });\n\n nodeCollection[sectionID] = {\n module: $sectionNode,\n navItem: $navNode\n };\n };\n\n for (var i = $scrollSections.length - 1; i >= 0; i--) {\n populateNodeCollection($scrollSections.eq(i));\n }\n\n var mqList = window.matchMedia('(max-width: 759px)');\n mqList.addListener(function (e) {\n this.onMobileBreakpointCrossed(e.matches);\n }.bind(this));\n this.onMobileBreakpointCrossed(mqList.matches);\n\n populateNodeCollection = $scrollSections = null;\n\n this.stickyMenuInit(headerOffsets);\n this.menuEventsInit();\n this.magicSceneInit();\n }\n};\n\nmodule.exports = scrollspy;\n\n},{\"./variables\":67}],58:[function(require,module,exports){\n'use strict';\n\nvar searchFiltersForm, pageOptions, $keywordSearch, $clearAll, focusableSelector, SearchLandingFilters;\n\nSearchLandingFilters = {\n initAlphaOptions: function initAlphaOptions() {\n var _self = this;\n\n $(searchFiltersForm).find('.js-alpha-search').on('click', '.js-alpha-letter', function (ev) {\n ev.preventDefault();\n\n var $this = $(this);\n\n if ($this.hasClass('is-selected')) {\n $this.removeClass('is-selected');\n return;\n }\n\n // This code can be replaced with framework of choice\n _self.handleContentDisplay();\n });\n },\n\n handleContentDisplay: function handleContentDisplay() {\n var searchResultsContent = document.getElementById(pageOptions.searchResultsID);\n\n searchResultsContent.getAttribute('aria-hidden') === 'true' ? window.animationSearchHelpers.transitionFromDefaultToResults() : window.animationSearchHelpers.showSearchResults();\n\n searchResultsContent = null;\n },\n\n handleKeywordInputs: function handleKeywordInputs() {\n $keywordSearch.each(function (index, el) {\n if (!!$(el).val()) {\n window.animationSearchHelpers.applySelectedFilter($(el).val());\n }\n });\n },\n\n initClearAllEvent: function initClearAllEvent() {\n $clearAll.on('click.clearResults', function (ev) {\n ev.stopPropagation();\n window.animationSearchHelpers.transitionToSearchDefault();\n });\n },\n\n transitionToSearchDefault: function transitionToSearchDefault() {\n window.animationSearchHelpers.transitionToSearchDefault();\n },\n\n advancedSearchInit: function advancedSearchInit() {\n var $advancedFilters = $(searchFiltersForm).find('.js-advanced-filters');\n\n $advancedFilters.on('click', '.js-categories-trigger', function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n\n $(this).toggleClass('is-expanded');\n });\n },\n\n initSubmitEvent: function initSubmitEvent() {\n var _self = this;\n\n $(searchFiltersForm).submit(function (ev) {\n ev.preventDefault();\n\n _self.handleContentDisplay();\n _self.handleKeywordInputs();\n });\n },\n\n // $('');\n\n setDropdownAccessibility: function setDropdownAccessibility() {\n var tablet = window.matchMedia('(max-width: 56.1875em)');\n if (tablet.matches) {\n $('.js-categories').attr('aria-hidden', true).find(focusableSelector).attr('tabindex', -1);\n } else {\n $('.js-categories').attr('aria-hidden', false).find(focusableSelector).attr('tabindex', 0);\n }\n },\n\n init: function init(pageConfig) {\n if (!pageConfig) {\n console.log('invalid argument, need Object supplied');\n }\n\n pageOptions = pageConfig;\n pageOptions.searchFormID = pageOptions.searchFormID || 'search-landing-filters';\n\n searchFiltersForm = document.getElementById(pageOptions.searchFormID);\n\n // Assign jQuery elements\n $keywordSearch = $(searchFiltersForm).find('.js-keyword-search').find('input');\n $clearAll = $('.js-applied-filters').find('.js-filter-clear');\n focusableSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]';\n\n this.initSubmitEvent();\n this.advancedSearchInit();\n this.setDropdownAccessibility();\n $(window).resize(this.setDropdownAccessibility);\n\n var _self = this;\n\n if (!!pageOptions.alphaSearch) {\n this.initAlphaOptions();\n }\n }\n};\n\nmodule.exports = SearchLandingFilters;\n\n},{}],59:[function(require,module,exports){\n\n'use strict';\n\nvar updateFacadeText, initializeDropdowns, focusOnDropdown, runCallback;\n\nupdateFacadeText = function updateFacadeText(selectLabel) {\n var $this = $(this),\n $selectedItem,\n $selectLabel,\n currentText;\n\n $selectedItem = $this.find(':selected');\n\n if (!$selectedItem.length) {\n return;\n }\n\n // get the facade element used to display\n // the text of the selected option\n $selectLabel = $this.siblings(selectLabel);\n\n // get 'value' attribute value for selected option\n currentText = $selectedItem.text();\n\n // update select text label with current selected option value\n if ($selectLabel.length && currentText.length) {\n $selectLabel.text(currentText);\n }\n};\n\nfocusOnDropdown = function focusOnDropdown() {\n var $dropdownToggle = $(this);\n\n $dropdownToggle.next().focus();\n};\n\nrunCallback = function runCallback(callback) {\n var $this = $(this),\n $selectedItem = $this.find(':selected');\n\n callback($this, $selectedItem);\n};\n\ninitializeDropdowns = function initializeDropdowns($selectDropdowns, callback) {\n var $dropdowns = $selectDropdowns,\n eventNamespace = '.selectDropdown',\n eventToggleNamespace = '.toggleDropdown';\n\n $dropdowns.off('change' + eventNamespace).on('change' + eventNamespace, '.select-dropdown-select', function () {\n\n updateFacadeText.call(this, '.select-dropdown-toggle');\n\n if (typeof callback === 'function') {\n runCallback.call(this, callback);\n }\n });\n\n $dropdowns = null;\n};\n\nmodule.exports = initializeDropdowns;\n\n},{}],60:[function(require,module,exports){\n'use strict';\n\nvar sideNav = function () {\n 'use strict';\n\n var $sideNav, $currentChildPage, initModule, initialized, setupDesktopLogic, setupMobileLogic, isChildPage, openParentAccordion, globalVars, ToggleMenu, Accordion;\n\n setupDesktopLogic = function setupDesktopLogic() {\n Accordion = require('./accordion');\n\n new Accordion($sideNav.find('.js-sidenav-list'));\n\n if (isChildPage()) {\n openParentAccordion($currentChildPage);\n }\n };\n\n setupMobileLogic = function setupMobileLogic() {\n ToggleMenu = require('./toggle-menu');\n\n new ToggleMenu($sideNav, {\n triggerClass: 'js-mobile-toggle',\n expandableMenu: 'js-sidenav-list',\n showOptions: 'show-menu'\n });\n };\n\n initModule = function initModule() {\n if (initialized) {\n return;\n }\n\n initialized = true;\n $sideNav = $('.js-sidenav');\n $currentChildPage = $(\".sidenav-currently-featured-page\")[0];\n globalVars = require('./variables');\n\n setupDesktopLogic();\n setupMobileLogic();\n };\n\n isChildPage = function isChildPage() {\n return typeof $currentChildPage !== 'undefined';\n };\n\n openParentAccordion = function openParentAccordion(element) {\n var $content = $(element).parent().hasClass('sidenav-grandchildren') ? $(element).closest('.js-accordion-content') : $(element).parent('.js-accordion-content');\n\n $content.siblings('.sidenav-section-header').children('.js-accordion-trigger').click();\n };\n\n return {\n init: initModule\n };\n}();\n\nmodule.exports = sideNav;\n\n},{\"./accordion\":21,\"./toggle-menu\":64,\"./variables\":67}],61:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var siteSearchResults = document.getElementById('site-search-results');\n\n if (!siteSearchResults) {\n return;\n }\n\n // Include large polygon\n require('./angled-polygon');\n\n // Return for garbage collection\n siteSearchResults = null;\n}();\n\n},{\"./angled-polygon\":22}],62:[function(require,module,exports){\n'use strict';\n\n//globalVariables\n\nvar globalVars = require('./variables');\nfunction SliderCarousel($carousel) {\n this.$Carousel = $carousel;\n this.$dotsContainer = this.$Carousel.find('.js-dots');\n this.$slides = this.$Carousel.find('.js-slides');\n this.$container = this.$Carousel.find('.js-slide-container');\n this.dotsHtml = \"\";\n this.margin = 20;\n this.activeClass = 'active';\n this.animationSpeed = 350;\n this.slideIndex = 0;\n\n this.init();\n this.bindEvents();\n}\nSliderCarousel.prototype.init = function () {\n this.adjustSlides();\n this.adjustDots();\n this.moveToSlide(this.slideIndex);\n};\nSliderCarousel.prototype.adjustSlides = function Carousel() {\n var width = this.$Carousel.width();\n if (globalVars.isMobile) {\n //only show one slide at a time\n this.$slides.width(width);\n this.$container.width(width * this.$slides.length);\n } else {\n //two slides visible\n this.$slides.width(width / 2 - this.margin);\n this.$container.width(width * this.$slides.length / 2 + 20);\n }\n};\n\nSliderCarousel.prototype.adjustDots = function () {\n this.$dotsContainer.empty();\n var numDots = this.$slides.length;\n if (!globalVars.isMobile) {\n //only show one slide at a time\n numDots = Math.ceil(numDots / 2);\n }\n var self = this;\n for (var i = 0; i < numDots; i++) {\n var $dot = $(this.dotsHtml);\n $dot.attr('data-index', i);\n if (this.slideIndex == i) {\n $dot.addClass(this.activeClass);\n }\n this.$dotsContainer.append($dot);\n }\n this.$dots = this.$dotsContainer.find('.js-dot');\n this.$dots.click(function () {\n var $this = $(this);\n self.moveToSlide($this.data('index'));\n });\n //make sure slideIndex isn't out of bounds\n this.slideIndex = this.slideIndex > this.$dots.length ? Math.floor(this.slideIndex / 2) : this.slideIndex;\n};\n\nSliderCarousel.prototype.moveToSlide = function (slideIndex) {\n this.slideIndex = slideIndex;\n this.$container.animate({\n right: slideIndex * this.$Carousel.width()\n }, 500);\n this.$dots.removeClass(this.activeClass);\n $(this.$dots[this.slideIndex]).addClass(this.activeClass);\n};\n\nSliderCarousel.prototype.bindEvents = function () {\n\n var _self = this;\n\n globalVars.windowResize.add(function () {\n _self.init();\n });\n};\n\nmodule.exports = SliderCarousel;\n\n},{\"./variables\":67}],63:[function(require,module,exports){\n'use strict';\n\nvar stickyShare = function () {\n 'use strict';\n\n //Is In View Header\n\n var $stickyMenu,\n $stickyModule,\n stickyOffset,\n anchoredBottomOffset,\n paddingTopOnceSticky = 25,\n isStickyClass = 'is-sticky',\n isAnchoredBottomClass = 'is-anchored-bottom',\n pageOffset,\n rAFTicker = false,\n globalVars,\n setupWindowOffsets,\n initPageScroll,\n initModule;\n\n setupWindowOffsets = function setupOffsets() {\n\n stickyOffset = $stickyModule.offset().top - globalVars.elementStates.headerHeight - paddingTopOnceSticky;\n\n anchoredBottomOffset = Math.ceil($stickyModule.height()) - Math.ceil($stickyMenu.height()) + stickyOffset;\n };\n\n initPageScroll = function initPageScroll() {\n\n /*=============================================\r\n = REquestion animation Frame =\r\n =============================================*/\n\n function windowScrollLogic() {\n pageOffset = window.pageYOffset;\n\n if (pageOffset >= stickyOffset) {\n\n $stickyMenu.addClass(isStickyClass);\n\n pageOffset >= anchoredBottomOffset ? $stickyMenu.addClass(isAnchoredBottomClass) : $stickyMenu.removeClass(isAnchoredBottomClass);\n } else {\n $stickyMenu.removeClass(isStickyClass + ' ' + isAnchoredBottomClass);\n }\n\n rAFTicker = false;\n }\n\n function requestTicker() {\n if (!rAFTicker) {\n requestAnimationFrame(windowScrollLogic);\n rAFTicker = true;\n }\n }\n\n function attachScrollEvent() {\n // only listen for scroll events\n window.addEventListener('scroll', requestTicker, false);\n }\n\n function removeScrollEvent() {\n //remove ScrollEvent\n window.removeEventListener('scroll', requestTicker, false);\n }\n\n //setup initial values\n attachScrollEvent();\n\n /*===== End RAF Animation ======*/\n };\n\n initModule = function initModule() {\n\n //initialize Variables\n $stickyModule = $('.js-sticky-share');\n $stickyMenu = $stickyModule.find('.js-sticky-share-tools');\n\n //setup classes for is in view header\n globalVars = require('./variables');\n\n //Dom Ready\n document.addEventListener('DOMContentLoaded', function () {\n\n setTimeout(function () {\n setupWindowOffsets();\n initPageScroll();\n }, 10);\n });\n\n globalVars.windowResize.add(function () {\n setupWindowOffsets();\n });\n };\n\n return {\n init: initModule,\n update: setupWindowOffsets\n };\n}();\n\nmodule.exports = stickyShare;\n\n},{\"./variables\":67}],64:[function(require,module,exports){\n'use strict';\n\nfunction ToggleMenu(toggleEl, classOptions) {\n\n this.$toggleMenu = toggleEl;\n this.$expandableMenu = this.$toggleMenu.find('.' + classOptions.expandableMenu);\n\n this.classNames = classOptions || {\n triggerClass: 'js-trigger',\n expandableMenu: 'js-menu',\n showOptions: 'show-menu',\n navOptionsClass: 'js-option',\n selectedOptionClass: 'is-selected',\n navOptions: 'js-nav',\n updateToggleLabel: false\n };\n\n this.bindEvents();\n}\n\nToggleMenu.prototype.updateMobileLabel = function mobileLabel($navNode) {\n this.$toggleMenu.find('.' + this.classNames.triggerClass).text($navNode.text());\n};\n\nToggleMenu.prototype.updateNavState = function updateClasses($navOption) {\n\n this.$toggleMenu.find('.' + this.classNames.selectedOptionClass).removeClass(this.classNames.selectedOptionClass);\n\n $navOption.parent().addClass(this.classNames.selectedOptionClass);\n\n if (this.classNames.updateToggleLabel) {\n\n this.updateMobileLabel($navOption);\n }\n};\n\nToggleMenu.prototype.toggleMenu = function toggleMenu() {\n var _self = this;\n\n if (_self.$toggleMenu.data('is-expanded')) {\n\n _self.$toggleMenu.removeClass(_self.classNames.showOptions);\n\n _self.$toggleMenu.attr('aria-expanded', false).data('is-expanded', false);\n\n var $trigger = $('.' + _self.classNames.triggerClass);\n $trigger.attr('aria-expanded', false);\n\n var $expandableMenu = $('.' + _self.classNames.expandableMenu);\n $expandableMenu.attr('aria-hidden', true);\n\n var $navOptions = $('.' + _self.classNames.navOptions);\n $navOptions.attr('tabindex', -1);\n } else {\n _self.$toggleMenu.addClass(_self.classNames.showOptions);\n\n _self.$toggleMenu.attr('aria-expanded', true).data('is-expanded', true);\n\n var $trigger = $('.' + _self.classNames.triggerClass);\n $trigger.attr('aria-expanded', true);\n\n var $expandableMenu = $('.' + _self.classNames.expandableMenu);\n $expandableMenu.attr('aria-hidden', false);\n\n var $navOptions = $('.' + _self.classNames.navOptions);\n $navOptions.attr('tabindex', 1);\n }\n};\n\nToggleMenu.prototype.bindEvents = function bind() {\n var _self = this;\n\n //set data attribute to keep track of if toggle is expanded or not\n if (typeof _self.$toggleMenu.data('is-expanded') === 'undefined') {\n\n _self.$toggleMenu.data('is-expanded', false);\n }\n\n if (_self.$toggleMenu.data('is-expanded')) {\n\n //set active class if expanded by default\n _self.$toggleMenu.addClass(_self.classNames.showOptions);\n }\n\n //Initialize event listeners to the toggle button and navigation items\n _self.$toggleMenu.on('click.toggleMenu', '.' + _self.classNames.triggerClass, function (ev) {\n ev.stopPropagation();\n\n _self.toggleMenu();\n });\n\n if (_self.classNames.navOptionsClass) {\n _self.$toggleMenu.on('click.toggleMenuButtons', '.' + _self.classNames.navOptionsClass, function (ev) {\n ev.stopPropagation();\n\n _self.toggleMenu();\n _self.updateNavState($(this));\n });\n }\n};\n\nmodule.exports = ToggleMenu;\n\n},{}],65:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n 'use strict';\n\n var topicDetail = document.getElementById('topic-detail'),\n\n\n //modules\n scrollspy;\n\n if (!topicDetail) {\n return;\n }\n\n //scrollspy initialization\n scrollspy = require('./scrollspy');\n scrollspy.init();\n require('./scroll-on-load');\n}();\n\n},{\"./scroll-on-load\":56,\"./scrollspy\":57}],66:[function(require,module,exports){\n'use strict';\n\nwindow.vueAppStates = { relatedExperience: false, perspectivesNewsEvents: false };\n\nwindow.vueAppsLoaded = function () {\n var relatedExperience = document.getElementById('related-experience-app');\n var perspectivesNewsEvents = document.getElementById('related-articles-app');\n\n if (relatedExperience || perspectivesNewsEvents) {\n for (var key in window.vueAppStates) {\n if (!window.vueAppStates[key]) return false;\n }\n }\n\n return true;\n};\n\n//helper functions\nwindow.helperUtils = {\n getDocDimen: function getDocDimen() {\n var winDimen = {};\n\n winDimen.height = window.innerHeight;\n winDimen.width = window.innerWidth;\n\n return winDimen;\n }\n};\n\nwindow.parseQueryString = function (str) {\n if (typeof str !== 'string') {\n return {};\n }\n str = str.trim().replace(/^\\?/, '');\n if (!str) {\n return {};\n }\n return str.trim().split('&').reduce(function (ret, param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n ret[parts[0]] = parts[1] === undefined ? null : decodeURIComponent(parts[1]);\n return ret;\n }, {});\n};\n\nwindow.getQueryParams = function () {\n var search = window.location.search.substring(1);\n return search ? JSON.parse('{\"' + search.replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}', function (key, value) {\n return key === \"\" ? value : decodeURIComponent(value);\n }) : {};\n};\n\n/**\r\n * Get the value of a querystring\r\n * @param {String} field The field to get the value of\r\n * @param {String} url The URL to get the value from (optional)\r\n * @return {String} The field value\r\n */\nwindow.getQueryString = function (field, url) {\n var href = url ? url : window.location.href;\n var reg = new RegExp('[?&]' + field + '=([^&#]*)', 'i');\n var string = reg.exec(href);\n return string ? string[1] : null;\n};\n\nwindow.updateQueryString = function (uri, key, value) {\n // Remove the hash before operating on the URL\n var i = uri.indexOf('#');\n var hash = i === -1 ? '' : uri.substr(i);\n uri = i === -1 ? uri : uri.substr(0, i);\n\n var re = new RegExp(\"([?&])\" + key + \"=.*?(&|$)\", \"i\");\n var separator = uri.indexOf('?') !== -1 ? \"&\" : \"?\";\n\n if (!value) {\n // Remove the key value pair if the value is empty\n uri = uri.replace(new RegExp(\"([?&]?)\" + key + \"=[^&]*\", \"i\"), '');\n if (uri.slice(-1) === '?') {\n uri = uri.slice(0, -1);\n }\n // Replace first occurrence of & by ? if no ? is present\n if (uri.indexOf('?') === -1) uri = uri.replace(/&/, '?');\n } else if (uri.match(re)) {\n uri = uri.replace(re, '$1' + key + \"=\" + value + '$2');\n } else {\n uri = uri + separator + key + \"=\" + value;\n }\n return uri + hash;\n};\n\n// https://stackoverflow.com/questions/1309483/redirect-user-to-current-page-with-some-querystring-using-javascript\nwindow.reloadWithQueryStringVars = function (queryStringVars) {\n var existingQueryVars = location.search ? location.search.substring(1).split(\"&\") : [],\n currentUrl = location.search ? location.href.replace(location.search, \"\") : location.href,\n newQueryVars = {},\n newUrl = currentUrl + \"?\";\n\n if (existingQueryVars.length > 0) {\n for (var i = 0; i < existingQueryVars.length; i++) {\n var pair = existingQueryVars[i].split(\"=\");\n newQueryVars[pair[0]] = pair[1];\n }\n }\n if (queryStringVars) {\n for (var queryStringVar in queryStringVars) {\n newQueryVars[queryStringVar] = queryStringVars[queryStringVar];\n }\n }\n if (newQueryVars) {\n for (var newQueryVar in newQueryVars) {\n newUrl += newQueryVar + \"=\" + newQueryVars[newQueryVar] + \"&\";\n }\n newUrl = newUrl.substring(0, newUrl.length - 1);\n window.open(newUrl, '_blank');\n } else {\n window.location.href = location.href;\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\n// fixes from Paul Irish and Tino Zijdel\n(function () {\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'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n }\n\n if (!window.requestAnimationFrame) 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 () {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n\n if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n})();\n\n},{}],67:[function(require,module,exports){\n'use strict';\n\nvar globalVars = {\n\n device: {\n isIpad: null,\n isIphone: null\n },\n\n elementStates: {\n headerHeight: null\n },\n\n elements: {\n $siteHeader: $('.js-site-header')\n },\n\n isMobile: false,\n isMobileLandscape: false,\n isTabletMax: false\n};\n\nvar setupValues,\n\n//responsive media query function\nmqMobile;\n\nglobalVars.elementStates = {\n headerHeight: globalVars.elements.$siteHeader.outerHeight()\n};\n\n//setup globalMagicController\nglobalVars.magicController = new ScrollMagic.Controller();\n\nglobalVars.sceneCollection = {};\n\nsetupValues = function setupValues(tableLanscape) {\n\n globalVars.tableLanscape = tableLanscape;\n globalVars.isTabletMax = window.innerWidth < 901 ? true : false;\n globalVars.isMobile = window.innerWidth < 767 ? true : false;\n globalVars.isMobileLandscape = window.innerWidth < 630 ? true : false;\n\n globalVars.elementStates.headerHeight = Math.ceil(globalVars.elements.$siteHeader.outerHeight());\n};\n\n//make sure this matches css\nmqMobile = window.matchMedia('(max-width: 1024px)');\n\nmqMobile.matches ? setupValues(true) : setupValues(false);\n\nmqMobile.addListener(function (changed) {\n changed.matches ? setupValues(true) : setupValues(false);\n});\n\nnavigator.userAgent.match(/iPhone/i) ? globalVars.device.isIphone = true : globalVars.device.isIphone = false;\nnavigator.userAgent.match(/iPod/i) ? globalVars.device.isIpad = true : globalVars.device.isIpad = false;\n\nglobalVars.windowResize = function () {\n\n var callbacks = [],\n running = false;\n\n // fired on resize event\n function resize() {\n\n if (!running) {\n running = true;\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(runCallbacks);\n } else {\n setTimeout(runCallbacks, 66);\n }\n }\n }\n\n // run the actual callbacks\n function runCallbacks() {\n\n callbacks.forEach(function (callback) {\n callback();\n });\n\n running = false;\n }\n\n // adds callback to loop\n function addCallback(callback) {\n\n if (callback) {\n callbacks.push(callback);\n }\n }\n\n return {\n // public method to add additional callback\n add: function add(callback) {\n if (!callbacks.length) {\n window.addEventListener('resize', resize);\n }\n addCallback(callback);\n }\n };\n}();\n\nmodule.exports = globalVars;\n\n},{}],68:[function(require,module,exports){\n'use strict';\n\nvar aroundCorner;\n\naroundCorner = function () {\n var $aroundCorner, $reel, $frame, $tileNodes, beltWidth, frameHeight, setupParallaxAnimation, updateParallaxValues, triggerHook, magicController, resizeControllerLogic, globalVars, windowResize, initializeModule, inViewPlatform;\n\n //globalVariables\n globalVars = require('./variables');\n windowResize = globalVars.windowResize;\n\n setupParallaxAnimation = function setupParallaxAnimation() {\n\n if (!$frame && !$tileNodes) return;\n\n //60 is horizontal padding of pagewrapper\n if ($frame.width() - 60 > beltWidth || $tileNodes.length === 1) {\n if (!!magicController) {\n magicController.destroy(true);\n magicController = null;\n }\n $aroundCorner.css('height', '');\n return;\n }\n\n //setup frame\n frameHeight = window.innerHeight * ($tileNodes.length - 1);\n\n $aroundCorner.height(frameHeight);\n\n magicController = new ScrollMagic.Controller();\n\n var tweenOffset = -1 * $tileNodes.length * $tileNodes.eq(0).outerWidth() + $reel.width();\n\n tweenOffset = tweenOffset - (80 * ($tileNodes.length - 1) + 20); //80 is margin, while 15 is the side padding\n\n inViewPlatform = new ScrollMagic.Scene({\n triggerElement: $aroundCorner[0],\n triggerHook: triggerHook,\n duration: frameHeight - $reel.height() - 80,\n offset: globalVars.elementStates.headerHeight * -1.5\n }).setPin($frame[0]).setTween($reel[0], { x: tweenOffset + 'px' }).addTo(magicController);\n };\n\n updateParallaxValues = function updateParallaxValues() {\n\n frameHeight = window.innerHeight * ($tileNodes.length - 1);\n\n $aroundCorner.height(frameHeight);\n\n var tweenOffset = -1 * $tileNodes.length * $tileNodes.eq(0).outerWidth() + $reel.width();\n\n tweenOffset = tweenOffset - (80 * ($tileNodes.length - 1) + 20); //80 is margin, while 15 is the side padding\n\n inViewPlatform.duration(frameHeight - $reel.height() - 80);\n\n inViewPlatform.setTween($reel[0], { x: tweenOffset + 'px' });\n };\n\n resizeControllerLogic = function resizeControllerLogic() {\n\n if (globalVars.tableLanscape) {\n if (!!magicController) {\n magicController.destroy(true);\n magicController = null;\n $aroundCorner.css('height', '');\n }\n } else {\n !magicController ? setupParallaxAnimation() : updateParallaxValues();\n }\n };\n\n windowResize.add(resizeControllerLogic);\n\n initializeModule = function initializeModule($module) {\n $aroundCorner = $module ? $module : $('.js-vertical-corner');\n\n if ($aroundCorner.length) {\n triggerHook = $aroundCorner.data('trigger-hook') ? $aroundCorner.data('trigger-hook') : 0;\n $tileNodes = $aroundCorner.find('.js-corner-tile');\n $reel = $aroundCorner.find('.js-reel');\n $frame = $aroundCorner.find('.js-frame');\n\n if ($tileNodes.length <= 1) {\n return;\n }\n\n beltWidth = $tileNodes.length < 2 ? $tileNodes.width : $tileNodes.eq(0).width() * $tileNodes.length + parseInt(window.getComputedStyle($tileNodes.eq(1)[0], null).getPropertyValue(\"margin-left\"), 10) * ($tileNodes.length - 1);\n\n resizeControllerLogic();\n\n //https://coderwall.com/p/hlqqia/ie-fix-for-jumpy-fixed-bacground \n // fix for scrollmagic in ie\n if (navigator.userAgent.match(/Trident\\/7\\./)) {\n // if IE\n $('body').on(\"mousewheel\", function () {\n // remove default behavior\n event.preventDefault();\n\n //scroll without smoothing\n var wheelDelta = event.wheelDelta;\n var currentScrollPosition = window.pageYOffset;\n window.scrollTo(0, currentScrollPosition - wheelDelta);\n });\n }\n } else {\n return;\n }\n };\n\n return {\n init: initializeModule\n };\n}();\n\nmodule.exports = aroundCorner;\n\n},{\"./variables\":67}],69:[function(require,module,exports){\n'use strict';\n\nwindow.Headroom = require('headroom.js');\n\nvar header = {\n\n init: function init() {\n this.siteheader = document.querySelector('.siteheader');\n this.navigation = document.querySelector('#site-navigation');\n this.search = document.querySelector('.globalsearch');\n\n if (!this.siteheader) {\n return;\n }\n\n var headroom = new Headroom(this.siteheader, {\n offset: 300,\n classes: {\n initial: 'siteheader--headroom',\n pinned: 'siteheader--pinned',\n unpinned: 'siteheader--unpinned',\n top: 'siteheader--top',\n notTop: 'siteheader--not-top',\n bottom: 'siteheader--bottom',\n notBottom: 'siteheader--not-bottom'\n },\n onUnpin: function onUnpin() {\n //close all nav items\n\n if (header.is_nav_open()) {\n //don't unpin if nav/subnav or search is open\n this.elem.classList.remove(this.classes.unpinned);\n this.elem.classList.add(this.classes.pinned);\n } else {\n this.elem.classList.add(this.classes.unpinned);\n this.elem.classList.remove(this.classes.pinned);\n }\n },\n tolerance: {\n up: 5,\n down: 0\n }\n });\n headroom.init();\n },\n is_nav_open: function is_nav_open() {\n\n var subnav_open = document.querySelector('.nav__sub.is-open');\n\n // test nav\n if (this.navigation.classList.contains('is-open')) {\n return true;\n } else if (this.search.classList.contains('is-open')) {\n return true;\n } else if (subnav_open) {\n return true;\n } else {\n return false;\n }\n }\n};\n\nvar $siteSearchInput = $('#global-search-box');\nvar $siteSearchButton = $('#global-search-button');\n\n$siteSearchButton.on('click', function () {\n var query = $siteSearchInput.val();\n var landingPage = $siteSearchInput.attr('data-landing');\n window.location.href = landingPage + '?query=' + encodeURIComponent(query);\n return false;\n});\n\n$siteSearchInput.on('keyup', function (e) {\n if (e.keyCode == 13) {\n var query = $siteSearchInput.val();\n var landingPage = $siteSearchInput.attr('data-landing');\n window.location.href = landingPage + '?query=' + encodeURIComponent(query);\n return false;\n }\n});\n\nvar $peopleSearchInput = $('#people-search-input');\nvar $peopleSearchButton = $('#people-search-button');\n\n$peopleSearchButton.on('click', function () {\n var query = $peopleSearchInput.val();\n var peopleLanding = $peopleSearchInput.attr('data-landing');\n window.location.href = peopleLanding + '?name=' + encodeURIComponent(query);\n return false;\n});\n\n$peopleSearchInput.on('keyup', function (e) {\n if (e.keyCode == 13) {\n var query = $peopleSearchInput.val();\n var peopleLanding = $peopleSearchInput.attr('data-landing');\n window.location.href = peopleLanding + '?name=' + encodeURIComponent(query);\n return false;\n }\n});\n\nvar $capabilitiesSearchInput = $('#capabilities-search-input');\nvar $capabilitiesSearchButton = $('#capabilities-search-button');\n\n$capabilitiesSearchButton.on('click', function () {\n var query = $capabilitiesSearchInput.val();\n var capabilitiesLanding = $capabilitiesSearchInput.attr('data-landing');\n window.location.href = capabilitiesLanding + '?page=1&scroll=550&keyword=' + encodeURIComponent(query);\n return false;\n});\n\n$capabilitiesSearchInput.on('keyup', function (e) {\n if (e.keyCode == 13) {\n var query = $capabilitiesSearchInput.val();\n var capabilitiesLanding = $capabilitiesSearchInput.attr('data-landing');\n window.location.href = capabilitiesLanding + '?page=1&scroll=550&keyword=' + encodeURIComponent(query);\n return false;\n }\n});\n\nheader.init();\n\nmodule.exports = header;\n\n},{\"headroom.js\":16}],70:[function(require,module,exports){\n'use strict';\n\nwindow.Flickity = require('flickity');\n\nvar herocarousel = {\n\n init: function init() {\n\n var hero_carousel = document.querySelector('.hero-carousel');\n var hero_carousel_cell = '.hero-carousel__cell';\n var hero_carousel_cell_count = document.querySelectorAll(hero_carousel_cell).length;\n var hero_button = document.querySelector('.js-hero-carousel__button');\n\n if (!hero_carousel || hero_carousel_cell_count < 2) {\n return;\n }\n\n var autoplay_duration = 0; // if zero then it will not autoplay\n\n if (hero_carousel.dataset.autoplay) {\n autoplay_duration = hero_carousel.dataset.autoplay * 1000; //convert to milliseconds\n }\n\n var hero_flkty = new Flickity(hero_carousel, {\n autoPlay: autoplay_duration,\n cellAlign: 'left',\n cellSelector: hero_carousel_cell,\n groupCells: true,\n pageDots: true,\n pauseAutoPlayOnHover: false,\n prevNextButtons: false,\n wrapAround: true\n });\n\n window.hero_flkty = hero_flkty;\n\n var hero_paused = false;\n var paused_style = 'is-paused';\n\n if (autoplay_duration > 0) {\n\n hero_button.addEventListener('click', function () {\n\n if (hero_paused === true) {\n hero_flkty.playPlayer();\n hero_flkty.next();\n this.classList.remove(paused_style);\n hero_paused = false;\n } else {\n hero_flkty.pausePlayer();\n this.classList.add(paused_style);\n hero_paused = true;\n }\n });\n\n hero_flkty.on('pointerDown', function () {\n\n if (hero_paused !== true) {\n hero_button.classList.add(paused_style);\n hero_paused = true;\n }\n });\n\n hero_flkty.on('select', function (index) {\n\n if (hero_flkty.player.state == 'playing') {\n return;\n }\n\n if (hero_paused !== true) {\n hero_button.classList.add(paused_style);\n hero_paused = true;\n }\n });\n } else {\n hero_button.classList.add('hero-carousel__button--hidden');\n }\n\n // fix on ios 9\n hero_flkty.on('dragStart', function () {\n document.ontouchmove = function (e) {\n e.preventDefault();\n };\n });\n\n hero_flkty.on('dragEnd', function () {\n document.ontouchmove = function () {\n return true;\n };\n });\n }\n};\n\nherocarousel.init();\n\nmodule.exports = herocarousel;\n\n},{\"flickity\":9}],71:[function(require,module,exports){\n'use strict';\n\nrequire('./header');\nrequire('./language-menu');\nrequire('./navigation');\nrequire('./hero-carousel');\nrequire('./region-carousel');\nrequire('./quote-carousel');\n\n},{\"./header\":69,\"./hero-carousel\":70,\"./language-menu\":72,\"./navigation\":73,\"./quote-carousel\":74,\"./region-carousel\":75}],72:[function(require,module,exports){\n'use strict';\n\nvar language_menu = {\n\n init: function init() {\n this.menu = document.querySelector('.js-language-menu');\n this.menu_button = document.querySelector('.js-language-menu__button');\n this.menu_links = document.querySelectorAll('.language-menu__link');\n this.menu_options = document.querySelector('.language-menu__options');\n\n if (!this.menu || !this.menu_button) {\n return;\n }\n\n this.menu_button.addEventListener('click', function (e) {\n e.preventDefault();\n\n if (language_menu.menu_options.getAttribute('aria-hidden') === 'true') {\n language_menu.open_menu();\n } else {\n language_menu.close_menu();\n }\n });\n },\n\n open_menu: function open_menu() {\n this.menu.classList.add('is-open');\n this.menu_options.setAttribute('aria-hidden', false);\n this.menu_button.setAttribute('aria-expanded', true);\n this.set_focus('0');\n },\n\n close_menu: function close_menu() {\n this.menu.classList.remove('is-open');\n this.menu_options.setAttribute('aria-hidden', true);\n this.menu_button.setAttribute('aria-expanded', false);\n this.set_focus('-1');\n },\n\n set_focus: function set_focus(state) {\n\n for (var i = 0; i < this.menu_links.length; i++) {\n var link = this.menu_links[i];\n var tabindex = link.setAttribute('tabindex', state);\n }\n }\n};\n\nlanguage_menu.init();\n\nmodule.exports = language_menu;\n\n},{}],73:[function(require,module,exports){\n'use strict';\n\nvar navigation = {\n\n init: function init() {\n this.siteheader = document.querySelector('.siteheader');\n this.nav_container = document.querySelector('.nav');\n this.search_container = document.querySelector('.globalsearch');\n this.nav_secondary = document.querySelector('#nav-secondary');\n if (!this.nav_container) {\n return;\n }\n\n this.toggle_nav.init();\n this.toggle_subnav.init();\n this.toggle_search.init();\n\n //esc key event\n document.addEventListener('keyup', function (e) {\n if (e.which === 27) {\n navigation.toggle_nav.close_nav();\n navigation.toggle_subnav.close_active_subnavs();\n navigation.toggle_search.close_search();\n }\n });\n },\n\n close_all: function close_all() {\n navigation.toggle_nav.close_nav();\n navigation.toggle_subnav.close_active_subnavs();\n navigation.toggle_search.close_search();\n },\n\n pause_hero_carousel: function pause_hero_carousel(state) {\n\n if (window.hero_flkty) {\n if (state) {\n window.hero_flkty.pausePlayer();\n } else {\n window.hero_flkty.unpausePlayer();\n }\n }\n },\n\n get_cookie_object: function get_cookie_object() {\n if (!this.cookie) {\n this.cookie = document.querySelector('#usercentrics-button');\n }\n },\n\n toggle_search: {\n\n init: function init() {\n\n this.search_toggle_button = document.querySelector('.js-search-toggle');\n this.mobile_search_toggle_button = document.querySelector('.js-mobile-search-toggle');\n this.search_form = document.querySelector('.js-globalsearch__form');\n this.search_input = document.querySelector('#global-search-box');\n\n if (!navigation.search_container) {\n return;\n }\n\n this.search_toggle_button.addEventListener('click', function (e) {\n e.preventDefault();\n\n if (navigation.search_container.classList.contains('is-open')) {\n navigation.toggle_search.close_search();\n } else {\n navigation.toggle_search.open_search();\n navigation.toggle_search.search_toggle_button.blur();\n }\n });\n\n this.mobile_search_toggle_button.addEventListener('click', function (e) {\n e.preventDefault();\n\n if (navigation.search_container.classList.contains('is-open')) {\n navigation.toggle_search.close_search();\n } else {\n navigation.toggle_search.open_search();\n navigation.toggle_search.search_toggle_button.blur();\n }\n });\n },\n\n open_search: function open_search() {\n\n this.search_toggle_button.classList.add('is-active');\n navigation.search_container.classList.add('is-open');\n\n // set focus\n this.search_input.focus();\n\n // set aria\n this.search_form.setAttribute('aria-hidden', 'false');\n this.search_toggle_button.setAttribute('aria-expanded', 'true');\n\n // close subnav and secondary navs\n navigation.toggle_subnav.close_active_subnavs();\n navigation.toggle_nav.close_nav();\n\n // pause carousel\n navigation.pause_hero_carousel(true);\n },\n\n close_search: function close_search() {\n\n this.search_toggle_button.classList.remove('is-active');\n this.search_toggle_button.blur();\n\n // set aria\n this.search_form.setAttribute('aria-hidden', 'true');\n this.search_toggle_button.setAttribute('aria-expanded', 'false');\n\n if (navigation.search_container) {\n navigation.search_container.classList.remove('is-open');\n }\n\n // un pause carousel\n navigation.pause_hero_carousel(false);\n }\n },\n\n toggle_nav: {\n\n init: function init() {\n\n this.nav_toggle_button = document.querySelector('.js-nav-toggle');\n\n if (!this.nav_toggle_button) {\n return;\n }\n\n this.nav_toggle_button.addEventListener('click', function (e) {\n e.preventDefault();\n\n if (navigation.nav_container.classList.contains('is-open')) {\n navigation.toggle_nav.close_nav();\n } else {\n navigation.toggle_nav.open_nav();\n }\n });\n },\n\n open_nav: function open_nav() {\n\n this.nav_toggle_button.classList.add('is-active');\n // navigation.nav_container.classList.add('nav--has-transition');\n navigation.nav_container.classList.add('is-open');\n\n // set focus\n if (window.matchMedia && window.matchMedia('(min-width: 1300px)').matches) {\n navigation.nav_secondary.setAttribute('tabindex', '-1');\n navigation.nav_secondary.focus();\n } else if (window.matchMedia && window.matchMedia('(max-width: 1000px)').matches) {\n navigation.get_cookie_object();\n navigation.cookie.classList.add('hide-cookie');\n }\n\n // close subnavs\n navigation.toggle_subnav.close_active_subnavs();\n\n // close search\n navigation.toggle_search.close_search();\n\n // pause carousel\n navigation.pause_hero_carousel(true);\n },\n\n close_nav: function close_nav() {\n\n if (!this.nav_toggle_button) {\n return;\n }\n\n this.nav_toggle_button.classList.remove('is-active');\n // navigation.nav_container.classList.remove('nav--has-transition');\n navigation.nav_container.classList.remove('is-open');\n navigation.nav_secondary.removeAttribute('tabindex');\n\n if (window.matchMedia && window.matchMedia('(max-width: 1000px)').matches) {\n navigation.get_cookie_object();\n navigation.cookie.classList.remove('hide-cookie');\n }\n\n // un pause carousel\n navigation.pause_hero_carousel(false);\n }\n },\n\n toggle_subnav: {\n\n init: function init() {\n this.sub_nav_links = document.querySelectorAll('.js-nav-has-subnav');\n\n //sub nav link event\n for (var i = 0; i < this.sub_nav_links.length; i++) {\n var sub_nav_link = this.sub_nav_links[i];\n navigation.toggle_subnav.bind_links(sub_nav_link);\n }\n },\n\n bind_links: function bind_links(sub_nav_link) {\n\n var event_binding = function event_binding(target) {\n // this.close_active_subnavs(target);\n // this.open_subnav(target);\n\n if (target.classList.contains('is-active')) {\n navigation.toggle_subnav.close_subnav(target);\n } else {\n navigation.toggle_subnav.open_subnav(target);\n }\n };\n\n sub_nav_link.addEventListener('click', function (e) {\n var target = e.currentTarget;\n\n if (window.matchMedia && window.matchMedia('(min-width: 1300px)').matches) {\n e.preventDefault();\n event_binding(target);\n }\n });\n\n sub_nav_link.addEventListener('keydown', function (e) {\n var target = e.currentTarget;\n\n if (e.which !== 32) {\n return;\n }\n\n if (window.matchMedia && window.matchMedia('(min-width: 1300px)').matches) {\n e.preventDefault();\n event_binding(target);\n }\n });\n },\n\n open_subnav: function open_subnav(target) {\n var target_subnav = target.nextElementSibling;\n\n var current_page = document.querySelector('.is-current-page');\n if (current_page) {\n current_page.classList.add('is-current-page--hidden');\n }\n // close secondary nav\n navigation.toggle_nav.close_nav();\n\n // close search\n navigation.toggle_search.close_search();\n\n // close open subnavs\n navigation.toggle_subnav.close_active_subnavs(target);\n\n // open subnav\n target.classList.add('is-active');\n target_subnav.classList.add('is-open');\n\n // pause carousel\n navigation.pause_hero_carousel(true);\n },\n\n close_subnav: function close_subnav(target) {\n var target_subnav = target.nextElementSibling;\n\n var current_page = document.querySelector('.is-current-page');\n if (current_page) {\n current_page.classList.remove('is-current-page--hidden');\n }\n\n // close subnav\n target.blur();\n target.classList.remove('is-active');\n target_subnav.classList.remove('is-open');\n\n // unpause carousel\n navigation.pause_hero_carousel(false);\n },\n\n close_active_subnavs: function close_active_subnavs(target) {\n // close open subnavs\n for (var i = 0; i < this.sub_nav_links.length; i++) {\n\n var link = this.sub_nav_links[i];\n\n if (target !== link) {\n var subnav = link.nextElementSibling;\n link.classList.remove('is-active');\n subnav.classList.remove('is-open');\n link.blur();\n }\n }\n }\n }\n};\n\nnavigation.init();\n\nmodule.exports = navigation;\n\n},{}],74:[function(require,module,exports){\n'use strict';\n\nwindow.Flickity = require('flickity');\n\nvar quotecarousel = {\n\n init: function init() {\n\n var quote_carousel = document.querySelector('.quote-carousel');\n var quote_carousel_cell = '.quote-carousel__cell';\n var quote_carousel_cell_count = document.querySelectorAll(quote_carousel_cell).length;\n\n if (!quote_carousel || quote_carousel_cell_count < 2) {\n return;\n }\n\n var autoplay_duration = 0; // if zero then it will not autoplay\n\n if (quote_carousel.dataset.autoplay) {\n autoplay_duration = quote_carousel.dataset.autoplay * 1000; //convert to milliseconds\n }\n\n var flkty = new Flickity(quote_carousel, {\n autoPlay: autoplay_duration,\n cellAlign: 'left',\n cellSelector: quote_carousel_cell,\n groupCells: true,\n pageDots: false,\n prevNextButtons: true,\n wrapAround: true\n });\n\n // fix on ios 9\n flkty.on('dragStart', function () {\n document.ontouchmove = function (e) {\n e.preventDefault();\n };\n });\n\n flkty.on('dragEnd', function () {\n document.ontouchmove = function () {\n return true;\n };\n });\n }\n};\n\nquotecarousel.init();\n\nmodule.exports = quotecarousel;\n\n},{\"flickity\":9}],75:[function(require,module,exports){\n'use strict';\n\nwindow.Flickity = require('flickity');\n\nvar regioncarousel = {\n\n init: function init() {\n\n var region_carousel = document.querySelector('.region-carousel');\n var region_carousel_cell = '.region-carousel__cell';\n var region_carousel_cell_count = document.querySelectorAll(region_carousel_cell).length;\n\n if (!region_carousel || region_carousel_cell_count < 2) {\n return;\n }\n\n var autoplay_duration = 0; // if zero then it will not autoplay\n\n if (region_carousel.dataset.autoplay) {\n autoplay_duration = region_carousel.dataset.autoplay * 1000; //convert to milliseconds\n }\n\n var flkty = new Flickity(region_carousel, {\n autoPlay: autoplay_duration,\n cellAlign: 'left',\n cellSelector: region_carousel_cell,\n groupCells: true,\n pageDots: false,\n prevNextButtons: true,\n wrapAround: true,\n watchCSS: true\n });\n\n // fix on ios 9\n flkty.on('dragStart', function () {\n document.ontouchmove = function (e) {\n e.preventDefault();\n };\n });\n\n flkty.on('dragEnd', function () {\n document.ontouchmove = function () {\n return true;\n };\n });\n }\n};\n\nregioncarousel.init();\n\nmodule.exports = regioncarousel;\n\n},{\"flickity\":9}]},{},[19]);\n"]}