{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/siema/dist/siema.min.js","webpack:///./node_modules/photoswipe/dist/photoswipe.js","webpack:///./node_modules/photoswipe/dist/photoswipe-ui-default.js","webpack:///./src/js/modules/share/sharer.js","webpack:///./src/js/modules/videos/autoresize.js","webpack:///./src/js/modules/search/search-form.js","webpack:///./src/js/modules/carousels/dot-carousels.js","webpack:///./src/js/modules/galleries/photoswipe-markup.js","webpack:///./src/js/modules/galleries/cm-gallery.js","webpack:///./src/js/modules/carousels/vertical-slider.js","webpack:///./src/js/utils/math/step-rounding.js","webpack:///./src/js/modules/mooring-calc/mooring-calc.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","self","e","configurable","default","iterator","constructor","length","writable","this","TypeError","config","mergeSettings","selector","document","querySelector","Error","resolveSlidesNumber","selectorWidth","offsetWidth","innerElements","slice","children","currentSlide","loop","startIndex","Math","max","min","perPage","transformProperty","webkitOrNot","forEach","init","window","addEventListener","resizeHandler","draggable","pointerDown","drag","startX","endX","startY","letItGo","preventClick","touchstartHandler","touchendHandler","touchmoveHandler","mousedownHandler","mouseupHandler","mouseleaveHandler","mousemoveHandler","clickHandler","removeEventListener","attachEvents","style","overflow","direction","rtl","buildSliderFrame","onInit","sliderFrame","createElement","width","enableTransition","cursor","createDocumentFragment","buildSliderFrameItem","cloneNode","appendChild","a","innerHTML","slideToCurrent","cssFloat","float","innerWidth","arguments","disableTransition","onChange","webkitTransition","easing","transition","duration","requestAnimationFrame","abs","multipleDrag","ceil","threshold","prev","next","indexOf","target","nodeName","stopPropagation","touches","pageX","pageY","updateAfterDrag","clearDrag","preventDefault","splice","insert","detachEvents","removeAttribute","documentElement","transform","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","undefined","template","UiClass","items","options","framework","features","type","listener","unbind","methodName","split","isArray","obj","Array","createEl","classes","tag","el","className","getScrollY","yOffset","pageYOffset","scrollTop","removeClass","reg","RegExp","replace","addClass","hasClass","test","getChildByClass","parentEl","childClassName","node","firstChild","nextSibling","arraySearch","array","extend","o1","o2","preventOverwrite","prop","sine","out","k","sin","PI","inOut","cos","cubic","detectFeatures","helperEl","helperStyle","vendor","oldIE","all","touch","raf","caf","cancelAnimationFrame","pointerEvent","navigator","pointerEnabled","msPointerEnabled","ua","userAgent","platform","v","match","parseInt","isOldIOSPhone","androidversion","parseFloat","isOldAndroid","androidVersion","isMobileOpera","styleCheckItem","styleName","styleChecks","vendors","charAt","toUpperCase","toLowerCase","lastTime","fn","currTime","Date","getTime","timeToCall","id","setTimeout","clearTimeout","svg","createElementNS","createSVGRect","evName","_handleEv","handleEvent","_options","allowPanToNext","spacing","bgOpacity","mouseUsed","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","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","_onKeyDown","keydownAction","keyCode","ctrlKey","altKey","shiftKey","metaKey","returnValue","_onGlobalClick","_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","scrollWrap","itemHolders","wrap","display","allow3dTransform","perspective","left","zoomRatio","h","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","updateCurrZoomItem","emulateSetContent","zoomElement","center","invalidateCurrItems","needsUpdate","beforeAnimation","tempHolder","diffAbs","NUM_HOLDERS","pop","unshift","prevItem","windowScrollY","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","parentNode","_preventObj","_preventDefaultEventBehaviour","isDown","prevent","_convertTouchToPoint","identifier","_findCenterOfPoints","pCenter","_calculateVerticalDragOpacityRatio","_ePoint1","_ePoint2","_tempPointsArr","_getTouchPoints","_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","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","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","loaded","placeholder","_preloadImage","loading","loadComplete","onload","onerror","_checkForError","cleanUp","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","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","_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","Sharer","_classCallCheck","_shareLinks","querySelectorAll","shareLink","share","dataset","uiTitle","text","uiDesc","uiUrl","then","console","log","catch","error","classList","nextElementSibling","contains","remove","AutoResizeVideos","_this","autoresize_classCallCheck","_allVideos","aspectRatio","resizeVideoHeights","SearchForm","search_form_classCallCheck","SearchCheckbox","toggleSearch","checked","siema_min_default","addPagination","cb","dotNavEl","_loop","btn","DotCarousels","dot_carousels_classCallCheck","_selector","_els","_this2","createCarousel","carouselDots","dot","photoswipe_markup","pswpMarkup","ContentModuleGallery","cm_gallery_classCallCheck","_galleries","_pswpEl","_galleryToggles","body","insertAdjacentHTML","_gallery","gallery","images","slides","map","srcLrg","srcMed","size","photoswipe_default","photoswipe_ui_default_default","toggle","parentElement","VerticalSlider","vertical_slider_classCallCheck","verticalSliders","verticalSlider","radios","upBtn","downBtn","verticalSliderInner","verticalSliderItems","pct","radio","offset","slidenum","currentCheckedRadio","currentSlideNum","initEvent","step_rounding","step","inv","MooringCalc","mooring_calc_classCallCheck","calcComponentEl","pricePerMeterPerYear","ppm","lengthInput","costEl","durationSelect","boatMinLength","boatMaxLength","calculateCost","validateLength","cost","textContent","toLocaleString","currency"],"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 = 3);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"Siema\",[],t):\"object\"==typeof exports?exports.Siema=t():e.Siema=t()}(\"undefined\"!=typeof self?self:this,function(){return function(e){function t(r){if(i[r])return i[r].exports;var n=i[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var i={};return t.m=e,t.c=i,t.d=function(e,i,r){t.o(e,i)||Object.defineProperty(e,i,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var i=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(i,\"a\",i),i},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=0)}([function(e,t,i){\"use strict\";function r(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(t,\"__esModule\",{value:!0});var n=\"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=function(){function e(e,t){for(var i=0;i=e&&(this.perPage=this.config.perPage[e])}}},{key:\"prev\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments[1];if(!(this.innerElements.length<=this.perPage)){var i=this.currentSlide;if(this.config.loop){if(this.currentSlide-e<0){this.disableTransition();var r=this.currentSlide+this.innerElements.length,n=this.perPage,s=r+n,l=(this.config.rtl?1:-1)*s*(this.selectorWidth/this.perPage),o=this.config.draggable?this.drag.endX-this.drag.startX:0;this.sliderFrame.style[this.transformProperty]=\"translate3d(\"+(l+o)+\"px, 0, 0)\",this.currentSlide=r-e}else this.currentSlide=this.currentSlide-e}else this.currentSlide=Math.max(this.currentSlide-e,0);i!==this.currentSlide&&(this.slideToCurrent(this.config.loop),this.config.onChange.call(this),t&&t.call(this))}}},{key:\"next\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments[1];if(!(this.innerElements.length<=this.perPage)){var i=this.currentSlide;if(this.config.loop){if(this.currentSlide+e>this.innerElements.length-this.perPage){this.disableTransition();var r=this.currentSlide-this.innerElements.length,n=this.perPage,s=r+n,l=(this.config.rtl?1:-1)*s*(this.selectorWidth/this.perPage),o=this.config.draggable?this.drag.endX-this.drag.startX:0;this.sliderFrame.style[this.transformProperty]=\"translate3d(\"+(l+o)+\"px, 0, 0)\",this.currentSlide=r+e}else this.currentSlide=this.currentSlide+e}else this.currentSlide=Math.min(this.currentSlide+e,this.innerElements.length-this.perPage);i!==this.currentSlide&&(this.slideToCurrent(this.config.loop),this.config.onChange.call(this),t&&t.call(this))}}},{key:\"disableTransition\",value:function(){this.sliderFrame.style.webkitTransition=\"all 0ms \"+this.config.easing,this.sliderFrame.style.transition=\"all 0ms \"+this.config.easing}},{key:\"enableTransition\",value:function(){this.sliderFrame.style.webkitTransition=\"all \"+this.config.duration+\"ms \"+this.config.easing,this.sliderFrame.style.transition=\"all \"+this.config.duration+\"ms \"+this.config.easing}},{key:\"goTo\",value:function(e,t){if(!(this.innerElements.length<=this.perPage)){var i=this.currentSlide;this.currentSlide=this.config.loop?e%this.innerElements.length:Math.min(Math.max(e,0),this.innerElements.length-this.perPage),i!==this.currentSlide&&(this.slideToCurrent(),this.config.onChange.call(this),t&&t.call(this))}}},{key:\"slideToCurrent\",value:function(e){var t=this,i=this.config.loop?this.currentSlide+this.perPage:this.currentSlide,r=(this.config.rtl?1:-1)*i*(this.selectorWidth/this.perPage);e?requestAnimationFrame(function(){requestAnimationFrame(function(){t.enableTransition(),t.sliderFrame.style[t.transformProperty]=\"translate3d(\"+r+\"px, 0, 0)\"})}):this.sliderFrame.style[this.transformProperty]=\"translate3d(\"+r+\"px, 0, 0)\"}},{key:\"updateAfterDrag\",value:function(){var e=(this.config.rtl?-1:1)*(this.drag.endX-this.drag.startX),t=Math.abs(e),i=this.config.multipleDrag?Math.ceil(t/(this.selectorWidth/this.perPage)):1,r=e>0&&this.currentSlide-i<0,n=e<0&&this.currentSlide+i>this.innerElements.length-this.perPage;e>0&&t>this.config.threshold&&this.innerElements.length>this.perPage?this.prev(i):e<0&&t>this.config.threshold&&this.innerElements.length>this.perPage&&this.next(i),this.slideToCurrent(r||n)}},{key:\"resizeHandler\",value:function(){this.resolveSlidesNumber(),this.currentSlide+this.perPage>this.innerElements.length&&(this.currentSlide=this.innerElements.length<=this.perPage?0:this.innerElements.length-this.perPage),this.selectorWidth=this.selector.offsetWidth,this.buildSliderFrame()}},{key:\"clearDrag\",value:function(){this.drag={startX:0,endX:0,startY:0,letItGo:null,preventClick:this.drag.preventClick}}},{key:\"touchstartHandler\",value:function(e){-1!==[\"TEXTAREA\",\"OPTION\",\"INPUT\",\"SELECT\"].indexOf(e.target.nodeName)||(e.stopPropagation(),this.pointerDown=!0,this.drag.startX=e.touches[0].pageX,this.drag.startY=e.touches[0].pageY)}},{key:\"touchendHandler\",value:function(e){e.stopPropagation(),this.pointerDown=!1,this.enableTransition(),this.drag.endX&&this.updateAfterDrag(),this.clearDrag()}},{key:\"touchmoveHandler\",value:function(e){if(e.stopPropagation(),null===this.drag.letItGo&&(this.drag.letItGo=Math.abs(this.drag.startY-e.touches[0].pageY)=this.innerElements.length)throw new Error(\"Item to remove doesn't exist 😭\");var i=ethis.innerElements.length+1)throw new Error(\"Unable to inset it at this index 😭\");if(-1!==this.innerElements.indexOf(e))throw new Error(\"The same item in a carousel? Really? Nope 😭\");var r=t<=this.currentSlide>0&&this.innerElements.length;this.currentSlide=r?this.currentSlide+1:this.currentSlide,this.innerElements.splice(t,0,e),this.buildSliderFrame(),i&&i.call(this)}},{key:\"prepend\",value:function(e,t){this.insert(e,0),t&&t.call(this)}},{key:\"append\",value:function(e,t){this.insert(e,this.innerElements.length+1),t&&t.call(this)}},{key:\"destroy\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments[1];if(this.detachEvents(),this.selector.style.cursor=\"auto\",e){for(var i=document.createDocumentFragment(),r=0;r>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","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","class SearchForm {\r\n constructor() {\r\n this.SearchCheckbox = document.querySelector('[data-ntoggle=\"search\"]');\r\n\r\n if (this.SearchCheckbox) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n this.SearchCheckbox.addEventListener('change', (e) => this.toggleSearch(e));\r\n }\r\n\r\n toggleSearch(e) {\r\n if (e.target.checked) {\r\n document.querySelector('[data-ninput=\"search\"]').focus();\r\n }\r\n }\r\n}\r\n\r\nexport default new SearchForm();\r\n","import Siema from 'siema';\r\n\r\n// Add a function that generates pagination to prototype\r\nSiema.prototype.addPagination = function(cb) {\r\n const dotNavEl = document.createElement('div');\r\n dotNavEl.classList.add('dot-nav');\r\n this.selector.appendChild(dotNavEl);\r\n\r\n for (let i = 0; i < this.innerElements.length; i++) {\r\n const btn = document.createElement('a');\r\n btn.classList.add('carousel-dot');\r\n if (i == 0)\r\n {\r\n btn.classList.add('active');\r\n }\r\n btn.addEventListener('click', () => {\r\n this.goTo(i);\r\n });\r\n dotNavEl.appendChild(btn);\r\n }\r\n}\r\n\r\nclass DotCarousels {\r\n constructor () {\r\n this._selector = '[data-ncomponent=\"dot-carousel\"]';\r\n this._els = Array.from(document.querySelectorAll(this._selector));\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (this._els.length > 0) {\r\n this._els.forEach((el) => this.createCarousel(el));\r\n }\r\n }\r\n\r\n createCarousel(el) {\r\n const carousel = new Siema({\r\n selector: this._selector,\r\n duration: 200,\r\n easing: 'ease-out',\r\n perPage: 1,\r\n startIndex: 0,\r\n draggable: true,\r\n threshold: 10,\r\n loop: false,\r\n onInit: function() {\r\n // Trigger pagination creator\r\n this.addPagination(function(value) {\r\n\r\n });\r\n },\r\n onChange: function() {\r\n const carouselDots = Array.from(el.querySelectorAll('.carousel-dot'));\r\n // Remove active classes then add .active to the new active el\r\n carouselDots.forEach((dot) => dot.classList.remove('active'));\r\n carouselDots[this.currentSlide].classList.add('active');\r\n }\r\n });\r\n\r\n \r\n }\r\n}\r\n\r\nexport default new DotCarousels();\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 VerticalSlider {\r\n constructor() {\r\n this.verticalSliders = Array.from(document.querySelectorAll('[data-ncomponent=\"vertical-slider\"]'));\r\n\r\n if ( this.verticalSliders.length> 0) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n this.verticalSliders.forEach((verticalSlider) => {\r\n const radios = Array.from(verticalSlider.querySelectorAll('input[name=\"vertical-slidenum\"]'));\r\n const upBtn = verticalSlider.querySelector('[data-nelement=\"vertical-slider-up\"]');\r\n const downBtn = verticalSlider.querySelector('[data-nelement=\"vertical-slider-down\"]');\r\n const verticalSliderInner = verticalSlider.querySelector('.vertical-slider-inner');\r\n const verticalSliderItems = Array.from(verticalSlider.querySelectorAll('.vertical-slider-item'));\r\n const pct = 100 / verticalSliderItems.length;\r\n\r\n radios.forEach((radio) => {\r\n radio.addEventListener('change', () => {\r\n const offset = radio.dataset.slidenum * pct;\r\n console.log(`translateY(-${offset}%)`);\r\n verticalSliderInner.style.transform = `translateY(-${offset}%)`;\r\n });\r\n });\r\n\r\n upBtn.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n const currentCheckedRadio = verticalSlider.querySelector('input[name=\"vertical-slidenum\"]:checked');\r\n const currentSlideNum = parseInt(currentCheckedRadio.dataset.slidenum);\r\n\r\n if (currentSlideNum == 0) {\r\n return;\r\n }\r\n\r\n radios[currentSlideNum - 1].checked = true;\r\n\r\n // Have to manually fire the change event on the radio element\r\n const event = document.createEvent(\"HTMLEvents\");\r\n event.initEvent('change', false, true);\r\n radios[currentSlideNum - 1].dispatchEvent(event);\r\n });\r\n\r\n downBtn.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n const currentCheckedRadio = verticalSlider.querySelector('input[name=\"vertical-slidenum\"]:checked');\r\n const currentSlideNum = parseInt(currentCheckedRadio.dataset.slidenum);\r\n \r\n if (currentSlideNum >= verticalSliderItems.length - 1) {\r\n return;\r\n }\r\n\r\n radios[currentSlideNum + 1].checked = true;\r\n\r\n // Have to manually fire the change event on the radio element\r\n const event = document.createEvent(\"HTMLEvents\");\r\n event.initEvent('change', false, true);\r\n radios[currentSlideNum + 1].dispatchEvent(event);\r\n });\r\n })\r\n }\r\n}\r\n\r\nexport default new VerticalSlider();\r\n","function stepRound(value, step) {\r\n step || (step = 1.0);\r\n var inv = 1.0 / step;\r\n return Math.ceil(value * inv) / inv;\r\n}\r\n\r\nexport default stepRound;\r\n","import stepRound from '../../utils/math/step-rounding';\r\n\r\nclass MooringCalc {\r\n constructor() {\r\n this.calcComponentEl = document.querySelector('[data-ncomponent=\"mooring-calc\"]');\r\n\r\n if (this.calcComponentEl) {\r\n this.init();\r\n }\r\n }\r\n\r\n init() {\r\n this.pricePerMeterPerYear = parseFloat(this.calcComponentEl.dataset.ppm);\r\n this.lengthInput = this.calcComponentEl.querySelector('[data-ninput=\"mooring-length\"]');\r\n this.costEl = this.calcComponentEl.querySelector('[data-nvalue=\"mooring-cost\"]');\r\n this.durationSelect = this.calcComponentEl.querySelector('[data-ninput=\"mooring-duration\"]');\r\n this.boatMinLength = parseFloat(this.lengthInput.min);\r\n this.boatMaxLength = parseFloat(this.lengthInput.max);\r\n\r\n this.lengthInput.addEventListener('input', () => { this.calculateCost() });\r\n\r\n if (this.durationSelect) {\r\n this.durationSelect.addEventListener('input', () => { this.calculateCost() });\r\n }\r\n }\r\n\r\n calculateCost() {\r\n if (this.lengthInput.value == 0 || isNaN(this.lengthInput.value)) {\r\n return;\r\n }\r\n\r\n const length = this.validateLength();\r\n let pricePerMeterPerYear = this.pricePerMeterPerYear;\r\n let cost = 0;\r\n\r\n if (this.durationSelect && this.durationSelect.value == 6) {\r\n pricePerMeterPerYear = pricePerMeterPerYear/2;\r\n cost = (length * pricePerMeterPerYear) * 1.1;\r\n }\r\n else {\r\n cost = length * pricePerMeterPerYear;\r\n }\r\n\r\n this.costEl.textContent = (cost).toLocaleString('en-GB', {\r\n style: 'currency',\r\n currency: 'GBP',\r\n });\r\n }\r\n\r\n validateLength() {\r\n let length = this.lengthInput.value;\r\n\r\n length = stepRound(length, 0.25);\r\n //this.lengthInput.value = length;\r\n\r\n length = length >= this.boatMinLength ? length : this.boatMinLength;\r\n\r\n if (length > this.boatMaxLength) {\r\n length = this.boatMaxLength;\r\n this.lengthInput.value = length;\r\n }\r\n\r\n return length;\r\n }\r\n}\r\n\r\nexport default new MooringCalc();\r\n"],"sourceRoot":""}