{"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/aos/dist/aos.js","webpack:///./node_modules/picturefill/dist/picturefill.js","webpack:///./src/js/modules/share/sharer.js","webpack:///./src/js/modules/videos/autoresize.js","webpack:///./src/js/modules/galleries/photoswipe-markup.js","webpack:///./src/js/modules/galleries/cm-gallery.js","webpack:///./src/js/modules/hero/hero.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","pointerEnabled","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","pointerType","4","2","3","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","duration","removeAttribute","closeWithRaf","fadeEverything","src","loadError","miniImg","webkitBackfaceVisibility","initalBgOpacity","startAnimation","_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","p0","touch0","touch1","_isNearbyPoints","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","_setupHidingControlsDuringGestures","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","default","assign","u","f","g","offset","delay","disable","once","startEvent","throttleDelay","debounceDelay","disableMutationObserver","j","O","atob","mobile","phone","tablet","S","isSupported","console","info","querySelector","readyState","ready","refresh","refreshHard","_","M","TypeError","leading","maxWait","trailing","flush","valueOf","iterator","constructor","NaN","Function","toString","MutationObserver","WebKitMutationObserver","MozMutationObserver","addedNodes","removedNodes","concat","dataset","aos","observe","childList","subtree","opera","configurable","writable","substr","classList","remove","anchor","anchorPlacement","querySelectorAll","offsetHeight","offsetLeft","offsetTop","scrollLeft","offsetParent","map","HTMLPictureElement","$1","timer","dummySrc","fixRespimg","source","sizes","picture","cloneNode","firstElementChild","_pfLastSize","offsetWidth","findPictureImgs","imgs","onResize","mq","matchMedia","addListener","srcset","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","alreadyRun","regexLeadingSpaces","regexLeadingCommasOrSpaces","regexLeadingNotSpaces","regexTrailingCommas","regexNonNegativeInteger","regexFloatingPoint","on","evt","capture","attachEvent","memoize","cache","input","isSpace","evalCSS","regLength","buildStr","css","string","parsedLength","setResolution","candidate","sizesattr","cWidth","calcListLength","res","picturefill","opt","elements","plen","nodeType","context","qsa","reevaluate","reselect","sel","selShort","setupRun","fillImg","teardownRun","chooseLowRes","lowerValue","higherValue","dprValue","isCached","bonusFactor","bonus","meanDensity","pow","ascendingSort","getCandidateForSrc","set","candidates","parseSet","makeUrl","warn","implementation","hasFeature","supSrcset","supSizes","supPicture","image2","complete","width1","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","isValidNonNegativeSourceSizeValue","str","chrctr","component","componentArray","listArray","parenDepth","inComment","pushComponent","pushComponentArray","parseComponentValues","join","parseSizes","setRes","len","applySetCandidate","bestCandidate","curSrc","curCan","candidateSrc","abortCurSrc","imageData","dpr","sets","setSrcToCur","cached","sort","setSrc","origWidth","getSet","parseSets","element","parent","srcsetAttribute","imageSet","isWDescripor","srcsetParsed","hasPicture","pic","sources","getElementsByTagName","getAllSourceElements","supported","srcAttr","parsed","extreme","evaled","srcSetCandidates","matchingSet","evaluated","applyBestCandidate","vw","vh","em","rem","isDomReady","regReady","run","timerId","fillImgs","lastClientWidth","func","wait","timeout","timestamp","later","last","debounce","typeUri","Image","detectTypeSupport","Sharer","_classCallCheck","_shareLinks","shareLink","share","uiTitle","text","uiDesc","uiUrl","then","log","catch","error","nextElementSibling","contains","AutoResizeVideos","_this","autoresize_classCallCheck","_allVideos","aspectRatio","resizeVideoHeights","pswpMarkup","ContentModuleGallery","cm_gallery_classCallCheck","_galleries","_pswpEl","_galleryToggles","insertAdjacentHTML","_gallery","gallery","images","slides","srcLrg","srcMed","PhotoSwipe","PhotoSwipeUI_Default","toggle","parentElement","Hero","hero_classCallCheck","heroEl","lFollowX","lFollowY","friction","lMouseX","clientX","lMouseY","clientY","moveBackground","translate","webkitTransform","AOS"],"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 = 4);\n","/*! PhotoSwipe - v4.1.2 - 2017-04-05\n* http://photoswipe.com\n* Copyright (c) 2017 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 = navigator.pointerEnabled || 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.pointerEnabled) {\n\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\n\t\t\t\t} else {\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}\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.pointerEnabled) {\n\t\t\t\t\taddEventNames('pointer', 'down', 'move', 'up', 'cancel');\n\t\t\t\t} else {\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}\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.2 - 2017-04-05\n* http://photoswipe.com\n* Copyright (c) 2017 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","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.AOS=t():e.AOS=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p=\"dist/\",t(0)}([function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},M=function(){w.forEach(function(e,t){e.node.removeAttribute(\"data-aos\"),e.node.removeAttribute(\"data-aos-easing\"),e.node.removeAttribute(\"data-aos-duration\"),e.node.removeAttribute(\"data-aos-delay\")})},S=function(e){return e===!0||\"mobile\"===e&&p.default.mobile()||\"phone\"===e&&p.default.phone()||\"tablet\"===e&&p.default.tablet()||\"function\"==typeof e&&e()===!0},_=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?M():(x.disableMutationObserver||d.default.isSupported()||(console.info('\\n aos: MutationObserver is not supported on this browser,\\n code mutations observing has been disabled.\\n You may have to call \"refreshHard()\" by yourself.\\n '),x.disableMutationObserver=!0),document.querySelector(\"body\").setAttribute(\"data-aos-easing\",x.easing),document.querySelector(\"body\").setAttribute(\"data-aos-duration\",x.duration),document.querySelector(\"body\").setAttribute(\"data-aos-delay\",x.delay),\"DOMContentLoaded\"===x.startEvent&&[\"complete\",\"interactive\"].indexOf(document.readyState)>-1?j(!0):\"load\"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener(\"resize\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"orientationchange\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"scroll\",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||d.default.ready(\"[data-aos]\",O),w)};e.exports={init:_,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){\"use strict\";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(f,t),M?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=O();return c(e)?d(e):void(h=setTimeout(f,a(e)))}function d(e){return h=void 0,_&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),o(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,k=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(s);return t=u(t)||0,i(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?x(u(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if(\"function\"!=typeof e)throw new TypeError(s);return i(o)&&(r=\"leading\"in o?!!o.leading:r,a=\"trailing\"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t=\"undefined\"==typeof e?\"undefined\":c(e);return!!e&&(\"object\"==t||\"function\"==t)}function r(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":c(e))}function a(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":c(e))||r(e)&&k.call(e)==d}function u(e){if(\"number\"==typeof e)return e;if(a(e))return f;if(i(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(l,\"\");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?f:+e}var c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s=\"Expected a function\",f=NaN,d=\"[object Symbol]\",l=/^\\s+|\\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y=\"object\"==(\"undefined\"==typeof t?\"undefined\":c(t))&&t&&t.Object===Object&&t,g=\"object\"==(\"undefined\"==typeof self?\"undefined\":c(self))&&self&&self.Object===Object&&self,h=y||g||Function(\"return this\")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){\"use strict\";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(f,t),M?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function s(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=j();return s(e)?d(e):void(h=setTimeout(f,u(e)))}function d(e){return h=void 0,_&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=s(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),i(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,O=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?k(a(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e){var t=\"undefined\"==typeof e?\"undefined\":u(e);return!!e&&(\"object\"==t||\"function\"==t)}function i(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":u(e))}function r(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":u(e))||i(e)&&w.call(e)==f}function a(e){if(\"number\"==typeof e)return e;if(r(e))return s;if(o(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(d,\"\");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?s:+e}var u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c=\"Expected a function\",s=NaN,f=\"[object Symbol]\",d=/^\\s+|\\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v=\"object\"==(\"undefined\"==typeof t?\"undefined\":u(t))&&t&&t.Object===Object&&t,y=\"object\"==(\"undefined\"==typeof self?\"undefined\":u(self))&&self&&self.Object===Object&&self,g=v||y||Function(\"return this\")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){\"use strict\";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;te.position?e.node.classList.add(\"aos-animate\"):\"undefined\"!=typeof o&&(\"false\"===o||!n&&\"true\"!==o)&&e.node.classList.remove(\"aos-animate\")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add(\"aos-init\"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute(\"data-aos-offset\"),anchor:e.getAttribute(\"data-aos-anchor\"),anchorPlacement:e.getAttribute(\"data-aos-anchor-placement\")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case\"top-bottom\":break;case\"center-bottom\":n+=e.offsetHeight/2;break;case\"bottom-bottom\":n+=e.offsetHeight;break;case\"top-center\":n+=i/2;break;case\"bottom-center\":n+=i/2+e.offsetHeight;break;case\"center-center\":n+=i/2+e.offsetHeight/2;break;case\"top-top\":n+=i;break;case\"bottom-top\":n+=e.offsetHeight+i;break;case\"center-top\":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-(\"BODY\"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-(\"BODY\"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){return e=e||document.querySelectorAll(\"[data-aos]\"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=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","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","class AutoResizeVideos {\r\n constructor() {\r\n this._allVideos = Array.from(document.querySelectorAll(\"iframe[src*='//www.youtube.com']\"));\r\n\r\n this._allVideos.forEach((el) => {\r\n el.dataset.aspectRatio = el.height / el.width;\r\n el.width = \"100%\";\r\n el.height = el.clientWidth * el.dataset.aspectRatio;\r\n });\r\n\r\n this.resizeVideoHeights();\r\n \r\n window.addEventListener('resize', () => this.resizeVideoHeights());\r\n }\r\n\r\n resizeVideoHeights() {\r\n this._allVideos.forEach((el) => {\r\n el.height = el.clientWidth * el.dataset.aspectRatio;\r\n });\r\n }\r\n}\r\n\r\nexport default new AutoResizeVideos();\r\n","const pswpMarkup = `\r\n
\r\n\r\n\t\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 constructor() {\r\n this._galleries = Array.from(document.querySelectorAll('[data-ncomponent=\"gallery\"]'));\r\n this._pswpEl = document.querySelector('.pswp');\r\n this._galleryToggles = Array.from(document.querySelectorAll('[data-ntoggle=\"gallery\"]'));\r\n\r\n if (this._galleries.length > 0 && !this._pswpEl)\r\n {\r\n document.body.insertAdjacentHTML('beforeend', pswpMarkup);\r\n this._pswpEl = document.querySelector('.pswp');\r\n }\r\n\r\n if (this._galleries.length > 0 && this._pswpEl)\r\n {\r\n this._gallery = null;\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n this._galleries.forEach((gallery) => {\r\n const images = Array.from(gallery.querySelectorAll('[data-nelement=\"gallery-img\"]'));\r\n \r\n // Create a slide object from this gallery image element\r\n const slides = images.map((img) => \r\n {\r\n return {\r\n src: img.dataset.srcLrg,\r\n msrc: img.dataset.srcMed,\r\n w: img.dataset.size.split('x')[0],\r\n h: img.dataset.size.split('x')[1]\r\n }\r\n });\r\n\r\n images.forEach((img) => {\r\n // Add a click event listener to this gallery image element\r\n img.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n\r\n let options = {\r\n bgOpacity: 0.9,\r\n showHideOpacity: true,\r\n index: images.indexOf(img)\r\n };\r\n\r\n this._gallery = new PhotoSwipe(this._pswpEl, PhotoSwipeUI_Default, slides, options);\r\n\r\n this._gallery.init();\r\n });\r\n });\r\n });\r\n\r\n // Register events on gallery open toggles\r\n this._galleryToggles.forEach((toggle) => {\r\n toggle.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n console.log(toggle.parentElement);\r\n toggle.parentElement.parentElement.querySelector('[data-nelement=\"gallery-img\"]').click();\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport default new ContentModuleGallery;\r\n","class Hero {\r\n constructor() {\r\n this.heroEl = document.querySelector('[data-nelement=\"hero-shape\"]');\r\n this.lFollowX = 0;\r\n this.lFollowY = 0;\r\n this.x = 0;\r\n this.y = 0;\r\n this.friction = 1 / 30;\r\n if (this.heroEl) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n document.addEventListener('mousemove', (e) => {\r\n const lMouseX = Math.max(-100, Math.min(100, window.innerWidth / 2 - e.clientX));\r\n const lMouseY = Math.max(-100, Math.min(100, window.innerHeight / 2 - e.clientY));\r\n\r\n this.lFollowX = (20 * lMouseX) / 100; // 100 : 12 = lMouxeX : lFollow\r\n this.lFollowY = (10 * lMouseY) / 100;\r\n });\r\n\r\n this.moveBackground();\r\n }\r\n\r\n moveBackground() {\r\n this.x += (this.lFollowX - this.x) * this.friction;\r\n this.y += (this.lFollowY - this.y) * this.friction;\r\n\r\n const translate = 'translate(' + this.x + 'px, ' + this.y + 'px) scale(1.1)';\r\n\r\n this.heroEl.style.transform = translate;\r\n this.heroEl.style.webkitTransform = translate;\r\n\r\n window.requestAnimationFrame(this.moveBackground.bind(this));\r\n }\r\n}\r\n\r\nexport default new Hero();\r\n","import Sharer from './modules/share/sharer';\r\nimport AutoResizeVideos from './modules/videos/autoresize';\r\nimport ContentModuleGallery from './modules/galleries/cm-gallery';\r\nimport Hero from './modules/hero/hero';\r\nimport 'picturefill';\r\nimport AOS from 'aos';\r\n\r\n// Picture element HTML5 shiv\r\ndocument.createElement(\"picture\");\r\n\r\nAOS.init({\r\n duration: 750\r\n});\r\n"],"sourceRoot":""}