{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/photoswipe/dist/photoswipe.js","webpack:///./node_modules/photoswipe/dist/photoswipe-ui-default.js","webpack:///./node_modules/tiny-slider/src/helpers/Object.keys.js","webpack:///./node_modules/tiny-slider/src/helpers/childNode.remove.js","webpack:///./node_modules/picturefill/dist/picturefill.js","webpack:///./node_modules/form-serialize/index.js","webpack:///./src/js/modules/galleries/photoswipe-markup.js","webpack:///./src/js/modules/galleries/cm-gallery.js","webpack:///./src/js/modules/share/sharer.js","webpack:///./node_modules/tiny-slider/src/helpers/raf.js","webpack:///./node_modules/tiny-slider/src/helpers/caf.js","webpack:///./node_modules/tiny-slider/src/helpers/extend.js","webpack:///./node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack:///./node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack:///./node_modules/tiny-slider/src/helpers/getBody.js","webpack:///./node_modules/tiny-slider/src/helpers/docElement.js","webpack:///./node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack:///./node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack:///./node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack:///./node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack:///./node_modules/tiny-slider/src/helpers/forEach.js","webpack:///./node_modules/tiny-slider/src/helpers/classListSupport.js","webpack:///./node_modules/tiny-slider/src/helpers/hasClass.js","webpack:///./node_modules/tiny-slider/src/helpers/addClass.js","webpack:///./node_modules/tiny-slider/src/helpers/removeClass.js","webpack:///./node_modules/tiny-slider/src/helpers/hasAttr.js","webpack:///./node_modules/tiny-slider/src/helpers/getAttr.js","webpack:///./node_modules/tiny-slider/src/helpers/isNodeList.js","webpack:///./node_modules/tiny-slider/src/helpers/setAttrs.js","webpack:///./node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack:///./node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack:///./node_modules/tiny-slider/src/helpers/hideElement.js","webpack:///./node_modules/tiny-slider/src/helpers/showElement.js","webpack:///./node_modules/tiny-slider/src/helpers/isVisible.js","webpack:///./node_modules/tiny-slider/src/helpers/whichProperty.js","webpack:///./node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack:///./node_modules/tiny-slider/src/helpers/passiveOption.js","webpack:///./node_modules/tiny-slider/src/helpers/addEvents.js","webpack:///./node_modules/tiny-slider/src/helpers/removeEvents.js","webpack:///./node_modules/tiny-slider/src/helpers/events.js","webpack:///./node_modules/tiny-slider/src/tiny-slider.module.js","webpack:///./node_modules/tiny-slider/src/helpers/calc.js","webpack:///./node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack:///./node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack:///./node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack:///./node_modules/tiny-slider/src/helpers/getSlideId.js","webpack:///./node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack:///./node_modules/tiny-slider/src/helpers/jsTransform.js","webpack:///./node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack:///./node_modules/tiny-slider/src/helpers/toDegree.js","webpack:///./node_modules/tiny-slider/src/helpers/getTouchDirection.js","webpack:///./src/js/modules/carousels/sponsor-banner-carousel.js","webpack:///./src/js/modules/videos/autoresize.js","webpack:///./src/js/modules/tickets/eventbrite.js","webpack:///./src/js/modules/carousels/exhibitor-carousel.js","webpack:///./src/js/settings/sitesettings.js","webpack:///./src/js/modules/notifications/notifications.js","webpack:///./src/js/modules/notifications/notificationmarkup.js","webpack:///./src/js/modules/newsletter/newsletter.js","webpack:///./src/js/app.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","undefined","template","UiClass","items","options","framework","features","target","type","listener","unbind","methodName","split","length","isArray","obj","Array","createEl","classes","tag","el","document","createElement","className","getScrollY","yOffset","window","pageYOffset","documentElement","scrollTop","removeClass","reg","RegExp","replace","addClass","hasClass","test","getChildByClass","parentEl","childClassName","node","firstChild","nextSibling","arraySearch","array","extend","o1","o2","preventOverwrite","prop","easing","sine","out","k","Math","sin","PI","inOut","cos","cubic","detectFeatures","helperEl","helperStyle","style","vendor","oldIE","all","addEventListener","touch","requestAnimationFrame","raf","caf","cancelAnimationFrame","pointerEvent","navigator","msPointerEnabled","ua","userAgent","platform","v","match","parseInt","isOldIOSPhone","androidversion","parseFloat","isOldAndroid","androidVersion","isMobileOpera","styleCheckItem","styleName","styleChecks","vendors","a","charAt","toUpperCase","slice","toLowerCase","lastTime","fn","currTime","Date","getTime","timeToCall","max","id","setTimeout","clearTimeout","svg","createElementNS","createSVGRect","evName","_handleEv","handleEvent","self","this","_options","allowPanToNext","spacing","bgOpacity","mouseUsed","loop","pinchToClose","closeOnScroll","closeOnVerticalDrag","verticalDragRange","hideAnimationDuration","showAnimationDuration","showHideOpacity","focus","escKey","arrowKeys","mainScrollEndFriction","panEndFriction","isClickableElement","tagName","getDoubleTapZoom","isMouseClick","item","initialZoomLevel","maxSpreadZoom","modal","scaleMode","_isOpen","_isDestroying","_closedByScroll","_currentItemIndex","_containerStyle","_containerShiftIndex","_upMoveEvents","_downEvents","_globalEventHandlers","_currZoomLevel","_startZoomLevel","_translatePrefix","_translateSufix","_updateSizeInterval","_itemsNeedUpdate","_itemHolders","_prevItemIndex","_dragStartEvent","_dragMoveEvent","_dragEndEvent","_dragCancelEvent","_transformKey","_pointerEventEnabled","_likelyTouchDevice","_requestAF","_cancelAF","_initalClassName","_initalWindowScrollY","_oldIE","_currentWindowScrollY","_features","_orientationChangeTimeout","_gestureStartTime","_gestureCheckSpeedTime","_releaseAnimData","_isZoomingIn","_verticalDragInitiated","_oldAndroidTouchEndTimeout","_isDragging","_isMultitouch","_zoomStarted","_moved","_dragAnimFrame","_mainScrollShifted","_currentPoints","_isZooming","_startPointsDistance","_currPanBounds","_currZoomElementStyle","_mainScrollAnimating","_direction","_isFirstMove","_opacityChanged","_bgOpacity","_wasOverInitialZoom","_tempCounter","_currPanDist","x","y","_startPanOffset","_panOffset","_viewportSize","_currPositionIndex","_offset","_slideSize","_indexDiff","_isFixedPosition","_modules","_windowVisibleSize","_renderMaxResolution","_registerModule","publicMethods","push","_getLoopedId","index","numSlides","_getNumItems","_listeners","_listen","_shout","listeners","args","arguments","shift","apply","_getCurrentTime","_applyBgOpacity","opacity","bg","_applyZoomTransform","styleObj","zoom","currItem","fitRatio","_applyCurrentZoomPan","allowRenderResolution","_setImageSize","_applyZoomPanToItem","container","initialPosition","_setTranslateX","elStyle","_moveMainScroll","dragging","newSlideIndexOffset","delta","round","_mainScrollPos","_calculatePanOffset","axis","zoomLevel","_midZoomPoint","_equalizePoints","p1","p2","_roundPoint","_mouseMoveTimeout","_onFirstMouseMove","_calculatePanBounds","update","bounds","_calculateItemSize","_getMinZoomLevel","_getMaxZoomLevel","w","_modifyDestPanOffset","destPanBounds","destPanOffset","destZoomLevel","min","_onKeyDown","e","keydownAction","keyCode","ctrlKey","altKey","shiftKey","metaKey","preventDefault","returnValue","_onGlobalClick","stopPropagation","_updatePageScrollOffset","setScrollOffset","_animations","_numAnimations","_stopAnimation","_registerStartAnimation","_stopAllAnimations","_animateProp","b","endProp","easingFn","onUpdate","onComplete","startAnimTime","animloop","shout","listen","viewportSize","isMainScrollAnimating","getZoomLevel","getCurrentIndex","isDragging","isZooming","applyZoomPan","panX","panY","init","transform","scrollWrap","itemHolders","children","wrap","display","allow3dTransform","perspective","left","zoomRatio","h","width","height","top","_setupTransforms","resize","updateSize","orientationchange","clientWidth","scroll","keydown","click","oldPhone","animationName","ui","isNaN","_getItemAt","setAttribute","position","rootClasses","mainClass","setContent","updateCurrItem","setInterval","close","_showOrHide","destroy","_showOrHideTimeout","clearInterval","_stopDragUpdateLoop","panTo","force","event","goTo","diff","next","prev","updateCurrZoomItem","emulateSetContent","zoomElement","center","invalidateCurrItems","needsUpdate","beforeAnimation","tempHolder","diffAbs","abs","NUM_HOLDERS","pop","unshift","prevItem","windowScrollY","innerWidth","innerHeight","clientHeight","holder","hIndex","cleanSlide","zoomTo","centerPoint","speed","updateFn","initialPanOffset","now","_currPoint","_startPoint","_currPointers","_startMainScrollPos","_posPoints","_tempPoint","_currZoomedItemIndex","_centerPoint","_lastReleaseTime","_currCenterPoint","_calculatePointsDistance","sqrt","_dragUpdateLoop","_renderMovement","_closestElement","getAttribute","indexOf","parentNode","_preventObj","_preventDefaultEventBehaviour","isDown","prevent","_convertTouchToPoint","pageX","pageY","identifier","_findCenterOfPoints","pCenter","_calculateVerticalDragOpacityRatio","_ePoint1","_ePoint2","_tempPointsArr","_getTouchPoints","forEach","touches","_panOrMoveMainScroll","panFriction","startOverDiff","newPanPos","newMainScrollPos","newOffset","dir","newMainScrollPosition","mainScrollDiff","_onDragStart","button","_initialZoomRunning","pointerIndex","pointerId","startPointsList","numPoints","_onDragMove","touchesList","_isEqualPoints","pointsDistance","_calculateZoomLevel","zoomFriction","minZoomLevel","maxZoomLevel","minusDiff","percent","opacityRatio","time","_pushPosPoint","mainScrollChanged","_onDragRelease","releasePoint","splice","4","2","3","pointerType","gestureType","touchList","changedTouches","releaseTimeDiff","_initDragReleaseAnimationData","calculateSwipeSpeed","initalPanY","initialBgOpacity","itemChanged","_finishSwipeMainScrollGesture","_completePanGesture","_completeZoomGesture","lastFlickDuration","tempReleasePos","lastFlickOffset","lastFlickDist","lastFlickSpeed","slowDownRatio","slowDownRatioReverse","speedDecelerationRatio","speedDecelerationRatioAbs","distanceOffset","backAnimDestination","backAnimStarted","calculateOverBoundsAnimOffset","pos","calculateAnimOffset","timeDiff","panAnimLoop","zoomPan","lastNow","animData","itemsDiff","nextCircle","totalShiftDist","isFastLastFlick","finishAnimDuration","animateToX","animateToDist","touchesDistance","initialOpacity","initGestures","addEventNames","pref","down","move","up","cancel","maxTouchPoints","msMaxTouchPoints","likelyTouchDevice","mousedown","mousemove","mouseup","_items","_initialContentSet","img","completeFn","thumbBounds","initialLayout","getThumbBoundsFn","closeWithRaf","fadeEverything","duration","removeAttribute","src","loadError","miniImg","webkitBackfaceVisibility","initalBgOpacity","_tempPanAreaSize","_imagesToAppendPool","_controllerDefaultOptions","errorMsg","forceProgressiveLoading","preload","getNumItemsFn","isInitial","vGap","bottom","hRatio","vRatio","realPanElementW","realPanElementH","_calculateSingleItemPanBounds","_appendImage","baseDiv","preventAnimation","keepPlaceholder","imageAppended","appendChild","loaded","placeholder","_preloadImage","loading","loadComplete","onload","onerror","_checkForError","cleanUp","innerHTML","maxRes","lastChild","_appendImagesPool","poolItem","clearPlaceholder","lazyLoadItem","initController","getItemAt","isNext","preloadBefore","preloadAfter","preloader","allowProgressiveImg","screen","html","placeholderClassName","msrc","tapTimer","_wheelDelta","tapReleasePoint","_dispatchTapEvent","origEvent","createEvent","eDetail","initCustomEvent","dispatchEvent","initTap","onTapStart","onTapRelease","touch0","touch1","p0","clickedTagName","initDesktopZoom","setupDesktopZoom","onInit","events","handleMouseWheel","mouseZoomedIn","hasDraggingClass","updateZoomable","removeDraggingClass","deltaY","deltaMode","deltaX","wheelDeltaX","wheelDeltaY","wheelDelta","detail","newPanX","newPanY","toggleDesktopZoom","doubleTapZoomLevel","zoomOut","_historyUpdateTimeout","_hashChangeTimeout","_hashAnimCheckTimeout","_hashChangedByScript","_hashChangedByHistory","_hashReseted","_initialHash","_historyChanged","_closedFromURL","_urlChangedOnce","_windowLoc","_supportsPushState","_historyDefaultOptions","history","galleryUID","_getHash","hash","substring","_cleanHistoryTimeouts","_parseItemIndexFromURL","params","vars","pair","galleryPIDs","searchfor","pid","_updateHash","newHash","newURL","href","location","title","initHistory","updateURL","onHashChange","returnToOriginal","back","pushState","pathname","search","pswp","_fullscrenAPI","_controls","_captionContainer","_fakeCaptionContainer","_indexIndicator","_shareButton","_shareModal","_initalCloseOnScrollValue","_isIdle","_loadingIndicator","_loadingIndicatorHidden","_loadingIndicatorTimeout","_galleryHasOneSlide","_blockControlsTap","_idleInterval","_idleTimer","_overlayUIUpdated","_controlsVisible","_shareModalHidden","_defaultUIOptions","barsSize","closeElClasses","timeToIdle","timeToIdleOutside","loadingIndicatorDelay","addCaptionHTMLFn","captionEl","closeEl","fullscreenEl","zoomEl","shareEl","counterEl","arrowEl","preloaderEl","tapToClose","tapToToggleControls","clickToCloseNonZoomable","shareButtons","label","url","download","getImageURLForShare","getPageURLForShare","getTextForShare","indexIndicatorSep","fitControlsWidth","_onControlsTap","_onIdleMouseMove","uiElement","found","srcElement","clickedClass","_uiElements","onTap","tapDelay","_togglePswpClass","cName","add","_countNumItems","hasOneSlide","_toggleShareModalClass","_toggleShareModal","_updateShareURLs","_openWindowPopup","hasAttribute","open","shareButtonData","shareURL","image_url","page_url","share_text","shareButtonOut","encodeURIComponent","parseShareButtonOut","onclick","_hasCloseClass","_idleIncrement","setIdle","_onMouseLeaveWindow","from","relatedTarget","toElement","nodeName","_toggleLoadingIndicator","hide","_applyNavBarGaps","gap","bars","insertBefore","captionSize","option","isFullscreen","exit","enter","pinchControlsHidden","hideControls","showControls","point","preventObj","onGlobalTap","onMouseOver","eventK","updateFullscreen","removeChild","classAttr","loopThroughChildElements","sChildren","topBar","_setupUIElements","getFullscreenAPI","naturalWidth","isIdle","updateIndexIndicator","supportsFullscreen","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","msExitFullscreen","api","dE","tF","requestFullscreen","enterK","exitK","elementK","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","keys","remove","timer","dummySrc","fixRespimg","findPictureImgs","onResize","mq","HTMLPictureElement","$1","source","sizes","picture","cloneNode","firstElementChild","_pfLastSize","offsetWidth","imgs","querySelectorAll","matchMedia","addListener","srcset","readyState","eminpx","alwaysCheckWDescriptor","evalId","pf","isSupportTestReady","noop","image","getImgAttr","setImgAttr","removeImgAttr","docElem","types","cfg","algorithm","supportAbort","curSrcProp","regWDesc","regSize","setOptions","picturefillCFG","fsCss","isVwDirty","cssCache","sizeLengthCache","DPR","devicePixelRatio","units","px","in","anchor","alreadyRun","regexLeadingSpaces","regexLeadingCommasOrSpaces","regexLeadingNotSpaces","regexTrailingCommas","regexNonNegativeInteger","regexFloatingPoint","on","evt","capture","attachEvent","memoize","cache","input","isSpace","regLength","buildStr","image2","width1","isDomReady","func","wait","timeout","timestamp","later","regReady","run","timerId","lastClientWidth","evalCSS","css","string","parsedLength","Function","setResolution","candidate","sizesattr","cWidth","calcListLength","res","picturefill","opt","elements","plen","nodeType","context","qsa","reevaluate","reselect","sel","selShort","setupRun","fillImg","teardownRun","ascendingSort","getCandidateForSrc","set","candidates","parseSet","makeUrl","console","warn","implementation","hasFeature","substr","supSrcset","supSizes","supPicture","complete","u","setSize","matchesMedia","matches","media","mMQ","calcLength","sourceSizeValue","supportsType","parseSize","sourceSizeStr","cands","collectCharacters","regEx","chars","exec","descriptors","currentDescriptor","state","inputLength","parseDescriptors","desc","lastChar","intVal","floatVal","pError","has1x","tokenize","parseSrcset","getEmValue","body","div","originalHTMLCSS","cssText","originalBodyCSS","sourceSizeListStr","uT","winningLength","strValue","unparsedSizesList","unparsedSizesListLength","unparsedSize","lastComponentValue","size","regexCssLengthWithUnits","regexCssCalc","str","chrctr","component","componentArray","listArray","parenDepth","inComment","pushComponent","pushComponentArray","parseComponentValues","join","parseSizes","setRes","len","applySetCandidate","j","bestCandidate","curSrc","curCan","candidateSrc","abortCurSrc","lowerValue","higherValue","dprValue","isCached","bonusFactor","bonus","meanDensity","imageData","dpr","sets","setSrcToCur","cached","sort","pow","setSrc","origWidth","getSet","parseSets","element","parent","srcsetAttribute","imageSet","isWDescripor","srcsetParsed","hasPicture","pic","sources","getElementsByTagName","getAllSourceElements","supported","srcAttr","parsed","srcSetCandidates","matchingSet","evaluated","extreme","evaled","vw","vh","em","rem","fillImgs","last","_","typeUri","Image","detectTypeSupport","k_r_submitter","k_r_success_contrls","brackets","hash_serializer","result","hash_assign","between","_values","parse_keys","existing","str_serialize","form","serializer","radio_store","disabled","val","checked","empty","selectOptions","isSelectedOptions","allowedEmpty","hasValue","selected","pswpMarkup","ContentModuleGallery","_classCallCheck","_galleries","_pswpEl","querySelector","_galleryToggles","insertAdjacentHTML","_gallery","_this","gallery","images","slides","map","dataset","srcLrg","srcMed","PhotoSwipe","PhotoSwipeUI_Default","toggle","log","parentElement","Sharer","sharer_classCallCheck","_shareLinks","shareLink","share","uiTitle","text","uiDesc","uiUrl","then","catch","error","classList","nextElementSibling","contains","raf_win","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","caf_win","mozCancelAnimationFrame","copy","checkStorageValue","JSON","parse","setLocalStorage","storage","access","setItem","getBody","doc","fake","docElement","setFakeBody","docOverflow","overflow","background","resetFakeBody","offsetHeight","addCSSRule","sheet","selector","rules","insertRule","addRule","getCssRulesLength","cssRules","arr","callback","scope","classListSupport","hasAttr","attr","getAttr","isNodeList","setAttrs","els","attrs","toString","removeAttrs","attrLength","arrayFromNodeList","nl","hideElement","forceHide","showElement","isVisible","getComputedStyle","whichProperty","props","Props","prefix","getEndProperty","propIn","propOut","supportsPassive","passiveOption_opts","passiveOption","passive","addEvents","preventScrolling","removeEvents","removeEventListener","Events","topics","eventName","off","emit","data","tns","gutter","edgePadding","fixedWidth","autoWidth","viewportMax","slideBy","controls","controlsPosition","controlsText","controlsContainer","prevButton","nextButton","nav","navPosition","navContainer","navAsThumbnails","autoplay","autoplayPosition","autoplayTimeout","autoplayDirection","autoplayText","autoplayHoverPause","autoplayButton","autoplayButtonOutput","autoplayResetOnVisibility","animateIn","animateOut","animateNormal","animateDelay","rewind","autoHeight","responsive","lazyload","lazyloadSelector","mouseDrag","swipeAngle","nested","preventActionWhenRunning","preventScrollOnTouch","freezable","useLocalStorage","win","KEYS","ENTER","SPACE","LEFT","RIGHT","tnsStorage","localStorageAccess","browserInfo","uid","localStorage","getItem","removeItem","CALC","vals","calc","PERCENTAGELAYOUT","wrapper","outer","getBoundingClientRect","count","percentageLayout","CSSMQ","rule","styleSheet","createTextNode","currentStyle","mediaquerySupport","TRANSFORM","HAS3DTRANSFORMS","tf","has3d","cssTF","getPropertyValue","has3DTransforms","TRANSITIONDURATION","TRANSITIONDELAY","ANIMATIONDURATION","ANIMATIONDELAY","TRANSITIONEND","ANIMATIONEND","supportConsoleWarn","tnsList","optionsElements","carousel","responsiveTem","updateOptions","middleWrapper","breakpointZone","horizontal","outerWrapper","innerWrapper","containerParent","containerHTML","outerHTML","slideItems","slideCount","windowWidth","getWindowWidth","isOn","setBreakpointZone","slidePositions","imgsComplete","liveregionCurrent","itemsMax","getOption","viewport","getViewportWidth","floor","fixedWidthViewportWidth","slideItemsOut","cloneCount","bp","tem","ceil","getItemsMax","hasOption","slideCountNew","hasRightDeadZone","rightBoundary","getRightBoundary","updateIndexBeforeTransform","transformAttr","transformPrefix","transformPostfix","getIndexMax","getStartIndex","indexCached","indexMin","getCurrentSlide","indexMax","moveDirectionExpected","running","newContainerClasses","slideId","tnsId","disable","freeze","getFreeze","frozen","controlsEvents","onControlsClick","getEvent","keyIndex","navEvents","onTransitionEnd","getTarget","navIndex","navClicked","Number","targetIndexBase","pages","targetIndex","navCurrentIndex","animating","stopAutoplay","curElement","activeElement","setFocus","navItems","hoverEvents","mouseover","stopAutoplayTimer","autoplayHoverPaused","mouseout","setAutoplayTimer","visibilityEvent","visibilitychange","hidden","autoplayVisibilityPaused","docmentKeydownEvent","touchEvents","touchstart","onPanStart","touchmove","onPanMove","touchend","onPanEnd","touchcancel","dragEvents","mouseleave","hasControls","hasNav","hasAutoplay","hasTouch","hasMouseDrag","slideActiveClass","imgCompleteClass","imgEvents","load","imgLoaded","imgCompleted","preventScroll","prevIsButton","nextIsButton","controlsContainerHTML","prevButtonHTML","nextButtonHTML","navContainerHTML","getPages","pagesCached","getCurrentNavIndex","navCurrentIndexCached","navActiveClass","navStr","navStrCurrent","autoplayTimer","autoplayUserPaused","autoplayButtonHTML","autoplayHtmlStrings","translateInit","rafIndex","initPosition","lastPosition","panStart","getDist","resetVariblesWhenDisable","wp","aria-hidden","tabindex","fragmentBefore","createDocumentFragment","fragmentAfter","num","cloneFirst","cloneLast","initStructure","fontSize","slide","marginLeft","getSlideMarginLeft","getTransitionDurationStyle","getInnerWrapperStyles","getContainerWidth","getSlideWidthStyle","getSlideGutterStyle","getAnimationDurationStyle","update_carousel_transition_duration","opts","middleWrapperStr","innerWrapperStr","containerStr","slideStr","itemsBP","fixedWidthBP","speedBP","edgePaddingBP","autoHeightBP","gutterBP","initSheet","initSliderTransform","updateIndex","leftEdge","rightEdge","transformCore","postfix","to","tick","unit","positionTick","resetDuration","doContainerTransform","getContainerTransformValue","moveElement","updateContentWrapperHeight","eve","animateSlide","version","getInfo","info","play","startAutoplay","pause","updateSliderHeight","updateInnerWrapperHeight","refresh","ownerNode","toggleAutoplay","htmlList","prevEl","previousElementSibling","rebuild","condition","ind","getAbsIndex","absIndex","getInsertPosition","getClientWidth","rect","right","ww","edgePaddingTem","gutterTem","fixedWidthTem","speedTem","gutterTemUnit","itemsTem","dividend","getCSSPrefix","imgsLoadedCheck","getImageArray","initSliderTransformStyleCheck","doContainerTransformSilent","initTools","initEvents","stylesApplicationCheck","toFixed","initSliderTransformCore","setSlidePositions","updateSlideStatus","getLiveRegionStr","txt","data-action","aria-label","data-nav","aria-controls","navHtml","hiddenStr","updateNavVisibility","data-controls","isButton","updateControlsStatus","disableUI","resizeTasks","doAutoHeight","doLazyLoad","disableSlider","freezeSlider","additionalUpdates","bpChanged","breakpointZoneTem","needContainerTransform","indChanged","itemsChanged","disableTem","freezeTem","arrowKeysTem","controlsTem","navTem","touchTem","mouseDragTem","autoplayTem","autoplayHoverPauseTem","autoplayResetOnVisibilityTem","indexTem","autoHeightTem","controlsTextTem","centerTem","autoplayTextTem","classN","enableUI","enableSlider","margin","unfreezeSlider","updateLiveRegion","updateGallerySlidePositions","autoheightTem","deleteRule","removeRule","removeCSSRule","vp","getVisibleSlideRange","start","end","rangestart","rangeend","cell","navPrev","navCurrent","updateNavStatus","getMaxSlideHeight","slideStart","slideRange","heights","maxHeight","attr2","base","range","getLowerCaseNodeName","isAriaDisabled","disEnableElement","prevDisabled","nextDisabled","disablePrev","disableNext","getCenterGap","denominator","number","classOut","classIn","isOut","render","sliderMoved","strTrans","propertyName","indexGap","factor","passEventObject","targetIn","updateAutoplayButton","action","isTouchEvent","preventDefaultBehavior","getMoveDirectionExpected","angle","atan2","direction","$","clientX","clientY","panUpdate","err","dist","percentageX","preventClick","indexMoved","moved","rough","displayIndex","SponsorBannerCarousel","sponsor_banner_carousel_classCallCheck","carouselEl","AutoResizeVideos","autoresize_classCallCheck","_allVideos","aspectRatio","resizeVideoHeights","EventBrite","eventbrite_classCallCheck","eventBriteModalTriggers","triggerEl","registerTrigger","EBWidgets","createWidget","widgetType","eventId","ebid","modalTriggerElementId","onOrderComplete","orderComplete","ExhibitorCarousel","exhibitor_carousel_classCallCheck","1080","900","560","10","ExhibitorCarousels","carouselEls","SiteSettings","Endpoints","Newsletter","Notifications","enabled","notifications","notifications_classCallCheck","StoreSettings","notificationEl","notificationMarkup","notificationMessageEl","notiticationCloseEl","dismiss","msg","message","_this2","delay","notificationType","timeoutHandle","newsletter_classCallCheck","newsletterForm","bindSubmit","fetch","headers","Content-Type","X-Requested-With","method","credentials","serialize","json","Success","success","Messages"],"mappings":"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","file":"./js/bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n","/*! PhotoSwipe - v4.1.3 - 2019-01-08\n* http://photoswipe.com\n* Copyright (c) 2019 Dmitry Semenov; */\n(function (root, factory) { \n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.PhotoSwipe = factory();\n\t}\n})(this, function () {\n\n\t'use strict';\n\tvar PhotoSwipe = function(template, UiClass, items, options){\n\n/*>>framework-bridge*/\n/**\n *\n * Set of generic functions used by gallery.\n * \n * You're free to modify anything here as long as functionality is kept.\n * \n */\nvar framework = {\n\tfeatures: null,\n\tbind: function(target, type, listener, unbind) {\n\t\tvar methodName = (unbind ? 'remove' : 'add') + 'EventListener';\n\t\ttype = type.split(' ');\n\t\tfor(var i = 0; i < type.length; i++) {\n\t\t\tif(type[i]) {\n\t\t\t\ttarget[methodName]( type[i], listener, false);\n\t\t\t}\n\t\t}\n\t},\n\tisArray: function(obj) {\n\t\treturn (obj instanceof Array);\n\t},\n\tcreateEl: function(classes, tag) {\n\t\tvar el = document.createElement(tag || 'div');\n\t\tif(classes) {\n\t\t\tel.className = classes;\n\t\t}\n\t\treturn el;\n\t},\n\tgetScrollY: function() {\n\t\tvar yOffset = window.pageYOffset;\n\t\treturn yOffset !== undefined ? yOffset : document.documentElement.scrollTop;\n\t},\n\tunbind: function(target, type, listener) {\n\t\tframework.bind(target,type,listener,true);\n\t},\n\tremoveClass: function(el, className) {\n\t\tvar reg = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\n\t\tel.className = el.className.replace(reg, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''); \n\t},\n\taddClass: function(el, className) {\n\t\tif( !framework.hasClass(el,className) ) {\n\t\t\tel.className += (el.className ? ' ' : '') + className;\n\t\t}\n\t},\n\thasClass: function(el, className) {\n\t\treturn el.className && new RegExp('(^|\\\\s)' + className + '(\\\\s|$)').test(el.className);\n\t},\n\tgetChildByClass: function(parentEl, childClassName) {\n\t\tvar node = parentEl.firstChild;\n\t\twhile(node) {\n\t\t\tif( framework.hasClass(node, childClassName) ) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.nextSibling;\n\t\t}\n\t},\n\tarraySearch: function(array, value, key) {\n\t\tvar i = array.length;\n\t\twhile(i--) {\n\t\t\tif(array[i][key] === value) {\n\t\t\t\treturn i;\n\t\t\t} \n\t\t}\n\t\treturn -1;\n\t},\n\textend: function(o1, o2, preventOverwrite) {\n\t\tfor (var prop in o2) {\n\t\t\tif (o2.hasOwnProperty(prop)) {\n\t\t\t\tif(preventOverwrite && o1.hasOwnProperty(prop)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\to1[prop] = o2[prop];\n\t\t\t}\n\t\t}\n\t},\n\teasing: {\n\t\tsine: {\n\t\t\tout: function(k) {\n\t\t\t\treturn Math.sin(k * (Math.PI / 2));\n\t\t\t},\n\t\t\tinOut: function(k) {\n\t\t\t\treturn - (Math.cos(Math.PI * k) - 1) / 2;\n\t\t\t}\n\t\t},\n\t\tcubic: {\n\t\t\tout: function(k) {\n\t\t\t\treturn --k * k * k + 1;\n\t\t\t}\n\t\t}\n\t\t/*\n\t\t\telastic: {\n\t\t\t\tout: function ( k ) {\n\n\t\t\t\t\tvar s, a = 0.1, p = 0.4;\n\t\t\t\t\tif ( k === 0 ) return 0;\n\t\t\t\t\tif ( k === 1 ) return 1;\n\t\t\t\t\tif ( !a || a < 1 ) { a = 1; s = p / 4; }\n\t\t\t\t\telse s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n\t\t\t\t\treturn ( a * Math.pow( 2, - 10 * k) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) + 1 );\n\n\t\t\t\t},\n\t\t\t},\n\t\t\tback: {\n\t\t\t\tout: function ( k ) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\treturn --k * k * ( ( s + 1 ) * k + s ) + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t*/\n\t},\n\n\t/**\n\t * \n\t * @return {object}\n\t * \n\t * {\n\t * raf : request animation frame function\n\t * caf : cancel animation frame function\n\t * transfrom : transform property key (with vendor), or null if not supported\n\t * oldIE : IE8 or below\n\t * }\n\t * \n\t */\n\tdetectFeatures: function() {\n\t\tif(framework.features) {\n\t\t\treturn framework.features;\n\t\t}\n\t\tvar helperEl = framework.createEl(),\n\t\t\thelperStyle = helperEl.style,\n\t\t\tvendor = '',\n\t\t\tfeatures = {};\n\n\t\t// IE8 and below\n\t\tfeatures.oldIE = document.all && !document.addEventListener;\n\n\t\tfeatures.touch = 'ontouchstart' in window;\n\n\t\tif(window.requestAnimationFrame) {\n\t\t\tfeatures.raf = window.requestAnimationFrame;\n\t\t\tfeatures.caf = window.cancelAnimationFrame;\n\t\t}\n\n\t\tfeatures.pointerEvent = !!(window.PointerEvent) || navigator.msPointerEnabled;\n\n\t\t// fix false-positive detection of old Android in new IE\n\t\t// (IE11 ua string contains \"Android 4.0\")\n\t\t\n\t\tif(!features.pointerEvent) { \n\n\t\t\tvar ua = navigator.userAgent;\n\n\t\t\t// Detect if device is iPhone or iPod and if it's older than iOS 8\n\t\t\t// http://stackoverflow.com/a/14223920\n\t\t\t// \n\t\t\t// This detection is made because of buggy top/bottom toolbars\n\t\t\t// that don't trigger window.resize event.\n\t\t\t// For more info refer to _isFixedPosition variable in core.js\n\n\t\t\tif (/iP(hone|od)/.test(navigator.platform)) {\n\t\t\t\tvar v = (navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n\t\t\t\tif(v && v.length > 0) {\n\t\t\t\t\tv = parseInt(v[1], 10);\n\t\t\t\t\tif(v >= 1 && v < 8 ) {\n\t\t\t\t\t\tfeatures.isOldIOSPhone = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Detect old Android (before KitKat)\n\t\t\t// due to bugs related to position:fixed\n\t\t\t// http://stackoverflow.com/questions/7184573/pick-up-the-android-version-in-the-browser-by-javascript\n\t\t\t\n\t\t\tvar match = ua.match(/Android\\s([0-9\\.]*)/);\n\t\t\tvar androidversion = match ? match[1] : 0;\n\t\t\tandroidversion = parseFloat(androidversion);\n\t\t\tif(androidversion >= 1 ) {\n\t\t\t\tif(androidversion < 4.4) {\n\t\t\t\t\tfeatures.isOldAndroid = true; // for fixed position bug & performance\n\t\t\t\t}\n\t\t\t\tfeatures.androidVersion = androidversion; // for touchend bug\n\t\t\t}\t\n\t\t\tfeatures.isMobileOpera = /opera mini|opera mobi/i.test(ua);\n\n\t\t\t// p.s. yes, yes, UA sniffing is bad, propose your solution for above bugs.\n\t\t}\n\t\t\n\t\tvar styleChecks = ['transform', 'perspective', 'animationName'],\n\t\t\tvendors = ['', 'webkit','Moz','ms','O'],\n\t\t\tstyleCheckItem,\n\t\t\tstyleName;\n\n\t\tfor(var i = 0; i < 4; i++) {\n\t\t\tvendor = vendors[i];\n\n\t\t\tfor(var a = 0; a < 3; a++) {\n\t\t\t\tstyleCheckItem = styleChecks[a];\n\n\t\t\t\t// uppercase first letter of property name, if vendor is present\n\t\t\t\tstyleName = vendor + (vendor ? \n\t\t\t\t\t\t\t\t\t\tstyleCheckItem.charAt(0).toUpperCase() + styleCheckItem.slice(1) : \n\t\t\t\t\t\t\t\t\t\tstyleCheckItem);\n\t\t\t\n\t\t\t\tif(!features[styleCheckItem] && styleName in helperStyle ) {\n\t\t\t\t\tfeatures[styleCheckItem] = styleName;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(vendor && !features.raf) {\n\t\t\t\tvendor = vendor.toLowerCase();\n\t\t\t\tfeatures.raf = window[vendor+'RequestAnimationFrame'];\n\t\t\t\tif(features.raf) {\n\t\t\t\t\tfeatures.caf = window[vendor+'CancelAnimationFrame'] || \n\t\t\t\t\t\t\t\t\twindow[vendor+'CancelRequestAnimationFrame'];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\t\n\t\tif(!features.raf) {\n\t\t\tvar lastTime = 0;\n\t\t\tfeatures.raf = function(fn) {\n\t\t\t\tvar currTime = new Date().getTime();\n\t\t\t\tvar timeToCall = Math.max(0, 16 - (currTime - lastTime));\n\t\t\t\tvar id = window.setTimeout(function() { fn(currTime + timeToCall); }, timeToCall);\n\t\t\t\tlastTime = currTime + timeToCall;\n\t\t\t\treturn id;\n\t\t\t};\n\t\t\tfeatures.caf = function(id) { clearTimeout(id); };\n\t\t}\n\n\t\t// Detect SVG support\n\t\tfeatures.svg = !!document.createElementNS && \n\t\t\t\t\t\t!!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect;\n\n\t\tframework.features = features;\n\n\t\treturn features;\n\t}\n};\n\nframework.detectFeatures();\n\n// Override addEventListener for old versions of IE\nif(framework.features.oldIE) {\n\n\tframework.bind = function(target, type, listener, unbind) {\n\t\t\n\t\ttype = type.split(' ');\n\n\t\tvar methodName = (unbind ? 'detach' : 'attach') + 'Event',\n\t\t\tevName,\n\t\t\t_handleEv = function() {\n\t\t\t\tlistener.handleEvent.call(listener);\n\t\t\t};\n\n\t\tfor(var i = 0; i < type.length; i++) {\n\t\t\tevName = type[i];\n\t\t\tif(evName) {\n\n\t\t\t\tif(typeof listener === 'object' && listener.handleEvent) {\n\t\t\t\t\tif(!unbind) {\n\t\t\t\t\t\tlistener['oldIE' + evName] = _handleEv;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(!listener['oldIE' + evName]) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[methodName]( 'on' + evName, listener['oldIE' + evName]);\n\t\t\t\t} else {\n\t\t\t\t\ttarget[methodName]( 'on' + evName, listener);\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t};\n\t\n}\n\n/*>>framework-bridge*/\n\n/*>>core*/\n//function(template, UiClass, items, options)\n\nvar self = this;\n\n/**\n * Static vars, don't change unless you know what you're doing.\n */\nvar DOUBLE_TAP_RADIUS = 25, \n\tNUM_HOLDERS = 3;\n\n/**\n * Options\n */\nvar _options = {\n\tallowPanToNext:true,\n\tspacing: 0.12,\n\tbgOpacity: 1,\n\tmouseUsed: false,\n\tloop: true,\n\tpinchToClose: true,\n\tcloseOnScroll: true,\n\tcloseOnVerticalDrag: true,\n\tverticalDragRange: 0.75,\n\thideAnimationDuration: 333,\n\tshowAnimationDuration: 333,\n\tshowHideOpacity: false,\n\tfocus: true,\n\tescKey: true,\n\tarrowKeys: true,\n\tmainScrollEndFriction: 0.35,\n\tpanEndFriction: 0.35,\n\tisClickableElement: function(el) {\n return el.tagName === 'A';\n },\n getDoubleTapZoom: function(isMouseClick, item) {\n \tif(isMouseClick) {\n \t\treturn 1;\n \t} else {\n \t\treturn item.initialZoomLevel < 0.7 ? 1 : 1.33;\n \t}\n },\n maxSpreadZoom: 1.33,\n\tmodal: true,\n\n\t// not fully implemented yet\n\tscaleMode: 'fit' // TODO\n};\nframework.extend(_options, options);\n\n\n/**\n * Private helper variables & functions\n */\n\nvar _getEmptyPoint = function() { \n\t\treturn {x:0,y:0}; \n\t};\n\nvar _isOpen,\n\t_isDestroying,\n\t_closedByScroll,\n\t_currentItemIndex,\n\t_containerStyle,\n\t_containerShiftIndex,\n\t_currPanDist = _getEmptyPoint(),\n\t_startPanOffset = _getEmptyPoint(),\n\t_panOffset = _getEmptyPoint(),\n\t_upMoveEvents, // drag move, drag end & drag cancel events array\n\t_downEvents, // drag start events array\n\t_globalEventHandlers,\n\t_viewportSize = {},\n\t_currZoomLevel,\n\t_startZoomLevel,\n\t_translatePrefix,\n\t_translateSufix,\n\t_updateSizeInterval,\n\t_itemsNeedUpdate,\n\t_currPositionIndex = 0,\n\t_offset = {},\n\t_slideSize = _getEmptyPoint(), // size of slide area, including spacing\n\t_itemHolders,\n\t_prevItemIndex,\n\t_indexDiff = 0, // difference of indexes since last content update\n\t_dragStartEvent,\n\t_dragMoveEvent,\n\t_dragEndEvent,\n\t_dragCancelEvent,\n\t_transformKey,\n\t_pointerEventEnabled,\n\t_isFixedPosition = true,\n\t_likelyTouchDevice,\n\t_modules = [],\n\t_requestAF,\n\t_cancelAF,\n\t_initalClassName,\n\t_initalWindowScrollY,\n\t_oldIE,\n\t_currentWindowScrollY,\n\t_features,\n\t_windowVisibleSize = {},\n\t_renderMaxResolution = false,\n\t_orientationChangeTimeout,\n\n\n\t// Registers PhotoSWipe module (History, Controller ...)\n\t_registerModule = function(name, module) {\n\t\tframework.extend(self, module.publicMethods);\n\t\t_modules.push(name);\n\t},\n\n\t_getLoopedId = function(index) {\n\t\tvar numSlides = _getNumItems();\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t\n\t// Micro bind/trigger\n\t_listeners = {},\n\t_listen = function(name, fn) {\n\t\tif(!_listeners[name]) {\n\t\t\t_listeners[name] = [];\n\t\t}\n\t\treturn _listeners[name].push(fn);\n\t},\n\t_shout = function(name) {\n\t\tvar listeners = _listeners[name];\n\n\t\tif(listeners) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\t\targs.shift();\n\n\t\t\tfor(var i = 0; i < listeners.length; i++) {\n\t\t\t\tlisteners[i].apply(self, args);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getCurrentTime = function() {\n\t\treturn new Date().getTime();\n\t},\n\t_applyBgOpacity = function(opacity) {\n\t\t_bgOpacity = opacity;\n\t\tself.bg.style.opacity = opacity * _options.bgOpacity;\n\t},\n\n\t_applyZoomTransform = function(styleObj,x,y,zoom,item) {\n\t\tif(!_renderMaxResolution || (item && item !== self.currItem) ) {\n\t\t\tzoom = zoom / (item ? item.fitRatio : self.currItem.fitRatio);\t\n\t\t}\n\t\t\t\n\t\tstyleObj[_transformKey] = _translatePrefix + x + 'px, ' + y + 'px' + _translateSufix + ' scale(' + zoom + ')';\n\t},\n\t_applyCurrentZoomPan = function( allowRenderResolution ) {\n\t\tif(_currZoomElementStyle) {\n\n\t\t\tif(allowRenderResolution) {\n\t\t\t\tif(_currZoomLevel > self.currItem.fitRatio) {\n\t\t\t\t\tif(!_renderMaxResolution) {\n\t\t\t\t\t\t_setImageSize(self.currItem, false, true);\n\t\t\t\t\t\t_renderMaxResolution = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif(_renderMaxResolution) {\n\t\t\t\t\t\t_setImageSize(self.currItem);\n\t\t\t\t\t\t_renderMaxResolution = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\t\t\t_applyZoomTransform(_currZoomElementStyle, _panOffset.x, _panOffset.y, _currZoomLevel);\n\t\t}\n\t},\n\t_applyZoomPanToItem = function(item) {\n\t\tif(item.container) {\n\n\t\t\t_applyZoomTransform(item.container.style, \n\t\t\t\t\t\t\t\titem.initialPosition.x, \n\t\t\t\t\t\t\t\titem.initialPosition.y, \n\t\t\t\t\t\t\t\titem.initialZoomLevel,\n\t\t\t\t\t\t\t\titem);\n\t\t}\n\t},\n\t_setTranslateX = function(x, elStyle) {\n\t\telStyle[_transformKey] = _translatePrefix + x + 'px, 0px' + _translateSufix;\n\t},\n\t_moveMainScroll = function(x, dragging) {\n\n\t\tif(!_options.loop && dragging) {\n\t\t\tvar newSlideIndexOffset = _currentItemIndex + (_slideSize.x * _currPositionIndex - x) / _slideSize.x,\n\t\t\t\tdelta = Math.round(x - _mainScrollPos.x);\n\n\t\t\tif( (newSlideIndexOffset < 0 && delta > 0) || \n\t\t\t\t(newSlideIndexOffset >= _getNumItems() - 1 && delta < 0) ) {\n\t\t\t\tx = _mainScrollPos.x + delta * _options.mainScrollEndFriction;\n\t\t\t} \n\t\t}\n\t\t\n\t\t_mainScrollPos.x = x;\n\t\t_setTranslateX(x, _containerStyle);\n\t},\n\t_calculatePanOffset = function(axis, zoomLevel) {\n\t\tvar m = _midZoomPoint[axis] - _offset[axis];\n\t\treturn _startPanOffset[axis] + _currPanDist[axis] + m - m * ( zoomLevel / _startZoomLevel );\n\t},\n\t\n\t_equalizePoints = function(p1, p2) {\n\t\tp1.x = p2.x;\n\t\tp1.y = p2.y;\n\t\tif(p2.id) {\n\t\t\tp1.id = p2.id;\n\t\t}\n\t},\n\t_roundPoint = function(p) {\n\t\tp.x = Math.round(p.x);\n\t\tp.y = Math.round(p.y);\n\t},\n\n\t_mouseMoveTimeout = null,\n\t_onFirstMouseMove = function() {\n\t\t// Wait until mouse move event is fired at least twice during 100ms\n\t\t// We do this, because some mobile browsers trigger it on touchstart\n\t\tif(_mouseMoveTimeout ) { \n\t\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\n\t\t\tframework.addClass(template, 'pswp--has_mouse');\n\t\t\t_options.mouseUsed = true;\n\t\t\t_shout('mouseUsed');\n\t\t}\n\t\t_mouseMoveTimeout = setTimeout(function() {\n\t\t\t_mouseMoveTimeout = null;\n\t\t}, 100);\n\t},\n\n\t_bindEvents = function() {\n\t\tframework.bind(document, 'keydown', self);\n\n\t\tif(_features.transform) {\n\t\t\t// don't bind click event in browsers that don't support transform (mostly IE8)\n\t\t\tframework.bind(self.scrollWrap, 'click', self);\n\t\t}\n\t\t\n\n\t\tif(!_options.mouseUsed) {\n\t\t\tframework.bind(document, 'mousemove', _onFirstMouseMove);\n\t\t}\n\n\t\tframework.bind(window, 'resize scroll orientationchange', self);\n\n\t\t_shout('bindEvents');\n\t},\n\n\t_unbindEvents = function() {\n\t\tframework.unbind(window, 'resize scroll orientationchange', self);\n\t\tframework.unbind(window, 'scroll', _globalEventHandlers.scroll);\n\t\tframework.unbind(document, 'keydown', self);\n\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\n\n\t\tif(_features.transform) {\n\t\t\tframework.unbind(self.scrollWrap, 'click', self);\n\t\t}\n\n\t\tif(_isDragging) {\n\t\t\tframework.unbind(window, _upMoveEvents, self);\n\t\t}\n\n\t\tclearTimeout(_orientationChangeTimeout);\n\n\t\t_shout('unbindEvents');\n\t},\n\t\n\t_calculatePanBounds = function(zoomLevel, update) {\n\t\tvar bounds = _calculateItemSize( self.currItem, _viewportSize, zoomLevel );\n\t\tif(update) {\n\t\t\t_currPanBounds = bounds;\n\t\t}\n\t\treturn bounds;\n\t},\n\t\n\t_getMinZoomLevel = function(item) {\n\t\tif(!item) {\n\t\t\titem = self.currItem;\n\t\t}\n\t\treturn item.initialZoomLevel;\n\t},\n\t_getMaxZoomLevel = function(item) {\n\t\tif(!item) {\n\t\t\titem = self.currItem;\n\t\t}\n\t\treturn item.w > 0 ? _options.maxSpreadZoom : 1;\n\t},\n\n\t// Return true if offset is out of the bounds\n\t_modifyDestPanOffset = function(axis, destPanBounds, destPanOffset, destZoomLevel) {\n\t\tif(destZoomLevel === self.currItem.initialZoomLevel) {\n\t\t\tdestPanOffset[axis] = self.currItem.initialPosition[axis];\n\t\t\treturn true;\n\t\t} else {\n\t\t\tdestPanOffset[axis] = _calculatePanOffset(axis, destZoomLevel); \n\n\t\t\tif(destPanOffset[axis] > destPanBounds.min[axis]) {\n\t\t\t\tdestPanOffset[axis] = destPanBounds.min[axis];\n\t\t\t\treturn true;\n\t\t\t} else if(destPanOffset[axis] < destPanBounds.max[axis] ) {\n\t\t\t\tdestPanOffset[axis] = destPanBounds.max[axis];\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t_setupTransforms = function() {\n\n\t\tif(_transformKey) {\n\t\t\t// setup 3d transforms\n\t\t\tvar allow3dTransform = _features.perspective && !_likelyTouchDevice;\n\t\t\t_translatePrefix = 'translate' + (allow3dTransform ? '3d(' : '(');\n\t\t\t_translateSufix = _features.perspective ? ', 0px)' : ')';\t\n\t\t\treturn;\n\t\t}\n\n\t\t// Override zoom/pan/move functions in case old browser is used (most likely IE)\n\t\t// (so they use left/top/width/height, instead of CSS transform)\n\t\n\t\t_transformKey = 'left';\n\t\tframework.addClass(template, 'pswp--ie');\n\n\t\t_setTranslateX = function(x, elStyle) {\n\t\t\telStyle.left = x + 'px';\n\t\t};\n\t\t_applyZoomPanToItem = function(item) {\n\n\t\t\tvar zoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n\t\t\t\ts = item.container.style,\n\t\t\t\tw = zoomRatio * item.w,\n\t\t\t\th = zoomRatio * item.h;\n\n\t\t\ts.width = w + 'px';\n\t\t\ts.height = h + 'px';\n\t\t\ts.left = item.initialPosition.x + 'px';\n\t\t\ts.top = item.initialPosition.y + 'px';\n\n\t\t};\n\t\t_applyCurrentZoomPan = function() {\n\t\t\tif(_currZoomElementStyle) {\n\n\t\t\t\tvar s = _currZoomElementStyle,\n\t\t\t\t\titem = self.currItem,\n\t\t\t\t\tzoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n\t\t\t\t\tw = zoomRatio * item.w,\n\t\t\t\t\th = zoomRatio * item.h;\n\n\t\t\t\ts.width = w + 'px';\n\t\t\t\ts.height = h + 'px';\n\n\n\t\t\t\ts.left = _panOffset.x + 'px';\n\t\t\t\ts.top = _panOffset.y + 'px';\n\t\t\t}\n\t\t\t\n\t\t};\n\t},\n\n\t_onKeyDown = function(e) {\n\t\tvar keydownAction = '';\n\t\tif(_options.escKey && e.keyCode === 27) { \n\t\t\tkeydownAction = 'close';\n\t\t} else if(_options.arrowKeys) {\n\t\t\tif(e.keyCode === 37) {\n\t\t\t\tkeydownAction = 'prev';\n\t\t\t} else if(e.keyCode === 39) { \n\t\t\t\tkeydownAction = 'next';\n\t\t\t}\n\t\t}\n\n\t\tif(keydownAction) {\n\t\t\t// don't do anything if special key pressed to prevent from overriding default browser actions\n\t\t\t// e.g. in Chrome on Mac cmd+arrow-left returns to previous page\n\t\t\tif( !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey ) {\n\t\t\t\tif(e.preventDefault) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t} else {\n\t\t\t\t\te.returnValue = false;\n\t\t\t\t} \n\t\t\t\tself[keydownAction]();\n\t\t\t}\n\t\t}\n\t},\n\n\t_onGlobalClick = function(e) {\n\t\tif(!e) {\n\t\t\treturn;\n\t\t}\n\n\t\t// don't allow click event to pass through when triggering after drag or some other gesture\n\t\tif(_moved || _zoomStarted || _mainScrollAnimating || _verticalDragInitiated) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\n\t_updatePageScrollOffset = function() {\n\t\tself.setScrollOffset(0, framework.getScrollY());\t\t\n\t};\n\t\n\n\n\t\n\n\n\n// Micro animation engine\nvar _animations = {},\n\t_numAnimations = 0,\n\t_stopAnimation = function(name) {\n\t\tif(_animations[name]) {\n\t\t\tif(_animations[name].raf) {\n\t\t\t\t_cancelAF( _animations[name].raf );\n\t\t\t}\n\t\t\t_numAnimations--;\n\t\t\tdelete _animations[name];\n\t\t}\n\t},\n\t_registerStartAnimation = function(name) {\n\t\tif(_animations[name]) {\n\t\t\t_stopAnimation(name);\n\t\t}\n\t\tif(!_animations[name]) {\n\t\t\t_numAnimations++;\n\t\t\t_animations[name] = {};\n\t\t}\n\t},\n\t_stopAllAnimations = function() {\n\t\tfor (var prop in _animations) {\n\n\t\t\tif( _animations.hasOwnProperty( prop ) ) {\n\t\t\t\t_stopAnimation(prop);\n\t\t\t} \n\t\t\t\n\t\t}\n\t},\n\t_animateProp = function(name, b, endProp, d, easingFn, onUpdate, onComplete) {\n\t\tvar startAnimTime = _getCurrentTime(), t;\n\t\t_registerStartAnimation(name);\n\n\t\tvar animloop = function(){\n\t\t\tif ( _animations[name] ) {\n\t\t\t\t\n\t\t\t\tt = _getCurrentTime() - startAnimTime; // time diff\n\t\t\t\t//b - beginning (start prop)\n\t\t\t\t//d - anim duration\n\n\t\t\t\tif ( t >= d ) {\n\t\t\t\t\t_stopAnimation(name);\n\t\t\t\t\tonUpdate(endProp);\n\t\t\t\t\tif(onComplete) {\n\t\t\t\t\t\tonComplete();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonUpdate( (endProp - b) * easingFn(t/d) + b );\n\n\t\t\t\t_animations[name].raf = _requestAF(animloop);\n\t\t\t}\n\t\t};\n\t\tanimloop();\n\t};\n\t\n\n\nvar publicMethods = {\n\n\t// make a few local variables and functions public\n\tshout: _shout,\n\tlisten: _listen,\n\tviewportSize: _viewportSize,\n\toptions: _options,\n\n\tisMainScrollAnimating: function() {\n\t\treturn _mainScrollAnimating;\n\t},\n\tgetZoomLevel: function() {\n\t\treturn _currZoomLevel;\n\t},\n\tgetCurrentIndex: function() {\n\t\treturn _currentItemIndex;\n\t},\n\tisDragging: function() {\n\t\treturn _isDragging;\n\t},\t\n\tisZooming: function() {\n\t\treturn _isZooming;\n\t},\n\tsetScrollOffset: function(x,y) {\n\t\t_offset.x = x;\n\t\t_currentWindowScrollY = _offset.y = y;\n\t\t_shout('updateScrollOffset', _offset);\n\t},\n\tapplyZoomPan: function(zoomLevel,panX,panY,allowRenderResolution) {\n\t\t_panOffset.x = panX;\n\t\t_panOffset.y = panY;\n\t\t_currZoomLevel = zoomLevel;\n\t\t_applyCurrentZoomPan( allowRenderResolution );\n\t},\n\n\tinit: function() {\n\n\t\tif(_isOpen || _isDestroying) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar i;\n\n\t\tself.framework = framework; // basic functionality\n\t\tself.template = template; // root DOM element of PhotoSwipe\n\t\tself.bg = framework.getChildByClass(template, 'pswp__bg');\n\n\t\t_initalClassName = template.className;\n\t\t_isOpen = true;\n\t\t\t\t\n\t\t_features = framework.detectFeatures();\n\t\t_requestAF = _features.raf;\n\t\t_cancelAF = _features.caf;\n\t\t_transformKey = _features.transform;\n\t\t_oldIE = _features.oldIE;\n\t\t\n\t\tself.scrollWrap = framework.getChildByClass(template, 'pswp__scroll-wrap');\n\t\tself.container = framework.getChildByClass(self.scrollWrap, 'pswp__container');\n\n\t\t_containerStyle = self.container.style; // for fast access\n\n\t\t// Objects that hold slides (there are only 3 in DOM)\n\t\tself.itemHolders = _itemHolders = [\n\t\t\t{el:self.container.children[0] , wrap:0, index: -1},\n\t\t\t{el:self.container.children[1] , wrap:0, index: -1},\n\t\t\t{el:self.container.children[2] , wrap:0, index: -1}\n\t\t];\n\n\t\t// hide nearby item holders until initial zoom animation finishes (to avoid extra Paints)\n\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'none';\n\n\t\t_setupTransforms();\n\n\t\t// Setup global events\n\t\t_globalEventHandlers = {\n\t\t\tresize: self.updateSize,\n\n\t\t\t// Fixes: iOS 10.3 resize event\n\t\t\t// does not update scrollWrap.clientWidth instantly after resize\n\t\t\t// https://github.com/dimsemenov/PhotoSwipe/issues/1315\n\t\t\torientationchange: function() {\n\t\t\t\tclearTimeout(_orientationChangeTimeout);\n\t\t\t\t_orientationChangeTimeout = setTimeout(function() {\n\t\t\t\t\tif(_viewportSize.x !== self.scrollWrap.clientWidth) {\n\t\t\t\t\t\tself.updateSize();\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t},\n\t\t\tscroll: _updatePageScrollOffset,\n\t\t\tkeydown: _onKeyDown,\n\t\t\tclick: _onGlobalClick\n\t\t};\n\n\t\t// disable show/hide effects on old browsers that don't support CSS animations or transforms, \n\t\t// old IOS, Android and Opera mobile. Blackberry seems to work fine, even older models.\n\t\tvar oldPhone = _features.isOldIOSPhone || _features.isOldAndroid || _features.isMobileOpera;\n\t\tif(!_features.animationName || !_features.transform || oldPhone) {\n\t\t\t_options.showAnimationDuration = _options.hideAnimationDuration = 0;\n\t\t}\n\n\t\t// init modules\n\t\tfor(i = 0; i < _modules.length; i++) {\n\t\t\tself['init' + _modules[i]]();\n\t\t}\n\t\t\n\t\t// init\n\t\tif(UiClass) {\n\t\t\tvar ui = self.ui = new UiClass(self, framework);\n\t\t\tui.init();\n\t\t}\n\n\t\t_shout('firstUpdate');\n\t\t_currentItemIndex = _currentItemIndex || _options.index || 0;\n\t\t// validate index\n\t\tif( isNaN(_currentItemIndex) || _currentItemIndex < 0 || _currentItemIndex >= _getNumItems() ) {\n\t\t\t_currentItemIndex = 0;\n\t\t}\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\n\t\t\n\t\tif(_features.isOldIOSPhone || _features.isOldAndroid) {\n\t\t\t_isFixedPosition = false;\n\t\t}\n\t\t\n\t\ttemplate.setAttribute('aria-hidden', 'false');\n\t\tif(_options.modal) {\n\t\t\tif(!_isFixedPosition) {\n\t\t\t\ttemplate.style.position = 'absolute';\n\t\t\t\ttemplate.style.top = framework.getScrollY() + 'px';\n\t\t\t} else {\n\t\t\t\ttemplate.style.position = 'fixed';\n\t\t\t}\n\t\t}\n\n\t\tif(_currentWindowScrollY === undefined) {\n\t\t\t_shout('initialLayout');\n\t\t\t_currentWindowScrollY = _initalWindowScrollY = framework.getScrollY();\n\t\t}\n\t\t\n\t\t// add classes to root element of PhotoSwipe\n\t\tvar rootClasses = 'pswp--open ';\n\t\tif(_options.mainClass) {\n\t\t\trootClasses += _options.mainClass + ' ';\n\t\t}\n\t\tif(_options.showHideOpacity) {\n\t\t\trootClasses += 'pswp--animate_opacity ';\n\t\t}\n\t\trootClasses += _likelyTouchDevice ? 'pswp--touch' : 'pswp--notouch';\n\t\trootClasses += _features.animationName ? ' pswp--css_animation' : '';\n\t\trootClasses += _features.svg ? ' pswp--svg' : '';\n\t\tframework.addClass(template, rootClasses);\n\n\t\tself.updateSize();\n\n\t\t// initial update\n\t\t_containerShiftIndex = -1;\n\t\t_indexDiff = null;\n\t\tfor(i = 0; i < NUM_HOLDERS; i++) {\n\t\t\t_setTranslateX( (i+_containerShiftIndex) * _slideSize.x, _itemHolders[i].el.style);\n\t\t}\n\n\t\tif(!_oldIE) {\n\t\t\tframework.bind(self.scrollWrap, _downEvents, self); // no dragging for old IE\n\t\t}\t\n\n\t\t_listen('initialZoomInEnd', function() {\n\t\t\tself.setContent(_itemHolders[0], _currentItemIndex-1);\n\t\t\tself.setContent(_itemHolders[2], _currentItemIndex+1);\n\n\t\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'block';\n\n\t\t\tif(_options.focus) {\n\t\t\t\t// focus causes layout, \n\t\t\t\t// which causes lag during the animation, \n\t\t\t\t// that's why we delay it untill the initial zoom transition ends\n\t\t\t\ttemplate.focus();\n\t\t\t}\n\t\t\t \n\n\t\t\t_bindEvents();\n\t\t});\n\n\t\t// set content for center slide (first time)\n\t\tself.setContent(_itemHolders[1], _currentItemIndex);\n\t\t\n\t\tself.updateCurrItem();\n\n\t\t_shout('afterInit');\n\n\t\tif(!_isFixedPosition) {\n\n\t\t\t// On all versions of iOS lower than 8.0, we check size of viewport every second.\n\t\t\t// \n\t\t\t// This is done to detect when Safari top & bottom bars appear, \n\t\t\t// as this action doesn't trigger any events (like resize). \n\t\t\t// \n\t\t\t// On iOS8 they fixed this.\n\t\t\t// \n\t\t\t// 10 Nov 2014: iOS 7 usage ~40%. iOS 8 usage 56%.\n\t\t\t\n\t\t\t_updateSizeInterval = setInterval(function() {\n\t\t\t\tif(!_numAnimations && !_isDragging && !_isZooming && (_currZoomLevel === self.currItem.initialZoomLevel) ) {\n\t\t\t\t\tself.updateSize();\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t}\n\n\t\tframework.addClass(template, 'pswp--visible');\n\t},\n\n\t// Close the gallery, then destroy it\n\tclose: function() {\n\t\tif(!_isOpen) {\n\t\t\treturn;\n\t\t}\n\n\t\t_isOpen = false;\n\t\t_isDestroying = true;\n\t\t_shout('close');\n\t\t_unbindEvents();\n\n\t\t_showOrHide(self.currItem, null, true, self.destroy);\n\t},\n\n\t// destroys the gallery (unbinds events, cleans up intervals and timeouts to avoid memory leaks)\n\tdestroy: function() {\n\t\t_shout('destroy');\n\n\t\tif(_showOrHideTimeout) {\n\t\t\tclearTimeout(_showOrHideTimeout);\n\t\t}\n\t\t\n\t\ttemplate.setAttribute('aria-hidden', 'true');\n\t\ttemplate.className = _initalClassName;\n\n\t\tif(_updateSizeInterval) {\n\t\t\tclearInterval(_updateSizeInterval);\n\t\t}\n\n\t\tframework.unbind(self.scrollWrap, _downEvents, self);\n\n\t\t// we unbind scroll event at the end, as closing animation may depend on it\n\t\tframework.unbind(window, 'scroll', self);\n\n\t\t_stopDragUpdateLoop();\n\n\t\t_stopAllAnimations();\n\n\t\t_listeners = null;\n\t},\n\n\t/**\n\t * Pan image to position\n\t * @param {Number} x \n\t * @param {Number} y \n\t * @param {Boolean} force Will ignore bounds if set to true.\n\t */\n\tpanTo: function(x,y,force) {\n\t\tif(!force) {\n\t\t\tif(x > _currPanBounds.min.x) {\n\t\t\t\tx = _currPanBounds.min.x;\n\t\t\t} else if(x < _currPanBounds.max.x) {\n\t\t\t\tx = _currPanBounds.max.x;\n\t\t\t}\n\n\t\t\tif(y > _currPanBounds.min.y) {\n\t\t\t\ty = _currPanBounds.min.y;\n\t\t\t} else if(y < _currPanBounds.max.y) {\n\t\t\t\ty = _currPanBounds.max.y;\n\t\t\t}\n\t\t}\n\t\t\n\t\t_panOffset.x = x;\n\t\t_panOffset.y = y;\n\t\t_applyCurrentZoomPan();\n\t},\n\t\n\thandleEvent: function (e) {\n\t\te = e || window.event;\n\t\tif(_globalEventHandlers[e.type]) {\n\t\t\t_globalEventHandlers[e.type](e);\n\t\t}\n\t},\n\n\n\tgoTo: function(index) {\n\n\t\tindex = _getLoopedId(index);\n\n\t\tvar diff = index - _currentItemIndex;\n\t\t_indexDiff = diff;\n\n\t\t_currentItemIndex = index;\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\t\t_currPositionIndex -= diff;\n\t\t\n\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\n\t\t\n\n\t\t_stopAllAnimations();\n\t\t_mainScrollAnimating = false;\n\n\t\tself.updateCurrItem();\n\t},\n\tnext: function() {\n\t\tself.goTo( _currentItemIndex + 1);\n\t},\n\tprev: function() {\n\t\tself.goTo( _currentItemIndex - 1);\n\t},\n\n\t// update current zoom/pan objects\n\tupdateCurrZoomItem: function(emulateSetContent) {\n\t\tif(emulateSetContent) {\n\t\t\t_shout('beforeChange', 0);\n\t\t}\n\n\t\t// itemHolder[1] is middle (current) item\n\t\tif(_itemHolders[1].el.children.length) {\n\t\t\tvar zoomElement = _itemHolders[1].el.children[0];\n\t\t\tif( framework.hasClass(zoomElement, 'pswp__zoom-wrap') ) {\n\t\t\t\t_currZoomElementStyle = zoomElement.style;\n\t\t\t} else {\n\t\t\t\t_currZoomElementStyle = null;\n\t\t\t}\n\t\t} else {\n\t\t\t_currZoomElementStyle = null;\n\t\t}\n\t\t\n\t\t_currPanBounds = self.currItem.bounds;\t\n\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n\n\t\t_panOffset.x = _currPanBounds.center.x;\n\t\t_panOffset.y = _currPanBounds.center.y;\n\n\t\tif(emulateSetContent) {\n\t\t\t_shout('afterChange');\n\t\t}\n\t},\n\n\n\tinvalidateCurrItems: function() {\n\t\t_itemsNeedUpdate = true;\n\t\tfor(var i = 0; i < NUM_HOLDERS; i++) {\n\t\t\tif( _itemHolders[i].item ) {\n\t\t\t\t_itemHolders[i].item.needsUpdate = true;\n\t\t\t}\n\t\t}\n\t},\n\n\tupdateCurrItem: function(beforeAnimation) {\n\n\t\tif(_indexDiff === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar diffAbs = Math.abs(_indexDiff),\n\t\t\ttempHolder;\n\n\t\tif(beforeAnimation && diffAbs < 2) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\t\t_renderMaxResolution = false;\n\t\t\n\t\t_shout('beforeChange', _indexDiff);\n\n\t\tif(diffAbs >= NUM_HOLDERS) {\n\t\t\t_containerShiftIndex += _indexDiff + (_indexDiff > 0 ? -NUM_HOLDERS : NUM_HOLDERS);\n\t\t\tdiffAbs = NUM_HOLDERS;\n\t\t}\n\t\tfor(var i = 0; i < diffAbs; i++) {\n\t\t\tif(_indexDiff > 0) {\n\t\t\t\ttempHolder = _itemHolders.shift();\n\t\t\t\t_itemHolders[NUM_HOLDERS-1] = tempHolder; // move first to last\n\n\t\t\t\t_containerShiftIndex++;\n\t\t\t\t_setTranslateX( (_containerShiftIndex+2) * _slideSize.x, tempHolder.el.style);\n\t\t\t\tself.setContent(tempHolder, _currentItemIndex - diffAbs + i + 1 + 1);\n\t\t\t} else {\n\t\t\t\ttempHolder = _itemHolders.pop();\n\t\t\t\t_itemHolders.unshift( tempHolder ); // move last to first\n\n\t\t\t\t_containerShiftIndex--;\n\t\t\t\t_setTranslateX( _containerShiftIndex * _slideSize.x, tempHolder.el.style);\n\t\t\t\tself.setContent(tempHolder, _currentItemIndex + diffAbs - i - 1 - 1);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t// reset zoom/pan on previous item\n\t\tif(_currZoomElementStyle && Math.abs(_indexDiff) === 1) {\n\n\t\t\tvar prevItem = _getItemAt(_prevItemIndex);\n\t\t\tif(prevItem.initialZoomLevel !== _currZoomLevel) {\n\t\t\t\t_calculateItemSize(prevItem , _viewportSize );\n\t\t\t\t_setImageSize(prevItem);\n\t\t\t\t_applyZoomPanToItem( prevItem ); \t\t\t\t\n\t\t\t}\n\n\t\t}\n\n\t\t// reset diff after update\n\t\t_indexDiff = 0;\n\n\t\tself.updateCurrZoomItem();\n\n\t\t_prevItemIndex = _currentItemIndex;\n\n\t\t_shout('afterChange');\n\t\t\n\t},\n\n\n\n\tupdateSize: function(force) {\n\t\t\n\t\tif(!_isFixedPosition && _options.modal) {\n\t\t\tvar windowScrollY = framework.getScrollY();\n\t\t\tif(_currentWindowScrollY !== windowScrollY) {\n\t\t\t\ttemplate.style.top = windowScrollY + 'px';\n\t\t\t\t_currentWindowScrollY = windowScrollY;\n\t\t\t}\n\t\t\tif(!force && _windowVisibleSize.x === window.innerWidth && _windowVisibleSize.y === window.innerHeight) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_windowVisibleSize.x = window.innerWidth;\n\t\t\t_windowVisibleSize.y = window.innerHeight;\n\n\t\t\t//template.style.width = _windowVisibleSize.x + 'px';\n\t\t\ttemplate.style.height = _windowVisibleSize.y + 'px';\n\t\t}\n\n\n\n\t\t_viewportSize.x = self.scrollWrap.clientWidth;\n\t\t_viewportSize.y = self.scrollWrap.clientHeight;\n\n\t\t_updatePageScrollOffset();\n\n\t\t_slideSize.x = _viewportSize.x + Math.round(_viewportSize.x * _options.spacing);\n\t\t_slideSize.y = _viewportSize.y;\n\n\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\n\n\t\t_shout('beforeResize'); // even may be used for example to switch image sources\n\n\n\t\t// don't re-calculate size on inital size update\n\t\tif(_containerShiftIndex !== undefined) {\n\n\t\t\tvar holder,\n\t\t\t\titem,\n\t\t\t\thIndex;\n\n\t\t\tfor(var i = 0; i < NUM_HOLDERS; i++) {\n\t\t\t\tholder = _itemHolders[i];\n\t\t\t\t_setTranslateX( (i+_containerShiftIndex) * _slideSize.x, holder.el.style);\n\n\t\t\t\thIndex = _currentItemIndex+i-1;\n\n\t\t\t\tif(_options.loop && _getNumItems() > 2) {\n\t\t\t\t\thIndex = _getLoopedId(hIndex);\n\t\t\t\t}\n\n\t\t\t\t// update zoom level on items and refresh source (if needsUpdate)\n\t\t\t\titem = _getItemAt( hIndex );\n\n\t\t\t\t// re-render gallery item if `needsUpdate`,\n\t\t\t\t// or doesn't have `bounds` (entirely new slide object)\n\t\t\t\tif( item && (_itemsNeedUpdate || item.needsUpdate || !item.bounds) ) {\n\n\t\t\t\t\tself.cleanSlide( item );\n\t\t\t\t\t\n\t\t\t\t\tself.setContent( holder, hIndex );\n\n\t\t\t\t\t// if \"center\" slide\n\t\t\t\t\tif(i === 1) {\n\t\t\t\t\t\tself.currItem = item;\n\t\t\t\t\t\tself.updateCurrZoomItem(true);\n\t\t\t\t\t}\n\n\t\t\t\t\titem.needsUpdate = false;\n\n\t\t\t\t} else if(holder.index === -1 && hIndex >= 0) {\n\t\t\t\t\t// add content first time\n\t\t\t\t\tself.setContent( holder, hIndex );\n\t\t\t\t}\n\t\t\t\tif(item && item.container) {\n\t\t\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\t\t_setImageSize(item);\n\t\t\t\t\t_applyZoomPanToItem( item );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t_itemsNeedUpdate = false;\n\t\t}\t\n\n\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n\t\t_currPanBounds = self.currItem.bounds;\n\n\t\tif(_currPanBounds) {\n\t\t\t_panOffset.x = _currPanBounds.center.x;\n\t\t\t_panOffset.y = _currPanBounds.center.y;\n\t\t\t_applyCurrentZoomPan( true );\n\t\t}\n\t\t\n\t\t_shout('resize');\n\t},\n\t\n\t// Zoom current item to\n\tzoomTo: function(destZoomLevel, centerPoint, speed, easingFn, updateFn) {\n\t\t/*\n\t\t\tif(destZoomLevel === 'fit') {\n\t\t\t\tdestZoomLevel = self.currItem.fitRatio;\n\t\t\t} else if(destZoomLevel === 'fill') {\n\t\t\t\tdestZoomLevel = self.currItem.fillRatio;\n\t\t\t}\n\t\t*/\n\n\t\tif(centerPoint) {\n\t\t\t_startZoomLevel = _currZoomLevel;\n\t\t\t_midZoomPoint.x = Math.abs(centerPoint.x) - _panOffset.x ;\n\t\t\t_midZoomPoint.y = Math.abs(centerPoint.y) - _panOffset.y ;\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\t\t}\n\n\t\tvar destPanBounds = _calculatePanBounds(destZoomLevel, false),\n\t\t\tdestPanOffset = {};\n\n\t\t_modifyDestPanOffset('x', destPanBounds, destPanOffset, destZoomLevel);\n\t\t_modifyDestPanOffset('y', destPanBounds, destPanOffset, destZoomLevel);\n\n\t\tvar initialZoomLevel = _currZoomLevel;\n\t\tvar initialPanOffset = {\n\t\t\tx: _panOffset.x,\n\t\t\ty: _panOffset.y\n\t\t};\n\n\t\t_roundPoint(destPanOffset);\n\n\t\tvar onUpdate = function(now) {\n\t\t\tif(now === 1) {\n\t\t\t\t_currZoomLevel = destZoomLevel;\n\t\t\t\t_panOffset.x = destPanOffset.x;\n\t\t\t\t_panOffset.y = destPanOffset.y;\n\t\t\t} else {\n\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n\t\t\t\t_panOffset.x = (destPanOffset.x - initialPanOffset.x) * now + initialPanOffset.x;\n\t\t\t\t_panOffset.y = (destPanOffset.y - initialPanOffset.y) * now + initialPanOffset.y;\n\t\t\t}\n\n\t\t\tif(updateFn) {\n\t\t\t\tupdateFn(now);\n\t\t\t}\n\n\t\t\t_applyCurrentZoomPan( now === 1 );\n\t\t};\n\n\t\tif(speed) {\n\t\t\t_animateProp('customZoomTo', 0, 1, speed, easingFn || framework.easing.sine.inOut, onUpdate);\n\t\t} else {\n\t\t\tonUpdate(1);\n\t\t}\n\t}\n\n\n};\n\n\n/*>>core*/\n\n/*>>gestures*/\n/**\n * Mouse/touch/pointer event handlers.\n * \n * separated from @core.js for readability\n */\n\nvar MIN_SWIPE_DISTANCE = 30,\n\tDIRECTION_CHECK_OFFSET = 10; // amount of pixels to drag to determine direction of swipe\n\nvar _gestureStartTime,\n\t_gestureCheckSpeedTime,\n\n\t// pool of objects that are used during dragging of zooming\n\tp = {}, // first point\n\tp2 = {}, // second point (for zoom gesture)\n\tdelta = {},\n\t_currPoint = {},\n\t_startPoint = {},\n\t_currPointers = [],\n\t_startMainScrollPos = {},\n\t_releaseAnimData,\n\t_posPoints = [], // array of points during dragging, used to determine type of gesture\n\t_tempPoint = {},\n\n\t_isZoomingIn,\n\t_verticalDragInitiated,\n\t_oldAndroidTouchEndTimeout,\n\t_currZoomedItemIndex = 0,\n\t_centerPoint = _getEmptyPoint(),\n\t_lastReleaseTime = 0,\n\t_isDragging, // at least one pointer is down\n\t_isMultitouch, // at least two _pointers are down\n\t_zoomStarted, // zoom level changed during zoom gesture\n\t_moved,\n\t_dragAnimFrame,\n\t_mainScrollShifted,\n\t_currentPoints, // array of current touch points\n\t_isZooming,\n\t_currPointsDistance,\n\t_startPointsDistance,\n\t_currPanBounds,\n\t_mainScrollPos = _getEmptyPoint(),\n\t_currZoomElementStyle,\n\t_mainScrollAnimating, // true, if animation after swipe gesture is running\n\t_midZoomPoint = _getEmptyPoint(),\n\t_currCenterPoint = _getEmptyPoint(),\n\t_direction,\n\t_isFirstMove,\n\t_opacityChanged,\n\t_bgOpacity,\n\t_wasOverInitialZoom,\n\n\t_isEqualPoints = function(p1, p2) {\n\t\treturn p1.x === p2.x && p1.y === p2.y;\n\t},\n\t_isNearbyPoints = function(touch0, touch1) {\n\t\treturn Math.abs(touch0.x - touch1.x) < DOUBLE_TAP_RADIUS && Math.abs(touch0.y - touch1.y) < DOUBLE_TAP_RADIUS;\n\t},\n\t_calculatePointsDistance = function(p1, p2) {\n\t\t_tempPoint.x = Math.abs( p1.x - p2.x );\n\t\t_tempPoint.y = Math.abs( p1.y - p2.y );\n\t\treturn Math.sqrt(_tempPoint.x * _tempPoint.x + _tempPoint.y * _tempPoint.y);\n\t},\n\t_stopDragUpdateLoop = function() {\n\t\tif(_dragAnimFrame) {\n\t\t\t_cancelAF(_dragAnimFrame);\n\t\t\t_dragAnimFrame = null;\n\t\t}\n\t},\n\t_dragUpdateLoop = function() {\n\t\tif(_isDragging) {\n\t\t\t_dragAnimFrame = _requestAF(_dragUpdateLoop);\n\t\t\t_renderMovement();\n\t\t}\n\t},\n\t_canPan = function() {\n\t\treturn !(_options.scaleMode === 'fit' && _currZoomLevel === self.currItem.initialZoomLevel);\n\t},\n\t\n\t// find the closest parent DOM element\n\t_closestElement = function(el, fn) {\n\t \tif(!el || el === document) {\n\t \t\treturn false;\n\t \t}\n\n\t \t// don't search elements above pswp__scroll-wrap\n\t \tif(el.getAttribute('class') && el.getAttribute('class').indexOf('pswp__scroll-wrap') > -1 ) {\n\t \t\treturn false;\n\t \t}\n\n\t \tif( fn(el) ) {\n\t \t\treturn el;\n\t \t}\n\n\t \treturn _closestElement(el.parentNode, fn);\n\t},\n\n\t_preventObj = {},\n\t_preventDefaultEventBehaviour = function(e, isDown) {\n\t _preventObj.prevent = !_closestElement(e.target, _options.isClickableElement);\n\n\t\t_shout('preventDragEvent', e, isDown, _preventObj);\n\t\treturn _preventObj.prevent;\n\n\t},\n\t_convertTouchToPoint = function(touch, p) {\n\t\tp.x = touch.pageX;\n\t\tp.y = touch.pageY;\n\t\tp.id = touch.identifier;\n\t\treturn p;\n\t},\n\t_findCenterOfPoints = function(p1, p2, pCenter) {\n\t\tpCenter.x = (p1.x + p2.x) * 0.5;\n\t\tpCenter.y = (p1.y + p2.y) * 0.5;\n\t},\n\t_pushPosPoint = function(time, x, y) {\n\t\tif(time - _gestureCheckSpeedTime > 50) {\n\t\t\tvar o = _posPoints.length > 2 ? _posPoints.shift() : {};\n\t\t\to.x = x;\n\t\t\to.y = y; \n\t\t\t_posPoints.push(o);\n\t\t\t_gestureCheckSpeedTime = time;\n\t\t}\n\t},\n\n\t_calculateVerticalDragOpacityRatio = function() {\n\t\tvar yOffset = _panOffset.y - self.currItem.initialPosition.y; // difference between initial and current position\n\t\treturn 1 - Math.abs( yOffset / (_viewportSize.y / 2) );\n\t},\n\n\t\n\t// points pool, reused during touch events\n\t_ePoint1 = {},\n\t_ePoint2 = {},\n\t_tempPointsArr = [],\n\t_tempCounter,\n\t_getTouchPoints = function(e) {\n\t\t// clean up previous points, without recreating array\n\t\twhile(_tempPointsArr.length > 0) {\n\t\t\t_tempPointsArr.pop();\n\t\t}\n\n\t\tif(!_pointerEventEnabled) {\n\t\t\tif(e.type.indexOf('touch') > -1) {\n\n\t\t\t\tif(e.touches && e.touches.length > 0) {\n\t\t\t\t\t_tempPointsArr[0] = _convertTouchToPoint(e.touches[0], _ePoint1);\n\t\t\t\t\tif(e.touches.length > 1) {\n\t\t\t\t\t\t_tempPointsArr[1] = _convertTouchToPoint(e.touches[1], _ePoint2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t_ePoint1.x = e.pageX;\n\t\t\t\t_ePoint1.y = e.pageY;\n\t\t\t\t_ePoint1.id = '';\n\t\t\t\t_tempPointsArr[0] = _ePoint1;//_ePoint1;\n\t\t\t}\n\t\t} else {\n\t\t\t_tempCounter = 0;\n\t\t\t// we can use forEach, as pointer events are supported only in modern browsers\n\t\t\t_currPointers.forEach(function(p) {\n\t\t\t\tif(_tempCounter === 0) {\n\t\t\t\t\t_tempPointsArr[0] = p;\n\t\t\t\t} else if(_tempCounter === 1) {\n\t\t\t\t\t_tempPointsArr[1] = p;\n\t\t\t\t}\n\t\t\t\t_tempCounter++;\n\n\t\t\t});\n\t\t}\n\t\treturn _tempPointsArr;\n\t},\n\n\t_panOrMoveMainScroll = function(axis, delta) {\n\n\t\tvar panFriction,\n\t\t\toverDiff = 0,\n\t\t\tnewOffset = _panOffset[axis] + delta[axis],\n\t\t\tstartOverDiff,\n\t\t\tdir = delta[axis] > 0,\n\t\t\tnewMainScrollPosition = _mainScrollPos.x + delta.x,\n\t\t\tmainScrollDiff = _mainScrollPos.x - _startMainScrollPos.x,\n\t\t\tnewPanPos,\n\t\t\tnewMainScrollPos;\n\n\t\t// calculate fdistance over the bounds and friction\n\t\tif(newOffset > _currPanBounds.min[axis] || newOffset < _currPanBounds.max[axis]) {\n\t\t\tpanFriction = _options.panEndFriction;\n\t\t\t// Linear increasing of friction, so at 1/4 of viewport it's at max value. \n\t\t\t// Looks not as nice as was expected. Left for history.\n\t\t\t// panFriction = (1 - (_panOffset[axis] + delta[axis] + panBounds.min[axis]) / (_viewportSize[axis] / 4) );\n\t\t} else {\n\t\t\tpanFriction = 1;\n\t\t}\n\t\t\n\t\tnewOffset = _panOffset[axis] + delta[axis] * panFriction;\n\n\t\t// move main scroll or start panning\n\t\tif(_options.allowPanToNext || _currZoomLevel === self.currItem.initialZoomLevel) {\n\n\n\t\t\tif(!_currZoomElementStyle) {\n\t\t\t\t\n\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\n\t\t\t} else if(_direction === 'h' && axis === 'x' && !_zoomStarted ) {\n\t\t\t\t\n\t\t\t\tif(dir) {\n\t\t\t\t\tif(newOffset > _currPanBounds.min[axis]) {\n\t\t\t\t\t\tpanFriction = _options.panEndFriction;\n\t\t\t\t\t\toverDiff = _currPanBounds.min[axis] - newOffset;\n\t\t\t\t\t\tstartOverDiff = _currPanBounds.min[axis] - _startPanOffset[axis];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// drag right\n\t\t\t\t\tif( (startOverDiff <= 0 || mainScrollDiff < 0) && _getNumItems() > 1 ) {\n\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\t\t\t\t\t\tif(mainScrollDiff < 0 && newMainScrollPosition > _startMainScrollPos.x) {\n\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\t\t\tnewPanPos = newOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif(newOffset < _currPanBounds.max[axis] ) {\n\t\t\t\t\t\tpanFriction =_options.panEndFriction;\n\t\t\t\t\t\toverDiff = newOffset - _currPanBounds.max[axis];\n\t\t\t\t\t\tstartOverDiff = _startPanOffset[axis] - _currPanBounds.max[axis];\n\t\t\t\t\t}\n\n\t\t\t\t\tif( (startOverDiff <= 0 || mainScrollDiff > 0) && _getNumItems() > 1 ) {\n\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\n\t\t\t\t\t\tif(mainScrollDiff > 0 && newMainScrollPosition < _startMainScrollPos.x) {\n\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\t\t\tnewPanPos = newOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t\t//\n\t\t\t}\n\n\t\t\tif(axis === 'x') {\n\n\t\t\t\tif(newMainScrollPos !== undefined) {\n\t\t\t\t\t_moveMainScroll(newMainScrollPos, true);\n\t\t\t\t\tif(newMainScrollPos === _startMainScrollPos.x) {\n\t\t\t\t\t\t_mainScrollShifted = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_mainScrollShifted = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\tif(newPanPos !== undefined) {\n\t\t\t\t\t\t_panOffset.x = newPanPos;\n\t\t\t\t\t} else if(!_mainScrollShifted) {\n\t\t\t\t\t\t_panOffset.x += delta.x * panFriction;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn newMainScrollPos !== undefined;\n\t\t\t}\n\n\t\t}\n\n\t\tif(!_mainScrollAnimating) {\n\t\t\t\n\t\t\tif(!_mainScrollShifted) {\n\t\t\t\tif(_currZoomLevel > self.currItem.fitRatio) {\n\t\t\t\t\t_panOffset[axis] += delta[axis] * panFriction;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\t\t}\n\t\t\n\t},\n\n\t// Pointerdown/touchstart/mousedown handler\n\t_onDragStart = function(e) {\n\n\t\t// Allow dragging only via left mouse button.\n\t\t// As this handler is not added in IE8 - we ignore e.which\n\t\t// \n\t\t// http://www.quirksmode.org/js/events_properties.html\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/event.button\n\t\tif(e.type === 'mousedown' && e.button > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(_initialZoomRunning) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif(_oldAndroidTouchEndTimeout && e.type === 'mousedown') {\n\t\t\treturn;\n\t\t}\n\n\t\tif(_preventDefaultEventBehaviour(e, true)) {\n\t\t\te.preventDefault();\n\t\t}\n\n\n\n\t\t_shout('pointerDown');\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\tif(pointerIndex < 0) {\n\t\t\t\tpointerIndex = _currPointers.length;\n\t\t\t}\n\t\t\t_currPointers[pointerIndex] = {x:e.pageX, y:e.pageY, id: e.pointerId};\n\t\t}\n\t\t\n\n\n\t\tvar startPointsList = _getTouchPoints(e),\n\t\t\tnumPoints = startPointsList.length;\n\n\t\t_currentPoints = null;\n\n\t\t_stopAllAnimations();\n\n\t\t// init drag\n\t\tif(!_isDragging || numPoints === 1) {\n\n\t\t\t\n\n\t\t\t_isDragging = _isFirstMove = true;\n\t\t\tframework.bind(window, _upMoveEvents, self);\n\n\t\t\t_isZoomingIn = \n\t\t\t\t_wasOverInitialZoom = \n\t\t\t\t_opacityChanged = \n\t\t\t\t_verticalDragInitiated = \n\t\t\t\t_mainScrollShifted = \n\t\t\t\t_moved = \n\t\t\t\t_isMultitouch = \n\t\t\t\t_zoomStarted = false;\n\n\t\t\t_direction = null;\n\n\t\t\t_shout('firstTouchStart', startPointsList);\n\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\n\t\t\t_currPanDist.x = _currPanDist.y = 0;\n\t\t\t_equalizePoints(_currPoint, startPointsList[0]);\n\t\t\t_equalizePoints(_startPoint, _currPoint);\n\n\t\t\t//_equalizePoints(_startMainScrollPos, _mainScrollPos);\n\t\t\t_startMainScrollPos.x = _slideSize.x * _currPositionIndex;\n\n\t\t\t_posPoints = [{\n\t\t\t\tx: _currPoint.x,\n\t\t\t\ty: _currPoint.y\n\t\t\t}];\n\n\t\t\t_gestureCheckSpeedTime = _gestureStartTime = _getCurrentTime();\n\n\t\t\t//_mainScrollAnimationEnd(true);\n\t\t\t_calculatePanBounds( _currZoomLevel, true );\n\t\t\t\n\t\t\t// Start rendering\n\t\t\t_stopDragUpdateLoop();\n\t\t\t_dragUpdateLoop();\n\t\t\t\n\t\t}\n\n\t\t// init zoom\n\t\tif(!_isZooming && numPoints > 1 && !_mainScrollAnimating && !_mainScrollShifted) {\n\t\t\t_startZoomLevel = _currZoomLevel;\n\t\t\t_zoomStarted = false; // true if zoom changed at least once\n\n\t\t\t_isZooming = _isMultitouch = true;\n\t\t\t_currPanDist.y = _currPanDist.x = 0;\n\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\n\t\t\t_equalizePoints(p, startPointsList[0]);\n\t\t\t_equalizePoints(p2, startPointsList[1]);\n\n\t\t\t_findCenterOfPoints(p, p2, _currCenterPoint);\n\n\t\t\t_midZoomPoint.x = Math.abs(_currCenterPoint.x) - _panOffset.x;\n\t\t\t_midZoomPoint.y = Math.abs(_currCenterPoint.y) - _panOffset.y;\n\t\t\t_currPointsDistance = _startPointsDistance = _calculatePointsDistance(p, p2);\n\t\t}\n\n\n\t},\n\n\t// Pointermove/touchmove/mousemove handler\n\t_onDragMove = function(e) {\n\n\t\te.preventDefault();\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\tif(pointerIndex > -1) {\n\t\t\t\tvar p = _currPointers[pointerIndex];\n\t\t\t\tp.x = e.pageX;\n\t\t\t\tp.y = e.pageY; \n\t\t\t}\n\t\t}\n\n\t\tif(_isDragging) {\n\t\t\tvar touchesList = _getTouchPoints(e);\n\t\t\tif(!_direction && !_moved && !_isZooming) {\n\n\t\t\t\tif(_mainScrollPos.x !== _slideSize.x * _currPositionIndex) {\n\t\t\t\t\t// if main scroll position is shifted – direction is always horizontal\n\t\t\t\t\t_direction = 'h';\n\t\t\t\t} else {\n\t\t\t\t\tvar diff = Math.abs(touchesList[0].x - _currPoint.x) - Math.abs(touchesList[0].y - _currPoint.y);\n\t\t\t\t\t// check the direction of movement\n\t\t\t\t\tif(Math.abs(diff) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\t\t_direction = diff > 0 ? 'h' : 'v';\n\t\t\t\t\t\t_currentPoints = touchesList;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t_currentPoints = touchesList;\n\t\t\t}\n\t\t}\t\n\t},\n\t// \n\t_renderMovement = function() {\n\n\t\tif(!_currentPoints) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar numPoints = _currentPoints.length;\n\n\t\tif(numPoints === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t_equalizePoints(p, _currentPoints[0]);\n\n\t\tdelta.x = p.x - _currPoint.x;\n\t\tdelta.y = p.y - _currPoint.y;\n\n\t\tif(_isZooming && numPoints > 1) {\n\t\t\t// Handle behaviour for more than 1 point\n\n\t\t\t_currPoint.x = p.x;\n\t\t\t_currPoint.y = p.y;\n\t\t\n\t\t\t// check if one of two points changed\n\t\t\tif( !delta.x && !delta.y && _isEqualPoints(_currentPoints[1], p2) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_equalizePoints(p2, _currentPoints[1]);\n\n\n\t\t\tif(!_zoomStarted) {\n\t\t\t\t_zoomStarted = true;\n\t\t\t\t_shout('zoomGestureStarted');\n\t\t\t}\n\t\t\t\n\t\t\t// Distance between two points\n\t\t\tvar pointsDistance = _calculatePointsDistance(p,p2);\n\n\t\t\tvar zoomLevel = _calculateZoomLevel(pointsDistance);\n\n\t\t\t// slightly over the of initial zoom level\n\t\t\tif(zoomLevel > self.currItem.initialZoomLevel + self.currItem.initialZoomLevel / 15) {\n\t\t\t\t_wasOverInitialZoom = true;\n\t\t\t}\n\n\t\t\t// Apply the friction if zoom level is out of the bounds\n\t\t\tvar zoomFriction = 1,\n\t\t\t\tminZoomLevel = _getMinZoomLevel(),\n\t\t\t\tmaxZoomLevel = _getMaxZoomLevel();\n\n\t\t\tif ( zoomLevel < minZoomLevel ) {\n\t\t\t\t\n\t\t\t\tif(_options.pinchToClose && !_wasOverInitialZoom && _startZoomLevel <= self.currItem.initialZoomLevel) {\n\t\t\t\t\t// fade out background if zooming out\n\t\t\t\t\tvar minusDiff = minZoomLevel - zoomLevel;\n\t\t\t\t\tvar percent = 1 - minusDiff / (minZoomLevel / 1.2);\n\n\t\t\t\t\t_applyBgOpacity(percent);\n\t\t\t\t\t_shout('onPinchClose', percent);\n\t\t\t\t\t_opacityChanged = true;\n\t\t\t\t} else {\n\t\t\t\t\tzoomFriction = (minZoomLevel - zoomLevel) / minZoomLevel;\n\t\t\t\t\tif(zoomFriction > 1) {\n\t\t\t\t\t\tzoomFriction = 1;\n\t\t\t\t\t}\n\t\t\t\t\tzoomLevel = minZoomLevel - zoomFriction * (minZoomLevel / 3);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if ( zoomLevel > maxZoomLevel ) {\n\t\t\t\t// 1.5 - extra zoom level above the max. E.g. if max is x6, real max 6 + 1.5 = 7.5\n\t\t\t\tzoomFriction = (zoomLevel - maxZoomLevel) / ( minZoomLevel * 6 );\n\t\t\t\tif(zoomFriction > 1) {\n\t\t\t\t\tzoomFriction = 1;\n\t\t\t\t}\n\t\t\t\tzoomLevel = maxZoomLevel + zoomFriction * minZoomLevel;\n\t\t\t}\n\n\t\t\tif(zoomFriction < 0) {\n\t\t\t\tzoomFriction = 0;\n\t\t\t}\n\n\t\t\t// distance between touch points after friction is applied\n\t\t\t_currPointsDistance = pointsDistance;\n\n\t\t\t// _centerPoint - The point in the middle of two pointers\n\t\t\t_findCenterOfPoints(p, p2, _centerPoint);\n\t\t\n\t\t\t// paning with two pointers pressed\n\t\t\t_currPanDist.x += _centerPoint.x - _currCenterPoint.x;\n\t\t\t_currPanDist.y += _centerPoint.y - _currCenterPoint.y;\n\t\t\t_equalizePoints(_currCenterPoint, _centerPoint);\n\n\t\t\t_panOffset.x = _calculatePanOffset('x', zoomLevel);\n\t\t\t_panOffset.y = _calculatePanOffset('y', zoomLevel);\n\n\t\t\t_isZoomingIn = zoomLevel > _currZoomLevel;\n\t\t\t_currZoomLevel = zoomLevel;\n\t\t\t_applyCurrentZoomPan();\n\n\t\t} else {\n\n\t\t\t// handle behaviour for one point (dragging or panning)\n\n\t\t\tif(!_direction) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_isFirstMove) {\n\t\t\t\t_isFirstMove = false;\n\n\t\t\t\t// subtract drag distance that was used during the detection direction \n\n\t\t\t\tif( Math.abs(delta.x) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\tdelta.x -= _currentPoints[0].x - _startPoint.x;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( Math.abs(delta.y) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\tdelta.y -= _currentPoints[0].y - _startPoint.y;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_currPoint.x = p.x;\n\t\t\t_currPoint.y = p.y;\n\n\t\t\t// do nothing if pointers position hasn't changed\n\t\t\tif(delta.x === 0 && delta.y === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_direction === 'v' && _options.closeOnVerticalDrag) {\n\t\t\t\tif(!_canPan()) {\n\t\t\t\t\t_currPanDist.y += delta.y;\n\t\t\t\t\t_panOffset.y += delta.y;\n\n\t\t\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\n\n\t\t\t\t\t_verticalDragInitiated = true;\n\t\t\t\t\t_shout('onVerticalDrag', opacityRatio);\n\n\t\t\t\t\t_applyBgOpacity(opacityRatio);\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_pushPosPoint(_getCurrentTime(), p.x, p.y);\n\n\t\t\t_moved = true;\n\t\t\t_currPanBounds = self.currItem.bounds;\n\t\t\t\n\t\t\tvar mainScrollChanged = _panOrMoveMainScroll('x', delta);\n\t\t\tif(!mainScrollChanged) {\n\t\t\t\t_panOrMoveMainScroll('y', delta);\n\n\t\t\t\t_roundPoint(_panOffset);\n\t\t\t\t_applyCurrentZoomPan();\n\t\t\t}\n\n\t\t}\n\n\t},\n\t\n\t// Pointerup/pointercancel/touchend/touchcancel/mouseup event handler\n\t_onDragRelease = function(e) {\n\n\t\tif(_features.isOldAndroid ) {\n\n\t\t\tif(_oldAndroidTouchEndTimeout && e.type === 'mouseup') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// on Android (v4.1, 4.2, 4.3 & possibly older) \n\t\t\t// ghost mousedown/up event isn't preventable via e.preventDefault,\n\t\t\t// which causes fake mousedown event\n\t\t\t// so we block mousedown/up for 600ms\n\t\t\tif( e.type.indexOf('touch') > -1 ) {\n\t\t\t\tclearTimeout(_oldAndroidTouchEndTimeout);\n\t\t\t\t_oldAndroidTouchEndTimeout = setTimeout(function() {\n\t\t\t\t\t_oldAndroidTouchEndTimeout = 0;\n\t\t\t\t}, 600);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t_shout('pointerUp');\n\n\t\tif(_preventDefaultEventBehaviour(e, false)) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tvar releasePoint;\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\t\n\t\t\tif(pointerIndex > -1) {\n\t\t\t\treleasePoint = _currPointers.splice(pointerIndex, 1)[0];\n\n\t\t\t\tif(navigator.msPointerEnabled) {\n\t\t\t\t\tvar MSPOINTER_TYPES = {\n\t\t\t\t\t\t4: 'mouse', // event.MSPOINTER_TYPE_MOUSE\n\t\t\t\t\t\t2: 'touch', // event.MSPOINTER_TYPE_TOUCH \n\t\t\t\t\t\t3: 'pen' // event.MSPOINTER_TYPE_PEN\n\t\t\t\t\t};\n\t\t\t\t\treleasePoint.type = MSPOINTER_TYPES[e.pointerType];\n\n\t\t\t\t\tif(!releasePoint.type) {\n\t\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tvar touchList = _getTouchPoints(e),\n\t\t\tgestureType,\n\t\t\tnumPoints = touchList.length;\n\n\t\tif(e.type === 'mouseup') {\n\t\t\tnumPoints = 0;\n\t\t}\n\n\t\t// Do nothing if there were 3 touch points or more\n\t\tif(numPoints === 2) {\n\t\t\t_currentPoints = null;\n\t\t\treturn true;\n\t\t}\n\n\t\t// if second pointer released\n\t\tif(numPoints === 1) {\n\t\t\t_equalizePoints(_startPoint, touchList[0]);\n\t\t}\t\t\t\t\n\n\n\t\t// pointer hasn't moved, send \"tap release\" point\n\t\tif(numPoints === 0 && !_direction && !_mainScrollAnimating) {\n\t\t\tif(!releasePoint) {\n\t\t\t\tif(e.type === 'mouseup') {\n\t\t\t\t\treleasePoint = {x: e.pageX, y: e.pageY, type:'mouse'};\n\t\t\t\t} else if(e.changedTouches && e.changedTouches[0]) {\n\t\t\t\t\treleasePoint = {x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY, type:'touch'};\n\t\t\t\t}\t\t\n\t\t\t}\n\n\t\t\t_shout('touchRelease', e, releasePoint);\n\t\t}\n\n\t\t// Difference in time between releasing of two last touch points (zoom gesture)\n\t\tvar releaseTimeDiff = -1;\n\n\t\t// Gesture completed, no pointers left\n\t\tif(numPoints === 0) {\n\t\t\t_isDragging = false;\n\t\t\tframework.unbind(window, _upMoveEvents, self);\n\n\t\t\t_stopDragUpdateLoop();\n\n\t\t\tif(_isZooming) {\n\t\t\t\t// Two points released at the same time\n\t\t\t\treleaseTimeDiff = 0;\n\t\t\t} else if(_lastReleaseTime !== -1) {\n\t\t\t\treleaseTimeDiff = _getCurrentTime() - _lastReleaseTime;\n\t\t\t}\n\t\t}\n\t\t_lastReleaseTime = numPoints === 1 ? _getCurrentTime() : -1;\n\t\t\n\t\tif(releaseTimeDiff !== -1 && releaseTimeDiff < 150) {\n\t\t\tgestureType = 'zoom';\n\t\t} else {\n\t\t\tgestureType = 'swipe';\n\t\t}\n\n\t\tif(_isZooming && numPoints < 2) {\n\t\t\t_isZooming = false;\n\n\t\t\t// Only second point released\n\t\t\tif(numPoints === 1) {\n\t\t\t\tgestureType = 'zoomPointerUp';\n\t\t\t}\n\t\t\t_shout('zoomGestureEnded');\n\t\t}\n\n\t\t_currentPoints = null;\n\t\tif(!_moved && !_zoomStarted && !_mainScrollAnimating && !_verticalDragInitiated) {\n\t\t\t// nothing to animate\n\t\t\treturn;\n\t\t}\n\t\n\t\t_stopAllAnimations();\n\n\t\t\n\t\tif(!_releaseAnimData) {\n\t\t\t_releaseAnimData = _initDragReleaseAnimationData();\n\t\t}\n\t\t\n\t\t_releaseAnimData.calculateSwipeSpeed('x');\n\n\n\t\tif(_verticalDragInitiated) {\n\n\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\n\n\t\t\tif(opacityRatio < _options.verticalDragRange) {\n\t\t\t\tself.close();\n\t\t\t} else {\n\t\t\t\tvar initalPanY = _panOffset.y,\n\t\t\t\t\tinitialBgOpacity = _bgOpacity;\n\n\t\t\t\t_animateProp('verticalDrag', 0, 1, 300, framework.easing.cubic.out, function(now) {\n\t\t\t\t\t\n\t\t\t\t\t_panOffset.y = (self.currItem.initialPosition.y - initalPanY) * now + initalPanY;\n\n\t\t\t\t\t_applyBgOpacity( (1 - initialBgOpacity) * now + initialBgOpacity );\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t});\n\n\t\t\t\t_shout('onVerticalDrag', 1);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\n\t\t// main scroll \n\t\tif( (_mainScrollShifted || _mainScrollAnimating) && numPoints === 0) {\n\t\t\tvar itemChanged = _finishSwipeMainScrollGesture(gestureType, _releaseAnimData);\n\t\t\tif(itemChanged) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgestureType = 'zoomPointerUp';\n\t\t}\n\n\t\t// prevent zoom/pan animation when main scroll animation runs\n\t\tif(_mainScrollAnimating) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// Complete simple zoom gesture (reset zoom level if it's out of the bounds) \n\t\tif(gestureType !== 'swipe') {\n\t\t\t_completeZoomGesture();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Complete pan gesture if main scroll is not shifted, and it's possible to pan current image\n\t\tif(!_mainScrollShifted && _currZoomLevel > self.currItem.fitRatio) {\n\t\t\t_completePanGesture(_releaseAnimData);\n\t\t}\n\t},\n\n\n\t// Returns object with data about gesture\n\t// It's created only once and then reused\n\t_initDragReleaseAnimationData = function() {\n\t\t// temp local vars\n\t\tvar lastFlickDuration,\n\t\t\ttempReleasePos;\n\n\t\t// s = this\n\t\tvar s = {\n\t\t\tlastFlickOffset: {},\n\t\t\tlastFlickDist: {},\n\t\t\tlastFlickSpeed: {},\n\t\t\tslowDownRatio: {},\n\t\t\tslowDownRatioReverse: {},\n\t\t\tspeedDecelerationRatio: {},\n\t\t\tspeedDecelerationRatioAbs: {},\n\t\t\tdistanceOffset: {},\n\t\t\tbackAnimDestination: {},\n\t\t\tbackAnimStarted: {},\n\t\t\tcalculateSwipeSpeed: function(axis) {\n\t\t\t\t\n\n\t\t\t\tif( _posPoints.length > 1) {\n\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureCheckSpeedTime + 50;\n\t\t\t\t\ttempReleasePos = _posPoints[_posPoints.length-2][axis];\n\t\t\t\t} else {\n\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureStartTime; // total gesture duration\n\t\t\t\t\ttempReleasePos = _startPoint[axis];\n\t\t\t\t}\n\t\t\t\ts.lastFlickOffset[axis] = _currPoint[axis] - tempReleasePos;\n\t\t\t\ts.lastFlickDist[axis] = Math.abs(s.lastFlickOffset[axis]);\n\t\t\t\tif(s.lastFlickDist[axis] > 20) {\n\t\t\t\t\ts.lastFlickSpeed[axis] = s.lastFlickOffset[axis] / lastFlickDuration;\n\t\t\t\t} else {\n\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t}\n\t\t\t\tif( Math.abs(s.lastFlickSpeed[axis]) < 0.1 ) {\n\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ts.slowDownRatio[axis] = 0.95;\n\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n\t\t\t\ts.speedDecelerationRatio[axis] = 1;\n\t\t\t},\n\n\t\t\tcalculateOverBoundsAnimOffset: function(axis, speed) {\n\t\t\t\tif(!s.backAnimStarted[axis]) {\n\n\t\t\t\t\tif(_panOffset[axis] > _currPanBounds.min[axis]) {\n\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.min[axis];\n\t\t\t\t\t\t\n\t\t\t\t\t} else if(_panOffset[axis] < _currPanBounds.max[axis]) {\n\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.max[axis];\n\t\t\t\t\t}\n\n\t\t\t\t\tif(s.backAnimDestination[axis] !== undefined) {\n\t\t\t\t\t\ts.slowDownRatio[axis] = 0.7;\n\t\t\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n\t\t\t\t\t\tif(s.speedDecelerationRatioAbs[axis] < 0.05) {\n\n\t\t\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t\t\t\ts.backAnimStarted[axis] = true;\n\n\t\t\t\t\t\t\t_animateProp('bounceZoomPan'+axis,_panOffset[axis], \n\t\t\t\t\t\t\t\ts.backAnimDestination[axis], \n\t\t\t\t\t\t\t\tspeed || 300, \n\t\t\t\t\t\t\t\tframework.easing.sine.out, \n\t\t\t\t\t\t\t\tfunction(pos) {\n\t\t\t\t\t\t\t\t\t_panOffset[axis] = pos;\n\t\t\t\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Reduces the speed by slowDownRatio (per 10ms)\n\t\t\tcalculateAnimOffset: function(axis) {\n\t\t\t\tif(!s.backAnimStarted[axis]) {\n\t\t\t\t\ts.speedDecelerationRatio[axis] = s.speedDecelerationRatio[axis] * (s.slowDownRatio[axis] + \n\t\t\t\t\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] - \n\t\t\t\t\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] * s.timeDiff / 10);\n\n\t\t\t\t\ts.speedDecelerationRatioAbs[axis] = Math.abs(s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis]);\n\t\t\t\t\ts.distanceOffset[axis] = s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis] * s.timeDiff;\n\t\t\t\t\t_panOffset[axis] += s.distanceOffset[axis];\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpanAnimLoop: function() {\n\t\t\t\tif ( _animations.zoomPan ) {\n\t\t\t\t\t_animations.zoomPan.raf = _requestAF(s.panAnimLoop);\n\n\t\t\t\t\ts.now = _getCurrentTime();\n\t\t\t\t\ts.timeDiff = s.now - s.lastNow;\n\t\t\t\t\ts.lastNow = s.now;\n\t\t\t\t\t\n\t\t\t\t\ts.calculateAnimOffset('x');\n\t\t\t\t\ts.calculateAnimOffset('y');\n\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\n\t\t\t\t\ts.calculateOverBoundsAnimOffset('x');\n\t\t\t\t\ts.calculateOverBoundsAnimOffset('y');\n\n\n\t\t\t\t\tif (s.speedDecelerationRatioAbs.x < 0.05 && s.speedDecelerationRatioAbs.y < 0.05) {\n\n\t\t\t\t\t\t// round pan position\n\t\t\t\t\t\t_panOffset.x = Math.round(_panOffset.x);\n\t\t\t\t\t\t_panOffset.y = Math.round(_panOffset.y);\n\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\n\t\t\t\t\t\t_stopAnimation('zoomPan');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t};\n\t\treturn s;\n\t},\n\n\t_completePanGesture = function(animData) {\n\t\t// calculate swipe speed for Y axis (paanning)\n\t\tanimData.calculateSwipeSpeed('y');\n\n\t\t_currPanBounds = self.currItem.bounds;\n\t\t\n\t\tanimData.backAnimDestination = {};\n\t\tanimData.backAnimStarted = {};\n\n\t\t// Avoid acceleration animation if speed is too low\n\t\tif(Math.abs(animData.lastFlickSpeed.x) <= 0.05 && Math.abs(animData.lastFlickSpeed.y) <= 0.05 ) {\n\t\t\tanimData.speedDecelerationRatioAbs.x = animData.speedDecelerationRatioAbs.y = 0;\n\n\t\t\t// Run pan drag release animation. E.g. if you drag image and release finger without momentum.\n\t\t\tanimData.calculateOverBoundsAnimOffset('x');\n\t\t\tanimData.calculateOverBoundsAnimOffset('y');\n\t\t\treturn true;\n\t\t}\n\n\t\t// Animation loop that controls the acceleration after pan gesture ends\n\t\t_registerStartAnimation('zoomPan');\n\t\tanimData.lastNow = _getCurrentTime();\n\t\tanimData.panAnimLoop();\n\t},\n\n\n\t_finishSwipeMainScrollGesture = function(gestureType, _releaseAnimData) {\n\t\tvar itemChanged;\n\t\tif(!_mainScrollAnimating) {\n\t\t\t_currZoomedItemIndex = _currentItemIndex;\n\t\t}\n\n\n\t\t\n\t\tvar itemsDiff;\n\n\t\tif(gestureType === 'swipe') {\n\t\t\tvar totalShiftDist = _currPoint.x - _startPoint.x,\n\t\t\t\tisFastLastFlick = _releaseAnimData.lastFlickDist.x < 10;\n\n\t\t\t// if container is shifted for more than MIN_SWIPE_DISTANCE, \n\t\t\t// and last flick gesture was in right direction\n\t\t\tif(totalShiftDist > MIN_SWIPE_DISTANCE && \n\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x > 20) ) {\n\t\t\t\t// go to prev item\n\t\t\t\titemsDiff = -1;\n\t\t\t} else if(totalShiftDist < -MIN_SWIPE_DISTANCE && \n\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x < -20) ) {\n\t\t\t\t// go to next item\n\t\t\t\titemsDiff = 1;\n\t\t\t}\n\t\t}\n\n\t\tvar nextCircle;\n\n\t\tif(itemsDiff) {\n\t\t\t\n\t\t\t_currentItemIndex += itemsDiff;\n\n\t\t\tif(_currentItemIndex < 0) {\n\t\t\t\t_currentItemIndex = _options.loop ? _getNumItems()-1 : 0;\n\t\t\t\tnextCircle = true;\n\t\t\t} else if(_currentItemIndex >= _getNumItems()) {\n\t\t\t\t_currentItemIndex = _options.loop ? 0 : _getNumItems()-1;\n\t\t\t\tnextCircle = true;\n\t\t\t}\n\n\t\t\tif(!nextCircle || _options.loop) {\n\t\t\t\t_indexDiff += itemsDiff;\n\t\t\t\t_currPositionIndex -= itemsDiff;\n\t\t\t\titemChanged = true;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t}\n\n\t\tvar animateToX = _slideSize.x * _currPositionIndex;\n\t\tvar animateToDist = Math.abs( animateToX - _mainScrollPos.x );\n\t\tvar finishAnimDuration;\n\n\n\t\tif(!itemChanged && animateToX > _mainScrollPos.x !== _releaseAnimData.lastFlickSpeed.x > 0) {\n\t\t\t// \"return to current\" duration, e.g. when dragging from slide 0 to -1\n\t\t\tfinishAnimDuration = 333; \n\t\t} else {\n\t\t\tfinishAnimDuration = Math.abs(_releaseAnimData.lastFlickSpeed.x) > 0 ? \n\t\t\t\t\t\t\t\t\tanimateToDist / Math.abs(_releaseAnimData.lastFlickSpeed.x) : \n\t\t\t\t\t\t\t\t\t333;\n\n\t\t\tfinishAnimDuration = Math.min(finishAnimDuration, 400);\n\t\t\tfinishAnimDuration = Math.max(finishAnimDuration, 250);\n\t\t}\n\n\t\tif(_currZoomedItemIndex === _currentItemIndex) {\n\t\t\titemChanged = false;\n\t\t}\n\t\t\n\t\t_mainScrollAnimating = true;\n\t\t\n\t\t_shout('mainScrollAnimStart');\n\n\t\t_animateProp('mainScroll', _mainScrollPos.x, animateToX, finishAnimDuration, framework.easing.cubic.out, \n\t\t\t_moveMainScroll,\n\t\t\tfunction() {\n\t\t\t\t_stopAllAnimations();\n\t\t\t\t_mainScrollAnimating = false;\n\t\t\t\t_currZoomedItemIndex = -1;\n\t\t\t\t\n\t\t\t\tif(itemChanged || _currZoomedItemIndex !== _currentItemIndex) {\n\t\t\t\t\tself.updateCurrItem();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t_shout('mainScrollAnimComplete');\n\t\t\t}\n\t\t);\n\n\t\tif(itemChanged) {\n\t\t\tself.updateCurrItem(true);\n\t\t}\n\n\t\treturn itemChanged;\n\t},\n\n\t_calculateZoomLevel = function(touchesDistance) {\n\t\treturn 1 / _startPointsDistance * touchesDistance * _startZoomLevel;\n\t},\n\n\t// Resets zoom if it's out of bounds\n\t_completeZoomGesture = function() {\n\t\tvar destZoomLevel = _currZoomLevel,\n\t\t\tminZoomLevel = _getMinZoomLevel(),\n\t\t\tmaxZoomLevel = _getMaxZoomLevel();\n\n\t\tif ( _currZoomLevel < minZoomLevel ) {\n\t\t\tdestZoomLevel = minZoomLevel;\n\t\t} else if ( _currZoomLevel > maxZoomLevel ) {\n\t\t\tdestZoomLevel = maxZoomLevel;\n\t\t}\n\n\t\tvar destOpacity = 1,\n\t\t\tonUpdate,\n\t\t\tinitialOpacity = _bgOpacity;\n\n\t\tif(_opacityChanged && !_isZoomingIn && !_wasOverInitialZoom && _currZoomLevel < minZoomLevel) {\n\t\t\t//_closedByScroll = true;\n\t\t\tself.close();\n\t\t\treturn true;\n\t\t}\n\n\t\tif(_opacityChanged) {\n\t\t\tonUpdate = function(now) {\n\t\t\t\t_applyBgOpacity( (destOpacity - initialOpacity) * now + initialOpacity );\n\t\t\t};\n\t\t}\n\n\t\tself.zoomTo(destZoomLevel, 0, 200, framework.easing.cubic.out, onUpdate);\n\t\treturn true;\n\t};\n\n\n_registerModule('Gestures', {\n\tpublicMethods: {\n\n\t\tinitGestures: function() {\n\n\t\t\t// helper function that builds touch/pointer/mouse events\n\t\t\tvar addEventNames = function(pref, down, move, up, cancel) {\n\t\t\t\t_dragStartEvent = pref + down;\n\t\t\t\t_dragMoveEvent = pref + move;\n\t\t\t\t_dragEndEvent = pref + up;\n\t\t\t\tif(cancel) {\n\t\t\t\t\t_dragCancelEvent = pref + cancel;\n\t\t\t\t} else {\n\t\t\t\t\t_dragCancelEvent = '';\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_pointerEventEnabled = _features.pointerEvent;\n\t\t\tif(_pointerEventEnabled && _features.touch) {\n\t\t\t\t// we don't need touch events, if browser supports pointer events\n\t\t\t\t_features.touch = false;\n\t\t\t}\n\n\t\t\tif(_pointerEventEnabled) {\n\t\t\t\tif(navigator.msPointerEnabled) {\n\t\t\t\t\t// IE10 pointer events are case-sensitive\n\t\t\t\t\taddEventNames('MSPointer', 'Down', 'Move', 'Up', 'Cancel');\n\t\t\t\t} else {\n\t\t\t\t\taddEventNames('pointer', 'down', 'move', 'up', 'cancel');\n\t\t\t\t}\n\t\t\t} else if(_features.touch) {\n\t\t\t\taddEventNames('touch', 'start', 'move', 'end', 'cancel');\n\t\t\t\t_likelyTouchDevice = true;\n\t\t\t} else {\n\t\t\t\taddEventNames('mouse', 'down', 'move', 'up');\t\n\t\t\t}\n\n\t\t\t_upMoveEvents = _dragMoveEvent + ' ' + _dragEndEvent + ' ' + _dragCancelEvent;\n\t\t\t_downEvents = _dragStartEvent;\n\n\t\t\tif(_pointerEventEnabled && !_likelyTouchDevice) {\n\t\t\t\t_likelyTouchDevice = (navigator.maxTouchPoints > 1) || (navigator.msMaxTouchPoints > 1);\n\t\t\t}\n\t\t\t// make variable public\n\t\t\tself.likelyTouchDevice = _likelyTouchDevice; \n\t\t\t\n\t\t\t_globalEventHandlers[_dragStartEvent] = _onDragStart;\n\t\t\t_globalEventHandlers[_dragMoveEvent] = _onDragMove;\n\t\t\t_globalEventHandlers[_dragEndEvent] = _onDragRelease; // the Kraken\n\n\t\t\tif(_dragCancelEvent) {\n\t\t\t\t_globalEventHandlers[_dragCancelEvent] = _globalEventHandlers[_dragEndEvent];\n\t\t\t}\n\n\t\t\t// Bind mouse events on device with detected hardware touch support, in case it supports multiple types of input.\n\t\t\tif(_features.touch) {\n\t\t\t\t_downEvents += ' mousedown';\n\t\t\t\t_upMoveEvents += ' mousemove mouseup';\n\t\t\t\t_globalEventHandlers.mousedown = _globalEventHandlers[_dragStartEvent];\n\t\t\t\t_globalEventHandlers.mousemove = _globalEventHandlers[_dragMoveEvent];\n\t\t\t\t_globalEventHandlers.mouseup = _globalEventHandlers[_dragEndEvent];\n\t\t\t}\n\n\t\t\tif(!_likelyTouchDevice) {\n\t\t\t\t// don't allow pan to next slide from zoomed state on Desktop\n\t\t\t\t_options.allowPanToNext = false;\n\t\t\t}\n\t\t}\n\n\t}\n});\n\n\n/*>>gestures*/\n\n/*>>show-hide-transition*/\n/**\n * show-hide-transition.js:\n *\n * Manages initial opening or closing transition.\n *\n * If you're not planning to use transition for gallery at all,\n * you may set options hideAnimationDuration and showAnimationDuration to 0,\n * and just delete startAnimation function.\n * \n */\n\n\nvar _showOrHideTimeout,\n\t_showOrHide = function(item, img, out, completeFn) {\n\n\t\tif(_showOrHideTimeout) {\n\t\t\tclearTimeout(_showOrHideTimeout);\n\t\t}\n\n\t\t_initialZoomRunning = true;\n\t\t_initialContentSet = true;\n\t\t\n\t\t// dimensions of small thumbnail {x:,y:,w:}.\n\t\t// Height is optional, as calculated based on large image.\n\t\tvar thumbBounds; \n\t\tif(item.initialLayout) {\n\t\t\tthumbBounds = item.initialLayout;\n\t\t\titem.initialLayout = null;\n\t\t} else {\n\t\t\tthumbBounds = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n\t\t}\n\n\t\tvar duration = out ? _options.hideAnimationDuration : _options.showAnimationDuration;\n\n\t\tvar onComplete = function() {\n\t\t\t_stopAnimation('initialZoom');\n\t\t\tif(!out) {\n\t\t\t\t_applyBgOpacity(1);\n\t\t\t\tif(img) {\n\t\t\t\t\timg.style.display = 'block';\n\t\t\t\t}\n\t\t\t\tframework.addClass(template, 'pswp--animated-in');\n\t\t\t\t_shout('initialZoom' + (out ? 'OutEnd' : 'InEnd'));\n\t\t\t} else {\n\t\t\t\tself.template.removeAttribute('style');\n\t\t\t\tself.bg.removeAttribute('style');\n\t\t\t}\n\n\t\t\tif(completeFn) {\n\t\t\t\tcompleteFn();\n\t\t\t}\n\t\t\t_initialZoomRunning = false;\n\t\t};\n\n\t\t// if bounds aren't provided, just open gallery without animation\n\t\tif(!duration || !thumbBounds || thumbBounds.x === undefined) {\n\n\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In') );\n\n\t\t\t_currZoomLevel = item.initialZoomLevel;\n\t\t\t_equalizePoints(_panOffset, item.initialPosition );\n\t\t\t_applyCurrentZoomPan();\n\n\t\t\ttemplate.style.opacity = out ? 0 : 1;\n\t\t\t_applyBgOpacity(1);\n\n\t\t\tif(duration) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tonComplete();\n\t\t\t\t}, duration);\n\t\t\t} else {\n\t\t\t\tonComplete();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar startAnimation = function() {\n\t\t\tvar closeWithRaf = _closedByScroll,\n\t\t\t\tfadeEverything = !self.currItem.src || self.currItem.loadError || _options.showHideOpacity;\n\t\t\t\n\t\t\t// apply hw-acceleration to image\n\t\t\tif(item.miniImg) {\n\t\t\t\titem.miniImg.style.webkitBackfaceVisibility = 'hidden';\n\t\t\t}\n\n\t\t\tif(!out) {\n\t\t\t\t_currZoomLevel = thumbBounds.w / item.w;\n\t\t\t\t_panOffset.x = thumbBounds.x;\n\t\t\t\t_panOffset.y = thumbBounds.y - _initalWindowScrollY;\n\n\t\t\t\tself[fadeEverything ? 'template' : 'bg'].style.opacity = 0.001;\n\t\t\t\t_applyCurrentZoomPan();\n\t\t\t}\n\n\t\t\t_registerStartAnimation('initialZoom');\n\t\t\t\n\t\t\tif(out && !closeWithRaf) {\n\t\t\t\tframework.removeClass(template, 'pswp--animated-in');\n\t\t\t}\n\n\t\t\tif(fadeEverything) {\n\t\t\t\tif(out) {\n\t\t\t\t\tframework[ (closeWithRaf ? 'remove' : 'add') + 'Class' ](template, 'pswp--animate_opacity');\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tframework.addClass(template, 'pswp--animate_opacity');\n\t\t\t\t\t}, 30);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_showOrHideTimeout = setTimeout(function() {\n\n\t\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In') );\n\t\t\t\t\n\n\t\t\t\tif(!out) {\n\n\t\t\t\t\t// \"in\" animation always uses CSS transitions (instead of rAF).\n\t\t\t\t\t// CSS transition work faster here, \n\t\t\t\t\t// as developer may also want to animate other things, \n\t\t\t\t\t// like ui on top of sliding area, which can be animated just via CSS\n\t\t\t\t\t\n\t\t\t\t\t_currZoomLevel = item.initialZoomLevel;\n\t\t\t\t\t_equalizePoints(_panOffset, item.initialPosition );\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t_applyBgOpacity(1);\n\n\t\t\t\t\tif(fadeEverything) {\n\t\t\t\t\t\ttemplate.style.opacity = 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_applyBgOpacity(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\n\t\t\t\t} else {\n\n\t\t\t\t\t// \"out\" animation uses rAF only when PhotoSwipe is closed by browser scroll, to recalculate position\n\t\t\t\t\tvar destZoomLevel = thumbBounds.w / item.w,\n\t\t\t\t\t\tinitialPanOffset = {\n\t\t\t\t\t\t\tx: _panOffset.x,\n\t\t\t\t\t\t\ty: _panOffset.y\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinitialZoomLevel = _currZoomLevel,\n\t\t\t\t\t\tinitalBgOpacity = _bgOpacity,\n\t\t\t\t\t\tonUpdate = function(now) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(now === 1) {\n\t\t\t\t\t\t\t\t_currZoomLevel = destZoomLevel;\n\t\t\t\t\t\t\t\t_panOffset.x = thumbBounds.x;\n\t\t\t\t\t\t\t\t_panOffset.y = thumbBounds.y - _currentWindowScrollY;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n\t\t\t\t\t\t\t\t_panOffset.x = (thumbBounds.x - initialPanOffset.x) * now + initialPanOffset.x;\n\t\t\t\t\t\t\t\t_panOffset.y = (thumbBounds.y - _currentWindowScrollY - initialPanOffset.y) * now + initialPanOffset.y;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\tif(fadeEverything) {\n\t\t\t\t\t\t\t\ttemplate.style.opacity = 1 - now;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_applyBgOpacity( initalBgOpacity - now * initalBgOpacity );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\tif(closeWithRaf) {\n\t\t\t\t\t\t_animateProp('initialZoom', 0, 1, duration, framework.easing.cubic.out, onUpdate, onComplete);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonUpdate(1);\n\t\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t}, out ? 25 : 90); // Main purpose of this delay is to give browser time to paint and\n\t\t\t\t\t// create composite layers of PhotoSwipe UI parts (background, controls, caption, arrows).\n\t\t\t\t\t// Which avoids lag at the beginning of scale transition.\n\t\t};\n\t\tstartAnimation();\n\n\t\t\n\t};\n\n/*>>show-hide-transition*/\n\n/*>>items-controller*/\n/**\n*\n* Controller manages gallery items, their dimensions, and their content.\n* \n*/\n\nvar _items,\n\t_tempPanAreaSize = {},\n\t_imagesToAppendPool = [],\n\t_initialContentSet,\n\t_initialZoomRunning,\n\t_controllerDefaultOptions = {\n\t\tindex: 0,\n\t\terrorMsg: '
The image could not be loaded.
',\n\t\tforceProgressiveLoading: false, // TODO\n\t\tpreload: [1,1],\n\t\tgetNumItemsFn: function() {\n\t\t\treturn _items.length;\n\t\t}\n\t};\n\n\nvar _getItemAt,\n\t_getNumItems,\n\t_initialIsLoop,\n\t_getZeroBounds = function() {\n\t\treturn {\n\t\t\tcenter:{x:0,y:0}, \n\t\t\tmax:{x:0,y:0}, \n\t\t\tmin:{x:0,y:0}\n\t\t};\n\t},\n\t_calculateSingleItemPanBounds = function(item, realPanElementW, realPanElementH ) {\n\t\tvar bounds = item.bounds;\n\n\t\t// position of element when it's centered\n\t\tbounds.center.x = Math.round((_tempPanAreaSize.x - realPanElementW) / 2);\n\t\tbounds.center.y = Math.round((_tempPanAreaSize.y - realPanElementH) / 2) + item.vGap.top;\n\n\t\t// maximum pan position\n\t\tbounds.max.x = (realPanElementW > _tempPanAreaSize.x) ? \n\t\t\t\t\t\t\tMath.round(_tempPanAreaSize.x - realPanElementW) : \n\t\t\t\t\t\t\tbounds.center.x;\n\t\t\n\t\tbounds.max.y = (realPanElementH > _tempPanAreaSize.y) ? \n\t\t\t\t\t\t\tMath.round(_tempPanAreaSize.y - realPanElementH) + item.vGap.top : \n\t\t\t\t\t\t\tbounds.center.y;\n\t\t\n\t\t// minimum pan position\n\t\tbounds.min.x = (realPanElementW > _tempPanAreaSize.x) ? 0 : bounds.center.x;\n\t\tbounds.min.y = (realPanElementH > _tempPanAreaSize.y) ? item.vGap.top : bounds.center.y;\n\t},\n\t_calculateItemSize = function(item, viewportSize, zoomLevel) {\n\n\t\tif (item.src && !item.loadError) {\n\t\t\tvar isInitial = !zoomLevel;\n\t\t\t\n\t\t\tif(isInitial) {\n\t\t\t\tif(!item.vGap) {\n\t\t\t\t\titem.vGap = {top:0,bottom:0};\n\t\t\t\t}\n\t\t\t\t// allows overriding vertical margin for individual items\n\t\t\t\t_shout('parseVerticalMargin', item);\n\t\t\t}\n\n\n\t\t\t_tempPanAreaSize.x = viewportSize.x;\n\t\t\t_tempPanAreaSize.y = viewportSize.y - item.vGap.top - item.vGap.bottom;\n\n\t\t\tif (isInitial) {\n\t\t\t\tvar hRatio = _tempPanAreaSize.x / item.w;\n\t\t\t\tvar vRatio = _tempPanAreaSize.y / item.h;\n\n\t\t\t\titem.fitRatio = hRatio < vRatio ? hRatio : vRatio;\n\t\t\t\t//item.fillRatio = hRatio > vRatio ? hRatio : vRatio;\n\n\t\t\t\tvar scaleMode = _options.scaleMode;\n\n\t\t\t\tif (scaleMode === 'orig') {\n\t\t\t\t\tzoomLevel = 1;\n\t\t\t\t} else if (scaleMode === 'fit') {\n\t\t\t\t\tzoomLevel = item.fitRatio;\n\t\t\t\t}\n\n\t\t\t\tif (zoomLevel > 1) {\n\t\t\t\t\tzoomLevel = 1;\n\t\t\t\t}\n\n\t\t\t\titem.initialZoomLevel = zoomLevel;\n\t\t\t\t\n\t\t\t\tif(!item.bounds) {\n\t\t\t\t\t// reuse bounds object\n\t\t\t\t\titem.bounds = _getZeroBounds(); \n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!zoomLevel) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_calculateSingleItemPanBounds(item, item.w * zoomLevel, item.h * zoomLevel);\n\n\t\t\tif (isInitial && zoomLevel === item.initialZoomLevel) {\n\t\t\t\titem.initialPosition = item.bounds.center;\n\t\t\t}\n\n\t\t\treturn item.bounds;\n\t\t} else {\n\t\t\titem.w = item.h = 0;\n\t\t\titem.initialZoomLevel = item.fitRatio = 1;\n\t\t\titem.bounds = _getZeroBounds();\n\t\t\titem.initialPosition = item.bounds.center;\n\n\t\t\t// if it's not image, we return zero bounds (content is not zoomable)\n\t\t\treturn item.bounds;\n\t\t}\n\t\t\n\t},\n\n\t\n\n\n\t_appendImage = function(index, item, baseDiv, img, preventAnimation, keepPlaceholder) {\n\t\t\n\n\t\tif(item.loadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(img) {\n\n\t\t\titem.imageAppended = true;\n\t\t\t_setImageSize(item, img, (item === self.currItem && _renderMaxResolution) );\n\t\t\t\n\t\t\tbaseDiv.appendChild(img);\n\n\t\t\tif(keepPlaceholder) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(item && item.loaded && item.placeholder) {\n\t\t\t\t\t\titem.placeholder.style.display = 'none';\n\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t}\n\t},\n\t\n\n\n\t_preloadImage = function(item) {\n\t\titem.loading = true;\n\t\titem.loaded = false;\n\t\tvar img = item.img = framework.createEl('pswp__img', 'img');\n\t\tvar onComplete = function() {\n\t\t\titem.loading = false;\n\t\t\titem.loaded = true;\n\n\t\t\tif(item.loadComplete) {\n\t\t\t\titem.loadComplete(item);\n\t\t\t} else {\n\t\t\t\titem.img = null; // no need to store image object\n\t\t\t}\n\t\t\timg.onload = img.onerror = null;\n\t\t\timg = null;\n\t\t};\n\t\timg.onload = onComplete;\n\t\timg.onerror = function() {\n\t\t\titem.loadError = true;\n\t\t\tonComplete();\n\t\t};\t\t\n\n\t\timg.src = item.src;// + '?a=' + Math.random();\n\n\t\treturn img;\n\t},\n\t_checkForError = function(item, cleanUp) {\n\t\tif(item.src && item.loadError && item.container) {\n\n\t\t\tif(cleanUp) {\n\t\t\t\titem.container.innerHTML = '';\n\t\t\t}\n\n\t\t\titem.container.innerHTML = _options.errorMsg.replace('%url%', item.src );\n\t\t\treturn true;\n\t\t\t\n\t\t}\n\t},\n\t_setImageSize = function(item, img, maxRes) {\n\t\tif(!item.src) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(!img) {\n\t\t\timg = item.container.lastChild;\n\t\t}\n\n\t\tvar w = maxRes ? item.w : Math.round(item.w * item.fitRatio),\n\t\t\th = maxRes ? item.h : Math.round(item.h * item.fitRatio);\n\t\t\n\t\tif(item.placeholder && !item.loaded) {\n\t\t\titem.placeholder.style.width = w + 'px';\n\t\t\titem.placeholder.style.height = h + 'px';\n\t\t}\n\n\t\timg.style.width = w + 'px';\n\t\timg.style.height = h + 'px';\n\t},\n\t_appendImagesPool = function() {\n\n\t\tif(_imagesToAppendPool.length) {\n\t\t\tvar poolItem;\n\n\t\t\tfor(var i = 0; i < _imagesToAppendPool.length; i++) {\n\t\t\t\tpoolItem = _imagesToAppendPool[i];\n\t\t\t\tif( poolItem.holder.index === poolItem.index ) {\n\t\t\t\t\t_appendImage(poolItem.index, poolItem.item, poolItem.baseDiv, poolItem.img, false, poolItem.clearPlaceholder);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_imagesToAppendPool = [];\n\t\t}\n\t};\n\t\n\n\n_registerModule('Controller', {\n\n\tpublicMethods: {\n\n\t\tlazyLoadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\t\t\tvar item = _getItemAt(index);\n\n\t\t\tif(!item || ((item.loaded || item.loading) && !_itemsNeedUpdate)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_shout('gettingData', index, item);\n\n\t\t\tif (!item.src) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_preloadImage(item);\n\t\t},\n\t\tinitController: function() {\n\t\t\tframework.extend(_options, _controllerDefaultOptions, true);\n\t\t\tself.items = _items = items;\n\t\t\t_getItemAt = self.getItemAt;\n\t\t\t_getNumItems = _options.getNumItemsFn; //self.getNumItems;\n\n\n\n\t\t\t_initialIsLoop = _options.loop;\n\t\t\tif(_getNumItems() < 3) {\n\t\t\t\t_options.loop = false; // disable loop if less then 3 items\n\t\t\t}\n\n\t\t\t_listen('beforeChange', function(diff) {\n\n\t\t\t\tvar p = _options.preload,\n\t\t\t\t\tisNext = diff === null ? true : (diff >= 0),\n\t\t\t\t\tpreloadBefore = Math.min(p[0], _getNumItems() ),\n\t\t\t\t\tpreloadAfter = Math.min(p[1], _getNumItems() ),\n\t\t\t\t\ti;\n\n\n\t\t\t\tfor(i = 1; i <= (isNext ? preloadAfter : preloadBefore); i++) {\n\t\t\t\t\tself.lazyLoadItem(_currentItemIndex+i);\n\t\t\t\t}\n\t\t\t\tfor(i = 1; i <= (isNext ? preloadBefore : preloadAfter); i++) {\n\t\t\t\t\tself.lazyLoadItem(_currentItemIndex-i);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_listen('initialLayout', function() {\n\t\t\t\tself.currItem.initialLayout = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n\t\t\t});\n\n\t\t\t_listen('mainScrollAnimComplete', _appendImagesPool);\n\t\t\t_listen('initialZoomInEnd', _appendImagesPool);\n\n\n\n\t\t\t_listen('destroy', function() {\n\t\t\t\tvar item;\n\t\t\t\tfor(var i = 0; i < _items.length; i++) {\n\t\t\t\t\titem = _items[i];\n\t\t\t\t\t// remove reference to DOM elements, for GC\n\t\t\t\t\tif(item.container) {\n\t\t\t\t\t\titem.container = null; \n\t\t\t\t\t}\n\t\t\t\t\tif(item.placeholder) {\n\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.img) {\n\t\t\t\t\t\titem.img = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.preloader) {\n\t\t\t\t\t\titem.preloader = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.loadError) {\n\t\t\t\t\t\titem.loaded = item.loadError = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_imagesToAppendPool = null;\n\t\t\t});\n\t\t},\n\n\n\t\tgetItemAt: function(index) {\n\t\t\tif (index >= 0) {\n\t\t\t\treturn _items[index] !== undefined ? _items[index] : false;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\tallowProgressiveImg: function() {\n\t\t\t// 1. Progressive image loading isn't working on webkit/blink \n\t\t\t// when hw-acceleration (e.g. translateZ) is applied to IMG element.\n\t\t\t// That's why in PhotoSwipe parent element gets zoom transform, not image itself.\n\t\t\t// \n\t\t\t// 2. Progressive image loading sometimes blinks in webkit/blink when applying animation to parent element.\n\t\t\t// That's why it's disabled on touch devices (mainly because of swipe transition)\n\t\t\t// \n\t\t\t// 3. Progressive image loading sometimes doesn't work in IE (up to 11).\n\n\t\t\t// Don't allow progressive loading on non-large touch devices\n\t\t\treturn _options.forceProgressiveLoading || !_likelyTouchDevice || _options.mouseUsed || screen.width > 1200; \n\t\t\t// 1200 - to eliminate touch devices with large screen (like Chromebook Pixel)\n\t\t},\n\n\t\tsetContent: function(holder, index) {\n\n\t\t\tif(_options.loop) {\n\t\t\t\tindex = _getLoopedId(index);\n\t\t\t}\n\n\t\t\tvar prevItem = self.getItemAt(holder.index);\n\t\t\tif(prevItem) {\n\t\t\t\tprevItem.container = null;\n\t\t\t}\n\t\n\t\t\tvar item = self.getItemAt(index),\n\t\t\t\timg;\n\t\t\t\n\t\t\tif(!item) {\n\t\t\t\tholder.el.innerHTML = '';\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// allow to override data\n\t\t\t_shout('gettingData', index, item);\n\n\t\t\tholder.index = index;\n\t\t\tholder.item = item;\n\n\t\t\t// base container DIV is created only once for each of 3 holders\n\t\t\tvar baseDiv = item.container = framework.createEl('pswp__zoom-wrap'); \n\n\t\t\t\n\n\t\t\tif(!item.src && item.html) {\n\t\t\t\tif(item.html.tagName) {\n\t\t\t\t\tbaseDiv.appendChild(item.html);\n\t\t\t\t} else {\n\t\t\t\t\tbaseDiv.innerHTML = item.html;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_checkForError(item);\n\n\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\n\t\t\tif(item.src && !item.loadError && !item.loaded) {\n\n\t\t\t\titem.loadComplete = function(item) {\n\n\t\t\t\t\t// gallery closed before image finished loading\n\t\t\t\t\tif(!_isOpen) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// check if holder hasn't changed while image was loading\n\t\t\t\t\tif(holder && holder.index === index ) {\n\t\t\t\t\t\tif( _checkForError(item, true) ) {\n\t\t\t\t\t\t\titem.loadComplete = item.img = null;\n\t\t\t\t\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\t\t\t\t_applyZoomPanToItem(item);\n\n\t\t\t\t\t\t\tif(holder.index === _currentItemIndex) {\n\t\t\t\t\t\t\t\t// recalculate dimensions\n\t\t\t\t\t\t\t\tself.updateCurrZoomItem();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( !item.imageAppended ) {\n\t\t\t\t\t\t\tif(_features.transform && (_mainScrollAnimating || _initialZoomRunning) ) {\n\t\t\t\t\t\t\t\t_imagesToAppendPool.push({\n\t\t\t\t\t\t\t\t\titem:item,\n\t\t\t\t\t\t\t\t\tbaseDiv:baseDiv,\n\t\t\t\t\t\t\t\t\timg:item.img,\n\t\t\t\t\t\t\t\t\tindex:index,\n\t\t\t\t\t\t\t\t\tholder:holder,\n\t\t\t\t\t\t\t\t\tclearPlaceholder:true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_appendImage(index, item, baseDiv, item.img, _mainScrollAnimating || _initialZoomRunning, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// remove preloader & mini-img\n\t\t\t\t\t\t\tif(!_initialZoomRunning && item.placeholder) {\n\t\t\t\t\t\t\t\titem.placeholder.style.display = 'none';\n\t\t\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\titem.loadComplete = null;\n\t\t\t\t\titem.img = null; // no need to store image element after it's added\n\n\t\t\t\t\t_shout('imageLoadComplete', index, item);\n\t\t\t\t};\n\n\t\t\t\tif(framework.features.transform) {\n\t\t\t\t\t\n\t\t\t\t\tvar placeholderClassName = 'pswp__img pswp__img--placeholder'; \n\t\t\t\t\tplaceholderClassName += (item.msrc ? '' : ' pswp__img--placeholder--blank');\n\n\t\t\t\t\tvar placeholder = framework.createEl(placeholderClassName, item.msrc ? 'img' : '');\n\t\t\t\t\tif(item.msrc) {\n\t\t\t\t\t\tplaceholder.src = item.msrc;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t_setImageSize(item, placeholder);\n\n\t\t\t\t\tbaseDiv.appendChild(placeholder);\n\t\t\t\t\titem.placeholder = placeholder;\n\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\tif(!item.loading) {\n\t\t\t\t\t_preloadImage(item);\n\t\t\t\t}\n\n\n\t\t\t\tif( self.allowProgressiveImg() ) {\n\t\t\t\t\t// just append image\n\t\t\t\t\tif(!_initialContentSet && _features.transform) {\n\t\t\t\t\t\t_imagesToAppendPool.push({\n\t\t\t\t\t\t\titem:item, \n\t\t\t\t\t\t\tbaseDiv:baseDiv, \n\t\t\t\t\t\t\timg:item.img, \n\t\t\t\t\t\t\tindex:index, \n\t\t\t\t\t\t\tholder:holder\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_appendImage(index, item, baseDiv, item.img, true, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if(item.src && !item.loadError) {\n\t\t\t\t// image object is created every time, due to bugs of image loading & delay when switching images\n\t\t\t\timg = framework.createEl('pswp__img', 'img');\n\t\t\t\timg.style.opacity = 1;\n\t\t\t\timg.src = item.src;\n\t\t\t\t_setImageSize(item, img);\n\t\t\t\t_appendImage(index, item, baseDiv, img, true);\n\t\t\t}\n\t\t\t\n\n\t\t\tif(!_initialContentSet && index === _currentItemIndex) {\n\t\t\t\t_currZoomElementStyle = baseDiv.style;\n\t\t\t\t_showOrHide(item, (img ||item.img) );\n\t\t\t} else {\n\t\t\t\t_applyZoomPanToItem(item);\n\t\t\t}\n\n\t\t\tholder.el.innerHTML = '';\n\t\t\tholder.el.appendChild(baseDiv);\n\t\t},\n\n\t\tcleanSlide: function( item ) {\n\t\t\tif(item.img ) {\n\t\t\t\titem.img.onload = item.img.onerror = null;\n\t\t\t}\n\t\t\titem.loaded = item.loading = item.img = item.imageAppended = false;\n\t\t}\n\n\t}\n});\n\n/*>>items-controller*/\n\n/*>>tap*/\n/**\n * tap.js:\n *\n * Displatches tap and double-tap events.\n * \n */\n\nvar tapTimer,\n\ttapReleasePoint = {},\n\t_dispatchTapEvent = function(origEvent, releasePoint, pointerType) {\t\t\n\t\tvar e = document.createEvent( 'CustomEvent' ),\n\t\t\teDetail = {\n\t\t\t\torigEvent:origEvent, \n\t\t\t\ttarget:origEvent.target, \n\t\t\t\treleasePoint: releasePoint, \n\t\t\t\tpointerType:pointerType || 'touch'\n\t\t\t};\n\n\t\te.initCustomEvent( 'pswpTap', true, true, eDetail );\n\t\torigEvent.target.dispatchEvent(e);\n\t};\n\n_registerModule('Tap', {\n\tpublicMethods: {\n\t\tinitTap: function() {\n\t\t\t_listen('firstTouchStart', self.onTapStart);\n\t\t\t_listen('touchRelease', self.onTapRelease);\n\t\t\t_listen('destroy', function() {\n\t\t\t\ttapReleasePoint = {};\n\t\t\t\ttapTimer = null;\n\t\t\t});\n\t\t},\n\t\tonTapStart: function(touchList) {\n\t\t\tif(touchList.length > 1) {\n\t\t\t\tclearTimeout(tapTimer);\n\t\t\t\ttapTimer = null;\n\t\t\t}\n\t\t},\n\t\tonTapRelease: function(e, releasePoint) {\n\t\t\tif(!releasePoint) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(!_moved && !_isMultitouch && !_numAnimations) {\n\t\t\t\tvar p0 = releasePoint;\n\t\t\t\tif(tapTimer) {\n\t\t\t\t\tclearTimeout(tapTimer);\n\t\t\t\t\ttapTimer = null;\n\n\t\t\t\t\t// Check if taped on the same place\n\t\t\t\t\tif ( _isNearbyPoints(p0, tapReleasePoint) ) {\n\t\t\t\t\t\t_shout('doubleTap', p0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(releasePoint.type === 'mouse') {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint, 'mouse');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar clickedTagName = e.target.tagName.toUpperCase();\n\t\t\t\t// avoid double tap delay on buttons and elements that have class pswp__single-tap\n\t\t\t\tif(clickedTagName === 'BUTTON' || framework.hasClass(e.target, 'pswp__single-tap') ) {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_equalizePoints(tapReleasePoint, p0);\n\n\t\t\t\ttapTimer = setTimeout(function() {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\n\t\t\t\t\ttapTimer = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t}\n\t}\n});\n\n/*>>tap*/\n\n/*>>desktop-zoom*/\n/**\n *\n * desktop-zoom.js:\n *\n * - Binds mousewheel event for paning zoomed image.\n * - Manages \"dragging\", \"zoomed-in\", \"zoom-out\" classes.\n * (which are used for cursors and zoom icon)\n * - Adds toggleDesktopZoom function.\n * \n */\n\nvar _wheelDelta;\n\t\n_registerModule('DesktopZoom', {\n\n\tpublicMethods: {\n\n\t\tinitDesktopZoom: function() {\n\n\t\t\tif(_oldIE) {\n\t\t\t\t// no zoom for old IE (<=8)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_likelyTouchDevice) {\n\t\t\t\t// if detected hardware touch support, we wait until mouse is used,\n\t\t\t\t// and only then apply desktop-zoom features\n\t\t\t\t_listen('mouseUsed', function() {\n\t\t\t\t\tself.setupDesktopZoom();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.setupDesktopZoom(true);\n\t\t\t}\n\n\t\t},\n\n\t\tsetupDesktopZoom: function(onInit) {\n\n\t\t\t_wheelDelta = {};\n\n\t\t\tvar events = 'wheel mousewheel DOMMouseScroll';\n\t\t\t\n\t\t\t_listen('bindEvents', function() {\n\t\t\t\tframework.bind(template, events, self.handleMouseWheel);\n\t\t\t});\n\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tif(_wheelDelta) {\n\t\t\t\t\tframework.unbind(template, events, self.handleMouseWheel);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tself.mouseZoomedIn = false;\n\n\t\t\tvar hasDraggingClass,\n\t\t\t\tupdateZoomable = function() {\n\t\t\t\t\tif(self.mouseZoomedIn) {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoomed-in');\n\t\t\t\t\t\tself.mouseZoomedIn = false;\n\t\t\t\t\t}\n\t\t\t\t\tif(_currZoomLevel < 1) {\n\t\t\t\t\t\tframework.addClass(template, 'pswp--zoom-allowed');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoom-allowed');\n\t\t\t\t\t}\n\t\t\t\t\tremoveDraggingClass();\n\t\t\t\t},\n\t\t\t\tremoveDraggingClass = function() {\n\t\t\t\t\tif(hasDraggingClass) {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--dragging');\n\t\t\t\t\t\thasDraggingClass = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t_listen('resize' , updateZoomable);\n\t\t\t_listen('afterChange' , updateZoomable);\n\t\t\t_listen('pointerDown', function() {\n\t\t\t\tif(self.mouseZoomedIn) {\n\t\t\t\t\thasDraggingClass = true;\n\t\t\t\t\tframework.addClass(template, 'pswp--dragging');\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('pointerUp', removeDraggingClass);\n\n\t\t\tif(!onInit) {\n\t\t\t\tupdateZoomable();\n\t\t\t}\n\t\t\t\n\t\t},\n\n\t\thandleMouseWheel: function(e) {\n\n\t\t\tif(_currZoomLevel <= self.currItem.fitRatio) {\n\t\t\t\tif( _options.modal ) {\n\n\t\t\t\t\tif (!_options.closeOnScroll || _numAnimations || _isDragging) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t} else if(_transformKey && Math.abs(e.deltaY) > 2) {\n\t\t\t\t\t\t// close PhotoSwipe\n\t\t\t\t\t\t// if browser supports transforms & scroll changed enough\n\t\t\t\t\t\t_closedByScroll = true;\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// allow just one event to fire\n\t\t\te.stopPropagation();\n\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n\t\t\t_wheelDelta.x = 0;\n\n\t\t\tif('deltaX' in e) {\n\t\t\t\tif(e.deltaMode === 1 /* DOM_DELTA_LINE */) {\n\t\t\t\t\t// 18 - average line height\n\t\t\t\t\t_wheelDelta.x = e.deltaX * 18;\n\t\t\t\t\t_wheelDelta.y = e.deltaY * 18;\n\t\t\t\t} else {\n\t\t\t\t\t_wheelDelta.x = e.deltaX;\n\t\t\t\t\t_wheelDelta.y = e.deltaY;\n\t\t\t\t}\n\t\t\t} else if('wheelDelta' in e) {\n\t\t\t\tif(e.wheelDeltaX) {\n\t\t\t\t\t_wheelDelta.x = -0.16 * e.wheelDeltaX;\n\t\t\t\t}\n\t\t\t\tif(e.wheelDeltaY) {\n\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDeltaY;\n\t\t\t\t} else {\n\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDelta;\n\t\t\t\t}\n\t\t\t} else if('detail' in e) {\n\t\t\t\t_wheelDelta.y = e.detail;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_calculatePanBounds(_currZoomLevel, true);\n\n\t\t\tvar newPanX = _panOffset.x - _wheelDelta.x,\n\t\t\t\tnewPanY = _panOffset.y - _wheelDelta.y;\n\n\t\t\t// only prevent scrolling in nonmodal mode when not at edges\n\t\t\tif (_options.modal ||\n\t\t\t\t(\n\t\t\t\tnewPanX <= _currPanBounds.min.x && newPanX >= _currPanBounds.max.x &&\n\t\t\t\tnewPanY <= _currPanBounds.min.y && newPanY >= _currPanBounds.max.y\n\t\t\t\t) ) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\t// TODO: use rAF instead of mousewheel?\n\t\t\tself.panTo(newPanX, newPanY);\n\t\t},\n\n\t\ttoggleDesktopZoom: function(centerPoint) {\n\t\t\tcenterPoint = centerPoint || {x:_viewportSize.x/2 + _offset.x, y:_viewportSize.y/2 + _offset.y };\n\n\t\t\tvar doubleTapZoomLevel = _options.getDoubleTapZoom(true, self.currItem);\n\t\t\tvar zoomOut = _currZoomLevel === doubleTapZoomLevel;\n\t\t\t\n\t\t\tself.mouseZoomedIn = !zoomOut;\n\n\t\t\tself.zoomTo(zoomOut ? self.currItem.initialZoomLevel : doubleTapZoomLevel, centerPoint, 333);\n\t\t\tframework[ (!zoomOut ? 'add' : 'remove') + 'Class'](template, 'pswp--zoomed-in');\n\t\t}\n\n\t}\n});\n\n\n/*>>desktop-zoom*/\n\n/*>>history*/\n/**\n *\n * history.js:\n *\n * - Back button to close gallery.\n * \n * - Unique URL for each slide: example.com/&pid=1&gid=3\n * (where PID is picture index, and GID and gallery index)\n * \n * - Switch URL when slides change.\n * \n */\n\n\nvar _historyDefaultOptions = {\n\thistory: true,\n\tgalleryUID: 1\n};\n\nvar _historyUpdateTimeout,\n\t_hashChangeTimeout,\n\t_hashAnimCheckTimeout,\n\t_hashChangedByScript,\n\t_hashChangedByHistory,\n\t_hashReseted,\n\t_initialHash,\n\t_historyChanged,\n\t_closedFromURL,\n\t_urlChangedOnce,\n\t_windowLoc,\n\n\t_supportsPushState,\n\n\t_getHash = function() {\n\t\treturn _windowLoc.hash.substring(1);\n\t},\n\t_cleanHistoryTimeouts = function() {\n\n\t\tif(_historyUpdateTimeout) {\n\t\t\tclearTimeout(_historyUpdateTimeout);\n\t\t}\n\n\t\tif(_hashAnimCheckTimeout) {\n\t\t\tclearTimeout(_hashAnimCheckTimeout);\n\t\t}\n\t},\n\n\t// pid - Picture index\n\t// gid - Gallery index\n\t_parseItemIndexFromURL = function() {\n\t\tvar hash = _getHash(),\n\t\t\tparams = {};\n\n\t\tif(hash.length < 5) { // pid=1\n\t\t\treturn params;\n\t\t}\n\n\t\tvar i, vars = hash.split('&');\n\t\tfor (i = 0; i < vars.length; i++) {\n\t\t\tif(!vars[i]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar pair = vars[i].split('=');\t\n\t\t\tif(pair.length < 2) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparams[pair[0]] = pair[1];\n\t\t}\n\t\tif(_options.galleryPIDs) {\n\t\t\t// detect custom pid in hash and search for it among the items collection\n\t\t\tvar searchfor = params.pid;\n\t\t\tparams.pid = 0; // if custom pid cannot be found, fallback to the first item\n\t\t\tfor(i = 0; i < _items.length; i++) {\n\t\t\t\tif(_items[i].pid === searchfor) {\n\t\t\t\t\tparams.pid = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tparams.pid = parseInt(params.pid,10)-1;\n\t\t}\n\t\tif( params.pid < 0 ) {\n\t\t\tparams.pid = 0;\n\t\t}\n\t\treturn params;\n\t},\n\t_updateHash = function() {\n\n\t\tif(_hashAnimCheckTimeout) {\n\t\t\tclearTimeout(_hashAnimCheckTimeout);\n\t\t}\n\n\n\t\tif(_numAnimations || _isDragging) {\n\t\t\t// changing browser URL forces layout/paint in some browsers, which causes noticable lag during animation\n\t\t\t// that's why we update hash only when no animations running\n\t\t\t_hashAnimCheckTimeout = setTimeout(_updateHash, 500);\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(_hashChangedByScript) {\n\t\t\tclearTimeout(_hashChangeTimeout);\n\t\t} else {\n\t\t\t_hashChangedByScript = true;\n\t\t}\n\n\n\t\tvar pid = (_currentItemIndex + 1);\n\t\tvar item = _getItemAt( _currentItemIndex );\n\t\tif(item.hasOwnProperty('pid')) {\n\t\t\t// carry forward any custom pid assigned to the item\n\t\t\tpid = item.pid;\n\t\t}\n\t\tvar newHash = _initialHash + '&' + 'gid=' + _options.galleryUID + '&' + 'pid=' + pid;\n\n\t\tif(!_historyChanged) {\n\t\t\tif(_windowLoc.hash.indexOf(newHash) === -1) {\n\t\t\t\t_urlChangedOnce = true;\n\t\t\t}\n\t\t\t// first time - add new hisory record, then just replace\n\t\t}\n\n\t\tvar newURL = _windowLoc.href.split('#')[0] + '#' + newHash;\n\n\t\tif( _supportsPushState ) {\n\n\t\t\tif('#' + newHash !== window.location.hash) {\n\t\t\t\thistory[_historyChanged ? 'replaceState' : 'pushState']('', document.title, newURL);\n\t\t\t}\n\n\t\t} else {\n\t\t\tif(_historyChanged) {\n\t\t\t\t_windowLoc.replace( newURL );\n\t\t\t} else {\n\t\t\t\t_windowLoc.hash = newHash;\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\n\t\t_historyChanged = true;\n\t\t_hashChangeTimeout = setTimeout(function() {\n\t\t\t_hashChangedByScript = false;\n\t\t}, 60);\n\t};\n\n\n\n\t\n\n_registerModule('History', {\n\n\t\n\n\tpublicMethods: {\n\t\tinitHistory: function() {\n\n\t\t\tframework.extend(_options, _historyDefaultOptions, true);\n\n\t\t\tif( !_options.history ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t_windowLoc = window.location;\n\t\t\t_urlChangedOnce = false;\n\t\t\t_closedFromURL = false;\n\t\t\t_historyChanged = false;\n\t\t\t_initialHash = _getHash();\n\t\t\t_supportsPushState = ('pushState' in history);\n\n\n\t\t\tif(_initialHash.indexOf('gid=') > -1) {\n\t\t\t\t_initialHash = _initialHash.split('&gid=')[0];\n\t\t\t\t_initialHash = _initialHash.split('?gid=')[0];\n\t\t\t}\n\t\t\t\n\n\t\t\t_listen('afterChange', self.updateURL);\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tframework.unbind(window, 'hashchange', self.onHashChange);\n\t\t\t});\n\n\n\t\t\tvar returnToOriginal = function() {\n\t\t\t\t_hashReseted = true;\n\t\t\t\tif(!_closedFromURL) {\n\n\t\t\t\t\tif(_urlChangedOnce) {\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif(_initialHash) {\n\t\t\t\t\t\t\t_windowLoc.hash = _initialHash;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (_supportsPushState) {\n\n\t\t\t\t\t\t\t\t// remove hash from url without refreshing it or scrolling to top\n\t\t\t\t\t\t\t\thistory.pushState('', document.title, _windowLoc.pathname + _windowLoc.search );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_windowLoc.hash = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t_cleanHistoryTimeouts();\n\t\t\t};\n\n\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tif(_closedByScroll) {\n\t\t\t\t\t// if PhotoSwipe is closed by scroll, we go \"back\" before the closing animation starts\n\t\t\t\t\t// this is done to keep the scroll position\n\t\t\t\t\treturnToOriginal();\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('destroy', function() {\n\t\t\t\tif(!_hashReseted) {\n\t\t\t\t\treturnToOriginal();\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('firstUpdate', function() {\n\t\t\t\t_currentItemIndex = _parseItemIndexFromURL().pid;\n\t\t\t});\n\n\t\t\t\n\n\t\t\t\n\t\t\tvar index = _initialHash.indexOf('pid=');\n\t\t\tif(index > -1) {\n\t\t\t\t_initialHash = _initialHash.substring(0, index);\n\t\t\t\tif(_initialHash.slice(-1) === '&') {\n\t\t\t\t\t_initialHash = _initialHash.slice(0, -1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\t\t\tsetTimeout(function() {\n\t\t\t\tif(_isOpen) { // hasn't destroyed yet\n\t\t\t\t\tframework.bind(window, 'hashchange', self.onHashChange);\n\t\t\t\t}\n\t\t\t}, 40);\n\t\t\t\n\t\t},\n\t\tonHashChange: function() {\n\n\t\t\tif(_getHash() === _initialHash) {\n\n\t\t\t\t_closedFromURL = true;\n\t\t\t\tself.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!_hashChangedByScript) {\n\n\t\t\t\t_hashChangedByHistory = true;\n\t\t\t\tself.goTo( _parseItemIndexFromURL().pid );\n\t\t\t\t_hashChangedByHistory = false;\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tupdateURL: function() {\n\n\t\t\t// Delay the update of URL, to avoid lag during transition, \n\t\t\t// and to not to trigger actions like \"refresh page sound\" or \"blinking favicon\" to often\n\t\t\t\n\t\t\t_cleanHistoryTimeouts();\n\t\t\t\n\n\t\t\tif(_hashChangedByHistory) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(!_historyChanged) {\n\t\t\t\t_updateHash(); // first time\n\t\t\t} else {\n\t\t\t\t_historyUpdateTimeout = setTimeout(_updateHash, 800);\n\t\t\t}\n\t\t}\n\t\n\t}\n});\n\n\n/*>>history*/\n\tframework.extend(self, publicMethods); };\n\treturn PhotoSwipe;\n});","/*! PhotoSwipe Default UI - 4.1.3 - 2019-01-08\n* http://photoswipe.com\n* Copyright (c) 2019 Dmitry Semenov; */\n/**\n*\n* UI on top of main sliding area (caption, arrows, close button, etc.).\n* Built just using public methods/properties of PhotoSwipe.\n* \n*/\n(function (root, factory) { \n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.PhotoSwipeUI_Default = factory();\n\t}\n})(this, function () {\n\n\t'use strict';\n\n\n\nvar PhotoSwipeUI_Default =\n function(pswp, framework) {\n\n\tvar ui = this;\n\tvar _overlayUIUpdated = false,\n\t\t_controlsVisible = true,\n\t\t_fullscrenAPI,\n\t\t_controls,\n\t\t_captionContainer,\n\t\t_fakeCaptionContainer,\n\t\t_indexIndicator,\n\t\t_shareButton,\n\t\t_shareModal,\n\t\t_shareModalHidden = true,\n\t\t_initalCloseOnScrollValue,\n\t\t_isIdle,\n\t\t_listen,\n\n\t\t_loadingIndicator,\n\t\t_loadingIndicatorHidden,\n\t\t_loadingIndicatorTimeout,\n\n\t\t_galleryHasOneSlide,\n\n\t\t_options,\n\t\t_defaultUIOptions = {\n\t\t\tbarsSize: {top:44, bottom:'auto'},\n\t\t\tcloseElClasses: ['item', 'caption', 'zoom-wrap', 'ui', 'top-bar'], \n\t\t\ttimeToIdle: 4000, \n\t\t\ttimeToIdleOutside: 1000,\n\t\t\tloadingIndicatorDelay: 1000, // 2s\n\t\t\t\n\t\t\taddCaptionHTMLFn: function(item, captionEl /*, isFake */) {\n\t\t\t\tif(!item.title) {\n\t\t\t\t\tcaptionEl.children[0].innerHTML = '';\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tcaptionEl.children[0].innerHTML = item.title;\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tcloseEl:true,\n\t\t\tcaptionEl: true,\n\t\t\tfullscreenEl: true,\n\t\t\tzoomEl: true,\n\t\t\tshareEl: true,\n\t\t\tcounterEl: true,\n\t\t\tarrowEl: true,\n\t\t\tpreloaderEl: true,\n\n\t\t\ttapToClose: false,\n\t\t\ttapToToggleControls: true,\n\n\t\t\tclickToCloseNonZoomable: true,\n\n\t\t\tshareButtons: [\n\t\t\t\t{id:'facebook', label:'Share on Facebook', url:'https://www.facebook.com/sharer/sharer.php?u={{url}}'},\n\t\t\t\t{id:'twitter', label:'Tweet', url:'https://twitter.com/intent/tweet?text={{text}}&url={{url}}'},\n\t\t\t\t{id:'pinterest', label:'Pin it', url:'http://www.pinterest.com/pin/create/button/'+\n\t\t\t\t\t\t\t\t\t\t\t\t\t'?url={{url}}&media={{image_url}}&description={{text}}'},\n\t\t\t\t{id:'download', label:'Download image', url:'{{raw_image_url}}', download:true}\n\t\t\t],\n\t\t\tgetImageURLForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn pswp.currItem.src || '';\n\t\t\t},\n\t\t\tgetPageURLForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn window.location.href;\n\t\t\t},\n\t\t\tgetTextForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn pswp.currItem.title || '';\n\t\t\t},\n\t\t\t\t\n\t\t\tindexIndicatorSep: ' / ',\n\t\t\tfitControlsWidth: 1200\n\n\t\t},\n\t\t_blockControlsTap,\n\t\t_blockControlsTapTimeout;\n\n\n\n\tvar _onControlsTap = function(e) {\n\t\t\tif(_blockControlsTap) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\n\t\t\te = e || window.event;\n\n\t\t\tif(_options.timeToIdle && _options.mouseUsed && !_isIdle) {\n\t\t\t\t// reset idle timer\n\t\t\t\t_onIdleMouseMove();\n\t\t\t}\n\n\n\t\t\tvar target = e.target || e.srcElement,\n\t\t\t\tuiElement,\n\t\t\t\tclickedClass = target.getAttribute('class') || '',\n\t\t\t\tfound;\n\n\t\t\tfor(var i = 0; i < _uiElements.length; i++) {\n\t\t\t\tuiElement = _uiElements[i];\n\t\t\t\tif(uiElement.onTap && clickedClass.indexOf('pswp__' + uiElement.name ) > -1 ) {\n\t\t\t\t\tuiElement.onTap();\n\t\t\t\t\tfound = true;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(found) {\n\t\t\t\tif(e.stopPropagation) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\t_blockControlsTap = true;\n\n\t\t\t\t// Some versions of Android don't prevent ghost click event \n\t\t\t\t// when preventDefault() was called on touchstart and/or touchend.\n\t\t\t\t// \n\t\t\t\t// This happens on v4.3, 4.2, 4.1, \n\t\t\t\t// older versions strangely work correctly, \n\t\t\t\t// but just in case we add delay on all of them)\t\n\t\t\t\tvar tapDelay = framework.features.isOldAndroid ? 600 : 30;\n\t\t\t\t_blockControlsTapTimeout = setTimeout(function() {\n\t\t\t\t\t_blockControlsTap = false;\n\t\t\t\t}, tapDelay);\n\t\t\t}\n\n\t\t},\n\t\t_fitControlsInViewport = function() {\n\t\t\treturn !pswp.likelyTouchDevice || _options.mouseUsed || screen.width > _options.fitControlsWidth;\n\t\t},\n\t\t_togglePswpClass = function(el, cName, add) {\n\t\t\tframework[ (add ? 'add' : 'remove') + 'Class' ](el, 'pswp__' + cName);\n\t\t},\n\n\t\t// add class when there is just one item in the gallery\n\t\t// (by default it hides left/right arrows and 1ofX counter)\n\t\t_countNumItems = function() {\n\t\t\tvar hasOneSlide = (_options.getNumItemsFn() === 1);\n\n\t\t\tif(hasOneSlide !== _galleryHasOneSlide) {\n\t\t\t\t_togglePswpClass(_controls, 'ui--one-slide', hasOneSlide);\n\t\t\t\t_galleryHasOneSlide = hasOneSlide;\n\t\t\t}\n\t\t},\n\t\t_toggleShareModalClass = function() {\n\t\t\t_togglePswpClass(_shareModal, 'share-modal--hidden', _shareModalHidden);\n\t\t},\n\t\t_toggleShareModal = function() {\n\n\t\t\t_shareModalHidden = !_shareModalHidden;\n\t\t\t\n\t\t\t\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModalClass();\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(!_shareModalHidden) {\n\t\t\t\t\t\tframework.addClass(_shareModal, 'pswp__share-modal--fade-in');\n\t\t\t\t\t}\n\t\t\t\t}, 30);\n\t\t\t} else {\n\t\t\t\tframework.removeClass(_shareModal, 'pswp__share-modal--fade-in');\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(_shareModalHidden) {\n\t\t\t\t\t\t_toggleShareModalClass();\n\t\t\t\t\t}\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t\t\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_updateShareURLs();\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t_openWindowPopup = function(e) {\n\t\t\te = e || window.event;\n\t\t\tvar target = e.target || e.srcElement;\n\n\t\t\tpswp.shout('shareLinkClick', e, target);\n\n\t\t\tif(!target.href) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif( target.hasAttribute('download') ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\twindow.open(target.href, 'pswp_share', 'scrollbars=yes,resizable=yes,toolbar=no,'+\n\t\t\t\t\t\t\t\t\t\t'location=yes,width=550,height=420,top=100,left=' + \n\t\t\t\t\t\t\t\t\t\t(window.screen ? Math.round(screen.width / 2 - 275) : 100) );\n\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\t\t\t\n\t\t\treturn false;\n\t\t},\n\t\t_updateShareURLs = function() {\n\t\t\tvar shareButtonOut = '',\n\t\t\t\tshareButtonData,\n\t\t\t\tshareURL,\n\t\t\t\timage_url,\n\t\t\t\tpage_url,\n\t\t\t\tshare_text;\n\n\t\t\tfor(var i = 0; i < _options.shareButtons.length; i++) {\n\t\t\t\tshareButtonData = _options.shareButtons[i];\n\n\t\t\t\timage_url = _options.getImageURLForShare(shareButtonData);\n\t\t\t\tpage_url = _options.getPageURLForShare(shareButtonData);\n\t\t\t\tshare_text = _options.getTextForShare(shareButtonData);\n\n\t\t\t\tshareURL = shareButtonData.url.replace('{{url}}', encodeURIComponent(page_url) )\n\t\t\t\t\t\t\t\t\t.replace('{{image_url}}', encodeURIComponent(image_url) )\n\t\t\t\t\t\t\t\t\t.replace('{{raw_image_url}}', image_url )\n\t\t\t\t\t\t\t\t\t.replace('{{text}}', encodeURIComponent(share_text) );\n\n\t\t\t\tshareButtonOut += '' + \n\t\t\t\t\t\t\t\t\tshareButtonData.label + '';\n\n\t\t\t\tif(_options.parseShareButtonOut) {\n\t\t\t\t\tshareButtonOut = _options.parseShareButtonOut(shareButtonData, shareButtonOut);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_shareModal.children[0].innerHTML = shareButtonOut;\n\t\t\t_shareModal.children[0].onclick = _openWindowPopup;\n\n\t\t},\n\t\t_hasCloseClass = function(target) {\n\t\t\tfor(var i = 0; i < _options.closeElClasses.length; i++) {\n\t\t\t\tif( framework.hasClass(target, 'pswp__' + _options.closeElClasses[i]) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_idleInterval,\n\t\t_idleTimer,\n\t\t_idleIncrement = 0,\n\t\t_onIdleMouseMove = function() {\n\t\t\tclearTimeout(_idleTimer);\n\t\t\t_idleIncrement = 0;\n\t\t\tif(_isIdle) {\n\t\t\t\tui.setIdle(false);\n\t\t\t}\n\t\t},\n\t\t_onMouseLeaveWindow = function(e) {\n\t\t\te = e ? e : window.event;\n\t\t\tvar from = e.relatedTarget || e.toElement;\n\t\t\tif (!from || from.nodeName === 'HTML') {\n\t\t\t\tclearTimeout(_idleTimer);\n\t\t\t\t_idleTimer = setTimeout(function() {\n\t\t\t\t\tui.setIdle(true);\n\t\t\t\t}, _options.timeToIdleOutside);\n\t\t\t}\n\t\t},\n\t\t_setupFullscreenAPI = function() {\n\t\t\tif(_options.fullscreenEl && !framework.features.isOldAndroid) {\n\t\t\t\tif(!_fullscrenAPI) {\n\t\t\t\t\t_fullscrenAPI = ui.getFullscreenAPI();\n\t\t\t\t}\n\t\t\t\tif(_fullscrenAPI) {\n\t\t\t\t\tframework.bind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n\t\t\t\t\tui.updateFullscreen();\n\t\t\t\t\tframework.addClass(pswp.template, 'pswp--supports-fs');\n\t\t\t\t} else {\n\t\t\t\t\tframework.removeClass(pswp.template, 'pswp--supports-fs');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_setupLoadingIndicator = function() {\n\t\t\t// Setup loading indicator\n\t\t\tif(_options.preloaderEl) {\n\t\t\t\n\t\t\t\t_toggleLoadingIndicator(true);\n\n\t\t\t\t_listen('beforeChange', function() {\n\n\t\t\t\t\tclearTimeout(_loadingIndicatorTimeout);\n\n\t\t\t\t\t// display loading indicator with delay\n\t\t\t\t\t_loadingIndicatorTimeout = setTimeout(function() {\n\n\t\t\t\t\t\tif(pswp.currItem && pswp.currItem.loading) {\n\n\t\t\t\t\t\t\tif( !pswp.allowProgressiveImg() || (pswp.currItem.img && !pswp.currItem.img.naturalWidth) ) {\n\t\t\t\t\t\t\t\t// show preloader if progressive loading is not enabled, \n\t\t\t\t\t\t\t\t// or image width is not defined yet (because of slow connection)\n\t\t\t\t\t\t\t\t_toggleLoadingIndicator(false); \n\t\t\t\t\t\t\t\t// items-controller.js function allowProgressiveImg\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_toggleLoadingIndicator(true); // hide preloader\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}, _options.loadingIndicatorDelay);\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t_listen('imageLoadComplete', function(index, item) {\n\t\t\t\t\tif(pswp.currItem === item) {\n\t\t\t\t\t\t_toggleLoadingIndicator(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\t\t},\n\t\t_toggleLoadingIndicator = function(hide) {\n\t\t\tif( _loadingIndicatorHidden !== hide ) {\n\t\t\t\t_togglePswpClass(_loadingIndicator, 'preloader--active', !hide);\n\t\t\t\t_loadingIndicatorHidden = hide;\n\t\t\t}\n\t\t},\n\t\t_applyNavBarGaps = function(item) {\n\t\t\tvar gap = item.vGap;\n\n\t\t\tif( _fitControlsInViewport() ) {\n\t\t\t\t\n\t\t\t\tvar bars = _options.barsSize; \n\t\t\t\tif(_options.captionEl && bars.bottom === 'auto') {\n\t\t\t\t\tif(!_fakeCaptionContainer) {\n\t\t\t\t\t\t_fakeCaptionContainer = framework.createEl('pswp__caption pswp__caption--fake');\n\t\t\t\t\t\t_fakeCaptionContainer.appendChild( framework.createEl('pswp__caption__center') );\n\t\t\t\t\t\t_controls.insertBefore(_fakeCaptionContainer, _captionContainer);\n\t\t\t\t\t\tframework.addClass(_controls, 'pswp__ui--fit');\n\t\t\t\t\t}\n\t\t\t\t\tif( _options.addCaptionHTMLFn(item, _fakeCaptionContainer, true) ) {\n\n\t\t\t\t\t\tvar captionSize = _fakeCaptionContainer.clientHeight;\n\t\t\t\t\t\tgap.bottom = parseInt(captionSize,10) || 44;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgap.bottom = bars.top; // if no caption, set size of bottom gap to size of top\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tgap.bottom = bars.bottom === 'auto' ? 0 : bars.bottom;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// height of top bar is static, no need to calculate it\n\t\t\t\tgap.top = bars.top;\n\t\t\t} else {\n\t\t\t\tgap.top = gap.bottom = 0;\n\t\t\t}\n\t\t},\n\t\t_setupIdle = function() {\n\t\t\t// Hide controls when mouse is used\n\t\t\tif(_options.timeToIdle) {\n\t\t\t\t_listen('mouseUsed', function() {\n\t\t\t\t\t\n\t\t\t\t\tframework.bind(document, 'mousemove', _onIdleMouseMove);\n\t\t\t\t\tframework.bind(document, 'mouseout', _onMouseLeaveWindow);\n\n\t\t\t\t\t_idleInterval = setInterval(function() {\n\t\t\t\t\t\t_idleIncrement++;\n\t\t\t\t\t\tif(_idleIncrement === 2) {\n\t\t\t\t\t\t\tui.setIdle(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, _options.timeToIdle / 2);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t_setupHidingControlsDuringGestures = function() {\n\n\t\t\t// Hide controls on vertical drag\n\t\t\t_listen('onVerticalDrag', function(now) {\n\t\t\t\tif(_controlsVisible && now < 0.95) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t} else if(!_controlsVisible && now >= 0.95) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Hide controls when pinching to close\n\t\t\tvar pinchControlsHidden;\n\t\t\t_listen('onPinchClose' , function(now) {\n\t\t\t\tif(_controlsVisible && now < 0.9) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t\tpinchControlsHidden = true;\n\t\t\t\t} else if(pinchControlsHidden && !_controlsVisible && now > 0.9) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_listen('zoomGestureEnded', function() {\n\t\t\t\tpinchControlsHidden = false;\n\t\t\t\tif(pinchControlsHidden && !_controlsVisible) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t};\n\n\n\n\tvar _uiElements = [\n\t\t{ \n\t\t\tname: 'caption', \n\t\t\toption: 'captionEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_captionContainer = el; \n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'share-modal', \n\t\t\toption: 'shareEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_shareModal = el;\n\t\t\t},\n\t\t\tonTap: function() {\n\t\t\t\t_toggleShareModal();\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'button--share', \n\t\t\toption: 'shareEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_shareButton = el;\n\t\t\t},\n\t\t\tonTap: function() {\n\t\t\t\t_toggleShareModal();\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'button--zoom', \n\t\t\toption: 'zoomEl',\n\t\t\tonTap: pswp.toggleDesktopZoom\n\t\t},\n\t\t{ \n\t\t\tname: 'counter', \n\t\t\toption: 'counterEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_indexIndicator = el;\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'button--close', \n\t\t\toption: 'closeEl',\n\t\t\tonTap: pswp.close\n\t\t},\n\t\t{ \n\t\t\tname: 'button--arrow--left', \n\t\t\toption: 'arrowEl',\n\t\t\tonTap: pswp.prev\n\t\t},\n\t\t{ \n\t\t\tname: 'button--arrow--right', \n\t\t\toption: 'arrowEl',\n\t\t\tonTap: pswp.next\n\t\t},\n\t\t{ \n\t\t\tname: 'button--fs', \n\t\t\toption: 'fullscreenEl',\n\t\t\tonTap: function() { \n\t\t\t\tif(_fullscrenAPI.isFullscreen()) {\n\t\t\t\t\t_fullscrenAPI.exit();\n\t\t\t\t} else {\n\t\t\t\t\t_fullscrenAPI.enter();\n\t\t\t\t}\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'preloader', \n\t\t\toption: 'preloaderEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_loadingIndicator = el;\n\t\t\t} \n\t\t}\n\n\t];\n\n\tvar _setupUIElements = function() {\n\t\tvar item,\n\t\t\tclassAttr,\n\t\t\tuiElement;\n\n\t\tvar loopThroughChildElements = function(sChildren) {\n\t\t\tif(!sChildren) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar l = sChildren.length;\n\t\t\tfor(var i = 0; i < l; i++) {\n\t\t\t\titem = sChildren[i];\n\t\t\t\tclassAttr = item.className;\n\n\t\t\t\tfor(var a = 0; a < _uiElements.length; a++) {\n\t\t\t\t\tuiElement = _uiElements[a];\n\n\t\t\t\t\tif(classAttr.indexOf('pswp__' + uiElement.name) > -1 ) {\n\n\t\t\t\t\t\tif( _options[uiElement.option] ) { // if element is not disabled from options\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tframework.removeClass(item, 'pswp__element--disabled');\n\t\t\t\t\t\t\tif(uiElement.onInit) {\n\t\t\t\t\t\t\t\tuiElement.onInit(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//item.style.display = 'block';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tframework.addClass(item, 'pswp__element--disabled');\n\t\t\t\t\t\t\t//item.style.display = 'none';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tloopThroughChildElements(_controls.children);\n\n\t\tvar topBar = framework.getChildByClass(_controls, 'pswp__top-bar');\n\t\tif(topBar) {\n\t\t\tloopThroughChildElements( topBar.children );\n\t\t}\n\t};\n\n\n\t\n\n\tui.init = function() {\n\n\t\t// extend options\n\t\tframework.extend(pswp.options, _defaultUIOptions, true);\n\n\t\t// create local link for fast access\n\t\t_options = pswp.options;\n\n\t\t// find pswp__ui element\n\t\t_controls = framework.getChildByClass(pswp.scrollWrap, 'pswp__ui');\n\n\t\t// create local link\n\t\t_listen = pswp.listen;\n\n\n\t\t_setupHidingControlsDuringGestures();\n\n\t\t// update controls when slides change\n\t\t_listen('beforeChange', ui.update);\n\n\t\t// toggle zoom on double-tap\n\t\t_listen('doubleTap', function(point) {\n\t\t\tvar initialZoomLevel = pswp.currItem.initialZoomLevel;\n\t\t\tif(pswp.getZoomLevel() !== initialZoomLevel) {\n\t\t\t\tpswp.zoomTo(initialZoomLevel, point, 333);\n\t\t\t} else {\n\t\t\t\tpswp.zoomTo(_options.getDoubleTapZoom(false, pswp.currItem), point, 333);\n\t\t\t}\n\t\t});\n\n\t\t// Allow text selection in caption\n\t\t_listen('preventDragEvent', function(e, isDown, preventObj) {\n\t\t\tvar t = e.target || e.srcElement;\n\t\t\tif(\n\t\t\t\tt && \n\t\t\t\tt.getAttribute('class') && e.type.indexOf('mouse') > -1 && \n\t\t\t\t( t.getAttribute('class').indexOf('__caption') > 0 || (/(SMALL|STRONG|EM)/i).test(t.tagName) ) \n\t\t\t) {\n\t\t\t\tpreventObj.prevent = false;\n\t\t\t}\n\t\t});\n\n\t\t// bind events for UI\n\t\t_listen('bindEvents', function() {\n\t\t\tframework.bind(_controls, 'pswpTap click', _onControlsTap);\n\t\t\tframework.bind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n\n\t\t\tif(!pswp.likelyTouchDevice) {\n\t\t\t\tframework.bind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n\t\t\t}\n\t\t});\n\n\t\t// unbind events for UI\n\t\t_listen('unbindEvents', function() {\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\n\t\t\tif(_idleInterval) {\n\t\t\t\tclearInterval(_idleInterval);\n\t\t\t}\n\t\t\tframework.unbind(document, 'mouseout', _onMouseLeaveWindow);\n\t\t\tframework.unbind(document, 'mousemove', _onIdleMouseMove);\n\t\t\tframework.unbind(_controls, 'pswpTap click', _onControlsTap);\n\t\t\tframework.unbind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n\t\t\tframework.unbind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n\n\t\t\tif(_fullscrenAPI) {\n\t\t\t\tframework.unbind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n\t\t\t\tif(_fullscrenAPI.isFullscreen()) {\n\t\t\t\t\t_options.hideAnimationDuration = 0;\n\t\t\t\t\t_fullscrenAPI.exit();\n\t\t\t\t}\n\t\t\t\t_fullscrenAPI = null;\n\t\t\t}\n\t\t});\n\n\n\t\t// clean up things when gallery is destroyed\n\t\t_listen('destroy', function() {\n\t\t\tif(_options.captionEl) {\n\t\t\t\tif(_fakeCaptionContainer) {\n\t\t\t\t\t_controls.removeChild(_fakeCaptionContainer);\n\t\t\t\t}\n\t\t\t\tframework.removeClass(_captionContainer, 'pswp__caption--empty');\n\t\t\t}\n\n\t\t\tif(_shareModal) {\n\t\t\t\t_shareModal.children[0].onclick = null;\n\t\t\t}\n\t\t\tframework.removeClass(_controls, 'pswp__ui--over-close');\n\t\t\tframework.addClass( _controls, 'pswp__ui--hidden');\n\t\t\tui.setIdle(false);\n\t\t});\n\t\t\n\n\t\tif(!_options.showAnimationDuration) {\n\t\t\tframework.removeClass( _controls, 'pswp__ui--hidden');\n\t\t}\n\t\t_listen('initialZoomIn', function() {\n\t\t\tif(_options.showAnimationDuration) {\n\t\t\t\tframework.removeClass( _controls, 'pswp__ui--hidden');\n\t\t\t}\n\t\t});\n\t\t_listen('initialZoomOut', function() {\n\t\t\tframework.addClass( _controls, 'pswp__ui--hidden');\n\t\t});\n\n\t\t_listen('parseVerticalMargin', _applyNavBarGaps);\n\t\t\n\t\t_setupUIElements();\n\n\t\tif(_options.shareEl && _shareButton && _shareModal) {\n\t\t\t_shareModalHidden = true;\n\t\t}\n\n\t\t_countNumItems();\n\n\t\t_setupIdle();\n\n\t\t_setupFullscreenAPI();\n\n\t\t_setupLoadingIndicator();\n\t};\n\n\tui.setIdle = function(isIdle) {\n\t\t_isIdle = isIdle;\n\t\t_togglePswpClass(_controls, 'ui--idle', isIdle);\n\t};\n\n\tui.update = function() {\n\t\t// Don't update UI if it's hidden\n\t\tif(_controlsVisible && pswp.currItem) {\n\t\t\t\n\t\t\tui.updateIndexIndicator();\n\n\t\t\tif(_options.captionEl) {\n\t\t\t\t_options.addCaptionHTMLFn(pswp.currItem, _captionContainer);\n\n\t\t\t\t_togglePswpClass(_captionContainer, 'caption--empty', !pswp.currItem.title);\n\t\t\t}\n\n\t\t\t_overlayUIUpdated = true;\n\n\t\t} else {\n\t\t\t_overlayUIUpdated = false;\n\t\t}\n\n\t\tif(!_shareModalHidden) {\n\t\t\t_toggleShareModal();\n\t\t}\n\n\t\t_countNumItems();\n\t};\n\n\tui.updateFullscreen = function(e) {\n\n\t\tif(e) {\n\t\t\t// some browsers change window scroll position during the fullscreen\n\t\t\t// so PhotoSwipe updates it just in case\n\t\t\tsetTimeout(function() {\n\t\t\t\tpswp.setScrollOffset( 0, framework.getScrollY() );\n\t\t\t}, 50);\n\t\t}\n\t\t\n\t\t// toogle pswp--fs class on root element\n\t\tframework[ (_fullscrenAPI.isFullscreen() ? 'add' : 'remove') + 'Class' ](pswp.template, 'pswp--fs');\n\t};\n\n\tui.updateIndexIndicator = function() {\n\t\tif(_options.counterEl) {\n\t\t\t_indexIndicator.innerHTML = (pswp.getCurrentIndex()+1) + \n\t\t\t\t\t\t\t\t\t\t_options.indexIndicatorSep + \n\t\t\t\t\t\t\t\t\t\t_options.getNumItemsFn();\n\t\t}\n\t};\n\t\n\tui.onGlobalTap = function(e) {\n\t\te = e || window.event;\n\t\tvar target = e.target || e.srcElement;\n\n\t\tif(_blockControlsTap) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(e.detail && e.detail.pointerType === 'mouse') {\n\n\t\t\t// close gallery if clicked outside of the image\n\t\t\tif(_hasCloseClass(target)) {\n\t\t\t\tpswp.close();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(framework.hasClass(target, 'pswp__img')) {\n\t\t\t\tif(pswp.getZoomLevel() === 1 && pswp.getZoomLevel() <= pswp.currItem.fitRatio) {\n\t\t\t\t\tif(_options.clickToCloseNonZoomable) {\n\t\t\t\t\t\tpswp.close();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpswp.toggleDesktopZoom(e.detail.releasePoint);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t} else {\n\n\t\t\t// tap anywhere (except buttons) to toggle visibility of controls\n\t\t\tif(_options.tapToToggleControls) {\n\t\t\t\tif(_controlsVisible) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t} else {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// tap to close gallery\n\t\t\tif(_options.tapToClose && (framework.hasClass(target, 'pswp__img') || _hasCloseClass(target)) ) {\n\t\t\t\tpswp.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t}\n\t};\n\tui.onMouseOver = function(e) {\n\t\te = e || window.event;\n\t\tvar target = e.target || e.srcElement;\n\n\t\t// add class when mouse is over an element that should close the gallery\n\t\t_togglePswpClass(_controls, 'ui--over-close', _hasCloseClass(target));\n\t};\n\n\tui.hideControls = function() {\n\t\tframework.addClass(_controls,'pswp__ui--hidden');\n\t\t_controlsVisible = false;\n\t};\n\n\tui.showControls = function() {\n\t\t_controlsVisible = true;\n\t\tif(!_overlayUIUpdated) {\n\t\t\tui.update();\n\t\t}\n\t\tframework.removeClass(_controls,'pswp__ui--hidden');\n\t};\n\n\tui.supportsFullscreen = function() {\n\t\tvar d = document;\n\t\treturn !!(d.exitFullscreen || d.mozCancelFullScreen || d.webkitExitFullscreen || d.msExitFullscreen);\n\t};\n\n\tui.getFullscreenAPI = function() {\n\t\tvar dE = document.documentElement,\n\t\t\tapi,\n\t\t\ttF = 'fullscreenchange';\n\n\t\tif (dE.requestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'requestFullscreen',\n\t\t\t\texitK: 'exitFullscreen',\n\t\t\t\telementK: 'fullscreenElement',\n\t\t\t\teventK: tF\n\t\t\t};\n\n\t\t} else if(dE.mozRequestFullScreen ) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'mozRequestFullScreen',\n\t\t\t\texitK: 'mozCancelFullScreen',\n\t\t\t\telementK: 'mozFullScreenElement',\n\t\t\t\teventK: 'moz' + tF\n\t\t\t};\n\n\t\t\t\n\n\t\t} else if(dE.webkitRequestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'webkitRequestFullscreen',\n\t\t\t\texitK: 'webkitExitFullscreen',\n\t\t\t\telementK: 'webkitFullscreenElement',\n\t\t\t\teventK: 'webkit' + tF\n\t\t\t};\n\n\t\t} else if(dE.msRequestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'msRequestFullscreen',\n\t\t\t\texitK: 'msExitFullscreen',\n\t\t\t\telementK: 'msFullscreenElement',\n\t\t\t\teventK: 'MSFullscreenChange'\n\t\t\t};\n\t\t}\n\n\t\tif(api) {\n\t\t\tapi.enter = function() { \n\t\t\t\t// disable close-on-scroll in fullscreen\n\t\t\t\t_initalCloseOnScrollValue = _options.closeOnScroll; \n\t\t\t\t_options.closeOnScroll = false; \n\n\t\t\t\tif(this.enterK === 'webkitRequestFullscreen') {\n\t\t\t\t\tpswp.template[this.enterK]( Element.ALLOW_KEYBOARD_INPUT );\n\t\t\t\t} else {\n\t\t\t\t\treturn pswp.template[this.enterK](); \n\t\t\t\t}\n\t\t\t};\n\t\t\tapi.exit = function() { \n\t\t\t\t_options.closeOnScroll = _initalCloseOnScrollValue;\n\n\t\t\t\treturn document[this.exitK](); \n\n\t\t\t};\n\t\t\tapi.isFullscreen = function() { return document[this.elementK]; };\n\t\t}\n\n\t\treturn api;\n\t};\n\n\n\n};\nreturn PhotoSwipeUI_Default;\n\n\n});\n","// Object.keys\nif (!Object.keys) {\n Object.keys = function(object) {\n var keys = [];\n for (var name in object) {\n if (Object.prototype.hasOwnProperty.call(object, name)) {\n keys.push(name);\n }\n }\n return keys;\n };\n}","// ChildNode.remove\nif(!(\"remove\" in Element.prototype)){\n Element.prototype.remove = function(){\n if(this.parentNode) {\n this.parentNode.removeChild(this);\n }\n };\n}","/*! picturefill - v3.0.2 - 2016-02-12\n * https://scottjehl.github.io/picturefill/\n * Copyright (c) 2016 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT\n */\n/*! Gecko-Picture - v1.0\n * https://github.com/scottjehl/picturefill/tree/3.0/src/plugins/gecko-picture\n * Firefox's early picture implementation (prior to FF41) is static and does\n * not react to viewport changes. This tiny module fixes this.\n */\n(function(window) {\n\t/*jshint eqnull:true */\n\tvar ua = navigator.userAgent;\n\n\tif ( window.HTMLPictureElement && ((/ecko/).test(ua) && ua.match(/rv\\:(\\d+)/) && RegExp.$1 < 45) ) {\n\t\taddEventListener(\"resize\", (function() {\n\t\t\tvar timer;\n\n\t\t\tvar dummySrc = document.createElement(\"source\");\n\n\t\t\tvar fixRespimg = function(img) {\n\t\t\t\tvar source, sizes;\n\t\t\t\tvar picture = img.parentNode;\n\n\t\t\t\tif (picture.nodeName.toUpperCase() === \"PICTURE\") {\n\t\t\t\t\tsource = dummySrc.cloneNode();\n\n\t\t\t\t\tpicture.insertBefore(source, picture.firstElementChild);\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tpicture.removeChild(source);\n\t\t\t\t\t});\n\t\t\t\t} else if (!img._pfLastSize || img.offsetWidth > img._pfLastSize) {\n\t\t\t\t\timg._pfLastSize = img.offsetWidth;\n\t\t\t\t\tsizes = img.sizes;\n\t\t\t\t\timg.sizes += \",100vw\";\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\timg.sizes = sizes;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar findPictureImgs = function() {\n\t\t\t\tvar i;\n\t\t\t\tvar imgs = document.querySelectorAll(\"picture > img, img[srcset][sizes]\");\n\t\t\t\tfor (i = 0; i < imgs.length; i++) {\n\t\t\t\t\tfixRespimg(imgs[i]);\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar onResize = function() {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = setTimeout(findPictureImgs, 99);\n\t\t\t};\n\t\t\tvar mq = window.matchMedia && matchMedia(\"(orientation: landscape)\");\n\t\t\tvar init = function() {\n\t\t\t\tonResize();\n\n\t\t\t\tif (mq && mq.addListener) {\n\t\t\t\t\tmq.addListener(onResize);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdummySrc.srcset = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\n\t\t\tif (/^[c|i]|d$/.test(document.readyState || \"\")) {\n\t\t\t\tinit();\n\t\t\t} else {\n\t\t\t\tdocument.addEventListener(\"DOMContentLoaded\", init);\n\t\t\t}\n\n\t\t\treturn onResize;\n\t\t})());\n\t}\n})(window);\n\n/*! Picturefill - v3.0.2\n * http://scottjehl.github.io/picturefill\n * Copyright (c) 2015 https://github.com/scottjehl/picturefill/blob/master/Authors.txt;\n * License: MIT\n */\n\n(function( window, document, undefined ) {\n\t// Enable strict mode\n\t\"use strict\";\n\n\t// HTML shim|v it for old IE (IE9 will still need the HTML video tag workaround)\n\tdocument.createElement( \"picture\" );\n\n\tvar warn, eminpx, alwaysCheckWDescriptor, evalId;\n\t// local object for method references and testing exposure\n\tvar pf = {};\n\tvar isSupportTestReady = false;\n\tvar noop = function() {};\n\tvar image = document.createElement( \"img\" );\n\tvar getImgAttr = image.getAttribute;\n\tvar setImgAttr = image.setAttribute;\n\tvar removeImgAttr = image.removeAttribute;\n\tvar docElem = document.documentElement;\n\tvar types = {};\n\tvar cfg = {\n\t\t//resource selection:\n\t\talgorithm: \"\"\n\t};\n\tvar srcAttr = \"data-pfsrc\";\n\tvar srcsetAttr = srcAttr + \"set\";\n\t// ua sniffing is done for undetectable img loading features,\n\t// to do some non crucial perf optimizations\n\tvar ua = navigator.userAgent;\n\tvar supportAbort = (/rident/).test(ua) || ((/ecko/).test(ua) && ua.match(/rv\\:(\\d+)/) && RegExp.$1 > 35 );\n\tvar curSrcProp = \"currentSrc\";\n\tvar regWDesc = /\\s+\\+?\\d+(e\\d+)?w/;\n\tvar regSize = /(\\([^)]+\\))?\\s*(.+)/;\n\tvar setOptions = window.picturefillCFG;\n\t/**\n\t * Shortcut property for https://w3c.github.io/webappsec/specs/mixedcontent/#restricts-mixed-content ( for easy overriding in tests )\n\t */\n\t// baseStyle also used by getEmValue (i.e.: width: 1em is important)\n\tvar baseStyle = \"position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)\";\n\tvar fsCss = \"font-size:100%!important;\";\n\tvar isVwDirty = true;\n\n\tvar cssCache = {};\n\tvar sizeLengthCache = {};\n\tvar DPR = window.devicePixelRatio;\n\tvar units = {\n\t\tpx: 1,\n\t\t\"in\": 96\n\t};\n\tvar anchor = document.createElement( \"a\" );\n\t/**\n\t * alreadyRun flag used for setOptions. is it true setOptions will reevaluate\n\t * @type {boolean}\n\t */\n\tvar alreadyRun = false;\n\n\t// Reusable, non-\"g\" Regexes\n\n\t// (Don't use \\s, to avoid matching non-breaking space.)\n\tvar regexLeadingSpaces = /^[ \\t\\n\\r\\u000c]+/,\n\t regexLeadingCommasOrSpaces = /^[, \\t\\n\\r\\u000c]+/,\n\t regexLeadingNotSpaces = /^[^ \\t\\n\\r\\u000c]+/,\n\t regexTrailingCommas = /[,]+$/,\n\t regexNonNegativeInteger = /^\\d+$/,\n\n\t // ( Positive or negative or unsigned integers or decimals, without or without exponents.\n\t // Must include at least one digit.\n\t // According to spec tests any decimal point must be followed by a digit.\n\t // No leading plus sign is allowed.)\n\t // https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number\n\t regexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/;\n\n\tvar on = function(obj, evt, fn, capture) {\n\t\tif ( obj.addEventListener ) {\n\t\t\tobj.addEventListener(evt, fn, capture || false);\n\t\t} else if ( obj.attachEvent ) {\n\t\t\tobj.attachEvent( \"on\" + evt, fn);\n\t\t}\n\t};\n\n\t/**\n\t * simple memoize function:\n\t */\n\n\tvar memoize = function(fn) {\n\t\tvar cache = {};\n\t\treturn function(input) {\n\t\t\tif ( !(input in cache) ) {\n\t\t\t\tcache[ input ] = fn(input);\n\t\t\t}\n\t\t\treturn cache[ input ];\n\t\t};\n\t};\n\n\t// UTILITY FUNCTIONS\n\n\t// Manual is faster than RegEx\n\t// http://jsperf.com/whitespace-character/5\n\tfunction isSpace(c) {\n\t\treturn (c === \"\\u0020\" || // space\n\t\t c === \"\\u0009\" || // horizontal tab\n\t\t c === \"\\u000A\" || // new line\n\t\t c === \"\\u000C\" || // form feed\n\t\t c === \"\\u000D\"); // carriage return\n\t}\n\n\t/**\n\t * gets a mediaquery and returns a boolean or gets a css length and returns a number\n\t * @param css mediaqueries or css length\n\t * @returns {boolean|number}\n\t *\n\t * based on: https://gist.github.com/jonathantneal/db4f77009b155f083738\n\t */\n\tvar evalCSS = (function() {\n\n\t\tvar regLength = /^([\\d\\.]+)(em|vw|px)$/;\n\t\tvar replace = function() {\n\t\t\tvar args = arguments, index = 0, string = args[0];\n\t\t\twhile (++index in args) {\n\t\t\t\tstring = string.replace(args[index], args[++index]);\n\t\t\t}\n\t\t\treturn string;\n\t\t};\n\n\t\tvar buildStr = memoize(function(css) {\n\n\t\t\treturn \"return \" + replace((css || \"\").toLowerCase(),\n\t\t\t\t// interpret `and`\n\t\t\t\t/\\band\\b/g, \"&&\",\n\n\t\t\t\t// interpret `,`\n\t\t\t\t/,/g, \"||\",\n\n\t\t\t\t// interpret `min-` as >=\n\t\t\t\t/min-([a-z-\\s]+):/g, \"e.$1>=\",\n\n\t\t\t\t// interpret `max-` as <=\n\t\t\t\t/max-([a-z-\\s]+):/g, \"e.$1<=\",\n\n\t\t\t\t//calc value\n\t\t\t\t/calc([^)]+)/g, \"($1)\",\n\n\t\t\t\t// interpret css values\n\t\t\t\t/(\\d+[\\.]*[\\d]*)([a-z]+)/g, \"($1 * e.$2)\",\n\t\t\t\t//make eval less evil\n\t\t\t\t/^(?!(e.[a-z]|[0-9\\.&=|><\\+\\-\\*\\(\\)\\/])).*/ig, \"\"\n\t\t\t) + \";\";\n\t\t});\n\n\t\treturn function(css, length) {\n\t\t\tvar parsedLength;\n\t\t\tif (!(css in cssCache)) {\n\t\t\t\tcssCache[css] = false;\n\t\t\t\tif (length && (parsedLength = css.match( regLength ))) {\n\t\t\t\t\tcssCache[css] = parsedLength[ 1 ] * units[parsedLength[ 2 ]];\n\t\t\t\t} else {\n\t\t\t\t\t/*jshint evil:true */\n\t\t\t\t\ttry{\n\t\t\t\t\t\tcssCache[css] = new Function(\"e\", buildStr(css))(units);\n\t\t\t\t\t} catch(e) {}\n\t\t\t\t\t/*jshint evil:false */\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cssCache[css];\n\t\t};\n\t})();\n\n\tvar setResolution = function( candidate, sizesattr ) {\n\t\tif ( candidate.w ) { // h = means height: || descriptor.type === 'h' do not handle yet...\n\t\t\tcandidate.cWidth = pf.calcListLength( sizesattr || \"100vw\" );\n\t\t\tcandidate.res = candidate.w / candidate.cWidth ;\n\t\t} else {\n\t\t\tcandidate.res = candidate.d;\n\t\t}\n\t\treturn candidate;\n\t};\n\n\t/**\n\t *\n\t * @param opt\n\t */\n\tvar picturefill = function( opt ) {\n\n\t\tif (!isSupportTestReady) {return;}\n\n\t\tvar elements, i, plen;\n\n\t\tvar options = opt || {};\n\n\t\tif ( options.elements && options.elements.nodeType === 1 ) {\n\t\t\tif ( options.elements.nodeName.toUpperCase() === \"IMG\" ) {\n\t\t\t\toptions.elements = [ options.elements ];\n\t\t\t} else {\n\t\t\t\toptions.context = options.elements;\n\t\t\t\toptions.elements = null;\n\t\t\t}\n\t\t}\n\n\t\telements = options.elements || pf.qsa( (options.context || document), ( options.reevaluate || options.reselect ) ? pf.sel : pf.selShort );\n\n\t\tif ( (plen = elements.length) ) {\n\n\t\t\tpf.setupRun( options );\n\t\t\talreadyRun = true;\n\n\t\t\t// Loop through all elements\n\t\t\tfor ( i = 0; i < plen; i++ ) {\n\t\t\t\tpf.fillImg(elements[ i ], options);\n\t\t\t}\n\n\t\t\tpf.teardownRun( options );\n\t\t}\n\t};\n\n\t/**\n\t * outputs a warning for the developer\n\t * @param {message}\n\t * @type {Function}\n\t */\n\twarn = ( window.console && console.warn ) ?\n\t\tfunction( message ) {\n\t\t\tconsole.warn( message );\n\t\t} :\n\t\tnoop\n\t;\n\n\tif ( !(curSrcProp in image) ) {\n\t\tcurSrcProp = \"src\";\n\t}\n\n\t// Add support for standard mime types.\n\ttypes[ \"image/jpeg\" ] = true;\n\ttypes[ \"image/gif\" ] = true;\n\ttypes[ \"image/png\" ] = true;\n\n\tfunction detectTypeSupport( type, typeUri ) {\n\t\t// based on Modernizr's lossless img-webp test\n\t\t// note: asynchronous\n\t\tvar image = new window.Image();\n\t\timage.onerror = function() {\n\t\t\ttypes[ type ] = false;\n\t\t\tpicturefill();\n\t\t};\n\t\timage.onload = function() {\n\t\t\ttypes[ type ] = image.width === 1;\n\t\t\tpicturefill();\n\t\t};\n\t\timage.src = typeUri;\n\t\treturn \"pending\";\n\t}\n\n\t// test svg support\n\ttypes[ \"image/svg+xml\" ] = document.implementation.hasFeature( \"http://www.w3.org/TR/SVG11/feature#Image\", \"1.1\" );\n\n\t/**\n\t * updates the internal vW property with the current viewport width in px\n\t */\n\tfunction updateMetrics() {\n\n\t\tisVwDirty = false;\n\t\tDPR = window.devicePixelRatio;\n\t\tcssCache = {};\n\t\tsizeLengthCache = {};\n\n\t\tpf.DPR = DPR || 1;\n\n\t\tunits.width = Math.max(window.innerWidth || 0, docElem.clientWidth);\n\t\tunits.height = Math.max(window.innerHeight || 0, docElem.clientHeight);\n\n\t\tunits.vw = units.width / 100;\n\t\tunits.vh = units.height / 100;\n\n\t\tevalId = [ units.height, units.width, DPR ].join(\"-\");\n\n\t\tunits.em = pf.getEmValue();\n\t\tunits.rem = units.em;\n\t}\n\n\tfunction chooseLowRes( lowerValue, higherValue, dprValue, isCached ) {\n\t\tvar bonusFactor, tooMuch, bonus, meanDensity;\n\n\t\t//experimental\n\t\tif (cfg.algorithm === \"saveData\" ){\n\t\t\tif ( lowerValue > 2.7 ) {\n\t\t\t\tmeanDensity = dprValue + 1;\n\t\t\t} else {\n\t\t\t\ttooMuch = higherValue - dprValue;\n\t\t\t\tbonusFactor = Math.pow(lowerValue - 0.6, 1.5);\n\n\t\t\t\tbonus = tooMuch * bonusFactor;\n\n\t\t\t\tif (isCached) {\n\t\t\t\t\tbonus += 0.1 * bonusFactor;\n\t\t\t\t}\n\n\t\t\t\tmeanDensity = lowerValue + bonus;\n\t\t\t}\n\t\t} else {\n\t\t\tmeanDensity = (dprValue > 1) ?\n\t\t\t\tMath.sqrt(lowerValue * higherValue) :\n\t\t\t\tlowerValue;\n\t\t}\n\n\t\treturn meanDensity > dprValue;\n\t}\n\n\tfunction applyBestCandidate( img ) {\n\t\tvar srcSetCandidates;\n\t\tvar matchingSet = pf.getSet( img );\n\t\tvar evaluated = false;\n\t\tif ( matchingSet !== \"pending\" ) {\n\t\t\tevaluated = evalId;\n\t\t\tif ( matchingSet ) {\n\t\t\t\tsrcSetCandidates = pf.setRes( matchingSet );\n\t\t\t\tpf.applySetCandidate( srcSetCandidates, img );\n\t\t\t}\n\t\t}\n\t\timg[ pf.ns ].evaled = evaluated;\n\t}\n\n\tfunction ascendingSort( a, b ) {\n\t\treturn a.res - b.res;\n\t}\n\n\tfunction setSrcToCur( img, src, set ) {\n\t\tvar candidate;\n\t\tif ( !set && src ) {\n\t\t\tset = img[ pf.ns ].sets;\n\t\t\tset = set && set[set.length - 1];\n\t\t}\n\n\t\tcandidate = getCandidateForSrc(src, set);\n\n\t\tif ( candidate ) {\n\t\t\tsrc = pf.makeUrl(src);\n\t\t\timg[ pf.ns ].curSrc = src;\n\t\t\timg[ pf.ns ].curCan = candidate;\n\n\t\t\tif ( !candidate.res ) {\n\t\t\t\tsetResolution( candidate, candidate.set.sizes );\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tfunction getCandidateForSrc( src, set ) {\n\t\tvar i, candidate, candidates;\n\t\tif ( src && set ) {\n\t\t\tcandidates = pf.parseSet( set );\n\t\t\tsrc = pf.makeUrl(src);\n\t\t\tfor ( i = 0; i < candidates.length; i++ ) {\n\t\t\t\tif ( src === pf.makeUrl(candidates[ i ].url) ) {\n\t\t\t\t\tcandidate = candidates[ i ];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tfunction getAllSourceElements( picture, candidates ) {\n\t\tvar i, len, source, srcset;\n\n\t\t// SPEC mismatch intended for size and perf:\n\t\t// actually only source elements preceding the img should be used\n\t\t// also note: don't use qsa here, because IE8 sometimes doesn't like source as the key part in a selector\n\t\tvar sources = picture.getElementsByTagName( \"source\" );\n\n\t\tfor ( i = 0, len = sources.length; i < len; i++ ) {\n\t\t\tsource = sources[ i ];\n\t\t\tsource[ pf.ns ] = true;\n\t\t\tsrcset = source.getAttribute( \"srcset\" );\n\n\t\t\t// if source does not have a srcset attribute, skip\n\t\t\tif ( srcset ) {\n\t\t\t\tcandidates.push( {\n\t\t\t\t\tsrcset: srcset,\n\t\t\t\t\tmedia: source.getAttribute( \"media\" ),\n\t\t\t\t\ttype: source.getAttribute( \"type\" ),\n\t\t\t\t\tsizes: source.getAttribute( \"sizes\" )\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Srcset Parser\n\t * By Alex Bell | MIT License\n\t *\n\t * @returns Array [{url: _, d: _, w: _, h:_, set:_(????)}, ...]\n\t *\n\t * Based super duper closely on the reference algorithm at:\n\t * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute\n\t */\n\n\t// 1. Let input be the value passed to this algorithm.\n\t// (TO-DO : Explain what \"set\" argument is here. Maybe choose a more\n\t// descriptive & more searchable name. Since passing the \"set\" in really has\n\t// nothing to do with parsing proper, I would prefer this assignment eventually\n\t// go in an external fn.)\n\tfunction parseSrcset(input, set) {\n\n\t\tfunction collectCharacters(regEx) {\n\t\t\tvar chars,\n\t\t\t match = regEx.exec(input.substring(pos));\n\t\t\tif (match) {\n\t\t\t\tchars = match[ 0 ];\n\t\t\t\tpos += chars.length;\n\t\t\t\treturn chars;\n\t\t\t}\n\t\t}\n\n\t\tvar inputLength = input.length,\n\t\t url,\n\t\t descriptors,\n\t\t currentDescriptor,\n\t\t state,\n\t\t c,\n\n\t\t // 2. Let position be a pointer into input, initially pointing at the start\n\t\t // of the string.\n\t\t pos = 0,\n\n\t\t // 3. Let candidates be an initially empty source set.\n\t\t candidates = [];\n\n\t\t/**\n\t\t* Adds descriptor properties to a candidate, pushes to the candidates array\n\t\t* @return undefined\n\t\t*/\n\t\t// (Declared outside of the while loop so that it's only created once.\n\t\t// (This fn is defined before it is used, in order to pass JSHINT.\n\t\t// Unfortunately this breaks the sequencing of the spec comments. :/ )\n\t\tfunction parseDescriptors() {\n\n\t\t\t// 9. Descriptor parser: Let error be no.\n\t\t\tvar pError = false,\n\n\t\t\t// 10. Let width be absent.\n\t\t\t// 11. Let density be absent.\n\t\t\t// 12. Let future-compat-h be absent. (We're implementing it now as h)\n\t\t\t w, d, h, i,\n\t\t\t candidate = {},\n\t\t\t desc, lastChar, value, intVal, floatVal;\n\n\t\t\t// 13. For each descriptor in descriptors, run the appropriate set of steps\n\t\t\t// from the following list:\n\t\t\tfor (i = 0 ; i < descriptors.length; i++) {\n\t\t\t\tdesc = descriptors[ i ];\n\n\t\t\t\tlastChar = desc[ desc.length - 1 ];\n\t\t\t\tvalue = desc.substring(0, desc.length - 1);\n\t\t\t\tintVal = parseInt(value, 10);\n\t\t\t\tfloatVal = parseFloat(value);\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0077 LATIN SMALL LETTER W character\n\t\t\t\tif (regexNonNegativeInteger.test(value) && (lastChar === \"w\")) {\n\n\t\t\t\t\t// If width and density are not both absent, then let error be yes.\n\t\t\t\t\tif (w || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes.\n\t\t\t\t\t// Otherwise, let width be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {w = intVal;}\n\n\t\t\t\t// If the descriptor consists of a valid floating-point number followed by\n\t\t\t\t// a U+0078 LATIN SMALL LETTER X character\n\t\t\t\t} else if (regexFloatingPoint.test(value) && (lastChar === \"x\")) {\n\n\t\t\t\t\t// If width, density and future-compat-h are not all absent, then let error\n\t\t\t\t\t// be yes.\n\t\t\t\t\tif (w || d || h) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing floating-point number values to the descriptor.\n\t\t\t\t\t// If the result is less than zero, let error be yes. Otherwise, let density\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (floatVal < 0) {pError = true;} else {d = floatVal;}\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0068 LATIN SMALL LETTER H character\n\t\t\t\t} else if (regexNonNegativeInteger.test(value) && (lastChar === \"h\")) {\n\n\t\t\t\t\t// If height and density are not both absent, then let error be yes.\n\t\t\t\t\tif (h || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes. Otherwise, let future-compat-h\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {h = intVal;}\n\n\t\t\t\t// Anything else, Let error be yes.\n\t\t\t\t} else {pError = true;}\n\t\t\t} // (close step 13 for loop)\n\n\t\t\t// 15. If error is still no, then append a new image source to candidates whose\n\t\t\t// URL is url, associated with a width width if not absent and a pixel\n\t\t\t// density density if not absent. Otherwise, there is a parse error.\n\t\t\tif (!pError) {\n\t\t\t\tcandidate.url = url;\n\n\t\t\t\tif (w) { candidate.w = w;}\n\t\t\t\tif (d) { candidate.d = d;}\n\t\t\t\tif (h) { candidate.h = h;}\n\t\t\t\tif (!h && !d && !w) {candidate.d = 1;}\n\t\t\t\tif (candidate.d === 1) {set.has1x = true;}\n\t\t\t\tcandidate.set = set;\n\n\t\t\t\tcandidates.push(candidate);\n\t\t\t}\n\t\t} // (close parseDescriptors fn)\n\n\t\t/**\n\t\t* Tokenizes descriptor properties prior to parsing\n\t\t* Returns undefined.\n\t\t* (Again, this fn is defined before it is used, in order to pass JSHINT.\n\t\t* Unfortunately this breaks the logical sequencing of the spec comments. :/ )\n\t\t*/\n\t\tfunction tokenize() {\n\n\t\t\t// 8.1. Descriptor tokeniser: Skip whitespace\n\t\t\tcollectCharacters(regexLeadingSpaces);\n\n\t\t\t// 8.2. Let current descriptor be the empty string.\n\t\t\tcurrentDescriptor = \"\";\n\n\t\t\t// 8.3. Let state be in descriptor.\n\t\t\tstate = \"in descriptor\";\n\n\t\t\twhile (true) {\n\n\t\t\t\t// 8.4. Let c be the character at position.\n\t\t\t\tc = input.charAt(pos);\n\n\t\t\t\t// Do the following depending on the value of state.\n\t\t\t\t// For the purpose of this step, \"EOF\" is a special character representing\n\t\t\t\t// that position is past the end of input.\n\n\t\t\t\t// In descriptor\n\t\t\t\tif (state === \"in descriptor\") {\n\t\t\t\t\t// Do the following, depending on the value of c:\n\n\t\t\t\t // Space character\n\t\t\t\t // If current descriptor is not empty, append current descriptor to\n\t\t\t\t // descriptors and let current descriptor be the empty string.\n\t\t\t\t // Set state to after descriptor.\n\t\t\t\t\tif (isSpace(c)) {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t\tcurrentDescriptor = \"\";\n\t\t\t\t\t\t\tstate = \"after descriptor\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// U+002C COMMA (,)\n\t\t\t\t\t// Advance position to the next character in input. If current descriptor\n\t\t\t\t\t// is not empty, append current descriptor to descriptors. Jump to the step\n\t\t\t\t\t// labeled descriptor parser.\n\t\t\t\t\t} else if (c === \",\") {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// U+0028 LEFT PARENTHESIS (()\n\t\t\t\t\t// Append c to current descriptor. Set state to in parens.\n\t\t\t\t\t} else if (c === \"\\u0028\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in parens\";\n\n\t\t\t\t\t// EOF\n\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t// descriptors. Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\t\t\t\t// (end \"in descriptor\"\n\n\t\t\t\t// In parens\n\t\t\t\t} else if (state === \"in parens\") {\n\n\t\t\t\t\t// U+0029 RIGHT PARENTHESIS ())\n\t\t\t\t\t// Append c to current descriptor. Set state to in descriptor.\n\t\t\t\t\tif (c === \")\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in descriptor\";\n\n\t\t\t\t\t// EOF\n\t\t\t\t\t// Append current descriptor to descriptors. Jump to the step labeled\n\t\t\t\t\t// descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\n\t\t\t\t// After descriptor\n\t\t\t\t} else if (state === \"after descriptor\") {\n\n\t\t\t\t\t// Do the following, depending on the value of c:\n\t\t\t\t\t// Space character: Stay in this state.\n\t\t\t\t\tif (isSpace(c)) {\n\n\t\t\t\t\t// EOF: Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Set state to in descriptor. Set position to the previous character in input.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = \"in descriptor\";\n\t\t\t\t\t\tpos -= 1;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Advance position to the next character in input.\n\t\t\t\tpos += 1;\n\n\t\t\t// Repeat this step.\n\t\t\t} // (close while true loop)\n\t\t}\n\n\t\t// 4. Splitting loop: Collect a sequence of characters that are space\n\t\t// characters or U+002C COMMA characters. If any U+002C COMMA characters\n\t\t// were collected, that is a parse error.\n\t\twhile (true) {\n\t\t\tcollectCharacters(regexLeadingCommasOrSpaces);\n\n\t\t\t// 5. If position is past the end of input, return candidates and abort these steps.\n\t\t\tif (pos >= inputLength) {\n\t\t\t\treturn candidates; // (we're done, this is the sole return path)\n\t\t\t}\n\n\t\t\t// 6. Collect a sequence of characters that are not space characters,\n\t\t\t// and let that be url.\n\t\t\turl = collectCharacters(regexLeadingNotSpaces);\n\n\t\t\t// 7. Let descriptors be a new empty list.\n\t\t\tdescriptors = [];\n\n\t\t\t// 8. If url ends with a U+002C COMMA character (,), follow these substeps:\n\t\t\t//\t\t(1). Remove all trailing U+002C COMMA characters from url. If this removed\n\t\t\t// more than one character, that is a parse error.\n\t\t\tif (url.slice(-1) === \",\") {\n\t\t\t\turl = url.replace(regexTrailingCommas, \"\");\n\t\t\t\t// (Jump ahead to step 9 to skip tokenization and just push the candidate).\n\t\t\t\tparseDescriptors();\n\n\t\t\t//\tOtherwise, follow these substeps:\n\t\t\t} else {\n\t\t\t\ttokenize();\n\t\t\t} // (close else of step 8)\n\n\t\t// 16. Return to the step labeled splitting loop.\n\t\t} // (Close of big while loop.)\n\t}\n\n\t/*\n\t * Sizes Parser\n\t *\n\t * By Alex Bell | MIT License\n\t *\n\t * Non-strict but accurate and lightweight JS Parser for the string value \n\t *\n\t * Reference algorithm at:\n\t * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-sizes-attribute\n\t *\n\t * Most comments are copied in directly from the spec\n\t * (except for comments in parens).\n\t *\n\t * Grammar is:\n\t * = # [ , ]? | \n\t * = \n\t * = \n\t * http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#attr-img-sizes\n\t *\n\t * E.g. \"(max-width: 30em) 100vw, (max-width: 50em) 70vw, 100vw\"\n\t * or \"(min-width: 30em), calc(30vw - 15px)\" or just \"30vw\"\n\t *\n\t * Returns the first valid with a media condition that evaluates to true,\n\t * or \"100vw\" if all valid media conditions evaluate to false.\n\t *\n\t */\n\n\tfunction parseSizes(strValue) {\n\n\t\t// (Percentage CSS lengths are not allowed in this case, to avoid confusion:\n\t\t// https://html.spec.whatwg.org/multipage/embedded-content.html#valid-source-size-list\n\t\t// CSS allows a single optional plus or minus sign:\n\t\t// http://www.w3.org/TR/CSS2/syndata.html#numbers\n\t\t// CSS is ASCII case-insensitive:\n\t\t// http://www.w3.org/TR/CSS2/syndata.html#characters )\n\t\t// Spec allows exponential notation for type:\n\t\t// http://dev.w3.org/csswg/css-values/#numbers\n\t\tvar regexCssLengthWithUnits = /^(?:[+-]?[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?(?:ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmin|vmax|vw)$/i;\n\n\t\t// (This is a quick and lenient test. Because of optional unlimited-depth internal\n\t\t// grouping parens and strict spacing rules, this could get very complicated.)\n\t\tvar regexCssCalc = /^calc\\((?:[0-9a-z \\.\\+\\-\\*\\/\\(\\)]+)\\)$/i;\n\n\t\tvar i;\n\t\tvar unparsedSizesList;\n\t\tvar unparsedSizesListLength;\n\t\tvar unparsedSize;\n\t\tvar lastComponentValue;\n\t\tvar size;\n\n\t\t// UTILITY FUNCTIONS\n\n\t\t// (Toy CSS parser. The goals here are:\n\t\t// 1) expansive test coverage without the weight of a full CSS parser.\n\t\t// 2) Avoiding regex wherever convenient.\n\t\t// Quick tests: http://jsfiddle.net/gtntL4gr/3/\n\t\t// Returns an array of arrays.)\n\t\tfunction parseComponentValues(str) {\n\t\t\tvar chrctr;\n\t\t\tvar component = \"\";\n\t\t\tvar componentArray = [];\n\t\t\tvar listArray = [];\n\t\t\tvar parenDepth = 0;\n\t\t\tvar pos = 0;\n\t\t\tvar inComment = false;\n\n\t\t\tfunction pushComponent() {\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponentArray.push(component);\n\t\t\t\t\tcomponent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction pushComponentArray() {\n\t\t\t\tif (componentArray[0]) {\n\t\t\t\t\tlistArray.push(componentArray);\n\t\t\t\t\tcomponentArray = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// (Loop forwards from the beginning of the string.)\n\t\t\twhile (true) {\n\t\t\t\tchrctr = str.charAt(pos);\n\n\t\t\t\tif (chrctr === \"\") { // ( End of string reached.)\n\t\t\t\t\tpushComponent();\n\t\t\t\t\tpushComponentArray();\n\t\t\t\t\treturn listArray;\n\t\t\t\t} else if (inComment) {\n\t\t\t\t\tif ((chrctr === \"*\") && (str[pos + 1] === \"/\")) { // (At end of a comment.)\n\t\t\t\t\t\tinComment = false;\n\t\t\t\t\t\tpos += 2;\n\t\t\t\t\t\tpushComponent();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpos += 1; // (Skip all characters inside comments.)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} else if (isSpace(chrctr)) {\n\t\t\t\t\t// (If previous character in loop was also a space, or if\n\t\t\t\t\t// at the beginning of the string, do not add space char to\n\t\t\t\t\t// component.)\n\t\t\t\t\tif ( (str.charAt(pos - 1) && isSpace( str.charAt(pos - 1) ) ) || !component ) {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (parenDepth === 0) {\n\t\t\t\t\t\tpushComponent();\n\t\t\t\t\t\tpos +=1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// (Replace any space character with a plain space for legibility.)\n\t\t\t\t\t\tchrctr = \" \";\n\t\t\t\t\t}\n\t\t\t\t} else if (chrctr === \"(\") {\n\t\t\t\t\tparenDepth += 1;\n\t\t\t\t} else if (chrctr === \")\") {\n\t\t\t\t\tparenDepth -= 1;\n\t\t\t\t} else if (chrctr === \",\") {\n\t\t\t\t\tpushComponent();\n\t\t\t\t\tpushComponentArray();\n\t\t\t\t\tpos += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if ( (chrctr === \"/\") && (str.charAt(pos + 1) === \"*\") ) {\n\t\t\t\t\tinComment = true;\n\t\t\t\t\tpos += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcomponent = component + chrctr;\n\t\t\t\tpos += 1;\n\t\t\t}\n\t\t}\n\n\t\tfunction isValidNonNegativeSourceSizeValue(s) {\n\t\t\tif (regexCssLengthWithUnits.test(s) && (parseFloat(s) >= 0)) {return true;}\n\t\t\tif (regexCssCalc.test(s)) {return true;}\n\t\t\t// ( http://www.w3.org/TR/CSS2/syndata.html#numbers says:\n\t\t\t// \"-0 is equivalent to 0 and is not a negative number.\" which means that\n\t\t\t// unitless zero and unitless negative zero must be accepted as special cases.)\n\t\t\tif ((s === \"0\") || (s === \"-0\") || (s === \"+0\")) {return true;}\n\t\t\treturn false;\n\t\t}\n\n\t\t// When asked to parse a sizes attribute from an element, parse a\n\t\t// comma-separated list of component values from the value of the element's\n\t\t// sizes attribute (or the empty string, if the attribute is absent), and let\n\t\t// unparsed sizes list be the result.\n\t\t// http://dev.w3.org/csswg/css-syntax/#parse-comma-separated-list-of-component-values\n\n\t\tunparsedSizesList = parseComponentValues(strValue);\n\t\tunparsedSizesListLength = unparsedSizesList.length;\n\n\t\t// For each unparsed size in unparsed sizes list:\n\t\tfor (i = 0; i < unparsedSizesListLength; i++) {\n\t\t\tunparsedSize = unparsedSizesList[i];\n\n\t\t\t// 1. Remove all consecutive s from the end of unparsed size.\n\t\t\t// ( parseComponentValues() already omits spaces outside of parens. )\n\n\t\t\t// If unparsed size is now empty, that is a parse error; continue to the next\n\t\t\t// iteration of this algorithm.\n\t\t\t// ( parseComponentValues() won't push an empty array. )\n\n\t\t\t// 2. If the last component value in unparsed size is a valid non-negative\n\t\t\t// , let size be its value and remove the component value\n\t\t\t// from unparsed size. Any CSS function other than the calc() function is\n\t\t\t// invalid. Otherwise, there is a parse error; continue to the next iteration\n\t\t\t// of this algorithm.\n\t\t\t// http://dev.w3.org/csswg/css-syntax/#parse-component-value\n\t\t\tlastComponentValue = unparsedSize[unparsedSize.length - 1];\n\n\t\t\tif (isValidNonNegativeSourceSizeValue(lastComponentValue)) {\n\t\t\t\tsize = lastComponentValue;\n\t\t\t\tunparsedSize.pop();\n\t\t\t} else {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 3. Remove all consecutive s from the end of unparsed\n\t\t\t// size. If unparsed size is now empty, return size and exit this algorithm.\n\t\t\t// If this was not the last item in unparsed sizes list, that is a parse error.\n\t\t\tif (unparsedSize.length === 0) {\n\t\t\t\treturn size;\n\t\t\t}\n\n\t\t\t// 4. Parse the remaining component values in unparsed size as a\n\t\t\t// . If it does not parse correctly, or it does parse\n\t\t\t// correctly but the evaluates to false, continue to the\n\t\t\t// next iteration of this algorithm.\n\t\t\t// (Parsing all possible compound media conditions in JS is heavy, complicated,\n\t\t\t// and the payoff is unclear. Is there ever an situation where the\n\t\t\t// media condition parses incorrectly but still somehow evaluates to true?\n\t\t\t// Can we just rely on the browser/polyfill to do it?)\n\t\t\tunparsedSize = unparsedSize.join(\" \");\n\t\t\tif (!(pf.matchesMedia( unparsedSize ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 5. Return size and exit this algorithm.\n\t\t\treturn size;\n\t\t}\n\n\t\t// If the above algorithm exhausts unparsed sizes list without returning a\n\t\t// size value, return 100vw.\n\t\treturn \"100vw\";\n\t}\n\n\t// namespace\n\tpf.ns = (\"pf\" + new Date().getTime()).substr(0, 9);\n\n\t// srcset support test\n\tpf.supSrcset = \"srcset\" in image;\n\tpf.supSizes = \"sizes\" in image;\n\tpf.supPicture = !!window.HTMLPictureElement;\n\n\t// UC browser does claim to support srcset and picture, but not sizes,\n\t// this extended test reveals the browser does support nothing\n\tif (pf.supSrcset && pf.supPicture && !pf.supSizes) {\n\t\t(function(image2) {\n\t\t\timage.srcset = \"data:,a\";\n\t\t\timage2.src = \"data:,a\";\n\t\t\tpf.supSrcset = image.complete === image2.complete;\n\t\t\tpf.supPicture = pf.supSrcset && pf.supPicture;\n\t\t})(document.createElement(\"img\"));\n\t}\n\n\t// Safari9 has basic support for sizes, but does't expose the `sizes` idl attribute\n\tif (pf.supSrcset && !pf.supSizes) {\n\n\t\t(function() {\n\t\t\tvar width2 = \"data:image/gif;base64,R0lGODlhAgABAPAAAP///wAAACH5BAAAAAAALAAAAAACAAEAAAICBAoAOw==\";\n\t\t\tvar width1 = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\t\t\tvar img = document.createElement(\"img\");\n\t\t\tvar test = function() {\n\t\t\t\tvar width = img.width;\n\n\t\t\t\tif (width === 2) {\n\t\t\t\t\tpf.supSizes = true;\n\t\t\t\t}\n\n\t\t\t\talwaysCheckWDescriptor = pf.supSrcset && !pf.supSizes;\n\n\t\t\t\tisSupportTestReady = true;\n\t\t\t\t// force async\n\t\t\t\tsetTimeout(picturefill);\n\t\t\t};\n\n\t\t\timg.onload = test;\n\t\t\timg.onerror = test;\n\t\t\timg.setAttribute(\"sizes\", \"9px\");\n\n\t\t\timg.srcset = width1 + \" 1w,\" + width2 + \" 9w\";\n\t\t\timg.src = width1;\n\t\t})();\n\n\t} else {\n\t\tisSupportTestReady = true;\n\t}\n\n\t// using pf.qsa instead of dom traversing does scale much better,\n\t// especially on sites mixing responsive and non-responsive images\n\tpf.selShort = \"picture>img,img[srcset]\";\n\tpf.sel = pf.selShort;\n\tpf.cfg = cfg;\n\n\t/**\n\t * Shortcut property for `devicePixelRatio` ( for easy overriding in tests )\n\t */\n\tpf.DPR = (DPR || 1 );\n\tpf.u = units;\n\n\t// container of supported mime types that one might need to qualify before using\n\tpf.types = types;\n\n\tpf.setSize = noop;\n\n\t/**\n\t * Gets a string and returns the absolute URL\n\t * @param src\n\t * @returns {String} absolute URL\n\t */\n\n\tpf.makeUrl = memoize(function(src) {\n\t\tanchor.href = src;\n\t\treturn anchor.href;\n\t});\n\n\t/**\n\t * Gets a DOM element or document and a selctor and returns the found matches\n\t * Can be extended with jQuery/Sizzle for IE7 support\n\t * @param context\n\t * @param sel\n\t * @returns {NodeList|Array}\n\t */\n\tpf.qsa = function(context, sel) {\n\t\treturn ( \"querySelector\" in context ) ? context.querySelectorAll(sel) : [];\n\t};\n\n\t/**\n\t * Shortcut method for matchMedia ( for easy overriding in tests )\n\t * wether native or pf.mMQ is used will be decided lazy on first call\n\t * @returns {boolean}\n\t */\n\tpf.matchesMedia = function() {\n\t\tif ( window.matchMedia && (matchMedia( \"(min-width: 0.1em)\" ) || {}).matches ) {\n\t\t\tpf.matchesMedia = function( media ) {\n\t\t\t\treturn !media || ( matchMedia( media ).matches );\n\t\t\t};\n\t\t} else {\n\t\t\tpf.matchesMedia = pf.mMQ;\n\t\t}\n\n\t\treturn pf.matchesMedia.apply( this, arguments );\n\t};\n\n\t/**\n\t * A simplified matchMedia implementation for IE8 and IE9\n\t * handles only min-width/max-width with px or em values\n\t * @param media\n\t * @returns {boolean}\n\t */\n\tpf.mMQ = function( media ) {\n\t\treturn media ? evalCSS(media) : true;\n\t};\n\n\t/**\n\t * Returns the calculated length in css pixel from the given sourceSizeValue\n\t * http://dev.w3.org/csswg/css-values-3/#length-value\n\t * intended Spec mismatches:\n\t * * Does not check for invalid use of CSS functions\n\t * * Does handle a computed length of 0 the same as a negative and therefore invalid value\n\t * @param sourceSizeValue\n\t * @returns {Number}\n\t */\n\tpf.calcLength = function( sourceSizeValue ) {\n\n\t\tvar value = evalCSS(sourceSizeValue, true) || false;\n\t\tif (value < 0) {\n\t\t\tvalue = false;\n\t\t}\n\n\t\treturn value;\n\t};\n\n\t/**\n\t * Takes a type string and checks if its supported\n\t */\n\n\tpf.supportsType = function( type ) {\n\t\treturn ( type ) ? types[ type ] : true;\n\t};\n\n\t/**\n\t * Parses a sourceSize into mediaCondition (media) and sourceSizeValue (length)\n\t * @param sourceSizeStr\n\t * @returns {*}\n\t */\n\tpf.parseSize = memoize(function( sourceSizeStr ) {\n\t\tvar match = ( sourceSizeStr || \"\" ).match(regSize);\n\t\treturn {\n\t\t\tmedia: match && match[1],\n\t\t\tlength: match && match[2]\n\t\t};\n\t});\n\n\tpf.parseSet = function( set ) {\n\t\tif ( !set.cands ) {\n\t\t\tset.cands = parseSrcset(set.srcset, set);\n\t\t}\n\t\treturn set.cands;\n\t};\n\n\t/**\n\t * returns 1em in css px for html/body default size\n\t * function taken from respondjs\n\t * @returns {*|number}\n\t */\n\tpf.getEmValue = function() {\n\t\tvar body;\n\t\tif ( !eminpx && (body = document.body) ) {\n\t\t\tvar div = document.createElement( \"div\" ),\n\t\t\t\toriginalHTMLCSS = docElem.style.cssText,\n\t\t\t\toriginalBodyCSS = body.style.cssText;\n\n\t\t\tdiv.style.cssText = baseStyle;\n\n\t\t\t// 1em in a media query is the value of the default font size of the browser\n\t\t\t// reset docElem and body to ensure the correct value is returned\n\t\t\tdocElem.style.cssText = fsCss;\n\t\t\tbody.style.cssText = fsCss;\n\n\t\t\tbody.appendChild( div );\n\t\t\teminpx = div.offsetWidth;\n\t\t\tbody.removeChild( div );\n\n\t\t\t//also update eminpx before returning\n\t\t\teminpx = parseFloat( eminpx, 10 );\n\n\t\t\t// restore the original values\n\t\t\tdocElem.style.cssText = originalHTMLCSS;\n\t\t\tbody.style.cssText = originalBodyCSS;\n\n\t\t}\n\t\treturn eminpx || 16;\n\t};\n\n\t/**\n\t * Takes a string of sizes and returns the width in pixels as a number\n\t */\n\tpf.calcListLength = function( sourceSizeListStr ) {\n\t\t// Split up source size list, ie ( max-width: 30em ) 100%, ( max-width: 50em ) 50%, 33%\n\t\t//\n\t\t// or (min-width:30em) calc(30% - 15px)\n\t\tif ( !(sourceSizeListStr in sizeLengthCache) || cfg.uT ) {\n\t\t\tvar winningLength = pf.calcLength( parseSizes( sourceSizeListStr ) );\n\n\t\t\tsizeLengthCache[ sourceSizeListStr ] = !winningLength ? units.width : winningLength;\n\t\t}\n\n\t\treturn sizeLengthCache[ sourceSizeListStr ];\n\t};\n\n\t/**\n\t * Takes a candidate object with a srcset property in the form of url/\n\t * ex. \"images/pic-medium.png 1x, images/pic-medium-2x.png 2x\" or\n\t * \"images/pic-medium.png 400w, images/pic-medium-2x.png 800w\" or\n\t * \"images/pic-small.png\"\n\t * Get an array of image candidates in the form of\n\t * {url: \"/foo/bar.png\", resolution: 1}\n\t * where resolution is http://dev.w3.org/csswg/css-values-3/#resolution-value\n\t * If sizes is specified, res is calculated\n\t */\n\tpf.setRes = function( set ) {\n\t\tvar candidates;\n\t\tif ( set ) {\n\n\t\t\tcandidates = pf.parseSet( set );\n\n\t\t\tfor ( var i = 0, len = candidates.length; i < len; i++ ) {\n\t\t\t\tsetResolution( candidates[ i ], set.sizes );\n\t\t\t}\n\t\t}\n\t\treturn candidates;\n\t};\n\n\tpf.setRes.res = setResolution;\n\n\tpf.applySetCandidate = function( candidates, img ) {\n\t\tif ( !candidates.length ) {return;}\n\t\tvar candidate,\n\t\t\ti,\n\t\t\tj,\n\t\t\tlength,\n\t\t\tbestCandidate,\n\t\t\tcurSrc,\n\t\t\tcurCan,\n\t\t\tcandidateSrc,\n\t\t\tabortCurSrc;\n\n\t\tvar imageData = img[ pf.ns ];\n\t\tvar dpr = pf.DPR;\n\n\t\tcurSrc = imageData.curSrc || img[curSrcProp];\n\n\t\tcurCan = imageData.curCan || setSrcToCur(img, curSrc, candidates[0].set);\n\n\t\t// if we have a current source, we might either become lazy or give this source some advantage\n\t\tif ( curCan && curCan.set === candidates[ 0 ].set ) {\n\n\t\t\t// if browser can abort image request and the image has a higher pixel density than needed\n\t\t\t// and this image isn't downloaded yet, we skip next part and try to save bandwidth\n\t\t\tabortCurSrc = (supportAbort && !img.complete && curCan.res - 0.1 > dpr);\n\n\t\t\tif ( !abortCurSrc ) {\n\t\t\t\tcurCan.cached = true;\n\n\t\t\t\t// if current candidate is \"best\", \"better\" or \"okay\",\n\t\t\t\t// set it to bestCandidate\n\t\t\t\tif ( curCan.res >= dpr ) {\n\t\t\t\t\tbestCandidate = curCan;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !bestCandidate ) {\n\n\t\t\tcandidates.sort( ascendingSort );\n\n\t\t\tlength = candidates.length;\n\t\t\tbestCandidate = candidates[ length - 1 ];\n\n\t\t\tfor ( i = 0; i < length; i++ ) {\n\t\t\t\tcandidate = candidates[ i ];\n\t\t\t\tif ( candidate.res >= dpr ) {\n\t\t\t\t\tj = i - 1;\n\n\t\t\t\t\t// we have found the perfect candidate,\n\t\t\t\t\t// but let's improve this a little bit with some assumptions ;-)\n\t\t\t\t\tif (candidates[ j ] &&\n\t\t\t\t\t\t(abortCurSrc || curSrc !== pf.makeUrl( candidate.url )) &&\n\t\t\t\t\t\tchooseLowRes(candidates[ j ].res, candidate.res, dpr, candidates[ j ].cached)) {\n\n\t\t\t\t\t\tbestCandidate = candidates[ j ];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbestCandidate = candidate;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( bestCandidate ) {\n\n\t\t\tcandidateSrc = pf.makeUrl( bestCandidate.url );\n\n\t\t\timageData.curSrc = candidateSrc;\n\t\t\timageData.curCan = bestCandidate;\n\n\t\t\tif ( candidateSrc !== curSrc ) {\n\t\t\t\tpf.setSrc( img, bestCandidate );\n\t\t\t}\n\t\t\tpf.setSize( img );\n\t\t}\n\t};\n\n\tpf.setSrc = function( img, bestCandidate ) {\n\t\tvar origWidth;\n\t\timg.src = bestCandidate.url;\n\n\t\t// although this is a specific Safari issue, we don't want to take too much different code paths\n\t\tif ( bestCandidate.set.type === \"image/svg+xml\" ) {\n\t\t\torigWidth = img.style.width;\n\t\t\timg.style.width = (img.offsetWidth + 1) + \"px\";\n\n\t\t\t// next line only should trigger a repaint\n\t\t\t// if... is only done to trick dead code removal\n\t\t\tif ( img.offsetWidth + 1 ) {\n\t\t\t\timg.style.width = origWidth;\n\t\t\t}\n\t\t}\n\t};\n\n\tpf.getSet = function( img ) {\n\t\tvar i, set, supportsType;\n\t\tvar match = false;\n\t\tvar sets = img [ pf.ns ].sets;\n\n\t\tfor ( i = 0; i < sets.length && !match; i++ ) {\n\t\t\tset = sets[i];\n\n\t\t\tif ( !set.srcset || !pf.matchesMedia( set.media ) || !(supportsType = pf.supportsType( set.type )) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( supportsType === \"pending\" ) {\n\t\t\t\tset = supportsType;\n\t\t\t}\n\n\t\t\tmatch = set;\n\t\t\tbreak;\n\t\t}\n\n\t\treturn match;\n\t};\n\n\tpf.parseSets = function( element, parent, options ) {\n\t\tvar srcsetAttribute, imageSet, isWDescripor, srcsetParsed;\n\n\t\tvar hasPicture = parent && parent.nodeName.toUpperCase() === \"PICTURE\";\n\t\tvar imageData = element[ pf.ns ];\n\n\t\tif ( imageData.src === undefined || options.src ) {\n\t\t\timageData.src = getImgAttr.call( element, \"src\" );\n\t\t\tif ( imageData.src ) {\n\t\t\t\tsetImgAttr.call( element, srcAttr, imageData.src );\n\t\t\t} else {\n\t\t\t\tremoveImgAttr.call( element, srcAttr );\n\t\t\t}\n\t\t}\n\n\t\tif ( imageData.srcset === undefined || options.srcset || !pf.supSrcset || element.srcset ) {\n\t\t\tsrcsetAttribute = getImgAttr.call( element, \"srcset\" );\n\t\t\timageData.srcset = srcsetAttribute;\n\t\t\tsrcsetParsed = true;\n\t\t}\n\n\t\timageData.sets = [];\n\n\t\tif ( hasPicture ) {\n\t\t\timageData.pic = true;\n\t\t\tgetAllSourceElements( parent, imageData.sets );\n\t\t}\n\n\t\tif ( imageData.srcset ) {\n\t\t\timageSet = {\n\t\t\t\tsrcset: imageData.srcset,\n\t\t\t\tsizes: getImgAttr.call( element, \"sizes\" )\n\t\t\t};\n\n\t\t\timageData.sets.push( imageSet );\n\n\t\t\tisWDescripor = (alwaysCheckWDescriptor || imageData.src) && regWDesc.test(imageData.srcset || \"\");\n\n\t\t\t// add normal src as candidate, if source has no w descriptor\n\t\t\tif ( !isWDescripor && imageData.src && !getCandidateForSrc(imageData.src, imageSet) && !imageSet.has1x ) {\n\t\t\t\timageSet.srcset += \", \" + imageData.src;\n\t\t\t\timageSet.cands.push({\n\t\t\t\t\turl: imageData.src,\n\t\t\t\t\td: 1,\n\t\t\t\t\tset: imageSet\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else if ( imageData.src ) {\n\t\t\timageData.sets.push( {\n\t\t\t\tsrcset: imageData.src,\n\t\t\t\tsizes: null\n\t\t\t} );\n\t\t}\n\n\t\timageData.curCan = null;\n\t\timageData.curSrc = undefined;\n\n\t\t// if img has picture or the srcset was removed or has a srcset and does not support srcset at all\n\t\t// or has a w descriptor (and does not support sizes) set support to false to evaluate\n\t\timageData.supported = !( hasPicture || ( imageSet && !pf.supSrcset ) || (isWDescripor && !pf.supSizes) );\n\n\t\tif ( srcsetParsed && pf.supSrcset && !imageData.supported ) {\n\t\t\tif ( srcsetAttribute ) {\n\t\t\t\tsetImgAttr.call( element, srcsetAttr, srcsetAttribute );\n\t\t\t\telement.srcset = \"\";\n\t\t\t} else {\n\t\t\t\tremoveImgAttr.call( element, srcsetAttr );\n\t\t\t}\n\t\t}\n\n\t\tif (imageData.supported && !imageData.srcset && ((!imageData.src && element.src) || element.src !== pf.makeUrl(imageData.src))) {\n\t\t\tif (imageData.src === null) {\n\t\t\t\telement.removeAttribute(\"src\");\n\t\t\t} else {\n\t\t\t\telement.src = imageData.src;\n\t\t\t}\n\t\t}\n\n\t\timageData.parsed = true;\n\t};\n\n\tpf.fillImg = function(element, options) {\n\t\tvar imageData;\n\t\tvar extreme = options.reselect || options.reevaluate;\n\n\t\t// expando for caching data on the img\n\t\tif ( !element[ pf.ns ] ) {\n\t\t\telement[ pf.ns ] = {};\n\t\t}\n\n\t\timageData = element[ pf.ns ];\n\n\t\t// if the element has already been evaluated, skip it\n\t\t// unless `options.reevaluate` is set to true ( this, for example,\n\t\t// is set to true when running `picturefill` on `resize` ).\n\t\tif ( !extreme && imageData.evaled === evalId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !imageData.parsed || options.reevaluate ) {\n\t\t\tpf.parseSets( element, element.parentNode, options );\n\t\t}\n\n\t\tif ( !imageData.supported ) {\n\t\t\tapplyBestCandidate( element );\n\t\t} else {\n\t\t\timageData.evaled = evalId;\n\t\t}\n\t};\n\n\tpf.setupRun = function() {\n\t\tif ( !alreadyRun || isVwDirty || (DPR !== window.devicePixelRatio) ) {\n\t\t\tupdateMetrics();\n\t\t}\n\t};\n\n\t// If picture is supported, well, that's awesome.\n\tif ( pf.supPicture ) {\n\t\tpicturefill = noop;\n\t\tpf.fillImg = noop;\n\t} else {\n\n\t\t // Set up picture polyfill by polling the document\n\t\t(function() {\n\t\t\tvar isDomReady;\n\t\t\tvar regReady = window.attachEvent ? /d$|^c/ : /d$|^c|^i/;\n\n\t\t\tvar run = function() {\n\t\t\t\tvar readyState = document.readyState || \"\";\n\n\t\t\t\ttimerId = setTimeout(run, readyState === \"loading\" ? 200 : 999);\n\t\t\t\tif ( document.body ) {\n\t\t\t\t\tpf.fillImgs();\n\t\t\t\t\tisDomReady = isDomReady || regReady.test(readyState);\n\t\t\t\t\tif ( isDomReady ) {\n\t\t\t\t\t\tclearTimeout( timerId );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar timerId = setTimeout(run, document.body ? 9 : 99);\n\n\t\t\t// Also attach picturefill on resize and readystatechange\n\t\t\t// http://modernjavascript.blogspot.com/2013/08/building-better-debounce.html\n\t\t\tvar debounce = function(func, wait) {\n\t\t\t\tvar timeout, timestamp;\n\t\t\t\tvar later = function() {\n\t\t\t\t\tvar last = (new Date()) - timestamp;\n\n\t\t\t\t\tif (last < wait) {\n\t\t\t\t\t\ttimeout = setTimeout(later, wait - last);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimeout = null;\n\t\t\t\t\t\tfunc();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\treturn function() {\n\t\t\t\t\ttimestamp = new Date();\n\n\t\t\t\t\tif (!timeout) {\n\t\t\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t\tvar lastClientWidth = docElem.clientHeight;\n\t\t\tvar onResize = function() {\n\t\t\t\tisVwDirty = Math.max(window.innerWidth || 0, docElem.clientWidth) !== units.width || docElem.clientHeight !== lastClientWidth;\n\t\t\t\tlastClientWidth = docElem.clientHeight;\n\t\t\t\tif ( isVwDirty ) {\n\t\t\t\t\tpf.fillImgs();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ton( window, \"resize\", debounce(onResize, 99 ) );\n\t\t\ton( document, \"readystatechange\", run );\n\t\t})();\n\t}\n\n\tpf.picturefill = picturefill;\n\t//use this internally for easy monkey patching/performance testing\n\tpf.fillImgs = picturefill;\n\tpf.teardownRun = noop;\n\n\t/* expose methods for testing */\n\tpicturefill._ = pf;\n\n\twindow.picturefillCFG = {\n\t\tpf: pf,\n\t\tpush: function(args) {\n\t\t\tvar name = args.shift();\n\t\t\tif (typeof pf[name] === \"function\") {\n\t\t\t\tpf[name].apply(pf, args);\n\t\t\t} else {\n\t\t\t\tcfg[name] = args[0];\n\t\t\t\tif (alreadyRun) {\n\t\t\t\t\tpf.fillImgs( { reselect: true } );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\twhile (setOptions && setOptions.length) {\n\t\twindow.picturefillCFG.push(setOptions.shift());\n\t}\n\n\t/* expose picturefill */\n\twindow.picturefill = picturefill;\n\n\t/* expose picturefill */\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// CommonJS, just export\n\t\tmodule.exports = picturefill;\n\t} else if ( typeof define === \"function\" && define.amd ) {\n\t\t// AMD support\n\t\tdefine( \"picturefill\", function() { return picturefill; } );\n\t}\n\n\t// IE8 evals this sync, so it must be the last thing we do\n\tif ( !pf.supPicture ) {\n\t\ttypes[ \"image/webp\" ] = detectTypeSupport(\"image/webp\", \"data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==\" );\n\t}\n\n} )( window, document );\n","// get successful control from form and assemble into object\n// http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2\n\n// types which indicate a submit action and are not successful controls\n// these will be ignored\nvar k_r_submitter = /^(?:submit|button|image|reset|file)$/i;\n\n// node names which could be successful controls\nvar k_r_success_contrls = /^(?:input|select|textarea|keygen)/i;\n\n// Matches bracket notation.\nvar brackets = /(\\[[^\\[\\]]*\\])/g;\n\n// serializes form fields\n// @param form MUST be an HTMLForm element\n// @param options is an optional argument to configure the serialization. Default output\n// with no options specified is a url encoded string\n// - hash: [true | false] Configure the output type. If true, the output will\n// be a js object.\n// - serializer: [function] Optional serializer function to override the default one.\n// The function takes 3 arguments (result, key, value) and should return new result\n// hash and url encoded str serializers are provided with this module\n// - disabled: [true | false]. If true serialize disabled fields.\n// - empty: [true | false]. If true serialize empty fields\nfunction serialize(form, options) {\n if (typeof options != 'object') {\n options = { hash: !!options };\n }\n else if (options.hash === undefined) {\n options.hash = true;\n }\n\n var result = (options.hash) ? {} : '';\n var serializer = options.serializer || ((options.hash) ? hash_serializer : str_serialize);\n\n var elements = form && form.elements ? form.elements : [];\n\n //Object store each radio and set if it's empty or not\n var radio_store = Object.create(null);\n\n for (var i=0 ; i\r\n\t
\r\n\r\n\t\r\n\t
\r\n\r\n\t\t\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\r\n\t\t\r\n\t\t
\r\n\r\n\t\t\t
\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\r\n\t\t\t\r\n\r\n\t\t\t\r\n\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t
\r\n\r\n\t
\r\n\r\n`;\r\n\r\nexport default pswpMarkup;","import PhotoSwipe from 'photoswipe';\r\nimport PhotoSwipeUI_Default from 'photoswipe/dist/photoswipe-ui-default.js';\r\nimport pswpMarkup from './photoswipe-markup';\r\n\r\nclass ContentModuleGallery {\r\n\tconstructor() {\r\n\t\tthis._galleries = Array.from(document.querySelectorAll('[data-ncomponent=\"gallery\"]'));\r\n\t\tthis._pswpEl = document.querySelector('.pswp');\r\n\t\tthis._galleryToggles = Array.from(document.querySelectorAll('[data-ntoggle=\"gallery\"]'));\r\n\r\n\t\tif (this._galleries.length > 0 && !this._pswpEl) {\r\n\t\t\tdocument.body.insertAdjacentHTML('beforeend', pswpMarkup);\r\n\t\t\tthis._pswpEl = document.querySelector('.pswp');\r\n\t\t}\r\n\r\n\t\tif (this._galleries.length > 0 && this._pswpEl) {\r\n\t\t\tthis._gallery = null;\r\n\t\t\tthis.init();\r\n\t\t}\r\n\t}\r\n\r\n\tinit() {\r\n\t\tthis._galleries.forEach(gallery => {\r\n\t\t\tconst images = Array.from(gallery.querySelectorAll('[data-nelement=\"gallery-img\"]'));\r\n\r\n\t\t\t// Create a slide object from this gallery image element\r\n\t\t\tconst slides = images.map(img => ({\r\n\t\t\t\tsrc: img.dataset.srcLrg,\r\n\t\t\t\tmsrc: img.dataset.srcMed,\r\n\t\t\t\tw: img.dataset.size.split('x')[0],\r\n\t\t\t\th: img.dataset.size.split('x')[1],\r\n\t\t\t}));\r\n\r\n\t\t\timages.forEach(img => {\r\n\t\t\t\t// Add a click event listener to this gallery image element\r\n\t\t\t\timg.addEventListener('click', e => {\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tconst options = {\r\n\t\t\t\t\t\tbgOpacity: 0.9,\r\n\t\t\t\t\t\tshowHideOpacity: true,\r\n\t\t\t\t\t\tindex: images.indexOf(img),\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tthis._gallery = new PhotoSwipe(this._pswpEl, PhotoSwipeUI_Default, slides, options);\r\n\r\n\t\t\t\t\tthis._gallery.init();\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t// Register events on gallery open toggles\r\n\t\tthis._galleryToggles.forEach(toggle => {\r\n\t\t\ttoggle.addEventListener('click', e => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tconsole.log(toggle.parentElement);\r\n\t\t\t\ttoggle.parentElement.parentElement.querySelector('[data-nelement=\"gallery-img\"]').click();\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport default new ContentModuleGallery();\r\n","class Sharer {\r\n constructor() {\r\n this._shareLinks = Array.from(document.querySelectorAll('[data-ui-component=\"sharer\"]'));\r\n\r\n if (this._shareLinks.length > 0) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n this._shareLinks.forEach((shareLink) => {\r\n // Add the native share links if the browser supports them\r\n // and hide the href share links\r\n if (navigator.share) {\r\n shareLink.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n navigator.share({\r\n title: shareLink.dataset.uiTitle,\r\n text: shareLink.dataset.uiDesc,\r\n url: shareLink.dataset.uiUrl,\r\n })\r\n .then(() => console.log('Successful share'))\r\n .catch((error) => console.log('Error sharing', error));\r\n });\r\n } else {\r\n shareLink.classList.add('hide');\r\n const nextSibling = shareLink.nextElementSibling;\r\n if (nextSibling.classList.contains('share-links')) {\r\n nextSibling.classList.remove('hide');\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default new Sharer();\r\n","var win = window;\n\nexport var raf = win.requestAnimationFrame\n || win.webkitRequestAnimationFrame\n || win.mozRequestAnimationFrame\n || win.msRequestAnimationFrame\n || function(cb) { return setTimeout(cb, 16); };\n","var win = window;\n\nexport var caf = win.cancelAnimationFrame\n || win.mozCancelAnimationFrame\n || function(id){ clearTimeout(id); };\n","export function extend() {\n var obj, name, copy,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length;\n\n for (; i < length; i++) {\n if ((obj = arguments[i]) !== null) {\n for (name in obj) {\n copy = obj[name];\n\n if (target === copy) {\n continue;\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n}","export function checkStorageValue (value) {\n return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}","export function setLocalStorage(storage, key, value, access) {\n if (access) {\n try { storage.setItem(key, value); } catch (e) {}\n }\n return value;\n}","export function getBody () {\n var doc = document,\n body = doc.body;\n\n if (!body) {\n body = doc.createElement('body');\n body.fake = true;\n }\n\n return body;\n}","export var docElement = document.documentElement;","import { docElement } from './docElement.js';\n\nexport function setFakeBody (body) {\n var docOverflow = '';\n if (body.fake) {\n docOverflow = docElement.style.overflow;\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n return docOverflow;\n}","import { docElement } from './docElement.js';\n\nexport function resetFakeBody (body, docOverflow) {\n if (body.fake) {\n body.remove();\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n // eslint-disable-next-line\n docElement.offsetHeight;\n }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function addCSSRule(sheet, selector, rules, index) {\n // return raf(function() {\n 'insertRule' in sheet ?\n sheet.insertRule(selector + '{' + rules + '}', index) :\n sheet.addRule(selector, rules, index);\n // });\n}","export function getCssRulesLength(sheet) {\n var rule = ('insertRule' in sheet) ? sheet.cssRules : sheet.rules;\n return rule.length;\n}","// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nexport function forEach (arr, callback, scope) {\n for (var i = 0, l = arr.length; i < l; i++) {\n callback.call(scope, arr[i], i);\n }\n}","export var classListSupport = 'classList' in document.createElement('_');","import { classListSupport } from './classListSupport.js';\n\nvar hasClass = classListSupport ?\n function (el, str) { return el.classList.contains(str); } :\n function (el, str) { return el.className.indexOf(str) >= 0; };\n\nexport { classListSupport, hasClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar addClass = classListSupport ?\n function (el, str) {\n if (!hasClass(el, str)) { el.classList.add(str); }\n } :\n function (el, str) {\n if (!hasClass(el, str)) { el.className += ' ' + str; }\n };\n\nexport { addClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar removeClass = classListSupport ?\n function (el, str) {\n if (hasClass(el, str)) { el.classList.remove(str); }\n } :\n function (el, str) {\n if (hasClass(el, str)) { el.className = el.className.replace(str, ''); }\n };\n\nexport { removeClass };","export function hasAttr(el, attr) {\n return el.hasAttribute(attr);\n}","export function getAttr(el, attr) {\n return el.getAttribute(attr);\n}","export function isNodeList(el) {\n // Only NodeList has the \"item()\" function\n return typeof el.item !== \"undefined\"; \n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function setAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n if (Object.prototype.toString.call(attrs) !== '[object Object]') { return; }\n\n for (var i = els.length; i--;) {\n for(var key in attrs) {\n els[i].setAttribute(key, attrs[key]);\n }\n }\n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function removeAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n attrs = (attrs instanceof Array) ? attrs : [attrs];\n\n var attrLength = attrs.length;\n for (var i = els.length; i--;) {\n for (var j = attrLength; j--;) {\n els[i].removeAttribute(attrs[j]);\n }\n }\n}","export function arrayFromNodeList (nl) {\n var arr = [];\n for (var i = 0, l = nl.length; i < l; i++) {\n arr.push(nl[i]);\n }\n return arr;\n}","export function hideElement(el, forceHide) {\n if (el.style.display !== 'none') { el.style.display = 'none'; }\n}","export function showElement(el, forceHide) {\n if (el.style.display === 'none') { el.style.display = ''; }\n}","export function isVisible(el) {\n return window.getComputedStyle(el).display !== 'none';\n}","export function whichProperty(props){\n if (typeof props === 'string') {\n var arr = [props],\n Props = props.charAt(0).toUpperCase() + props.substr(1),\n prefixes = ['Webkit', 'Moz', 'ms', 'O'];\n \n prefixes.forEach(function(prefix) {\n if (prefix !== 'ms' || props === 'transform') {\n arr.push(prefix + Props);\n }\n });\n\n props = arr;\n }\n\n var el = document.createElement('fakeelement'),\n len = props.length;\n for(var i = 0; i < props.length; i++){\n var prop = props[i];\n if( el.style[prop] !== undefined ){ return prop; }\n }\n\n return false; // explicit for ie9-\n}\n","// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nexport function getEndProperty(propIn, propOut) {\n var endProp = false;\n if (/^Webkit/.test(propIn)) {\n endProp = 'webkit' + propOut + 'End';\n } else if (/^O/.test(propIn)) {\n endProp = 'o' + propOut + 'End';\n } else if (propIn) {\n endProp = propOut.toLowerCase() + 'end';\n }\n return endProp;\n}","// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n} catch (e) {}\nexport var passiveOption = supportsPassive ? { passive: true } : false;","import { passiveOption } from './passiveOption.js';\n\nexport function addEvents(el, obj, preventScrolling) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\n el.addEventListener(prop, obj[prop], option);\n }\n}","import { passiveOption } from './passiveOption.js';\n\nexport function removeEvents(el, obj) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\n el.removeEventListener(prop, obj[prop], option);\n }\n}","export function Events() {\n return {\n topics: {},\n on: function (eventName, fn) {\n this.topics[eventName] = this.topics[eventName] || [];\n this.topics[eventName].push(fn);\n },\n off: function(eventName, fn) {\n if (this.topics[eventName]) {\n for (var i = 0; i < this.topics[eventName].length; i++) {\n if (this.topics[eventName][i] === fn) {\n this.topics[eventName].splice(i, 1);\n break;\n }\n }\n }\n },\n emit: function (eventName, data) {\n data.type = eventName;\n if (this.topics[eventName]) {\n this.topics[eventName].forEach(function(fn) {\n fn(data, eventName);\n });\n }\n }\n };\n};","import './helpers/Object.keys';\nimport './helpers/childNode.remove';\nimport { raf } from './helpers/raf.js';\nimport { caf } from './helpers/caf.js';\nimport { extend } from './helpers/extend.js';\nimport { checkStorageValue } from './helpers/checkStorageValue.js';\nimport { setLocalStorage } from './helpers/setLocalStorage.js';\nimport { getSlideId } from './helpers/getSlideId.js';\nimport { calc } from './helpers/calc.js';\nimport { percentageLayout } from './helpers/percentageLayout.js';\nimport { mediaquerySupport } from './helpers/mediaquerySupport.js';\nimport { createStyleSheet } from './helpers/createStyleSheet.js';\nimport { addCSSRule } from './helpers/addCSSRule.js';\nimport { removeCSSRule } from './helpers/removeCSSRule.js';\nimport { getCssRulesLength } from './helpers/getCssRulesLength.js';\nimport { toDegree } from './helpers/toDegree.js';\nimport { getTouchDirection } from './helpers/getTouchDirection.js';\nimport { forEach } from './helpers/forEach.js';\nimport { hasClass } from './helpers/hasClass.js';\nimport { addClass } from './helpers/addClass.js';\nimport { removeClass } from './helpers/removeClass.js';\nimport { hasAttr } from './helpers/hasAttr.js';\nimport { getAttr } from './helpers/getAttr.js';\nimport { setAttrs } from './helpers/setAttrs.js';\nimport { removeAttrs } from './helpers/removeAttrs.js';\nimport { arrayFromNodeList } from './helpers/arrayFromNodeList.js';\nimport { hideElement } from './helpers/hideElement.js';\nimport { showElement } from './helpers/showElement.js';\nimport { isVisible } from './helpers/isVisible.js';\nimport { whichProperty } from './helpers/whichProperty.js';\nimport { has3DTransforms } from './helpers/has3DTransforms.js';\nimport { getEndProperty } from './helpers/getEndProperty.js';\nimport { addEvents } from './helpers/addEvents.js';\nimport { removeEvents } from './helpers/removeEvents.js';\nimport { Events } from './helpers/events.js';\nimport { jsTransform } from './helpers/jsTransform.js';\n\nexport var tns = function(options) {\n options = extend({\n container: '.slider',\n mode: 'carousel',\n axis: 'horizontal',\n items: 1,\n gutter: 0,\n edgePadding: 0,\n fixedWidth: false,\n autoWidth: false,\n viewportMax: false,\n slideBy: 1,\n center: false,\n controls: true,\n controlsPosition: 'top',\n controlsText: ['prev', 'next'],\n controlsContainer: false,\n prevButton: false,\n nextButton: false,\n nav: true,\n navPosition: 'top',\n navContainer: false,\n navAsThumbnails: false,\n arrowKeys: false,\n speed: 300,\n autoplay: false,\n autoplayPosition: 'top',\n autoplayTimeout: 5000,\n autoplayDirection: 'forward',\n autoplayText: ['start', 'stop'],\n autoplayHoverPause: false,\n autoplayButton: false,\n autoplayButtonOutput: true,\n autoplayResetOnVisibility: true,\n animateIn: 'tns-fadeIn',\n animateOut: 'tns-fadeOut',\n animateNormal: 'tns-normal',\n animateDelay: false,\n loop: true,\n rewind: false,\n autoHeight: false,\n responsive: false,\n lazyload: false,\n lazyloadSelector: '.tns-lazy-img',\n touch: true,\n mouseDrag: false,\n swipeAngle: 15,\n nested: false,\n preventActionWhenRunning: false,\n preventScrollOnTouch: false,\n freezable: true,\n onInit: false,\n useLocalStorage: true\n }, options || {});\n \n var doc = document,\n win = window,\n KEYS = {\n ENTER: 13,\n SPACE: 32,\n LEFT: 37,\n RIGHT: 39\n },\n tnsStorage = {},\n localStorageAccess = options.useLocalStorage;\n\n if (localStorageAccess) {\n // check browser version and local storage access\n var browserInfo = navigator.userAgent;\n var uid = new Date;\n\n try {\n tnsStorage = win.localStorage;\n if (tnsStorage) {\n tnsStorage.setItem(uid, uid);\n localStorageAccess = tnsStorage.getItem(uid) == uid;\n tnsStorage.removeItem(uid);\n } else {\n localStorageAccess = false;\n }\n if (!localStorageAccess) { tnsStorage = {}; }\n } catch(e) {\n localStorageAccess = false;\n }\n\n if (localStorageAccess) {\n // remove storage when browser version changes\n if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\n ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function(item) { tnsStorage.removeItem(item); });\n }\n // update browserInfo\n localStorage['tnsApp'] = browserInfo;\n }\n }\n\n var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\n PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\n CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\n TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\n HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\n TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\n TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\n ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\n ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\n TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\n ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess);\n\n // get element nodes from selectors\n var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\n tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'], \n optionsElements = {};\n \n tnsList.forEach(function(item) {\n if (typeof options[item] === 'string') {\n var str = options[item],\n el = doc.querySelector(str);\n optionsElements[item] = str;\n\n if (el && el.nodeName) {\n options[item] = el;\n } else {\n if (supportConsoleWarn) { console.warn('Can\\'t find', options[item]); }\n return;\n }\n }\n });\n\n // make sure at least 1 slide\n if (options.container.children.length < 1) {\n if (supportConsoleWarn) { console.warn('No slides found in', options.container); }\n return;\n }\n\n // update options\n var responsive = options.responsive,\n nested = options.nested,\n carousel = options.mode === 'carousel' ? true : false;\n\n if (responsive) {\n // apply responsive[0] to options and remove it\n if (0 in responsive) {\n options = extend(options, responsive[0]);\n delete responsive[0];\n }\n\n var responsiveTem = {};\n for (var key in responsive) {\n var val = responsive[key];\n // update responsive\n // from: 300: 2\n // to: \n // 300: { \n // items: 2 \n // } \n val = typeof val === 'number' ? {items: val} : val;\n responsiveTem[key] = val;\n }\n responsive = responsiveTem;\n responsiveTem = null;\n }\n\n // update options\n function updateOptions (obj) {\n for (var key in obj) {\n if (!carousel) {\n if (key === 'slideBy') { obj[key] = 'page'; }\n if (key === 'edgePadding') { obj[key] = false; }\n if (key === 'autoHeight') { obj[key] = false; }\n }\n\n // update responsive options\n if (key === 'responsive') { updateOptions(obj[key]); }\n }\n }\n if (!carousel) { updateOptions(options); }\n\n\n // === define and set variables ===\n if (!carousel) {\n options.axis = 'horizontal';\n options.slideBy = 'page';\n options.edgePadding = false;\n\n var animateIn = options.animateIn,\n animateOut = options.animateOut,\n animateDelay = options.animateDelay,\n animateNormal = options.animateNormal;\n }\n\n var horizontal = options.axis === 'horizontal' ? true : false,\n outerWrapper = doc.createElement('div'),\n innerWrapper = doc.createElement('div'),\n middleWrapper,\n container = options.container,\n containerParent = container.parentNode,\n containerHTML = container.outerHTML,\n slideItems = container.children,\n slideCount = slideItems.length,\n breakpointZone,\n windowWidth = getWindowWidth(),\n isOn = false;\n if (responsive) { setBreakpointZone(); }\n if (carousel) { container.className += ' tns-vpfix'; }\n\n // fixedWidth: viewport > rightBoundary > indexMax\n var autoWidth = options.autoWidth,\n fixedWidth = getOption('fixedWidth'),\n edgePadding = getOption('edgePadding'),\n gutter = getOption('gutter'),\n viewport = getViewportWidth(),\n center = getOption('center'),\n items = !autoWidth ? Math.floor(getOption('items')) : 1,\n slideBy = getOption('slideBy'),\n viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\n arrowKeys = getOption('arrowKeys'),\n speed = getOption('speed'),\n rewind = options.rewind,\n loop = rewind ? false : options.loop,\n autoHeight = getOption('autoHeight'),\n controls = getOption('controls'),\n controlsText = getOption('controlsText'),\n nav = getOption('nav'),\n touch = getOption('touch'),\n mouseDrag = getOption('mouseDrag'),\n autoplay = getOption('autoplay'),\n autoplayTimeout = getOption('autoplayTimeout'),\n autoplayText = getOption('autoplayText'),\n autoplayHoverPause = getOption('autoplayHoverPause'),\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\n sheet = createStyleSheet(),\n lazyload = options.lazyload,\n lazyloadSelector = options.lazyloadSelector,\n slidePositions, // collection of slide positions\n slideItemsOut = [],\n cloneCount = loop ? getCloneCountForLoop() : 0,\n slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\n hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\n rightBoundary = fixedWidth ? getRightBoundary() : null,\n updateIndexBeforeTransform = (!carousel || !loop) ? true : false,\n // transform\n transformAttr = horizontal ? 'left' : 'top',\n transformPrefix = '',\n transformPostfix = '',\n // index\n getIndexMax = (function () {\n if (fixedWidth) {\n return function() { return center && !loop ? slideCount - 1 : Math.ceil(- rightBoundary / (fixedWidth + gutter)); };\n } else if (autoWidth) {\n return function() {\n for (var i = slideCountNew; i--;) {\n if (slidePositions[i] >= - rightBoundary) { return i; }\n }\n };\n } else {\n return function() {\n if (center && carousel && !loop) {\n return slideCount - 1;\n } else {\n return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\n }\n };\n }\n })(),\n index = getStartIndex(getOption('startIndex')),\n indexCached = index,\n displayIndex = getCurrentSlide(),\n indexMin = 0,\n indexMax = !autoWidth ? getIndexMax() : null,\n // resize\n resizeTimer,\n preventActionWhenRunning = options.preventActionWhenRunning,\n swipeAngle = options.swipeAngle,\n moveDirectionExpected = swipeAngle ? '?' : true,\n running = false,\n onInit = options.onInit,\n events = new Events(),\n // id, class\n newContainerClasses = ' tns-slider tns-' + options.mode,\n slideId = container.id || getSlideId(),\n disable = getOption('disable'),\n disabled = false,\n freezable = options.freezable,\n freeze = freezable && !autoWidth ? getFreeze() : false,\n frozen = false,\n controlsEvents = {\n 'click': onControlsClick,\n 'keydown': onControlsKeydown\n },\n navEvents = {\n 'click': onNavClick,\n 'keydown': onNavKeydown\n },\n hoverEvents = {\n 'mouseover': mouseoverPause,\n 'mouseout': mouseoutRestart\n },\n visibilityEvent = {'visibilitychange': onVisibilityChange},\n docmentKeydownEvent = {'keydown': onDocumentKeydown},\n touchEvents = {\n 'touchstart': onPanStart,\n 'touchmove': onPanMove,\n 'touchend': onPanEnd,\n 'touchcancel': onPanEnd\n }, dragEvents = {\n 'mousedown': onPanStart,\n 'mousemove': onPanMove,\n 'mouseup': onPanEnd,\n 'mouseleave': onPanEnd\n },\n hasControls = hasOption('controls'),\n hasNav = hasOption('nav'),\n navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\n hasAutoplay = hasOption('autoplay'),\n hasTouch = hasOption('touch'),\n hasMouseDrag = hasOption('mouseDrag'),\n slideActiveClass = 'tns-slide-active',\n imgCompleteClass = 'tns-complete',\n imgEvents = {\n 'load': onImgLoaded,\n 'error': onImgFailed\n },\n imgsComplete,\n liveregionCurrent,\n preventScroll = options.preventScrollOnTouch === 'force' ? true : false;\n\n // controls\n if (hasControls) {\n var controlsContainer = options.controlsContainer,\n controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\n prevButton = options.prevButton,\n nextButton = options.nextButton,\n prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\n nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\n prevIsButton,\n nextIsButton;\n }\n\n // nav\n if (hasNav) {\n var navContainer = options.navContainer,\n navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\n navItems,\n pages = autoWidth ? slideCount : getPages(),\n pagesCached = 0,\n navClicked = -1,\n navCurrentIndex = getCurrentNavIndex(),\n navCurrentIndexCached = navCurrentIndex,\n navActiveClass = 'tns-nav-active',\n navStr = 'Carousel Page ',\n navStrCurrent = ' (Current Slide)';\n }\n\n // autoplay\n if (hasAutoplay) {\n var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\n autoplayButton = options.autoplayButton,\n autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\n autoplayHtmlStrings = ['', ' animation'],\n autoplayTimer,\n animating,\n autoplayHoverPaused,\n autoplayUserPaused,\n autoplayVisibilityPaused;\n }\n\n if (hasTouch || hasMouseDrag) {\n var initPosition = {},\n lastPosition = {},\n translateInit,\n disX,\n disY,\n panStart = false,\n rafIndex,\n getDist = horizontal ? \n function(a, b) { return a.x - b.x; } :\n function(a, b) { return a.y - b.y; };\n }\n \n // disable slider when slidecount <= items\n if (!autoWidth) { resetVariblesWhenDisable(disable || freeze); }\n\n if (TRANSFORM) {\n transformAttr = TRANSFORM;\n transformPrefix = 'translate';\n\n if (HAS3DTRANSFORMS) {\n transformPrefix += horizontal ? '3d(' : '3d(0px, ';\n transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\n } else {\n transformPrefix += horizontal ? 'X(' : 'Y(';\n transformPostfix = ')';\n }\n\n }\n\n if (carousel) { container.className = container.className.replace('tns-vpfix', ''); }\n initStructure();\n initSheet();\n initSliderTransform();\n\n // === COMMON FUNCTIONS === //\n function resetVariblesWhenDisable (condition) {\n if (condition) {\n controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\n }\n }\n\n function getCurrentSlide () {\n var tem = carousel ? index - cloneCount : index;\n while (tem < 0) { tem += slideCount; }\n return tem%slideCount + 1;\n }\n\n function getStartIndex (ind) {\n ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\n return carousel ? ind + cloneCount : ind;\n }\n\n function getAbsIndex (i) {\n if (i == null) { i = index; }\n\n if (carousel) { i -= cloneCount; }\n while (i < 0) { i += slideCount; }\n\n return Math.floor(i%slideCount);\n }\n\n function getCurrentNavIndex () {\n var absIndex = getAbsIndex(),\n result;\n\n result = navAsThumbnails ? absIndex : \n fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) : \n Math.floor(absIndex / items);\n\n // set active nav to the last one when reaches the right edge\n if (!loop && carousel && index === indexMax) { result = pages - 1; }\n\n return result;\n }\n\n function getItemsMax () {\n // fixedWidth or autoWidth while viewportMax is not available\n if (autoWidth || (fixedWidth && !viewportMax)) {\n return slideCount - 1;\n // most cases\n } else {\n var str = fixedWidth ? 'fixedWidth' : 'items',\n arr = [];\n\n if (fixedWidth || options[str] < slideCount) { arr.push(options[str]); }\n\n if (responsive) {\n for (var bp in responsive) {\n var tem = responsive[bp][str];\n if (tem && (fixedWidth || tem < slideCount)) { arr.push(tem); }\n }\n }\n\n if (!arr.length) { arr.push(0); }\n\n return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\n }\n }\n\n function getCloneCountForLoop () {\n var itemsMax = getItemsMax(),\n result = carousel ? Math.ceil((itemsMax * 5 - slideCount)/2) : (itemsMax * 4 - slideCount);\n result = Math.max(itemsMax, result);\n\n return hasOption('edgePadding') ? result + 1 : result;\n }\n\n function getWindowWidth () {\n return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\n }\n\n function getInsertPosition (pos) {\n return pos === 'top' ? 'afterbegin' : 'beforeend';\n }\n\n function getClientWidth (el) {\n var div = doc.createElement('div'), rect, width;\n el.appendChild(div);\n rect = div.getBoundingClientRect();\n width = rect.right - rect.left;\n div.remove();\n return width || getClientWidth(el.parentNode);\n }\n\n function getViewportWidth () {\n var gap = edgePadding ? edgePadding * 2 - gutter : 0;\n return getClientWidth(containerParent) - gap;\n }\n\n function hasOption (item) {\n if (options[item]) {\n return true;\n } else {\n if (responsive) {\n for (var bp in responsive) {\n if (responsive[bp][item]) { return true; }\n }\n }\n return false;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n function getOption (item, ww) {\n if (ww == null) { ww = windowWidth; }\n\n if (item === 'items' && fixedWidth) {\n return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\n\n } else {\n var result = options[item];\n\n if (responsive) {\n for (var bp in responsive) {\n // bp: convert string to number\n if (ww >= parseInt(bp)) {\n if (item in responsive[bp]) { result = responsive[bp][item]; }\n }\n }\n }\n\n if (item === 'slideBy' && result === 'page') { result = getOption('items'); }\n if (!carousel && (item === 'slideBy' || item === 'items')) { result = Math.floor(result); }\n\n return result;\n }\n }\n\n function getSlideMarginLeft (i) {\n return CALC ? \n CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' : \n i * 100 / slideCountNew + '%';\n }\n\n function getInnerWrapperStyles (edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\n var str = '';\n\n if (edgePaddingTem !== undefined) {\n var gap = edgePaddingTem;\n if (gutterTem) { gap -= gutterTem; }\n str = horizontal ?\n 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' :\n 'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\n } else if (gutterTem && !fixedWidthTem) {\n var gutterTemUnit = '-' + gutterTem + 'px',\n dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\n str = 'margin: 0 ' + dir + ';'\n }\n\n if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) { str += getTransitionDurationStyle(speedTem); }\n return str;\n }\n\n function getContainerWidth (fixedWidthTem, gutterTem, itemsTem) {\n if (fixedWidthTem) {\n return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\n } else {\n return CALC ?\n CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' :\n slideCountNew * 100 / itemsTem + '%';\n }\n }\n\n function getSlideWidthStyle (fixedWidthTem, gutterTem, itemsTem) {\n var width;\n\n if (fixedWidthTem) {\n width = (fixedWidthTem + gutterTem) + 'px';\n } else {\n if (!carousel) { itemsTem = Math.floor(itemsTem); }\n var dividend = carousel ? slideCountNew : itemsTem;\n width = CALC ? \n CALC + '(100% / ' + dividend + ')' : \n 100 / dividend + '%';\n }\n\n width = 'width:' + width;\n\n // inner slider: overwrite outer slider styles\n return nested !== 'inner' ? width + ';' : width + ' !important;';\n }\n\n function getSlideGutterStyle (gutterTem) {\n var str = '';\n\n // gutter maybe interger || 0\n // so can't use 'if (gutter)'\n if (gutterTem !== false) {\n var prop = horizontal ? 'padding-' : 'margin-',\n dir = horizontal ? 'right' : 'bottom';\n str = prop + dir + ': ' + gutterTem + 'px;';\n }\n\n return str;\n }\n\n function getCSSPrefix (name, num) {\n var prefix = name.substring(0, name.length - num).toLowerCase();\n if (prefix) { prefix = '-' + prefix + '-'; }\n\n return prefix;\n }\n\n function getTransitionDurationStyle (speed) {\n return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\n }\n\n function getAnimationDurationStyle (speed) {\n return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\n }\n\n function initStructure () {\n var classOuter = 'tns-outer',\n classInner = 'tns-inner',\n hasGutter = hasOption('gutter');\n\n outerWrapper.className = classOuter;\n innerWrapper.className = classInner;\n outerWrapper.id = slideId + '-ow';\n innerWrapper.id = slideId + '-iw';\n\n // set container properties\n if (container.id === '') { container.id = slideId; }\n newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\n newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\n if (autoWidth) { newContainerClasses += ' tns-autowidth'; }\n newContainerClasses += ' tns-' + options.axis;\n container.className += newContainerClasses;\n\n // add constrain layer for carousel\n if (carousel) {\n middleWrapper = doc.createElement('div');\n middleWrapper.id = slideId + '-mw';\n middleWrapper.className = 'tns-ovh';\n\n outerWrapper.appendChild(middleWrapper);\n middleWrapper.appendChild(innerWrapper);\n } else {\n outerWrapper.appendChild(innerWrapper);\n }\n\n if (autoHeight) {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.className += ' tns-ah';\n }\n\n containerParent.insertBefore(outerWrapper, container);\n innerWrapper.appendChild(container);\n\n // add id, class, aria attributes \n // before clone slides\n forEach(slideItems, function(item, i) {\n addClass(item, 'tns-item');\n if (!item.id) { item.id = slideId + '-item' + i; }\n if (!carousel && animateNormal) { addClass(item, animateNormal); }\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n });\n\n // ## clone slides\n // carousel: n + slides + n\n // gallery: slides + n\n if (cloneCount) {\n var fragmentBefore = doc.createDocumentFragment(), \n fragmentAfter = doc.createDocumentFragment();\n\n for (var j = cloneCount; j--;) {\n var num = j%slideCount,\n cloneFirst = slideItems[num].cloneNode(true);\n removeAttrs(cloneFirst, 'id');\n fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\n\n if (carousel) {\n var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\n removeAttrs(cloneLast, 'id');\n fragmentBefore.appendChild(cloneLast);\n }\n }\n\n container.insertBefore(fragmentBefore, container.firstChild);\n container.appendChild(fragmentAfter);\n slideItems = container.children;\n }\n\n }\n\n function initSliderTransform () {\n // ## images loaded/failed\n if (hasOption('autoHeight') || autoWidth || !horizontal) {\n var imgs = container.querySelectorAll('img');\n\n // add complete class if all images are loaded/failed\n forEach(imgs, function(img) {\n var src = img.src;\n \n if (src && src.indexOf('data:image') < 0) {\n addEvents(img, imgEvents);\n img.src = '';\n img.src = src;\n addClass(img, 'loading');\n } else if (!lazyload) {\n imgLoaded(img);\n }\n });\n\n // All imgs are completed\n raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), function() { imgsComplete = true; }); });\n\n // Check imgs in window only for auto height\n if (!autoWidth && horizontal) { imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1)); }\n\n lazyload ? initSliderTransformStyleCheck() : raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck); });\n\n } else {\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n }\n\n function initSliderTransformStyleCheck () {\n if (autoWidth) {\n // check styles application\n var num = loop ? index : slideCount - 1;\n (function stylesApplicationCheck() {\n slideItems[num - 1].getBoundingClientRect().right.toFixed(2) === slideItems[num].getBoundingClientRect().left.toFixed(2) ?\n initSliderTransformCore() :\n setTimeout(function(){ stylesApplicationCheck() }, 16);\n })();\n } else {\n initSliderTransformCore();\n }\n }\n\n\n function initSliderTransformCore () {\n // run Fn()s which are rely on image loading\n if (!horizontal || autoWidth) {\n setSlidePositions();\n\n if (autoWidth) {\n rightBoundary = getRightBoundary();\n if (freezable) { freeze = getFreeze(); }\n indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\n resetVariblesWhenDisable(disable || freeze);\n } else {\n updateContentWrapperHeight();\n }\n }\n\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n\n function initSheet () {\n // gallery:\n // set animation classes and left value for gallery slider\n if (!carousel) { \n for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\n var item = slideItems[i];\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // #### LAYOUT\n\n // ## INLINE-BLOCK VS FLOAT\n\n // ## PercentageLayout:\n // slides: inline-block\n // remove blank space between slides by set font-size: 0\n\n // ## Non PercentageLayout:\n // slides: float\n // margin-right: -100%\n // margin-left: ~\n\n // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\n if (horizontal) {\n if (PERCENTAGELAYOUT || autoWidth) {\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\n addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\n } else if (carousel) {\n forEach(slideItems, function (slide, i) {\n slide.style.marginLeft = getSlideMarginLeft(i);\n });\n }\n }\n\n\n // ## BASIC STYLES\n if (CSSMQ) {\n // middle wrapper style\n if (TRANSITIONDURATION) {\n var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\n addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\n }\n\n // inner wrapper styles\n str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\n addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet));\n\n // container styles\n if (carousel) {\n str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\n }\n\n // slide styles\n str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\n if (options.gutter) { str += getSlideGutterStyle(options.gutter); }\n // set gallery items transition-duration\n if (!carousel) {\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n if (ANIMATIONDURATION) { str += getAnimationDurationStyle(speed); }\n }\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n\n // non CSS mediaqueries: IE8\n // ## update inner wrapper, container, slides if needed\n // set inline styles for inner wrapper & container\n // insert stylesheet (one line) for slides only (since slides are many)\n } else {\n // middle wrapper styles\n update_carousel_transition_duration();\n\n // inner wrapper styles\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight);\n\n // container styles\n if (carousel && horizontal && !autoWidth) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\n if (gutter) { str += getSlideGutterStyle(gutter); }\n\n // append to the last line\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n }\n\n // ## MEDIAQUERIES\n if (responsive && CSSMQ) {\n for (var bp in responsive) {\n // bp: convert string to number\n bp = parseInt(bp);\n\n var opts = responsive[bp],\n str = '',\n middleWrapperStr = '',\n innerWrapperStr = '',\n containerStr = '',\n slideStr = '',\n itemsBP = !autoWidth ? getOption('items', bp) : null,\n fixedWidthBP = getOption('fixedWidth', bp),\n speedBP = getOption('speed', bp),\n edgePaddingBP = getOption('edgePadding', bp),\n autoHeightBP = getOption('autoHeight', bp),\n gutterBP = getOption('gutter', bp);\n\n // middle wrapper string\n if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\n middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\n }\n\n // inner wrapper string\n if ('edgePadding' in opts || 'gutter' in opts) {\n innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\n }\n\n // container string\n if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || (fixedWidth && 'gutter' in opts))) {\n containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\n }\n if (TRANSITIONDURATION && 'speed' in opts) {\n containerStr += getTransitionDurationStyle(speedBP);\n }\n if (containerStr) {\n containerStr = '#' + slideId + '{' + containerStr + '}';\n }\n\n // slide string\n if ('fixedWidth' in opts || (fixedWidth && 'gutter' in opts) || !carousel && 'items' in opts) {\n slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\n }\n if ('gutter' in opts) {\n slideStr += getSlideGutterStyle(gutterBP);\n }\n // set gallery items transition-duration\n if (!carousel && 'speed' in opts) {\n if (TRANSITIONDURATION) { slideStr += getTransitionDurationStyle(speedBP); }\n if (ANIMATIONDURATION) { slideStr += getAnimationDurationStyle(speedBP); }\n }\n if (slideStr) { slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}'; }\n\n // add up\n str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\n\n if (str) {\n sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\n }\n }\n }\n }\n\n function initTools () {\n // == slides ==\n updateSlideStatus();\n\n // == live region ==\n outerWrapper.insertAdjacentHTML('afterbegin', '
slide ' + getLiveRegionStr() + ' of ' + slideCount + '
');\n liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current');\n\n // == autoplayInit ==\n if (hasAutoplay) {\n var txt = autoplay ? 'stop' : 'start';\n if (autoplayButton) {\n setAttrs(autoplayButton, {'data-action': txt});\n } else if (options.autoplayButtonOutput) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '');\n autoplayButton = outerWrapper.querySelector('[data-action]');\n }\n\n // add event\n if (autoplayButton) {\n addEvents(autoplayButton, {'click': toggleAutoplay});\n }\n\n if (autoplay) {\n startAutoplay();\n if (autoplayHoverPause) { addEvents(container, hoverEvents); }\n if (autoplayResetOnVisibility) { addEvents(container, visibilityEvent); }\n }\n }\n \n // == navInit ==\n if (hasNav) {\n var initIndex = !carousel ? 0 : cloneCount;\n // customized nav\n // will not hide the navs in case they're thumbnails\n if (navContainer) {\n setAttrs(navContainer, {'aria-label': 'Carousel Pagination'});\n navItems = navContainer.children;\n forEach(navItems, function(item, i) {\n setAttrs(item, {\n 'data-nav': i,\n 'tabindex': '-1',\n 'aria-label': navStr + (i + 1),\n 'aria-controls': slideId,\n });\n });\n\n // generated nav \n } else {\n var navHtml = '',\n hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\n for (var i = 0; i < slideCount; i++) {\n // hide nav items by default\n navHtml += '';\n }\n navHtml = '
' + navHtml + '
';\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\n\n navContainer = outerWrapper.querySelector('.tns-nav');\n navItems = navContainer.children;\n }\n\n updateNavVisibility();\n\n // add transition\n if (TRANSITIONDURATION) {\n var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\n str = 'transition: all ' + speed / 1000 + 's';\n\n if (prefix) {\n str = '-' + prefix + '-' + str;\n }\n\n addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\n }\n\n setAttrs(navItems[navCurrentIndex], {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navItems[navCurrentIndex], 'tabindex');\n addClass(navItems[navCurrentIndex], navActiveClass);\n\n // add events\n addEvents(navContainer, navEvents);\n }\n\n\n\n // == controlsInit ==\n if (hasControls) {\n if (!controlsContainer && (!prevButton || !nextButton)) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '
');\n\n controlsContainer = outerWrapper.querySelector('.tns-controls');\n }\n\n if (!prevButton || !nextButton) {\n prevButton = controlsContainer.children[0];\n nextButton = controlsContainer.children[1];\n }\n\n if (options.controlsContainer) {\n setAttrs(controlsContainer, {\n 'aria-label': 'Carousel Navigation',\n 'tabindex': '0'\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs([prevButton, nextButton], {\n 'aria-controls': slideId,\n 'tabindex': '-1',\n });\n }\n \n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs(prevButton, {'data-controls' : 'prev'});\n setAttrs(nextButton, {'data-controls' : 'next'});\n }\n\n prevIsButton = isButton(prevButton);\n nextIsButton = isButton(nextButton);\n\n updateControlsStatus();\n\n // add events\n if (controlsContainer) {\n addEvents(controlsContainer, controlsEvents);\n } else {\n addEvents(prevButton, controlsEvents);\n addEvents(nextButton, controlsEvents);\n }\n }\n\n // hide tools if needed\n disableUI();\n }\n\n function initEvents () {\n // add events\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n addEvents(container, eve);\n }\n\n if (touch) { addEvents(container, touchEvents, options.preventScrollOnTouch); }\n if (mouseDrag) { addEvents(container, dragEvents); }\n if (arrowKeys) { addEvents(doc, docmentKeydownEvent); }\n\n if (nested === 'inner') {\n events.on('outerResized', function () {\n resizeTasks();\n events.emit('innerLoaded', info());\n });\n } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\n addEvents(win, {'resize': onResize});\n }\n\n if (autoHeight) {\n if (nested === 'outer') {\n events.on('innerLoaded', doAutoHeight);\n } else if (!disable) { doAutoHeight(); }\n }\n\n doLazyLoad();\n if (disable) { disableSlider(); } else if (freeze) { freezeSlider(); }\n\n events.on('indexChanged', additionalUpdates);\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n if (typeof onInit === 'function') { onInit(info()); }\n isOn = true;\n }\n\n function destroy () {\n // sheet\n sheet.disabled = true;\n if (sheet.ownerNode) { sheet.ownerNode.remove(); }\n\n // remove win event listeners\n removeEvents(win, {'resize': onResize});\n\n // arrowKeys, controls, nav\n if (arrowKeys) { removeEvents(doc, docmentKeydownEvent); }\n if (controlsContainer) { removeEvents(controlsContainer, controlsEvents); }\n if (navContainer) { removeEvents(navContainer, navEvents); }\n\n // autoplay\n removeEvents(container, hoverEvents);\n removeEvents(container, visibilityEvent);\n if (autoplayButton) { removeEvents(autoplayButton, {'click': toggleAutoplay}); }\n if (autoplay) { clearInterval(autoplayTimer); }\n\n // container\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n removeEvents(container, eve);\n }\n if (touch) { removeEvents(container, touchEvents); }\n if (mouseDrag) { removeEvents(container, dragEvents); }\n\n // cache Object values in options && reset HTML\n var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\n\n tnsList.forEach(function(item, i) {\n var el = item === 'container' ? outerWrapper : options[item];\n\n if (typeof el === 'object') {\n var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\n parentEl = el.parentNode;\n el.outerHTML = htmlList[i];\n options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\n }\n });\n\n\n // reset variables\n tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = resizeTimer = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = disX = disY = panStart = rafIndex = getDist = touch = mouseDrag = null;\n // check variables\n // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\n\n for (var a in this) {\n if (a !== 'rebuild') { this[a] = null; }\n }\n isOn = false;\n }\n\n// === ON RESIZE ===\n // responsive || fixedWidth || autoWidth || !horizontal\n function onResize (e) {\n raf(function(){ resizeTasks(getEvent(e)); });\n }\n\n function resizeTasks (e) {\n if (!isOn) { return; }\n if (nested === 'outer') { events.emit('outerResized', info(e)); }\n windowWidth = getWindowWidth();\n var bpChanged,\n breakpointZoneTem = breakpointZone,\n needContainerTransform = false;\n\n if (responsive) {\n setBreakpointZone();\n bpChanged = breakpointZoneTem !== breakpointZone;\n // if (hasRightDeadZone) { needContainerTransform = true; } // *?\n if (bpChanged) { events.emit('newBreakpointStart', info(e)); }\n }\n\n var indChanged,\n itemsChanged,\n itemsTem = items,\n disableTem = disable,\n freezeTem = freeze,\n arrowKeysTem = arrowKeys,\n controlsTem = controls,\n navTem = nav,\n touchTem = touch,\n mouseDragTem = mouseDrag,\n autoplayTem = autoplay,\n autoplayHoverPauseTem = autoplayHoverPause,\n autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\n indexTem = index;\n\n if (bpChanged) {\n var fixedWidthTem = fixedWidth,\n autoHeightTem = autoHeight,\n controlsTextTem = controlsText,\n centerTem = center,\n autoplayTextTem = autoplayText;\n\n if (!CSSMQ) {\n var gutterTem = gutter,\n edgePaddingTem = edgePadding;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n arrowKeys = getOption('arrowKeys');\n controls = getOption('controls');\n nav = getOption('nav');\n touch = getOption('touch');\n center = getOption('center');\n mouseDrag = getOption('mouseDrag');\n autoplay = getOption('autoplay');\n autoplayHoverPause = getOption('autoplayHoverPause');\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\n\n if (bpChanged) {\n disable = getOption('disable');\n fixedWidth = getOption('fixedWidth');\n speed = getOption('speed');\n autoHeight = getOption('autoHeight');\n controlsText = getOption('controlsText');\n autoplayText = getOption('autoplayText');\n autoplayTimeout = getOption('autoplayTimeout');\n\n if (!CSSMQ) {\n edgePadding = getOption('edgePadding');\n gutter = getOption('gutter');\n }\n }\n // update options\n resetVariblesWhenDisable(disable);\n\n viewport = getViewportWidth(); // <= edgePadding, gutter\n if ((!horizontal || autoWidth) && !disable) {\n setSlidePositions();\n if (!horizontal) {\n updateContentWrapperHeight(); // <= setSlidePositions\n needContainerTransform = true;\n }\n }\n if (fixedWidth || autoWidth) {\n rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\n // fixedWidth: <= viewport, fixedWidth, gutter\n indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\n // fixedWidth: <= rightBoundary, fixedWidth, gutter\n }\n\n if (bpChanged || fixedWidth) {\n items = getOption('items');\n slideBy = getOption('slideBy');\n itemsChanged = items !== itemsTem;\n\n if (itemsChanged) {\n if (!fixedWidth && !autoWidth) { indexMax = getIndexMax(); } // <= items\n // check index before transform in case\n // slider reach the right edge then items become bigger\n updateIndex();\n }\n }\n \n if (bpChanged) {\n if (disable !== disableTem) {\n if (disable) {\n disableSlider();\n } else {\n enableSlider(); // <= slidePositions, rightBoundary, indexMax\n }\n }\n }\n\n if (freezable && (bpChanged || fixedWidth || autoWidth)) {\n freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\n // <= fixedWidth: fixedWidth, gutter, rightBoundary\n // <= others: items\n\n if (freeze !== freezeTem) {\n if (freeze) {\n doContainerTransform(getContainerTransformValue(getStartIndex(0)));\n freezeSlider();\n } else {\n unfreezeSlider();\n needContainerTransform = true;\n }\n }\n }\n\n resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\n if (!autoplay) { autoplayHoverPause = autoplayResetOnVisibility = false; }\n\n if (arrowKeys !== arrowKeysTem) {\n arrowKeys ?\n addEvents(doc, docmentKeydownEvent) :\n removeEvents(doc, docmentKeydownEvent);\n }\n if (controls !== controlsTem) {\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n } else {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n if (nav !== navTem) {\n nav ?\n showElement(navContainer) :\n hideElement(navContainer);\n }\n if (touch !== touchTem) {\n touch ?\n addEvents(container, touchEvents, options.preventScrollOnTouch) :\n removeEvents(container, touchEvents);\n }\n if (mouseDrag !== mouseDragTem) {\n mouseDrag ?\n addEvents(container, dragEvents) :\n removeEvents(container, dragEvents);\n }\n if (autoplay !== autoplayTem) {\n if (autoplay) {\n if (autoplayButton) { showElement(autoplayButton); }\n if (!animating && !autoplayUserPaused) { startAutoplay(); }\n } else {\n if (autoplayButton) { hideElement(autoplayButton); }\n if (animating) { stopAutoplay(); }\n }\n }\n if (autoplayHoverPause !== autoplayHoverPauseTem) {\n autoplayHoverPause ?\n addEvents(container, hoverEvents) :\n removeEvents(container, hoverEvents);\n }\n if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\n autoplayResetOnVisibility ?\n addEvents(doc, visibilityEvent) :\n removeEvents(doc, visibilityEvent);\n }\n\n if (bpChanged) {\n if (fixedWidth !== fixedWidthTem || center !== centerTem) { needContainerTransform = true; }\n\n if (autoHeight !== autoHeightTem) {\n if (!autoHeight) { innerWrapper.style.height = ''; }\n }\n\n if (controls && controlsText !== controlsTextTem) {\n prevButton.innerHTML = controlsText[0];\n nextButton.innerHTML = controlsText[1];\n }\n\n if (autoplayButton && autoplayText !== autoplayTextTem) {\n var i = autoplay ? 1 : 0,\n html = autoplayButton.innerHTML,\n len = html.length - autoplayTextTem[i].length;\n if (html.substring(len) === autoplayTextTem[i]) {\n autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\n }\n }\n } else {\n if (center && (fixedWidth || autoWidth)) { needContainerTransform = true; }\n }\n\n if (itemsChanged || fixedWidth && !autoWidth) {\n pages = getPages();\n updateNavVisibility();\n }\n\n indChanged = index !== indexTem;\n if (indChanged) { \n events.emit('indexChanged', info());\n needContainerTransform = true;\n } else if (itemsChanged) {\n if (!indChanged) { additionalUpdates(); }\n } else if (fixedWidth || autoWidth) {\n doLazyLoad(); \n updateSlideStatus();\n updateLiveRegion();\n }\n\n if (itemsChanged && !carousel) { updateGallerySlidePositions(); }\n\n if (!disable && !freeze) {\n // non-meduaqueries: IE8\n if (bpChanged && !CSSMQ) {\n // middle wrapper styles\n if (autoHeight !== autoheightTem || speed !== speedTem) {\n update_carousel_transition_duration();\n }\n\n // inner wrapper styles\n if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\n }\n\n if (horizontal) {\n // container styles\n if (carousel) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = getSlideWidthStyle(fixedWidth, gutter, items) + \n getSlideGutterStyle(gutter);\n\n // remove the last line and\n // add new styles\n removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n }\n }\n\n // auto height\n if (autoHeight) { doAutoHeight(); }\n\n if (needContainerTransform) {\n doContainerTransformSilent();\n indexCached = index;\n }\n }\n\n if (bpChanged) { events.emit('newBreakpointEnd', info(e)); }\n }\n\n\n\n\n\n // === INITIALIZATION FUNCTIONS === //\n function getFreeze () {\n if (!fixedWidth && !autoWidth) {\n var a = center ? items - (items - 1) / 2 : items;\n return slideCount <= a;\n }\n\n var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\n vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\n\n if (center) {\n vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\n }\n\n return width <= vp;\n }\n\n function setBreakpointZone () {\n breakpointZone = 0;\n for (var bp in responsive) {\n bp = parseInt(bp); // convert string to number\n if (windowWidth >= bp) { breakpointZone = bp; }\n }\n }\n\n // (slideBy, indexMin, indexMax) => index\n var updateIndex = (function () {\n return loop ? \n carousel ?\n // loop + carousel\n function () {\n var leftEdge = indexMin,\n rightEdge = indexMax;\n\n leftEdge += slideBy;\n rightEdge -= slideBy;\n\n // adjust edges when has edge paddings\n // or fixed-width slider with extra space on the right side\n if (edgePadding) {\n leftEdge += 1;\n rightEdge -= 1;\n } else if (fixedWidth) {\n if ((viewport + gutter)%(fixedWidth + gutter)) { rightEdge -= 1; }\n }\n\n if (cloneCount) {\n if (index > rightEdge) {\n index -= slideCount;\n } else if (index < leftEdge) {\n index += slideCount;\n }\n }\n } :\n // loop + gallery\n function() {\n if (index > indexMax) {\n while (index >= indexMin + slideCount) { index -= slideCount; }\n } else if (index < indexMin) {\n while (index <= indexMax - slideCount) { index += slideCount; }\n }\n } :\n // non-loop\n function() {\n index = Math.max(indexMin, Math.min(indexMax, index));\n };\n })();\n\n function disableUI () {\n if (!autoplay && autoplayButton) { hideElement(autoplayButton); }\n if (!nav && navContainer) { hideElement(navContainer); }\n if (!controls) {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n\n function enableUI () {\n if (autoplay && autoplayButton) { showElement(autoplayButton); }\n if (nav && navContainer) { showElement(navContainer); }\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n }\n }\n\n function freezeSlider () {\n if (frozen) { return; }\n\n // remove edge padding from inner wrapper\n if (edgePadding) { innerWrapper.style.margin = '0px'; }\n\n // add class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { addClass(slideItems[i], str); }\n addClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n disableUI();\n\n frozen = true;\n }\n\n function unfreezeSlider () {\n if (!frozen) { return; }\n\n // restore edge padding for inner wrapper\n // for mordern browsers\n if (edgePadding && CSSMQ) { innerWrapper.style.margin = ''; }\n\n // remove class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { removeClass(slideItems[i], str); }\n removeClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n enableUI();\n\n frozen = false;\n }\n\n function disableSlider () {\n if (disabled) { return; }\n\n sheet.disabled = true;\n container.className = container.className.replace(newContainerClasses.substring(1), '');\n removeAttrs(container, ['style']);\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { hideElement(slideItems[j]); }\n hideElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // vertical slider\n if (!horizontal || !carousel) { removeAttrs(innerWrapper, ['style']); }\n\n // gallery\n if (!carousel) { \n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i];\n removeAttrs(item, ['style']);\n removeClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // update tools\n disableUI();\n\n disabled = true;\n }\n\n function enableSlider () {\n if (!disabled) { return; }\n\n sheet.disabled = false;\n container.className += newContainerClasses;\n doContainerTransformSilent();\n\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { showElement(slideItems[j]); }\n showElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // gallery\n if (!carousel) { \n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i],\n classN = i < index + items ? animateIn : animateNormal;\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, classN);\n }\n }\n\n // update tools\n enableUI();\n\n disabled = false;\n }\n\n function updateLiveRegion () {\n var str = getLiveRegionStr();\n if (liveregionCurrent.innerHTML !== str) { liveregionCurrent.innerHTML = str; }\n }\n\n function getLiveRegionStr () {\n var arr = getVisibleSlideRange(),\n start = arr[0] + 1,\n end = arr[1] + 1;\n return start === end ? start + '' : start + ' to ' + end; \n }\n\n function getVisibleSlideRange (val) {\n if (val == null) { val = getContainerTransformValue(); }\n var start = index, end, rangestart, rangeend;\n\n // get range start, range end for autoWidth and fixedWidth\n if (center || edgePadding) {\n if (autoWidth || fixedWidth) {\n rangestart = - (parseFloat(val) + edgePadding);\n rangeend = rangestart + viewport + edgePadding * 2;\n }\n } else {\n if (autoWidth) {\n rangestart = slidePositions[index];\n rangeend = rangestart + viewport;\n }\n }\n\n // get start, end\n // - check auto width\n if (autoWidth) {\n slidePositions.forEach(function(point, i) {\n if (i < slideCountNew) {\n if ((center || edgePadding) && point <= rangestart + 0.5) { start = i; }\n if (rangeend - point >= 0.5) { end = i; }\n }\n });\n\n // - check percentage width, fixed width\n } else {\n\n if (fixedWidth) {\n var cell = fixedWidth + gutter;\n if (center || edgePadding) {\n start = Math.floor(rangestart/cell);\n end = Math.ceil(rangeend/cell - 1);\n } else {\n end = start + Math.ceil(viewport/cell) - 1;\n }\n\n } else {\n if (center || edgePadding) {\n var a = items - 1;\n if (center) {\n start -= a / 2;\n end = index + a / 2;\n } else {\n end = index + a;\n }\n\n if (edgePadding) {\n var b = edgePadding * items / viewport;\n start -= b;\n end += b;\n }\n\n start = Math.floor(start);\n end = Math.ceil(end);\n } else {\n end = start + items - 1;\n }\n }\n\n start = Math.max(start, 0);\n end = Math.min(end, slideCountNew - 1);\n }\n\n return [start, end];\n }\n\n function doLazyLoad () {\n if (lazyload && !disable) {\n getImageArray.apply(null, getVisibleSlideRange()).forEach(function (img) {\n if (!hasClass(img, imgCompleteClass)) {\n // stop propagation transitionend event to container\n var eve = {};\n eve[TRANSITIONEND] = function (e) { e.stopPropagation(); };\n addEvents(img, eve);\n\n addEvents(img, imgEvents);\n\n // update src\n img.src = getAttr(img, 'data-src');\n\n // update srcset\n var srcset = getAttr(img, 'data-srcset');\n if (srcset) { img.srcset = srcset; }\n\n addClass(img, 'loading');\n }\n });\n }\n }\n\n function onImgLoaded (e) {\n imgLoaded(getTarget(e));\n }\n\n function onImgFailed (e) {\n imgFailed(getTarget(e));\n }\n\n function imgLoaded (img) {\n addClass(img, 'loaded');\n imgCompleted(img);\n }\n\n function imgFailed (img) {\n addClass(img, 'failed');\n imgCompleted(img);\n }\n\n function imgCompleted (img) {\n addClass(img, 'tns-complete');\n removeClass(img, 'loading');\n removeEvents(img, imgEvents);\n }\n\n function getImageArray (start, end) {\n var imgs = [];\n while (start <= end) {\n forEach(slideItems[start].querySelectorAll('img'), function (img) { imgs.push(img); });\n start++;\n }\n\n return imgs;\n }\n\n // check if all visible images are loaded\n // and update container height if it's done\n function doAutoHeight () {\n var imgs = getImageArray.apply(null, getVisibleSlideRange());\n raf(function(){ imgsLoadedCheck(imgs, updateInnerWrapperHeight); });\n }\n\n function imgsLoadedCheck (imgs, cb) {\n // directly execute callback function if all images are complete\n if (imgsComplete) { return cb(); }\n\n // check selected image classes otherwise\n imgs.forEach(function (img, index) {\n if (hasClass(img, imgCompleteClass)) { imgs.splice(index, 1); }\n });\n\n // execute callback function if selected images are all complete\n if (!imgs.length) { return cb(); }\n\n // otherwise execute this functiona again\n raf(function(){ imgsLoadedCheck(imgs, cb); });\n } \n\n function additionalUpdates () {\n doLazyLoad(); \n updateSlideStatus();\n updateLiveRegion();\n updateControlsStatus();\n updateNavStatus();\n }\n\n\n function update_carousel_transition_duration () {\n if (carousel && autoHeight) {\n middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\n }\n }\n\n function getMaxSlideHeight (slideStart, slideRange) {\n var heights = [];\n for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\n heights.push(slideItems[i].offsetHeight);\n }\n\n return Math.max.apply(null, heights);\n }\n\n // update inner wrapper height\n // 1. get the max-height of the visible slides\n // 2. set transitionDuration to speed\n // 3. update inner wrapper height to max-height\n // 4. set transitionDuration to 0s after transition done\n function updateInnerWrapperHeight () {\n var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\n wp = middleWrapper ? middleWrapper : innerWrapper;\n\n if (wp.style.height !== maxHeight) { wp.style.height = maxHeight + 'px'; }\n }\n\n // get the distance from the top edge of the first slide to each slide\n // (init) => slidePositions\n function setSlidePositions () {\n slidePositions = [0];\n var attr = horizontal ? 'left' : 'top',\n attr2 = horizontal ? 'right' : 'bottom',\n base = slideItems[0].getBoundingClientRect()[attr];\n\n forEach(slideItems, function(item, i) {\n // skip the first slide\n if (i) { slidePositions.push(item.getBoundingClientRect()[attr] - base); }\n // add the end edge\n if (i === slideCountNew - 1) { slidePositions.push(item.getBoundingClientRect()[attr2] - base); }\n });\n }\n\n // update slide\n function updateSlideStatus () {\n var range = getVisibleSlideRange(),\n start = range[0],\n end = range[1];\n\n forEach(slideItems, function(item, i) {\n // show slides\n if (i >= start && i <= end) {\n if (hasAttr(item, 'aria-hidden')) {\n removeAttrs(item, ['aria-hidden', 'tabindex']);\n addClass(item, slideActiveClass);\n }\n // hide slides\n } else {\n if (!hasAttr(item, 'aria-hidden')) {\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n removeClass(item, slideActiveClass);\n }\n }\n });\n }\n\n // gallery: update slide position\n function updateGallerySlidePositions () {\n var l = index + Math.min(slideCount, items);\n for (var i = slideCountNew; i--;) {\n var item = slideItems[i];\n\n if (i >= index && i < l) {\n // add transitions to visible slides when adjusting their positions\n addClass(item, 'tns-moving');\n\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n } else if (item.style.left) {\n item.style.left = '';\n addClass(item, animateNormal);\n removeClass(item, animateIn);\n }\n\n // remove outlet animation\n removeClass(item, animateOut);\n }\n\n // removing '.tns-moving'\n setTimeout(function() {\n forEach(slideItems, function(el) {\n removeClass(el, 'tns-moving');\n });\n }, 300);\n }\n\n // set tabindex on Nav\n function updateNavStatus () {\n // get current nav\n if (nav) {\n navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\n navClicked = -1;\n\n if (navCurrentIndex !== navCurrentIndexCached) {\n var navPrev = navItems[navCurrentIndexCached],\n navCurrent = navItems[navCurrentIndex];\n\n setAttrs(navPrev, {\n 'tabindex': '-1',\n 'aria-label': navStr + (navCurrentIndexCached + 1)\n });\n removeClass(navPrev, navActiveClass);\n \n setAttrs(navCurrent, {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navCurrent, 'tabindex');\n addClass(navCurrent, navActiveClass);\n\n navCurrentIndexCached = navCurrentIndex;\n }\n }\n }\n\n function getLowerCaseNodeName (el) {\n return el.nodeName.toLowerCase();\n }\n\n function isButton (el) {\n return getLowerCaseNodeName(el) === 'button';\n }\n\n function isAriaDisabled (el) {\n return el.getAttribute('aria-disabled') === 'true';\n }\n\n function disEnableElement (isButton, el, val) {\n if (isButton) {\n el.disabled = val;\n } else {\n el.setAttribute('aria-disabled', val.toString());\n }\n }\n\n // set 'disabled' to true on controls when reach the edges\n function updateControlsStatus () {\n if (!controls || rewind || loop) { return; }\n\n var prevDisabled = (prevIsButton) ? prevButton.disabled : isAriaDisabled(prevButton),\n nextDisabled = (nextIsButton) ? nextButton.disabled : isAriaDisabled(nextButton),\n disablePrev = (index <= indexMin) ? true : false,\n disableNext = (!rewind && index >= indexMax) ? true : false;\n\n if (disablePrev && !prevDisabled) {\n disEnableElement(prevIsButton, prevButton, true);\n }\n if (!disablePrev && prevDisabled) {\n disEnableElement(prevIsButton, prevButton, false);\n }\n if (disableNext && !nextDisabled) {\n disEnableElement(nextIsButton, nextButton, true);\n }\n if (!disableNext && nextDisabled) {\n disEnableElement(nextIsButton, nextButton, false);\n }\n }\n\n // set duration\n function resetDuration (el, str) {\n if (TRANSITIONDURATION) { el.style[TRANSITIONDURATION] = str; }\n }\n\n function getSliderWidth () {\n return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\n }\n\n function getCenterGap (num) {\n if (num == null) { num = index; }\n\n var gap = edgePadding ? gutter : 0;\n return autoWidth ? ((viewport - gap) - (slidePositions[num + 1] - slidePositions[num] - gutter))/2 :\n fixedWidth ? (viewport - fixedWidth) / 2 :\n (items - 1) / 2;\n }\n\n function getRightBoundary () {\n var gap = edgePadding ? gutter : 0,\n result = (viewport + gap) - getSliderWidth();\n\n if (center && !loop) {\n result = fixedWidth ? - (fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() :\n getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\n }\n if (result > 0) { result = 0; }\n\n return result;\n }\n\n function getContainerTransformValue (num) {\n if (num == null) { num = index; }\n\n var val;\n if (horizontal && !autoWidth) {\n if (fixedWidth) {\n val = - (fixedWidth + gutter) * num;\n if (center) { val += getCenterGap(); }\n } else {\n var denominator = TRANSFORM ? slideCountNew : items;\n if (center) { num -= getCenterGap(); }\n val = - num * 100 / denominator;\n }\n } else {\n val = - slidePositions[num];\n if (center && autoWidth) {\n val += getCenterGap();\n }\n }\n\n if (hasRightDeadZone) { val = Math.max(val, rightBoundary); }\n\n val += (horizontal && !autoWidth && !fixedWidth) ? '%' : 'px';\n\n return val;\n }\n\n function doContainerTransformSilent (val) {\n resetDuration(container, '0s');\n doContainerTransform(val);\n }\n\n function doContainerTransform (val) {\n if (val == null) { val = getContainerTransformValue(); }\n container.style[transformAttr] = transformPrefix + val + transformPostfix;\n }\n\n function animateSlide (number, classOut, classIn, isOut) {\n var l = number + items;\n if (!loop) { l = Math.min(l, slideCountNew); }\n\n for (var i = number; i < l; i++) {\n var item = slideItems[i];\n\n // set item positions\n if (!isOut) { item.style.left = (i - index) * 100 / items + '%'; }\n\n if (animateDelay && TRANSITIONDELAY) {\n item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\n }\n removeClass(item, classOut);\n addClass(item, classIn);\n \n if (isOut) { slideItemsOut.push(item); }\n }\n }\n\n // make transfer after click/drag:\n // 1. change 'transform' property for mordern browsers\n // 2. change 'left' property for legacy browsers\n var transformCore = (function () {\n return carousel ?\n function () {\n resetDuration(container, '');\n if (TRANSITIONDURATION || !speed) {\n // for morden browsers with non-zero duration or \n // zero duration for all browsers\n doContainerTransform();\n // run fallback function manually \n // when duration is 0 / container is hidden\n if (!speed || !isVisible(container)) { onTransitionEnd(); }\n\n } else {\n // for old browser with non-zero duration\n jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\n }\n\n if (!horizontal) { updateContentWrapperHeight(); }\n } :\n function () {\n slideItemsOut = [];\n\n var eve = {};\n eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\n removeEvents(slideItems[indexCached], eve);\n addEvents(slideItems[index], eve);\n\n animateSlide(indexCached, animateIn, animateOut, true);\n animateSlide(index, animateNormal, animateIn);\n\n // run fallback function manually \n // when transition or animation not supported / duration is 0\n if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) { onTransitionEnd(); }\n };\n })();\n\n function render (e, sliderMoved) {\n if (updateIndexBeforeTransform) { updateIndex(); }\n\n // render when slider was moved (touch or drag) even though index may not change\n if (index !== indexCached || sliderMoved) {\n // events\n events.emit('indexChanged', info());\n events.emit('transitionStart', info());\n if (autoHeight) { doAutoHeight(); }\n\n // pause autoplay when click or keydown from user\n if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) { stopAutoplay(); }\n\n running = true;\n transformCore();\n }\n }\n\n /*\n * Transfer prefixed properties to the same format\n * CSS: -Webkit-Transform => webkittransform\n * JS: WebkitTransform => webkittransform\n * @param {string} str - property\n *\n */\n function strTrans (str) {\n return str.toLowerCase().replace(/-/g, '');\n }\n\n // AFTER TRANSFORM\n // Things need to be done after a transfer:\n // 1. check index\n // 2. add classes to visible slide\n // 3. disable controls buttons when reach the first/last slide in non-loop slider\n // 4. update nav status\n // 5. lazyload images\n // 6. update container height\n function onTransitionEnd (event) {\n // check running on gallery mode\n // make sure trantionend/animationend events run only once\n if (carousel || running) {\n events.emit('transitionEnd', info(event));\n\n if (!carousel && slideItemsOut.length > 0) {\n for (var i = 0; i < slideItemsOut.length; i++) {\n var item = slideItemsOut[i];\n // set item positions\n item.style.left = '';\n\n if (ANIMATIONDELAY && TRANSITIONDELAY) { \n item.style[ANIMATIONDELAY] = '';\n item.style[TRANSITIONDELAY] = '';\n }\n removeClass(item, animateOut);\n addClass(item, animateNormal);\n }\n }\n\n /* update slides, nav, controls after checking ...\n * => legacy browsers who don't support 'event' \n * have to check event first, otherwise event.target will cause an error \n * => or 'gallery' mode: \n * + event target is slide item\n * => or 'carousel' mode: \n * + event target is container, \n * + event.property is the same with transform attribute\n */\n if (!event || \n !carousel && event.target.parentNode === container || \n event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\n\n if (!updateIndexBeforeTransform) { \n var indexTem = index;\n updateIndex();\n if (index !== indexTem) { \n events.emit('indexChanged', info());\n\n doContainerTransformSilent();\n }\n } \n\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n running = false;\n indexCached = index;\n }\n }\n\n }\n\n // # ACTIONS\n function goTo (targetIndex, e) {\n if (freeze) { return; }\n\n // prev slideBy\n if (targetIndex === 'prev') {\n onControlsClick(e, -1);\n\n // next slideBy\n } else if (targetIndex === 'next') {\n onControlsClick(e, 1);\n\n // go to exact slide\n } else {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n var absIndex = getAbsIndex(), \n indexGap = 0;\n\n if (targetIndex === 'first') {\n indexGap = - absIndex;\n } else if (targetIndex === 'last') {\n indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\n } else {\n if (typeof targetIndex !== 'number') { targetIndex = parseInt(targetIndex); }\n\n if (!isNaN(targetIndex)) {\n // from directly called goTo function\n if (!e) { targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex)); }\n\n indexGap = targetIndex - absIndex;\n }\n }\n\n // gallery: make sure new page won't overlap with current page\n if (!carousel && indexGap && Math.abs(indexGap) < items) {\n var factor = indexGap > 0 ? 1 : -1;\n indexGap += (index + indexGap - slideCount) >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\n }\n\n index += indexGap;\n\n // make sure index is in range\n if (carousel && loop) {\n if (index < indexMin) { index += slideCount; }\n if (index > indexMax) { index -= slideCount; }\n }\n\n // if index is changed, start rendering\n if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\n render(e);\n }\n\n }\n }\n\n // on controls click\n function onControlsClick (e, dir) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n var passEventObject;\n\n if (!dir) {\n e = getEvent(e);\n var target = getTarget(e);\n\n while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) { target = target.parentNode; }\n\n var targetIn = [prevButton, nextButton].indexOf(target);\n if (targetIn >= 0) {\n passEventObject = true;\n dir = targetIn === 0 ? -1 : 1;\n }\n }\n\n if (rewind) {\n if (index === indexMin && dir === -1) {\n goTo('last', e);\n return;\n } else if (index === indexMax && dir === 1) {\n goTo('first', e);\n return;\n }\n }\n\n if (dir) {\n index += slideBy * dir;\n if (autoWidth) { index = Math.floor(index); }\n // pass e when click control buttons or keydown\n render((passEventObject || (e && e.type === 'keydown')) ? e : null);\n }\n }\n\n // on nav click\n function onNavClick (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n \n e = getEvent(e);\n var target = getTarget(e), navIndex;\n\n // find the clicked nav item\n while (target !== navContainer && !hasAttr(target, 'data-nav')) { target = target.parentNode; }\n if (hasAttr(target, 'data-nav')) {\n var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\n targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\n targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\n goTo(targetIndex, e);\n\n if (navCurrentIndex === navIndex) {\n if (animating) { stopAutoplay(); }\n navClicked = -1; // reset navClicked\n }\n }\n }\n\n // autoplay functions\n function setAutoplayTimer () {\n autoplayTimer = setInterval(function () {\n onControlsClick(null, autoplayDirection);\n }, autoplayTimeout);\n\n animating = true;\n }\n\n function stopAutoplayTimer () {\n clearInterval(autoplayTimer);\n animating = false;\n }\n\n function updateAutoplayButton (action, txt) {\n setAttrs(autoplayButton, {'data-action': action});\n autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\n }\n\n function startAutoplay () {\n setAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('stop', autoplayText[1]); }\n }\n\n function stopAutoplay () {\n stopAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('start', autoplayText[0]); }\n }\n\n // programaitcally play/pause the slider\n function play () {\n if (autoplay && !animating) {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n function pause () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n }\n }\n\n function toggleAutoplay () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n } else {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n\n function onVisibilityChange () {\n if (doc.hidden) {\n if (animating) {\n stopAutoplayTimer();\n autoplayVisibilityPaused = true;\n }\n } else if (autoplayVisibilityPaused) {\n setAutoplayTimer();\n autoplayVisibilityPaused = false;\n }\n }\n\n function mouseoverPause () {\n if (animating) { \n stopAutoplayTimer();\n autoplayHoverPaused = true;\n }\n }\n\n function mouseoutRestart () {\n if (autoplayHoverPaused) { \n setAutoplayTimer();\n autoplayHoverPaused = false;\n }\n }\n\n // keydown events on document \n function onDocumentKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n onControlsClick(e, keyIndex === 0 ? -1 : 1);\n }\n }\n\n // on key control\n function onControlsKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (!prevButton.disabled) { onControlsClick(e, -1); }\n } else if (!nextButton.disabled) {\n onControlsClick(e, 1);\n }\n }\n }\n\n // set focus\n function setFocus (el) {\n el.focus();\n }\n\n // on key nav\n function onNavKeydown (e) {\n e = getEvent(e);\n var curElement = doc.activeElement;\n if (!hasAttr(curElement, 'data-nav')) { return; }\n\n // var code = e.keyCode,\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\n navIndex = Number(getAttr(curElement, 'data-nav'));\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (navIndex > 0) { setFocus(navItems[navIndex - 1]); }\n } else if (keyIndex === 1) {\n if (navIndex < pages - 1) { setFocus(navItems[navIndex + 1]); }\n } else {\n navClicked = navIndex;\n goTo(navIndex, e);\n }\n }\n }\n\n function getEvent (e) {\n e = e || win.event;\n return isTouchEvent(e) ? e.changedTouches[0] : e;\n }\n function getTarget (e) {\n return e.target || win.event.srcElement;\n }\n\n function isTouchEvent (e) {\n return e.type.indexOf('touch') >= 0;\n }\n\n function preventDefaultBehavior (e) {\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\n }\n\n function getMoveDirectionExpected () {\n return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\n }\n\n function onPanStart (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n if (autoplay && animating) { stopAutoplayTimer(); }\n \n panStart = true;\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n\n var $ = getEvent(e);\n events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\n\n if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\n preventDefaultBehavior(e);\n }\n\n lastPosition.x = initPosition.x = $.clientX;\n lastPosition.y = initPosition.y = $.clientY;\n if (carousel) {\n translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\n resetDuration(container, '0s');\n }\n }\n\n function onPanMove (e) {\n if (panStart) {\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n\n if (carousel) {\n if (!rafIndex) { rafIndex = raf(function(){ panUpdate(e); }); }\n } else {\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) { preventScroll = true; }\n }\n\n if (preventScroll) { e.preventDefault(); }\n }\n }\n\n function panUpdate (e) {\n if (!moveDirectionExpected) {\n panStart = false;\n return;\n }\n caf(rafIndex);\n if (panStart) { rafIndex = raf(function(){ panUpdate(e); }); }\n\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) {\n if (!preventScroll && isTouchEvent(e)) { preventScroll = true; }\n\n try {\n if (e.type) { events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e)); }\n } catch(err) {}\n\n var x = translateInit,\n dist = getDist(lastPosition, initPosition);\n if (!horizontal || fixedWidth || autoWidth) {\n x += dist;\n x += 'px';\n } else {\n var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew): dist * 100 / (viewport + gutter);\n x += percentageX;\n x += '%';\n }\n\n container.style[transformAttr] = transformPrefix + x + transformPostfix;\n }\n }\n\n function onPanEnd (e) {\n if (panStart) {\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n if (carousel) { resetDuration(container, ''); }\n panStart = false;\n\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n var dist = getDist(lastPosition, initPosition);\n\n if (Math.abs(dist)) {\n // drag vs click\n if (!isTouchEvent(e)) {\n // prevent \"click\"\n var target = getTarget(e);\n addEvents(target, {'click': function preventClick (e) {\n preventDefaultBehavior(e);\n removeEvents(target, {'click': preventClick});\n }}); \n }\n\n if (carousel) {\n rafIndex = raf(function() {\n if (horizontal && !autoWidth) {\n var indexMoved = - dist * items / (viewport + gutter);\n indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\n index += indexMoved;\n } else {\n var moved = - (translateInit + dist);\n if (moved <= 0) {\n index = indexMin;\n } else if (moved >= slidePositions[slideCountNew - 1]) {\n index = indexMax;\n } else {\n var i = 0;\n while (i < slideCountNew && moved >= slidePositions[i]) {\n index = i;\n if (moved > slidePositions[i] && dist < 0) { index += 1; }\n i++;\n }\n }\n }\n\n render(e, dist);\n events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\n });\n } else {\n if (moveDirectionExpected) {\n onControlsClick(e, dist > 0 ? -1 : 1);\n }\n }\n }\n }\n\n // reset\n if (options.preventScrollOnTouch === 'auto') { preventScroll = false; }\n if (swipeAngle) { moveDirectionExpected = '?'; } \n if (autoplay && !animating) { setAutoplayTimer(); }\n }\n\n // === RESIZE FUNCTIONS === //\n // (slidePositions, index, items) => vertical_conentWrapper.height\n function updateContentWrapperHeight () {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\n }\n\n function getPages () {\n var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\n return Math.min(Math.ceil(rough), slideCount);\n }\n\n /*\n * 1. update visible nav items list\n * 2. add \"hidden\" attributes to previous visible nav items\n * 3. remove \"hidden\" attrubutes to new visible nav items\n */\n function updateNavVisibility () {\n if (!nav || navAsThumbnails) { return; }\n\n if (pages !== pagesCached) {\n var min = pagesCached,\n max = pages,\n fn = showElement;\n\n if (pagesCached > pages) {\n min = pages;\n max = pagesCached;\n fn = hideElement;\n }\n\n while (min < max) {\n fn(navItems[min]);\n min++;\n }\n\n // cache pages\n pagesCached = pages;\n }\n }\n\n function info (e) {\n return {\n container: container,\n slideItems: slideItems,\n navContainer: navContainer,\n navItems: navItems,\n controlsContainer: controlsContainer,\n hasControls: hasControls,\n prevButton: prevButton,\n nextButton: nextButton,\n items: items,\n slideBy: slideBy,\n cloneCount: cloneCount,\n slideCount: slideCount,\n slideCountNew: slideCountNew,\n index: index,\n indexCached: indexCached,\n displayIndex: getCurrentSlide(),\n navCurrentIndex: navCurrentIndex,\n navCurrentIndexCached: navCurrentIndexCached,\n pages: pages,\n pagesCached: pagesCached,\n sheet: sheet,\n isOn: isOn,\n event: e || {},\n };\n }\n\n return {\n version: '2.9.2',\n getInfo: info,\n events: events,\n goTo: goTo,\n play: play,\n pause: pause,\n isOn: isOn,\n updateSliderHeight: updateInnerWrapperHeight,\n refresh: initSliderTransform,\n destroy: destroy,\n rebuild: function() {\n return tns(extend(options, optionsElements));\n }\n };\n};\n","// get css-calc \n// @return - false | calc | -webkit-calc | -moz-calc\n// @usage - var calc = getCalc(); \nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function calc() {\n var doc = document, \n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'), \n result = false;\n\n body.appendChild(div);\n try {\n var str = '(10px * 10)',\n vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n val;\n for (var i = 0; i < 3; i++) {\n val = vals[i];\n div.style.width = val;\n if (div.offsetWidth === 100) { \n result = val.replace(str, ''); \n break;\n }\n }\n } catch (e) {}\n \n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return result;\n}","// get subpixel support value\n// @return - boolean\nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function percentageLayout() {\n // check subpixel layout supporting\n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n wrapper = doc.createElement('div'),\n outer = doc.createElement('div'),\n str = '',\n count = 70,\n perPage = 3,\n supported = false;\n\n wrapper.className = \"tns-t-subp2\";\n outer.className = \"tns-t-ct\";\n\n for (var i = 0; i < count; i++) {\n str += '
';\n }\n\n outer.innerHTML = str;\n wrapper.appendChild(outer);\n body.appendChild(wrapper);\n\n supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n\n body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n\n return supported;\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function mediaquerySupport () {\n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'),\n style = doc.createElement('style'),\n rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\n position;\n\n style.type = 'text/css';\n div.className = 'tns-mq-test';\n\n body.appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(doc.createTextNode(rule));\n }\n\n position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\n\n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return position === \"absolute\";\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function has3DTransforms(tf){\n if (!tf) { return false; }\n if (!window.getComputedStyle) { return false; }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n el = doc.createElement('p'),\n has3d,\n cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\n\n cssTF += 'transform';\n\n // Add it to the body to get the computed style\n body.insertBefore(el, null);\n\n el.style[tf] = 'translate3d(1px,1px,1px)';\n has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n\n body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n\n return (has3d !== undefined && has3d.length > 0 && has3d !== \"none\");\n}\n","export function getSlideId() {\n var id = window.tnsId;\n window.tnsId = !id ? 1 : id + 1;\n \n return 'tns' + window.tnsId;\n}","// create and append style sheet\nexport function createStyleSheet (media) {\n // Create the