{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es.parse-float.js","webpack:///./node_modules/core-js/internals/number-parse-float.js","webpack:///./FrontEnd/scripts/vendors/libs/fancybox/dist/jquery.fancybox.js"],"names":["$","$parseFloat","global","forced","parseFloat","fails","uncurryThis","toString","trim","whitespaces","charAt","Symbol","ITERATOR","iterator","FORCED","Object","module","exports","string","trimmedString","result","window","document","undefined","console","info","stuff","fn","fancybox","div","$pressed","defaults","closeExisting","loop","gutter","keyboard","preventCaptionOverlap","arrows","infobar","smallBtn","toolbar","buttons","idleTime","protect","modal","image","preload","ajax","settings","data","iframe","tpl","css","attr","scrolling","video","format","autoStart","defaultType","animationEffect","animationDuration","zoomOpacity","transitionEffect","transitionDuration","slideClass","baseClass","baseTpl","spinnerTpl","errorTpl","btnTpl","download","zoom","close","arrowLeft","arrowRight","parentEl","hideScrollbar","autoFocus","backFocus","trapFocus","fullScreen","touch","vertical","momentum","hash","media","slideShow","speed","thumbs","hideOnClose","axis","wheel","onInit","noop","beforeLoad","afterLoad","beforeShow","afterShow","beforeClose","afterClose","onActivate","onDeactivate","clickContent","current","event","type","clickSlide","clickOutside","dblclickContent","dblclickSlide","dblclickOutside","mobile","lang","i18n","en","CLOSE","NEXT","PREV","ERROR","PLAY_START","PLAY_STOP","FULL_SCREEN","THUMBS","DOWNLOAD","SHARE","ZOOM","de","$W","$D","called","requestAFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","callback","setTimeout","cancelAFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","id","clearTimeout","transitionEnd","t","el","createElement","transitions","transition","OTransition","MozTransition","WebkitTransition","style","forceRedraw","$el","length","offsetHeight","mergeOpts","opts1","opts2","rez","extend","each","key","value","isArray","FancyBox","content","opts","index","this","isPlainObject","isMobile","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","group","slides","addContent","init","prototype","$container","buttonStr","self","firstItemOpts","addClass","getInstance","body","scrollHeight","innerHeight","append","innerWidth","documentElement","clientWidth","translate","replace","appendTo","$refs","container","forEach","item","find","trigger","activate","jumpTo","obj","str","arr","match","n","items","makeArray","i","$item","found","src","srcParts","options","$orig","contentType","inArray","$thumb","$trigger","thumb","caption","apply","split","shift","filter","push","keys","updateControls","Thumbs","isActive","create","focus","addEvents","removeEvents","on","e","stopPropagation","preventDefault","previous","next","isScaledDown","originalEvent","requestId","update","stage","hide","show","keycode","keyCode","which","ctrlKey","altKey","shiftKey","target","is","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","isDragging","hideControls","off","clearInterval","duration","pos","isMoved","slidePos","stagePos","prop","diff","groupLen","isClosing","isAnimating","createSlide","forcedDuration","isNumeric","$slide","loadSlide","getTranslate","slide","stop","isComplete","removeClass","left","width","className","join","leftPos","setTranslate","top","animate","transform","opacity","complete","isLoaded","revealContent","updateSlide","scaleToActual","x","y","imgPos","posX","posY","scaleX","scaleY","$content","canvasWidth","canvasHeight","height","newImgWidth","newImgHeight","hasError","updateCursor","SlideShow","scaleToFit","end","getFitPos","maxWidth","maxHeight","minRatio","aspectRatio","Math","min","floor","ratio","adjustCaption","adjustLayout","add","navigation","toggleClass","get","clientHeight","centerSlide","siblings","parent","children","hasClass","abs","nextWidth","nextHeight","canPan","isZoomable","Guestures","isFunction","fitPos","ajaxLoad","isLoading","setImage","setIframe","setContent","videoFormat","setError","showLoading","url","success","textStatus","error","jqXHR","one","abort","ghost","$img","$image","checkSrcset","onerror","remove","$ghost","onload","setBigImage","temp","pxRatio","windowWidth","srcset","devicePixelRatio","map","ret","substring","postfix","sort","a","b","j","img","sizes","resolveImageSlideSize","naturalWidth","naturalHeight","round","max","hideLoading","readyState","imgWidth","imgHeight","$iframe","Date","getTime","isReady","$body","frameWidth","frameHeight","contents","ignore","ceil","outerWidth","outerHeight","unbind","empty","isRevealed","hasOwnProperty","parents","$placeholder","insertAfter","html","after","$smallBtn","wrap","first","wrapInner","$spinner","fadeIn","button","$clone","preventOverlap","$caption","captionH","clone","eq","marginBottom","inlinePadding","actualPadding","disableLayoutFix","effect","effectClassName","start","getThumbPos","thumbPos","btw","brw","bbw","blw","elem","elemCenter","ownerDocument","getBoundingClientRect","offsetWidth","elementFromPoint","Document","exitFullscreen","webkitExitFullscreen","scrollTop","scrollLeft","prev","focusableItems","focusedItemIndex","focusableStr","activeElement","instance","isVisible","d","domRect","done","cleanUp","$focus","scrollX","scrollY","name","args","Array","slice","call","arguments","unshift","hasHiddenControls","andCaption","toggleControls","version","command","open","all","destroy","test","navigator","userAgent","use3d","getComputedStyle","getPropertyValue","documentMode","props","position","to","leaveAnimationName","from","propertyName","callCallback","selector","_run","$target","isDefaultPrevented","currentTarget","jQuery","getPointerXY","touches","changedTouches","pageX","pageY","clientX","clientY","distance","point2","point1","what","sqrt","pow","isClickable","onclick","atts","attributes","nodeName","substr","isScrollable","overflowY","overflowX","horizontal","scrollWidth","$bg","bg","$stage","proxy","tapped","ontouchstart","isTouchDevice","offset","realPoints","startPoints","startEvent","canTap","isPanning","isSwiping","isZooming","isScrolling","startTime","distanceX","distanceY","contentLastPos","contentStartPos","sliderStartPos","addEventListener","onscroll","centerPointStartX","centerPointStartY","percentageOfImageAtPinchPointX","percentageOfImageAtPinchPointY","startDistanceBetweenFingers","removeEventListener","ontouchmove","newPoints","onSwipe","onPan","onZoom","ontouchend","angle","swiping","sliderLastPos","atan2","PI","limitMovement","minTranslateX","minTranslateY","maxTranslateX","maxTranslateY","newOffsetX","newOffsetY","currentOffsetX","currentOffsetY","currentWidth","currentHeight","limitPosition","newWidth","newHeight","pinchRatio","translateFromZoomingX","translateFromZoomingY","centerPointEndX","centerPointEndY","translateFromTranslatingX","newPos","panning","zooming","endPoints","dMs","onTap","velocityX","velocityY","endPanning","endZooming","endSwiping","len","canAdvance","reset","where","tapX","tapY","process","prefix","action","addBack","prevTime","currTime","deltaY","deltaX","wheelDelta","detail"],"mappings":"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","file":"12.js","sourcesContent":["var $ = require('../internals/export');\nvar $parseFloat = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat != $parseFloat }, {\n parseFloat: $parseFloat\n});\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar charAt = uncurryThis(''.charAt);\nvar $parseFloat = global.parseFloat;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseFloat(Object(ITERATOR)); }));\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(toString(string));\n var result = $parseFloat(trimmedString);\n return result === 0 && charAt(trimmedString, 0) == '-' ? -0 : result;\n} : $parseFloat;\n","// ==================================================\n// fancyBox v3.5.7\n//\n// Licensed GPLv3 for open source use\n// or fancyBox Commercial License for commercial use\n//\n// http://fancyapps.com/fancybox/\n// Copyright 2019 fancyApps\n//\n// ==================================================\n(function (window, document, $, undefined) {\n \"use strict\";\n\n window.console = window.console || {\n info: function (stuff) {}\n };\n\n // If there's no jQuery, fancyBox can't work\n // =========================================\n\n if (!$) {\n return;\n }\n\n // Check if fancyBox is already initialized\n // ========================================\n\n if ($.fn.fancybox) {\n console.info(\"fancyBox already initialized\");\n\n return;\n }\n\n // Private default settings\n // ========================\n\n var defaults = {\n // Close existing modals\n // Set this to false if you do not need to stack multiple instances\n closeExisting: false,\n\n // Enable infinite gallery navigation\n loop: false,\n\n // Horizontal space between slides\n gutter: 50,\n\n // Enable keyboard navigation\n keyboard: true,\n\n // Should allow caption to overlap the content\n preventCaptionOverlap: true,\n\n // Should display navigation arrows at the screen edges\n arrows: true,\n\n // Should display counter at the top left corner\n infobar: true,\n\n // Should display close button (using `btnTpl.smallBtn` template) over the content\n // Can be true, false, \"auto\"\n // If \"auto\" - will be automatically enabled for \"html\", \"inline\" or \"ajax\" items\n smallBtn: \"auto\",\n\n // Should display toolbar (buttons at the top)\n // Can be true, false, \"auto\"\n // If \"auto\" - will be automatically hidden if \"smallBtn\" is enabled\n toolbar: \"auto\",\n\n // What buttons should appear in the top right corner.\n // Buttons will be created using templates from `btnTpl` option\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\n buttons: [\n \"zoom\",\n //\"share\",\n \"slideShow\",\n //\"fullScreen\",\n //\"download\",\n \"thumbs\",\n \"close\"\n ],\n\n // Detect \"idle\" time in seconds\n idleTime: 3,\n\n // Disable right-click and use simple image protection for images\n protect: false,\n\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\n modal: false,\n\n image: {\n // Wait for images to load before displaying\n // true - wait for image to load and then display;\n // false - display thumbnail and load the full-sized image over top,\n // requires predefined image dimensions (`data-width` and `data-height` attributes)\n preload: false\n },\n\n ajax: {\n // Object containing settings for ajax request\n settings: {\n // This helps to indicate that request comes from the modal\n // Feel free to change naming\n data: {\n fancybox: true\n }\n }\n },\n\n iframe: {\n // Iframe template\n tpl: '',\n\n // Preload iframe before displaying it\n // This allows to calculate iframe content width and height\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\n preload: true,\n\n // Custom CSS styling for iframe wrapping element\n // You can use this to set custom iframe dimensions\n css: {},\n\n // Iframe tag attributes\n attr: {\n scrolling: \"auto\"\n }\n },\n\n // For HTML5 video only\n video: {\n tpl: '\",\n format: \"\", // custom video format\n autoStart: true\n },\n\n // Default content type if cannot be detected automatically\n defaultType: \"image\",\n\n // Open/close animation type\n // Possible values:\n // false - disable\n // \"zoom\" - zoom images from/to thumbnail\n // \"fade\"\n // \"zoom-in-out\"\n //\n animationEffect: \"zoom\",\n\n // Duration in ms for open/close animation\n animationDuration: 366,\n\n // Should image change opacity while zooming\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\n zoomOpacity: \"auto\",\n\n // Transition effect between slides\n //\n // Possible values:\n // false - disable\n // \"fade'\n // \"slide'\n // \"circular'\n // \"tube'\n // \"zoom-in-out'\n // \"rotate'\n //\n transitionEffect: \"fade\",\n\n // Duration in ms for transition animation\n transitionDuration: 366,\n\n // Custom CSS class for slide element\n slideClass: \"\",\n\n // Custom CSS class for layout\n baseClass: \"\",\n\n // Base template for layout\n baseTpl: '
' +\n '
' +\n '
' +\n '
 / 
' +\n '
{{buttons}}
' +\n '
{{arrows}}
' +\n '
' +\n '
' +\n \"
\" +\n \"
\",\n\n // Loading indicator template\n spinnerTpl: '
',\n\n // Error message template\n errorTpl: '

{{ERROR}}

',\n\n btnTpl: {\n download: '' +\n '' +\n \"\",\n\n zoom: '\",\n\n close: '\",\n\n // Arrows\n arrowLeft: '\",\n\n arrowRight: '\",\n\n // This small close button will be appended to your html/inline/ajax content by default,\n // if \"smallBtn\" option is not set to false\n smallBtn: '\"\n },\n\n // Container is injected into this element\n parentEl: \"body\",\n\n // Hide browser vertical scrollbars; use at your own risk\n hideScrollbar: true,\n\n // Focus handling\n // ==============\n\n // Try to focus on the first focusable element after opening\n autoFocus: true,\n\n // Put focus back to active element after closing\n backFocus: true,\n\n // Do not let user to focus on element outside modal content\n trapFocus: true,\n\n // Module specific options\n // =======================\n\n fullScreen: {\n autoStart: false\n },\n\n // Set `touch: false` to disable panning/swiping\n touch: {\n vertical: true, // Allow to drag content vertically\n momentum: true // Continue movement after releasing mouse/touch when panning\n },\n\n // Hash value when initializing manually,\n // set `false` to disable hash change\n hash: null,\n\n // Customize or add new media types\n // Example:\n /*\n media : {\n youtube : {\n params : {\n autoplay : 0\n }\n }\n }\n */\n media: {},\n\n slideShow: {\n autoStart: false,\n speed: 3000\n },\n\n thumbs: {\n autoStart: false, // Display thumbnails on opening\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\n parentEl: \".fancybox-container\", // Container is injected into this element\n axis: \"y\" // Vertical (y) or horizontal (x) scrolling\n },\n\n // Use mousewheel to navigate gallery\n // If 'auto' - enabled for images only\n wheel: \"auto\",\n\n // Callbacks\n //==========\n\n // See Documentation/API/Events for more information\n // Example:\n /*\n afterShow: function( instance, current ) {\n console.info( 'Clicked element:' );\n console.info( current.opts.$orig );\n }\n */\n\n onInit: $.noop, // When instance has been initialized\n\n beforeLoad: $.noop, // Before the content of a slide is being loaded\n afterLoad: $.noop, // When the content of a slide is done loading\n\n beforeShow: $.noop, // Before open animation starts\n afterShow: $.noop, // When content is done loading and animating\n\n beforeClose: $.noop, // Before the instance attempts to close. Return false to cancel the close.\n afterClose: $.noop, // After instance has been closed\n\n onActivate: $.noop, // When instance is brought to front\n onDeactivate: $.noop, // When other instance has been activated\n\n // Interaction\n // ===========\n\n // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,\n // each option can be string or method that returns value.\n //\n // Possible values:\n // \"close\" - close instance\n // \"next\" - move to next gallery item\n // \"nextOrClose\" - move to next gallery item or close if gallery has only one item\n // \"toggleControls\" - show/hide controls\n // \"zoom\" - zoom image (if loaded)\n // false - do nothing\n\n // Clicked on the content\n clickContent: function (current, event) {\n return current.type === \"image\" ? \"zoom\" : false;\n },\n\n // Clicked on the slide\n clickSlide: \"close\",\n\n // Clicked on the background (backdrop) element;\n // if you have not changed the layout, then most likely you need to use `clickSlide` option\n clickOutside: \"close\",\n\n // Same as previous two, but for double click\n dblclickContent: false,\n dblclickSlide: false,\n dblclickOutside: false,\n\n // Custom options when mobile device is detected\n // =============================================\n\n mobile: {\n preventCaptionOverlap: false,\n idleTime: false,\n clickContent: function (current, event) {\n return current.type === \"image\" ? \"toggleControls\" : false;\n },\n clickSlide: function (current, event) {\n return current.type === \"image\" ? \"toggleControls\" : \"close\";\n },\n dblclickContent: function (current, event) {\n return current.type === \"image\" ? \"zoom\" : false;\n },\n dblclickSlide: function (current, event) {\n return current.type === \"image\" ? \"zoom\" : false;\n }\n },\n\n // Internationalization\n // ====================\n\n lang: \"en\",\n i18n: {\n en: {\n CLOSE: \"Close\",\n NEXT: \"Next\",\n PREV: \"Previous\",\n ERROR: \"The requested content cannot be loaded.
Please try again later.\",\n PLAY_START: \"Start slideshow\",\n PLAY_STOP: \"Pause slideshow\",\n FULL_SCREEN: \"Full screen\",\n THUMBS: \"Thumbnails\",\n DOWNLOAD: \"Download\",\n SHARE: \"Share\",\n ZOOM: \"Zoom\"\n },\n de: {\n CLOSE: \"Schließen\",\n NEXT: \"Weiter\",\n PREV: \"Zurück\",\n ERROR: \"Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.\",\n PLAY_START: \"Diaschau starten\",\n PLAY_STOP: \"Diaschau beenden\",\n FULL_SCREEN: \"Vollbild\",\n THUMBS: \"Vorschaubilder\",\n DOWNLOAD: \"Herunterladen\",\n SHARE: \"Teilen\",\n ZOOM: \"Vergrößern\"\n }\n }\n };\n\n // Few useful variables and methods\n // ================================\n\n var $W = $(window);\n var $D = $(document);\n\n var called = 0;\n\n // Check if an object is a jQuery object and not a native JavaScript object\n // ========================================================================\n var isQuery = function (obj) {\n return obj && obj.hasOwnProperty && obj instanceof $;\n };\n\n // Handle multiple browsers for \"requestAnimationFrame\" and \"cancelAnimationFrame\"\n // ===============================================================================\n var requestAFrame = (function () {\n return (\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n // if all else fails, use setTimeout\n function (callback) {\n return window.setTimeout(callback, 1000 / 60);\n }\n );\n })();\n\n var cancelAFrame = (function () {\n return (\n window.cancelAnimationFrame ||\n window.webkitCancelAnimationFrame ||\n window.mozCancelAnimationFrame ||\n window.oCancelAnimationFrame ||\n function (id) {\n window.clearTimeout(id);\n }\n );\n })();\n\n // Detect the supported transition-end event property name\n // =======================================================\n var transitionEnd = (function () {\n var el = document.createElement(\"fakeelement\"),\n t;\n\n var transitions = {\n transition: \"transitionend\",\n OTransition: \"oTransitionEnd\",\n MozTransition: \"transitionend\",\n WebkitTransition: \"webkitTransitionEnd\"\n };\n\n for (t in transitions) {\n if (el.style[t] !== undefined) {\n return transitions[t];\n }\n }\n\n return \"transitionend\";\n })();\n\n // Force redraw on an element.\n // This helps in cases where the browser doesn't redraw an updated element properly\n // ================================================================================\n var forceRedraw = function ($el) {\n return $el && $el.length && $el[0].offsetHeight;\n };\n\n // Exclude array (`buttons`) options from deep merging\n // ===================================================\n var mergeOpts = function (opts1, opts2) {\n var rez = $.extend(true, {}, opts1, opts2);\n\n $.each(opts2, function (key, value) {\n if ($.isArray(value)) {\n rez[key] = value;\n }\n });\n\n return rez;\n };\n\n // How much of an element is visible in viewport\n // =============================================\n\n var inViewport = function (elem) {\n var elemCenter, rez;\n\n if (!elem || elem.ownerDocument !== document) {\n return false;\n }\n\n $(\".fancybox-container\").css(\"pointer-events\", \"none\");\n\n elemCenter = {\n x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,\n y: elem.getBoundingClientRect().top + elem.offsetHeight / 2\n };\n\n rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem;\n\n $(\".fancybox-container\").css(\"pointer-events\", \"\");\n\n return rez;\n };\n\n // Class definition\n // ================\n\n var FancyBox = function (content, opts, index) {\n var self = this;\n\n self.opts = mergeOpts({\n index: index\n }, $.fancybox.defaults);\n\n if ($.isPlainObject(opts)) {\n self.opts = mergeOpts(self.opts, opts);\n }\n\n if ($.fancybox.isMobile) {\n self.opts = mergeOpts(self.opts, self.opts.mobile);\n }\n\n self.id = self.opts.id || ++called;\n\n self.currIndex = parseInt(self.opts.index, 10) || 0;\n self.prevIndex = null;\n\n self.prevPos = null;\n self.currPos = 0;\n\n self.firstRun = true;\n\n // All group items\n self.group = [];\n\n // Existing slides (for current, next and previous gallery items)\n self.slides = {};\n\n // Create group elements\n self.addContent(content);\n\n if (!self.group.length) {\n return;\n }\n\n self.init();\n };\n\n $.extend(FancyBox.prototype, {\n // Create DOM structure\n // ====================\n\n init: function () {\n var self = this,\n firstItem = self.group[self.currIndex],\n firstItemOpts = firstItem.opts,\n $container,\n buttonStr;\n\n if (firstItemOpts.closeExisting) {\n $.fancybox.close(true);\n }\n\n // Hide scrollbars\n // ===============\n\n $(\"body\").addClass(\"fancybox-active\");\n\n if (\n !$.fancybox.getInstance() &&\n firstItemOpts.hideScrollbar !== false &&\n !$.fancybox.isMobile &&\n document.body.scrollHeight > window.innerHeight\n ) {\n $(\"head\").append(\n '\"\n );\n\n $(\"body\").addClass(\"compensate-for-scrollbar\");\n }\n\n // Build html markup and set references\n // ====================================\n\n // Build html code for buttons and insert into main template\n buttonStr = \"\";\n\n $.each(firstItemOpts.buttons, function (index, value) {\n buttonStr += firstItemOpts.btnTpl[value] || \"\";\n });\n\n // Create markup from base template, it will be initially hidden to\n // avoid unnecessary work like painting while initializing is not complete\n $container = $(\n self.translate(\n self,\n firstItemOpts.baseTpl\n .replace(\"{{buttons}}\", buttonStr)\n .replace(\"{{arrows}}\", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight)\n )\n )\n .attr(\"id\", \"fancybox-container-\" + self.id)\n .addClass(firstItemOpts.baseClass)\n .data(\"FancyBox\", self)\n .appendTo(firstItemOpts.parentEl);\n\n // Create object holding references to jQuery wrapped nodes\n self.$refs = {\n container: $container\n };\n\n [\"bg\", \"inner\", \"infobar\", \"toolbar\", \"stage\", \"caption\", \"navigation\"].forEach(function (item) {\n self.$refs[item] = $container.find(\".fancybox-\" + item);\n });\n\n self.trigger(\"onInit\");\n\n // Enable events, deactive previous instances\n self.activate();\n\n // Build slides, load and reveal content\n self.jumpTo(self.currIndex);\n },\n\n // Simple i18n support - replaces object keys found in template\n // with corresponding values\n // ============================================================\n\n translate: function (obj, str) {\n var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en;\n\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, function (match, n) {\n return arr[n] === undefined ? match : arr[n];\n });\n },\n\n // Populate current group with fresh content\n // Check if each object has valid type and content\n // ===============================================\n\n addContent: function (content) {\n var self = this,\n items = $.makeArray(content),\n thumbs;\n\n $.each(items, function (i, item) {\n var obj = {},\n opts = {},\n $item,\n type,\n found,\n src,\n srcParts;\n\n // Step 1 - Make sure we have an object\n // ====================================\n\n if ($.isPlainObject(item)) {\n // We probably have manual usage here, something like\n // $.fancybox.open( [ { src : \"image.jpg\", type : \"image\" } ] )\n\n obj = item;\n opts = item.opts || item;\n } else if ($.type(item) === \"object\" && $(item).length) {\n // Here we probably have jQuery collection returned by some selector\n $item = $(item);\n\n // Support attributes like `data-options='{\"touch\" : false}'` and `data-touch='false'`\n opts = $item.data() || {};\n opts = $.extend(true, {}, opts, opts.options);\n\n // Here we store clicked element\n opts.$orig = $item;\n\n obj.src = self.opts.src || opts.src || $item.attr(\"href\");\n\n // Assume that simple syntax is used, for example:\n // `$.fancybox.open( $(\"#test\"), {} );`\n if (!obj.type && !obj.src) {\n obj.type = \"inline\";\n obj.src = item;\n }\n } else {\n // Assume we have a simple html code, for example:\n // $.fancybox.open( '

Hi!

' );\n obj = {\n type: \"html\",\n src: item + \"\"\n };\n }\n\n // Each gallery object has full collection of options\n obj.opts = $.extend(true, {}, self.opts, opts);\n\n // Do not merge buttons array\n if ($.isArray(opts.buttons)) {\n obj.opts.buttons = opts.buttons;\n }\n\n if ($.fancybox.isMobile && obj.opts.mobile) {\n obj.opts = mergeOpts(obj.opts, obj.opts.mobile);\n }\n\n // Step 2 - Make sure we have content type, if not - try to guess\n // ==============================================================\n\n type = obj.type || obj.opts.type;\n src = obj.src || \"\";\n\n if (!type && src) {\n if ((found = src.match(/\\.(mp4|mov|ogv|webm)((\\?|#).*)?$/i))) {\n type = \"video\";\n\n if (!obj.opts.video.format) {\n obj.opts.video.format = \"video/\" + (found[1] === \"ogv\" ? \"ogg\" : found[1]);\n }\n } else if (src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i)) {\n type = \"image\";\n } else if (src.match(/\\.(pdf)((\\?|#).*)?$/i)) {\n type = \"iframe\";\n obj = $.extend(true, obj, {\n contentType: \"pdf\",\n opts: {\n iframe: {\n preload: false\n }\n }\n });\n } else if (src.charAt(0) === \"#\") {\n type = \"inline\";\n }\n }\n\n if (type) {\n obj.type = type;\n } else {\n self.trigger(\"objectNeedsType\", obj);\n }\n\n if (!obj.contentType) {\n obj.contentType = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1 ? \"html\" : obj.type;\n }\n\n // Step 3 - Some adjustments\n // =========================\n\n obj.index = self.group.length;\n\n if (obj.opts.smallBtn == \"auto\") {\n obj.opts.smallBtn = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1;\n }\n\n if (obj.opts.toolbar === \"auto\") {\n obj.opts.toolbar = !obj.opts.smallBtn;\n }\n\n // Find thumbnail image, check if exists and if is in the viewport\n obj.$thumb = obj.opts.$thumb || null;\n\n if (obj.opts.$trigger && obj.index === self.opts.index) {\n obj.$thumb = obj.opts.$trigger.find(\"img:first\");\n\n if (obj.$thumb.length) {\n obj.opts.$orig = obj.opts.$trigger;\n }\n }\n\n if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) {\n obj.$thumb = obj.opts.$orig.find(\"img:first\");\n }\n\n if (obj.$thumb && !obj.$thumb.length) {\n obj.$thumb = null;\n }\n\n obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null);\n\n // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item\n if ($.type(obj.opts.caption) === \"function\") {\n obj.opts.caption = obj.opts.caption.apply(item, [self, obj]);\n }\n\n if ($.type(self.opts.caption) === \"function\") {\n obj.opts.caption = self.opts.caption.apply(item, [self, obj]);\n }\n\n // Make sure we have caption as a string or jQuery object\n if (!(obj.opts.caption instanceof $)) {\n obj.opts.caption = obj.opts.caption === undefined ? \"\" : obj.opts.caption + \"\";\n }\n\n // Check if url contains \"filter\" used to filter the content\n // Example: \"ajax.html #something\"\n if (obj.type === \"ajax\") {\n srcParts = src.split(/\\s+/, 2);\n\n if (srcParts.length > 1) {\n obj.src = srcParts.shift();\n\n obj.opts.filter = srcParts.shift();\n }\n }\n\n // Hide all buttons and disable interactivity for modal items\n if (obj.opts.modal) {\n obj.opts = $.extend(true, obj.opts, {\n trapFocus: true,\n // Remove buttons\n infobar: 0,\n toolbar: 0,\n\n smallBtn: 0,\n\n // Disable keyboard navigation\n keyboard: 0,\n\n // Disable some modules\n slideShow: 0,\n fullScreen: 0,\n thumbs: 0,\n touch: 0,\n\n // Disable click event handlers\n clickContent: false,\n clickSlide: false,\n clickOutside: false,\n dblclickContent: false,\n dblclickSlide: false,\n dblclickOutside: false\n });\n }\n\n // Step 4 - Add processed object to group\n // ======================================\n\n self.group.push(obj);\n });\n\n // Update controls if gallery is already opened\n if (Object.keys(self.slides).length) {\n self.updateControls();\n\n // Update thumbnails, if needed\n thumbs = self.Thumbs;\n\n if (thumbs && thumbs.isActive) {\n thumbs.create();\n\n thumbs.focus();\n }\n }\n },\n\n // Attach an event handler functions for:\n // - navigation buttons\n // - browser scrolling, resizing;\n // - focusing\n // - keyboard\n // - detecting inactivity\n // ======================================\n\n addEvents: function () {\n var self = this;\n\n self.removeEvents();\n\n // Make navigation elements clickable\n // ==================================\n\n self.$refs.container\n .on(\"click.fb-close\", \"[data-fancybox-close]\", function (e) {\n e.stopPropagation();\n e.preventDefault();\n\n self.close(e);\n })\n .on(\"touchstart.fb-prev click.fb-prev\", \"[data-fancybox-prev]\", function (e) {\n e.stopPropagation();\n e.preventDefault();\n\n self.previous();\n })\n .on(\"touchstart.fb-next click.fb-next\", \"[data-fancybox-next]\", function (e) {\n e.stopPropagation();\n e.preventDefault();\n\n self.next();\n })\n .on(\"click.fb\", \"[data-fancybox-zoom]\", function (e) {\n // Click handler for zoom button\n self[self.isScaledDown() ? \"scaleToActual\" : \"scaleToFit\"]();\n });\n\n // Handle page scrolling and browser resizing\n // ==========================================\n\n $W.on(\"orientationchange.fb resize.fb\", function (e) {\n if (e && e.originalEvent && e.originalEvent.type === \"resize\") {\n if (self.requestId) {\n cancelAFrame(self.requestId);\n }\n\n self.requestId = requestAFrame(function () {\n self.update(e);\n });\n } else {\n if (self.current && self.current.type === \"iframe\") {\n self.$refs.stage.hide();\n }\n\n setTimeout(\n function () {\n self.$refs.stage.show();\n\n self.update(e);\n },\n $.fancybox.isMobile ? 600 : 250\n );\n }\n });\n\n $D.on(\"keydown.fb\", function (e) {\n var instance = $.fancybox ? $.fancybox.getInstance() : null,\n current = instance.current,\n keycode = e.keyCode || e.which;\n\n // Trap keyboard focus inside of the modal\n // =======================================\n\n if (keycode == 9) {\n if (current.opts.trapFocus) {\n self.focus(e);\n }\n\n return;\n }\n\n // Enable keyboard navigation\n // ==========================\n\n if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is(\"input,textarea,video,audio,select\")) {\n return;\n }\n\n // Backspace and Esc keys\n if (keycode === 8 || keycode === 27) {\n e.preventDefault();\n\n self.close(e);\n\n return;\n }\n\n // Left arrow and Up arrow\n if (keycode === 37 || keycode === 38) {\n e.preventDefault();\n\n self.previous();\n\n return;\n }\n\n // Righ arrow and Down arrow\n if (keycode === 39 || keycode === 40) {\n e.preventDefault();\n\n self.next();\n\n return;\n }\n\n self.trigger(\"afterKeydown\", e, keycode);\n });\n\n // Hide controls after some inactivity period\n if (self.group[self.currIndex].opts.idleTime) {\n self.idleSecondsCounter = 0;\n\n $D.on(\n \"mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle\",\n function (e) {\n self.idleSecondsCounter = 0;\n\n if (self.isIdle) {\n self.showControls();\n }\n\n self.isIdle = false;\n }\n );\n\n self.idleInterval = window.setInterval(function () {\n self.idleSecondsCounter++;\n\n if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) {\n self.isIdle = true;\n self.idleSecondsCounter = 0;\n\n self.hideControls();\n }\n }, 1000);\n }\n },\n\n // Remove events added by the core\n // ===============================\n\n removeEvents: function () {\n var self = this;\n\n $W.off(\"orientationchange.fb resize.fb\");\n $D.off(\"keydown.fb .fb-idle\");\n\n this.$refs.container.off(\".fb-close .fb-prev .fb-next\");\n\n if (self.idleInterval) {\n window.clearInterval(self.idleInterval);\n\n self.idleInterval = null;\n }\n },\n\n // Change to previous gallery item\n // ===============================\n\n previous: function (duration) {\n return this.jumpTo(this.currPos - 1, duration);\n },\n\n // Change to next gallery item\n // ===========================\n\n next: function (duration) {\n return this.jumpTo(this.currPos + 1, duration);\n },\n\n // Switch to selected gallery item\n // ===============================\n\n jumpTo: function (pos, duration) {\n var self = this,\n groupLen = self.group.length,\n firstRun,\n isMoved,\n loop,\n current,\n previous,\n slidePos,\n stagePos,\n prop,\n diff;\n\n if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) {\n return;\n }\n\n // Should loop?\n pos = parseInt(pos, 10);\n loop = self.current ? self.current.opts.loop : self.opts.loop;\n\n if (!loop && (pos < 0 || pos >= groupLen)) {\n return false;\n }\n\n // Check if opening for the first time; this helps to speed things up\n firstRun = self.firstRun = !Object.keys(self.slides).length;\n\n // Create slides\n previous = self.current;\n\n self.prevIndex = self.currIndex;\n self.prevPos = self.currPos;\n\n current = self.createSlide(pos);\n\n if (groupLen > 1) {\n if (loop || current.index < groupLen - 1) {\n self.createSlide(pos + 1);\n }\n\n if (loop || current.index > 0) {\n self.createSlide(pos - 1);\n }\n }\n\n self.current = current;\n self.currIndex = current.index;\n self.currPos = current.pos;\n\n self.trigger(\"beforeShow\", firstRun);\n\n self.updateControls();\n\n // Validate duration length\n current.forcedDuration = undefined;\n\n if ($.isNumeric(duration)) {\n current.forcedDuration = duration;\n } else {\n duration = current.opts[firstRun ? \"animationDuration\" : \"transitionDuration\"];\n }\n\n duration = parseInt(duration, 10);\n\n // Check if user has swiped the slides or if still animating\n isMoved = self.isMoved(current);\n\n // Make sure current slide is visible\n current.$slide.addClass(\"fancybox-slide--current\");\n\n // Fresh start - reveal container, current slide and start loading content\n if (firstRun) {\n if (current.opts.animationEffect && duration) {\n self.$refs.container.css(\"transition-duration\", duration + \"ms\");\n }\n\n self.$refs.container.addClass(\"fancybox-is-open\").trigger(\"focus\");\n\n // Attempt to load content into slide\n // This will later call `afterLoad` -> `revealContent`\n self.loadSlide(current);\n\n self.preload(\"image\");\n\n return;\n }\n\n // Get actual slide/stage positions (before cleaning up)\n slidePos = $.fancybox.getTranslate(previous.$slide);\n stagePos = $.fancybox.getTranslate(self.$refs.stage);\n\n // Clean up all slides\n $.each(self.slides, function (index, slide) {\n $.fancybox.stop(slide.$slide, true);\n });\n\n if (previous.pos !== current.pos) {\n previous.isComplete = false;\n }\n\n previous.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--current\");\n\n // If slides are out of place, then animate them to correct position\n if (isMoved) {\n // Calculate horizontal swipe distance\n diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter);\n\n $.each(self.slides, function (index, slide) {\n slide.$slide.removeClass(\"fancybox-animated\").removeClass(function (index, className) {\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\n });\n\n // Make sure that each slide is in equal distance\n // This is mostly needed for freshly added slides, because they are not yet positioned\n var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter;\n\n $.fancybox.setTranslate(slide.$slide, {\n top: 0,\n left: leftPos - stagePos.left + diff\n });\n\n if (slide.pos !== current.pos) {\n slide.$slide.addClass(\"fancybox-slide--\" + (slide.pos > current.pos ? \"next\" : \"previous\"));\n }\n\n // Redraw to make sure that transition will start\n forceRedraw(slide.$slide);\n\n // Animate the slide\n $.fancybox.animate(\n slide.$slide, {\n top: 0,\n left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter\n },\n duration,\n function () {\n slide.$slide\n .css({\n transform: \"\",\n opacity: \"\"\n })\n .removeClass(\"fancybox-slide--next fancybox-slide--previous\");\n\n if (slide.pos === self.currPos) {\n self.complete();\n }\n }\n );\n });\n } else if (duration && current.opts.transitionEffect) {\n // Set transition effect for previously active slide\n prop = \"fancybox-animated fancybox-fx-\" + current.opts.transitionEffect;\n\n previous.$slide.addClass(\"fancybox-slide--\" + (previous.pos > current.pos ? \"next\" : \"previous\"));\n\n $.fancybox.animate(\n previous.$slide,\n prop,\n duration,\n function () {\n previous.$slide.removeClass(prop).removeClass(\"fancybox-slide--next fancybox-slide--previous\");\n },\n false\n );\n }\n\n if (current.isLoaded) {\n self.revealContent(current);\n } else {\n self.loadSlide(current);\n }\n\n self.preload(\"image\");\n },\n\n // Create new \"slide\" element\n // These are gallery items that are actually added to DOM\n // =======================================================\n\n createSlide: function (pos) {\n var self = this,\n $slide,\n index;\n\n index = pos % self.group.length;\n index = index < 0 ? self.group.length + index : index;\n\n if (!self.slides[pos] && self.group[index]) {\n $slide = $('
').appendTo(self.$refs.stage);\n\n self.slides[pos] = $.extend(true, {}, self.group[index], {\n pos: pos,\n $slide: $slide,\n isLoaded: false\n });\n\n self.updateSlide(self.slides[pos]);\n }\n\n return self.slides[pos];\n },\n\n // Scale image to the actual size of the image;\n // x and y values should be relative to the slide\n // ==============================================\n\n scaleToActual: function (x, y, duration) {\n var self = this,\n current = self.current,\n $content = current.$content,\n canvasWidth = $.fancybox.getTranslate(current.$slide).width,\n canvasHeight = $.fancybox.getTranslate(current.$slide).height,\n newImgWidth = current.width,\n newImgHeight = current.height,\n imgPos,\n posX,\n posY,\n scaleX,\n scaleY;\n\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\n return;\n }\n\n self.isAnimating = true;\n\n $.fancybox.stop($content);\n\n x = x === undefined ? canvasWidth * 0.5 : x;\n y = y === undefined ? canvasHeight * 0.5 : y;\n\n imgPos = $.fancybox.getTranslate($content);\n\n imgPos.top -= $.fancybox.getTranslate(current.$slide).top;\n imgPos.left -= $.fancybox.getTranslate(current.$slide).left;\n\n scaleX = newImgWidth / imgPos.width;\n scaleY = newImgHeight / imgPos.height;\n\n // Get center position for original image\n posX = canvasWidth * 0.5 - newImgWidth * 0.5;\n posY = canvasHeight * 0.5 - newImgHeight * 0.5;\n\n // Make sure image does not move away from edges\n if (newImgWidth > canvasWidth) {\n posX = imgPos.left * scaleX - (x * scaleX - x);\n\n if (posX > 0) {\n posX = 0;\n }\n\n if (posX < canvasWidth - newImgWidth) {\n posX = canvasWidth - newImgWidth;\n }\n }\n\n if (newImgHeight > canvasHeight) {\n posY = imgPos.top * scaleY - (y * scaleY - y);\n\n if (posY > 0) {\n posY = 0;\n }\n\n if (posY < canvasHeight - newImgHeight) {\n posY = canvasHeight - newImgHeight;\n }\n }\n\n self.updateCursor(newImgWidth, newImgHeight);\n\n $.fancybox.animate(\n $content, {\n top: posY,\n left: posX,\n scaleX: scaleX,\n scaleY: scaleY\n },\n duration || 366,\n function () {\n self.isAnimating = false;\n }\n );\n\n // Stop slideshow\n if (self.SlideShow && self.SlideShow.isActive) {\n self.SlideShow.stop();\n }\n },\n\n // Scale image to fit inside parent element\n // ========================================\n\n scaleToFit: function (duration) {\n var self = this,\n current = self.current,\n $content = current.$content,\n end;\n\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\n return;\n }\n\n self.isAnimating = true;\n\n $.fancybox.stop($content);\n\n end = self.getFitPos(current);\n\n self.updateCursor(end.width, end.height);\n\n $.fancybox.animate(\n $content, {\n top: end.top,\n left: end.left,\n scaleX: end.width / $content.width(),\n scaleY: end.height / $content.height()\n },\n duration || 366,\n function () {\n self.isAnimating = false;\n }\n );\n },\n\n // Calculate image size to fit inside viewport\n // ===========================================\n\n getFitPos: function (slide) {\n var self = this,\n $content = slide.$content,\n $slide = slide.$slide,\n width = slide.width || slide.opts.width,\n height = slide.height || slide.opts.height,\n maxWidth,\n maxHeight,\n minRatio,\n aspectRatio,\n rez = {};\n\n if (!slide.isLoaded || !$content || !$content.length) {\n return false;\n }\n\n maxWidth = $.fancybox.getTranslate(self.$refs.stage).width;\n maxHeight = $.fancybox.getTranslate(self.$refs.stage).height;\n\n maxWidth -=\n parseFloat($slide.css(\"paddingLeft\")) +\n parseFloat($slide.css(\"paddingRight\")) +\n parseFloat($content.css(\"marginLeft\")) +\n parseFloat($content.css(\"marginRight\"));\n\n maxHeight -=\n parseFloat($slide.css(\"paddingTop\")) +\n parseFloat($slide.css(\"paddingBottom\")) +\n parseFloat($content.css(\"marginTop\")) +\n parseFloat($content.css(\"marginBottom\"));\n\n if (!width || !height) {\n width = maxWidth;\n height = maxHeight;\n }\n\n minRatio = Math.min(1, maxWidth / width, maxHeight / height);\n\n width = minRatio * width;\n height = minRatio * height;\n\n // Adjust width/height to precisely fit into container\n if (width > maxWidth - 0.5) {\n width = maxWidth;\n }\n\n if (height > maxHeight - 0.5) {\n height = maxHeight;\n }\n\n if (slide.type === \"image\") {\n rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css(\"paddingTop\"));\n rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css(\"paddingLeft\"));\n } else if (slide.contentType === \"video\") {\n // Force aspect ratio for the video\n // \"I say the whole world must learn of our peaceful ways… by force!\"\n aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9;\n\n if (height > width / aspectRatio) {\n height = width / aspectRatio;\n } else if (width > height * aspectRatio) {\n width = height * aspectRatio;\n }\n }\n\n rez.width = width;\n rez.height = height;\n\n return rez;\n },\n\n // Update content size and position for all slides\n // ==============================================\n\n update: function (e) {\n var self = this;\n\n $.each(self.slides, function (key, slide) {\n self.updateSlide(slide, e);\n });\n },\n\n // Update slide content position and size\n // ======================================\n\n updateSlide: function (slide, e) {\n var self = this,\n $content = slide && slide.$content,\n width = slide.width || slide.opts.width,\n height = slide.height || slide.opts.height,\n $slide = slide.$slide;\n\n // First, prevent caption overlap, if needed\n self.adjustCaption(slide);\n\n // Then resize content to fit inside the slide\n if ($content && (width || height || slide.contentType === \"video\") && !slide.hasError) {\n $.fancybox.stop($content);\n\n $.fancybox.setTranslate($content, self.getFitPos(slide));\n\n if (slide.pos === self.currPos) {\n self.isAnimating = false;\n\n self.updateCursor();\n }\n }\n\n // Then some adjustments\n self.adjustLayout(slide);\n\n if ($slide.length) {\n $slide.trigger(\"refresh\");\n\n if (slide.pos === self.currPos) {\n self.$refs.toolbar\n .add(self.$refs.navigation.find(\".fancybox-button--arrow_right\"))\n .toggleClass(\"compensate-for-scrollbar\", $slide.get(0).scrollHeight > $slide.get(0).clientHeight);\n }\n }\n\n self.trigger(\"onUpdate\", slide, e);\n },\n\n // Horizontally center slide\n // =========================\n\n centerSlide: function (duration) {\n var self = this,\n current = self.current,\n $slide = current.$slide;\n\n if (self.isClosing || !current) {\n return;\n }\n\n $slide.siblings().css({\n transform: \"\",\n opacity: \"\"\n });\n\n $slide\n .parent()\n .children()\n .removeClass(\"fancybox-slide--previous fancybox-slide--next\");\n\n $.fancybox.animate(\n $slide, {\n top: 0,\n left: 0,\n opacity: 1\n },\n duration === undefined ? 0 : duration,\n function () {\n // Clean up\n $slide.css({\n transform: \"\",\n opacity: \"\"\n });\n\n if (!current.isComplete) {\n self.complete();\n }\n },\n false\n );\n },\n\n // Check if current slide is moved (swiped)\n // ========================================\n\n isMoved: function (slide) {\n var current = slide || this.current,\n slidePos,\n stagePos;\n\n if (!current) {\n return false;\n }\n\n stagePos = $.fancybox.getTranslate(this.$refs.stage);\n slidePos = $.fancybox.getTranslate(current.$slide);\n\n return (\n !current.$slide.hasClass(\"fancybox-animated\") &&\n (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5)\n );\n },\n\n // Update cursor style depending if content can be zoomed\n // ======================================================\n\n updateCursor: function (nextWidth, nextHeight) {\n var self = this,\n current = self.current,\n $container = self.$refs.container,\n canPan,\n isZoomable;\n\n if (!current || self.isClosing || !self.Guestures) {\n return;\n }\n\n $container.removeClass(\"fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan\");\n\n canPan = self.canPan(nextWidth, nextHeight);\n\n isZoomable = canPan ? true : self.isZoomable();\n\n $container.toggleClass(\"fancybox-is-zoomable\", isZoomable);\n\n $(\"[data-fancybox-zoom]\").prop(\"disabled\", !isZoomable);\n\n if (canPan) {\n $container.addClass(\"fancybox-can-pan\");\n } else if (\n isZoomable &&\n (current.opts.clickContent === \"zoom\" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == \"zoom\"))\n ) {\n $container.addClass(\"fancybox-can-zoomIn\");\n } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== \"video\") {\n $container.addClass(\"fancybox-can-swipe\");\n }\n },\n\n // Check if current slide is zoomable\n // ==================================\n\n isZoomable: function () {\n var self = this,\n current = self.current,\n fitPos;\n\n // Assume that slide is zoomable if:\n // - image is still loading\n // - actual size of the image is smaller than available area\n if (current && !self.isClosing && current.type === \"image\" && !current.hasError) {\n if (!current.isLoaded) {\n return true;\n }\n\n fitPos = self.getFitPos(current);\n\n if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) {\n return true;\n }\n }\n\n return false;\n },\n\n // Check if current image dimensions are smaller than actual\n // =========================================================\n\n isScaledDown: function (nextWidth, nextHeight) {\n var self = this,\n rez = false,\n current = self.current,\n $content = current.$content;\n\n if (nextWidth !== undefined && nextHeight !== undefined) {\n rez = nextWidth < current.width && nextHeight < current.height;\n } else if ($content) {\n rez = $.fancybox.getTranslate($content);\n rez = rez.width < current.width && rez.height < current.height;\n }\n\n return rez;\n },\n\n // Check if image dimensions exceed parent element\n // ===============================================\n\n canPan: function (nextWidth, nextHeight) {\n var self = this,\n current = self.current,\n pos = null,\n rez = false;\n\n if (current.type === \"image\" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) {\n rez = self.getFitPos(current);\n\n if (nextWidth !== undefined && nextHeight !== undefined) {\n pos = {\n width: nextWidth,\n height: nextHeight\n };\n } else if (current.isComplete) {\n pos = $.fancybox.getTranslate(current.$content);\n }\n\n if (pos && rez) {\n rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5;\n }\n }\n\n return rez;\n },\n\n // Load content into the slide\n // ===========================\n\n loadSlide: function (slide) {\n var self = this,\n type,\n $slide,\n ajaxLoad;\n\n if (slide.isLoading || slide.isLoaded) {\n return;\n }\n\n slide.isLoading = true;\n\n if (self.trigger(\"beforeLoad\", slide) === false) {\n slide.isLoading = false;\n\n return false;\n }\n\n type = slide.type;\n $slide = slide.$slide;\n\n $slide\n .off(\"refresh\")\n .trigger(\"onReset\")\n .addClass(slide.opts.slideClass);\n\n // Create content depending on the type\n switch (type) {\n case \"image\":\n self.setImage(slide);\n\n break;\n\n case \"iframe\":\n self.setIframe(slide);\n\n break;\n\n case \"html\":\n self.setContent(slide, slide.src || slide.content);\n\n break;\n\n case \"video\":\n self.setContent(\n slide,\n slide.opts.video.tpl\n .replace(/\\{\\{src\\}\\}/gi, slide.src)\n .replace(\"{{format}}\", slide.opts.videoFormat || slide.opts.video.format || \"\")\n .replace(\"{{poster}}\", slide.thumb || \"\")\n );\n\n break;\n\n case \"inline\":\n if ($(slide.src).length) {\n self.setContent(slide, $(slide.src));\n } else {\n self.setError(slide);\n }\n\n break;\n\n case \"ajax\":\n self.showLoading(slide);\n\n ajaxLoad = $.ajax(\n $.extend({}, slide.opts.ajax.settings, {\n url: slide.src,\n success: function (data, textStatus) {\n if (textStatus === \"success\") {\n self.setContent(slide, data);\n }\n },\n error: function (jqXHR, textStatus) {\n if (jqXHR && textStatus !== \"abort\") {\n self.setError(slide);\n }\n }\n })\n );\n\n $slide.one(\"onReset\", function () {\n ajaxLoad.abort();\n });\n\n break;\n\n default:\n self.setError(slide);\n\n break;\n }\n\n return true;\n },\n\n // Use thumbnail image, if possible\n // ================================\n\n setImage: function (slide) {\n var self = this,\n ghost;\n\n // Check if need to show loading icon\n setTimeout(function () {\n var $img = slide.$image;\n\n if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) {\n self.showLoading(slide);\n }\n }, 50);\n\n //Check if image has srcset\n self.checkSrcset(slide);\n\n // This will be wrapper containing both ghost and actual image\n slide.$content = $('
')\n .addClass(\"fancybox-is-hidden\")\n .appendTo(slide.$slide.addClass(\"fancybox-slide--image\"));\n\n // If we have a thumbnail, we can display it while actual image is loading\n // Users will not stare at black screen and actual image will appear gradually\n if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) {\n slide.width = slide.opts.width;\n slide.height = slide.opts.height;\n\n ghost = document.createElement(\"img\");\n\n ghost.onerror = function () {\n $(this).remove();\n\n slide.$ghost = null;\n };\n\n ghost.onload = function () {\n self.afterLoad(slide);\n };\n\n slide.$ghost = $(ghost)\n .addClass(\"fancybox-image\")\n .appendTo(slide.$content)\n .attr(\"src\", slide.thumb);\n }\n\n // Start loading actual image\n self.setBigImage(slide);\n },\n\n // Check if image has srcset and get the source\n // ============================================\n checkSrcset: function (slide) {\n var srcset = slide.opts.srcset || slide.opts.image.srcset,\n found,\n temp,\n pxRatio,\n windowWidth;\n\n // If we have \"srcset\", then we need to find first matching \"src\" value.\n // This is necessary, because when you set an src attribute, the browser will preload the image\n // before any javascript or even CSS is applied.\n if (srcset) {\n pxRatio = window.devicePixelRatio || 1;\n windowWidth = window.innerWidth * pxRatio;\n\n temp = srcset.split(\",\").map(function (el) {\n var ret = {};\n\n el.trim()\n .split(/\\s+/)\n .forEach(function (el, i) {\n var value = parseInt(el.substring(0, el.length - 1), 10);\n\n if (i === 0) {\n return (ret.url = el);\n }\n\n if (value) {\n ret.value = value;\n ret.postfix = el[el.length - 1];\n }\n });\n\n return ret;\n });\n\n // Sort by value\n temp.sort(function (a, b) {\n return a.value - b.value;\n });\n\n // Ok, now we have an array of all srcset values\n for (var j = 0; j < temp.length; j++) {\n var el = temp[j];\n\n if ((el.postfix === \"w\" && el.value >= windowWidth) || (el.postfix === \"x\" && el.value >= pxRatio)) {\n found = el;\n break;\n }\n }\n\n // If not found, take the last one\n if (!found && temp.length) {\n found = temp[temp.length - 1];\n }\n\n if (found) {\n slide.src = found.url;\n\n // If we have default width/height values, we can calculate height for matching source\n if (slide.width && slide.height && found.postfix == \"w\") {\n slide.height = (slide.width / slide.height) * found.value;\n slide.width = found.value;\n }\n\n slide.opts.srcset = srcset;\n }\n }\n },\n\n // Create full-size image\n // ======================\n\n setBigImage: function (slide) {\n var self = this,\n img = document.createElement(\"img\"),\n $img = $(img);\n\n slide.$image = $img\n .one(\"error\", function () {\n self.setError(slide);\n })\n .one(\"load\", function () {\n var sizes;\n\n if (!slide.$ghost) {\n self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight);\n\n self.afterLoad(slide);\n }\n\n if (self.isClosing) {\n return;\n }\n\n if (slide.opts.srcset) {\n sizes = slide.opts.sizes;\n\n if (!sizes || sizes === \"auto\") {\n sizes =\n (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? \"100\" : Math.round((slide.width / slide.height) * 100)) +\n \"vw\";\n }\n\n $img.attr(\"sizes\", sizes).attr(\"srcset\", slide.opts.srcset);\n }\n\n // Hide temporary image after some delay\n if (slide.$ghost) {\n setTimeout(function () {\n if (slide.$ghost && !self.isClosing) {\n slide.$ghost.hide();\n }\n }, Math.min(300, Math.max(1000, slide.height / 1600)));\n }\n\n self.hideLoading(slide);\n })\n .addClass(\"fancybox-image\")\n .attr(\"src\", slide.src)\n .appendTo(slide.$content);\n\n if ((img.complete || img.readyState == \"complete\") && $img.naturalWidth && $img.naturalHeight) {\n $img.trigger(\"load\");\n } else if (img.error) {\n $img.trigger(\"error\");\n }\n },\n\n // Computes the slide size from image size and maxWidth/maxHeight\n // ==============================================================\n\n resolveImageSlideSize: function (slide, imgWidth, imgHeight) {\n var maxWidth = parseInt(slide.opts.width, 10),\n maxHeight = parseInt(slide.opts.height, 10);\n\n // Sets the default values from the image\n slide.width = imgWidth;\n slide.height = imgHeight;\n\n if (maxWidth > 0) {\n slide.width = maxWidth;\n slide.height = Math.floor((maxWidth * imgHeight) / imgWidth);\n }\n\n if (maxHeight > 0) {\n slide.width = Math.floor((maxHeight * imgWidth) / imgHeight);\n slide.height = maxHeight;\n }\n },\n\n // Create iframe wrapper, iframe and bindings\n // ==========================================\n\n setIframe: function (slide) {\n var self = this,\n opts = slide.opts.iframe,\n $slide = slide.$slide,\n $iframe;\n\n slide.$content = $('
')\n .css(opts.css)\n .appendTo($slide);\n\n $slide.addClass(\"fancybox-slide--\" + slide.contentType);\n\n slide.$iframe = $iframe = $(opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()))\n .attr(opts.attr)\n .appendTo(slide.$content);\n\n if (opts.preload) {\n self.showLoading(slide);\n\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\n // (due to browser security policy)\n\n $iframe.on(\"load.fb error.fb\", function (e) {\n this.isReady = 1;\n\n slide.$slide.trigger(\"refresh\");\n\n self.afterLoad(slide);\n });\n\n // Recalculate iframe content size\n // ===============================\n\n $slide.on(\"refresh.fb\", function () {\n var $content = slide.$content,\n frameWidth = opts.css.width,\n frameHeight = opts.css.height,\n $contents,\n $body;\n\n if ($iframe[0].isReady !== 1) {\n return;\n }\n\n try {\n $contents = $iframe.contents();\n $body = $contents.find(\"body\");\n } catch (ignore) {}\n\n // Calculate content dimensions, if it is accessible\n if ($body && $body.length && $body.children().length) {\n // Avoid scrolling to top (if multiple instances)\n $slide.css(\"overflow\", \"visible\");\n\n $content.css({\n width: \"100%\",\n \"max-width\": \"100%\",\n height: \"9999px\"\n });\n\n if (frameWidth === undefined) {\n frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true)));\n }\n\n $content.css(\"width\", frameWidth ? frameWidth : \"\").css(\"max-width\", \"\");\n\n if (frameHeight === undefined) {\n frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true)));\n }\n\n $content.css(\"height\", frameHeight ? frameHeight : \"\");\n\n $slide.css(\"overflow\", \"auto\");\n }\n\n $content.removeClass(\"fancybox-is-hidden\");\n });\n } else {\n self.afterLoad(slide);\n }\n\n $iframe.attr(\"src\", slide.src);\n\n // Remove iframe if closing or changing gallery item\n $slide.one(\"onReset\", function () {\n // This helps IE not to throw errors when closing\n try {\n $(this)\n .find(\"iframe\")\n .hide()\n .unbind()\n .attr(\"src\", \"//about:blank\");\n } catch (ignore) {}\n\n $(this)\n .off(\"refresh.fb\")\n .empty();\n\n slide.isLoaded = false;\n slide.isRevealed = false;\n });\n },\n\n // Wrap and append content to the slide\n // ======================================\n\n setContent: function (slide, content) {\n var self = this;\n\n if (self.isClosing) {\n return;\n }\n\n self.hideLoading(slide);\n\n if (slide.$content) {\n $.fancybox.stop(slide.$content);\n }\n\n slide.$slide.empty();\n\n // If content is a jQuery object, then it will be moved to the slide.\n // The placeholder is created so we will know where to put it back.\n if (isQuery(content) && content.parent().length) {\n // Make sure content is not already moved to fancyBox\n if (content.hasClass(\"fancybox-content\") || content.parent().hasClass(\"fancybox-content\")) {\n content.parents(\".fancybox-slide\").trigger(\"onReset\");\n }\n\n // Create temporary element marking original place of the content\n slide.$placeholder = $(\"
\")\n .hide()\n .insertAfter(content);\n\n // Make sure content is visible\n content.css(\"display\", \"inline-block\");\n } else if (!slide.hasError) {\n // If content is just a plain text, try to convert it to html\n if ($.type(content) === \"string\") {\n content = $(\"
\")\n .append($.trim(content))\n .contents();\n }\n\n // If \"filter\" option is provided, then filter content\n if (slide.opts.filter) {\n content = $(\"
\")\n .html(content)\n .find(slide.opts.filter);\n }\n }\n\n slide.$slide.one(\"onReset\", function () {\n // Pause all html5 video/audio\n $(this)\n .find(\"video,audio\")\n .trigger(\"pause\");\n\n // Put content back\n if (slide.$placeholder) {\n slide.$placeholder.after(content.removeClass(\"fancybox-content\").hide()).remove();\n\n slide.$placeholder = null;\n }\n\n // Remove custom close button\n if (slide.$smallBtn) {\n slide.$smallBtn.remove();\n\n slide.$smallBtn = null;\n }\n\n // Remove content and mark slide as not loaded\n if (!slide.hasError) {\n $(this).empty();\n\n slide.isLoaded = false;\n slide.isRevealed = false;\n }\n });\n\n $(content).appendTo(slide.$slide);\n\n if ($(content).is(\"video,audio\")) {\n $(content).addClass(\"fancybox-video\");\n\n $(content).wrap(\"
\");\n\n slide.contentType = \"video\";\n\n slide.opts.width = slide.opts.width || $(content).attr(\"width\");\n slide.opts.height = slide.opts.height || $(content).attr(\"height\");\n }\n\n slide.$content = slide.$slide\n .children()\n .filter(\"div,form,main,video,audio,article,.fancybox-content\")\n .first();\n\n slide.$content.siblings().hide();\n\n // Re-check if there is a valid content\n // (in some cases, ajax response can contain various elements or plain text)\n if (!slide.$content.length) {\n slide.$content = slide.$slide\n .wrapInner(\"
\")\n .children()\n .first();\n }\n\n slide.$content.addClass(\"fancybox-content\");\n\n slide.$slide.addClass(\"fancybox-slide--\" + slide.contentType);\n\n self.afterLoad(slide);\n },\n\n // Display error message\n // =====================\n\n setError: function (slide) {\n slide.hasError = true;\n\n slide.$slide\n .trigger(\"onReset\")\n .removeClass(\"fancybox-slide--\" + slide.contentType)\n .addClass(\"fancybox-slide--error\");\n\n slide.contentType = \"html\";\n\n this.setContent(slide, this.translate(slide, slide.opts.errorTpl));\n\n if (slide.pos === this.currPos) {\n this.isAnimating = false;\n }\n },\n\n // Show loading icon inside the slide\n // ==================================\n\n showLoading: function (slide) {\n var self = this;\n\n slide = slide || self.current;\n\n if (slide && !slide.$spinner) {\n slide.$spinner = $(self.translate(self, self.opts.spinnerTpl))\n .appendTo(slide.$slide)\n .hide()\n .fadeIn(\"fast\");\n }\n },\n\n // Remove loading icon from the slide\n // ==================================\n\n hideLoading: function (slide) {\n var self = this;\n\n slide = slide || self.current;\n\n if (slide && slide.$spinner) {\n slide.$spinner.stop().remove();\n\n delete slide.$spinner;\n }\n },\n\n // Adjustments after slide content has been loaded\n // ===============================================\n\n afterLoad: function (slide) {\n var self = this;\n\n if (self.isClosing) {\n return;\n }\n\n slide.isLoading = false;\n slide.isLoaded = true;\n\n self.trigger(\"afterLoad\", slide);\n\n self.hideLoading(slide);\n\n // Add small close button\n if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) {\n slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content);\n }\n\n // Disable right click\n if (slide.opts.protect && slide.$content && !slide.hasError) {\n slide.$content.on(\"contextmenu.fb\", function (e) {\n if (e.button == 2) {\n e.preventDefault();\n }\n\n return true;\n });\n\n // Add fake element on top of the image\n // This makes a bit harder for user to select image\n if (slide.type === \"image\") {\n $('
').appendTo(slide.$content);\n }\n }\n\n self.adjustCaption(slide);\n\n self.adjustLayout(slide);\n\n if (slide.pos === self.currPos) {\n self.updateCursor();\n }\n\n self.revealContent(slide);\n },\n\n // Prevent caption overlap,\n // fix css inconsistency across browsers\n // =====================================\n\n adjustCaption: function (slide) {\n var self = this,\n current = slide || self.current,\n caption = current.opts.caption,\n preventOverlap = current.opts.preventCaptionOverlap,\n $caption = self.$refs.caption,\n $clone,\n captionH = false;\n\n $caption.toggleClass(\"fancybox-caption--separate\", preventOverlap);\n\n if (preventOverlap && caption && caption.length) {\n if (current.pos !== self.currPos) {\n $clone = $caption.clone().appendTo($caption.parent());\n\n $clone\n .children()\n .eq(0)\n .empty()\n .html(caption);\n\n captionH = $clone.outerHeight(true);\n\n $clone.empty().remove();\n } else if (self.$caption) {\n captionH = self.$caption.outerHeight(true);\n }\n\n current.$slide.css(\"padding-bottom\", captionH || \"\");\n }\n },\n\n // Simple hack to fix inconsistency across browsers, described here (affects Edge, too):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=748518\n // ====================================================================================\n\n adjustLayout: function (slide) {\n var self = this,\n current = slide || self.current,\n scrollHeight,\n marginBottom,\n inlinePadding,\n actualPadding;\n\n if (current.isLoaded && current.opts.disableLayoutFix !== true) {\n current.$content.css(\"margin-bottom\", \"\");\n\n // If we would always set margin-bottom for the content,\n // then it would potentially break vertical align\n if (current.$content.outerHeight() > current.$slide.height() + 0.5) {\n inlinePadding = current.$slide[0].style[\"padding-bottom\"];\n actualPadding = current.$slide.css(\"padding-bottom\");\n\n if (parseFloat(actualPadding) > 0) {\n scrollHeight = current.$slide[0].scrollHeight;\n\n current.$slide.css(\"padding-bottom\", 0);\n\n if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) {\n marginBottom = actualPadding;\n }\n\n current.$slide.css(\"padding-bottom\", inlinePadding);\n }\n }\n\n current.$content.css(\"margin-bottom\", marginBottom);\n }\n },\n\n // Make content visible\n // This method is called right after content has been loaded or\n // user navigates gallery and transition should start\n // ============================================================\n\n revealContent: function (slide) {\n var self = this,\n $slide = slide.$slide,\n end = false,\n start = false,\n isMoved = self.isMoved(slide),\n isRevealed = slide.isRevealed,\n effect,\n effectClassName,\n duration,\n opacity;\n\n slide.isRevealed = true;\n\n effect = slide.opts[self.firstRun ? \"animationEffect\" : \"transitionEffect\"];\n duration = slide.opts[self.firstRun ? \"animationDuration\" : \"transitionDuration\"];\n\n duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10);\n\n if (isMoved || slide.pos !== self.currPos || !duration) {\n effect = false;\n }\n\n // Check if can zoom\n if (effect === \"zoom\") {\n if (slide.pos === self.currPos && duration && slide.type === \"image\" && !slide.hasError && (start = self.getThumbPos(slide))) {\n end = self.getFitPos(slide);\n } else {\n effect = \"fade\";\n }\n }\n\n // Zoom animation\n // ==============\n if (effect === \"zoom\") {\n self.isAnimating = true;\n\n end.scaleX = end.width / start.width;\n end.scaleY = end.height / start.height;\n\n // Check if we need to animate opacity\n opacity = slide.opts.zoomOpacity;\n\n if (opacity == \"auto\") {\n opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1;\n }\n\n if (opacity) {\n start.opacity = 0.1;\n end.opacity = 1;\n }\n\n // Draw image at start position\n $.fancybox.setTranslate(slide.$content.removeClass(\"fancybox-is-hidden\"), start);\n\n forceRedraw(slide.$content);\n\n // Start animation\n $.fancybox.animate(slide.$content, end, duration, function () {\n self.isAnimating = false;\n\n self.complete();\n });\n\n return;\n }\n\n self.updateSlide(slide);\n\n // Simply show content if no effect\n // ================================\n if (!effect) {\n slide.$content.removeClass(\"fancybox-is-hidden\");\n\n if (!isRevealed && isMoved && slide.type === \"image\" && !slide.hasError) {\n slide.$content.hide().fadeIn(\"fast\");\n }\n\n if (slide.pos === self.currPos) {\n self.complete();\n }\n\n return;\n }\n\n // Prepare for CSS transiton\n // =========================\n $.fancybox.stop($slide);\n\n //effectClassName = \"fancybox-animated fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-fx-\" + effect;\n effectClassName = \"fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-animated fancybox-fx-\" + effect;\n\n $slide.addClass(effectClassName).removeClass(\"fancybox-slide--current\"); //.addClass(effectClassName);\n\n slide.$content.removeClass(\"fancybox-is-hidden\");\n\n // Force reflow\n forceRedraw($slide);\n\n if (slide.type !== \"image\") {\n slide.$content.hide().show(0);\n }\n\n $.fancybox.animate(\n $slide,\n \"fancybox-slide--current\",\n duration,\n function () {\n $slide.removeClass(effectClassName).css({\n transform: \"\",\n opacity: \"\"\n });\n\n if (slide.pos === self.currPos) {\n self.complete();\n }\n },\n true\n );\n },\n\n // Check if we can and have to zoom from thumbnail\n //================================================\n\n getThumbPos: function (slide) {\n var rez = false,\n $thumb = slide.$thumb,\n thumbPos,\n btw,\n brw,\n bbw,\n blw;\n\n if (!$thumb || !inViewport($thumb[0])) {\n return false;\n }\n\n thumbPos = $.fancybox.getTranslate($thumb);\n\n btw = parseFloat($thumb.css(\"border-top-width\") || 0);\n brw = parseFloat($thumb.css(\"border-right-width\") || 0);\n bbw = parseFloat($thumb.css(\"border-bottom-width\") || 0);\n blw = parseFloat($thumb.css(\"border-left-width\") || 0);\n\n rez = {\n top: thumbPos.top + btw,\n left: thumbPos.left + blw,\n width: thumbPos.width - brw - blw,\n height: thumbPos.height - btw - bbw,\n scaleX: 1,\n scaleY: 1\n };\n\n return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false;\n },\n\n // Final adjustments after current gallery item is moved to position\n // and it`s content is loaded\n // ==================================================================\n\n complete: function () {\n var self = this,\n current = self.current,\n slides = {},\n $el;\n\n if (self.isMoved() || !current.isLoaded) {\n return;\n }\n\n if (!current.isComplete) {\n current.isComplete = true;\n\n current.$slide.siblings().trigger(\"onReset\");\n\n self.preload(\"inline\");\n\n // Trigger any CSS transiton inside the slide\n forceRedraw(current.$slide);\n\n current.$slide.addClass(\"fancybox-slide--complete\");\n\n // Remove unnecessary slides\n $.each(self.slides, function (key, slide) {\n if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) {\n slides[slide.pos] = slide;\n } else if (slide) {\n $.fancybox.stop(slide.$slide);\n\n slide.$slide.off().remove();\n }\n });\n\n self.slides = slides;\n }\n\n self.isAnimating = false;\n\n self.updateCursor();\n\n self.trigger(\"afterShow\");\n\n // Autoplay first html5 video/audio\n if (!!current.opts.video.autoStart) {\n current.$slide\n .find(\"video,audio\")\n .filter(\":visible:first\")\n .trigger(\"play\")\n .one(\"ended\", function () {\n if (Document.exitFullscreen) {\n Document.exitFullscreen();\n } else if (this.webkitExitFullscreen) {\n this.webkitExitFullscreen();\n }\n\n self.next();\n });\n }\n\n // Try to focus on the first focusable element\n if (current.opts.autoFocus && current.contentType === \"html\") {\n // Look for the first input with autofocus attribute\n $el = current.$content.find(\"input[autofocus]:enabled:visible:first\");\n\n if ($el.length) {\n $el.trigger(\"focus\");\n } else {\n self.focus(null, true);\n }\n }\n\n // Avoid jumping\n current.$slide.scrollTop(0).scrollLeft(0);\n },\n\n // Preload next and previous slides\n // ================================\n\n preload: function (type) {\n var self = this,\n prev,\n next;\n\n if (self.group.length < 2) {\n return;\n }\n\n next = self.slides[self.currPos + 1];\n prev = self.slides[self.currPos - 1];\n\n if (prev && prev.type === type) {\n self.loadSlide(prev);\n }\n\n if (next && next.type === type) {\n self.loadSlide(next);\n }\n },\n\n // Try to find and focus on the first focusable element\n // ====================================================\n\n focus: function (e, firstRun) {\n var self = this,\n focusableStr = [\n \"a[href]\",\n \"area[href]\",\n 'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\n \"select:not([disabled]):not([aria-hidden])\",\n \"textarea:not([disabled]):not([aria-hidden])\",\n \"button:not([disabled]):not([aria-hidden])\",\n \"iframe\",\n \"object\",\n \"embed\",\n \"video\",\n \"audio\",\n \"[contenteditable]\",\n '[tabindex]:not([tabindex^=\"-\"])'\n ].join(\",\"),\n focusableItems,\n focusedItemIndex;\n\n if (self.isClosing) {\n return;\n }\n\n if (e || !self.current || !self.current.isComplete) {\n // Focus on any element inside fancybox\n focusableItems = self.$refs.container.find(\"*:visible\");\n } else {\n // Focus inside current slide\n focusableItems = self.current.$slide.find(\"*:visible\" + (firstRun ? \":not(.fancybox-close-small)\" : \"\"));\n }\n\n focusableItems = focusableItems.filter(focusableStr).filter(function () {\n return $(this).css(\"visibility\") !== \"hidden\" && !$(this).hasClass(\"disabled\");\n });\n\n if (focusableItems.length) {\n focusedItemIndex = focusableItems.index(document.activeElement);\n\n if (e && e.shiftKey) {\n // Back tab\n if (focusedItemIndex < 0 || focusedItemIndex == 0) {\n e.preventDefault();\n\n focusableItems.eq(focusableItems.length - 1).trigger(\"focus\");\n }\n } else {\n // Outside or Forward tab\n if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) {\n if (e) {\n e.preventDefault();\n }\n\n focusableItems.eq(0).trigger(\"focus\");\n }\n }\n } else {\n self.$refs.container.trigger(\"focus\");\n }\n },\n\n // Activates current instance - brings container to the front and enables keyboard,\n // notifies other instances about deactivating\n // =================================================================================\n\n activate: function () {\n var self = this;\n\n // Deactivate all instances\n $(\".fancybox-container\").each(function () {\n var instance = $(this).data(\"FancyBox\");\n\n // Skip self and closing instances\n if (instance && instance.id !== self.id && !instance.isClosing) {\n instance.trigger(\"onDeactivate\");\n\n instance.removeEvents();\n\n instance.isVisible = false;\n }\n });\n\n self.isVisible = true;\n\n if (self.current || self.isIdle) {\n self.update();\n\n self.updateControls();\n }\n\n self.trigger(\"onActivate\");\n\n self.addEvents();\n },\n\n // Start closing procedure\n // This will start \"zoom-out\" animation if needed and clean everything up afterwards\n // =================================================================================\n\n close: function (e, d) {\n var self = this,\n current = self.current,\n effect,\n duration,\n $content,\n domRect,\n opacity,\n start,\n end;\n\n var done = function () {\n self.cleanUp(e);\n };\n\n if (self.isClosing) {\n return false;\n }\n\n self.isClosing = true;\n\n // If beforeClose callback prevents closing, make sure content is centered\n if (self.trigger(\"beforeClose\", e) === false) {\n self.isClosing = false;\n\n requestAFrame(function () {\n self.update();\n });\n\n return false;\n }\n\n // Remove all events\n // If there are multiple instances, they will be set again by \"activate\" method\n self.removeEvents();\n\n $content = current.$content;\n effect = current.opts.animationEffect;\n duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0;\n\n current.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated\");\n\n if (e !== true) {\n $.fancybox.stop(current.$slide);\n } else {\n effect = false;\n }\n\n // Remove other slides\n current.$slide\n .siblings()\n .trigger(\"onReset\")\n .remove();\n\n // Trigger animations\n if (duration) {\n self.$refs.container\n .removeClass(\"fancybox-is-open\")\n .addClass(\"fancybox-is-closing\")\n .css(\"transition-duration\", duration + \"ms\");\n }\n\n // Clean up\n self.hideLoading(current);\n\n self.hideControls(true);\n\n self.updateCursor();\n\n // Check if possible to zoom-out\n if (\n effect === \"zoom\" &&\n !($content && duration && current.type === \"image\" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))\n ) {\n effect = \"fade\";\n }\n\n if (effect === \"zoom\") {\n $.fancybox.stop($content);\n\n domRect = $.fancybox.getTranslate($content);\n\n start = {\n top: domRect.top,\n left: domRect.left,\n scaleX: domRect.width / end.width,\n scaleY: domRect.height / end.height,\n width: end.width,\n height: end.height\n };\n\n // Check if we need to animate opacity\n opacity = current.opts.zoomOpacity;\n\n if (opacity == \"auto\") {\n opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1;\n }\n\n if (opacity) {\n end.opacity = 0;\n }\n\n $.fancybox.setTranslate($content, start);\n\n forceRedraw($content);\n\n $.fancybox.animate($content, end, duration, done);\n\n return true;\n }\n\n if (effect && duration) {\n $.fancybox.animate(\n current.$slide.addClass(\"fancybox-slide--previous\").removeClass(\"fancybox-slide--current\"),\n \"fancybox-animated fancybox-fx-\" + effect,\n duration,\n done\n );\n } else {\n // If skip animation\n if (e === true) {\n setTimeout(done, duration);\n } else {\n done();\n }\n }\n\n return true;\n },\n\n // Final adjustments after removing the instance\n // =============================================\n\n cleanUp: function (e) {\n var self = this,\n instance,\n $focus = self.current.opts.$orig,\n x,\n y;\n\n self.current.$slide.trigger(\"onReset\");\n\n self.$refs.container.empty().remove();\n\n self.trigger(\"afterClose\", e);\n\n // Place back focus\n if (!!self.current.opts.backFocus) {\n if (!$focus || !$focus.length || !$focus.is(\":visible\")) {\n $focus = self.$trigger;\n }\n\n if ($focus && $focus.length) {\n x = window.scrollX;\n y = window.scrollY;\n\n $focus.trigger(\"focus\");\n\n $(\"html, body\")\n .scrollTop(y)\n .scrollLeft(x);\n }\n }\n\n self.current = null;\n\n // Check if there are other instances\n instance = $.fancybox.getInstance();\n\n if (instance) {\n instance.activate();\n } else {\n $(\"body\").removeClass(\"fancybox-active compensate-for-scrollbar\");\n\n $(\"#fancybox-style-noscroll\").remove();\n }\n },\n\n // Call callback and trigger an event\n // ==================================\n\n trigger: function (name, slide) {\n var args = Array.prototype.slice.call(arguments, 1),\n self = this,\n obj = slide && slide.opts ? slide : self.current,\n rez;\n\n if (obj) {\n args.unshift(obj);\n } else {\n obj = self;\n }\n\n args.unshift(self);\n\n if ($.isFunction(obj.opts[name])) {\n rez = obj.opts[name].apply(obj, args);\n }\n\n if (rez === false) {\n return rez;\n }\n\n if (name === \"afterClose\" || !self.$refs) {\n $D.trigger(name + \".fb\", args);\n } else {\n self.$refs.container.trigger(name + \".fb\", args);\n }\n },\n\n // Update infobar values, navigation button states and reveal caption\n // ==================================================================\n\n updateControls: function () {\n var self = this,\n current = self.current,\n index = current.index,\n $container = self.$refs.container,\n $caption = self.$refs.caption,\n caption = current.opts.caption;\n\n // Recalculate content dimensions\n current.$slide.trigger(\"refresh\");\n\n // Set caption\n if (caption && caption.length) {\n self.$caption = $caption;\n\n $caption\n .children()\n .eq(0)\n .html(caption);\n } else {\n self.$caption = null;\n }\n\n if (!self.hasHiddenControls && !self.isIdle) {\n self.showControls();\n }\n\n // Update info and navigation elements\n $container.find(\"[data-fancybox-count]\").html(self.group.length);\n $container.find(\"[data-fancybox-index]\").html(index + 1);\n\n $container.find(\"[data-fancybox-prev]\").prop(\"disabled\", !current.opts.loop && index <= 0);\n $container.find(\"[data-fancybox-next]\").prop(\"disabled\", !current.opts.loop && index >= self.group.length - 1);\n\n if (current.type === \"image\") {\n // Re-enable buttons; update download button source\n $container\n .find(\"[data-fancybox-zoom]\")\n .show()\n .end()\n .find(\"[data-fancybox-download]\")\n .attr(\"href\", current.opts.image.src || current.src)\n .show();\n } else if (current.opts.toolbar) {\n $container.find(\"[data-fancybox-download],[data-fancybox-zoom]\").hide();\n }\n\n // Make sure focus is not on disabled button/element\n if ($(document.activeElement).is(\":hidden,[disabled]\")) {\n self.$refs.container.trigger(\"focus\");\n }\n },\n\n // Hide toolbar and caption\n // ========================\n\n hideControls: function (andCaption) {\n var self = this,\n arr = [\"infobar\", \"toolbar\", \"nav\"];\n\n if (andCaption || !self.current.opts.preventCaptionOverlap) {\n arr.push(\"caption\");\n }\n\n this.$refs.container.removeClass(\n arr\n .map(function (i) {\n return \"fancybox-show-\" + i;\n })\n .join(\" \")\n );\n\n this.hasHiddenControls = true;\n },\n\n showControls: function () {\n var self = this,\n opts = self.current ? self.current.opts : self.opts,\n $container = self.$refs.container;\n\n self.hasHiddenControls = false;\n self.idleSecondsCounter = 0;\n\n $container\n .toggleClass(\"fancybox-show-toolbar\", !!(opts.toolbar && opts.buttons))\n .toggleClass(\"fancybox-show-infobar\", !!(opts.infobar && self.group.length > 1))\n .toggleClass(\"fancybox-show-caption\", !!self.$caption)\n .toggleClass(\"fancybox-show-nav\", !!(opts.arrows && self.group.length > 1))\n .toggleClass(\"fancybox-is-modal\", !!opts.modal);\n },\n\n // Toggle toolbar and caption\n // ==========================\n\n toggleControls: function () {\n if (this.hasHiddenControls) {\n this.showControls();\n } else {\n this.hideControls();\n }\n }\n });\n\n $.fancybox = {\n version: \"3.5.7\",\n defaults: defaults,\n\n // Get current instance and execute a command.\n //\n // Examples of usage:\n //\n // $instance = $.fancybox.getInstance();\n // $.fancybox.getInstance().jumpTo( 1 );\n // $.fancybox.getInstance( 'jumpTo', 1 );\n // $.fancybox.getInstance( function() {\n // console.info( this.currIndex );\n // });\n // ======================================================\n\n getInstance: function (command) {\n var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data(\"FancyBox\"),\n args = Array.prototype.slice.call(arguments, 1);\n\n if (instance instanceof FancyBox) {\n if ($.type(command) === \"string\") {\n instance[command].apply(instance, args);\n } else if ($.type(command) === \"function\") {\n command.apply(instance, args);\n }\n\n return instance;\n }\n\n return false;\n },\n\n // Create new instance\n // ===================\n\n open: function (items, opts, index) {\n return new FancyBox(items, opts, index);\n },\n\n // Close current or all instances\n // ==============================\n\n close: function (all) {\n var instance = this.getInstance();\n\n if (instance) {\n instance.close();\n\n // Try to find and close next instance\n if (all === true) {\n this.close(all);\n }\n }\n },\n\n // Close all instances and unbind all events\n // =========================================\n\n destroy: function () {\n this.close(true);\n\n $D.add(\"body\").off(\"click.fb-start\", \"**\");\n },\n\n // Try to detect mobile devices\n // ============================\n\n isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\n\n // Detect if 'translate3d' support is available\n // ============================================\n\n use3d: (function () {\n var div = document.createElement(\"div\");\n\n return (\n window.getComputedStyle &&\n window.getComputedStyle(div) &&\n window.getComputedStyle(div).getPropertyValue(\"transform\") &&\n !(document.documentMode && document.documentMode < 11)\n );\n })(),\n\n // Helper function to get current visual state of an element\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\n // =====================================================================\n\n getTranslate: function ($el) {\n var domRect;\n\n if (!$el || !$el.length) {\n return false;\n }\n\n domRect = $el[0].getBoundingClientRect();\n\n return {\n top: domRect.top || 0,\n left: domRect.left || 0,\n width: domRect.width,\n height: domRect.height,\n opacity: parseFloat($el.css(\"opacity\"))\n };\n },\n\n // Shortcut for setting \"translate3d\" properties for element\n // Can set be used to set opacity, too\n // ========================================================\n\n setTranslate: function ($el, props) {\n var str = \"\",\n css = {};\n\n if (!$el || !props) {\n return;\n }\n\n if (props.left !== undefined || props.top !== undefined) {\n str =\n (props.left === undefined ? $el.position().left : props.left) +\n \"px, \" +\n (props.top === undefined ? $el.position().top : props.top) +\n \"px\";\n\n if (this.use3d) {\n str = \"translate3d(\" + str + \", 0px)\";\n } else {\n str = \"translate(\" + str + \")\";\n }\n }\n\n if (props.scaleX !== undefined && props.scaleY !== undefined) {\n str += \" scale(\" + props.scaleX + \", \" + props.scaleY + \")\";\n } else if (props.scaleX !== undefined) {\n str += \" scaleX(\" + props.scaleX + \")\";\n }\n\n if (str.length) {\n css.transform = str;\n }\n\n if (props.opacity !== undefined) {\n css.opacity = props.opacity;\n }\n\n if (props.width !== undefined) {\n css.width = props.width;\n }\n\n if (props.height !== undefined) {\n css.height = props.height;\n }\n\n return $el.css(css);\n },\n\n // Simple CSS transition handler\n // =============================\n\n animate: function ($el, to, duration, callback, leaveAnimationName) {\n var self = this,\n from;\n\n if ($.isFunction(duration)) {\n callback = duration;\n duration = null;\n }\n\n self.stop($el);\n\n from = self.getTranslate($el);\n\n $el.on(transitionEnd, function (e) {\n // Skip events from child elements and z-index change\n if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == \"z-index\")) {\n return;\n }\n\n self.stop($el);\n\n if ($.isNumeric(duration)) {\n $el.css(\"transition-duration\", \"\");\n }\n\n if ($.isPlainObject(to)) {\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\n self.setTranslate($el, {\n top: to.top,\n left: to.left,\n width: from.width * to.scaleX,\n height: from.height * to.scaleY,\n scaleX: 1,\n scaleY: 1\n });\n }\n } else if (leaveAnimationName !== true) {\n $el.removeClass(to);\n }\n\n if ($.isFunction(callback)) {\n callback(e);\n }\n });\n\n if ($.isNumeric(duration)) {\n $el.css(\"transition-duration\", duration + \"ms\");\n }\n\n // Start animation by changing CSS properties or class name\n if ($.isPlainObject(to)) {\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\n delete to.width;\n delete to.height;\n\n if ($el.parent().hasClass(\"fancybox-slide--image\")) {\n $el.parent().addClass(\"fancybox-is-scaling\");\n }\n }\n\n $.fancybox.setTranslate($el, to);\n } else {\n $el.addClass(to);\n }\n\n // Make sure that `transitionend` callback gets fired\n $el.data(\n \"timer\",\n setTimeout(function () {\n $el.trigger(transitionEnd);\n }, duration + 33)\n );\n },\n\n stop: function ($el, callCallback) {\n if ($el && $el.length) {\n clearTimeout($el.data(\"timer\"));\n\n if (callCallback) {\n $el.trigger(transitionEnd);\n }\n\n $el.off(transitionEnd).css(\"transition-duration\", \"\");\n\n $el.parent().removeClass(\"fancybox-is-scaling\");\n }\n }\n };\n\n // Default click handler for \"fancyboxed\" links\n // ============================================\n\n function _run(e, opts) {\n var items = [],\n index = 0,\n $target,\n value,\n instance;\n\n // Avoid opening multiple times\n if (e && e.isDefaultPrevented()) {\n return;\n }\n\n e.preventDefault();\n\n opts = opts || {};\n\n if (e && e.data) {\n opts = mergeOpts(e.data.options, opts);\n }\n\n $target = opts.$target || $(e.currentTarget).trigger(\"blur\");\n instance = $.fancybox.getInstance();\n\n if (instance && instance.$trigger && instance.$trigger.is($target)) {\n return;\n }\n\n if (opts.selector) {\n items = $(opts.selector);\n } else {\n // Get all related items and find index for clicked one\n value = $target.attr(\"data-fancybox\") || \"\";\n\n if (value) {\n items = e.data ? e.data.items : [];\n items = items.length ? items.filter('[data-fancybox=\"' + value + '\"]') : $('[data-fancybox=\"' + value + '\"]');\n } else {\n items = [$target];\n }\n }\n\n index = $(items).index($target);\n\n // Sometimes current item can not be found\n if (index < 0) {\n index = 0;\n }\n\n instance = $.fancybox.open(items, opts, index);\n\n // Save last active element\n instance.$trigger = $target;\n }\n\n // Create a jQuery plugin\n // ======================\n\n $.fn.fancybox = function (options) {\n var selector;\n\n options = options || {};\n selector = options.selector || false;\n\n if (selector) {\n // Use body element instead of document so it executes first\n $(\"body\")\n .off(\"click.fb-start\", selector)\n .on(\"click.fb-start\", selector, {\n options: options\n }, _run);\n } else {\n this.off(\"click.fb-start\").on(\n \"click.fb-start\", {\n items: this,\n options: options\n },\n _run\n );\n }\n\n return this;\n };\n\n // Self initializing plugin for all elements having `data-fancybox` attribute\n // ==========================================================================\n\n $D.on(\"click.fb-start\", \"[data-fancybox]\", _run);\n\n // Enable \"trigger elements\"\n // =========================\n\n $D.on(\"click.fb-start\", \"[data-fancybox-trigger]\", function (e) {\n $('[data-fancybox=\"' + $(this).attr(\"data-fancybox-trigger\") + '\"]')\n .eq($(this).attr(\"data-fancybox-index\") || 0)\n .trigger(\"click.fb-start\", {\n $trigger: $(this)\n });\n });\n\n // Track focus event for better accessibility styling\n // ==================================================\n (function () {\n var buttonStr = \".fancybox-button\",\n focusStr = \"fancybox-focus\",\n $pressed = null;\n\n $D.on(\"mousedown mouseup focus blur\", buttonStr, function (e) {\n switch (e.type) {\n case \"mousedown\":\n $pressed = $(this);\n break;\n case \"mouseup\":\n $pressed = null;\n break;\n case \"focusin\":\n $(buttonStr).removeClass(focusStr);\n\n if (!$(this).is($pressed) && !$(this).is(\"[disabled]\")) {\n $(this).addClass(focusStr);\n }\n break;\n case \"focusout\":\n $(buttonStr).removeClass(focusStr);\n break;\n }\n });\n })();\n})(window, document, jQuery);\n// ==========================================================================\n//\n// Guestures\n// Adds touch guestures, handles click and tap events\n//\n// ==========================================================================\n(function (window, document, $) {\n \"use strict\";\n\n var requestAFrame = (function () {\n return (\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n // if all else fails, use setTimeout\n function (callback) {\n return window.setTimeout(callback, 1000 / 60);\n }\n );\n })();\n\n var cancelAFrame = (function () {\n return (\n window.cancelAnimationFrame ||\n window.webkitCancelAnimationFrame ||\n window.mozCancelAnimationFrame ||\n window.oCancelAnimationFrame ||\n function (id) {\n window.clearTimeout(id);\n }\n );\n })();\n\n var getPointerXY = function (e) {\n var result = [];\n\n e = e.originalEvent || e || window.e;\n e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];\n\n for (var key in e) {\n if (e[key].pageX) {\n result.push({\n x: e[key].pageX,\n y: e[key].pageY\n });\n } else if (e[key].clientX) {\n result.push({\n x: e[key].clientX,\n y: e[key].clientY\n });\n }\n }\n\n return result;\n };\n\n var distance = function (point2, point1, what) {\n if (!point1 || !point2) {\n return 0;\n }\n\n if (what === \"x\") {\n return point2.x - point1.x;\n } else if (what === \"y\") {\n return point2.y - point1.y;\n }\n\n return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\n };\n\n var isClickable = function ($el) {\n if (\n $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea,video,audio,iframe') ||\n $.isFunction($el.get(0).onclick) ||\n $el.data(\"selectable\")\n ) {\n return true;\n }\n\n // Check for attributes like data-fancybox-next or data-fancybox-close\n for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) {\n if (atts[i].nodeName.substr(0, 14) === \"data-fancybox-\") {\n return true;\n }\n }\n\n return false;\n };\n\n var hasScrollbars = function (el) {\n var overflowY = window.getComputedStyle(el)[\"overflow-y\"],\n overflowX = window.getComputedStyle(el)[\"overflow-x\"],\n vertical = (overflowY === \"scroll\" || overflowY === \"auto\") && el.scrollHeight > el.clientHeight,\n horizontal = (overflowX === \"scroll\" || overflowX === \"auto\") && el.scrollWidth > el.clientWidth;\n\n return vertical || horizontal;\n };\n\n var isScrollable = function ($el) {\n var rez = false;\n\n while (true) {\n rez = hasScrollbars($el.get(0));\n\n if (rez) {\n break;\n }\n\n $el = $el.parent();\n\n if (!$el.length || $el.hasClass(\"fancybox-stage\") || $el.is(\"body\")) {\n break;\n }\n }\n\n return rez;\n };\n\n var Guestures = function (instance) {\n var self = this;\n\n self.instance = instance;\n\n self.$bg = instance.$refs.bg;\n self.$stage = instance.$refs.stage;\n self.$container = instance.$refs.container;\n\n self.destroy();\n\n self.$container.on(\"touchstart.fb.touch mousedown.fb.touch\", $.proxy(self, \"ontouchstart\"));\n };\n\n Guestures.prototype.destroy = function () {\n var self = this;\n\n self.$container.off(\".fb.touch\");\n\n $(document).off(\".fb.touch\");\n\n if (self.requestId) {\n cancelAFrame(self.requestId);\n self.requestId = null;\n }\n\n if (self.tapped) {\n clearTimeout(self.tapped);\n self.tapped = null;\n }\n };\n\n Guestures.prototype.ontouchstart = function (e) {\n var self = this,\n $target = $(e.target),\n instance = self.instance,\n current = instance.current,\n $slide = current.$slide,\n $content = current.$content,\n isTouchDevice = e.type == \"touchstart\";\n\n // Do not respond to both (touch and mouse) events\n if (isTouchDevice) {\n self.$container.off(\"mousedown.fb.touch\");\n }\n\n // Ignore right click\n if (e.originalEvent && e.originalEvent.button == 2) {\n return;\n }\n\n // Ignore taping on links, buttons, input elements\n if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) {\n return;\n }\n // Ignore clicks on the scrollbar\n if (!$target.is(\"img\") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) {\n return;\n }\n\n // Ignore clicks while zooming or closing\n if (!current || instance.isAnimating || current.$slide.hasClass(\"fancybox-animated\")) {\n e.stopPropagation();\n e.preventDefault();\n\n return;\n }\n\n self.realPoints = self.startPoints = getPointerXY(e);\n\n if (!self.startPoints.length) {\n return;\n }\n\n // Allow other scripts to catch touch event if \"touch\" is set to false\n if (current.touch) {\n e.stopPropagation();\n }\n\n self.startEvent = e;\n\n self.canTap = true;\n self.$target = $target;\n self.$content = $content;\n self.opts = current.opts.touch;\n\n self.isPanning = false;\n self.isSwiping = false;\n self.isZooming = false;\n self.isScrolling = false;\n self.canPan = instance.canPan();\n\n self.startTime = new Date().getTime();\n self.distanceX = self.distanceY = self.distance = 0;\n\n self.canvasWidth = Math.round($slide[0].clientWidth);\n self.canvasHeight = Math.round($slide[0].clientHeight);\n\n self.contentLastPos = null;\n self.contentStartPos = $.fancybox.getTranslate(self.$content) || {\n top: 0,\n left: 0\n };\n self.sliderStartPos = $.fancybox.getTranslate($slide);\n\n // Since position will be absolute, but we need to make it relative to the stage\n self.stagePos = $.fancybox.getTranslate(instance.$refs.stage);\n\n self.sliderStartPos.top -= self.stagePos.top;\n self.sliderStartPos.left -= self.stagePos.left;\n\n self.contentStartPos.top -= self.stagePos.top;\n self.contentStartPos.left -= self.stagePos.left;\n\n $(document)\n .off(\".fb.touch\")\n .on(isTouchDevice ? \"touchend.fb.touch touchcancel.fb.touch\" : \"mouseup.fb.touch mouseleave.fb.touch\", $.proxy(self, \"ontouchend\"))\n .on(isTouchDevice ? \"touchmove.fb.touch\" : \"mousemove.fb.touch\", $.proxy(self, \"ontouchmove\"));\n\n if ($.fancybox.isMobile) {\n document.addEventListener(\"scroll\", self.onscroll, true);\n }\n\n // Skip if clicked outside the sliding area\n if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) {\n if ($target.is(\".fancybox-image\")) {\n e.preventDefault();\n }\n\n if (!($.fancybox.isMobile && $target.parents(\".fancybox-caption\").length)) {\n return;\n }\n }\n\n self.isScrollable = isScrollable($target) || isScrollable($target.parent());\n\n // Check if element is scrollable and try to prevent default behavior (scrolling)\n if (!($.fancybox.isMobile && self.isScrollable)) {\n e.preventDefault();\n }\n\n // One finger or mouse click - swipe or pan an image\n if (self.startPoints.length === 1 || current.hasError) {\n if (self.canPan) {\n $.fancybox.stop(self.$content);\n\n self.isPanning = true;\n } else {\n self.isSwiping = true;\n }\n\n self.$container.addClass(\"fancybox-is-grabbing\");\n }\n\n // Two fingers - zoom image\n if (self.startPoints.length === 2 && current.type === \"image\" && (current.isLoaded || current.$ghost)) {\n self.canTap = false;\n self.isSwiping = false;\n self.isPanning = false;\n\n self.isZooming = true;\n\n $.fancybox.stop(self.$content);\n\n self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft();\n self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop();\n\n self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width;\n self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height;\n\n self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]);\n }\n };\n\n Guestures.prototype.onscroll = function (e) {\n var self = this;\n\n self.isScrolling = true;\n\n document.removeEventListener(\"scroll\", self.onscroll, true);\n };\n\n Guestures.prototype.ontouchmove = function (e) {\n var self = this;\n\n // Make sure user has not released over iframe or disabled element\n if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) {\n self.ontouchend(e);\n return;\n }\n\n if (self.isScrolling) {\n self.canTap = false;\n return;\n }\n\n self.newPoints = getPointerXY(e);\n\n if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) {\n return;\n }\n\n if (!(self.isSwiping && self.isSwiping === true)) {\n e.preventDefault();\n }\n\n self.distanceX = distance(self.newPoints[0], self.startPoints[0], \"x\");\n self.distanceY = distance(self.newPoints[0], self.startPoints[0], \"y\");\n\n self.distance = distance(self.newPoints[0], self.startPoints[0]);\n\n // Skip false ontouchmove events (Chrome)\n if (self.distance > 0) {\n if (self.isSwiping) {\n self.onSwipe(e);\n } else if (self.isPanning) {\n self.onPan();\n } else if (self.isZooming) {\n self.onZoom();\n }\n }\n };\n\n Guestures.prototype.onSwipe = function (e) {\n var self = this,\n instance = self.instance,\n swiping = self.isSwiping,\n left = self.sliderStartPos.left || 0,\n angle;\n\n // If direction is not yet determined\n if (swiping === true) {\n // We need at least 10px distance to correctly calculate an angle\n if (Math.abs(self.distance) > 10) {\n self.canTap = false;\n\n if (instance.group.length < 2 && self.opts.vertical) {\n self.isSwiping = \"y\";\n } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === \"auto\" && $(window).width() > 800)) {\n self.isSwiping = \"x\";\n } else {\n angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI);\n\n self.isSwiping = angle > 45 && angle < 135 ? \"y\" : \"x\";\n }\n\n if (self.isSwiping === \"y\" && $.fancybox.isMobile && self.isScrollable) {\n self.isScrolling = true;\n\n return;\n }\n\n instance.isDragging = self.isSwiping;\n\n // Reset points to avoid jumping, because we dropped first swipes to calculate the angle\n self.startPoints = self.newPoints;\n\n $.each(instance.slides, function (index, slide) {\n var slidePos, stagePos;\n\n $.fancybox.stop(slide.$slide);\n\n slidePos = $.fancybox.getTranslate(slide.$slide);\n stagePos = $.fancybox.getTranslate(instance.$refs.stage);\n\n slide.$slide\n .css({\n transform: \"\",\n opacity: \"\",\n \"transition-duration\": \"\"\n })\n .removeClass(\"fancybox-animated\")\n .removeClass(function (index, className) {\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\n });\n\n if (slide.pos === instance.current.pos) {\n self.sliderStartPos.top = slidePos.top - stagePos.top;\n self.sliderStartPos.left = slidePos.left - stagePos.left;\n }\n\n $.fancybox.setTranslate(slide.$slide, {\n top: slidePos.top - stagePos.top,\n left: slidePos.left - stagePos.left\n });\n });\n\n // Stop slideshow\n if (instance.SlideShow && instance.SlideShow.isActive) {\n instance.SlideShow.stop();\n }\n }\n\n return;\n }\n\n // Sticky edges\n if (swiping == \"x\") {\n if (\n self.distanceX > 0 &&\n (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop))\n ) {\n left = left + Math.pow(self.distanceX, 0.8);\n } else if (\n self.distanceX < 0 &&\n (self.instance.group.length < 2 ||\n (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop))\n ) {\n left = left - Math.pow(-self.distanceX, 0.8);\n } else {\n left = left + self.distanceX;\n }\n }\n\n self.sliderLastPos = {\n top: swiping == \"x\" ? 0 : self.sliderStartPos.top + self.distanceY,\n left: left\n };\n\n if (self.requestId) {\n cancelAFrame(self.requestId);\n\n self.requestId = null;\n }\n\n self.requestId = requestAFrame(function () {\n if (self.sliderLastPos) {\n $.each(self.instance.slides, function (index, slide) {\n var pos = slide.pos - self.instance.currPos;\n\n $.fancybox.setTranslate(slide.$slide, {\n top: self.sliderLastPos.top,\n left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter\n });\n });\n\n self.$container.addClass(\"fancybox-is-sliding\");\n }\n });\n };\n\n Guestures.prototype.onPan = function () {\n var self = this;\n\n // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit)\n if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) {\n self.startPoints = self.newPoints;\n return;\n }\n\n self.canTap = false;\n\n self.contentLastPos = self.limitMovement();\n\n if (self.requestId) {\n cancelAFrame(self.requestId);\n }\n\n self.requestId = requestAFrame(function () {\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\n });\n };\n\n // Make panning sticky to the edges\n Guestures.prototype.limitMovement = function () {\n var self = this;\n\n var canvasWidth = self.canvasWidth;\n var canvasHeight = self.canvasHeight;\n\n var distanceX = self.distanceX;\n var distanceY = self.distanceY;\n\n var contentStartPos = self.contentStartPos;\n\n var currentOffsetX = contentStartPos.left;\n var currentOffsetY = contentStartPos.top;\n\n var currentWidth = contentStartPos.width;\n var currentHeight = contentStartPos.height;\n\n var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY;\n\n if (currentWidth > canvasWidth) {\n newOffsetX = currentOffsetX + distanceX;\n } else {\n newOffsetX = currentOffsetX;\n }\n\n newOffsetY = currentOffsetY + distanceY;\n\n // Slow down proportionally to traveled distance\n minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5);\n minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5);\n\n maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5);\n maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5);\n\n // ->\n if (distanceX > 0 && newOffsetX > minTranslateX) {\n newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0;\n }\n\n // <-\n if (distanceX < 0 && newOffsetX < maxTranslateX) {\n newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0;\n }\n\n // \\/\n if (distanceY > 0 && newOffsetY > minTranslateY) {\n newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0;\n }\n\n // /\\\n if (distanceY < 0 && newOffsetY < maxTranslateY) {\n newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0;\n }\n\n return {\n top: newOffsetY,\n left: newOffsetX\n };\n };\n\n Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) {\n var self = this;\n\n var canvasWidth = self.canvasWidth;\n var canvasHeight = self.canvasHeight;\n\n if (newWidth > canvasWidth) {\n newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\n newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\n } else {\n // Center horizontally\n newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2);\n }\n\n if (newHeight > canvasHeight) {\n newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\n newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\n } else {\n // Center vertically\n newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2);\n }\n\n return {\n top: newOffsetY,\n left: newOffsetX\n };\n };\n\n Guestures.prototype.onZoom = function () {\n var self = this;\n\n // Calculate current distance between points to get pinch ratio and new width and height\n var contentStartPos = self.contentStartPos;\n\n var currentWidth = contentStartPos.width;\n var currentHeight = contentStartPos.height;\n\n var currentOffsetX = contentStartPos.left;\n var currentOffsetY = contentStartPos.top;\n\n var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]);\n\n var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\n\n var newWidth = Math.floor(currentWidth * pinchRatio);\n var newHeight = Math.floor(currentHeight * pinchRatio);\n\n // This is the translation due to pinch-zooming\n var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\n var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\n\n // Point between the two touches\n var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft();\n var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop();\n\n // And this is the translation due to translation of the centerpoint\n // between the two fingers\n var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\n var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\n\n // The new offset is the old/current one plus the total translation\n var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX);\n var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY);\n\n var newPos = {\n top: newOffsetY,\n left: newOffsetX,\n scaleX: pinchRatio,\n scaleY: pinchRatio\n };\n\n self.canTap = false;\n\n self.newWidth = newWidth;\n self.newHeight = newHeight;\n\n self.contentLastPos = newPos;\n\n if (self.requestId) {\n cancelAFrame(self.requestId);\n }\n\n self.requestId = requestAFrame(function () {\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\n });\n };\n\n Guestures.prototype.ontouchend = function (e) {\n var self = this;\n\n var swiping = self.isSwiping;\n var panning = self.isPanning;\n var zooming = self.isZooming;\n var scrolling = self.isScrolling;\n\n self.endPoints = getPointerXY(e);\n self.dMs = Math.max(new Date().getTime() - self.startTime, 1);\n\n self.$container.removeClass(\"fancybox-is-grabbing\");\n\n $(document).off(\".fb.touch\");\n\n document.removeEventListener(\"scroll\", self.onscroll, true);\n\n if (self.requestId) {\n cancelAFrame(self.requestId);\n\n self.requestId = null;\n }\n\n self.isSwiping = false;\n self.isPanning = false;\n self.isZooming = false;\n self.isScrolling = false;\n\n self.instance.isDragging = false;\n\n if (self.canTap) {\n return self.onTap(e);\n }\n\n self.speed = 100;\n\n // Speed in px/ms\n self.velocityX = (self.distanceX / self.dMs) * 0.5;\n self.velocityY = (self.distanceY / self.dMs) * 0.5;\n\n if (panning) {\n self.endPanning();\n } else if (zooming) {\n self.endZooming();\n } else {\n self.endSwiping(swiping, scrolling);\n }\n\n return;\n };\n\n Guestures.prototype.endSwiping = function (swiping, scrolling) {\n var self = this,\n ret = false,\n len = self.instance.group.length,\n distanceX = Math.abs(self.distanceX),\n canAdvance = swiping == \"x\" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50),\n speedX = 300;\n\n self.sliderLastPos = null;\n\n // Close if swiped vertically / navigate if horizontally\n if (swiping == \"y\" && !scrolling && Math.abs(self.distanceY) > 50) {\n // Continue vertical movement\n $.fancybox.animate(\n self.instance.current.$slide, {\n top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150,\n opacity: 0\n },\n 200\n );\n ret = self.instance.close(true, 250);\n } else if (canAdvance && self.distanceX > 0) {\n ret = self.instance.previous(speedX);\n } else if (canAdvance && self.distanceX < 0) {\n ret = self.instance.next(speedX);\n }\n\n if (ret === false && (swiping == \"x\" || swiping == \"y\")) {\n self.instance.centerSlide(200);\n }\n\n self.$container.removeClass(\"fancybox-is-sliding\");\n };\n\n // Limit panning from edges\n // ========================\n Guestures.prototype.endPanning = function () {\n var self = this,\n newOffsetX,\n newOffsetY,\n newPos;\n\n if (!self.contentLastPos) {\n return;\n }\n\n if (self.opts.momentum === false || self.dMs > 350) {\n newOffsetX = self.contentLastPos.left;\n newOffsetY = self.contentLastPos.top;\n } else {\n // Continue movement\n newOffsetX = self.contentLastPos.left + self.velocityX * 500;\n newOffsetY = self.contentLastPos.top + self.velocityY * 500;\n }\n\n newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height);\n\n newPos.width = self.contentStartPos.width;\n newPos.height = self.contentStartPos.height;\n\n $.fancybox.animate(self.$content, newPos, 366);\n };\n\n Guestures.prototype.endZooming = function () {\n var self = this;\n\n var current = self.instance.current;\n\n var newOffsetX, newOffsetY, newPos, reset;\n\n var newWidth = self.newWidth;\n var newHeight = self.newHeight;\n\n if (!self.contentLastPos) {\n return;\n }\n\n newOffsetX = self.contentLastPos.left;\n newOffsetY = self.contentLastPos.top;\n\n reset = {\n top: newOffsetY,\n left: newOffsetX,\n width: newWidth,\n height: newHeight,\n scaleX: 1,\n scaleY: 1\n };\n\n // Reset scalex/scaleY values; this helps for perfomance and does not break animation\n $.fancybox.setTranslate(self.$content, reset);\n\n if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) {\n self.instance.scaleToFit(150);\n } else if (newWidth > current.width || newHeight > current.height) {\n self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150);\n } else {\n newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight);\n\n $.fancybox.animate(self.$content, newPos, 150);\n }\n };\n\n Guestures.prototype.onTap = function (e) {\n var self = this;\n var $target = $(e.target);\n\n var instance = self.instance;\n var current = instance.current;\n\n var endPoints = (e && getPointerXY(e)) || self.startPoints;\n\n var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0;\n var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0;\n\n var where;\n\n var process = function (prefix) {\n var action = current.opts[prefix];\n\n if ($.isFunction(action)) {\n action = action.apply(instance, [current, e]);\n }\n\n if (!action) {\n return;\n }\n\n switch (action) {\n case \"close\":\n instance.close(self.startEvent);\n\n break;\n\n case \"toggleControls\":\n instance.toggleControls();\n\n break;\n\n case \"next\":\n instance.next();\n\n break;\n\n case \"nextOrClose\":\n if (instance.group.length > 1) {\n instance.next();\n } else {\n instance.close(self.startEvent);\n }\n\n break;\n\n case \"zoom\":\n if (current.type == \"image\" && (current.isLoaded || current.$ghost)) {\n if (instance.canPan()) {\n instance.scaleToFit();\n } else if (instance.isScaledDown()) {\n instance.scaleToActual(tapX, tapY);\n } else if (instance.group.length < 2) {\n instance.close(self.startEvent);\n }\n }\n\n break;\n }\n };\n\n // Ignore right click\n if (e.originalEvent && e.originalEvent.button == 2) {\n return;\n }\n\n // Skip if clicked on the scrollbar\n if (!$target.is(\"img\") && tapX > $target[0].clientWidth + $target.offset().left) {\n return;\n }\n\n // Check where is clicked\n if ($target.is(\".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container\")) {\n where = \"Outside\";\n } else if ($target.is(\".fancybox-slide\")) {\n where = \"Slide\";\n } else if (\n instance.current.$content &&\n instance.current.$content\n .find($target)\n .addBack()\n .filter($target).length\n ) {\n where = \"Content\";\n } else {\n return;\n }\n\n // Check if this is a double tap\n if (self.tapped) {\n // Stop previously created single tap\n clearTimeout(self.tapped);\n self.tapped = null;\n\n // Skip if distance between taps is too big\n if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) {\n return this;\n }\n\n // OK, now we assume that this is a double-tap\n process(\"dblclick\" + where);\n } else {\n // Single tap will be processed if user has not clicked second time within 300ms\n // or there is no need to wait for double-tap\n self.tapX = tapX;\n self.tapY = tapY;\n\n if (current.opts[\"dblclick\" + where] && current.opts[\"dblclick\" + where] !== current.opts[\"click\" + where]) {\n self.tapped = setTimeout(function () {\n self.tapped = null;\n\n if (!instance.isAnimating) {\n process(\"click\" + where);\n }\n }, 500);\n } else {\n process(\"click\" + where);\n }\n }\n\n return this;\n };\n\n $(document)\n .on(\"onActivate.fb\", function (e, instance) {\n if (instance && !instance.Guestures) {\n instance.Guestures = new Guestures(instance);\n }\n })\n .on(\"beforeClose.fb\", function (e, instance) {\n if (instance && instance.Guestures) {\n instance.Guestures.destroy();\n }\n });\n})(window, document, jQuery);\n// ==========================================================================\n//\n// Wheel\n// Basic mouse weheel support for gallery navigation\n//\n// ==========================================================================\n(function (document, $) {\n \"use strict\";\n\n var prevTime = new Date().getTime();\n\n $(document).on({\n \"onInit.fb\": function (e, instance, current) {\n instance.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\", function (e) {\n var current = instance.current,\n currTime = new Date().getTime();\n\n if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \"auto\" && current.type !== \"image\")) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n if (current.$slide.hasClass(\"fancybox-animated\")) {\n return;\n }\n\n e = e.originalEvent || e;\n\n if (currTime - prevTime < 250) {\n return;\n }\n\n prevTime = currTime;\n\n instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \"next\" : \"previous\"]();\n });\n }\n });\n})(document, jQuery);"],"sourceRoot":""}