{"version":3,"sources":["webpack:////home/vsts/work/1/s/node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js"],"names":["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","charAt","inArray","$thumb","$trigger","thumb","caption","apply","split","shift","filter","push","Object","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","parseFloat","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","trim","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","inViewport","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","youtube","matcher","params","autoplay","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","instagram","gmap_place","indexOf","gmap_search","param","urlParams","paramObj","provider","providerName","providerOpts","m","p","decodeURIComponent","p1","s","origSrc","contentSource","VideoAPILoader","class","loading","loaded","load","vendor","script","_this","onYouTubeIframeAPIReady","appendChild","YT","Player","events","onStateChange","Vimeo","getPointerXY","result","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","progress","timer","$button","toggle","$progress","inner","set","force","clear","removeAttr","keypress","hidden","fnMap","val","FullScreen","request","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","fullscreenchange","CLASS","FancyThumbs","$grid","$list","list","innerHTML","share","currentHash","location","string","entityMap","encodeURIComponent","String","text","shareInstance","shareCurrent","click","href","parseUrl","pop","gallery","triggerFromUrl","escapeSelector","getGalleryID","sel","ch","asCodePoint","charCodeAt","toString","origHash","hashTimer","history","title","pathname","search","hasCreatedHistory","back","replaceState","fb","reverse","tmp","prevTime","currTime","deltaY","deltaX","wheelDelta","detail"],"mappings":"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","file":"partial.vendors~fancybox.js","sourcesContent":["// ==================================================\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) {\r\n  \"use strict\";\r\n\r\n  window.console = window.console || {\r\n    info: function (stuff) {}\r\n  };\r\n\r\n  // If there's no jQuery, fancyBox can't work\r\n  // =========================================\r\n\r\n  if (!$) {\r\n    return;\r\n  }\r\n\r\n  // Check if fancyBox is already initialized\r\n  // ========================================\r\n\r\n  if ($.fn.fancybox) {\r\n    console.info(\"fancyBox already initialized\");\r\n\r\n    return;\r\n  }\r\n\r\n  // Private default settings\r\n  // ========================\r\n\r\n  var defaults = {\r\n    // Close existing modals\r\n    // Set this to false if you do not need to stack multiple instances\r\n    closeExisting: false,\r\n\r\n    // Enable infinite gallery navigation\r\n    loop: false,\r\n\r\n    // Horizontal space between slides\r\n    gutter: 50,\r\n\r\n    // Enable keyboard navigation\r\n    keyboard: true,\r\n\r\n    // Should allow caption to overlap the content\r\n    preventCaptionOverlap: true,\r\n\r\n    // Should display navigation arrows at the screen edges\r\n    arrows: true,\r\n\r\n    // Should display counter at the top left corner\r\n    infobar: true,\r\n\r\n    // Should display close button (using `btnTpl.smallBtn` template) over the content\r\n    // Can be true, false, \"auto\"\r\n    // If \"auto\" - will be automatically enabled for \"html\", \"inline\" or \"ajax\" items\r\n    smallBtn: \"auto\",\r\n\r\n    // Should display toolbar (buttons at the top)\r\n    // Can be true, false, \"auto\"\r\n    // If \"auto\" - will be automatically hidden if \"smallBtn\" is enabled\r\n    toolbar: \"auto\",\r\n\r\n    // What buttons should appear in the top right corner.\r\n    // Buttons will be created using templates from `btnTpl` option\r\n    // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n    buttons: [\r\n      \"zoom\",\r\n      //\"share\",\r\n      \"slideShow\",\r\n      //\"fullScreen\",\r\n      //\"download\",\r\n      \"thumbs\",\r\n      \"close\"\r\n    ],\r\n\r\n    // Detect \"idle\" time in seconds\r\n    idleTime: 3,\r\n\r\n    // Disable right-click and use simple image protection for images\r\n    protect: false,\r\n\r\n    // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n    modal: false,\r\n\r\n    image: {\r\n      // Wait for images to load before displaying\r\n      //   true  - wait for image to load and then display;\r\n      //   false - display thumbnail and load the full-sized image over top,\r\n      //           requires predefined image dimensions (`data-width` and `data-height` attributes)\r\n      preload: false\r\n    },\r\n\r\n    ajax: {\r\n      // Object containing settings for ajax request\r\n      settings: {\r\n        // This helps to indicate that request comes from the modal\r\n        // Feel free to change naming\r\n        data: {\r\n          fancybox: true\r\n        }\r\n      }\r\n    },\r\n\r\n    iframe: {\r\n      // Iframe template\r\n      tpl: '<iframe id=\"fancybox-frame{rnd}\" name=\"fancybox-frame{rnd}\" class=\"fancybox-iframe\" allowfullscreen=\"allowfullscreen\" allow=\"autoplay; fullscreen\" src=\"\"></iframe>',\r\n\r\n      // Preload iframe before displaying it\r\n      // This allows to calculate iframe content width and height\r\n      // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n      preload: true,\r\n\r\n      // Custom CSS styling for iframe wrapping element\r\n      // You can use this to set custom iframe dimensions\r\n      css: {},\r\n\r\n      // Iframe tag attributes\r\n      attr: {\r\n        scrolling: \"auto\"\r\n      }\r\n    },\r\n\r\n    // For HTML5 video only\r\n    video: {\r\n      tpl: '<video class=\"fancybox-video\" controls controlsList=\"nodownload\" poster=\"{{poster}}\">' +\r\n        '<source src=\"{{src}}\" type=\"{{format}}\" />' +\r\n        'Sorry, your browser doesn\\'t support embedded videos, <a href=\"{{src}}\">download</a> and watch with your favorite video player!' +\r\n        \"</video>\",\r\n      format: \"\", // custom video format\r\n      autoStart: true\r\n    },\r\n\r\n    // Default content type if cannot be detected automatically\r\n    defaultType: \"image\",\r\n\r\n    // Open/close animation type\r\n    // Possible values:\r\n    //   false            - disable\r\n    //   \"zoom\"           - zoom images from/to thumbnail\r\n    //   \"fade\"\r\n    //   \"zoom-in-out\"\r\n    //\r\n    animationEffect: \"zoom\",\r\n\r\n    // Duration in ms for open/close animation\r\n    animationDuration: 366,\r\n\r\n    // Should image change opacity while zooming\r\n    // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n    zoomOpacity: \"auto\",\r\n\r\n    // Transition effect between slides\r\n    //\r\n    // Possible values:\r\n    //   false            - disable\r\n    //   \"fade'\r\n    //   \"slide'\r\n    //   \"circular'\r\n    //   \"tube'\r\n    //   \"zoom-in-out'\r\n    //   \"rotate'\r\n    //\r\n    transitionEffect: \"fade\",\r\n\r\n    // Duration in ms for transition animation\r\n    transitionDuration: 366,\r\n\r\n    // Custom CSS class for slide element\r\n    slideClass: \"\",\r\n\r\n    // Custom CSS class for layout\r\n    baseClass: \"\",\r\n\r\n    // Base template for layout\r\n    baseTpl: '<div class=\"fancybox-container\" role=\"dialog\" tabindex=\"-1\">' +\r\n      '<div class=\"fancybox-bg\"></div>' +\r\n      '<div class=\"fancybox-inner\">' +\r\n      '<div class=\"fancybox-infobar\"><span data-fancybox-index></span>&nbsp;/&nbsp;<span data-fancybox-count></span></div>' +\r\n      '<div class=\"fancybox-toolbar\">{{buttons}}</div>' +\r\n      '<div class=\"fancybox-navigation\">{{arrows}}</div>' +\r\n      '<div class=\"fancybox-stage\"></div>' +\r\n      '<div class=\"fancybox-caption\"><div class=\"fancybox-caption__body\"></div></div>' +\r\n      \"</div>\" +\r\n      \"</div>\",\r\n\r\n    // Loading indicator template\r\n    spinnerTpl: '<div class=\"fancybox-loading\"></div>',\r\n\r\n    // Error message template\r\n    errorTpl: '<div class=\"fancybox-error\"><p>{{ERROR}}</p></div>',\r\n\r\n    btnTpl: {\r\n      download: '<a download data-fancybox-download class=\"fancybox-button fancybox-button--download\" title=\"{{DOWNLOAD}}\" href=\"javascript:;\">' +\r\n        '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M18.62 17.09V19H5.38v-1.91zm-2.97-6.96L17 11.45l-5 4.87-5-4.87 1.36-1.32 2.68 2.64V5h1.92v7.77z\"/></svg>' +\r\n        \"</a>\",\r\n\r\n      zoom: '<button data-fancybox-zoom class=\"fancybox-button fancybox-button--zoom\" title=\"{{ZOOM}}\">' +\r\n        '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M18.7 17.3l-3-3a5.9 5.9 0 0 0-.6-7.6 5.9 5.9 0 0 0-8.4 0 5.9 5.9 0 0 0 0 8.4 5.9 5.9 0 0 0 7.7.7l3 3a1 1 0 0 0 1.3 0c.4-.5.4-1 0-1.5zM8.1 13.8a4 4 0 0 1 0-5.7 4 4 0 0 1 5.7 0 4 4 0 0 1 0 5.7 4 4 0 0 1-5.7 0z\"/></svg>' +\r\n        \"</button>\",\r\n\r\n      close: '<button data-fancybox-close class=\"fancybox-button fancybox-button--close\" title=\"{{CLOSE}}\">' +\r\n        '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 10.6L6.6 5.2 5.2 6.6l5.4 5.4-5.4 5.4 1.4 1.4 5.4-5.4 5.4 5.4 1.4-1.4-5.4-5.4 5.4-5.4-1.4-1.4-5.4 5.4z\"/></svg>' +\r\n        \"</button>\",\r\n\r\n      // Arrows\r\n      arrowLeft: '<button data-fancybox-prev class=\"fancybox-button fancybox-button--arrow_left\" title=\"{{PREV}}\">' +\r\n        '<div><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M11.28 15.7l-1.34 1.37L5 12l4.94-5.07 1.34 1.38-2.68 2.72H19v1.94H8.6z\"/></svg></div>' +\r\n        \"</button>\",\r\n\r\n      arrowRight: '<button data-fancybox-next class=\"fancybox-button fancybox-button--arrow_right\" title=\"{{NEXT}}\">' +\r\n        '<div><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15.4 12.97l-2.68 2.72 1.34 1.38L19 12l-4.94-5.07-1.34 1.38 2.68 2.72H5v1.94z\"/></svg></div>' +\r\n        \"</button>\",\r\n\r\n      // This small close button will be appended to your html/inline/ajax content by default,\r\n      // if \"smallBtn\" option is not set to false\r\n      smallBtn: '<button type=\"button\" data-fancybox-close class=\"fancybox-button fancybox-close-small\" title=\"{{CLOSE}}\">' +\r\n        '<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1\" viewBox=\"0 0 24 24\"><path d=\"M13 12l5-5-1-1-5 5-5-5-1 1 5 5-5 5 1 1 5-5 5 5 1-1z\"/></svg>' +\r\n        \"</button>\"\r\n    },\r\n\r\n    // Container is injected into this element\r\n    parentEl: \"body\",\r\n\r\n    // Hide browser vertical scrollbars; use at your own risk\r\n    hideScrollbar: true,\r\n\r\n    // Focus handling\r\n    // ==============\r\n\r\n    // Try to focus on the first focusable element after opening\r\n    autoFocus: true,\r\n\r\n    // Put focus back to active element after closing\r\n    backFocus: true,\r\n\r\n    // Do not let user to focus on element outside modal content\r\n    trapFocus: true,\r\n\r\n    // Module specific options\r\n    // =======================\r\n\r\n    fullScreen: {\r\n      autoStart: false\r\n    },\r\n\r\n    // Set `touch: false` to disable panning/swiping\r\n    touch: {\r\n      vertical: true, // Allow to drag content vertically\r\n      momentum: true // Continue movement after releasing mouse/touch when panning\r\n    },\r\n\r\n    // Hash value when initializing manually,\r\n    // set `false` to disable hash change\r\n    hash: null,\r\n\r\n    // Customize or add new media types\r\n    // Example:\r\n    /*\r\n      media : {\r\n        youtube : {\r\n          params : {\r\n            autoplay : 0\r\n          }\r\n        }\r\n      }\r\n    */\r\n    media: {},\r\n\r\n    slideShow: {\r\n      autoStart: false,\r\n      speed: 3000\r\n    },\r\n\r\n    thumbs: {\r\n      autoStart: false, // Display thumbnails on opening\r\n      hideOnClose: true, // Hide thumbnail grid when closing animation starts\r\n      parentEl: \".fancybox-container\", // Container is injected into this element\r\n      axis: \"y\" // Vertical (y) or horizontal (x) scrolling\r\n    },\r\n\r\n    // Use mousewheel to navigate gallery\r\n    // If 'auto' - enabled for images only\r\n    wheel: \"auto\",\r\n\r\n    // Callbacks\r\n    //==========\r\n\r\n    // See Documentation/API/Events for more information\r\n    // Example:\r\n    /*\r\n      afterShow: function( instance, current ) {\r\n        console.info( 'Clicked element:' );\r\n        console.info( current.opts.$orig );\r\n      }\r\n    */\r\n\r\n    onInit: $.noop, // When instance has been initialized\r\n\r\n    beforeLoad: $.noop, // Before the content of a slide is being loaded\r\n    afterLoad: $.noop, // When the content of a slide is done loading\r\n\r\n    beforeShow: $.noop, // Before open animation starts\r\n    afterShow: $.noop, // When content is done loading and animating\r\n\r\n    beforeClose: $.noop, // Before the instance attempts to close. Return false to cancel the close.\r\n    afterClose: $.noop, // After instance has been closed\r\n\r\n    onActivate: $.noop, // When instance is brought to front\r\n    onDeactivate: $.noop, // When other instance has been activated\r\n\r\n    // Interaction\r\n    // ===========\r\n\r\n    // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,\r\n    // each option can be string or method that returns value.\r\n    //\r\n    // Possible values:\r\n    //   \"close\"           - close instance\r\n    //   \"next\"            - move to next gallery item\r\n    //   \"nextOrClose\"     - move to next gallery item or close if gallery has only one item\r\n    //   \"toggleControls\"  - show/hide controls\r\n    //   \"zoom\"            - zoom image (if loaded)\r\n    //   false             - do nothing\r\n\r\n    // Clicked on the content\r\n    clickContent: function (current, event) {\r\n      return current.type === \"image\" ? \"zoom\" : false;\r\n    },\r\n\r\n    // Clicked on the slide\r\n    clickSlide: \"close\",\r\n\r\n    // Clicked on the background (backdrop) element;\r\n    // if you have not changed the layout, then most likely you need to use `clickSlide` option\r\n    clickOutside: \"close\",\r\n\r\n    // Same as previous two, but for double click\r\n    dblclickContent: false,\r\n    dblclickSlide: false,\r\n    dblclickOutside: false,\r\n\r\n    // Custom options when mobile device is detected\r\n    // =============================================\r\n\r\n    mobile: {\r\n      preventCaptionOverlap: false,\r\n      idleTime: false,\r\n      clickContent: function (current, event) {\r\n        return current.type === \"image\" ? \"toggleControls\" : false;\r\n      },\r\n      clickSlide: function (current, event) {\r\n        return current.type === \"image\" ? \"toggleControls\" : \"close\";\r\n      },\r\n      dblclickContent: function (current, event) {\r\n        return current.type === \"image\" ? \"zoom\" : false;\r\n      },\r\n      dblclickSlide: function (current, event) {\r\n        return current.type === \"image\" ? \"zoom\" : false;\r\n      }\r\n    },\r\n\r\n    // Internationalization\r\n    // ====================\r\n\r\n    lang: \"en\",\r\n    i18n: {\r\n      en: {\r\n        CLOSE: \"Close\",\r\n        NEXT: \"Next\",\r\n        PREV: \"Previous\",\r\n        ERROR: \"The requested content cannot be loaded. <br/> Please try again later.\",\r\n        PLAY_START: \"Start slideshow\",\r\n        PLAY_STOP: \"Pause slideshow\",\r\n        FULL_SCREEN: \"Full screen\",\r\n        THUMBS: \"Thumbnails\",\r\n        DOWNLOAD: \"Download\",\r\n        SHARE: \"Share\",\r\n        ZOOM: \"Zoom\"\r\n      },\r\n      de: {\r\n        CLOSE: \"Schlie&szlig;en\",\r\n        NEXT: \"Weiter\",\r\n        PREV: \"Zur&uuml;ck\",\r\n        ERROR: \"Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es sp&auml;ter nochmal.\",\r\n        PLAY_START: \"Diaschau starten\",\r\n        PLAY_STOP: \"Diaschau beenden\",\r\n        FULL_SCREEN: \"Vollbild\",\r\n        THUMBS: \"Vorschaubilder\",\r\n        DOWNLOAD: \"Herunterladen\",\r\n        SHARE: \"Teilen\",\r\n        ZOOM: \"Vergr&ouml;&szlig;ern\"\r\n      }\r\n    }\r\n  };\r\n\r\n  // Few useful variables and methods\r\n  // ================================\r\n\r\n  var $W = $(window);\r\n  var $D = $(document);\r\n\r\n  var called = 0;\r\n\r\n  // Check if an object is a jQuery object and not a native JavaScript object\r\n  // ========================================================================\r\n  var isQuery = function (obj) {\r\n    return obj && obj.hasOwnProperty && obj instanceof $;\r\n  };\r\n\r\n  // Handle multiple browsers for \"requestAnimationFrame\" and \"cancelAnimationFrame\"\r\n  // ===============================================================================\r\n  var requestAFrame = (function () {\r\n    return (\r\n      window.requestAnimationFrame ||\r\n      window.webkitRequestAnimationFrame ||\r\n      window.mozRequestAnimationFrame ||\r\n      window.oRequestAnimationFrame ||\r\n      // if all else fails, use setTimeout\r\n      function (callback) {\r\n        return window.setTimeout(callback, 1000 / 60);\r\n      }\r\n    );\r\n  })();\r\n\r\n  var cancelAFrame = (function () {\r\n    return (\r\n      window.cancelAnimationFrame ||\r\n      window.webkitCancelAnimationFrame ||\r\n      window.mozCancelAnimationFrame ||\r\n      window.oCancelAnimationFrame ||\r\n      function (id) {\r\n        window.clearTimeout(id);\r\n      }\r\n    );\r\n  })();\r\n\r\n  // Detect the supported transition-end event property name\r\n  // =======================================================\r\n  var transitionEnd = (function () {\r\n    var el = document.createElement(\"fakeelement\"),\r\n      t;\r\n\r\n    var transitions = {\r\n      transition: \"transitionend\",\r\n      OTransition: \"oTransitionEnd\",\r\n      MozTransition: \"transitionend\",\r\n      WebkitTransition: \"webkitTransitionEnd\"\r\n    };\r\n\r\n    for (t in transitions) {\r\n      if (el.style[t] !== undefined) {\r\n        return transitions[t];\r\n      }\r\n    }\r\n\r\n    return \"transitionend\";\r\n  })();\r\n\r\n  // Force redraw on an element.\r\n  // This helps in cases where the browser doesn't redraw an updated element properly\r\n  // ================================================================================\r\n  var forceRedraw = function ($el) {\r\n    return $el && $el.length && $el[0].offsetHeight;\r\n  };\r\n\r\n  // Exclude array (`buttons`) options from deep merging\r\n  // ===================================================\r\n  var mergeOpts = function (opts1, opts2) {\r\n    var rez = $.extend(true, {}, opts1, opts2);\r\n\r\n    $.each(opts2, function (key, value) {\r\n      if ($.isArray(value)) {\r\n        rez[key] = value;\r\n      }\r\n    });\r\n\r\n    return rez;\r\n  };\r\n\r\n  // How much of an element is visible in viewport\r\n  // =============================================\r\n\r\n  var inViewport = function (elem) {\r\n    var elemCenter, rez;\r\n\r\n    if (!elem || elem.ownerDocument !== document) {\r\n      return false;\r\n    }\r\n\r\n    $(\".fancybox-container\").css(\"pointer-events\", \"none\");\r\n\r\n    elemCenter = {\r\n      x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,\r\n      y: elem.getBoundingClientRect().top + elem.offsetHeight / 2\r\n    };\r\n\r\n    rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem;\r\n\r\n    $(\".fancybox-container\").css(\"pointer-events\", \"\");\r\n\r\n    return rez;\r\n  };\r\n\r\n  // Class definition\r\n  // ================\r\n\r\n  var FancyBox = function (content, opts, index) {\r\n    var self = this;\r\n\r\n    self.opts = mergeOpts({\r\n      index: index\r\n    }, $.fancybox.defaults);\r\n\r\n    if ($.isPlainObject(opts)) {\r\n      self.opts = mergeOpts(self.opts, opts);\r\n    }\r\n\r\n    if ($.fancybox.isMobile) {\r\n      self.opts = mergeOpts(self.opts, self.opts.mobile);\r\n    }\r\n\r\n    self.id = self.opts.id || ++called;\r\n\r\n    self.currIndex = parseInt(self.opts.index, 10) || 0;\r\n    self.prevIndex = null;\r\n\r\n    self.prevPos = null;\r\n    self.currPos = 0;\r\n\r\n    self.firstRun = true;\r\n\r\n    // All group items\r\n    self.group = [];\r\n\r\n    // Existing slides (for current, next and previous gallery items)\r\n    self.slides = {};\r\n\r\n    // Create group elements\r\n    self.addContent(content);\r\n\r\n    if (!self.group.length) {\r\n      return;\r\n    }\r\n\r\n    self.init();\r\n  };\r\n\r\n  $.extend(FancyBox.prototype, {\r\n    // Create DOM structure\r\n    // ====================\r\n\r\n    init: function () {\r\n      var self = this,\r\n        firstItem = self.group[self.currIndex],\r\n        firstItemOpts = firstItem.opts,\r\n        $container,\r\n        buttonStr;\r\n\r\n      if (firstItemOpts.closeExisting) {\r\n        $.fancybox.close(true);\r\n      }\r\n\r\n      // Hide scrollbars\r\n      // ===============\r\n\r\n      $(\"body\").addClass(\"fancybox-active\");\r\n\r\n      if (\r\n        !$.fancybox.getInstance() &&\r\n        firstItemOpts.hideScrollbar !== false &&\r\n        !$.fancybox.isMobile &&\r\n        document.body.scrollHeight > window.innerHeight\r\n      ) {\r\n        $(\"head\").append(\r\n          '<style id=\"fancybox-style-noscroll\" type=\"text/css\">.compensate-for-scrollbar{margin-right:' +\r\n          (window.innerWidth - document.documentElement.clientWidth) +\r\n          \"px;}</style>\"\r\n        );\r\n\r\n        $(\"body\").addClass(\"compensate-for-scrollbar\");\r\n      }\r\n\r\n      // Build html markup and set references\r\n      // ====================================\r\n\r\n      // Build html code for buttons and insert into main template\r\n      buttonStr = \"\";\r\n\r\n      $.each(firstItemOpts.buttons, function (index, value) {\r\n        buttonStr += firstItemOpts.btnTpl[value] || \"\";\r\n      });\r\n\r\n      // Create markup from base template, it will be initially hidden to\r\n      // avoid unnecessary work like painting while initializing is not complete\r\n      $container = $(\r\n          self.translate(\r\n            self,\r\n            firstItemOpts.baseTpl\r\n            .replace(\"{{buttons}}\", buttonStr)\r\n            .replace(\"{{arrows}}\", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight)\r\n          )\r\n        )\r\n        .attr(\"id\", \"fancybox-container-\" + self.id)\r\n        .addClass(firstItemOpts.baseClass)\r\n        .data(\"FancyBox\", self)\r\n        .appendTo(firstItemOpts.parentEl);\r\n\r\n      // Create object holding references to jQuery wrapped nodes\r\n      self.$refs = {\r\n        container: $container\r\n      };\r\n\r\n      [\"bg\", \"inner\", \"infobar\", \"toolbar\", \"stage\", \"caption\", \"navigation\"].forEach(function (item) {\r\n        self.$refs[item] = $container.find(\".fancybox-\" + item);\r\n      });\r\n\r\n      self.trigger(\"onInit\");\r\n\r\n      // Enable events, deactive previous instances\r\n      self.activate();\r\n\r\n      // Build slides, load and reveal content\r\n      self.jumpTo(self.currIndex);\r\n    },\r\n\r\n    // Simple i18n support - replaces object keys found in template\r\n    // with corresponding values\r\n    // ============================================================\r\n\r\n    translate: function (obj, str) {\r\n      var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en;\r\n\r\n      return str.replace(/\\{\\{(\\w+)\\}\\}/g, function (match, n) {\r\n        return arr[n] === undefined ? match : arr[n];\r\n      });\r\n    },\r\n\r\n    // Populate current group with fresh content\r\n    // Check if each object has valid type and content\r\n    // ===============================================\r\n\r\n    addContent: function (content) {\r\n      var self = this,\r\n        items = $.makeArray(content),\r\n        thumbs;\r\n\r\n      $.each(items, function (i, item) {\r\n        var obj = {},\r\n          opts = {},\r\n          $item,\r\n          type,\r\n          found,\r\n          src,\r\n          srcParts;\r\n\r\n        // Step 1 - Make sure we have an object\r\n        // ====================================\r\n\r\n        if ($.isPlainObject(item)) {\r\n          // We probably have manual usage here, something like\r\n          // $.fancybox.open( [ { src : \"image.jpg\", type : \"image\" } ] )\r\n\r\n          obj = item;\r\n          opts = item.opts || item;\r\n        } else if ($.type(item) === \"object\" && $(item).length) {\r\n          // Here we probably have jQuery collection returned by some selector\r\n          $item = $(item);\r\n\r\n          // Support attributes like `data-options='{\"touch\" : false}'` and `data-touch='false'`\r\n          opts = $item.data() || {};\r\n          opts = $.extend(true, {}, opts, opts.options);\r\n\r\n          // Here we store clicked element\r\n          opts.$orig = $item;\r\n\r\n          obj.src = self.opts.src || opts.src || $item.attr(\"href\");\r\n\r\n          // Assume that simple syntax is used, for example:\r\n          //   `$.fancybox.open( $(\"#test\"), {} );`\r\n          if (!obj.type && !obj.src) {\r\n            obj.type = \"inline\";\r\n            obj.src = item;\r\n          }\r\n        } else {\r\n          // Assume we have a simple html code, for example:\r\n          //   $.fancybox.open( '<div><h1>Hi!</h1></div>' );\r\n          obj = {\r\n            type: \"html\",\r\n            src: item + \"\"\r\n          };\r\n        }\r\n\r\n        // Each gallery object has full collection of options\r\n        obj.opts = $.extend(true, {}, self.opts, opts);\r\n\r\n        // Do not merge buttons array\r\n        if ($.isArray(opts.buttons)) {\r\n          obj.opts.buttons = opts.buttons;\r\n        }\r\n\r\n        if ($.fancybox.isMobile && obj.opts.mobile) {\r\n          obj.opts = mergeOpts(obj.opts, obj.opts.mobile);\r\n        }\r\n\r\n        // Step 2 - Make sure we have content type, if not - try to guess\r\n        // ==============================================================\r\n\r\n        type = obj.type || obj.opts.type;\r\n        src = obj.src || \"\";\r\n\r\n        if (!type && src) {\r\n          if ((found = src.match(/\\.(mp4|mov|ogv|webm)((\\?|#).*)?$/i))) {\r\n            type = \"video\";\r\n\r\n            if (!obj.opts.video.format) {\r\n              obj.opts.video.format = \"video/\" + (found[1] === \"ogv\" ? \"ogg\" : found[1]);\r\n            }\r\n          } else if (src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i)) {\r\n            type = \"image\";\r\n          } else if (src.match(/\\.(pdf)((\\?|#).*)?$/i)) {\r\n            type = \"iframe\";\r\n            obj = $.extend(true, obj, {\r\n              contentType: \"pdf\",\r\n              opts: {\r\n                iframe: {\r\n                  preload: false\r\n                }\r\n              }\r\n            });\r\n          } else if (src.charAt(0) === \"#\") {\r\n            type = \"inline\";\r\n          }\r\n        }\r\n\r\n        if (type) {\r\n          obj.type = type;\r\n        } else {\r\n          self.trigger(\"objectNeedsType\", obj);\r\n        }\r\n\r\n        if (!obj.contentType) {\r\n          obj.contentType = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1 ? \"html\" : obj.type;\r\n        }\r\n\r\n        // Step 3 - Some adjustments\r\n        // =========================\r\n\r\n        obj.index = self.group.length;\r\n\r\n        if (obj.opts.smallBtn == \"auto\") {\r\n          obj.opts.smallBtn = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1;\r\n        }\r\n\r\n        if (obj.opts.toolbar === \"auto\") {\r\n          obj.opts.toolbar = !obj.opts.smallBtn;\r\n        }\r\n\r\n        // Find thumbnail image, check if exists and if is in the viewport\r\n        obj.$thumb = obj.opts.$thumb || null;\r\n\r\n        if (obj.opts.$trigger && obj.index === self.opts.index) {\r\n          obj.$thumb = obj.opts.$trigger.find(\"img:first\");\r\n\r\n          if (obj.$thumb.length) {\r\n            obj.opts.$orig = obj.opts.$trigger;\r\n          }\r\n        }\r\n\r\n        if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) {\r\n          obj.$thumb = obj.opts.$orig.find(\"img:first\");\r\n        }\r\n\r\n        if (obj.$thumb && !obj.$thumb.length) {\r\n          obj.$thumb = null;\r\n        }\r\n\r\n        obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null);\r\n\r\n        // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item\r\n        if ($.type(obj.opts.caption) === \"function\") {\r\n          obj.opts.caption = obj.opts.caption.apply(item, [self, obj]);\r\n        }\r\n\r\n        if ($.type(self.opts.caption) === \"function\") {\r\n          obj.opts.caption = self.opts.caption.apply(item, [self, obj]);\r\n        }\r\n\r\n        // Make sure we have caption as a string or jQuery object\r\n        if (!(obj.opts.caption instanceof $)) {\r\n          obj.opts.caption = obj.opts.caption === undefined ? \"\" : obj.opts.caption + \"\";\r\n        }\r\n\r\n        // Check if url contains \"filter\" used to filter the content\r\n        // Example: \"ajax.html #something\"\r\n        if (obj.type === \"ajax\") {\r\n          srcParts = src.split(/\\s+/, 2);\r\n\r\n          if (srcParts.length > 1) {\r\n            obj.src = srcParts.shift();\r\n\r\n            obj.opts.filter = srcParts.shift();\r\n          }\r\n        }\r\n\r\n        // Hide all buttons and disable interactivity for modal items\r\n        if (obj.opts.modal) {\r\n          obj.opts = $.extend(true, obj.opts, {\r\n            trapFocus: true,\r\n            // Remove buttons\r\n            infobar: 0,\r\n            toolbar: 0,\r\n\r\n            smallBtn: 0,\r\n\r\n            // Disable keyboard navigation\r\n            keyboard: 0,\r\n\r\n            // Disable some modules\r\n            slideShow: 0,\r\n            fullScreen: 0,\r\n            thumbs: 0,\r\n            touch: 0,\r\n\r\n            // Disable click event handlers\r\n            clickContent: false,\r\n            clickSlide: false,\r\n            clickOutside: false,\r\n            dblclickContent: false,\r\n            dblclickSlide: false,\r\n            dblclickOutside: false\r\n          });\r\n        }\r\n\r\n        // Step 4 - Add processed object to group\r\n        // ======================================\r\n\r\n        self.group.push(obj);\r\n      });\r\n\r\n      // Update controls if gallery is already opened\r\n      if (Object.keys(self.slides).length) {\r\n        self.updateControls();\r\n\r\n        // Update thumbnails, if needed\r\n        thumbs = self.Thumbs;\r\n\r\n        if (thumbs && thumbs.isActive) {\r\n          thumbs.create();\r\n\r\n          thumbs.focus();\r\n        }\r\n      }\r\n    },\r\n\r\n    // Attach an event handler functions for:\r\n    //   - navigation buttons\r\n    //   - browser scrolling, resizing;\r\n    //   - focusing\r\n    //   - keyboard\r\n    //   - detecting inactivity\r\n    // ======================================\r\n\r\n    addEvents: function () {\r\n      var self = this;\r\n\r\n      self.removeEvents();\r\n\r\n      // Make navigation elements clickable\r\n      // ==================================\r\n\r\n      self.$refs.container\r\n        .on(\"click.fb-close\", \"[data-fancybox-close]\", function (e) {\r\n          e.stopPropagation();\r\n          e.preventDefault();\r\n\r\n          self.close(e);\r\n        })\r\n        .on(\"touchstart.fb-prev click.fb-prev\", \"[data-fancybox-prev]\", function (e) {\r\n          e.stopPropagation();\r\n          e.preventDefault();\r\n\r\n          self.previous();\r\n        })\r\n        .on(\"touchstart.fb-next click.fb-next\", \"[data-fancybox-next]\", function (e) {\r\n          e.stopPropagation();\r\n          e.preventDefault();\r\n\r\n          self.next();\r\n        })\r\n        .on(\"click.fb\", \"[data-fancybox-zoom]\", function (e) {\r\n          // Click handler for zoom button\r\n          self[self.isScaledDown() ? \"scaleToActual\" : \"scaleToFit\"]();\r\n        });\r\n\r\n      // Handle page scrolling and browser resizing\r\n      // ==========================================\r\n\r\n      $W.on(\"orientationchange.fb resize.fb\", function (e) {\r\n        if (e && e.originalEvent && e.originalEvent.type === \"resize\") {\r\n          if (self.requestId) {\r\n            cancelAFrame(self.requestId);\r\n          }\r\n\r\n          self.requestId = requestAFrame(function () {\r\n            self.update(e);\r\n          });\r\n        } else {\r\n          if (self.current && self.current.type === \"iframe\") {\r\n            self.$refs.stage.hide();\r\n          }\r\n\r\n          setTimeout(\r\n            function () {\r\n              self.$refs.stage.show();\r\n\r\n              self.update(e);\r\n            },\r\n            $.fancybox.isMobile ? 600 : 250\r\n          );\r\n        }\r\n      });\r\n\r\n      $D.on(\"keydown.fb\", function (e) {\r\n        var instance = $.fancybox ? $.fancybox.getInstance() : null,\r\n          current = instance.current,\r\n          keycode = e.keyCode || e.which;\r\n\r\n        // Trap keyboard focus inside of the modal\r\n        // =======================================\r\n\r\n        if (keycode == 9) {\r\n          if (current.opts.trapFocus) {\r\n            self.focus(e);\r\n          }\r\n\r\n          return;\r\n        }\r\n\r\n        // Enable keyboard navigation\r\n        // ==========================\r\n\r\n        if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is(\"input,textarea,video,audio,select\")) {\r\n          return;\r\n        }\r\n\r\n        // Backspace and Esc keys\r\n        if (keycode === 8 || keycode === 27) {\r\n          e.preventDefault();\r\n\r\n          self.close(e);\r\n\r\n          return;\r\n        }\r\n\r\n        // Left arrow and Up arrow\r\n        if (keycode === 37 || keycode === 38) {\r\n          e.preventDefault();\r\n\r\n          self.previous();\r\n\r\n          return;\r\n        }\r\n\r\n        // Righ arrow and Down arrow\r\n        if (keycode === 39 || keycode === 40) {\r\n          e.preventDefault();\r\n\r\n          self.next();\r\n\r\n          return;\r\n        }\r\n\r\n        self.trigger(\"afterKeydown\", e, keycode);\r\n      });\r\n\r\n      // Hide controls after some inactivity period\r\n      if (self.group[self.currIndex].opts.idleTime) {\r\n        self.idleSecondsCounter = 0;\r\n\r\n        $D.on(\r\n          \"mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle\",\r\n          function (e) {\r\n            self.idleSecondsCounter = 0;\r\n\r\n            if (self.isIdle) {\r\n              self.showControls();\r\n            }\r\n\r\n            self.isIdle = false;\r\n          }\r\n        );\r\n\r\n        self.idleInterval = window.setInterval(function () {\r\n          self.idleSecondsCounter++;\r\n\r\n          if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) {\r\n            self.isIdle = true;\r\n            self.idleSecondsCounter = 0;\r\n\r\n            self.hideControls();\r\n          }\r\n        }, 1000);\r\n      }\r\n    },\r\n\r\n    // Remove events added by the core\r\n    // ===============================\r\n\r\n    removeEvents: function () {\r\n      var self = this;\r\n\r\n      $W.off(\"orientationchange.fb resize.fb\");\r\n      $D.off(\"keydown.fb .fb-idle\");\r\n\r\n      this.$refs.container.off(\".fb-close .fb-prev .fb-next\");\r\n\r\n      if (self.idleInterval) {\r\n        window.clearInterval(self.idleInterval);\r\n\r\n        self.idleInterval = null;\r\n      }\r\n    },\r\n\r\n    // Change to previous gallery item\r\n    // ===============================\r\n\r\n    previous: function (duration) {\r\n      return this.jumpTo(this.currPos - 1, duration);\r\n    },\r\n\r\n    // Change to next gallery item\r\n    // ===========================\r\n\r\n    next: function (duration) {\r\n      return this.jumpTo(this.currPos + 1, duration);\r\n    },\r\n\r\n    // Switch to selected gallery item\r\n    // ===============================\r\n\r\n    jumpTo: function (pos, duration) {\r\n      var self = this,\r\n        groupLen = self.group.length,\r\n        firstRun,\r\n        isMoved,\r\n        loop,\r\n        current,\r\n        previous,\r\n        slidePos,\r\n        stagePos,\r\n        prop,\r\n        diff;\r\n\r\n      if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) {\r\n        return;\r\n      }\r\n\r\n      // Should loop?\r\n      pos = parseInt(pos, 10);\r\n      loop = self.current ? self.current.opts.loop : self.opts.loop;\r\n\r\n      if (!loop && (pos < 0 || pos >= groupLen)) {\r\n        return false;\r\n      }\r\n\r\n      // Check if opening for the first time; this helps to speed things up\r\n      firstRun = self.firstRun = !Object.keys(self.slides).length;\r\n\r\n      // Create slides\r\n      previous = self.current;\r\n\r\n      self.prevIndex = self.currIndex;\r\n      self.prevPos = self.currPos;\r\n\r\n      current = self.createSlide(pos);\r\n\r\n      if (groupLen > 1) {\r\n        if (loop || current.index < groupLen - 1) {\r\n          self.createSlide(pos + 1);\r\n        }\r\n\r\n        if (loop || current.index > 0) {\r\n          self.createSlide(pos - 1);\r\n        }\r\n      }\r\n\r\n      self.current = current;\r\n      self.currIndex = current.index;\r\n      self.currPos = current.pos;\r\n\r\n      self.trigger(\"beforeShow\", firstRun);\r\n\r\n      self.updateControls();\r\n\r\n      // Validate duration length\r\n      current.forcedDuration = undefined;\r\n\r\n      if ($.isNumeric(duration)) {\r\n        current.forcedDuration = duration;\r\n      } else {\r\n        duration = current.opts[firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n      }\r\n\r\n      duration = parseInt(duration, 10);\r\n\r\n      // Check if user has swiped the slides or if still animating\r\n      isMoved = self.isMoved(current);\r\n\r\n      // Make sure current slide is visible\r\n      current.$slide.addClass(\"fancybox-slide--current\");\r\n\r\n      // Fresh start - reveal container, current slide and start loading content\r\n      if (firstRun) {\r\n        if (current.opts.animationEffect && duration) {\r\n          self.$refs.container.css(\"transition-duration\", duration + \"ms\");\r\n        }\r\n\r\n        self.$refs.container.addClass(\"fancybox-is-open\").trigger(\"focus\");\r\n\r\n        // Attempt to load content into slide\r\n        // This will later call `afterLoad` -> `revealContent`\r\n        self.loadSlide(current);\r\n\r\n        self.preload(\"image\");\r\n\r\n        return;\r\n      }\r\n\r\n      // Get actual slide/stage positions (before cleaning up)\r\n      slidePos = $.fancybox.getTranslate(previous.$slide);\r\n      stagePos = $.fancybox.getTranslate(self.$refs.stage);\r\n\r\n      // Clean up all slides\r\n      $.each(self.slides, function (index, slide) {\r\n        $.fancybox.stop(slide.$slide, true);\r\n      });\r\n\r\n      if (previous.pos !== current.pos) {\r\n        previous.isComplete = false;\r\n      }\r\n\r\n      previous.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--current\");\r\n\r\n      // If slides are out of place, then animate them to correct position\r\n      if (isMoved) {\r\n        // Calculate horizontal swipe distance\r\n        diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter);\r\n\r\n        $.each(self.slides, function (index, slide) {\r\n          slide.$slide.removeClass(\"fancybox-animated\").removeClass(function (index, className) {\r\n            return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n          });\r\n\r\n          // Make sure that each slide is in equal distance\r\n          // This is mostly needed for freshly added slides, because they are not yet positioned\r\n          var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter;\r\n\r\n          $.fancybox.setTranslate(slide.$slide, {\r\n            top: 0,\r\n            left: leftPos - stagePos.left + diff\r\n          });\r\n\r\n          if (slide.pos !== current.pos) {\r\n            slide.$slide.addClass(\"fancybox-slide--\" + (slide.pos > current.pos ? \"next\" : \"previous\"));\r\n          }\r\n\r\n          // Redraw to make sure that transition will start\r\n          forceRedraw(slide.$slide);\r\n\r\n          // Animate the slide\r\n          $.fancybox.animate(\r\n            slide.$slide, {\r\n              top: 0,\r\n              left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter\r\n            },\r\n            duration,\r\n            function () {\r\n              slide.$slide\r\n                .css({\r\n                  transform: \"\",\r\n                  opacity: \"\"\r\n                })\r\n                .removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n\r\n              if (slide.pos === self.currPos) {\r\n                self.complete();\r\n              }\r\n            }\r\n          );\r\n        });\r\n      } else if (duration && current.opts.transitionEffect) {\r\n        // Set transition effect for previously active slide\r\n        prop = \"fancybox-animated fancybox-fx-\" + current.opts.transitionEffect;\r\n\r\n        previous.$slide.addClass(\"fancybox-slide--\" + (previous.pos > current.pos ? \"next\" : \"previous\"));\r\n\r\n        $.fancybox.animate(\r\n          previous.$slide,\r\n          prop,\r\n          duration,\r\n          function () {\r\n            previous.$slide.removeClass(prop).removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n          },\r\n          false\r\n        );\r\n      }\r\n\r\n      if (current.isLoaded) {\r\n        self.revealContent(current);\r\n      } else {\r\n        self.loadSlide(current);\r\n      }\r\n\r\n      self.preload(\"image\");\r\n    },\r\n\r\n    // Create new \"slide\" element\r\n    // These are gallery items  that are actually added to DOM\r\n    // =======================================================\r\n\r\n    createSlide: function (pos) {\r\n      var self = this,\r\n        $slide,\r\n        index;\r\n\r\n      index = pos % self.group.length;\r\n      index = index < 0 ? self.group.length + index : index;\r\n\r\n      if (!self.slides[pos] && self.group[index]) {\r\n        $slide = $('<div class=\"fancybox-slide\"></div>').appendTo(self.$refs.stage);\r\n\r\n        self.slides[pos] = $.extend(true, {}, self.group[index], {\r\n          pos: pos,\r\n          $slide: $slide,\r\n          isLoaded: false\r\n        });\r\n\r\n        self.updateSlide(self.slides[pos]);\r\n      }\r\n\r\n      return self.slides[pos];\r\n    },\r\n\r\n    // Scale image to the actual size of the image;\r\n    // x and y values should be relative to the slide\r\n    // ==============================================\r\n\r\n    scaleToActual: function (x, y, duration) {\r\n      var self = this,\r\n        current = self.current,\r\n        $content = current.$content,\r\n        canvasWidth = $.fancybox.getTranslate(current.$slide).width,\r\n        canvasHeight = $.fancybox.getTranslate(current.$slide).height,\r\n        newImgWidth = current.width,\r\n        newImgHeight = current.height,\r\n        imgPos,\r\n        posX,\r\n        posY,\r\n        scaleX,\r\n        scaleY;\r\n\r\n      if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n        return;\r\n      }\r\n\r\n      self.isAnimating = true;\r\n\r\n      $.fancybox.stop($content);\r\n\r\n      x = x === undefined ? canvasWidth * 0.5 : x;\r\n      y = y === undefined ? canvasHeight * 0.5 : y;\r\n\r\n      imgPos = $.fancybox.getTranslate($content);\r\n\r\n      imgPos.top -= $.fancybox.getTranslate(current.$slide).top;\r\n      imgPos.left -= $.fancybox.getTranslate(current.$slide).left;\r\n\r\n      scaleX = newImgWidth / imgPos.width;\r\n      scaleY = newImgHeight / imgPos.height;\r\n\r\n      // Get center position for original image\r\n      posX = canvasWidth * 0.5 - newImgWidth * 0.5;\r\n      posY = canvasHeight * 0.5 - newImgHeight * 0.5;\r\n\r\n      // Make sure image does not move away from edges\r\n      if (newImgWidth > canvasWidth) {\r\n        posX = imgPos.left * scaleX - (x * scaleX - x);\r\n\r\n        if (posX > 0) {\r\n          posX = 0;\r\n        }\r\n\r\n        if (posX < canvasWidth - newImgWidth) {\r\n          posX = canvasWidth - newImgWidth;\r\n        }\r\n      }\r\n\r\n      if (newImgHeight > canvasHeight) {\r\n        posY = imgPos.top * scaleY - (y * scaleY - y);\r\n\r\n        if (posY > 0) {\r\n          posY = 0;\r\n        }\r\n\r\n        if (posY < canvasHeight - newImgHeight) {\r\n          posY = canvasHeight - newImgHeight;\r\n        }\r\n      }\r\n\r\n      self.updateCursor(newImgWidth, newImgHeight);\r\n\r\n      $.fancybox.animate(\r\n        $content, {\r\n          top: posY,\r\n          left: posX,\r\n          scaleX: scaleX,\r\n          scaleY: scaleY\r\n        },\r\n        duration || 366,\r\n        function () {\r\n          self.isAnimating = false;\r\n        }\r\n      );\r\n\r\n      // Stop slideshow\r\n      if (self.SlideShow && self.SlideShow.isActive) {\r\n        self.SlideShow.stop();\r\n      }\r\n    },\r\n\r\n    // Scale image to fit inside parent element\r\n    // ========================================\r\n\r\n    scaleToFit: function (duration) {\r\n      var self = this,\r\n        current = self.current,\r\n        $content = current.$content,\r\n        end;\r\n\r\n      if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n        return;\r\n      }\r\n\r\n      self.isAnimating = true;\r\n\r\n      $.fancybox.stop($content);\r\n\r\n      end = self.getFitPos(current);\r\n\r\n      self.updateCursor(end.width, end.height);\r\n\r\n      $.fancybox.animate(\r\n        $content, {\r\n          top: end.top,\r\n          left: end.left,\r\n          scaleX: end.width / $content.width(),\r\n          scaleY: end.height / $content.height()\r\n        },\r\n        duration || 366,\r\n        function () {\r\n          self.isAnimating = false;\r\n        }\r\n      );\r\n    },\r\n\r\n    // Calculate image size to fit inside viewport\r\n    // ===========================================\r\n\r\n    getFitPos: function (slide) {\r\n      var self = this,\r\n        $content = slide.$content,\r\n        $slide = slide.$slide,\r\n        width = slide.width || slide.opts.width,\r\n        height = slide.height || slide.opts.height,\r\n        maxWidth,\r\n        maxHeight,\r\n        minRatio,\r\n        aspectRatio,\r\n        rez = {};\r\n\r\n      if (!slide.isLoaded || !$content || !$content.length) {\r\n        return false;\r\n      }\r\n\r\n      maxWidth = $.fancybox.getTranslate(self.$refs.stage).width;\r\n      maxHeight = $.fancybox.getTranslate(self.$refs.stage).height;\r\n\r\n      maxWidth -=\r\n        parseFloat($slide.css(\"paddingLeft\")) +\r\n        parseFloat($slide.css(\"paddingRight\")) +\r\n        parseFloat($content.css(\"marginLeft\")) +\r\n        parseFloat($content.css(\"marginRight\"));\r\n\r\n      maxHeight -=\r\n        parseFloat($slide.css(\"paddingTop\")) +\r\n        parseFloat($slide.css(\"paddingBottom\")) +\r\n        parseFloat($content.css(\"marginTop\")) +\r\n        parseFloat($content.css(\"marginBottom\"));\r\n\r\n      if (!width || !height) {\r\n        width = maxWidth;\r\n        height = maxHeight;\r\n      }\r\n\r\n      minRatio = Math.min(1, maxWidth / width, maxHeight / height);\r\n\r\n      width = minRatio * width;\r\n      height = minRatio * height;\r\n\r\n      // Adjust width/height to precisely fit into container\r\n      if (width > maxWidth - 0.5) {\r\n        width = maxWidth;\r\n      }\r\n\r\n      if (height > maxHeight - 0.5) {\r\n        height = maxHeight;\r\n      }\r\n\r\n      if (slide.type === \"image\") {\r\n        rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css(\"paddingTop\"));\r\n        rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css(\"paddingLeft\"));\r\n      } else if (slide.contentType === \"video\") {\r\n        // Force aspect ratio for the video\r\n        // \"I say the whole world must learn of our peaceful ways… by force!\"\r\n        aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9;\r\n\r\n        if (height > width / aspectRatio) {\r\n          height = width / aspectRatio;\r\n        } else if (width > height * aspectRatio) {\r\n          width = height * aspectRatio;\r\n        }\r\n      }\r\n\r\n      rez.width = width;\r\n      rez.height = height;\r\n\r\n      return rez;\r\n    },\r\n\r\n    // Update content size and position for all slides\r\n    // ==============================================\r\n\r\n    update: function (e) {\r\n      var self = this;\r\n\r\n      $.each(self.slides, function (key, slide) {\r\n        self.updateSlide(slide, e);\r\n      });\r\n    },\r\n\r\n    // Update slide content position and size\r\n    // ======================================\r\n\r\n    updateSlide: function (slide, e) {\r\n      var self = this,\r\n        $content = slide && slide.$content,\r\n        width = slide.width || slide.opts.width,\r\n        height = slide.height || slide.opts.height,\r\n        $slide = slide.$slide;\r\n\r\n      // First, prevent caption overlap, if needed\r\n      self.adjustCaption(slide);\r\n\r\n      // Then resize content to fit inside the slide\r\n      if ($content && (width || height || slide.contentType === \"video\") && !slide.hasError) {\r\n        $.fancybox.stop($content);\r\n\r\n        $.fancybox.setTranslate($content, self.getFitPos(slide));\r\n\r\n        if (slide.pos === self.currPos) {\r\n          self.isAnimating = false;\r\n\r\n          self.updateCursor();\r\n        }\r\n      }\r\n\r\n      // Then some adjustments\r\n      self.adjustLayout(slide);\r\n\r\n      if ($slide.length) {\r\n        $slide.trigger(\"refresh\");\r\n\r\n        if (slide.pos === self.currPos) {\r\n          self.$refs.toolbar\r\n            .add(self.$refs.navigation.find(\".fancybox-button--arrow_right\"))\r\n            .toggleClass(\"compensate-for-scrollbar\", $slide.get(0).scrollHeight > $slide.get(0).clientHeight);\r\n        }\r\n      }\r\n\r\n      self.trigger(\"onUpdate\", slide, e);\r\n    },\r\n\r\n    // Horizontally center slide\r\n    // =========================\r\n\r\n    centerSlide: function (duration) {\r\n      var self = this,\r\n        current = self.current,\r\n        $slide = current.$slide;\r\n\r\n      if (self.isClosing || !current) {\r\n        return;\r\n      }\r\n\r\n      $slide.siblings().css({\r\n        transform: \"\",\r\n        opacity: \"\"\r\n      });\r\n\r\n      $slide\r\n        .parent()\r\n        .children()\r\n        .removeClass(\"fancybox-slide--previous fancybox-slide--next\");\r\n\r\n      $.fancybox.animate(\r\n        $slide, {\r\n          top: 0,\r\n          left: 0,\r\n          opacity: 1\r\n        },\r\n        duration === undefined ? 0 : duration,\r\n        function () {\r\n          // Clean up\r\n          $slide.css({\r\n            transform: \"\",\r\n            opacity: \"\"\r\n          });\r\n\r\n          if (!current.isComplete) {\r\n            self.complete();\r\n          }\r\n        },\r\n        false\r\n      );\r\n    },\r\n\r\n    // Check if current slide is moved (swiped)\r\n    // ========================================\r\n\r\n    isMoved: function (slide) {\r\n      var current = slide || this.current,\r\n        slidePos,\r\n        stagePos;\r\n\r\n      if (!current) {\r\n        return false;\r\n      }\r\n\r\n      stagePos = $.fancybox.getTranslate(this.$refs.stage);\r\n      slidePos = $.fancybox.getTranslate(current.$slide);\r\n\r\n      return (\r\n        !current.$slide.hasClass(\"fancybox-animated\") &&\r\n        (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5)\r\n      );\r\n    },\r\n\r\n    // Update cursor style depending if content can be zoomed\r\n    // ======================================================\r\n\r\n    updateCursor: function (nextWidth, nextHeight) {\r\n      var self = this,\r\n        current = self.current,\r\n        $container = self.$refs.container,\r\n        canPan,\r\n        isZoomable;\r\n\r\n      if (!current || self.isClosing || !self.Guestures) {\r\n        return;\r\n      }\r\n\r\n      $container.removeClass(\"fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan\");\r\n\r\n      canPan = self.canPan(nextWidth, nextHeight);\r\n\r\n      isZoomable = canPan ? true : self.isZoomable();\r\n\r\n      $container.toggleClass(\"fancybox-is-zoomable\", isZoomable);\r\n\r\n      $(\"[data-fancybox-zoom]\").prop(\"disabled\", !isZoomable);\r\n\r\n      if (canPan) {\r\n        $container.addClass(\"fancybox-can-pan\");\r\n      } else if (\r\n        isZoomable &&\r\n        (current.opts.clickContent === \"zoom\" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == \"zoom\"))\r\n      ) {\r\n        $container.addClass(\"fancybox-can-zoomIn\");\r\n      } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== \"video\") {\r\n        $container.addClass(\"fancybox-can-swipe\");\r\n      }\r\n    },\r\n\r\n    // Check if current slide is zoomable\r\n    // ==================================\r\n\r\n    isZoomable: function () {\r\n      var self = this,\r\n        current = self.current,\r\n        fitPos;\r\n\r\n      // Assume that slide is zoomable if:\r\n      //   - image is still loading\r\n      //   - actual size of the image is smaller than available area\r\n      if (current && !self.isClosing && current.type === \"image\" && !current.hasError) {\r\n        if (!current.isLoaded) {\r\n          return true;\r\n        }\r\n\r\n        fitPos = self.getFitPos(current);\r\n\r\n        if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) {\r\n          return true;\r\n        }\r\n      }\r\n\r\n      return false;\r\n    },\r\n\r\n    // Check if current image dimensions are smaller than actual\r\n    // =========================================================\r\n\r\n    isScaledDown: function (nextWidth, nextHeight) {\r\n      var self = this,\r\n        rez = false,\r\n        current = self.current,\r\n        $content = current.$content;\r\n\r\n      if (nextWidth !== undefined && nextHeight !== undefined) {\r\n        rez = nextWidth < current.width && nextHeight < current.height;\r\n      } else if ($content) {\r\n        rez = $.fancybox.getTranslate($content);\r\n        rez = rez.width < current.width && rez.height < current.height;\r\n      }\r\n\r\n      return rez;\r\n    },\r\n\r\n    // Check if image dimensions exceed parent element\r\n    // ===============================================\r\n\r\n    canPan: function (nextWidth, nextHeight) {\r\n      var self = this,\r\n        current = self.current,\r\n        pos = null,\r\n        rez = false;\r\n\r\n      if (current.type === \"image\" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) {\r\n        rez = self.getFitPos(current);\r\n\r\n        if (nextWidth !== undefined && nextHeight !== undefined) {\r\n          pos = {\r\n            width: nextWidth,\r\n            height: nextHeight\r\n          };\r\n        } else if (current.isComplete) {\r\n          pos = $.fancybox.getTranslate(current.$content);\r\n        }\r\n\r\n        if (pos && rez) {\r\n          rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5;\r\n        }\r\n      }\r\n\r\n      return rez;\r\n    },\r\n\r\n    // Load content into the slide\r\n    // ===========================\r\n\r\n    loadSlide: function (slide) {\r\n      var self = this,\r\n        type,\r\n        $slide,\r\n        ajaxLoad;\r\n\r\n      if (slide.isLoading || slide.isLoaded) {\r\n        return;\r\n      }\r\n\r\n      slide.isLoading = true;\r\n\r\n      if (self.trigger(\"beforeLoad\", slide) === false) {\r\n        slide.isLoading = false;\r\n\r\n        return false;\r\n      }\r\n\r\n      type = slide.type;\r\n      $slide = slide.$slide;\r\n\r\n      $slide\r\n        .off(\"refresh\")\r\n        .trigger(\"onReset\")\r\n        .addClass(slide.opts.slideClass);\r\n\r\n      // Create content depending on the type\r\n      switch (type) {\r\n        case \"image\":\r\n          self.setImage(slide);\r\n\r\n          break;\r\n\r\n        case \"iframe\":\r\n          self.setIframe(slide);\r\n\r\n          break;\r\n\r\n        case \"html\":\r\n          self.setContent(slide, slide.src || slide.content);\r\n\r\n          break;\r\n\r\n        case \"video\":\r\n          self.setContent(\r\n            slide,\r\n            slide.opts.video.tpl\r\n            .replace(/\\{\\{src\\}\\}/gi, slide.src)\r\n            .replace(\"{{format}}\", slide.opts.videoFormat || slide.opts.video.format || \"\")\r\n            .replace(\"{{poster}}\", slide.thumb || \"\")\r\n          );\r\n\r\n          break;\r\n\r\n        case \"inline\":\r\n          if ($(slide.src).length) {\r\n            self.setContent(slide, $(slide.src));\r\n          } else {\r\n            self.setError(slide);\r\n          }\r\n\r\n          break;\r\n\r\n        case \"ajax\":\r\n          self.showLoading(slide);\r\n\r\n          ajaxLoad = $.ajax(\r\n            $.extend({}, slide.opts.ajax.settings, {\r\n              url: slide.src,\r\n              success: function (data, textStatus) {\r\n                if (textStatus === \"success\") {\r\n                  self.setContent(slide, data);\r\n                }\r\n              },\r\n              error: function (jqXHR, textStatus) {\r\n                if (jqXHR && textStatus !== \"abort\") {\r\n                  self.setError(slide);\r\n                }\r\n              }\r\n            })\r\n          );\r\n\r\n          $slide.one(\"onReset\", function () {\r\n            ajaxLoad.abort();\r\n          });\r\n\r\n          break;\r\n\r\n        default:\r\n          self.setError(slide);\r\n\r\n          break;\r\n      }\r\n\r\n      return true;\r\n    },\r\n\r\n    // Use thumbnail image, if possible\r\n    // ================================\r\n\r\n    setImage: function (slide) {\r\n      var self = this,\r\n        ghost;\r\n\r\n      // Check if need to show loading icon\r\n      setTimeout(function () {\r\n        var $img = slide.$image;\r\n\r\n        if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) {\r\n          self.showLoading(slide);\r\n        }\r\n      }, 50);\r\n\r\n      //Check if image has srcset\r\n      self.checkSrcset(slide);\r\n\r\n      // This will be wrapper containing both ghost and actual image\r\n      slide.$content = $('<div class=\"fancybox-content\"></div>')\r\n        .addClass(\"fancybox-is-hidden\")\r\n        .appendTo(slide.$slide.addClass(\"fancybox-slide--image\"));\r\n\r\n      // If we have a thumbnail, we can display it while actual image is loading\r\n      // Users will not stare at black screen and actual image will appear gradually\r\n      if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) {\r\n        slide.width = slide.opts.width;\r\n        slide.height = slide.opts.height;\r\n\r\n        ghost = document.createElement(\"img\");\r\n\r\n        ghost.onerror = function () {\r\n          $(this).remove();\r\n\r\n          slide.$ghost = null;\r\n        };\r\n\r\n        ghost.onload = function () {\r\n          self.afterLoad(slide);\r\n        };\r\n\r\n        slide.$ghost = $(ghost)\r\n          .addClass(\"fancybox-image\")\r\n          .appendTo(slide.$content)\r\n          .attr(\"src\", slide.thumb);\r\n      }\r\n\r\n      // Start loading actual image\r\n      self.setBigImage(slide);\r\n    },\r\n\r\n    // Check if image has srcset and get the source\r\n    // ============================================\r\n    checkSrcset: function (slide) {\r\n      var srcset = slide.opts.srcset || slide.opts.image.srcset,\r\n        found,\r\n        temp,\r\n        pxRatio,\r\n        windowWidth;\r\n\r\n      // If we have \"srcset\", then we need to find first matching \"src\" value.\r\n      // This is necessary, because when you set an src attribute, the browser will preload the image\r\n      // before any javascript or even CSS is applied.\r\n      if (srcset) {\r\n        pxRatio = window.devicePixelRatio || 1;\r\n        windowWidth = window.innerWidth * pxRatio;\r\n\r\n        temp = srcset.split(\",\").map(function (el) {\r\n          var ret = {};\r\n\r\n          el.trim()\r\n            .split(/\\s+/)\r\n            .forEach(function (el, i) {\r\n              var value = parseInt(el.substring(0, el.length - 1), 10);\r\n\r\n              if (i === 0) {\r\n                return (ret.url = el);\r\n              }\r\n\r\n              if (value) {\r\n                ret.value = value;\r\n                ret.postfix = el[el.length - 1];\r\n              }\r\n            });\r\n\r\n          return ret;\r\n        });\r\n\r\n        // Sort by value\r\n        temp.sort(function (a, b) {\r\n          return a.value - b.value;\r\n        });\r\n\r\n        // Ok, now we have an array of all srcset values\r\n        for (var j = 0; j < temp.length; j++) {\r\n          var el = temp[j];\r\n\r\n          if ((el.postfix === \"w\" && el.value >= windowWidth) || (el.postfix === \"x\" && el.value >= pxRatio)) {\r\n            found = el;\r\n            break;\r\n          }\r\n        }\r\n\r\n        // If not found, take the last one\r\n        if (!found && temp.length) {\r\n          found = temp[temp.length - 1];\r\n        }\r\n\r\n        if (found) {\r\n          slide.src = found.url;\r\n\r\n          // If we have default width/height values, we can calculate height for matching source\r\n          if (slide.width && slide.height && found.postfix == \"w\") {\r\n            slide.height = (slide.width / slide.height) * found.value;\r\n            slide.width = found.value;\r\n          }\r\n\r\n          slide.opts.srcset = srcset;\r\n        }\r\n      }\r\n    },\r\n\r\n    // Create full-size image\r\n    // ======================\r\n\r\n    setBigImage: function (slide) {\r\n      var self = this,\r\n        img = document.createElement(\"img\"),\r\n        $img = $(img);\r\n\r\n      slide.$image = $img\r\n        .one(\"error\", function () {\r\n          self.setError(slide);\r\n        })\r\n        .one(\"load\", function () {\r\n          var sizes;\r\n\r\n          if (!slide.$ghost) {\r\n            self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight);\r\n\r\n            self.afterLoad(slide);\r\n          }\r\n\r\n          if (self.isClosing) {\r\n            return;\r\n          }\r\n\r\n          if (slide.opts.srcset) {\r\n            sizes = slide.opts.sizes;\r\n\r\n            if (!sizes || sizes === \"auto\") {\r\n              sizes =\r\n                (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? \"100\" : Math.round((slide.width / slide.height) * 100)) +\r\n                \"vw\";\r\n            }\r\n\r\n            $img.attr(\"sizes\", sizes).attr(\"srcset\", slide.opts.srcset);\r\n          }\r\n\r\n          // Hide temporary image after some delay\r\n          if (slide.$ghost) {\r\n            setTimeout(function () {\r\n              if (slide.$ghost && !self.isClosing) {\r\n                slide.$ghost.hide();\r\n              }\r\n            }, Math.min(300, Math.max(1000, slide.height / 1600)));\r\n          }\r\n\r\n          self.hideLoading(slide);\r\n        })\r\n        .addClass(\"fancybox-image\")\r\n        .attr(\"src\", slide.src)\r\n        .appendTo(slide.$content);\r\n\r\n      if ((img.complete || img.readyState == \"complete\") && $img.naturalWidth && $img.naturalHeight) {\r\n        $img.trigger(\"load\");\r\n      } else if (img.error) {\r\n        $img.trigger(\"error\");\r\n      }\r\n    },\r\n\r\n    // Computes the slide size from image size and maxWidth/maxHeight\r\n    // ==============================================================\r\n\r\n    resolveImageSlideSize: function (slide, imgWidth, imgHeight) {\r\n      var maxWidth = parseInt(slide.opts.width, 10),\r\n        maxHeight = parseInt(slide.opts.height, 10);\r\n\r\n      // Sets the default values from the image\r\n      slide.width = imgWidth;\r\n      slide.height = imgHeight;\r\n\r\n      if (maxWidth > 0) {\r\n        slide.width = maxWidth;\r\n        slide.height = Math.floor((maxWidth * imgHeight) / imgWidth);\r\n      }\r\n\r\n      if (maxHeight > 0) {\r\n        slide.width = Math.floor((maxHeight * imgWidth) / imgHeight);\r\n        slide.height = maxHeight;\r\n      }\r\n    },\r\n\r\n    // Create iframe wrapper, iframe and bindings\r\n    // ==========================================\r\n\r\n    setIframe: function (slide) {\r\n      var self = this,\r\n        opts = slide.opts.iframe,\r\n        $slide = slide.$slide,\r\n        $iframe;\r\n\r\n      slide.$content = $('<div class=\"fancybox-content' + (opts.preload ? \" fancybox-is-hidden\" : \"\") + '\"></div>')\r\n        .css(opts.css)\r\n        .appendTo($slide);\r\n\r\n      $slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n      slide.$iframe = $iframe = $(opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()))\r\n        .attr(opts.attr)\r\n        .appendTo(slide.$content);\r\n\r\n      if (opts.preload) {\r\n        self.showLoading(slide);\r\n\r\n        // Unfortunately, it is not always possible to determine if iframe is successfully loaded\r\n        // (due to browser security policy)\r\n\r\n        $iframe.on(\"load.fb error.fb\", function (e) {\r\n          this.isReady = 1;\r\n\r\n          slide.$slide.trigger(\"refresh\");\r\n\r\n          self.afterLoad(slide);\r\n        });\r\n\r\n        // Recalculate iframe content size\r\n        // ===============================\r\n\r\n        $slide.on(\"refresh.fb\", function () {\r\n          var $content = slide.$content,\r\n            frameWidth = opts.css.width,\r\n            frameHeight = opts.css.height,\r\n            $contents,\r\n            $body;\r\n\r\n          if ($iframe[0].isReady !== 1) {\r\n            return;\r\n          }\r\n\r\n          try {\r\n            $contents = $iframe.contents();\r\n            $body = $contents.find(\"body\");\r\n          } catch (ignore) {}\r\n\r\n          // Calculate content dimensions, if it is accessible\r\n          if ($body && $body.length && $body.children().length) {\r\n            // Avoid scrolling to top (if multiple instances)\r\n            $slide.css(\"overflow\", \"visible\");\r\n\r\n            $content.css({\r\n              width: \"100%\",\r\n              \"max-width\": \"100%\",\r\n              height: \"9999px\"\r\n            });\r\n\r\n            if (frameWidth === undefined) {\r\n              frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true)));\r\n            }\r\n\r\n            $content.css(\"width\", frameWidth ? frameWidth : \"\").css(\"max-width\", \"\");\r\n\r\n            if (frameHeight === undefined) {\r\n              frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true)));\r\n            }\r\n\r\n            $content.css(\"height\", frameHeight ? frameHeight : \"\");\r\n\r\n            $slide.css(\"overflow\", \"auto\");\r\n          }\r\n\r\n          $content.removeClass(\"fancybox-is-hidden\");\r\n        });\r\n      } else {\r\n        self.afterLoad(slide);\r\n      }\r\n\r\n      $iframe.attr(\"src\", slide.src);\r\n\r\n      // Remove iframe if closing or changing gallery item\r\n      $slide.one(\"onReset\", function () {\r\n        // This helps IE not to throw errors when closing\r\n        try {\r\n          $(this)\r\n            .find(\"iframe\")\r\n            .hide()\r\n            .unbind()\r\n            .attr(\"src\", \"//about:blank\");\r\n        } catch (ignore) {}\r\n\r\n        $(this)\r\n          .off(\"refresh.fb\")\r\n          .empty();\r\n\r\n        slide.isLoaded = false;\r\n        slide.isRevealed = false;\r\n      });\r\n    },\r\n\r\n    // Wrap and append content to the slide\r\n    // ======================================\r\n\r\n    setContent: function (slide, content) {\r\n      var self = this;\r\n\r\n      if (self.isClosing) {\r\n        return;\r\n      }\r\n\r\n      self.hideLoading(slide);\r\n\r\n      if (slide.$content) {\r\n        $.fancybox.stop(slide.$content);\r\n      }\r\n\r\n      slide.$slide.empty();\r\n\r\n      // If content is a jQuery object, then it will be moved to the slide.\r\n      // The placeholder is created so we will know where to put it back.\r\n      if (isQuery(content) && content.parent().length) {\r\n        // Make sure content is not already moved to fancyBox\r\n        if (content.hasClass(\"fancybox-content\") || content.parent().hasClass(\"fancybox-content\")) {\r\n          content.parents(\".fancybox-slide\").trigger(\"onReset\");\r\n        }\r\n\r\n        // Create temporary element marking original place of the content\r\n        slide.$placeholder = $(\"<div>\")\r\n          .hide()\r\n          .insertAfter(content);\r\n\r\n        // Make sure content is visible\r\n        content.css(\"display\", \"inline-block\");\r\n      } else if (!slide.hasError) {\r\n        // If content is just a plain text, try to convert it to html\r\n        if ($.type(content) === \"string\") {\r\n          content = $(\"<div>\")\r\n            .append($.trim(content))\r\n            .contents();\r\n        }\r\n\r\n        // If \"filter\" option is provided, then filter content\r\n        if (slide.opts.filter) {\r\n          content = $(\"<div>\")\r\n            .html(content)\r\n            .find(slide.opts.filter);\r\n        }\r\n      }\r\n\r\n      slide.$slide.one(\"onReset\", function () {\r\n        // Pause all html5 video/audio\r\n        $(this)\r\n          .find(\"video,audio\")\r\n          .trigger(\"pause\");\r\n\r\n        // Put content back\r\n        if (slide.$placeholder) {\r\n          slide.$placeholder.after(content.removeClass(\"fancybox-content\").hide()).remove();\r\n\r\n          slide.$placeholder = null;\r\n        }\r\n\r\n        // Remove custom close button\r\n        if (slide.$smallBtn) {\r\n          slide.$smallBtn.remove();\r\n\r\n          slide.$smallBtn = null;\r\n        }\r\n\r\n        // Remove content and mark slide as not loaded\r\n        if (!slide.hasError) {\r\n          $(this).empty();\r\n\r\n          slide.isLoaded = false;\r\n          slide.isRevealed = false;\r\n        }\r\n      });\r\n\r\n      $(content).appendTo(slide.$slide);\r\n\r\n      if ($(content).is(\"video,audio\")) {\r\n        $(content).addClass(\"fancybox-video\");\r\n\r\n        $(content).wrap(\"<div></div>\");\r\n\r\n        slide.contentType = \"video\";\r\n\r\n        slide.opts.width = slide.opts.width || $(content).attr(\"width\");\r\n        slide.opts.height = slide.opts.height || $(content).attr(\"height\");\r\n      }\r\n\r\n      slide.$content = slide.$slide\r\n        .children()\r\n        .filter(\"div,form,main,video,audio,article,.fancybox-content\")\r\n        .first();\r\n\r\n      slide.$content.siblings().hide();\r\n\r\n      // Re-check if there is a valid content\r\n      // (in some cases, ajax response can contain various elements or plain text)\r\n      if (!slide.$content.length) {\r\n        slide.$content = slide.$slide\r\n          .wrapInner(\"<div></div>\")\r\n          .children()\r\n          .first();\r\n      }\r\n\r\n      slide.$content.addClass(\"fancybox-content\");\r\n\r\n      slide.$slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n      self.afterLoad(slide);\r\n    },\r\n\r\n    // Display error message\r\n    // =====================\r\n\r\n    setError: function (slide) {\r\n      slide.hasError = true;\r\n\r\n      slide.$slide\r\n        .trigger(\"onReset\")\r\n        .removeClass(\"fancybox-slide--\" + slide.contentType)\r\n        .addClass(\"fancybox-slide--error\");\r\n\r\n      slide.contentType = \"html\";\r\n\r\n      this.setContent(slide, this.translate(slide, slide.opts.errorTpl));\r\n\r\n      if (slide.pos === this.currPos) {\r\n        this.isAnimating = false;\r\n      }\r\n    },\r\n\r\n    // Show loading icon inside the slide\r\n    // ==================================\r\n\r\n    showLoading: function (slide) {\r\n      var self = this;\r\n\r\n      slide = slide || self.current;\r\n\r\n      if (slide && !slide.$spinner) {\r\n        slide.$spinner = $(self.translate(self, self.opts.spinnerTpl))\r\n          .appendTo(slide.$slide)\r\n          .hide()\r\n          .fadeIn(\"fast\");\r\n      }\r\n    },\r\n\r\n    // Remove loading icon from the slide\r\n    // ==================================\r\n\r\n    hideLoading: function (slide) {\r\n      var self = this;\r\n\r\n      slide = slide || self.current;\r\n\r\n      if (slide && slide.$spinner) {\r\n        slide.$spinner.stop().remove();\r\n\r\n        delete slide.$spinner;\r\n      }\r\n    },\r\n\r\n    // Adjustments after slide content has been loaded\r\n    // ===============================================\r\n\r\n    afterLoad: function (slide) {\r\n      var self = this;\r\n\r\n      if (self.isClosing) {\r\n        return;\r\n      }\r\n\r\n      slide.isLoading = false;\r\n      slide.isLoaded = true;\r\n\r\n      self.trigger(\"afterLoad\", slide);\r\n\r\n      self.hideLoading(slide);\r\n\r\n      // Add small close button\r\n      if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) {\r\n        slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content);\r\n      }\r\n\r\n      // Disable right click\r\n      if (slide.opts.protect && slide.$content && !slide.hasError) {\r\n        slide.$content.on(\"contextmenu.fb\", function (e) {\r\n          if (e.button == 2) {\r\n            e.preventDefault();\r\n          }\r\n\r\n          return true;\r\n        });\r\n\r\n        // Add fake element on top of the image\r\n        // This makes a bit harder for user to select image\r\n        if (slide.type === \"image\") {\r\n          $('<div class=\"fancybox-spaceball\"></div>').appendTo(slide.$content);\r\n        }\r\n      }\r\n\r\n      self.adjustCaption(slide);\r\n\r\n      self.adjustLayout(slide);\r\n\r\n      if (slide.pos === self.currPos) {\r\n        self.updateCursor();\r\n      }\r\n\r\n      self.revealContent(slide);\r\n    },\r\n\r\n    // Prevent caption overlap,\r\n    // fix css inconsistency across browsers\r\n    // =====================================\r\n\r\n    adjustCaption: function (slide) {\r\n      var self = this,\r\n        current = slide || self.current,\r\n        caption = current.opts.caption,\r\n        preventOverlap = current.opts.preventCaptionOverlap,\r\n        $caption = self.$refs.caption,\r\n        $clone,\r\n        captionH = false;\r\n\r\n      $caption.toggleClass(\"fancybox-caption--separate\", preventOverlap);\r\n\r\n      if (preventOverlap && caption && caption.length) {\r\n        if (current.pos !== self.currPos) {\r\n          $clone = $caption.clone().appendTo($caption.parent());\r\n\r\n          $clone\r\n            .children()\r\n            .eq(0)\r\n            .empty()\r\n            .html(caption);\r\n\r\n          captionH = $clone.outerHeight(true);\r\n\r\n          $clone.empty().remove();\r\n        } else if (self.$caption) {\r\n          captionH = self.$caption.outerHeight(true);\r\n        }\r\n\r\n        current.$slide.css(\"padding-bottom\", captionH || \"\");\r\n      }\r\n    },\r\n\r\n    // Simple hack to fix inconsistency across browsers, described here (affects Edge, too):\r\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=748518\r\n    // ====================================================================================\r\n\r\n    adjustLayout: function (slide) {\r\n      var self = this,\r\n        current = slide || self.current,\r\n        scrollHeight,\r\n        marginBottom,\r\n        inlinePadding,\r\n        actualPadding;\r\n\r\n      if (current.isLoaded && current.opts.disableLayoutFix !== true) {\r\n        current.$content.css(\"margin-bottom\", \"\");\r\n\r\n        // If we would always set margin-bottom for the content,\r\n        // then it would potentially break vertical align\r\n        if (current.$content.outerHeight() > current.$slide.height() + 0.5) {\r\n          inlinePadding = current.$slide[0].style[\"padding-bottom\"];\r\n          actualPadding = current.$slide.css(\"padding-bottom\");\r\n\r\n          if (parseFloat(actualPadding) > 0) {\r\n            scrollHeight = current.$slide[0].scrollHeight;\r\n\r\n            current.$slide.css(\"padding-bottom\", 0);\r\n\r\n            if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) {\r\n              marginBottom = actualPadding;\r\n            }\r\n\r\n            current.$slide.css(\"padding-bottom\", inlinePadding);\r\n          }\r\n        }\r\n\r\n        current.$content.css(\"margin-bottom\", marginBottom);\r\n      }\r\n    },\r\n\r\n    // Make content visible\r\n    // This method is called right after content has been loaded or\r\n    // user navigates gallery and transition should start\r\n    // ============================================================\r\n\r\n    revealContent: function (slide) {\r\n      var self = this,\r\n        $slide = slide.$slide,\r\n        end = false,\r\n        start = false,\r\n        isMoved = self.isMoved(slide),\r\n        isRevealed = slide.isRevealed,\r\n        effect,\r\n        effectClassName,\r\n        duration,\r\n        opacity;\r\n\r\n      slide.isRevealed = true;\r\n\r\n      effect = slide.opts[self.firstRun ? \"animationEffect\" : \"transitionEffect\"];\r\n      duration = slide.opts[self.firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n\r\n      duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10);\r\n\r\n      if (isMoved || slide.pos !== self.currPos || !duration) {\r\n        effect = false;\r\n      }\r\n\r\n      // Check if can zoom\r\n      if (effect === \"zoom\") {\r\n        if (slide.pos === self.currPos && duration && slide.type === \"image\" && !slide.hasError && (start = self.getThumbPos(slide))) {\r\n          end = self.getFitPos(slide);\r\n        } else {\r\n          effect = \"fade\";\r\n        }\r\n      }\r\n\r\n      // Zoom animation\r\n      // ==============\r\n      if (effect === \"zoom\") {\r\n        self.isAnimating = true;\r\n\r\n        end.scaleX = end.width / start.width;\r\n        end.scaleY = end.height / start.height;\r\n\r\n        // Check if we need to animate opacity\r\n        opacity = slide.opts.zoomOpacity;\r\n\r\n        if (opacity == \"auto\") {\r\n          opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1;\r\n        }\r\n\r\n        if (opacity) {\r\n          start.opacity = 0.1;\r\n          end.opacity = 1;\r\n        }\r\n\r\n        // Draw image at start position\r\n        $.fancybox.setTranslate(slide.$content.removeClass(\"fancybox-is-hidden\"), start);\r\n\r\n        forceRedraw(slide.$content);\r\n\r\n        // Start animation\r\n        $.fancybox.animate(slide.$content, end, duration, function () {\r\n          self.isAnimating = false;\r\n\r\n          self.complete();\r\n        });\r\n\r\n        return;\r\n      }\r\n\r\n      self.updateSlide(slide);\r\n\r\n      // Simply show content if no effect\r\n      // ================================\r\n      if (!effect) {\r\n        slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n        if (!isRevealed && isMoved && slide.type === \"image\" && !slide.hasError) {\r\n          slide.$content.hide().fadeIn(\"fast\");\r\n        }\r\n\r\n        if (slide.pos === self.currPos) {\r\n          self.complete();\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      // Prepare for CSS transiton\r\n      // =========================\r\n      $.fancybox.stop($slide);\r\n\r\n      //effectClassName = \"fancybox-animated fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-fx-\" + effect;\r\n      effectClassName = \"fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-animated fancybox-fx-\" + effect;\r\n\r\n      $slide.addClass(effectClassName).removeClass(\"fancybox-slide--current\"); //.addClass(effectClassName);\r\n\r\n      slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n      // Force reflow\r\n      forceRedraw($slide);\r\n\r\n      if (slide.type !== \"image\") {\r\n        slide.$content.hide().show(0);\r\n      }\r\n\r\n      $.fancybox.animate(\r\n        $slide,\r\n        \"fancybox-slide--current\",\r\n        duration,\r\n        function () {\r\n          $slide.removeClass(effectClassName).css({\r\n            transform: \"\",\r\n            opacity: \"\"\r\n          });\r\n\r\n          if (slide.pos === self.currPos) {\r\n            self.complete();\r\n          }\r\n        },\r\n        true\r\n      );\r\n    },\r\n\r\n    // Check if we can and have to zoom from thumbnail\r\n    //================================================\r\n\r\n    getThumbPos: function (slide) {\r\n      var rez = false,\r\n        $thumb = slide.$thumb,\r\n        thumbPos,\r\n        btw,\r\n        brw,\r\n        bbw,\r\n        blw;\r\n\r\n      if (!$thumb || !inViewport($thumb[0])) {\r\n        return false;\r\n      }\r\n\r\n      thumbPos = $.fancybox.getTranslate($thumb);\r\n\r\n      btw = parseFloat($thumb.css(\"border-top-width\") || 0);\r\n      brw = parseFloat($thumb.css(\"border-right-width\") || 0);\r\n      bbw = parseFloat($thumb.css(\"border-bottom-width\") || 0);\r\n      blw = parseFloat($thumb.css(\"border-left-width\") || 0);\r\n\r\n      rez = {\r\n        top: thumbPos.top + btw,\r\n        left: thumbPos.left + blw,\r\n        width: thumbPos.width - brw - blw,\r\n        height: thumbPos.height - btw - bbw,\r\n        scaleX: 1,\r\n        scaleY: 1\r\n      };\r\n\r\n      return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false;\r\n    },\r\n\r\n    // Final adjustments after current gallery item is moved to position\r\n    // and it`s content is loaded\r\n    // ==================================================================\r\n\r\n    complete: function () {\r\n      var self = this,\r\n        current = self.current,\r\n        slides = {},\r\n        $el;\r\n\r\n      if (self.isMoved() || !current.isLoaded) {\r\n        return;\r\n      }\r\n\r\n      if (!current.isComplete) {\r\n        current.isComplete = true;\r\n\r\n        current.$slide.siblings().trigger(\"onReset\");\r\n\r\n        self.preload(\"inline\");\r\n\r\n        // Trigger any CSS transiton inside the slide\r\n        forceRedraw(current.$slide);\r\n\r\n        current.$slide.addClass(\"fancybox-slide--complete\");\r\n\r\n        // Remove unnecessary slides\r\n        $.each(self.slides, function (key, slide) {\r\n          if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) {\r\n            slides[slide.pos] = slide;\r\n          } else if (slide) {\r\n            $.fancybox.stop(slide.$slide);\r\n\r\n            slide.$slide.off().remove();\r\n          }\r\n        });\r\n\r\n        self.slides = slides;\r\n      }\r\n\r\n      self.isAnimating = false;\r\n\r\n      self.updateCursor();\r\n\r\n      self.trigger(\"afterShow\");\r\n\r\n      // Autoplay first html5 video/audio\r\n      if (!!current.opts.video.autoStart) {\r\n        current.$slide\r\n          .find(\"video,audio\")\r\n          .filter(\":visible:first\")\r\n          .trigger(\"play\")\r\n          .one(\"ended\", function () {\r\n            if (Document.exitFullscreen) {\r\n              Document.exitFullscreen();\r\n            } else if (this.webkitExitFullscreen) {\r\n              this.webkitExitFullscreen();\r\n            }\r\n\r\n            self.next();\r\n          });\r\n      }\r\n\r\n      // Try to focus on the first focusable element\r\n      if (current.opts.autoFocus && current.contentType === \"html\") {\r\n        // Look for the first input with autofocus attribute\r\n        $el = current.$content.find(\"input[autofocus]:enabled:visible:first\");\r\n\r\n        if ($el.length) {\r\n          $el.trigger(\"focus\");\r\n        } else {\r\n          self.focus(null, true);\r\n        }\r\n      }\r\n\r\n      // Avoid jumping\r\n      current.$slide.scrollTop(0).scrollLeft(0);\r\n    },\r\n\r\n    // Preload next and previous slides\r\n    // ================================\r\n\r\n    preload: function (type) {\r\n      var self = this,\r\n        prev,\r\n        next;\r\n\r\n      if (self.group.length < 2) {\r\n        return;\r\n      }\r\n\r\n      next = self.slides[self.currPos + 1];\r\n      prev = self.slides[self.currPos - 1];\r\n\r\n      if (prev && prev.type === type) {\r\n        self.loadSlide(prev);\r\n      }\r\n\r\n      if (next && next.type === type) {\r\n        self.loadSlide(next);\r\n      }\r\n    },\r\n\r\n    // Try to find and focus on the first focusable element\r\n    // ====================================================\r\n\r\n    focus: function (e, firstRun) {\r\n      var self = this,\r\n        focusableStr = [\r\n          \"a[href]\",\r\n          \"area[href]\",\r\n          'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\r\n          \"select:not([disabled]):not([aria-hidden])\",\r\n          \"textarea:not([disabled]):not([aria-hidden])\",\r\n          \"button:not([disabled]):not([aria-hidden])\",\r\n          \"iframe\",\r\n          \"object\",\r\n          \"embed\",\r\n          \"video\",\r\n          \"audio\",\r\n          \"[contenteditable]\",\r\n          '[tabindex]:not([tabindex^=\"-\"])'\r\n        ].join(\",\"),\r\n        focusableItems,\r\n        focusedItemIndex;\r\n\r\n      if (self.isClosing) {\r\n        return;\r\n      }\r\n\r\n      if (e || !self.current || !self.current.isComplete) {\r\n        // Focus on any element inside fancybox\r\n        focusableItems = self.$refs.container.find(\"*:visible\");\r\n      } else {\r\n        // Focus inside current slide\r\n        focusableItems = self.current.$slide.find(\"*:visible\" + (firstRun ? \":not(.fancybox-close-small)\" : \"\"));\r\n      }\r\n\r\n      focusableItems = focusableItems.filter(focusableStr).filter(function () {\r\n        return $(this).css(\"visibility\") !== \"hidden\" && !$(this).hasClass(\"disabled\");\r\n      });\r\n\r\n      if (focusableItems.length) {\r\n        focusedItemIndex = focusableItems.index(document.activeElement);\r\n\r\n        if (e && e.shiftKey) {\r\n          // Back tab\r\n          if (focusedItemIndex < 0 || focusedItemIndex == 0) {\r\n            e.preventDefault();\r\n\r\n            focusableItems.eq(focusableItems.length - 1).trigger(\"focus\");\r\n          }\r\n        } else {\r\n          // Outside or Forward tab\r\n          if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) {\r\n            if (e) {\r\n              e.preventDefault();\r\n            }\r\n\r\n            focusableItems.eq(0).trigger(\"focus\");\r\n          }\r\n        }\r\n      } else {\r\n        self.$refs.container.trigger(\"focus\");\r\n      }\r\n    },\r\n\r\n    // Activates current instance - brings container to the front and enables keyboard,\r\n    // notifies other instances about deactivating\r\n    // =================================================================================\r\n\r\n    activate: function () {\r\n      var self = this;\r\n\r\n      // Deactivate all instances\r\n      $(\".fancybox-container\").each(function () {\r\n        var instance = $(this).data(\"FancyBox\");\r\n\r\n        // Skip self and closing instances\r\n        if (instance && instance.id !== self.id && !instance.isClosing) {\r\n          instance.trigger(\"onDeactivate\");\r\n\r\n          instance.removeEvents();\r\n\r\n          instance.isVisible = false;\r\n        }\r\n      });\r\n\r\n      self.isVisible = true;\r\n\r\n      if (self.current || self.isIdle) {\r\n        self.update();\r\n\r\n        self.updateControls();\r\n      }\r\n\r\n      self.trigger(\"onActivate\");\r\n\r\n      self.addEvents();\r\n    },\r\n\r\n    // Start closing procedure\r\n    // This will start \"zoom-out\" animation if needed and clean everything up afterwards\r\n    // =================================================================================\r\n\r\n    close: function (e, d) {\r\n      var self = this,\r\n        current = self.current,\r\n        effect,\r\n        duration,\r\n        $content,\r\n        domRect,\r\n        opacity,\r\n        start,\r\n        end;\r\n\r\n      var done = function () {\r\n        self.cleanUp(e);\r\n      };\r\n\r\n      if (self.isClosing) {\r\n        return false;\r\n      }\r\n\r\n      self.isClosing = true;\r\n\r\n      // If beforeClose callback prevents closing, make sure content is centered\r\n      if (self.trigger(\"beforeClose\", e) === false) {\r\n        self.isClosing = false;\r\n\r\n        requestAFrame(function () {\r\n          self.update();\r\n        });\r\n\r\n        return false;\r\n      }\r\n\r\n      // Remove all events\r\n      // If there are multiple instances, they will be set again by \"activate\" method\r\n      self.removeEvents();\r\n\r\n      $content = current.$content;\r\n      effect = current.opts.animationEffect;\r\n      duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0;\r\n\r\n      current.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated\");\r\n\r\n      if (e !== true) {\r\n        $.fancybox.stop(current.$slide);\r\n      } else {\r\n        effect = false;\r\n      }\r\n\r\n      // Remove other slides\r\n      current.$slide\r\n        .siblings()\r\n        .trigger(\"onReset\")\r\n        .remove();\r\n\r\n      // Trigger animations\r\n      if (duration) {\r\n        self.$refs.container\r\n          .removeClass(\"fancybox-is-open\")\r\n          .addClass(\"fancybox-is-closing\")\r\n          .css(\"transition-duration\", duration + \"ms\");\r\n      }\r\n\r\n      // Clean up\r\n      self.hideLoading(current);\r\n\r\n      self.hideControls(true);\r\n\r\n      self.updateCursor();\r\n\r\n      // Check if possible to zoom-out\r\n      if (\r\n        effect === \"zoom\" &&\r\n        !($content && duration && current.type === \"image\" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))\r\n      ) {\r\n        effect = \"fade\";\r\n      }\r\n\r\n      if (effect === \"zoom\") {\r\n        $.fancybox.stop($content);\r\n\r\n        domRect = $.fancybox.getTranslate($content);\r\n\r\n        start = {\r\n          top: domRect.top,\r\n          left: domRect.left,\r\n          scaleX: domRect.width / end.width,\r\n          scaleY: domRect.height / end.height,\r\n          width: end.width,\r\n          height: end.height\r\n        };\r\n\r\n        // Check if we need to animate opacity\r\n        opacity = current.opts.zoomOpacity;\r\n\r\n        if (opacity == \"auto\") {\r\n          opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1;\r\n        }\r\n\r\n        if (opacity) {\r\n          end.opacity = 0;\r\n        }\r\n\r\n        $.fancybox.setTranslate($content, start);\r\n\r\n        forceRedraw($content);\r\n\r\n        $.fancybox.animate($content, end, duration, done);\r\n\r\n        return true;\r\n      }\r\n\r\n      if (effect && duration) {\r\n        $.fancybox.animate(\r\n          current.$slide.addClass(\"fancybox-slide--previous\").removeClass(\"fancybox-slide--current\"),\r\n          \"fancybox-animated fancybox-fx-\" + effect,\r\n          duration,\r\n          done\r\n        );\r\n      } else {\r\n        // If skip animation\r\n        if (e === true) {\r\n          setTimeout(done, duration);\r\n        } else {\r\n          done();\r\n        }\r\n      }\r\n\r\n      return true;\r\n    },\r\n\r\n    // Final adjustments after removing the instance\r\n    // =============================================\r\n\r\n    cleanUp: function (e) {\r\n      var self = this,\r\n        instance,\r\n        $focus = self.current.opts.$orig,\r\n        x,\r\n        y;\r\n\r\n      self.current.$slide.trigger(\"onReset\");\r\n\r\n      self.$refs.container.empty().remove();\r\n\r\n      self.trigger(\"afterClose\", e);\r\n\r\n      // Place back focus\r\n      if (!!self.current.opts.backFocus) {\r\n        if (!$focus || !$focus.length || !$focus.is(\":visible\")) {\r\n          $focus = self.$trigger;\r\n        }\r\n\r\n        if ($focus && $focus.length) {\r\n          x = window.scrollX;\r\n          y = window.scrollY;\r\n\r\n          $focus.trigger(\"focus\");\r\n\r\n          $(\"html, body\")\r\n            .scrollTop(y)\r\n            .scrollLeft(x);\r\n        }\r\n      }\r\n\r\n      self.current = null;\r\n\r\n      // Check if there are other instances\r\n      instance = $.fancybox.getInstance();\r\n\r\n      if (instance) {\r\n        instance.activate();\r\n      } else {\r\n        $(\"body\").removeClass(\"fancybox-active compensate-for-scrollbar\");\r\n\r\n        $(\"#fancybox-style-noscroll\").remove();\r\n      }\r\n    },\r\n\r\n    // Call callback and trigger an event\r\n    // ==================================\r\n\r\n    trigger: function (name, slide) {\r\n      var args = Array.prototype.slice.call(arguments, 1),\r\n        self = this,\r\n        obj = slide && slide.opts ? slide : self.current,\r\n        rez;\r\n\r\n      if (obj) {\r\n        args.unshift(obj);\r\n      } else {\r\n        obj = self;\r\n      }\r\n\r\n      args.unshift(self);\r\n\r\n      if ($.isFunction(obj.opts[name])) {\r\n        rez = obj.opts[name].apply(obj, args);\r\n      }\r\n\r\n      if (rez === false) {\r\n        return rez;\r\n      }\r\n\r\n      if (name === \"afterClose\" || !self.$refs) {\r\n        $D.trigger(name + \".fb\", args);\r\n      } else {\r\n        self.$refs.container.trigger(name + \".fb\", args);\r\n      }\r\n    },\r\n\r\n    // Update infobar values, navigation button states and reveal caption\r\n    // ==================================================================\r\n\r\n    updateControls: function () {\r\n      var self = this,\r\n        current = self.current,\r\n        index = current.index,\r\n        $container = self.$refs.container,\r\n        $caption = self.$refs.caption,\r\n        caption = current.opts.caption;\r\n\r\n      // Recalculate content dimensions\r\n      current.$slide.trigger(\"refresh\");\r\n\r\n      // Set caption\r\n      if (caption && caption.length) {\r\n        self.$caption = $caption;\r\n\r\n        $caption\r\n          .children()\r\n          .eq(0)\r\n          .html(caption);\r\n      } else {\r\n        self.$caption = null;\r\n      }\r\n\r\n      if (!self.hasHiddenControls && !self.isIdle) {\r\n        self.showControls();\r\n      }\r\n\r\n      // Update info and navigation elements\r\n      $container.find(\"[data-fancybox-count]\").html(self.group.length);\r\n      $container.find(\"[data-fancybox-index]\").html(index + 1);\r\n\r\n      $container.find(\"[data-fancybox-prev]\").prop(\"disabled\", !current.opts.loop && index <= 0);\r\n      $container.find(\"[data-fancybox-next]\").prop(\"disabled\", !current.opts.loop && index >= self.group.length - 1);\r\n\r\n      if (current.type === \"image\") {\r\n        // Re-enable buttons; update download button source\r\n        $container\r\n          .find(\"[data-fancybox-zoom]\")\r\n          .show()\r\n          .end()\r\n          .find(\"[data-fancybox-download]\")\r\n          .attr(\"href\", current.opts.image.src || current.src)\r\n          .show();\r\n      } else if (current.opts.toolbar) {\r\n        $container.find(\"[data-fancybox-download],[data-fancybox-zoom]\").hide();\r\n      }\r\n\r\n      // Make sure focus is not on disabled button/element\r\n      if ($(document.activeElement).is(\":hidden,[disabled]\")) {\r\n        self.$refs.container.trigger(\"focus\");\r\n      }\r\n    },\r\n\r\n    // Hide toolbar and caption\r\n    // ========================\r\n\r\n    hideControls: function (andCaption) {\r\n      var self = this,\r\n        arr = [\"infobar\", \"toolbar\", \"nav\"];\r\n\r\n      if (andCaption || !self.current.opts.preventCaptionOverlap) {\r\n        arr.push(\"caption\");\r\n      }\r\n\r\n      this.$refs.container.removeClass(\r\n        arr\r\n        .map(function (i) {\r\n          return \"fancybox-show-\" + i;\r\n        })\r\n        .join(\" \")\r\n      );\r\n\r\n      this.hasHiddenControls = true;\r\n    },\r\n\r\n    showControls: function () {\r\n      var self = this,\r\n        opts = self.current ? self.current.opts : self.opts,\r\n        $container = self.$refs.container;\r\n\r\n      self.hasHiddenControls = false;\r\n      self.idleSecondsCounter = 0;\r\n\r\n      $container\r\n        .toggleClass(\"fancybox-show-toolbar\", !!(opts.toolbar && opts.buttons))\r\n        .toggleClass(\"fancybox-show-infobar\", !!(opts.infobar && self.group.length > 1))\r\n        .toggleClass(\"fancybox-show-caption\", !!self.$caption)\r\n        .toggleClass(\"fancybox-show-nav\", !!(opts.arrows && self.group.length > 1))\r\n        .toggleClass(\"fancybox-is-modal\", !!opts.modal);\r\n    },\r\n\r\n    // Toggle toolbar and caption\r\n    // ==========================\r\n\r\n    toggleControls: function () {\r\n      if (this.hasHiddenControls) {\r\n        this.showControls();\r\n      } else {\r\n        this.hideControls();\r\n      }\r\n    }\r\n  });\r\n\r\n  $.fancybox = {\r\n    version: \"3.5.7\",\r\n    defaults: defaults,\r\n\r\n    // Get current instance and execute a command.\r\n    //\r\n    // Examples of usage:\r\n    //\r\n    //   $instance = $.fancybox.getInstance();\r\n    //   $.fancybox.getInstance().jumpTo( 1 );\r\n    //   $.fancybox.getInstance( 'jumpTo', 1 );\r\n    //   $.fancybox.getInstance( function() {\r\n    //       console.info( this.currIndex );\r\n    //   });\r\n    // ======================================================\r\n\r\n    getInstance: function (command) {\r\n      var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data(\"FancyBox\"),\r\n        args = Array.prototype.slice.call(arguments, 1);\r\n\r\n      if (instance instanceof FancyBox) {\r\n        if ($.type(command) === \"string\") {\r\n          instance[command].apply(instance, args);\r\n        } else if ($.type(command) === \"function\") {\r\n          command.apply(instance, args);\r\n        }\r\n\r\n        return instance;\r\n      }\r\n\r\n      return false;\r\n    },\r\n\r\n    // Create new instance\r\n    // ===================\r\n\r\n    open: function (items, opts, index) {\r\n      return new FancyBox(items, opts, index);\r\n    },\r\n\r\n    // Close current or all instances\r\n    // ==============================\r\n\r\n    close: function (all) {\r\n      var instance = this.getInstance();\r\n\r\n      if (instance) {\r\n        instance.close();\r\n\r\n        // Try to find and close next instance\r\n        if (all === true) {\r\n          this.close(all);\r\n        }\r\n      }\r\n    },\r\n\r\n    // Close all instances and unbind all events\r\n    // =========================================\r\n\r\n    destroy: function () {\r\n      this.close(true);\r\n\r\n      $D.add(\"body\").off(\"click.fb-start\", \"**\");\r\n    },\r\n\r\n    // Try to detect mobile devices\r\n    // ============================\r\n\r\n    isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\r\n\r\n    // Detect if 'translate3d' support is available\r\n    // ============================================\r\n\r\n    use3d: (function () {\r\n      var div = document.createElement(\"div\");\r\n\r\n      return (\r\n        window.getComputedStyle &&\r\n        window.getComputedStyle(div) &&\r\n        window.getComputedStyle(div).getPropertyValue(\"transform\") &&\r\n        !(document.documentMode && document.documentMode < 11)\r\n      );\r\n    })(),\r\n\r\n    // Helper function to get current visual state of an element\r\n    // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\r\n    // =====================================================================\r\n\r\n    getTranslate: function ($el) {\r\n      var domRect;\r\n\r\n      if (!$el || !$el.length) {\r\n        return false;\r\n      }\r\n\r\n      domRect = $el[0].getBoundingClientRect();\r\n\r\n      return {\r\n        top: domRect.top || 0,\r\n        left: domRect.left || 0,\r\n        width: domRect.width,\r\n        height: domRect.height,\r\n        opacity: parseFloat($el.css(\"opacity\"))\r\n      };\r\n    },\r\n\r\n    // Shortcut for setting \"translate3d\" properties for element\r\n    // Can set be used to set opacity, too\r\n    // ========================================================\r\n\r\n    setTranslate: function ($el, props) {\r\n      var str = \"\",\r\n        css = {};\r\n\r\n      if (!$el || !props) {\r\n        return;\r\n      }\r\n\r\n      if (props.left !== undefined || props.top !== undefined) {\r\n        str =\r\n          (props.left === undefined ? $el.position().left : props.left) +\r\n          \"px, \" +\r\n          (props.top === undefined ? $el.position().top : props.top) +\r\n          \"px\";\r\n\r\n        if (this.use3d) {\r\n          str = \"translate3d(\" + str + \", 0px)\";\r\n        } else {\r\n          str = \"translate(\" + str + \")\";\r\n        }\r\n      }\r\n\r\n      if (props.scaleX !== undefined && props.scaleY !== undefined) {\r\n        str += \" scale(\" + props.scaleX + \", \" + props.scaleY + \")\";\r\n      } else if (props.scaleX !== undefined) {\r\n        str += \" scaleX(\" + props.scaleX + \")\";\r\n      }\r\n\r\n      if (str.length) {\r\n        css.transform = str;\r\n      }\r\n\r\n      if (props.opacity !== undefined) {\r\n        css.opacity = props.opacity;\r\n      }\r\n\r\n      if (props.width !== undefined) {\r\n        css.width = props.width;\r\n      }\r\n\r\n      if (props.height !== undefined) {\r\n        css.height = props.height;\r\n      }\r\n\r\n      return $el.css(css);\r\n    },\r\n\r\n    // Simple CSS transition handler\r\n    // =============================\r\n\r\n    animate: function ($el, to, duration, callback, leaveAnimationName) {\r\n      var self = this,\r\n        from;\r\n\r\n      if ($.isFunction(duration)) {\r\n        callback = duration;\r\n        duration = null;\r\n      }\r\n\r\n      self.stop($el);\r\n\r\n      from = self.getTranslate($el);\r\n\r\n      $el.on(transitionEnd, function (e) {\r\n        // Skip events from child elements and z-index change\r\n        if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == \"z-index\")) {\r\n          return;\r\n        }\r\n\r\n        self.stop($el);\r\n\r\n        if ($.isNumeric(duration)) {\r\n          $el.css(\"transition-duration\", \"\");\r\n        }\r\n\r\n        if ($.isPlainObject(to)) {\r\n          if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n            self.setTranslate($el, {\r\n              top: to.top,\r\n              left: to.left,\r\n              width: from.width * to.scaleX,\r\n              height: from.height * to.scaleY,\r\n              scaleX: 1,\r\n              scaleY: 1\r\n            });\r\n          }\r\n        } else if (leaveAnimationName !== true) {\r\n          $el.removeClass(to);\r\n        }\r\n\r\n        if ($.isFunction(callback)) {\r\n          callback(e);\r\n        }\r\n      });\r\n\r\n      if ($.isNumeric(duration)) {\r\n        $el.css(\"transition-duration\", duration + \"ms\");\r\n      }\r\n\r\n      // Start animation by changing CSS properties or class name\r\n      if ($.isPlainObject(to)) {\r\n        if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n          delete to.width;\r\n          delete to.height;\r\n\r\n          if ($el.parent().hasClass(\"fancybox-slide--image\")) {\r\n            $el.parent().addClass(\"fancybox-is-scaling\");\r\n          }\r\n        }\r\n\r\n        $.fancybox.setTranslate($el, to);\r\n      } else {\r\n        $el.addClass(to);\r\n      }\r\n\r\n      // Make sure that `transitionend` callback gets fired\r\n      $el.data(\r\n        \"timer\",\r\n        setTimeout(function () {\r\n          $el.trigger(transitionEnd);\r\n        }, duration + 33)\r\n      );\r\n    },\r\n\r\n    stop: function ($el, callCallback) {\r\n      if ($el && $el.length) {\r\n        clearTimeout($el.data(\"timer\"));\r\n\r\n        if (callCallback) {\r\n          $el.trigger(transitionEnd);\r\n        }\r\n\r\n        $el.off(transitionEnd).css(\"transition-duration\", \"\");\r\n\r\n        $el.parent().removeClass(\"fancybox-is-scaling\");\r\n      }\r\n    }\r\n  };\r\n\r\n  // Default click handler for \"fancyboxed\" links\r\n  // ============================================\r\n\r\n  function _run(e, opts) {\r\n    var items = [],\r\n      index = 0,\r\n      $target,\r\n      value,\r\n      instance;\r\n\r\n    // Avoid opening multiple times\r\n    if (e && e.isDefaultPrevented()) {\r\n      return;\r\n    }\r\n\r\n    e.preventDefault();\r\n\r\n    opts = opts || {};\r\n\r\n    if (e && e.data) {\r\n      opts = mergeOpts(e.data.options, opts);\r\n    }\r\n\r\n    $target = opts.$target || $(e.currentTarget).trigger(\"blur\");\r\n    instance = $.fancybox.getInstance();\r\n\r\n    if (instance && instance.$trigger && instance.$trigger.is($target)) {\r\n      return;\r\n    }\r\n\r\n    if (opts.selector) {\r\n      items = $(opts.selector);\r\n    } else {\r\n      // Get all related items and find index for clicked one\r\n      value = $target.attr(\"data-fancybox\") || \"\";\r\n\r\n      if (value) {\r\n        items = e.data ? e.data.items : [];\r\n        items = items.length ? items.filter('[data-fancybox=\"' + value + '\"]') : $('[data-fancybox=\"' + value + '\"]');\r\n      } else {\r\n        items = [$target];\r\n      }\r\n    }\r\n\r\n    index = $(items).index($target);\r\n\r\n    // Sometimes current item can not be found\r\n    if (index < 0) {\r\n      index = 0;\r\n    }\r\n\r\n    instance = $.fancybox.open(items, opts, index);\r\n\r\n    // Save last active element\r\n    instance.$trigger = $target;\r\n  }\r\n\r\n  // Create a jQuery plugin\r\n  // ======================\r\n\r\n  $.fn.fancybox = function (options) {\r\n    var selector;\r\n\r\n    options = options || {};\r\n    selector = options.selector || false;\r\n\r\n    if (selector) {\r\n      // Use body element instead of document so it executes first\r\n      $(\"body\")\r\n        .off(\"click.fb-start\", selector)\r\n        .on(\"click.fb-start\", selector, {\r\n          options: options\r\n        }, _run);\r\n    } else {\r\n      this.off(\"click.fb-start\").on(\r\n        \"click.fb-start\", {\r\n          items: this,\r\n          options: options\r\n        },\r\n        _run\r\n      );\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  // Self initializing plugin for all elements having `data-fancybox` attribute\r\n  // ==========================================================================\r\n\r\n  $D.on(\"click.fb-start\", \"[data-fancybox]\", _run);\r\n\r\n  // Enable \"trigger elements\"\r\n  // =========================\r\n\r\n  $D.on(\"click.fb-start\", \"[data-fancybox-trigger]\", function (e) {\r\n    $('[data-fancybox=\"' + $(this).attr(\"data-fancybox-trigger\") + '\"]')\r\n      .eq($(this).attr(\"data-fancybox-index\") || 0)\r\n      .trigger(\"click.fb-start\", {\r\n        $trigger: $(this)\r\n      });\r\n  });\r\n\r\n  // Track focus event for better accessibility styling\r\n  // ==================================================\r\n  (function () {\r\n    var buttonStr = \".fancybox-button\",\r\n      focusStr = \"fancybox-focus\",\r\n      $pressed = null;\r\n\r\n    $D.on(\"mousedown mouseup focus blur\", buttonStr, function (e) {\r\n      switch (e.type) {\r\n        case \"mousedown\":\r\n          $pressed = $(this);\r\n          break;\r\n        case \"mouseup\":\r\n          $pressed = null;\r\n          break;\r\n        case \"focusin\":\r\n          $(buttonStr).removeClass(focusStr);\r\n\r\n          if (!$(this).is($pressed) && !$(this).is(\"[disabled]\")) {\r\n            $(this).addClass(focusStr);\r\n          }\r\n          break;\r\n        case \"focusout\":\r\n          $(buttonStr).removeClass(focusStr);\r\n          break;\r\n      }\r\n    });\r\n  })();\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Media\r\n// Adds additional media type support\r\n//\r\n// ==========================================================================\r\n(function ($) {\r\n  \"use strict\";\r\n\r\n  // Object containing properties for each media type\r\n  var defaults = {\r\n    youtube: {\r\n      matcher: /(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,\r\n      params: {\r\n        autoplay: 1,\r\n        autohide: 1,\r\n        fs: 1,\r\n        rel: 0,\r\n        hd: 1,\r\n        wmode: \"transparent\",\r\n        enablejsapi: 1,\r\n        html5: 1\r\n      },\r\n      paramPlace: 8,\r\n      type: \"iframe\",\r\n      url: \"https://www.youtube-nocookie.com/embed/$4\",\r\n      thumb: \"https://img.youtube.com/vi/$4/hqdefault.jpg\"\r\n    },\r\n\r\n    vimeo: {\r\n      matcher: /^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,\r\n      params: {\r\n        autoplay: 1,\r\n        hd: 1,\r\n        show_title: 1,\r\n        show_byline: 1,\r\n        show_portrait: 0,\r\n        fullscreen: 1\r\n      },\r\n      paramPlace: 3,\r\n      type: \"iframe\",\r\n      url: \"//player.vimeo.com/video/$2\"\r\n    },\r\n\r\n    instagram: {\r\n      matcher: /(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,\r\n      type: \"image\",\r\n      url: \"//$1/p/$2/media/?size=l\"\r\n    },\r\n\r\n    // Examples:\r\n    // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\r\n    // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\r\n    // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en\r\n    // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\r\n    gmap_place: {\r\n      matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,\r\n      type: \"iframe\",\r\n      url: function (rez) {\r\n        return (\r\n          \"//maps.google.\" +\r\n          rez[2] +\r\n          \"/?ll=\" +\r\n          (rez[9] ? rez[9] + \"&z=\" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\\//, \"&\") : \"\") : rez[12] + \"\").replace(/\\?/, \"&\") +\r\n          \"&output=\" +\r\n          (rez[12] && rez[12].indexOf(\"layer=c\") > 0 ? \"svembed\" : \"embed\")\r\n        );\r\n      }\r\n    },\r\n\r\n    // Examples:\r\n    // https://www.google.com/maps/search/Empire+State+Building/\r\n    // https://www.google.com/maps/search/?api=1&query=centurylink+field\r\n    // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\r\n    gmap_search: {\r\n      matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,\r\n      type: \"iframe\",\r\n      url: function (rez) {\r\n        return \"//maps.google.\" + rez[2] + \"/maps?q=\" + rez[5].replace(\"query=\", \"q=\").replace(\"api=1\", \"\") + \"&output=embed\";\r\n      }\r\n    }\r\n  };\r\n\r\n  // Formats matching url to final form\r\n  var format = function (url, rez, params) {\r\n    if (!url) {\r\n      return;\r\n    }\r\n\r\n    params = params || \"\";\r\n\r\n    if ($.type(params) === \"object\") {\r\n      params = $.param(params, true);\r\n    }\r\n\r\n    $.each(rez, function (key, value) {\r\n      url = url.replace(\"$\" + key, value || \"\");\r\n    });\r\n\r\n    if (params.length) {\r\n      url += (url.indexOf(\"?\") > 0 ? \"&\" : \"?\") + params;\r\n    }\r\n\r\n    return url;\r\n  };\r\n\r\n  $(document).on(\"objectNeedsType.fb\", function (e, instance, item) {\r\n    var url = item.src || \"\",\r\n      type = false,\r\n      media,\r\n      thumb,\r\n      rez,\r\n      params,\r\n      urlParams,\r\n      paramObj,\r\n      provider;\r\n\r\n    media = $.extend(true, {}, defaults, item.opts.media);\r\n\r\n    // Look for any matching media type\r\n    $.each(media, function (providerName, providerOpts) {\r\n      rez = url.match(providerOpts.matcher);\r\n\r\n      if (!rez) {\r\n        return;\r\n      }\r\n\r\n      type = providerOpts.type;\r\n      provider = providerName;\r\n      paramObj = {};\r\n\r\n      if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) {\r\n        urlParams = rez[providerOpts.paramPlace];\r\n\r\n        if (urlParams[0] == \"?\") {\r\n          urlParams = urlParams.substring(1);\r\n        }\r\n\r\n        urlParams = urlParams.split(\"&\");\r\n\r\n        for (var m = 0; m < urlParams.length; ++m) {\r\n          var p = urlParams[m].split(\"=\", 2);\r\n\r\n          if (p.length == 2) {\r\n            paramObj[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\r\n          }\r\n        }\r\n      }\r\n\r\n      params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj);\r\n\r\n      url =\r\n        $.type(providerOpts.url) === \"function\" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params);\r\n\r\n      thumb =\r\n        $.type(providerOpts.thumb) === \"function\" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez);\r\n\r\n      if (providerName === \"youtube\") {\r\n        url = url.replace(/&t=((\\d+)m)?(\\d+)s/, function (match, p1, m, s) {\r\n          return \"&start=\" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10));\r\n        });\r\n      } else if (providerName === \"vimeo\") {\r\n        url = url.replace(\"&%23\", \"#\");\r\n      }\r\n\r\n      return false;\r\n    });\r\n\r\n    // If it is found, then change content type and update the url\r\n\r\n    if (type) {\r\n      if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) {\r\n        item.opts.thumb = thumb;\r\n      }\r\n\r\n      if (type === \"iframe\") {\r\n        item.opts = $.extend(true, item.opts, {\r\n          iframe: {\r\n            preload: false,\r\n            attr: {\r\n              scrolling: \"no\"\r\n            }\r\n          }\r\n        });\r\n      }\r\n\r\n      $.extend(item, {\r\n        type: type,\r\n        src: url,\r\n        origSrc: item.src,\r\n        contentSource: provider,\r\n        contentType: type === \"image\" ? \"image\" : provider == \"gmap_place\" || provider == \"gmap_search\" ? \"map\" : \"video\"\r\n      });\r\n    } else if (url) {\r\n      item.type = item.opts.defaultType;\r\n    }\r\n  });\r\n\r\n  // Load YouTube/Video API on request to detect when video finished playing\r\n  var VideoAPILoader = {\r\n    youtube: {\r\n      src: \"https://www.youtube.com/iframe_api\",\r\n      class: \"YT\",\r\n      loading: false,\r\n      loaded: false\r\n    },\r\n\r\n    vimeo: {\r\n      src: \"https://player.vimeo.com/api/player.js\",\r\n      class: \"Vimeo\",\r\n      loading: false,\r\n      loaded: false\r\n    },\r\n\r\n    load: function (vendor) {\r\n      var _this = this,\r\n        script;\r\n\r\n      if (this[vendor].loaded) {\r\n        setTimeout(function () {\r\n          _this.done(vendor);\r\n        });\r\n        return;\r\n      }\r\n\r\n      if (this[vendor].loading) {\r\n        return;\r\n      }\r\n\r\n      this[vendor].loading = true;\r\n\r\n      script = document.createElement(\"script\");\r\n      script.type = \"text/javascript\";\r\n      script.src = this[vendor].src;\r\n\r\n      if (vendor === \"youtube\") {\r\n        window.onYouTubeIframeAPIReady = function () {\r\n          _this[vendor].loaded = true;\r\n          _this.done(vendor);\r\n        };\r\n      } else {\r\n        script.onload = function () {\r\n          _this[vendor].loaded = true;\r\n          _this.done(vendor);\r\n        };\r\n      }\r\n\r\n      document.body.appendChild(script);\r\n    },\r\n    done: function (vendor) {\r\n      var instance, $el, player;\r\n\r\n      if (vendor === \"youtube\") {\r\n        delete window.onYouTubeIframeAPIReady;\r\n      }\r\n\r\n      instance = $.fancybox.getInstance();\r\n\r\n      if (instance) {\r\n        $el = instance.current.$content.find(\"iframe\");\r\n\r\n        if (vendor === \"youtube\" && YT !== undefined && YT) {\r\n          player = new YT.Player($el.attr(\"id\"), {\r\n            events: {\r\n              onStateChange: function (e) {\r\n                if (e.data == 0) {\r\n                  instance.next();\r\n                }\r\n              }\r\n            }\r\n          });\r\n        } else if (vendor === \"vimeo\" && Vimeo !== undefined && Vimeo) {\r\n          player = new Vimeo.Player($el);\r\n\r\n          player.on(\"ended\", function () {\r\n            instance.next();\r\n          });\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  $(document).on({\r\n    \"afterShow.fb\": function (e, instance, current) {\r\n      if (instance.group.length > 1 && (current.contentSource === \"youtube\" || current.contentSource === \"vimeo\")) {\r\n        VideoAPILoader.load(current.contentSource);\r\n      }\r\n    }\r\n  });\r\n})(jQuery);\n// ==========================================================================\r\n//\r\n// Guestures\r\n// Adds touch guestures, handles click and tap events\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n  \"use strict\";\r\n\r\n  var requestAFrame = (function () {\r\n    return (\r\n      window.requestAnimationFrame ||\r\n      window.webkitRequestAnimationFrame ||\r\n      window.mozRequestAnimationFrame ||\r\n      window.oRequestAnimationFrame ||\r\n      // if all else fails, use setTimeout\r\n      function (callback) {\r\n        return window.setTimeout(callback, 1000 / 60);\r\n      }\r\n    );\r\n  })();\r\n\r\n  var cancelAFrame = (function () {\r\n    return (\r\n      window.cancelAnimationFrame ||\r\n      window.webkitCancelAnimationFrame ||\r\n      window.mozCancelAnimationFrame ||\r\n      window.oCancelAnimationFrame ||\r\n      function (id) {\r\n        window.clearTimeout(id);\r\n      }\r\n    );\r\n  })();\r\n\r\n  var getPointerXY = function (e) {\r\n    var result = [];\r\n\r\n    e = e.originalEvent || e || window.e;\r\n    e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];\r\n\r\n    for (var key in e) {\r\n      if (e[key].pageX) {\r\n        result.push({\r\n          x: e[key].pageX,\r\n          y: e[key].pageY\r\n        });\r\n      } else if (e[key].clientX) {\r\n        result.push({\r\n          x: e[key].clientX,\r\n          y: e[key].clientY\r\n        });\r\n      }\r\n    }\r\n\r\n    return result;\r\n  };\r\n\r\n  var distance = function (point2, point1, what) {\r\n    if (!point1 || !point2) {\r\n      return 0;\r\n    }\r\n\r\n    if (what === \"x\") {\r\n      return point2.x - point1.x;\r\n    } else if (what === \"y\") {\r\n      return point2.y - point1.y;\r\n    }\r\n\r\n    return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\r\n  };\r\n\r\n  var isClickable = function ($el) {\r\n    if (\r\n      $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea,video,audio,iframe') ||\r\n      $.isFunction($el.get(0).onclick) ||\r\n      $el.data(\"selectable\")\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    // Check for attributes like data-fancybox-next or data-fancybox-close\r\n    for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) {\r\n      if (atts[i].nodeName.substr(0, 14) === \"data-fancybox-\") {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  };\r\n\r\n  var hasScrollbars = function (el) {\r\n    var overflowY = window.getComputedStyle(el)[\"overflow-y\"],\r\n      overflowX = window.getComputedStyle(el)[\"overflow-x\"],\r\n      vertical = (overflowY === \"scroll\" || overflowY === \"auto\") && el.scrollHeight > el.clientHeight,\r\n      horizontal = (overflowX === \"scroll\" || overflowX === \"auto\") && el.scrollWidth > el.clientWidth;\r\n\r\n    return vertical || horizontal;\r\n  };\r\n\r\n  var isScrollable = function ($el) {\r\n    var rez = false;\r\n\r\n    while (true) {\r\n      rez = hasScrollbars($el.get(0));\r\n\r\n      if (rez) {\r\n        break;\r\n      }\r\n\r\n      $el = $el.parent();\r\n\r\n      if (!$el.length || $el.hasClass(\"fancybox-stage\") || $el.is(\"body\")) {\r\n        break;\r\n      }\r\n    }\r\n\r\n    return rez;\r\n  };\r\n\r\n  var Guestures = function (instance) {\r\n    var self = this;\r\n\r\n    self.instance = instance;\r\n\r\n    self.$bg = instance.$refs.bg;\r\n    self.$stage = instance.$refs.stage;\r\n    self.$container = instance.$refs.container;\r\n\r\n    self.destroy();\r\n\r\n    self.$container.on(\"touchstart.fb.touch mousedown.fb.touch\", $.proxy(self, \"ontouchstart\"));\r\n  };\r\n\r\n  Guestures.prototype.destroy = function () {\r\n    var self = this;\r\n\r\n    self.$container.off(\".fb.touch\");\r\n\r\n    $(document).off(\".fb.touch\");\r\n\r\n    if (self.requestId) {\r\n      cancelAFrame(self.requestId);\r\n      self.requestId = null;\r\n    }\r\n\r\n    if (self.tapped) {\r\n      clearTimeout(self.tapped);\r\n      self.tapped = null;\r\n    }\r\n  };\r\n\r\n  Guestures.prototype.ontouchstart = function (e) {\r\n    var self = this,\r\n      $target = $(e.target),\r\n      instance = self.instance,\r\n      current = instance.current,\r\n      $slide = current.$slide,\r\n      $content = current.$content,\r\n      isTouchDevice = e.type == \"touchstart\";\r\n\r\n    // Do not respond to both (touch and mouse) events\r\n    if (isTouchDevice) {\r\n      self.$container.off(\"mousedown.fb.touch\");\r\n    }\r\n\r\n    // Ignore right click\r\n    if (e.originalEvent && e.originalEvent.button == 2) {\r\n      return;\r\n    }\r\n\r\n    // Ignore taping on links, buttons, input elements\r\n    if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) {\r\n      return;\r\n    }\r\n    // Ignore clicks on the scrollbar\r\n    if (!$target.is(\"img\") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) {\r\n      return;\r\n    }\r\n\r\n    // Ignore clicks while zooming or closing\r\n    if (!current || instance.isAnimating || current.$slide.hasClass(\"fancybox-animated\")) {\r\n      e.stopPropagation();\r\n      e.preventDefault();\r\n\r\n      return;\r\n    }\r\n\r\n    self.realPoints = self.startPoints = getPointerXY(e);\r\n\r\n    if (!self.startPoints.length) {\r\n      return;\r\n    }\r\n\r\n    // Allow other scripts to catch touch event if \"touch\" is set to false\r\n    if (current.touch) {\r\n      e.stopPropagation();\r\n    }\r\n\r\n    self.startEvent = e;\r\n\r\n    self.canTap = true;\r\n    self.$target = $target;\r\n    self.$content = $content;\r\n    self.opts = current.opts.touch;\r\n\r\n    self.isPanning = false;\r\n    self.isSwiping = false;\r\n    self.isZooming = false;\r\n    self.isScrolling = false;\r\n    self.canPan = instance.canPan();\r\n\r\n    self.startTime = new Date().getTime();\r\n    self.distanceX = self.distanceY = self.distance = 0;\r\n\r\n    self.canvasWidth = Math.round($slide[0].clientWidth);\r\n    self.canvasHeight = Math.round($slide[0].clientHeight);\r\n\r\n    self.contentLastPos = null;\r\n    self.contentStartPos = $.fancybox.getTranslate(self.$content) || {\r\n      top: 0,\r\n      left: 0\r\n    };\r\n    self.sliderStartPos = $.fancybox.getTranslate($slide);\r\n\r\n    // Since position will be absolute, but we need to make it relative to the stage\r\n    self.stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n    self.sliderStartPos.top -= self.stagePos.top;\r\n    self.sliderStartPos.left -= self.stagePos.left;\r\n\r\n    self.contentStartPos.top -= self.stagePos.top;\r\n    self.contentStartPos.left -= self.stagePos.left;\r\n\r\n    $(document)\r\n      .off(\".fb.touch\")\r\n      .on(isTouchDevice ? \"touchend.fb.touch touchcancel.fb.touch\" : \"mouseup.fb.touch mouseleave.fb.touch\", $.proxy(self, \"ontouchend\"))\r\n      .on(isTouchDevice ? \"touchmove.fb.touch\" : \"mousemove.fb.touch\", $.proxy(self, \"ontouchmove\"));\r\n\r\n    if ($.fancybox.isMobile) {\r\n      document.addEventListener(\"scroll\", self.onscroll, true);\r\n    }\r\n\r\n    // Skip if clicked outside the sliding area\r\n    if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) {\r\n      if ($target.is(\".fancybox-image\")) {\r\n        e.preventDefault();\r\n      }\r\n\r\n      if (!($.fancybox.isMobile && $target.parents(\".fancybox-caption\").length)) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    self.isScrollable = isScrollable($target) || isScrollable($target.parent());\r\n\r\n    // Check if element is scrollable and try to prevent default behavior (scrolling)\r\n    if (!($.fancybox.isMobile && self.isScrollable)) {\r\n      e.preventDefault();\r\n    }\r\n\r\n    // One finger or mouse click - swipe or pan an image\r\n    if (self.startPoints.length === 1 || current.hasError) {\r\n      if (self.canPan) {\r\n        $.fancybox.stop(self.$content);\r\n\r\n        self.isPanning = true;\r\n      } else {\r\n        self.isSwiping = true;\r\n      }\r\n\r\n      self.$container.addClass(\"fancybox-is-grabbing\");\r\n    }\r\n\r\n    // Two fingers - zoom image\r\n    if (self.startPoints.length === 2 && current.type === \"image\" && (current.isLoaded || current.$ghost)) {\r\n      self.canTap = false;\r\n      self.isSwiping = false;\r\n      self.isPanning = false;\r\n\r\n      self.isZooming = true;\r\n\r\n      $.fancybox.stop(self.$content);\r\n\r\n      self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft();\r\n      self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop();\r\n\r\n      self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width;\r\n      self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height;\r\n\r\n      self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]);\r\n    }\r\n  };\r\n\r\n  Guestures.prototype.onscroll = function (e) {\r\n    var self = this;\r\n\r\n    self.isScrolling = true;\r\n\r\n    document.removeEventListener(\"scroll\", self.onscroll, true);\r\n  };\r\n\r\n  Guestures.prototype.ontouchmove = function (e) {\r\n    var self = this;\r\n\r\n    // Make sure user has not released over iframe or disabled element\r\n    if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) {\r\n      self.ontouchend(e);\r\n      return;\r\n    }\r\n\r\n    if (self.isScrolling) {\r\n      self.canTap = false;\r\n      return;\r\n    }\r\n\r\n    self.newPoints = getPointerXY(e);\r\n\r\n    if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) {\r\n      return;\r\n    }\r\n\r\n    if (!(self.isSwiping && self.isSwiping === true)) {\r\n      e.preventDefault();\r\n    }\r\n\r\n    self.distanceX = distance(self.newPoints[0], self.startPoints[0], \"x\");\r\n    self.distanceY = distance(self.newPoints[0], self.startPoints[0], \"y\");\r\n\r\n    self.distance = distance(self.newPoints[0], self.startPoints[0]);\r\n\r\n    // Skip false ontouchmove events (Chrome)\r\n    if (self.distance > 0) {\r\n      if (self.isSwiping) {\r\n        self.onSwipe(e);\r\n      } else if (self.isPanning) {\r\n        self.onPan();\r\n      } else if (self.isZooming) {\r\n        self.onZoom();\r\n      }\r\n    }\r\n  };\r\n\r\n  Guestures.prototype.onSwipe = function (e) {\r\n    var self = this,\r\n      instance = self.instance,\r\n      swiping = self.isSwiping,\r\n      left = self.sliderStartPos.left || 0,\r\n      angle;\r\n\r\n    // If direction is not yet determined\r\n    if (swiping === true) {\r\n      // We need at least 10px distance to correctly calculate an angle\r\n      if (Math.abs(self.distance) > 10) {\r\n        self.canTap = false;\r\n\r\n        if (instance.group.length < 2 && self.opts.vertical) {\r\n          self.isSwiping = \"y\";\r\n        } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === \"auto\" && $(window).width() > 800)) {\r\n          self.isSwiping = \"x\";\r\n        } else {\r\n          angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI);\r\n\r\n          self.isSwiping = angle > 45 && angle < 135 ? \"y\" : \"x\";\r\n        }\r\n\r\n        if (self.isSwiping === \"y\" && $.fancybox.isMobile && self.isScrollable) {\r\n          self.isScrolling = true;\r\n\r\n          return;\r\n        }\r\n\r\n        instance.isDragging = self.isSwiping;\r\n\r\n        // Reset points to avoid jumping, because we dropped first swipes to calculate the angle\r\n        self.startPoints = self.newPoints;\r\n\r\n        $.each(instance.slides, function (index, slide) {\r\n          var slidePos, stagePos;\r\n\r\n          $.fancybox.stop(slide.$slide);\r\n\r\n          slidePos = $.fancybox.getTranslate(slide.$slide);\r\n          stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n          slide.$slide\r\n            .css({\r\n              transform: \"\",\r\n              opacity: \"\",\r\n              \"transition-duration\": \"\"\r\n            })\r\n            .removeClass(\"fancybox-animated\")\r\n            .removeClass(function (index, className) {\r\n              return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n            });\r\n\r\n          if (slide.pos === instance.current.pos) {\r\n            self.sliderStartPos.top = slidePos.top - stagePos.top;\r\n            self.sliderStartPos.left = slidePos.left - stagePos.left;\r\n          }\r\n\r\n          $.fancybox.setTranslate(slide.$slide, {\r\n            top: slidePos.top - stagePos.top,\r\n            left: slidePos.left - stagePos.left\r\n          });\r\n        });\r\n\r\n        // Stop slideshow\r\n        if (instance.SlideShow && instance.SlideShow.isActive) {\r\n          instance.SlideShow.stop();\r\n        }\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    // Sticky edges\r\n    if (swiping == \"x\") {\r\n      if (\r\n        self.distanceX > 0 &&\r\n        (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop))\r\n      ) {\r\n        left = left + Math.pow(self.distanceX, 0.8);\r\n      } else if (\r\n        self.distanceX < 0 &&\r\n        (self.instance.group.length < 2 ||\r\n          (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop))\r\n      ) {\r\n        left = left - Math.pow(-self.distanceX, 0.8);\r\n      } else {\r\n        left = left + self.distanceX;\r\n      }\r\n    }\r\n\r\n    self.sliderLastPos = {\r\n      top: swiping == \"x\" ? 0 : self.sliderStartPos.top + self.distanceY,\r\n      left: left\r\n    };\r\n\r\n    if (self.requestId) {\r\n      cancelAFrame(self.requestId);\r\n\r\n      self.requestId = null;\r\n    }\r\n\r\n    self.requestId = requestAFrame(function () {\r\n      if (self.sliderLastPos) {\r\n        $.each(self.instance.slides, function (index, slide) {\r\n          var pos = slide.pos - self.instance.currPos;\r\n\r\n          $.fancybox.setTranslate(slide.$slide, {\r\n            top: self.sliderLastPos.top,\r\n            left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter\r\n          });\r\n        });\r\n\r\n        self.$container.addClass(\"fancybox-is-sliding\");\r\n      }\r\n    });\r\n  };\r\n\r\n  Guestures.prototype.onPan = function () {\r\n    var self = this;\r\n\r\n    // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit)\r\n    if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) {\r\n      self.startPoints = self.newPoints;\r\n      return;\r\n    }\r\n\r\n    self.canTap = false;\r\n\r\n    self.contentLastPos = self.limitMovement();\r\n\r\n    if (self.requestId) {\r\n      cancelAFrame(self.requestId);\r\n    }\r\n\r\n    self.requestId = requestAFrame(function () {\r\n      $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n    });\r\n  };\r\n\r\n  // Make panning sticky to the edges\r\n  Guestures.prototype.limitMovement = function () {\r\n    var self = this;\r\n\r\n    var canvasWidth = self.canvasWidth;\r\n    var canvasHeight = self.canvasHeight;\r\n\r\n    var distanceX = self.distanceX;\r\n    var distanceY = self.distanceY;\r\n\r\n    var contentStartPos = self.contentStartPos;\r\n\r\n    var currentOffsetX = contentStartPos.left;\r\n    var currentOffsetY = contentStartPos.top;\r\n\r\n    var currentWidth = contentStartPos.width;\r\n    var currentHeight = contentStartPos.height;\r\n\r\n    var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY;\r\n\r\n    if (currentWidth > canvasWidth) {\r\n      newOffsetX = currentOffsetX + distanceX;\r\n    } else {\r\n      newOffsetX = currentOffsetX;\r\n    }\r\n\r\n    newOffsetY = currentOffsetY + distanceY;\r\n\r\n    // Slow down proportionally to traveled distance\r\n    minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5);\r\n    minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n    maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5);\r\n    maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n    //   ->\r\n    if (distanceX > 0 && newOffsetX > minTranslateX) {\r\n      newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0;\r\n    }\r\n\r\n    //    <-\r\n    if (distanceX < 0 && newOffsetX < maxTranslateX) {\r\n      newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0;\r\n    }\r\n\r\n    //   \\/\r\n    if (distanceY > 0 && newOffsetY > minTranslateY) {\r\n      newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0;\r\n    }\r\n\r\n    //   /\\\r\n    if (distanceY < 0 && newOffsetY < maxTranslateY) {\r\n      newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0;\r\n    }\r\n\r\n    return {\r\n      top: newOffsetY,\r\n      left: newOffsetX\r\n    };\r\n  };\r\n\r\n  Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) {\r\n    var self = this;\r\n\r\n    var canvasWidth = self.canvasWidth;\r\n    var canvasHeight = self.canvasHeight;\r\n\r\n    if (newWidth > canvasWidth) {\r\n      newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\r\n      newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\r\n    } else {\r\n      // Center horizontally\r\n      newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2);\r\n    }\r\n\r\n    if (newHeight > canvasHeight) {\r\n      newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\r\n      newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\r\n    } else {\r\n      // Center vertically\r\n      newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2);\r\n    }\r\n\r\n    return {\r\n      top: newOffsetY,\r\n      left: newOffsetX\r\n    };\r\n  };\r\n\r\n  Guestures.prototype.onZoom = function () {\r\n    var self = this;\r\n\r\n    // Calculate current distance between points to get pinch ratio and new width and height\r\n    var contentStartPos = self.contentStartPos;\r\n\r\n    var currentWidth = contentStartPos.width;\r\n    var currentHeight = contentStartPos.height;\r\n\r\n    var currentOffsetX = contentStartPos.left;\r\n    var currentOffsetY = contentStartPos.top;\r\n\r\n    var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]);\r\n\r\n    var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\r\n\r\n    var newWidth = Math.floor(currentWidth * pinchRatio);\r\n    var newHeight = Math.floor(currentHeight * pinchRatio);\r\n\r\n    // This is the translation due to pinch-zooming\r\n    var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\r\n    var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\r\n\r\n    // Point between the two touches\r\n    var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft();\r\n    var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop();\r\n\r\n    // And this is the translation due to translation of the centerpoint\r\n    // between the two fingers\r\n    var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\r\n    var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\r\n\r\n    // The new offset is the old/current one plus the total translation\r\n    var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX);\r\n    var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY);\r\n\r\n    var newPos = {\r\n      top: newOffsetY,\r\n      left: newOffsetX,\r\n      scaleX: pinchRatio,\r\n      scaleY: pinchRatio\r\n    };\r\n\r\n    self.canTap = false;\r\n\r\n    self.newWidth = newWidth;\r\n    self.newHeight = newHeight;\r\n\r\n    self.contentLastPos = newPos;\r\n\r\n    if (self.requestId) {\r\n      cancelAFrame(self.requestId);\r\n    }\r\n\r\n    self.requestId = requestAFrame(function () {\r\n      $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n    });\r\n  };\r\n\r\n  Guestures.prototype.ontouchend = function (e) {\r\n    var self = this;\r\n\r\n    var swiping = self.isSwiping;\r\n    var panning = self.isPanning;\r\n    var zooming = self.isZooming;\r\n    var scrolling = self.isScrolling;\r\n\r\n    self.endPoints = getPointerXY(e);\r\n    self.dMs = Math.max(new Date().getTime() - self.startTime, 1);\r\n\r\n    self.$container.removeClass(\"fancybox-is-grabbing\");\r\n\r\n    $(document).off(\".fb.touch\");\r\n\r\n    document.removeEventListener(\"scroll\", self.onscroll, true);\r\n\r\n    if (self.requestId) {\r\n      cancelAFrame(self.requestId);\r\n\r\n      self.requestId = null;\r\n    }\r\n\r\n    self.isSwiping = false;\r\n    self.isPanning = false;\r\n    self.isZooming = false;\r\n    self.isScrolling = false;\r\n\r\n    self.instance.isDragging = false;\r\n\r\n    if (self.canTap) {\r\n      return self.onTap(e);\r\n    }\r\n\r\n    self.speed = 100;\r\n\r\n    // Speed in px/ms\r\n    self.velocityX = (self.distanceX / self.dMs) * 0.5;\r\n    self.velocityY = (self.distanceY / self.dMs) * 0.5;\r\n\r\n    if (panning) {\r\n      self.endPanning();\r\n    } else if (zooming) {\r\n      self.endZooming();\r\n    } else {\r\n      self.endSwiping(swiping, scrolling);\r\n    }\r\n\r\n    return;\r\n  };\r\n\r\n  Guestures.prototype.endSwiping = function (swiping, scrolling) {\r\n    var self = this,\r\n      ret = false,\r\n      len = self.instance.group.length,\r\n      distanceX = Math.abs(self.distanceX),\r\n      canAdvance = swiping == \"x\" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50),\r\n      speedX = 300;\r\n\r\n    self.sliderLastPos = null;\r\n\r\n    // Close if swiped vertically / navigate if horizontally\r\n    if (swiping == \"y\" && !scrolling && Math.abs(self.distanceY) > 50) {\r\n      // Continue vertical movement\r\n      $.fancybox.animate(\r\n        self.instance.current.$slide, {\r\n          top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150,\r\n          opacity: 0\r\n        },\r\n        200\r\n      );\r\n      ret = self.instance.close(true, 250);\r\n    } else if (canAdvance && self.distanceX > 0) {\r\n      ret = self.instance.previous(speedX);\r\n    } else if (canAdvance && self.distanceX < 0) {\r\n      ret = self.instance.next(speedX);\r\n    }\r\n\r\n    if (ret === false && (swiping == \"x\" || swiping == \"y\")) {\r\n      self.instance.centerSlide(200);\r\n    }\r\n\r\n    self.$container.removeClass(\"fancybox-is-sliding\");\r\n  };\r\n\r\n  // Limit panning from edges\r\n  // ========================\r\n  Guestures.prototype.endPanning = function () {\r\n    var self = this,\r\n      newOffsetX,\r\n      newOffsetY,\r\n      newPos;\r\n\r\n    if (!self.contentLastPos) {\r\n      return;\r\n    }\r\n\r\n    if (self.opts.momentum === false || self.dMs > 350) {\r\n      newOffsetX = self.contentLastPos.left;\r\n      newOffsetY = self.contentLastPos.top;\r\n    } else {\r\n      // Continue movement\r\n      newOffsetX = self.contentLastPos.left + self.velocityX * 500;\r\n      newOffsetY = self.contentLastPos.top + self.velocityY * 500;\r\n    }\r\n\r\n    newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height);\r\n\r\n    newPos.width = self.contentStartPos.width;\r\n    newPos.height = self.contentStartPos.height;\r\n\r\n    $.fancybox.animate(self.$content, newPos, 366);\r\n  };\r\n\r\n  Guestures.prototype.endZooming = function () {\r\n    var self = this;\r\n\r\n    var current = self.instance.current;\r\n\r\n    var newOffsetX, newOffsetY, newPos, reset;\r\n\r\n    var newWidth = self.newWidth;\r\n    var newHeight = self.newHeight;\r\n\r\n    if (!self.contentLastPos) {\r\n      return;\r\n    }\r\n\r\n    newOffsetX = self.contentLastPos.left;\r\n    newOffsetY = self.contentLastPos.top;\r\n\r\n    reset = {\r\n      top: newOffsetY,\r\n      left: newOffsetX,\r\n      width: newWidth,\r\n      height: newHeight,\r\n      scaleX: 1,\r\n      scaleY: 1\r\n    };\r\n\r\n    // Reset scalex/scaleY values; this helps for perfomance and does not break animation\r\n    $.fancybox.setTranslate(self.$content, reset);\r\n\r\n    if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) {\r\n      self.instance.scaleToFit(150);\r\n    } else if (newWidth > current.width || newHeight > current.height) {\r\n      self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150);\r\n    } else {\r\n      newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight);\r\n\r\n      $.fancybox.animate(self.$content, newPos, 150);\r\n    }\r\n  };\r\n\r\n  Guestures.prototype.onTap = function (e) {\r\n    var self = this;\r\n    var $target = $(e.target);\r\n\r\n    var instance = self.instance;\r\n    var current = instance.current;\r\n\r\n    var endPoints = (e && getPointerXY(e)) || self.startPoints;\r\n\r\n    var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0;\r\n    var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0;\r\n\r\n    var where;\r\n\r\n    var process = function (prefix) {\r\n      var action = current.opts[prefix];\r\n\r\n      if ($.isFunction(action)) {\r\n        action = action.apply(instance, [current, e]);\r\n      }\r\n\r\n      if (!action) {\r\n        return;\r\n      }\r\n\r\n      switch (action) {\r\n        case \"close\":\r\n          instance.close(self.startEvent);\r\n\r\n          break;\r\n\r\n        case \"toggleControls\":\r\n          instance.toggleControls();\r\n\r\n          break;\r\n\r\n        case \"next\":\r\n          instance.next();\r\n\r\n          break;\r\n\r\n        case \"nextOrClose\":\r\n          if (instance.group.length > 1) {\r\n            instance.next();\r\n          } else {\r\n            instance.close(self.startEvent);\r\n          }\r\n\r\n          break;\r\n\r\n        case \"zoom\":\r\n          if (current.type == \"image\" && (current.isLoaded || current.$ghost)) {\r\n            if (instance.canPan()) {\r\n              instance.scaleToFit();\r\n            } else if (instance.isScaledDown()) {\r\n              instance.scaleToActual(tapX, tapY);\r\n            } else if (instance.group.length < 2) {\r\n              instance.close(self.startEvent);\r\n            }\r\n          }\r\n\r\n          break;\r\n      }\r\n    };\r\n\r\n    // Ignore right click\r\n    if (e.originalEvent && e.originalEvent.button == 2) {\r\n      return;\r\n    }\r\n\r\n    // Skip if clicked on the scrollbar\r\n    if (!$target.is(\"img\") && tapX > $target[0].clientWidth + $target.offset().left) {\r\n      return;\r\n    }\r\n\r\n    // Check where is clicked\r\n    if ($target.is(\".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container\")) {\r\n      where = \"Outside\";\r\n    } else if ($target.is(\".fancybox-slide\")) {\r\n      where = \"Slide\";\r\n    } else if (\r\n      instance.current.$content &&\r\n      instance.current.$content\r\n      .find($target)\r\n      .addBack()\r\n      .filter($target).length\r\n    ) {\r\n      where = \"Content\";\r\n    } else {\r\n      return;\r\n    }\r\n\r\n    // Check if this is a double tap\r\n    if (self.tapped) {\r\n      // Stop previously created single tap\r\n      clearTimeout(self.tapped);\r\n      self.tapped = null;\r\n\r\n      // Skip if distance between taps is too big\r\n      if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) {\r\n        return this;\r\n      }\r\n\r\n      // OK, now we assume that this is a double-tap\r\n      process(\"dblclick\" + where);\r\n    } else {\r\n      // Single tap will be processed if user has not clicked second time within 300ms\r\n      // or there is no need to wait for double-tap\r\n      self.tapX = tapX;\r\n      self.tapY = tapY;\r\n\r\n      if (current.opts[\"dblclick\" + where] && current.opts[\"dblclick\" + where] !== current.opts[\"click\" + where]) {\r\n        self.tapped = setTimeout(function () {\r\n          self.tapped = null;\r\n\r\n          if (!instance.isAnimating) {\r\n            process(\"click\" + where);\r\n          }\r\n        }, 500);\r\n      } else {\r\n        process(\"click\" + where);\r\n      }\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  $(document)\r\n    .on(\"onActivate.fb\", function (e, instance) {\r\n      if (instance && !instance.Guestures) {\r\n        instance.Guestures = new Guestures(instance);\r\n      }\r\n    })\r\n    .on(\"beforeClose.fb\", function (e, instance) {\r\n      if (instance && instance.Guestures) {\r\n        instance.Guestures.destroy();\r\n      }\r\n    });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// SlideShow\r\n// Enables slideshow functionality\r\n//\r\n// Example of usage:\r\n// $.fancybox.getInstance().SlideShow.start()\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n  \"use strict\";\r\n\r\n  $.extend(true, $.fancybox.defaults, {\r\n    btnTpl: {\r\n      slideShow: '<button data-fancybox-play class=\"fancybox-button fancybox-button--play\" title=\"{{PLAY_START}}\">' +\r\n        '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M6.5 5.4v13.2l11-6.6z\"/></svg>' +\r\n        '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M8.33 5.75h2.2v12.5h-2.2V5.75zm5.15 0h2.2v12.5h-2.2V5.75z\"/></svg>' +\r\n        \"</button>\"\r\n    },\r\n    slideShow: {\r\n      autoStart: false,\r\n      speed: 3000,\r\n      progress: true\r\n    }\r\n  });\r\n\r\n  var SlideShow = function (instance) {\r\n    this.instance = instance;\r\n    this.init();\r\n  };\r\n\r\n  $.extend(SlideShow.prototype, {\r\n    timer: null,\r\n    isActive: false,\r\n    $button: null,\r\n\r\n    init: function () {\r\n      var self = this,\r\n        instance = self.instance,\r\n        opts = instance.group[instance.currIndex].opts.slideShow;\r\n\r\n      self.$button = instance.$refs.toolbar.find(\"[data-fancybox-play]\").on(\"click\", function () {\r\n        self.toggle();\r\n      });\r\n\r\n      if (instance.group.length < 2 || !opts) {\r\n        self.$button.hide();\r\n      } else if (opts.progress) {\r\n        self.$progress = $('<div class=\"fancybox-progress\"></div>').appendTo(instance.$refs.inner);\r\n      }\r\n    },\r\n\r\n    set: function (force) {\r\n      var self = this,\r\n        instance = self.instance,\r\n        current = instance.current;\r\n\r\n      // Check if reached last element\r\n      if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) {\r\n        if (self.isActive && current.contentType !== \"video\") {\r\n          if (self.$progress) {\r\n            $.fancybox.animate(self.$progress.show(), {\r\n              scaleX: 1\r\n            }, current.opts.slideShow.speed);\r\n          }\r\n\r\n          self.timer = setTimeout(function () {\r\n            if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) {\r\n              instance.jumpTo(0);\r\n            } else {\r\n              instance.next();\r\n            }\r\n          }, current.opts.slideShow.speed);\r\n        }\r\n      } else {\r\n        self.stop();\r\n        instance.idleSecondsCounter = 0;\r\n        instance.showControls();\r\n      }\r\n    },\r\n\r\n    clear: function () {\r\n      var self = this;\r\n\r\n      clearTimeout(self.timer);\r\n\r\n      self.timer = null;\r\n\r\n      if (self.$progress) {\r\n        self.$progress.removeAttr(\"style\").hide();\r\n      }\r\n    },\r\n\r\n    start: function () {\r\n      var self = this,\r\n        current = self.instance.current;\r\n\r\n      if (current) {\r\n        self.$button\r\n          .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP)\r\n          .removeClass(\"fancybox-button--play\")\r\n          .addClass(\"fancybox-button--pause\");\r\n\r\n        self.isActive = true;\r\n\r\n        if (current.isComplete) {\r\n          self.set(true);\r\n        }\r\n\r\n        self.instance.trigger(\"onSlideShowChange\", true);\r\n      }\r\n    },\r\n\r\n    stop: function () {\r\n      var self = this,\r\n        current = self.instance.current;\r\n\r\n      self.clear();\r\n\r\n      self.$button\r\n        .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START)\r\n        .removeClass(\"fancybox-button--pause\")\r\n        .addClass(\"fancybox-button--play\");\r\n\r\n      self.isActive = false;\r\n\r\n      self.instance.trigger(\"onSlideShowChange\", false);\r\n\r\n      if (self.$progress) {\r\n        self.$progress.removeAttr(\"style\").hide();\r\n      }\r\n    },\r\n\r\n    toggle: function () {\r\n      var self = this;\r\n\r\n      if (self.isActive) {\r\n        self.stop();\r\n      } else {\r\n        self.start();\r\n      }\r\n    }\r\n  });\r\n\r\n  $(document).on({\r\n    \"onInit.fb\": function (e, instance) {\r\n      if (instance && !instance.SlideShow) {\r\n        instance.SlideShow = new SlideShow(instance);\r\n      }\r\n    },\r\n\r\n    \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n      var SlideShow = instance && instance.SlideShow;\r\n\r\n      if (firstRun) {\r\n        if (SlideShow && current.opts.slideShow.autoStart) {\r\n          SlideShow.start();\r\n        }\r\n      } else if (SlideShow && SlideShow.isActive) {\r\n        SlideShow.clear();\r\n      }\r\n    },\r\n\r\n    \"afterShow.fb\": function (e, instance, current) {\r\n      var SlideShow = instance && instance.SlideShow;\r\n\r\n      if (SlideShow && SlideShow.isActive) {\r\n        SlideShow.set();\r\n      }\r\n    },\r\n\r\n    \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n      var SlideShow = instance && instance.SlideShow;\r\n\r\n      // \"P\" or Spacebar\r\n      if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is(\"button,a,input\")) {\r\n        keypress.preventDefault();\r\n\r\n        SlideShow.toggle();\r\n      }\r\n    },\r\n\r\n    \"beforeClose.fb onDeactivate.fb\": function (e, instance) {\r\n      var SlideShow = instance && instance.SlideShow;\r\n\r\n      if (SlideShow) {\r\n        SlideShow.stop();\r\n      }\r\n    }\r\n  });\r\n\r\n  // Page Visibility API to pause slideshow when window is not active\r\n  $(document).on(\"visibilitychange\", function () {\r\n    var instance = $.fancybox.getInstance(),\r\n      SlideShow = instance && instance.SlideShow;\r\n\r\n    if (SlideShow && SlideShow.isActive) {\r\n      if (document.hidden) {\r\n        SlideShow.clear();\r\n      } else {\r\n        SlideShow.set();\r\n      }\r\n    }\r\n  });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// FullScreen\r\n// Adds fullscreen functionality\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n  \"use strict\";\r\n\r\n  // Collection of methods supported by user browser\r\n  var fn = (function () {\r\n    var fnMap = [\r\n      [\"requestFullscreen\", \"exitFullscreen\", \"fullscreenElement\", \"fullscreenEnabled\", \"fullscreenchange\", \"fullscreenerror\"],\r\n      // new WebKit\r\n      [\r\n        \"webkitRequestFullscreen\",\r\n        \"webkitExitFullscreen\",\r\n        \"webkitFullscreenElement\",\r\n        \"webkitFullscreenEnabled\",\r\n        \"webkitfullscreenchange\",\r\n        \"webkitfullscreenerror\"\r\n      ],\r\n      // old WebKit (Safari 5.1)\r\n      [\r\n        \"webkitRequestFullScreen\",\r\n        \"webkitCancelFullScreen\",\r\n        \"webkitCurrentFullScreenElement\",\r\n        \"webkitCancelFullScreen\",\r\n        \"webkitfullscreenchange\",\r\n        \"webkitfullscreenerror\"\r\n      ],\r\n      [\r\n        \"mozRequestFullScreen\",\r\n        \"mozCancelFullScreen\",\r\n        \"mozFullScreenElement\",\r\n        \"mozFullScreenEnabled\",\r\n        \"mozfullscreenchange\",\r\n        \"mozfullscreenerror\"\r\n      ],\r\n      [\"msRequestFullscreen\", \"msExitFullscreen\", \"msFullscreenElement\", \"msFullscreenEnabled\", \"MSFullscreenChange\", \"MSFullscreenError\"]\r\n    ];\r\n\r\n    var ret = {};\r\n\r\n    for (var i = 0; i < fnMap.length; i++) {\r\n      var val = fnMap[i];\r\n\r\n      if (val && val[1] in document) {\r\n        for (var j = 0; j < val.length; j++) {\r\n          ret[fnMap[0][j]] = val[j];\r\n        }\r\n\r\n        return ret;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  })();\r\n\r\n  if (fn) {\r\n    var FullScreen = {\r\n      request: function (elem) {\r\n        elem = elem || document.documentElement;\r\n\r\n        elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT);\r\n      },\r\n      exit: function () {\r\n        document[fn.exitFullscreen]();\r\n      },\r\n      toggle: function (elem) {\r\n        elem = elem || document.documentElement;\r\n\r\n        if (this.isFullscreen()) {\r\n          this.exit();\r\n        } else {\r\n          this.request(elem);\r\n        }\r\n      },\r\n      isFullscreen: function () {\r\n        return Boolean(document[fn.fullscreenElement]);\r\n      },\r\n      enabled: function () {\r\n        return Boolean(document[fn.fullscreenEnabled]);\r\n      }\r\n    };\r\n\r\n    $.extend(true, $.fancybox.defaults, {\r\n      btnTpl: {\r\n        fullScreen: '<button data-fancybox-fullscreen class=\"fancybox-button fancybox-button--fsenter\" title=\"{{FULL_SCREEN}}\">' +\r\n          '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"/></svg>' +\r\n          '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z\"/></svg>' +\r\n          \"</button>\"\r\n      },\r\n      fullScreen: {\r\n        autoStart: false\r\n      }\r\n    });\r\n\r\n    $(document).on(fn.fullscreenchange, function () {\r\n      var isFullscreen = FullScreen.isFullscreen(),\r\n        instance = $.fancybox.getInstance();\r\n\r\n      if (instance) {\r\n        // If image is zooming, then force to stop and reposition properly\r\n        if (instance.current && instance.current.type === \"image\" && instance.isAnimating) {\r\n          instance.isAnimating = false;\r\n\r\n          instance.update(true, true, 0);\r\n\r\n          if (!instance.isComplete) {\r\n            instance.complete();\r\n          }\r\n        }\r\n\r\n        instance.trigger(\"onFullscreenChange\", isFullscreen);\r\n\r\n        instance.$refs.container.toggleClass(\"fancybox-is-fullscreen\", isFullscreen);\r\n\r\n        instance.$refs.toolbar\r\n          .find(\"[data-fancybox-fullscreen]\")\r\n          .toggleClass(\"fancybox-button--fsenter\", !isFullscreen)\r\n          .toggleClass(\"fancybox-button--fsexit\", isFullscreen);\r\n      }\r\n    });\r\n  }\r\n\r\n  $(document).on({\r\n    \"onInit.fb\": function (e, instance) {\r\n      var $container;\r\n\r\n      if (!fn) {\r\n        instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").remove();\r\n\r\n        return;\r\n      }\r\n\r\n      if (instance && instance.group[instance.currIndex].opts.fullScreen) {\r\n        $container = instance.$refs.container;\r\n\r\n        $container.on(\"click.fb-fullscreen\", \"[data-fancybox-fullscreen]\", function (e) {\r\n          e.stopPropagation();\r\n          e.preventDefault();\r\n\r\n          FullScreen.toggle();\r\n        });\r\n\r\n        if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) {\r\n          FullScreen.request();\r\n        }\r\n\r\n        // Expose API\r\n        instance.FullScreen = FullScreen;\r\n      } else if (instance) {\r\n        instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").hide();\r\n      }\r\n    },\r\n\r\n    \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n      // \"F\"\r\n      if (instance && instance.FullScreen && keycode === 70) {\r\n        keypress.preventDefault();\r\n\r\n        instance.FullScreen.toggle();\r\n      }\r\n    },\r\n\r\n    \"beforeClose.fb\": function (e, instance) {\r\n      if (instance && instance.FullScreen && instance.$refs.container.hasClass(\"fancybox-is-fullscreen\")) {\r\n        FullScreen.exit();\r\n      }\r\n    }\r\n  });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Thumbs\r\n// Displays thumbnails in a grid\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n  \"use strict\";\r\n\r\n  var CLASS = \"fancybox-thumbs\",\r\n    CLASS_ACTIVE = CLASS + \"-active\";\r\n\r\n  // Make sure there are default values\r\n  $.fancybox.defaults = $.extend(\r\n    true, {\r\n      btnTpl: {\r\n        thumbs: '<button data-fancybox-thumbs class=\"fancybox-button fancybox-button--thumbs\" title=\"{{THUMBS}}\">' +\r\n          '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14.59 14.59h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76H5.65V5.65z\"/></svg>' +\r\n          \"</button>\"\r\n      },\r\n      thumbs: {\r\n        autoStart: false, // Display thumbnails on opening\r\n        hideOnClose: true, // Hide thumbnail grid when closing animation starts\r\n        parentEl: \".fancybox-container\", // Container is injected into this element\r\n        axis: \"y\" // Vertical (y) or horizontal (x) scrolling\r\n      }\r\n    },\r\n    $.fancybox.defaults\r\n  );\r\n\r\n  var FancyThumbs = function (instance) {\r\n    this.init(instance);\r\n  };\r\n\r\n  $.extend(FancyThumbs.prototype, {\r\n    $button: null,\r\n    $grid: null,\r\n    $list: null,\r\n    isVisible: false,\r\n    isActive: false,\r\n\r\n    init: function (instance) {\r\n      var self = this,\r\n        group = instance.group,\r\n        enabled = 0;\r\n\r\n      self.instance = instance;\r\n      self.opts = group[instance.currIndex].opts.thumbs;\r\n\r\n      instance.Thumbs = self;\r\n\r\n      self.$button = instance.$refs.toolbar.find(\"[data-fancybox-thumbs]\");\r\n\r\n      // Enable thumbs if at least two group items have thumbnails\r\n      for (var i = 0, len = group.length; i < len; i++) {\r\n        if (group[i].thumb) {\r\n          enabled++;\r\n        }\r\n\r\n        if (enabled > 1) {\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (enabled > 1 && !!self.opts) {\r\n        self.$button.removeAttr(\"style\").on(\"click\", function () {\r\n          self.toggle();\r\n        });\r\n\r\n        self.isActive = true;\r\n      } else {\r\n        self.$button.hide();\r\n      }\r\n    },\r\n\r\n    create: function () {\r\n      var self = this,\r\n        instance = self.instance,\r\n        parentEl = self.opts.parentEl,\r\n        list = [],\r\n        src;\r\n\r\n      if (!self.$grid) {\r\n        // Create main element\r\n        self.$grid = $('<div class=\"' + CLASS + \" \" + CLASS + \"-\" + self.opts.axis + '\"></div>').appendTo(\r\n          instance.$refs.container\r\n          .find(parentEl)\r\n          .addBack()\r\n          .filter(parentEl)\r\n        );\r\n\r\n        // Add \"click\" event that performs gallery navigation\r\n        self.$grid.on(\"click\", \"a\", function () {\r\n          instance.jumpTo($(this).attr(\"data-index\"));\r\n        });\r\n      }\r\n\r\n      // Build the list\r\n      if (!self.$list) {\r\n        self.$list = $('<div class=\"' + CLASS + '__list\">').appendTo(self.$grid);\r\n      }\r\n\r\n      $.each(instance.group, function (i, item) {\r\n        src = item.thumb;\r\n\r\n        if (!src && item.type === \"image\") {\r\n          src = item.src;\r\n        }\r\n\r\n        list.push(\r\n          '<a href=\"javascript:;\" tabindex=\"0\" data-index=\"' +\r\n          i +\r\n          '\"' +\r\n          (src && src.length ? ' style=\"background-image:url(' + src + ')\"' : 'class=\"fancybox-thumbs-missing\"') +\r\n          \"></a>\"\r\n        );\r\n      });\r\n\r\n      self.$list[0].innerHTML = list.join(\"\");\r\n\r\n      if (self.opts.axis === \"x\") {\r\n        // Set fixed width for list element to enable horizontal scrolling\r\n        self.$list.width(\r\n          parseInt(self.$grid.css(\"padding-right\"), 10) +\r\n          instance.group.length *\r\n          self.$list\r\n          .children()\r\n          .eq(0)\r\n          .outerWidth(true)\r\n        );\r\n      }\r\n    },\r\n\r\n    focus: function (duration) {\r\n      var self = this,\r\n        $list = self.$list,\r\n        $grid = self.$grid,\r\n        thumb,\r\n        thumbPos;\r\n\r\n      if (!self.instance.current) {\r\n        return;\r\n      }\r\n\r\n      thumb = $list\r\n        .children()\r\n        .removeClass(CLASS_ACTIVE)\r\n        .filter('[data-index=\"' + self.instance.current.index + '\"]')\r\n        .addClass(CLASS_ACTIVE);\r\n\r\n      thumbPos = thumb.position();\r\n\r\n      // Check if need to scroll to make current thumb visible\r\n      if (self.opts.axis === \"y\" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) {\r\n        $list.stop().animate({\r\n            scrollTop: $list.scrollTop() + thumbPos.top\r\n          },\r\n          duration\r\n        );\r\n      } else if (\r\n        self.opts.axis === \"x\" &&\r\n        (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth()))\r\n      ) {\r\n        $list\r\n          .parent()\r\n          .stop()\r\n          .animate({\r\n              scrollLeft: thumbPos.left\r\n            },\r\n            duration\r\n          );\r\n      }\r\n    },\r\n\r\n    update: function () {\r\n      var that = this;\r\n      that.instance.$refs.container.toggleClass(\"fancybox-show-thumbs\", this.isVisible);\r\n\r\n      if (that.isVisible) {\r\n        if (!that.$grid) {\r\n          that.create();\r\n        }\r\n\r\n        that.instance.trigger(\"onThumbsShow\");\r\n\r\n        that.focus(0);\r\n      } else if (that.$grid) {\r\n        that.instance.trigger(\"onThumbsHide\");\r\n      }\r\n\r\n      // Update content position\r\n      that.instance.update();\r\n    },\r\n\r\n    hide: function () {\r\n      this.isVisible = false;\r\n      this.update();\r\n    },\r\n\r\n    show: function () {\r\n      this.isVisible = true;\r\n      this.update();\r\n    },\r\n\r\n    toggle: function () {\r\n      this.isVisible = !this.isVisible;\r\n      this.update();\r\n    }\r\n  });\r\n\r\n  $(document).on({\r\n    \"onInit.fb\": function (e, instance) {\r\n      var Thumbs;\r\n\r\n      if (instance && !instance.Thumbs) {\r\n        Thumbs = new FancyThumbs(instance);\r\n\r\n        if (Thumbs.isActive && Thumbs.opts.autoStart === true) {\r\n          Thumbs.show();\r\n        }\r\n      }\r\n    },\r\n\r\n    \"beforeShow.fb\": function (e, instance, item, firstRun) {\r\n      var Thumbs = instance && instance.Thumbs;\r\n\r\n      if (Thumbs && Thumbs.isVisible) {\r\n        Thumbs.focus(firstRun ? 0 : 250);\r\n      }\r\n    },\r\n\r\n    \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n      var Thumbs = instance && instance.Thumbs;\r\n\r\n      // \"G\"\r\n      if (Thumbs && Thumbs.isActive && keycode === 71) {\r\n        keypress.preventDefault();\r\n\r\n        Thumbs.toggle();\r\n      }\r\n    },\r\n\r\n    \"beforeClose.fb\": function (e, instance) {\r\n      var Thumbs = instance && instance.Thumbs;\r\n\r\n      if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) {\r\n        Thumbs.$grid.hide();\r\n      }\r\n    }\r\n  });\r\n})(document, jQuery);\n//// ==========================================================================\r\n//\r\n// Share\r\n// Displays simple form for sharing current url\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n  \"use strict\";\r\n\r\n  $.extend(true, $.fancybox.defaults, {\r\n    btnTpl: {\r\n      share: '<button data-fancybox-share class=\"fancybox-button fancybox-button--share\" title=\"{{SHARE}}\">' +\r\n        '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M2.55 19c1.4-8.4 9.1-9.8 11.9-9.8V5l7 7-7 6.3v-3.5c-2.8 0-10.5 2.1-11.9 4.2z\"/></svg>' +\r\n        \"</button>\"\r\n    },\r\n    share: {\r\n      url: function (instance, item) {\r\n        return (\r\n          (!instance.currentHash && !(item.type === \"inline\" || item.type === \"html\") ? item.origSrc || item.src : false) || window.location\r\n        );\r\n      },\r\n      tpl: '<div class=\"fancybox-share\">' +\r\n        \"<h1>{{SHARE}}</h1>\" +\r\n        \"<p>\" +\r\n        '<a class=\"fancybox-share__button fancybox-share__button--fb\" href=\"https://www.facebook.com/sharer/sharer.php?u={{url}}\">' +\r\n        '<svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m287 456v-299c0-21 6-35 35-35h38v-63c-7-1-29-3-55-3-54 0-91 33-91 94v306m143-254h-205v72h196\" /></svg>' +\r\n        \"<span>Facebook</span>\" +\r\n        \"</a>\" +\r\n        '<a class=\"fancybox-share__button fancybox-share__button--tw\" href=\"https://twitter.com/intent/tweet?url={{url}}&text={{descr}}\">' +\r\n        '<svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m456 133c-14 7-31 11-47 13 17-10 30-27 37-46-15 10-34 16-52 20-61-62-157-7-141 75-68-3-129-35-169-85-22 37-11 86 26 109-13 0-26-4-37-9 0 39 28 72 65 80-12 3-25 4-37 2 10 33 41 57 77 57-42 30-77 38-122 34 170 111 378-32 359-208 16-11 30-25 41-42z\" /></svg>' +\r\n        \"<span>Twitter</span>\" +\r\n        \"</a>\" +\r\n        '<a class=\"fancybox-share__button fancybox-share__button--pt\" href=\"https://www.pinterest.com/pin/create/button/?url={{url}}&description={{descr}}&media={{media}}\">' +\r\n        '<svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m265 56c-109 0-164 78-164 144 0 39 15 74 47 87 5 2 10 0 12-5l4-19c2-6 1-8-3-13-9-11-15-25-15-45 0-58 43-110 113-110 62 0 96 38 96 88 0 67-30 122-73 122-24 0-42-19-36-44 6-29 20-60 20-81 0-19-10-35-31-35-25 0-44 26-44 60 0 21 7 36 7 36l-30 125c-8 37-1 83 0 87 0 3 4 4 5 2 2-3 32-39 42-75l16-64c8 16 31 29 56 29 74 0 124-67 124-157 0-69-58-132-146-132z\" fill=\"#fff\"/></svg>' +\r\n        \"<span>Pinterest</span>\" +\r\n        \"</a>\" +\r\n        \"</p>\" +\r\n        '<p><input class=\"fancybox-share__input\" type=\"text\" value=\"{{url_raw}}\" onclick=\"select()\" /></p>' +\r\n        \"</div>\"\r\n    }\r\n  });\r\n\r\n  function escapeHtml(string) {\r\n    var entityMap = {\r\n      \"&\": \"&amp;\",\r\n      \"<\": \"&lt;\",\r\n      \">\": \"&gt;\",\r\n      '\"': \"&quot;\",\r\n      \"'\": \"&#39;\",\r\n      \"/\": \"&#x2F;\",\r\n      \"`\": \"&#x60;\",\r\n      \"=\": \"&#x3D;\"\r\n    };\r\n\r\n    return String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n      return entityMap[s];\r\n    });\r\n  }\r\n\r\n  $(document).on(\"click\", \"[data-fancybox-share]\", function () {\r\n    var instance = $.fancybox.getInstance(),\r\n      current = instance.current || null,\r\n      url,\r\n      tpl;\r\n\r\n    if (!current) {\r\n      return;\r\n    }\r\n\r\n    if ($.type(current.opts.share.url) === \"function\") {\r\n      url = current.opts.share.url.apply(current, [instance, current]);\r\n    }\r\n\r\n    tpl = current.opts.share.tpl\r\n      .replace(/\\{\\{media\\}\\}/g, current.type === \"image\" ? encodeURIComponent(current.src) : \"\")\r\n      .replace(/\\{\\{url\\}\\}/g, encodeURIComponent(url))\r\n      .replace(/\\{\\{url_raw\\}\\}/g, escapeHtml(url))\r\n      .replace(/\\{\\{descr\\}\\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : \"\");\r\n\r\n    $.fancybox.open({\r\n      src: instance.translate(instance, tpl),\r\n      type: \"html\",\r\n      opts: {\r\n        touch: false,\r\n        animationEffect: false,\r\n        afterLoad: function (shareInstance, shareCurrent) {\r\n          // Close self if parent instance is closing\r\n          instance.$refs.container.one(\"beforeClose.fb\", function () {\r\n            shareInstance.close(null, 0);\r\n          });\r\n\r\n          // Opening links in a popup window\r\n          shareCurrent.$content.find(\".fancybox-share__button\").click(function () {\r\n            window.open(this.href, \"Share\", \"width=550, height=450\");\r\n            return false;\r\n          });\r\n        },\r\n        mobile: {\r\n          autoFocus: false\r\n        }\r\n      }\r\n    });\r\n  });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n  \"use strict\";\r\n\r\n  // Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n  if (!$.escapeSelector) {\r\n    $.escapeSelector = function (sel) {\r\n      var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n      var fcssescape = function (ch, asCodePoint) {\r\n        if (asCodePoint) {\r\n          // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n          if (ch === \"\\0\") {\r\n            return \"\\uFFFD\";\r\n          }\r\n\r\n          // Control characters and (dependent upon position) numbers get escaped as code points\r\n          return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\r\n        }\r\n\r\n        // Other potentially-special ASCII characters get backslash-escaped\r\n        return \"\\\\\" + ch;\r\n      };\r\n\r\n      return (sel + \"\").replace(rcssescape, fcssescape);\r\n    };\r\n  }\r\n\r\n  // Get info about gallery name and current index from url\r\n  function parseUrl() {\r\n    var hash = window.location.hash.substr(1),\r\n      rez = hash.split(\"-\"),\r\n      index = rez.length > 1 && /^\\+?\\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,\r\n      gallery = rez.join(\"-\");\r\n\r\n    return {\r\n      hash: hash,\r\n      /* Index is starting from 1 */\r\n      index: index < 1 ? 1 : index,\r\n      gallery: gallery\r\n    };\r\n  }\r\n\r\n  // Trigger click evnt on links to open new fancyBox instance\r\n  function triggerFromUrl(url) {\r\n    if (url.gallery !== \"\") {\r\n      // If we can find element matching 'data-fancybox' atribute,\r\n      // then triggering click event should start fancyBox\r\n      $(\"[data-fancybox='\" + $.escapeSelector(url.gallery) + \"']\")\r\n        .eq(url.index - 1)\r\n        .focus()\r\n        .trigger(\"click.fb-start\");\r\n    }\r\n  }\r\n\r\n  // Get gallery name from current instance\r\n  function getGalleryID(instance) {\r\n    var opts, ret;\r\n\r\n    if (!instance) {\r\n      return false;\r\n    }\r\n\r\n    opts = instance.current ? instance.current.opts : instance.opts;\r\n    ret = opts.hash || (opts.$orig ? opts.$orig.data(\"fancybox\") || opts.$orig.data(\"fancybox-trigger\") : \"\");\r\n\r\n    return ret === \"\" ? false : ret;\r\n  }\r\n\r\n  // Start when DOM becomes ready\r\n  $(function () {\r\n    // Check if user has disabled this module\r\n    if ($.fancybox.defaults.hash === false) {\r\n      return;\r\n    }\r\n\r\n    // Update hash when opening/closing fancyBox\r\n    $(document).on({\r\n      \"onInit.fb\": function (e, instance) {\r\n        var url, gallery;\r\n\r\n        if (instance.group[instance.currIndex].opts.hash === false) {\r\n          return;\r\n        }\r\n\r\n        url = parseUrl();\r\n        gallery = getGalleryID(instance);\r\n\r\n        // Make sure gallery start index matches index from hash\r\n        if (gallery && url.gallery && gallery == url.gallery) {\r\n          instance.currIndex = url.index - 1;\r\n        }\r\n      },\r\n\r\n      \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n        var gallery;\r\n\r\n        if (!current || current.opts.hash === false) {\r\n          return;\r\n        }\r\n\r\n        // Check if need to update window hash\r\n        gallery = getGalleryID(instance);\r\n\r\n        if (!gallery) {\r\n          return;\r\n        }\r\n\r\n        // Variable containing last hash value set by fancyBox\r\n        // It will be used to determine if fancyBox needs to close after hash change is detected\r\n        instance.currentHash = gallery + (instance.group.length > 1 ? \"-\" + (current.index + 1) : \"\");\r\n\r\n        // If current hash is the same (this instance most likely is opened by hashchange), then do nothing\r\n        if (window.location.hash === \"#\" + instance.currentHash) {\r\n          return;\r\n        }\r\n\r\n        if (firstRun && !instance.origHash) {\r\n          instance.origHash = window.location.hash;\r\n        }\r\n\r\n        if (instance.hashTimer) {\r\n          clearTimeout(instance.hashTimer);\r\n        }\r\n\r\n        // Update hash\r\n        instance.hashTimer = setTimeout(function () {\r\n          if (\"replaceState\" in window.history) {\r\n            window.history[firstRun ? \"pushState\" : \"replaceState\"]({},\r\n              document.title,\r\n              window.location.pathname + window.location.search + \"#\" + instance.currentHash\r\n            );\r\n\r\n            if (firstRun) {\r\n              instance.hasCreatedHistory = true;\r\n            }\r\n          } else {\r\n            window.location.hash = instance.currentHash;\r\n          }\r\n\r\n          instance.hashTimer = null;\r\n        }, 300);\r\n      },\r\n\r\n      \"beforeClose.fb\": function (e, instance, current) {\r\n        if (!current || current.opts.hash === false) {\r\n          return;\r\n        }\r\n\r\n        clearTimeout(instance.hashTimer);\r\n\r\n        // Goto previous history entry\r\n        if (instance.currentHash && instance.hasCreatedHistory) {\r\n          window.history.back();\r\n        } else if (instance.currentHash) {\r\n          if (\"replaceState\" in window.history) {\r\n            window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || \"\"));\r\n          } else {\r\n            window.location.hash = instance.origHash;\r\n          }\r\n        }\r\n\r\n        instance.currentHash = null;\r\n      }\r\n    });\r\n\r\n    // Check if need to start/close after url has changed\r\n    $(window).on(\"hashchange.fb\", function () {\r\n      var url = parseUrl(),\r\n        fb = null;\r\n\r\n      // Find last fancyBox instance that has \"hash\"\r\n      $.each(\r\n        $(\".fancybox-container\")\r\n        .get()\r\n        .reverse(),\r\n        function (index, value) {\r\n          var tmp = $(value).data(\"FancyBox\");\r\n\r\n          if (tmp && tmp.currentHash) {\r\n            fb = tmp;\r\n            return false;\r\n          }\r\n        }\r\n      );\r\n\r\n      if (fb) {\r\n        // Now, compare hash values\r\n        if (fb.currentHash !== url.gallery + \"-\" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {\r\n          fb.currentHash = null;\r\n\r\n          fb.close();\r\n        }\r\n      } else if (url.gallery !== \"\") {\r\n        triggerFromUrl(url);\r\n      }\r\n    });\r\n\r\n    // Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n    setTimeout(function () {\r\n      if (!$.fancybox.getInstance()) {\r\n        triggerFromUrl(parseUrl());\r\n      }\r\n    }, 50);\r\n  });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Wheel\r\n// Basic mouse weheel support for gallery navigation\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n  \"use strict\";\r\n\r\n  var prevTime = new Date().getTime();\r\n\r\n  $(document).on({\r\n    \"onInit.fb\": function (e, instance, current) {\r\n      instance.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\", function (e) {\r\n        var current = instance.current,\r\n          currTime = new Date().getTime();\r\n\r\n        if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \"auto\" && current.type !== \"image\")) {\r\n          return;\r\n        }\r\n\r\n        e.preventDefault();\r\n        e.stopPropagation();\r\n\r\n        if (current.$slide.hasClass(\"fancybox-animated\")) {\r\n          return;\r\n        }\r\n\r\n        e = e.originalEvent || e;\r\n\r\n        if (currTime - prevTime < 250) {\r\n          return;\r\n        }\r\n\r\n        prevTime = currTime;\r\n\r\n        instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \"next\" : \"previous\"]();\r\n      });\r\n    }\r\n  });\r\n})(document, jQuery);"],"sourceRoot":""}