{"version":3,"sources":["console.js","jquery.fancybox.js","owl.carousel.js","main.js"],"names":["method","noop","methods","length","console","window","document","$","undefined","fn","fancybox","log","div","defaults","loop","margin","gutter","keyboard","arrows","infobar","toolbar","buttons","idleTime","smallBtn","protect","modal","image","preload","ajax","settings","data","iframe","tpl","css","attr","scrolling","defaultType","animationEffect","animationDuration","zoomOpacity","transitionEffect","transitionDuration","slideClass","baseClass","baseTpl","spinnerTpl","errorTpl","btnTpl","download","zoom","close","arrowLeft","arrowRight","parentEl","autoFocus","backFocus","trapFocus","fullScreen","autoStart","touch","vertical","momentum","hash","media","slideShow","speed","thumbs","hideOnClose","axis","onInit","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","transitionEnd","t","el","createElement","transitions","transition","OTransition","MozTransition","WebkitTransition","style","forceRedraw","$el","offsetHeight","FancyBox","content","opts","index","self","this","extend","isMobile","isArray","id","group","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","createGroup","$lastFocus","activeElement","blur","slides","init","prototype","$scrollDiv","$container","buttonStr","firstItem","firstItemOpts","scrollbarWidth","scrollTop","scrollLeft","getInstance","addClass","test","navigator","userAgent","MSStream","body","scrollHeight","innerHeight","appendTo","offsetWidth","clientWidth","remove","append","each","value","translate","replace","$refs","container","forEach","item","find","trigger","activate","jumpTo","obj","str","arr","match","n","items","makeArray","i","$item","src","srcParts","isPlainObject","options","$orig","charAt","$thumb","caption","apply","split","shift","filter","inArray","push","addEvents","removeEvents","on","e","stopPropagation","preventDefault","previous","next","isScaledDown","originalEvent","update","stage","hide","show","instance","isClosing","target","hasClass","is","has","focus","keycode","keyCode","which","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","hideControls","off","clearInterval","duration","pos","slide","canvasWidth","currentPos","transitionProps","groupLen","isSliding","isAnimating","createSlide","updateControls","getTranslate","$slide","isMoved","left","top","forcedDuration","isNumeric","removeClass","loadSlide","stop","Math","round","width","animate","removeAttr","complete","children","isLoaded","revealContent","isComplete","updateSlide","scaleToActual","x","y","imgPos","posX","posY","scaleX","scaleY","$what","$content","canvasHeight","height","newImgWidth","newImgHeight","hasError","updateCursor","SlideShow","isActive","scaleToFit","end","getFitPos","minRatio","imgWidth","imgHeight","min","floor","key","setTranslate","nextWidth","nextHeight","isZoomable","fitPos","isFunction","rez","canPan","abs","ajaxLoad","isLoading","setImage","setIframe","setContent","setError","showLoading","url","success","textStatus","error","jqXHR","one","abort","found","temp","pxRatio","windowWidth","srcset","devicePixelRatio","innerWidth","map","ret","trim","substring","postfix","sort","a","b","j","thumb","$ghost","setBigImage","$img","$image","clearTimeout","timouts","naturalWidth","naturalHeight","hideLoading","max","readyState","$iframe","Date","getTime","isReady","scrollWidth","$body","$wrap","frameWidth","frameHeight","contents","ignore","contentWindow","documentElement","ceil","outerWidth","outerHeight","prepend","empty","hasOwnProperty","isQuery","parent","$placeholder","insertAfter","nodeType","html","after","$smallBtn","$spinner","first","button","effect","effectClassName","opacity","start","getThumbPos","slidePos","thumbPos","offset","ownerDocument","element","elementRect","getBoundingClientRect","parentRects","parentElement","every","parentRect","visiblePixelX","right","visiblePixelY","bottom","isElementVisible","parseFloat","siblings","prev","isVisible","d","done","cleanUp","name","args","Array","slice","call","arguments","unshift","force","$caption","isHiddenControls","prop","toggleClass","toggleControls","version","command","open","all","destroy","createTouch","use3d","getComputedStyle","getPropertyValue","documentMode","matrix","eq","indexOf","transRez","exec","props","position","transform","to","leaveAnimationName","propertyName","selector","_run","$target","currentTarget","isDefaultPrevented","jQuery","format","params","param","youtube","matcher","autoplay","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","api","metacafe","dailymotion","additionalInfos","vine","instagram","gmap_place","gmap_search","urlParams","paramObj","provider","providerName","providerOpts","m","p","decodeURIComponent","contentProvider","cancelAFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","pointers","result","touches","changedTouches","pageX","pageY","clientX","clientY","distance","point2","point1","what","sqrt","pow","isClickable","get","onclick","atts","attributes","nodeName","substr","isScrollable","overflowY","overflowX","horizontal","clientHeight","Guestures","$bg","bg","$stage","proxy","ontouchstart","isTouchDevice","startPoints","canTap","startTime","distanceX","distanceY","isPanning","isSwiping","isZooming","sliderStartPos","sliderLastPos","contentStartPos","contentLastPos","centerPointStartX","centerPointStartY","percentageOfImageAtPinchPointX","percentageOfImageAtPinchPointY","startDistanceBetweenFingers","ontouchmove","newPoints","onSwipe","onPan","onZoom","angle","swiping","atan2","PI","inTransition","requestId","newOffsetX","newOffsetY","newPos","limitMovement","newWidth","newHeight","minTranslateX","minTranslateY","maxTranslateX","maxTranslateY","currentOffsetX","currentOffsetY","limitPosition","currentWidth","currentHeight","pinchRatio","translateFromZoomingX","translateFromZoomingY","centerPointEndX","centerPointEndY","translateFromTranslatingX","ontouchend","dMs","panning","zooming","endPoints","onTap","velocityX","velocityY","speedX","endPanning","endZooming","endSwiping","reset","where","tapX","tapY","process","prefix","action","startEvent","tapped","timer","$button","toggle","set","clear","onInit.fb","beforeShow.fb","afterShow.fb","afterKeydown.fb","keypress","beforeClose.fb onDeactivate.fb","hidden","val","fnMap","FullScreen","request","elem","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","exitFullscreen","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","beforeClose.fb","fullscreenchange","FancyThumbs","$grid","$list","Thumbs","second","create","list","addBack","widthRatio","heightRatio","$parent","thumbWidth","thumbHeight","margin-top","margin-left","share","f","location","encodeURIComponent","string","entityMap","&","<",">","\"","'","/","`","=","String","s","escapeHtml","text","escapeSelector","sel","ch","asCodePoint","charCodeAt","toString","shouldCreateHistory","currentHash","timerID","parseUrl","pop","gallery","join","triggerFromUrl","getGalleryID","origHash","history","title","pathname","search","replaceState","Owl","Defaults","$element","_handlers","_plugins","_supress","_current","_speed","_coordinates","_breakpoint","_width","_items","_clones","_mergers","_widths","_invalidated","_pipe","_drag","time","pointer","direction","_states","tags","initializing","animating","dragging","handler","Plugins","plugin","toLowerCase","Workers","priority","worker","run","setup","initialize","center","rewind","mouseDrag","touchDrag","pullDrag","freeDrag","stagePadding","merge","mergeFit","autoWidth","startPosition","rtl","smartSpeed","fluidSpeed","dragEndSpeed","responsive","responsiveRefreshRate","responsiveBaseElement","fallbackEasing","info","nestedItemSelector","itemElement","stageElement","refreshClass","loadedClass","loadingClass","rtlClass","responsiveClass","dragClass","itemClass","stageClass","stageOuterClass","grabClass","Width","Default","Inner","Outer","Type","Event","State","cache","relative","grid","margin-right","toFixed","iterator","widths","clones","view","size","repeat","normalize","outerHTML","prependTo","coordinates","padding","padding-left","padding-right","minimum","maximum","inner","outer","begin","matches","op","imgs","nestedSelector","enter","preloadAutoWidthImages","wrap","not","refresh","invalidate","registerEventHandlers","leave","viewport","overwrites","breakpoint","Number","RegExp","property","optionsLogic","prepare","grep","dimension","onThrottledResize","resizeTimer","onResize","support","onTransitionEnd","onDragStart","onDragEnd","delta","difference","onDragMove","pull","closest","coordinate","transform3d","state","part","v","suppress","release","reciprocalItemsWidth","elementWidth","mergers","odd","even","multiplier","newPosition","from","factor","revert","srcElement","originalTarget","warn","add","before","splice","images","Image","unwrap","removeData","o","listener","capture","addEventListener","attachEvent","removeEventListener","detachEvent","namespace","status","count","camelCase","relatedTarget","onTrigger","register","concat","object","special","owl","_default","tag","events","number","isNaN","owlCarousel","option","$this","Constructor","Zepto","AutoRefresh","carousel","_core","_interval","_visible","initialized.owl.carousel","autoRefresh","watch","autoRefreshInterval","Object","getOwnPropertyNames","Lazy","_loaded","initialized.owl.carousel change.owl.carousel resized.owl.carousel","lazyLoad","load","$elements","onload","background-image","handlers","AutoHeight","initialized.owl.carousel refreshed.owl.carousel","autoHeight","changed.owl.carousel","loaded.owl.lazy","autoHeightClass","maxheight","visible","toArray","heights","Video","_videos","_playing","resize.owl.carousel","video","isInFullScreen","refreshed.owl.carousel","prepared.owl.carousel","fetch","play","videoHeight","videoWidth","Error","thumbnail","tnLink","path","dimensions","customTn","srcType","lazyClass","jsonp","dataType","thumbnail_large","framegrab_url","mozFullScreenElement","webkitFullscreenElement","Animate","scope","core","swapping","change.owl.carousel","drag.owl.carousel dragged.owl.carousel translated.owl.carousel","translate.owl.carousel","animateOut","animateIn","swap","animation","incoming","outgoing","Autoplay","_timeout","_paused","_setAutoPlayInterval","play.owl.autoplay","stop.owl.autoplay","mouseover.owl.autoplay","autoplayHoverPause","pause","mouseleave.owl.autoplay","touchstart.owl.core","touchend.owl.core","autoplayTimeout","autoplaySpeed","timeout","_getNextTimeout","Navigation","_initialized","_pages","_controls","_templates","_overrides","dotsData","dotClass","added.owl.carousel","remove.owl.carousel","draw","nav","navText","navSpeed","navElement","navContainer","navContainerClass","navClass","slideBy","dotsClass","dots","dotsEach","dotsSpeed","dotsContainer","override","$relative","$previous","$next","$absolute","control","overides","lower","upper","disabled","page","getPosition","successor","standard","Hash","_hashes","URLhashListener","prefixes","WebkitAnimation","MozAnimation","OAnimation","tests","prefixed","toUpperCase","currentLanguage","siteUrl","templateUrl","ready","siteInit","slider","carouselMobile","videoPreview","scroll","resize","matchMedia","0","992","768","timeoutID","timeoutHideID","fadeIn","hidePreview","fadeOut","elName","$elCliked","toggleClassName"],"mappings":"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","file":"scripts.min.js","sourcesContent":["// Avoid `console` errors in browsers that lack a console.\n'use strict';\n\n(function() {\n\n\tvar method;\n\tvar noop = function() {};\n\tvar methods = [\n\t\t'assert',\n\t\t'clear',\n\t\t'count',\n\t\t'debug',\n\t\t'dir',\n\t\t'dirxml',\n\t\t'error',\n\t\t'exception',\n\t\t'group',\n\t\t'groupCollapsed',\n\t\t'groupEnd',\n\t\t'info',\n\t\t'log',\n\t\t'markTimeline',\n\t\t'profile',\n\t\t'profileEnd',\n\t\t'table',\n\t\t'time',\n\t\t'timeEnd',\n\t\t'timeline',\n\t\t'timelineEnd',\n\t\t'timeStamp',\n\t\t'trace',\n\t\t'warn'\n\t];\n\tvar length = methods.length;\n\tvar console = (window.console = window.console || {});\n\n\twhile (length--) {\n\n\t\tmethod = methods[length];\n\n\t\t// Only stub undefined methods.\n\t\tif (!console[method]) {\n\n\t\t\tconsole[method] = noop;\n\n\t\t}\n\n\t}\n\n})();\n","// ==================================================\n// fancyBox v3.2.5\n//\n// Licensed GPLv3 for open source use\n// or fancyBox Commercial License for commercial use\n//\n// http://fancyapps.com/fancybox/\n// Copyright 2017 fancyApps\n//\n// ==================================================\n;(function (window, document, $, undefined) {\n 'use strict';\n\n // If there's no jQuery, fancyBox can't work\n // =========================================\n\n if ( !$ ) {\n return;\n }\n\n // Check if fancyBox is already initialized\n // ========================================\n\n if ( $.fn.fancybox ) {\n\n if ( 'console' in window ) {\n console.log( 'fancyBox already initialized' );\n }\n\n return;\n }\n\n // Private default settings\n // ========================\n\n var defaults = {\n\n // Enable infinite gallery navigation\n loop : false,\n\n // Space around image, ignored if zoomed-in or viewport width is smaller than 800px\n margin : [44, 0],\n\n // Horizontal space between slides\n gutter : 50,\n\n // Enable keyboard navigation\n keyboard : true,\n\n // Should display navigation arrows at the screen edges\n arrows : true,\n\n // Should display infobar (counter and arrows at the top)\n infobar : true,\n\n // Should display toolbar (buttons at the top)\n toolbar : true,\n\n // What buttons should appear in the top right corner.\n // Buttons will be created using templates from `btnTpl` option\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\n buttons : [\n 'slideShow',\n 'fullScreen',\n 'thumbs',\n 'share',\n //'download',\n //'zoom',\n 'close'\n ],\n\n // Detect \"idle\" time in seconds\n idleTime : 3,\n\n // Should display buttons at top right corner of the content\n // If 'auto' - they will be created for content having type 'html', 'inline' or 'ajax'\n // Use template from `btnTpl.smallBtn` for customization\n smallBtn : 'auto',\n\n // Disable right-click and use simple image protection for images\n protect : false,\n\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\n modal : false,\n\n image : {\n\n // Wait for images to load before displaying\n // Requires predefined image dimensions\n // If 'auto' - will zoom in thumbnail if 'width' and 'height' attributes are found\n preload : \"auto\"\n\n },\n\n ajax : {\n\n // Object containing settings for ajax request\n settings : {\n\n // This helps to indicate that request comes from the modal\n // Feel free to change naming\n data : {\n fancybox : true\n }\n }\n\n },\n\n iframe : {\n\n // Iframe template\n tpl : '',\n\n // Preload iframe before displaying it\n // This allows to calculate iframe content width and height\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\n preload : true,\n\n // Custom CSS styling for iframe wrapping element\n // You can use this to set custom iframe dimensions\n css : {},\n\n // Iframe tag attributes\n attr : {\n scrolling : 'auto'\n }\n\n },\n\n // Default content type if cannot be detected automatically\n defaultType : 'image',\n\n // Open/close animation type\n // Possible values:\n // false - disable\n // \"zoom\" - zoom images from/to thumbnail\n // \"fade\"\n // \"zoom-in-out\"\n //\n animationEffect : \"zoom\",\n\n // Duration in ms for open/close animation\n animationDuration : 500,\n\n // Should image change opacity while zooming\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\n zoomOpacity : \"auto\",\n\n // Transition effect between slides\n //\n // Possible values:\n // false - disable\n // \"fade'\n // \"slide'\n // \"circular'\n // \"tube'\n // \"zoom-in-out'\n // \"rotate'\n //\n transitionEffect : \"fade\",\n\n // Duration in ms for transition animation\n transitionDuration : 366,\n\n // Custom CSS class for slide element\n slideClass : '',\n\n // Custom CSS class for layout\n baseClass : '',\n\n // Base template for layout\n baseTpl\t:\n '
' +\n '
' +\n '
' +\n '
' +\n ' / ' +\n '
' +\n '
{{buttons}}
' +\n '
{{arrows}}
' +\n '
' +\n '
' +\n '
' +\n '
',\n\n // Loading indicator template\n spinnerTpl : '
',\n\n // Error message template\n errorTpl : '

{{ERROR}}

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

Hi!

' );\n\n obj = {\n type : 'html',\n src : item + ''\n };\n\n }\n\n // Each gallery object has full collection of options\n obj.opts = $.extend( true, {}, self.opts, opts );\n\n // Do not merge buttons array\n if ( $.isArray( opts.buttons ) ) {\n obj.opts.buttons = opts.buttons;\n }\n\n\n // Step 2 - Make sure we have content type, if not - try to guess\n // ==============================================================\n\n type = obj.type || obj.opts.type;\n src = obj.src || '';\n\n if ( !type && src ) {\n if ( src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i) ) {\n type = 'image';\n\n } else if ( src.match(/\\.(pdf)((\\?|#).*)?$/i) ) {\n type = 'pdf';\n\n } else if ( src.charAt(0) === '#' ) {\n type = 'inline';\n }\n }\n\n if ( type ) {\n obj.type = type;\n\n } else {\n self.trigger( 'objectNeedsType', obj );\n }\n\n\n // Step 3 - Some adjustments\n // =========================\n\n obj.index = self.group.length;\n\n // Check if $orig and $thumb objects exist\n if ( obj.opts.$orig && !obj.opts.$orig.length ) {\n delete obj.opts.$orig;\n }\n\n if ( !obj.opts.$thumb && obj.opts.$orig ) {\n obj.opts.$thumb = obj.opts.$orig.find( 'img:first' );\n }\n\n if ( obj.opts.$thumb && !obj.opts.$thumb.length ) {\n delete obj.opts.$thumb;\n }\n\n // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item ..\n if ( $.type( obj.opts.caption ) === 'function' ) {\n obj.opts.caption = obj.opts.caption.apply( item, [ self, obj ] );\n }\n\n if ( $.type( self.opts.caption ) === 'function' ) {\n obj.opts.caption = self.opts.caption.apply( item, [ self, obj ] );\n }\n\n // Make sure we have caption as a string or jQuery object\n if ( !( obj.opts.caption instanceof $ ) ) {\n obj.opts.caption = obj.opts.caption === undefined ? '' : obj.opts.caption + '';\n }\n\n // Check if url contains \"filter\" used to filter the content\n // Example: \"ajax.html #something\"\n if ( type === 'ajax' ) {\n srcParts = src.split(/\\s+/, 2);\n\n if ( srcParts.length > 1 ) {\n obj.src = srcParts.shift();\n\n obj.opts.filter = srcParts.shift();\n }\n }\n\n if ( obj.opts.smallBtn == 'auto' ) {\n\n if ( $.inArray( type, ['html', 'inline', 'ajax'] ) > -1 ) {\n obj.opts.toolbar = false;\n obj.opts.smallBtn = true;\n\n } else {\n obj.opts.smallBtn = false;\n }\n\n }\n\n // If the type is \"pdf\", then simply load file into iframe\n if ( type === 'pdf' ) {\n obj.type = 'iframe';\n\n obj.opts.iframe.preload = false;\n }\n\n // Hide all buttons and disable interactivity for modal items\n if ( obj.opts.modal ) {\n\n obj.opts = $.extend(true, obj.opts, {\n // Remove buttons\n infobar : 0,\n toolbar : 0,\n\n smallBtn : 0,\n\n // Disable keyboard navigation\n keyboard : 0,\n\n // Disable some modules\n slideShow : 0,\n fullScreen : 0,\n thumbs : 0,\n touch : 0,\n\n // Disable click event handlers\n clickContent : false,\n clickSlide : false,\n clickOutside : false,\n dblclickContent : false,\n dblclickSlide : false,\n dblclickOutside : false\n });\n\n }\n\n // Step 4 - Add processed object to group\n // ======================================\n\n self.group.push( obj );\n\n });\n\n },\n\n\n // Attach an event handler functions for:\n // - navigation buttons\n // - browser scrolling, resizing;\n // - focusing\n // - keyboard\n // - detect idle\n // ======================================\n\n addEvents : function() {\n var self = this;\n\n self.removeEvents();\n\n // Make navigation elements clickable\n self.$refs.container.on('click.fb-close', '[data-fancybox-close]', function(e) {\n e.stopPropagation();\n e.preventDefault();\n\n self.close( e );\n\n }).on( 'click.fb-prev touchend.fb-prev', '[data-fancybox-prev]', function(e) {\n e.stopPropagation();\n e.preventDefault();\n\n self.previous();\n\n }).on( 'click.fb-next touchend.fb-next', '[data-fancybox-next]', function(e) {\n e.stopPropagation();\n e.preventDefault();\n\n self.next();\n\n }).on( 'click.fb', '[data-fancybox-zoom]', function(e) {\n // Click handler for zoom button\n self[ self.isScaledDown() ? 'scaleToActual' : 'scaleToFit' ]();\n });\n\n\n // Handle page scrolling and browser resizing\n $W.on('orientationchange.fb resize.fb', function(e) {\n\n if ( e && e.originalEvent && e.originalEvent.type === \"resize\" ) {\n\n requestAFrame(function() {\n self.update();\n });\n\n } else {\n\n self.$refs.stage.hide();\n\n setTimeout(function() {\n self.$refs.stage.show();\n\n self.update();\n }, 600);\n\n }\n\n });\n\n // Trap keyboard focus inside of the modal, so the user does not accidentally tab outside of the modal\n // (a.k.a. \"escaping the modal\")\n $D.on('focusin.fb', function(e) {\n var instance = $.fancybox ? $.fancybox.getInstance() : null;\n\n if ( instance.isClosing || !instance.current || !instance.current.opts.trapFocus || $( e.target ).hasClass( 'fancybox-container' ) || $( e.target ).is( document ) ) {\n return;\n }\n\n if ( instance && $( e.target ).css( 'position' ) !== 'fixed' && !instance.$refs.container.has( e.target ).length ) {\n e.stopPropagation();\n\n instance.focus();\n\n // Sometimes page gets scrolled, set it back\n $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );\n }\n });\n\n\n // Enable keyboard navigation\n $D.on('keydown.fb', function (e) {\n var current = self.current,\n keycode = e.keyCode || e.which;\n\n if ( !current || !current.opts.keyboard ) {\n return;\n }\n\n if ( $(e.target).is('input') || $(e.target).is('textarea') ) {\n return;\n }\n\n // Backspace and Esc keys\n if ( keycode === 8 || keycode === 27 ) {\n e.preventDefault();\n\n self.close( e );\n\n return;\n }\n\n // Left arrow and Up arrow\n if ( keycode === 37 || keycode === 38 ) {\n e.preventDefault();\n\n self.previous();\n\n return;\n }\n\n // Righ arrow and Down arrow\n if ( keycode === 39 || keycode === 40 ) {\n e.preventDefault();\n\n self.next();\n\n return;\n }\n\n self.trigger('afterKeydown', e, keycode);\n });\n\n\n // Hide controls after some inactivity period\n if ( self.group[ self.currIndex ].opts.idleTime ) {\n self.idleSecondsCounter = 0;\n\n $D.on('mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle', function(e) {\n self.idleSecondsCounter = 0;\n\n if ( self.isIdle ) {\n self.showControls();\n }\n\n self.isIdle = false;\n });\n\n self.idleInterval = window.setInterval(function() {\n self.idleSecondsCounter++;\n\n if ( self.idleSecondsCounter >= self.group[ self.currIndex ].opts.idleTime ) {\n self.isIdle = true;\n self.idleSecondsCounter = 0;\n\n self.hideControls();\n }\n\n }, 1000);\n }\n\n },\n\n\n // Remove events added by the core\n // ===============================\n\n removeEvents : function() {\n var self = this;\n\n $W.off( 'orientationchange.fb resize.fb' );\n $D.off( 'focusin.fb keydown.fb .fb-idle' );\n\n this.$refs.container.off( '.fb-close .fb-prev .fb-next' );\n\n if ( self.idleInterval ) {\n window.clearInterval( self.idleInterval );\n\n self.idleInterval = null;\n }\n },\n\n\n // Change to previous gallery item\n // ===============================\n\n previous : function( duration ) {\n return this.jumpTo( this.currPos - 1, duration );\n },\n\n\n // Change to next gallery item\n // ===========================\n\n next : function( duration ) {\n return this.jumpTo( this.currPos + 1, duration );\n },\n\n\n // Switch to selected gallery item\n // ===============================\n\n jumpTo : function ( pos, duration, slide ) {\n var self = this,\n firstRun,\n loop,\n current,\n previous,\n canvasWidth,\n currentPos,\n transitionProps;\n\n var groupLen = self.group.length;\n\n if ( self.isSliding || self.isClosing || ( self.isAnimating && self.firstRun ) ) {\n return;\n }\n\n pos = parseInt( pos, 10 );\n loop = self.current ? self.current.opts.loop : self.opts.loop;\n\n if ( !loop && ( pos < 0 || pos >= groupLen ) ) {\n return false;\n }\n\n firstRun = self.firstRun = ( self.firstRun === null );\n\n if ( groupLen < 2 && !firstRun && !!self.isSliding ) {\n return;\n }\n\n previous = self.current;\n\n self.prevIndex = self.currIndex;\n self.prevPos = self.currPos;\n\n // Create slides\n current = self.createSlide( pos );\n\n if ( groupLen > 1 ) {\n if ( loop || current.index > 0 ) {\n self.createSlide( pos - 1 );\n }\n\n if ( loop || current.index < groupLen - 1 ) {\n self.createSlide( pos + 1 );\n }\n }\n\n self.current = current;\n self.currIndex = current.index;\n self.currPos = current.pos;\n\n self.trigger( 'beforeShow', firstRun );\n\n self.updateControls();\n\n currentPos = $.fancybox.getTranslate( current.$slide );\n\n current.isMoved = ( currentPos.left !== 0 || currentPos.top !== 0 ) && !current.$slide.hasClass( 'fancybox-animated' );\n current.forcedDuration = undefined;\n\n if ( $.isNumeric( duration ) ) {\n current.forcedDuration = duration;\n } else {\n duration = current.opts[ firstRun ? 'animationDuration' : 'transitionDuration' ];\n }\n\n duration = parseInt( duration, 10 );\n\n // Fresh start - reveal container, current slide and start loading content\n if ( firstRun ) {\n\n if ( current.opts.animationEffect && duration ) {\n self.$refs.container.css( 'transition-duration', duration + 'ms' );\n }\n\n self.$refs.container.removeClass( 'fancybox-is-hidden' );\n\n forceRedraw( self.$refs.container );\n\n self.$refs.container.addClass( 'fancybox-is-open' );\n\n // Make first slide visible (to display loading icon, if needed)\n current.$slide.addClass( 'fancybox-slide--current' );\n\n self.loadSlide( current );\n\n self.preload();\n\n return;\n }\n\n // Clean up\n $.each(self.slides, function( index, slide ) {\n $.fancybox.stop( slide.$slide );\n });\n\n // Make current that slide is visible even if content is still loading\n current.$slide.removeClass( 'fancybox-slide--next fancybox-slide--previous' ).addClass( 'fancybox-slide--current' );\n\n // If slides have been dragged, animate them to correct position\n if ( current.isMoved ) {\n canvasWidth = Math.round( current.$slide.width() );\n\n $.each(self.slides, function( index, slide ) {\n var pos = slide.pos - current.pos;\n\n $.fancybox.animate( slide.$slide, {\n top : 0,\n left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter )\n }, duration, function() {\n\n slide.$slide.removeAttr('style').removeClass( 'fancybox-slide--next fancybox-slide--previous' );\n\n if ( slide.pos === self.currPos ) {\n current.isMoved = false;\n\n self.complete();\n }\n });\n });\n\n } else {\n self.$refs.stage.children().removeAttr( 'style' );\n }\n\n // Start transition that reveals current content\n // or wait when it will be loaded\n\n if ( current.isLoaded ) {\n self.revealContent( current );\n\n } else {\n self.loadSlide( current );\n }\n\n self.preload();\n\n if ( previous.pos === current.pos ) {\n return;\n }\n\n // Handle previous slide\n // =====================\n\n transitionProps = 'fancybox-slide--' + ( previous.pos > current.pos ? 'next' : 'previous' );\n\n previous.$slide.removeClass( 'fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous' );\n\n previous.isComplete = false;\n\n if ( !duration || ( !current.isMoved && !current.opts.transitionEffect ) ) {\n return;\n }\n\n if ( current.isMoved ) {\n previous.$slide.addClass( transitionProps );\n\n } else {\n\n transitionProps = 'fancybox-animated ' + transitionProps + ' fancybox-fx-' + current.opts.transitionEffect;\n\n $.fancybox.animate( previous.$slide, transitionProps, duration, function() {\n previous.$slide.removeClass( transitionProps ).removeAttr( 'style' );\n });\n\n }\n\n },\n\n\n // Create new \"slide\" element\n // These are gallery items that are actually added to DOM\n // =======================================================\n\n createSlide : function( pos ) {\n\n var self = this;\n var $slide;\n var index;\n\n index = pos % self.group.length;\n index = index < 0 ? self.group.length + index : index;\n\n if ( !self.slides[ pos ] && self.group[ index ] ) {\n $slide = $('
').appendTo( self.$refs.stage );\n\n self.slides[ pos ] = $.extend( true, {}, self.group[ index ], {\n pos : pos,\n $slide : $slide,\n isLoaded : false,\n });\n\n self.updateSlide( self.slides[ pos ] );\n }\n\n return self.slides[ pos ];\n },\n\n\n // Scale image to the actual size of the image\n // ===========================================\n\n scaleToActual : function( x, y, duration ) {\n\n var self = this;\n\n var current = self.current;\n var $what = current.$content;\n\n var imgPos, posX, posY, scaleX, scaleY;\n\n var canvasWidth = parseInt( current.$slide.width(), 10 );\n var canvasHeight = parseInt( current.$slide.height(), 10 );\n\n var newImgWidth = current.width;\n var newImgHeight = current.height;\n\n if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {\n return;\n }\n\n $.fancybox.stop( $what );\n\n self.isAnimating = true;\n\n x = x === undefined ? canvasWidth * 0.5 : x;\n y = y === undefined ? canvasHeight * 0.5 : y;\n\n imgPos = $.fancybox.getTranslate( $what );\n\n scaleX = newImgWidth / imgPos.width;\n scaleY = newImgHeight / imgPos.height;\n\n // Get center position for original image\n posX = ( canvasWidth * 0.5 - newImgWidth * 0.5 );\n posY = ( canvasHeight * 0.5 - newImgHeight * 0.5 );\n\n // Make sure image does not move away from edges\n if ( newImgWidth > canvasWidth ) {\n posX = imgPos.left * scaleX - ( ( x * scaleX ) - x );\n\n if ( posX > 0 ) {\n posX = 0;\n }\n\n if ( posX < canvasWidth - newImgWidth ) {\n posX = canvasWidth - newImgWidth;\n }\n }\n\n if ( newImgHeight > canvasHeight) {\n posY = imgPos.top * scaleY - ( ( y * scaleY ) - y );\n\n if ( posY > 0 ) {\n posY = 0;\n }\n\n if ( posY < canvasHeight - newImgHeight ) {\n posY = canvasHeight - newImgHeight;\n }\n }\n\n self.updateCursor( newImgWidth, newImgHeight );\n\n $.fancybox.animate( $what, {\n top : posY,\n left : posX,\n scaleX : scaleX,\n scaleY : scaleY\n }, duration || 330, function() {\n self.isAnimating = false;\n });\n\n // Stop slideshow\n if ( self.SlideShow && self.SlideShow.isActive ) {\n self.SlideShow.stop();\n }\n },\n\n\n // Scale image to fit inside parent element\n // ========================================\n\n scaleToFit : function( duration ) {\n\n var self = this;\n\n var current = self.current;\n var $what = current.$content;\n var end;\n\n if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {\n return;\n }\n\n $.fancybox.stop( $what );\n\n self.isAnimating = true;\n\n end = self.getFitPos( current );\n\n self.updateCursor( end.width, end.height );\n\n $.fancybox.animate( $what, {\n top : end.top,\n left : end.left,\n scaleX : end.width / $what.width(),\n scaleY : end.height / $what.height()\n }, duration || 330, function() {\n self.isAnimating = false;\n });\n\n },\n\n // Calculate image size to fit inside viewport\n // ===========================================\n\n getFitPos : function( slide ) {\n var self = this;\n var $what = slide.$content;\n\n var imgWidth = slide.width;\n var imgHeight = slide.height;\n\n var margin = slide.opts.margin;\n\n var canvasWidth, canvasHeight, minRatio, width, height;\n\n if ( !$what || !$what.length || ( !imgWidth && !imgHeight) ) {\n return false;\n }\n\n // Convert \"margin to CSS style: [ top, right, bottom, left ]\n if ( $.type( margin ) === \"number\" ) {\n margin = [ margin, margin ];\n }\n\n if ( margin.length == 2 ) {\n margin = [ margin[0], margin[1], margin[0], margin[1] ];\n }\n\n // We can not use $slide width here, because it can have different diemensions while in transiton\n canvasWidth = parseInt( self.$refs.stage.width(), 10 ) - ( margin[ 1 ] + margin[ 3 ] );\n canvasHeight = parseInt( self.$refs.stage.height(), 10 ) - ( margin[ 0 ] + margin[ 2 ] );\n\n minRatio = Math.min(1, canvasWidth / imgWidth, canvasHeight / imgHeight );\n\n width = Math.floor( minRatio * imgWidth );\n height = Math.floor( minRatio * imgHeight );\n\n // Use floor rounding to make sure it really fits\n return {\n top : Math.floor( ( canvasHeight - height ) * 0.5 ) + margin[ 0 ],\n left : Math.floor( ( canvasWidth - width ) * 0.5 ) + margin[ 3 ],\n width : width,\n height : height\n };\n\n },\n\n\n // Update position and content of all slides\n // =========================================\n\n update : function() {\n\n var self = this;\n\n $.each( self.slides, function( key, slide ) {\n self.updateSlide( slide );\n });\n\n },\n\n\n // Update slide position and scale content to fit\n // ==============================================\n\n updateSlide : function( slide ) {\n\n var self = this;\n var $what = slide.$content;\n\n if ( $what && ( slide.width || slide.height ) ) {\n self.isAnimating = false;\n\n $.fancybox.stop( $what );\n\n $.fancybox.setTranslate( $what, self.getFitPos( slide ) );\n\n if ( slide.pos === self.currPos ) {\n self.updateCursor();\n }\n }\n\n slide.$slide.trigger( 'refresh' );\n\n self.trigger( 'onUpdate', slide );\n\n },\n\n // Update cursor style depending if content can be zoomed\n // ======================================================\n\n updateCursor : function( nextWidth, nextHeight ) {\n\n var self = this;\n var isScaledDown;\n\n var $container = self.$refs.container.removeClass( 'fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-drag fancybox-can-zoomOut' );\n\n if ( !self.current || self.isClosing ) {\n return;\n }\n\n if ( self.isZoomable() ) {\n\n $container.addClass( 'fancybox-is-zoomable' );\n\n if ( nextWidth !== undefined && nextHeight !== undefined ) {\n isScaledDown = nextWidth < self.current.width && nextHeight < self.current.height;\n\n } else {\n isScaledDown = self.isScaledDown();\n }\n\n if ( isScaledDown ) {\n\n // If image is scaled down, then, obviously, it can be zoomed to full size\n $container.addClass( 'fancybox-can-zoomIn' );\n\n } else {\n\n if ( self.current.opts.touch ) {\n\n // If image size ir largen than available available and touch module is not disable,\n // then user can do panning\n $container.addClass( 'fancybox-can-drag' );\n\n } else {\n $container.addClass( 'fancybox-can-zoomOut' );\n }\n\n }\n\n } else if ( self.current.opts.touch ) {\n $container.addClass( 'fancybox-can-drag' );\n }\n\n },\n\n\n // Check if current slide is zoomable\n // ==================================\n\n isZoomable : function() {\n\n var self = this;\n\n var current = self.current;\n var fitPos;\n\n if ( !current || self.isClosing ) {\n return;\n }\n\n // Assume that slide is zoomable if\n // - image is loaded successfuly\n // - click action is \"zoom\"\n // - actual size of the image is smaller than available area\n if ( current.type === 'image' && current.isLoaded && !current.hasError &&\n ( current.opts.clickContent === 'zoom' || ( $.isFunction( current.opts.clickContent ) && current.opts.clickContent( current ) === \"zoom\" ) )\n ) {\n\n fitPos = self.getFitPos( current );\n\n if ( current.width > fitPos.width || current.height > fitPos.height ) {\n return true;\n }\n\n }\n\n return false;\n\n },\n\n\n // Check if current image dimensions are smaller than actual\n // =========================================================\n\n isScaledDown : function() {\n\n var self = this;\n\n var current = self.current;\n var $what = current.$content;\n\n var rez = false;\n\n if ( $what ) {\n rez = $.fancybox.getTranslate( $what );\n rez = rez.width < current.width || rez.height < current.height;\n }\n\n return rez;\n\n },\n\n\n // Check if image dimensions exceed parent element\n // ===============================================\n\n canPan : function() {\n\n var self = this;\n\n var current = self.current;\n var $what = current.$content;\n\n var rez = false;\n\n if ( $what ) {\n rez = self.getFitPos( current );\n rez = Math.abs( $what.width() - rez.width ) > 1 || Math.abs( $what.height() - rez.height ) > 1;\n\n }\n\n return rez;\n\n },\n\n\n // Load content into the slide\n // ===========================\n\n loadSlide : function( slide ) {\n\n var self = this, type, $slide;\n var ajaxLoad;\n\n if ( slide.isLoading ) {\n return;\n }\n\n if ( slide.isLoaded ) {\n return;\n }\n\n slide.isLoading = true;\n\n self.trigger( 'beforeLoad', slide );\n\n type = slide.type;\n $slide = slide.$slide;\n\n $slide\n .off( 'refresh' )\n .trigger( 'onReset' )\n .addClass( 'fancybox-slide--' + ( type || 'unknown' ) )\n .addClass( slide.opts.slideClass );\n\n // Create content depending on the type\n\n switch ( type ) {\n\n case 'image':\n\n self.setImage( slide );\n\n break;\n\n case 'iframe':\n\n self.setIframe( slide );\n\n break;\n\n case 'html':\n\n self.setContent( slide, slide.src || slide.content );\n\n break;\n\n case 'inline':\n\n if ( $( slide.src ).length ) {\n self.setContent( slide, $( slide.src ) );\n\n } else {\n self.setError( slide );\n }\n\n break;\n\n case 'ajax':\n\n self.showLoading( slide );\n\n ajaxLoad = $.ajax( $.extend( {}, slide.opts.ajax.settings, {\n url : slide.src,\n success : function ( data, textStatus ) {\n\n if ( textStatus === 'success' ) {\n self.setContent( slide, data );\n }\n\n },\n error : function ( jqXHR, textStatus ) {\n\n if ( jqXHR && textStatus !== 'abort' ) {\n self.setError( slide );\n }\n\n }\n }));\n\n $slide.one( 'onReset', function () {\n ajaxLoad.abort();\n });\n\n break;\n\n default:\n\n self.setError( slide );\n\n break;\n\n }\n\n return true;\n\n },\n\n\n // Use thumbnail image, if possible\n // ================================\n\n setImage : function( slide ) {\n\n var self = this;\n var srcset = slide.opts.srcset || slide.opts.image.srcset;\n\n var found, temp, pxRatio, windowWidth;\n\n // If we have \"srcset\", then we need to find matching \"src\" value.\n // This is necessary, because when you set an src attribute, the browser will preload the image\n // before any javascript or even CSS is applied.\n if ( srcset ) {\n pxRatio = window.devicePixelRatio || 1;\n windowWidth = window.innerWidth * pxRatio;\n\n temp = srcset.split(',').map(function ( el ) {\n \t\tvar ret = {};\n\n \t\tel.trim().split(/\\s+/).forEach(function ( el, i ) {\n var value = parseInt( el.substring(0, el.length - 1), 10 );\n\n \t\t\tif ( i === 0 ) {\n \t\t\t\treturn ( ret.url = el );\n \t\t\t}\n\n if ( value ) {\n ret.value = value;\n ret.postfix = el[ el.length - 1 ];\n }\n\n \t\t});\n\n \t\treturn ret;\n \t});\n\n // Sort by value\n temp.sort(function (a, b) {\n return a.value - b.value;\n });\n\n // Ok, now we have an array of all srcset values\n for ( var j = 0; j < temp.length; j++ ) {\n var el = temp[ j ];\n\n if ( ( el.postfix === 'w' && el.value >= windowWidth ) || ( el.postfix === 'x' && el.value >= pxRatio ) ) {\n found = el;\n break;\n }\n }\n\n // If not found, take the last one\n if ( !found && temp.length ) {\n found = temp[ temp.length - 1 ];\n }\n\n if ( found ) {\n slide.src = found.url;\n\n // If we have default width/height values, we can calculate height for matching source\n if ( slide.width && slide.height && found.postfix == 'w' ) {\n slide.height = ( slide.width / slide.height ) * found.value;\n slide.width = found.value;\n }\n }\n }\n\n // This will be wrapper containing both ghost and actual image\n slide.$content = $('
')\n .addClass( 'fancybox-is-hidden' )\n .appendTo( slide.$slide );\n\n\n // If we have a thumbnail, we can display it while actual image is loading\n // Users will not stare at black screen and actual image will appear gradually\n if ( slide.opts.preload !== false && slide.opts.width && slide.opts.height && ( slide.opts.thumb || slide.opts.$thumb ) ) {\n\n slide.width = slide.opts.width;\n slide.height = slide.opts.height;\n\n slide.$ghost = $('')\n .one('error', function() {\n\n $(this).remove();\n\n slide.$ghost = null;\n\n self.setBigImage( slide );\n\n })\n .one('load', function() {\n\n self.afterLoad( slide );\n\n self.setBigImage( slide );\n\n })\n .addClass( 'fancybox-image' )\n .appendTo( slide.$content )\n .attr( 'src', slide.opts.thumb || slide.opts.$thumb.attr( 'src' ) );\n\n } else {\n\n self.setBigImage( slide );\n\n }\n\n },\n\n\n // Create full-size image\n // ======================\n\n setBigImage : function ( slide ) {\n var self = this;\n var $img = $('');\n\n slide.$image = $img\n .one('error', function() {\n\n self.setError( slide );\n\n })\n .one('load', function() {\n\n // Clear timeout that checks if loading icon needs to be displayed\n clearTimeout( slide.timouts );\n\n slide.timouts = null;\n\n if ( self.isClosing ) {\n return;\n }\n\n slide.width = this.naturalWidth;\n slide.height = this.naturalHeight;\n\n if ( slide.opts.image.srcset ) {\n $img.attr( 'sizes', '100vw' ).attr( 'srcset', slide.opts.image.srcset );\n }\n\n self.hideLoading( slide );\n\n if ( slide.$ghost ) {\n\n slide.timouts = setTimeout(function() {\n slide.timouts = null;\n\n slide.$ghost.hide();\n\n }, Math.min( 300, Math.max( 1000, slide.height / 1600 ) ) );\n\n } else {\n self.afterLoad( slide );\n }\n\n })\n .addClass( 'fancybox-image' )\n .attr('src', slide.src)\n .appendTo( slide.$content );\n\n if ( ( $img[0].complete || $img[0].readyState == \"complete\" ) && $img[0].naturalWidth && $img[0].naturalHeight ) {\n $img.trigger( 'load' );\n\n } else if( $img[0].error ) {\n $img.trigger( 'error' );\n\n } else {\n\n slide.timouts = setTimeout(function() {\n if ( !$img[0].complete && !slide.hasError ) {\n self.showLoading( slide );\n }\n\n }, 100);\n\n }\n\n },\n\n\n // Create iframe wrapper, iframe and bindings\n // ==========================================\n\n setIframe : function( slide ) {\n var self\t= this,\n opts = slide.opts.iframe,\n $slide\t= slide.$slide,\n $iframe;\n\n slide.$content = $('
')\n .css( opts.css )\n .appendTo( $slide );\n\n $iframe = $( opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()) )\n .attr( opts.attr )\n .appendTo( slide.$content );\n\n if ( opts.preload ) {\n\n self.showLoading( slide );\n\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\n // (due to browser security policy)\n\n $iframe.on('load.fb error.fb', function(e) {\n this.isReady = 1;\n\n slide.$slide.trigger( 'refresh' );\n\n self.afterLoad( slide );\n });\n\n // Recalculate iframe content size\n // ===============================\n\n $slide.on('refresh.fb', function() {\n var $wrap = slide.$content,\n frameWidth = opts.css.width,\n frameHeight = opts.css.height,\n scrollWidth,\n $contents,\n $body;\n\n if ( $iframe[0].isReady !== 1 ) {\n return;\n }\n\n // Check if content is accessible,\n // it will fail if frame is not with the same origin\n\n try {\n $contents = $iframe.contents();\n $body = $contents.find('body');\n\n } catch (ignore) {}\n\n // Calculate dimensions for the wrapper\n if ( $body && $body.length ) {\n\n if ( frameWidth === undefined ) {\n scrollWidth = $iframe[0].contentWindow.document.documentElement.scrollWidth;\n\n frameWidth = Math.ceil( $body.outerWidth(true) + ( $wrap.width() - scrollWidth ) );\n frameWidth += $wrap.outerWidth() - $wrap.innerWidth();\n }\n\n if ( frameHeight === undefined ) {\n frameHeight = Math.ceil( $body.outerHeight(true) );\n frameHeight += $wrap.outerHeight() - $wrap.innerHeight();\n }\n\n // Resize wrapper to fit iframe content\n if ( frameWidth ) {\n $wrap.width( frameWidth );\n }\n\n if ( frameHeight ) {\n $wrap.height( frameHeight );\n }\n }\n\n $wrap.removeClass( 'fancybox-is-hidden' );\n\n });\n\n } else {\n\n this.afterLoad( slide );\n\n }\n\n $iframe.attr( 'src', slide.src );\n\n if ( slide.opts.smallBtn === true ) {\n slide.$content.prepend( self.translate( slide, slide.opts.btnTpl.smallBtn ) );\n }\n\n // Remove iframe if closing or changing gallery item\n $slide.one( 'onReset', function () {\n\n // This helps IE not to throw errors when closing\n try {\n\n $( this ).find( 'iframe' ).hide().attr( 'src', '//about:blank' );\n\n } catch ( ignore ) {}\n\n $( this ).empty();\n\n slide.isLoaded = false;\n\n });\n\n },\n\n\n // Wrap and append content to the slide\n // ======================================\n\n setContent : function ( slide, content ) {\n\n var self = this;\n\n if ( self.isClosing ) {\n return;\n }\n\n self.hideLoading( slide );\n\n slide.$slide.empty();\n\n if ( isQuery( content ) && content.parent().length ) {\n\n // If content is a jQuery object, then it will be moved to the slide.\n // The placeholder is created so we will know where to put it back.\n // If user is navigating gallery fast, then the content might be already inside fancyBox\n // =====================================================================================\n\n // Make sure content is not already moved to fancyBox\n content.parent( '.fancybox-slide--inline' ).trigger( 'onReset' );\n\n // Create temporary element marking original place of the content\n slide.$placeholder = $( '
' ).hide().insertAfter( content );\n\n // Make sure content is visible\n content.css('display', 'inline-block');\n\n } else if ( !slide.hasError ) {\n\n // If content is just a plain text, try to convert it to html\n if ( $.type( content ) === 'string' ) {\n content = $('
').append( $.trim( content ) ).contents();\n\n // If we have text node, then add wrapping element to make vertical alignment work\n if ( content[0].nodeType === 3 ) {\n content = $('
').html( content );\n }\n }\n\n // If \"filter\" option is provided, then filter content\n if ( slide.opts.filter ) {\n content = $('
').html( content ).find( slide.opts.filter );\n }\n\n }\n\n slide.$slide.one('onReset', function () {\n\n // Put content back\n if ( slide.$placeholder ) {\n slide.$placeholder.after( content.hide() ).remove();\n\n slide.$placeholder = null;\n }\n\n // Remove custom close button\n if ( slide.$smallBtn ) {\n slide.$smallBtn.remove();\n\n slide.$smallBtn = null;\n }\n\n // Remove content and mark slide as not loaded\n if ( !slide.hasError ) {\n $(this).empty();\n\n slide.isLoaded = false;\n }\n\n });\n\n slide.$content = $( content ).appendTo( slide.$slide );\n\n this.afterLoad( slide );\n },\n\n // Display error message\n // =====================\n\n setError : function ( slide ) {\n\n slide.hasError = true;\n\n slide.$slide.removeClass( 'fancybox-slide--' + slide.type );\n\n this.setContent( slide, this.translate( slide, slide.opts.errorTpl ) );\n\n },\n\n\n // Show loading icon inside the slide\n // ==================================\n\n showLoading : function( slide ) {\n\n var self = this;\n\n slide = slide || self.current;\n\n if ( slide && !slide.$spinner ) {\n slide.$spinner = $( self.opts.spinnerTpl ).appendTo( slide.$slide );\n }\n\n },\n\n // Remove loading icon from the slide\n // ==================================\n\n hideLoading : function( slide ) {\n\n var self = this;\n\n slide = slide || self.current;\n\n if ( slide && slide.$spinner ) {\n slide.$spinner.remove();\n\n delete slide.$spinner;\n }\n\n },\n\n\n // Adjustments after slide content has been loaded\n // ===============================================\n\n afterLoad : function( slide ) {\n\n var self = this;\n\n if ( self.isClosing ) {\n return;\n }\n\n slide.isLoading = false;\n slide.isLoaded = true;\n\n self.trigger( 'afterLoad', slide );\n\n self.hideLoading( slide );\n\n if ( slide.opts.smallBtn && !slide.$smallBtn ) {\n slide.$smallBtn = $( self.translate( slide, slide.opts.btnTpl.smallBtn ) ).appendTo( slide.$content.filter('div,form').first() );\n }\n\n if ( slide.opts.protect && slide.$content && !slide.hasError ) {\n\n // Disable right click\n slide.$content.on( 'contextmenu.fb', function( e ) {\n if ( e.button == 2 ) {\n e.preventDefault();\n }\n\n return true;\n });\n\n // Add fake element on top of the image\n // This makes a bit harder for user to select image\n if ( slide.type === 'image' ) {\n $( '
' ).appendTo( slide.$content );\n }\n\n }\n\n self.revealContent( slide );\n\n },\n\n\n // Make content visible\n // This method is called right after content has been loaded or\n // user navigates gallery and transition should start\n // ============================================================\n\n revealContent : function( slide ) {\n\n var self = this;\n var $slide = slide.$slide;\n\n var effect, effectClassName, duration, opacity, end, start = false;\n\n effect = slide.opts[ self.firstRun ? 'animationEffect' : 'transitionEffect' ];\n duration = slide.opts[ self.firstRun ? 'animationDuration' : 'transitionDuration' ];\n\n duration = parseInt( slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10 );\n\n if ( slide.isMoved || slide.pos !== self.currPos || !duration ) {\n effect = false;\n }\n\n // Check if can zoom\n if ( effect === 'zoom' && !( slide.pos === self.currPos && duration && slide.type === 'image' && !slide.hasError && ( start = self.getThumbPos( slide ) ) ) ) {\n effect = 'fade';\n }\n\n // Zoom animation\n // ==============\n\n if ( effect === 'zoom' ) {\n end = self.getFitPos( slide );\n\n end.scaleX = end.width / start.width;\n end.scaleY = end.height / start.height;\n\n delete end.width;\n delete end.height;\n\n // Check if we need to animate opacity\n opacity = slide.opts.zoomOpacity;\n\n if ( opacity == 'auto' ) {\n opacity = Math.abs( slide.width / slide.height - start.width / start.height ) > 0.1;\n }\n\n if ( opacity ) {\n start.opacity = 0.1;\n end.opacity = 1;\n }\n\n // Draw image at start position\n $.fancybox.setTranslate( slide.$content.removeClass( 'fancybox-is-hidden' ), start );\n\n forceRedraw( slide.$content );\n\n // Start animation\n $.fancybox.animate( slide.$content, end, duration, function() {\n self.complete();\n });\n\n return;\n }\n\n self.updateSlide( slide );\n\n\n // Simply show content\n // ===================\n\n if ( !effect ) {\n forceRedraw( $slide );\n\n slide.$content.removeClass( 'fancybox-is-hidden' );\n\n if ( slide.pos === self.currPos ) {\n self.complete();\n }\n\n return;\n }\n\n $.fancybox.stop( $slide );\n\n effectClassName = 'fancybox-animated fancybox-slide--' + ( slide.pos >= self.prevPos ? 'next' : 'previous' ) + ' fancybox-fx-' + effect;\n\n $slide.removeAttr( 'style' ).removeClass( 'fancybox-slide--current fancybox-slide--next fancybox-slide--previous' ).addClass( effectClassName );\n\n slide.$content.removeClass( 'fancybox-is-hidden' );\n\n //Force reflow for CSS3 transitions\n forceRedraw( $slide );\n\n $.fancybox.animate( $slide, 'fancybox-slide--current', duration, function(e) {\n $slide.removeClass( effectClassName ).removeAttr( 'style' );\n\n if ( slide.pos === self.currPos ) {\n self.complete();\n }\n\n }, true);\n\n },\n\n\n // Check if we can and have to zoom from thumbnail\n //================================================\n\n getThumbPos : function( slide ) {\n\n var self = this;\n var rez = false;\n\n // Check if element is inside the viewport by at least 1 pixel\n var isElementVisible = function( $el ) {\n var element = $el[0];\n\n var elementRect = element.getBoundingClientRect();\n var parentRects = [];\n\n var visibleInAllParents;\n\n while ( element.parentElement !== null ) {\n if ( $(element.parentElement).css('overflow') === 'hidden' || $(element.parentElement).css('overflow') === 'auto' ) {\n parentRects.push(element.parentElement.getBoundingClientRect());\n }\n\n element = element.parentElement;\n }\n\n visibleInAllParents = parentRects.every(function(parentRect){\n var visiblePixelX = Math.min(elementRect.right, parentRect.right) - Math.max(elementRect.left, parentRect.left);\n var visiblePixelY = Math.min(elementRect.bottom, parentRect.bottom) - Math.max(elementRect.top, parentRect.top);\n\n return visiblePixelX > 0 && visiblePixelY > 0;\n });\n\n return visibleInAllParents &&\n elementRect.bottom > 0 && elementRect.right > 0 &&\n elementRect.left < $(window).width() && elementRect.top < $(window).height();\n };\n\n var $thumb = slide.opts.$thumb;\n var thumbPos = $thumb ? $thumb.offset() : 0;\n var slidePos;\n\n if ( thumbPos && $thumb[0].ownerDocument === document && isElementVisible( $thumb ) ) {\n slidePos = self.$refs.stage.offset();\n\n rez = {\n top : thumbPos.top - slidePos.top + parseFloat( $thumb.css( \"border-top-width\" ) || 0 ),\n left : thumbPos.left - slidePos.left + parseFloat( $thumb.css( \"border-left-width\" ) || 0 ),\n width : $thumb.width(),\n height : $thumb.height(),\n scaleX : 1,\n scaleY : 1\n };\n }\n\n return rez;\n },\n\n\n // Final adjustments after current gallery item is moved to position\n // and it`s content is loaded\n // ==================================================================\n\n complete : function() {\n\n var self = this;\n\n var current = self.current;\n var slides = {};\n\n if ( current.isMoved || !current.isLoaded || current.isComplete ) {\n return;\n }\n\n current.isComplete = true;\n\n current.$slide.siblings().trigger( 'onReset' );\n\n // Trigger any CSS3 transiton inside the slide\n forceRedraw( current.$slide );\n\n current.$slide.addClass( 'fancybox-slide--complete' );\n\n // Remove unnecessary slides\n $.each( self.slides, function( key, slide ) {\n if ( slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1 ) {\n slides[ slide.pos ] = slide;\n\n } else if ( slide ) {\n\n $.fancybox.stop( slide.$slide );\n\n slide.$slide.off().remove();\n }\n });\n\n self.slides = slides;\n\n self.updateCursor();\n\n self.trigger( 'afterShow' );\n\n // Try to focus on the first focusable element\n if ( $( document.activeElement ).is( '[disabled]' ) || ( current.opts.autoFocus && !( current.type == 'image' || current.type === 'iframe' ) ) ) {\n self.focus();\n }\n\n },\n\n\n // Preload next and previous slides\n // ================================\n\n preload : function() {\n var self = this;\n var next, prev;\n\n if ( self.group.length < 2 ) {\n return;\n }\n\n next = self.slides[ self.currPos + 1 ];\n prev = self.slides[ self.currPos - 1 ];\n\n if ( next && next.type === 'image' ) {\n self.loadSlide( next );\n }\n\n if ( prev && prev.type === 'image' ) {\n self.loadSlide( prev );\n }\n\n },\n\n\n // Try to find and focus on the first focusable element\n // ====================================================\n\n focus : function() {\n var current = this.current;\n var $el;\n\n if ( this.isClosing ) {\n return;\n }\n\n if ( current && current.isComplete ) {\n\n // Look for first input with autofocus attribute\n $el = current.$slide.find('input[autofocus]:enabled:visible:first');\n\n if ( !$el.length ) {\n $el = current.$slide.find('button,:input,[tabindex],a').filter(':enabled:visible:first');\n }\n }\n\n $el = $el && $el.length ? $el : this.$refs.container;\n\n $el.focus();\n },\n\n\n // Activates current instance - brings container to the front and enables keyboard,\n // notifies other instances about deactivating\n // =================================================================================\n\n activate : function () {\n var self = this;\n\n // Deactivate all instances\n $( '.fancybox-container' ).each(function () {\n var instance = $(this).data( 'FancyBox' );\n\n // Skip self and closing instances\n if (instance && instance.id !== self.id && !instance.isClosing) {\n instance.trigger( 'onDeactivate' );\n\n instance.removeEvents();\n\n instance.isVisible = false;\n }\n\n });\n\n self.isVisible = true;\n\n if ( self.current || self.isIdle ) {\n self.update();\n\n self.updateControls();\n }\n\n self.trigger( 'onActivate' );\n\n self.addEvents();\n },\n\n\n // Start closing procedure\n // This will start \"zoom-out\" animation if needed and clean everything up afterwards\n // =================================================================================\n\n close : function( e, d ) {\n\n var self = this;\n var current = self.current;\n\n var effect, duration;\n var $what, opacity, start, end;\n\n var done = function() {\n self.cleanUp( e );\n };\n\n if ( self.isClosing ) {\n return false;\n }\n\n self.isClosing = true;\n\n // If beforeClose callback prevents closing, make sure content is centered\n if ( self.trigger( 'beforeClose', e ) === false ) {\n self.isClosing = false;\n\n requestAFrame(function() {\n self.update();\n });\n\n return false;\n }\n\n // Remove all events\n // If there are multiple instances, they will be set again by \"activate\" method\n self.removeEvents();\n\n if ( current.timouts ) {\n clearTimeout( current.timouts );\n }\n\n $what = current.$content;\n effect = current.opts.animationEffect;\n duration = $.isNumeric( d ) ? d : ( effect ? current.opts.animationDuration : 0 );\n\n // Remove other slides\n current.$slide.off( transitionEnd ).removeClass( 'fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated' );\n\n current.$slide.siblings().trigger( 'onReset' ).remove();\n\n // Trigger animations\n if ( duration ) {\n self.$refs.container.removeClass( 'fancybox-is-open' ).addClass( 'fancybox-is-closing' );\n }\n\n // Clean up\n self.hideLoading( current );\n\n self.hideControls();\n\n self.updateCursor();\n\n // Check if possible to zoom-out\n if ( effect === 'zoom' && !( e !== true && $what && duration && current.type === 'image' && !current.hasError && ( end = self.getThumbPos( current ) ) ) ) {\n effect = 'fade';\n }\n\n if ( effect === 'zoom' ) {\n $.fancybox.stop( $what );\n\n start = $.fancybox.getTranslate( $what );\n\n start.width = start.width * start.scaleX;\n start.height = start.height * start.scaleY;\n\n // Check if we need to animate opacity\n opacity = current.opts.zoomOpacity;\n\n if ( opacity == 'auto' ) {\n opacity = Math.abs( current.width / current.height - end.width / end.height ) > 0.1;\n }\n\n if ( opacity ) {\n end.opacity = 0;\n }\n\n start.scaleX = start.width / end.width;\n start.scaleY = start.height / end.height;\n\n start.width = end.width;\n start.height = end.height;\n\n $.fancybox.setTranslate( current.$content, start );\n\n forceRedraw( current.$content );\n\n $.fancybox.animate( current.$content, end, duration, done );\n\n return true;\n }\n\n if ( effect && duration ) {\n\n // If skip animation\n if ( e === true ) {\n setTimeout( done, duration );\n\n } else {\n $.fancybox.animate( current.$slide.removeClass( 'fancybox-slide--current' ), 'fancybox-animated fancybox-slide--previous fancybox-fx-' + effect, duration, done );\n }\n\n } else {\n done();\n }\n\n return true;\n },\n\n\n // Final adjustments after removing the instance\n // =============================================\n\n cleanUp : function( e ) {\n var self = this,\n $body = $( 'body' ),\n instance,\n offset;\n\n self.current.$slide.trigger( 'onReset' );\n\n self.$refs.container.empty().remove();\n\n self.trigger( 'afterClose', e );\n\n // Place back focus\n if ( self.$lastFocus && !!self.current.opts.backFocus ) {\n self.$lastFocus.focus();\n }\n\n self.current = null;\n\n // Check if there are other instances\n instance = $.fancybox.getInstance();\n\n if ( instance ) {\n instance.activate();\n\n } else {\n\n $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );\n\n $body.removeClass( 'fancybox-active compensate-for-scrollbar' );\n\n if ( $body.hasClass( 'fancybox-iosfix' ) ) {\n offset = parseInt(document.body.style.top, 10);\n\n $body.removeClass( 'fancybox-iosfix' ).css( 'top', '' ).scrollTop( offset * -1 );\n }\n\n $( '#fancybox-style-noscroll' ).remove();\n\n }\n\n },\n\n\n // Call callback and trigger an event\n // ==================================\n\n trigger : function( name, slide ) {\n var args = Array.prototype.slice.call(arguments, 1),\n self = this,\n obj = slide && slide.opts ? slide : self.current,\n rez;\n\n if ( obj ) {\n args.unshift( obj );\n\n } else {\n obj = self;\n }\n\n args.unshift( self );\n\n if ( $.isFunction( obj.opts[ name ] ) ) {\n rez = obj.opts[ name ].apply( obj, args );\n }\n\n if ( rez === false ) {\n return rez;\n }\n\n if ( name === 'afterClose' || !self.$refs ) {\n $D.trigger( name + '.fb', args );\n\n } else {\n self.$refs.container.trigger( name + '.fb', args );\n }\n\n },\n\n\n // Update infobar values, navigation button states and reveal caption\n // ==================================================================\n\n updateControls : function ( force ) {\n\n var self = this;\n\n var current = self.current,\n index = current.index,\n caption = current.opts.caption,\n $container = self.$refs.container,\n $caption = self.$refs.caption;\n\n // Recalculate content dimensions\n current.$slide.trigger( 'refresh' );\n\n self.$caption = caption && caption.length ? $caption.html( caption ) : null;\n\n if ( !self.isHiddenControls && !self.isIdle ) {\n self.showControls();\n }\n\n // Update info and navigation elements\n $container.find('[data-fancybox-count]').html( self.group.length );\n $container.find('[data-fancybox-index]').html( index + 1 );\n\n $container.find('[data-fancybox-prev]').prop( 'disabled', ( !current.opts.loop && index <= 0 ) );\n $container.find('[data-fancybox-next]').prop( 'disabled', ( !current.opts.loop && index >= self.group.length - 1 ) );\n\n if ( current.type === 'image' ) {\n\n // Update download button source\n $container.find('[data-fancybox-download]').attr( 'href', current.opts.image.src || current.src ).show();\n\n } else {\n $container.find('[data-fancybox-download],[data-fancybox-zoom]').hide();\n }\n },\n\n // Hide toolbar and caption\n // ========================\n\n hideControls : function () {\n\n this.isHiddenControls = true;\n\n this.$refs.container.removeClass( 'fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav' );\n\n },\n\n showControls : function() {\n var self = this;\n var opts = self.current ? self.current.opts : self.opts;\n var $container = self.$refs.container;\n\n self.isHiddenControls = false;\n self.idleSecondsCounter = 0;\n\n $container\n .toggleClass( 'fancybox-show-toolbar', !!( opts.toolbar && opts.buttons ) )\n .toggleClass( 'fancybox-show-infobar', !!( opts.infobar && self.group.length > 1 ) )\n .toggleClass( 'fancybox-show-nav', !!( opts.arrows && self.group.length > 1 ) )\n .toggleClass( 'fancybox-is-modal', !!opts.modal );\n\n if ( self.$caption ) {\n $container.addClass( 'fancybox-show-caption ');\n\n } else {\n $container.removeClass( 'fancybox-show-caption' );\n }\n\n },\n\n\n // Toggle toolbar and caption\n // ==========================\n\n toggleControls : function() {\n if ( this.isHiddenControls ) {\n this.showControls();\n\n } else {\n this.hideControls();\n }\n\n },\n\n\n });\n\n\n $.fancybox = {\n\n version : \"3.2.5\",\n defaults : defaults,\n\n\n // Get current instance and execute a command.\n //\n // Examples of usage:\n //\n // $instance = $.fancybox.getInstance();\n // $.fancybox.getInstance().jumpTo( 1 );\n // $.fancybox.getInstance( 'jumpTo', 1 );\n // $.fancybox.getInstance( function() {\n // console.info( this.currIndex );\n // });\n // ======================================================\n\n getInstance : function ( command ) {\n var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data( 'FancyBox' );\n var args = Array.prototype.slice.call(arguments, 1);\n\n if ( instance instanceof FancyBox ) {\n\n if ( $.type( command ) === 'string' ) {\n instance[ command ].apply( instance, args );\n\n } else if ( $.type( command ) === 'function' ) {\n command.apply( instance, args );\n }\n\n return instance;\n }\n\n return false;\n\n },\n\n\n // Create new instance\n // ===================\n\n open : function ( items, opts, index ) {\n return new FancyBox( items, opts, index );\n },\n\n\n // Close current or all instances\n // ==============================\n\n close : function ( all ) {\n var instance = this.getInstance();\n\n if ( instance ) {\n instance.close();\n\n // Try to find and close next instance\n\n if ( all === true ) {\n this.close();\n }\n }\n\n },\n\n // Close instances and unbind all events\n // ==============================\n\n destroy : function() {\n\n this.close( true );\n\n $D.off( 'click.fb-start' );\n\n },\n\n\n // Try to detect mobile devices\n // ============================\n\n isMobile : document.createTouch !== undefined && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\n\n\n // Detect if 'translate3d' support is available\n // ============================================\n\n use3d : (function() {\n var div = document.createElement('div');\n\n return window.getComputedStyle && window.getComputedStyle( div ).getPropertyValue('transform') && !(document.documentMode && document.documentMode < 11);\n }()),\n\n // Helper function to get current visual state of an element\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\n // =====================================================================\n\n getTranslate : function( $el ) {\n var matrix;\n\n if ( !$el || !$el.length ) {\n return false;\n }\n\n matrix = $el.eq( 0 ).css('transform');\n\n if ( matrix && matrix.indexOf( 'matrix' ) !== -1 ) {\n matrix = matrix.split('(')[1];\n matrix = matrix.split(')')[0];\n matrix = matrix.split(',');\n } else {\n matrix = [];\n }\n\n if ( matrix.length ) {\n\n // If IE\n if ( matrix.length > 10 ) {\n matrix = [ matrix[13], matrix[12], matrix[0], matrix[5] ];\n\n } else {\n matrix = [ matrix[5], matrix[4], matrix[0], matrix[3]];\n }\n\n matrix = matrix.map(parseFloat);\n\n } else {\n matrix = [ 0, 0, 1, 1 ];\n\n var transRegex = /\\.*translate\\((.*)px,(.*)px\\)/i;\n var transRez = transRegex.exec( $el.eq( 0 ).attr('style') );\n\n if ( transRez ) {\n matrix[ 0 ] = parseFloat( transRez[2] );\n matrix[ 1 ] = parseFloat( transRez[1] );\n }\n }\n\n return {\n top : matrix[ 0 ],\n left : matrix[ 1 ],\n scaleX : matrix[ 2 ],\n scaleY : matrix[ 3 ],\n opacity : parseFloat( $el.css('opacity') ),\n width : $el.width(),\n height : $el.height()\n };\n\n },\n\n\n // Shortcut for setting \"translate3d\" properties for element\n // Can set be used to set opacity, too\n // ========================================================\n\n setTranslate : function( $el, props ) {\n var str = '';\n var css = {};\n\n if ( !$el || !props ) {\n return;\n }\n\n if ( props.left !== undefined || props.top !== undefined ) {\n str = ( props.left === undefined ? $el.position().left : props.left ) + 'px, ' + ( props.top === undefined ? $el.position().top : props.top ) + 'px';\n\n if ( this.use3d ) {\n str = 'translate3d(' + str + ', 0px)';\n\n } else {\n str = 'translate(' + str + ')';\n }\n }\n\n if ( props.scaleX !== undefined && props.scaleY !== undefined ) {\n str = (str.length ? str + ' ' : '') + 'scale(' + props.scaleX + ', ' + props.scaleY + ')';\n }\n\n if ( str.length ) {\n css.transform = str;\n }\n\n if ( props.opacity !== undefined ) {\n css.opacity = props.opacity;\n }\n\n if ( props.width !== undefined ) {\n css.width = props.width;\n }\n\n if ( props.height !== undefined ) {\n css.height = props.height;\n }\n\n return $el.css( css );\n },\n\n\n // Simple CSS transition handler\n // =============================\n\n animate : function ( $el, to, duration, callback, leaveAnimationName ) {\n if ( $.isFunction( duration ) ) {\n callback = duration;\n duration = null;\n }\n\n if ( !$.isPlainObject( to ) ) {\n $el.removeAttr('style');\n }\n\n $el.on( transitionEnd, function(e) {\n\n // Skip events from child elements and z-index change\n if ( e && e.originalEvent && ( !$el.is( e.originalEvent.target ) || e.originalEvent.propertyName == 'z-index' ) ) {\n return;\n }\n\n $.fancybox.stop( $el );\n\n if ( $.isPlainObject( to ) ) {\n\n if ( to.scaleX !== undefined && to.scaleY !== undefined ) {\n $el.css( 'transition-duration', '' );\n\n to.width = Math.round( $el.width() * to.scaleX );\n to.height = Math.round( $el.height() * to.scaleY );\n\n to.scaleX = 1;\n to.scaleY = 1;\n\n $.fancybox.setTranslate( $el, to );\n }\n\n } else if ( leaveAnimationName !== true ) {\n $el.removeClass( to );\n }\n\n if ( $.isFunction( callback ) ) {\n callback( e );\n }\n\n });\n\n if ( $.isNumeric( duration ) ) {\n $el.css( 'transition-duration', duration + 'ms' );\n }\n\n if ( $.isPlainObject( to ) ) {\n $.fancybox.setTranslate( $el, to );\n\n } else {\n $el.addClass( to );\n }\n\n if ( to.scaleX && $el.hasClass( 'fancybox-image-wrap' ) ) {\n $el.parent().addClass( 'fancybox-is-scaling' );\n }\n\n // Make sure that `transitionend` callback gets fired\n $el.data(\"timer\", setTimeout(function() {\n $el.trigger( 'transitionend' );\n }, duration + 16));\n\n },\n\n stop : function( $el ) {\n clearTimeout( $el.data(\"timer\") );\n\n $el.off( 'transitionend' ).css( 'transition-duration', '' );\n\n if ( $el.hasClass( 'fancybox-image-wrap' ) ) {\n $el.parent().removeClass( 'fancybox-is-scaling' );\n }\n }\n\n };\n\n\n // Default click handler for \"fancyboxed\" links\n // ============================================\n\n function _run( e ) {\n var $target\t= $( e.currentTarget ),\n opts\t= e.data ? e.data.options : {},\n value\t= $target.attr( 'data-fancybox' ) || '',\n index\t= 0,\n items = [];\n\n // Avoid opening multiple times\n if ( e.isDefaultPrevented() ) {\n return;\n }\n\n e.preventDefault();\n\n // Get all related items and find index for clicked one\n if ( value ) {\n items = opts.selector ? $( opts.selector ) : ( e.data ? e.data.items : [] );\n items = items.length ? items.filter( '[data-fancybox=\"' + value + '\"]' ) : $( '[data-fancybox=\"' + value + '\"]' );\n\n index = items.index( $target );\n\n // Sometimes current item can not be found\n // (for example, when slider clones items)\n if ( index < 0 ) {\n index = 0;\n }\n\n } else {\n items = [ $target ];\n }\n\n $.fancybox.open( items, opts, index );\n }\n\n\n // Create a jQuery plugin\n // ======================\n\n $.fn.fancybox = function (options) {\n var selector;\n\n options = options || {};\n selector = options.selector || false;\n\n if ( selector ) {\n\n $( 'body' ).off( 'click.fb-start', selector ).on( 'click.fb-start', selector, {\n options : options\n }, _run );\n\n } else {\n\n this.off( 'click.fb-start' ).on( 'click.fb-start', {\n items : this,\n options : options\n }, _run);\n\n }\n\n return this;\n };\n\n\n // Self initializing plugin\n // ========================\n\n $D.on( 'click.fb-start', '[data-fancybox]', _run );\n\n}( window, document, window.jQuery || jQuery ));\n\n// ==========================================================================\n//\n// Media\n// Adds additional media type support\n//\n// ==========================================================================\n;(function ($) {\n\n\t'use strict';\n\n\t// Formats matching url to final form\n\n\tvar format = function (url, rez, params) {\n\t\tif ( !url ) {\n\t\t\treturn;\n\t\t}\n\n\t\tparams = params || '';\n\n\t\tif ( $.type(params) === \"object\" ) {\n\t\t\tparams = $.param(params, true);\n\t\t}\n\n\t\t$.each(rez, function (key, value) {\n\t\t\turl = url.replace('$' + key, value || '');\n\t\t});\n\n\t\tif (params.length) {\n\t\t\turl += (url.indexOf('?') > 0 ? '&' : '?') + params;\n\t\t}\n\n\t\treturn url;\n\t};\n\n\t// Object containing properties for each media type\n\n\tvar defaults = {\n\t\tyoutube : {\n\t\t\tmatcher : /(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,\n\t\t\tparams : {\n\t\t\t\tautoplay : 1,\n\t\t\t\tautohide : 1,\n\t\t\t\tfs : 1,\n\t\t\t\trel : 0,\n\t\t\t\thd : 1,\n\t\t\t\twmode : 'transparent',\n\t\t\t\tenablejsapi : 1,\n\t\t\t\thtml5 : 1\n\t\t\t},\n\t\t\tparamPlace : 8,\n\t\t\ttype : 'iframe',\n\t\t\turl : '//www.youtube.com/embed/$4',\n\t\t\tthumb : '//img.youtube.com/vi/$4/hqdefault.jpg'\n\t\t},\n\n\t\tvimeo : {\n\t\t\tmatcher : /^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,\n\t\t\tparams : {\n\t\t\t\tautoplay : 1,\n\t\t\t\thd : 1,\n\t\t\t\tshow_title : 1,\n\t\t\t\tshow_byline : 1,\n\t\t\t\tshow_portrait : 0,\n\t\t\t\tfullscreen : 1,\n\t\t\t\tapi : 1\n\t\t\t},\n\t\t\tparamPlace : 3,\n\t\t\ttype : 'iframe',\n\t\t\turl : '//player.vimeo.com/video/$2'\n\t\t},\n\n\t\tmetacafe : {\n\t\t\tmatcher : /metacafe.com\\/watch\\/(\\d+)\\/(.*)?/,\n\t\t\ttype : 'iframe',\n\t\t\turl : '//www.metacafe.com/embed/$1/?ap=1'\n\t\t},\n\n\t\tdailymotion : {\n\t\t\tmatcher : /dailymotion.com\\/video\\/(.*)\\/?(.*)/,\n\t\t\tparams : {\n\t\t\t\tadditionalInfos : 0,\n\t\t\t\tautoStart : 1\n\t\t\t},\n\t\t\ttype : 'iframe',\n\t\t\turl : '//www.dailymotion.com/embed/video/$1'\n\t\t},\n\n\t\tvine : {\n\t\t\tmatcher : /vine.co\\/v\\/([a-zA-Z0-9\\?\\=\\-]+)/,\n\t\t\ttype : 'iframe',\n\t\t\turl : '//vine.co/v/$1/embed/simple'\n\t\t},\n\n\t\tinstagram : {\n\t\t\tmatcher : /(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,\n\t\t\ttype : 'image',\n\t\t\turl : '//$1/p/$2/media/?size=l'\n\t\t},\n\n\t\t// Examples:\n\t\t// http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\n\t\t// https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\n\t\t// https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\n\t\tgmap_place : {\n\t\t\tmatcher : /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,\n\t\t\ttype : 'iframe',\n\t\t\turl : function (rez) {\n\t\t\t\treturn '//maps.google.' + rez[2] + '/?ll=' + ( rez[9] ? rez[9] + '&z=' + Math.floor( rez[10] ) + ( rez[12] ? rez[12].replace(/^\\//, \"&\") : '' ) : rez[12] ) + '&output=' + ( rez[12] && rez[12].indexOf('layer=c') > 0 ? 'svembed' : 'embed' );\n\t\t\t}\n\t\t},\n\n\t\t// Examples:\n\t\t// https://www.google.com/maps/search/Empire+State+Building/\n\t\t// https://www.google.com/maps/search/?api=1&query=centurylink+field\n\t\t// https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\n\t\tgmap_search : {\n\t\t\tmatcher : /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,\n\t\t\ttype : 'iframe',\n\t\t\turl : function (rez) {\n\t\t\t\treturn '//maps.google.' + rez[2] + '/maps?q=' + rez[5].replace('query=', 'q=').replace('api=1', '') + '&output=embed';\n\t\t\t}\n\t\t}\n\t};\n\n\t$(document).on('objectNeedsType.fb', function (e, instance, item) {\n\n\t\tvar url\t = item.src || '',\n\t\t\ttype = false,\n\t\t\tmedia,\n\t\t\tthumb,\n\t\t\trez,\n\t\t\tparams,\n\t\t\turlParams,\n\t\t\tparamObj,\n\t\t\tprovider;\n\n\t\tmedia = $.extend( true, {}, defaults, item.opts.media );\n\n\t\t// Look for any matching media type\n\t\t$.each(media, function ( providerName, providerOpts ) {\n\t\t\trez = url.match( providerOpts.matcher );\n\n\t\t\tif ( !rez ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttype = providerOpts.type;\n\t\t\tparamObj = {};\n\n\t\t\tif ( providerOpts.paramPlace && rez[ providerOpts.paramPlace ] ) {\n\t\t\t\turlParams = rez[ providerOpts.paramPlace ];\n\n\t\t\t\tif ( urlParams[ 0 ] == '?' ) {\n\t\t\t\t\turlParams = urlParams.substring(1);\n\t\t\t\t}\n\n\t\t\t\turlParams = urlParams.split('&');\n\n\t\t\t\tfor ( var m = 0; m < urlParams.length; ++m ) {\n\t\t\t\t\tvar p = urlParams[ m ].split('=', 2);\n\n\t\t\t\t\tif ( p.length == 2 ) {\n\t\t\t\t\t\tparamObj[ p[0] ] = decodeURIComponent( p[1].replace(/\\+/g, \" \") );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tparams = $.extend( true, {}, providerOpts.params, item.opts[ providerName ], paramObj );\n\n\t\t\turl = $.type( providerOpts.url ) === \"function\" ? providerOpts.url.call( this, rez, params, item ) : format( providerOpts.url, rez, params );\n\t\t\tthumb = $.type( providerOpts.thumb ) === \"function\" ? providerOpts.thumb.call( this, rez, params, item ) : format( providerOpts.thumb, rez );\n\n\t\t\tif ( providerName === 'vimeo' ) {\n\t\t\t\turl = url.replace('&%23', '#');\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\t// If it is found, then change content type and update the url\n\n\t\tif ( type ) {\n\t\t\titem.src = url;\n\t\t\titem.type = type;\n\n\t\t\tif ( !item.opts.thumb && !( item.opts.$thumb && item.opts.$thumb.length ) ) {\n\t\t\t\titem.opts.thumb = thumb;\n\t\t\t}\n\n\t\t\tif ( type === 'iframe' ) {\n\t\t\t\t$.extend(true, item.opts, {\n\t\t\t\t\tiframe : {\n\t\t\t\t\t\tpreload : false,\n\t\t\t\t\t\tattr : {\n\t\t\t\t\t\t\tscrolling : \"no\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\titem.contentProvider = provider;\n\n\t\t\t\titem.opts.slideClass += ' fancybox-slide--' + ( provider == 'gmap_place' || provider == 'gmap_search' ? 'map' : 'video' );\n\t\t\t}\n\n\t\t} else if ( url ) {\n\t\t\titem.type = item.opts.defaultType;\n\t\t}\n\n\t});\n\n}( window.jQuery || jQuery ));\n\n// ==========================================================================\n//\n// Guestures\n// Adds touch guestures, handles click and tap events\n//\n// ==========================================================================\n;(function (window, document, $) {\n\t'use strict';\n\n\tvar requestAFrame = (function () {\n return window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n // if all else fails, use setTimeout\n function (callback) {\n return window.setTimeout(callback, 1000 / 60);\n };\n })();\n\n\n var cancelAFrame = (function () {\n return window.cancelAnimationFrame ||\n window.webkitCancelAnimationFrame ||\n window.mozCancelAnimationFrame ||\n window.oCancelAnimationFrame ||\n function (id) {\n window.clearTimeout(id);\n };\n })();\n\n\n\tvar pointers = function( e ) {\n\t\tvar result = [];\n\n\t\te = e.originalEvent || e || window.e;\n\t\te = e.touches && e.touches.length ? e.touches : ( e.changedTouches && e.changedTouches.length ? e.changedTouches : [ e ] );\n\n\t\tfor ( var key in e ) {\n\n\t\t\tif ( e[ key ].pageX ) {\n\t\t\t\tresult.push( { x : e[ key ].pageX, y : e[ key ].pageY } );\n\n\t\t\t} else if ( e[ key ].clientX ) {\n\t\t\t\tresult.push( { x : e[ key ].clientX, y : e[ key ].clientY } );\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tvar distance = function( point2, point1, what ) {\n\t\tif ( !point1 || !point2 ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tif ( what === 'x' ) {\n\t\t\treturn point2.x - point1.x;\n\n\t\t} else if ( what === 'y' ) {\n\t\t\treturn point2.y - point1.y;\n\t\t}\n\n\t\treturn Math.sqrt( Math.pow( point2.x - point1.x, 2 ) + Math.pow( point2.y - point1.y, 2 ) );\n\t};\n\n\tvar isClickable = function( $el ) {\n\n\t\tif ( $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea') || $.isFunction( $el.get(0).onclick ) || $el.data('selectable') ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Check for attributes like data-fancybox-next or data-fancybox-close\n\t\tfor ( var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++ ) {\n if ( atts[i].nodeName.substr(0, 14) === 'data-fancybox-' ) {\n return true;\n }\n }\n\n\t \treturn false;\n\t};\n\n\tvar hasScrollbars = function( el ) {\n\t\tvar overflowY = window.getComputedStyle( el )['overflow-y'];\n\t\tvar overflowX = window.getComputedStyle( el )['overflow-x'];\n\n\t\tvar vertical = (overflowY === 'scroll' || overflowY === 'auto') && el.scrollHeight > el.clientHeight;\n\t\tvar horizontal = (overflowX === 'scroll' || overflowX === 'auto') && el.scrollWidth > el.clientWidth;\n\n\t\treturn vertical || horizontal;\n\t};\n\n\tvar isScrollable = function ( $el ) {\n\t\tvar rez = false;\n\n\t\twhile ( true ) {\n\t\t\trez\t= hasScrollbars( $el.get(0) );\n\n\t\t\tif ( rez ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t$el = $el.parent();\n\n\t\t\tif ( !$el.length || $el.hasClass( 'fancybox-stage' ) || $el.is( 'body' ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn rez;\n\t};\n\n\n\tvar Guestures = function ( instance ) {\n\t\tvar self = this;\n\n\t\tself.instance = instance;\n\n\t\tself.$bg = instance.$refs.bg;\n\t\tself.$stage = instance.$refs.stage;\n\t\tself.$container = instance.$refs.container;\n\n\t\tself.destroy();\n\n\t\tself.$container.on( 'touchstart.fb.touch mousedown.fb.touch', $.proxy(self, 'ontouchstart') );\n\t};\n\n\tGuestures.prototype.destroy = function() {\n\t\tthis.$container.off( '.fb.touch' );\n\t};\n\n\tGuestures.prototype.ontouchstart = function( e ) {\n\t\tvar self = this;\n\n\t\tvar $target = $( e.target );\n\t\tvar instance = self.instance;\n\t\tvar current = instance.current;\n\t\tvar $content = current.$content;\n\n\t\tvar isTouchDevice = ( e.type == 'touchstart' );\n\n\t\t// Do not respond to both events\n\t\tif ( isTouchDevice ) {\n\t self.$container.off( 'mousedown.fb.touch' );\n\t }\n\n\t\t// Ignore clicks while zooming or closing\n\t\tif ( !current || self.instance.isAnimating || self.instance.isClosing ) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore right click\n\t\tif ( e.originalEvent && e.originalEvent.button == 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore taping on links, buttons, input elements\n\t\tif ( !$target.length || isClickable( $target ) || isClickable( $target.parent() ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore clicks on the scrollbar\n\t\tif ( e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left ) {\n\t\t\treturn;\n\t\t}\n\n\t\tself.startPoints = pointers( e );\n\n\t\t// Prevent zooming if already swiping\n\t\tif ( !self.startPoints || ( self.startPoints.length > 1 && instance.isSliding ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tself.$target = $target;\n\t\tself.$content = $content;\n\t\tself.canTap = true;\n\t\tself.opts = current.opts.touch;\n\n\t\t$(document).off( '.fb.touch' );\n\n\t\t$(document).on( isTouchDevice ? 'touchend.fb.touch touchcancel.fb.touch' : 'mouseup.fb.touch mouseleave.fb.touch', $.proxy(self, \"ontouchend\"));\n\t\t$(document).on( isTouchDevice ? 'touchmove.fb.touch' : 'mousemove.fb.touch', $.proxy(self, \"ontouchmove\"));\n\n\t\tif ( !(self.opts || instance.canPan() ) || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {\n\n\t\t\t// Prevent ghosting\n\t\t\tif ( $target.is('img') ) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\te.stopPropagation();\n\n\t\tif ( !( $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) ) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tself.canvasWidth = Math.round( current.$slide[0].clientWidth );\n\t\tself.canvasHeight = Math.round( current.$slide[0].clientHeight );\n\n\t\tself.startTime = new Date().getTime();\n\t\tself.distanceX = self.distanceY = self.distance = 0;\n\n\t\tself.isPanning = false;\n\t\tself.isSwiping = false;\n\t\tself.isZooming = false;\n\n\t\tself.sliderStartPos = self.sliderLastPos || { top: 0, left: 0 };\n\t\tself.contentStartPos = $.fancybox.getTranslate( self.$content );\n\t\tself.contentLastPos = null;\n\n\t\tif ( self.startPoints.length === 1 && !self.isZooming ) {\n\t\t\tself.canTap = !instance.isSliding;\n\n\t\t\tif ( current.type === 'image' && ( self.contentStartPos.width > self.canvasWidth + 1 || self.contentStartPos.height > self.canvasHeight + 1 ) ) {\n\n\t\t\t\t$.fancybox.stop( self.$content );\n\n\t\t\t\tself.$content.css( 'transition-duration', '0ms' );\n\n\t\t\t\tself.isPanning = true;\n\n\t\t\t} else {\n\n\t\t\t\tself.isSwiping = true;\n\t\t\t}\n\n\t\t\tself.$container.addClass('fancybox-controls--isGrabbing');\n\t\t}\n\n\t\tif ( self.startPoints.length === 2 && !instance.isAnimating && !current.hasError && current.type === 'image' && ( current.isLoaded || current.$ghost ) ) {\n\t\t\tself.isZooming = true;\n\n\t\t\tself.isSwiping = false;\n\t\t\tself.isPanning = false;\n\n\t\t\t$.fancybox.stop( self.$content );\n\n\t\t\tself.$content.css( 'transition-duration', '0ms' );\n\n\t\t\tself.centerPointStartX = ( ( self.startPoints[0].x + self.startPoints[1].x ) * 0.5 ) - $(window).scrollLeft();\n\t\t\tself.centerPointStartY = ( ( self.startPoints[0].y + self.startPoints[1].y ) * 0.5 ) - $(window).scrollTop();\n\n\t\t\tself.percentageOfImageAtPinchPointX = ( self.centerPointStartX - self.contentStartPos.left ) / self.contentStartPos.width;\n\t\t\tself.percentageOfImageAtPinchPointY = ( self.centerPointStartY - self.contentStartPos.top ) / self.contentStartPos.height;\n\n\t\t\tself.startDistanceBetweenFingers = distance( self.startPoints[0], self.startPoints[1] );\n\t\t}\n\n\t};\n\n\tGuestures.prototype.ontouchmove = function( e ) {\n\n\t\tvar self = this;\n\n\t\tself.newPoints = pointers( e );\n\n\t\tif ( $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) {\n\t\t\te.stopPropagation();\n\n\t\t\tself.canTap = false;\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !( self.opts || self.instance.canPan() ) || !self.newPoints || !self.newPoints.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tself.distanceX = distance( self.newPoints[0], self.startPoints[0], 'x' );\n\t\tself.distanceY = distance( self.newPoints[0], self.startPoints[0], 'y' );\n\n\t\tself.distance = distance( self.newPoints[0], self.startPoints[0] );\n\n\t\t// Skip false ontouchmove events (Chrome)\n\t\tif ( self.distance > 0 ) {\n\n\t\t\tif ( !( self.$target.is( self.$stage ) || self.$stage.find( self.$target ).length ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\n\t\t\tif ( self.isSwiping ) {\n\t\t\t\tself.onSwipe();\n\n\t\t\t} else if ( self.isPanning ) {\n\t\t\t\tself.onPan();\n\n\t\t\t} else if ( self.isZooming ) {\n\t\t\t\tself.onZoom();\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tGuestures.prototype.onSwipe = function() {\n\n\t\tvar self = this;\n\n\t\tvar swiping = self.isSwiping;\n\t\tvar left = self.sliderStartPos.left || 0;\n\t\tvar angle;\n\n\t\tif ( swiping === true ) {\n\n\t\t\tif ( Math.abs( self.distance ) > 10 ) {\n\n\t\t\t\tself.canTap = false;\n\n\t\t\t\tif ( self.instance.group.length < 2 && self.opts.vertical ) {\n\t\t\t\t\tself.isSwiping = 'y';\n\n\t\t\t\t} else if ( self.instance.isSliding || self.opts.vertical === false || ( self.opts.vertical === 'auto' && $( window ).width() > 800 ) ) {\n\t\t\t\t\tself.isSwiping = 'x';\n\n\t\t\t\t} else {\n\t\t\t\t\tangle = Math.abs( Math.atan2( self.distanceY, self.distanceX ) * 180 / Math.PI );\n\n\t\t\t\t\tself.isSwiping = ( angle > 45 && angle < 135 ) ? 'y' : 'x';\n\t\t\t\t}\n\n\t\t\t\tself.instance.isSliding = self.isSwiping;\n\n\t\t\t\t// Reset points to avoid jumping, because we dropped first swipes to calculate the angle\n\t\t\t\tself.startPoints = self.newPoints;\n\n\t\t\t\t$.each(self.instance.slides, function( index, slide ) {\n\t\t\t\t\t$.fancybox.stop( slide.$slide );\n\n\t\t\t\t\tslide.$slide.css( 'transition-duration', '0ms' );\n\n\t\t\t\t\tslide.inTransition = false;\n\n\t\t\t\t\tif ( slide.pos === self.instance.current.pos ) {\n\t\t\t\t\t\tself.sliderStartPos.left = $.fancybox.getTranslate( slide.$slide ).left;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//self.instance.current.isMoved = true;\n\n\t\t\t\t// Stop slideshow\n\t\t\t\tif ( self.instance.SlideShow && self.instance.SlideShow.isActive ) {\n\t\t\t\t\tself.instance.SlideShow.stop();\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( swiping == 'x' ) {\n\n\t\t\t\t// Sticky edges\n\t\t\t\tif ( self.distanceX > 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === 0 && !self.instance.current.opts.loop ) ) ) {\n\t\t\t\t\tleft = left + Math.pow( self.distanceX, 0.8 );\n\n\t\t\t\t} else if ( self.distanceX < 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop ) ) ) {\n\t\t\t\t\tleft = left - Math.pow( -self.distanceX, 0.8 );\n\n\t\t\t\t} else {\n\t\t\t\t\tleft = left + self.distanceX;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tself.sliderLastPos = {\n\t\t\t\ttop : swiping == 'x' ? 0 : self.sliderStartPos.top + self.distanceY,\n\t\t\t\tleft : left\n\t\t\t};\n\n\t\t\tif ( self.requestId ) {\n\t\t\t\tcancelAFrame( self.requestId );\n\n\t\t\t\tself.requestId = null;\n\t\t\t}\n\n\t\t\tself.requestId = requestAFrame(function() {\n\n\t\t\t\tif ( self.sliderLastPos ) {\n\t\t\t\t\t$.each(self.instance.slides, function( index, slide ) {\n\t\t\t\t\t\tvar pos = slide.pos - self.instance.currPos;\n\n\t\t\t\t\t\t$.fancybox.setTranslate( slide.$slide, {\n\t\t\t\t\t\t\ttop : self.sliderLastPos.top,\n\t\t\t\t\t\t\tleft : self.sliderLastPos.left + ( pos * self.canvasWidth ) + ( pos * slide.opts.gutter )\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tself.$container.addClass( 'fancybox-is-sliding' );\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t}\n\n\t};\n\n\tGuestures.prototype.onPan = function() {\n\n\t\tvar self = this;\n\n\t\tvar newOffsetX, newOffsetY, newPos;\n\n\t\tself.canTap = false;\n\n\t\tif ( self.contentStartPos.width > self.canvasWidth ) {\n\t\t\tnewOffsetX = self.contentStartPos.left + self.distanceX;\n\n\t\t} else {\n\t\t\tnewOffsetX = self.contentStartPos.left;\n\t\t}\n\n\t\tnewOffsetY = self.contentStartPos.top + self.distanceY;\n\n\t\tnewPos = self.limitMovement( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );\n\n\t\tnewPos.scaleX = self.contentStartPos.scaleX;\n\t\tnewPos.scaleY = self.contentStartPos.scaleY;\n\n\t\tself.contentLastPos = newPos;\n\n\t\tif ( self.requestId ) {\n\t\t\tcancelAFrame( self.requestId );\n\n\t\t\tself.requestId = null;\n\t\t}\n\n\t\tself.requestId = requestAFrame(function() {\n\t\t\t$.fancybox.setTranslate( self.$content, self.contentLastPos );\n\t\t});\n\t};\n\n\t// Make panning sticky to the edges\n\tGuestures.prototype.limitMovement = function( newOffsetX, newOffsetY, newWidth, newHeight ) {\n\n\t\tvar self = this;\n\n\t\tvar minTranslateX, minTranslateY, maxTranslateX, maxTranslateY;\n\n\t\tvar canvasWidth = self.canvasWidth;\n\t\tvar canvasHeight = self.canvasHeight;\n\n\t\tvar currentOffsetX = self.contentStartPos.left;\n\t\tvar currentOffsetY = self.contentStartPos.top;\n\n\t\tvar distanceX = self.distanceX;\n\t\tvar distanceY = self.distanceY;\n\n\t\t// Slow down proportionally to traveled distance\n\n\t\tminTranslateX = Math.max(0, canvasWidth * 0.5 - newWidth * 0.5 );\n\t\tminTranslateY = Math.max(0, canvasHeight * 0.5 - newHeight * 0.5 );\n\n\t\tmaxTranslateX = Math.min( canvasWidth - newWidth, canvasWidth * 0.5 - newWidth * 0.5 );\n\t\tmaxTranslateY = Math.min( canvasHeight - newHeight, canvasHeight * 0.5 - newHeight * 0.5 );\n\n\t\tif ( newWidth > canvasWidth ) {\n\n\t\t\t// ->\n\t\t\tif ( distanceX > 0 && newOffsetX > minTranslateX ) {\n\t\t\t\tnewOffsetX = minTranslateX - 1 + Math.pow( -minTranslateX + currentOffsetX + distanceX, 0.8 ) || 0;\n\t\t\t}\n\n\t\t\t// <-\n\t\t\tif ( distanceX < 0 && newOffsetX < maxTranslateX ) {\n\t\t\t\tnewOffsetX = maxTranslateX + 1 - Math.pow( maxTranslateX - currentOffsetX - distanceX, 0.8 ) || 0;\n\t\t\t}\n\n\t\t}\n\n\t\tif ( newHeight > canvasHeight ) {\n\n\t\t\t// \\/\n\t\t\tif ( distanceY > 0 && newOffsetY > minTranslateY ) {\n\t\t\t\tnewOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8 ) || 0;\n\t\t\t}\n\n\t\t\t// /\\\n\t\t\tif ( distanceY < 0 && newOffsetY < maxTranslateY ) {\n\t\t\t\tnewOffsetY = maxTranslateY + 1 - Math.pow ( maxTranslateY - currentOffsetY - distanceY, 0.8 ) || 0;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop : newOffsetY,\n\t\t\tleft : newOffsetX\n\t\t};\n\n\t};\n\n\n\tGuestures.prototype.limitPosition = function( newOffsetX, newOffsetY, newWidth, newHeight ) {\n\n\t\tvar self = this;\n\n\t\tvar canvasWidth = self.canvasWidth;\n\t\tvar canvasHeight = self.canvasHeight;\n\n\t\tif ( newWidth > canvasWidth ) {\n\t\t\tnewOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\n\t\t\tnewOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\n\n\t\t} else {\n\n\t\t\t// Center horizontally\n\t\t\tnewOffsetX = Math.max( 0, canvasWidth / 2 - newWidth / 2 );\n\n\t\t}\n\n\t\tif ( newHeight > canvasHeight ) {\n\t\t\tnewOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\n\t\t\tnewOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\n\n\t\t} else {\n\n\t\t\t// Center vertically\n\t\t\tnewOffsetY = Math.max( 0, canvasHeight / 2 - newHeight / 2 );\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop : newOffsetY,\n\t\t\tleft : newOffsetX\n\t\t};\n\n\t};\n\n\tGuestures.prototype.onZoom = function() {\n\n\t\tvar self = this;\n\n\t\t// Calculate current distance between points to get pinch ratio and new width and height\n\n\t\tvar currentWidth = self.contentStartPos.width;\n\t\tvar currentHeight = self.contentStartPos.height;\n\n\t\tvar currentOffsetX = self.contentStartPos.left;\n\t\tvar currentOffsetY = self.contentStartPos.top;\n\n\t\tvar endDistanceBetweenFingers = distance( self.newPoints[0], self.newPoints[1] );\n\n\t\tvar pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\n\n\t\tvar newWidth = Math.floor( currentWidth * pinchRatio );\n\t\tvar newHeight = Math.floor( currentHeight * pinchRatio );\n\n\t\t// This is the translation due to pinch-zooming\n\t\tvar translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\n\t\tvar translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\n\n\t\t//Point between the two touches\n\n\t\tvar centerPointEndX = ((self.newPoints[0].x + self.newPoints[1].x) / 2) - $(window).scrollLeft();\n\t\tvar centerPointEndY = ((self.newPoints[0].y + self.newPoints[1].y) / 2) - $(window).scrollTop();\n\n\t\t// And this is the translation due to translation of the centerpoint\n\t\t// between the two fingers\n\n\t\tvar translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\n\t\tvar translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\n\n\t\t// The new offset is the old/current one plus the total translation\n\n\t\tvar newOffsetX = currentOffsetX + ( translateFromZoomingX + translateFromTranslatingX );\n\t\tvar newOffsetY = currentOffsetY + ( translateFromZoomingY + translateFromTranslatingY );\n\n\t\tvar newPos = {\n\t\t\ttop : newOffsetY,\n\t\t\tleft : newOffsetX,\n\t\t\tscaleX : self.contentStartPos.scaleX * pinchRatio,\n\t\t\tscaleY : self.contentStartPos.scaleY * pinchRatio\n\t\t};\n\n\t\tself.canTap = false;\n\n\t\tself.newWidth = newWidth;\n\t\tself.newHeight = newHeight;\n\n\t\tself.contentLastPos = newPos;\n\n\t\tif ( self.requestId ) {\n\t\t\tcancelAFrame( self.requestId );\n\n\t\t\tself.requestId = null;\n\t\t}\n\n\t\tself.requestId = requestAFrame(function() {\n\t\t\t$.fancybox.setTranslate( self.$content, self.contentLastPos );\n\t\t});\n\n\t};\n\n\tGuestures.prototype.ontouchend = function( e ) {\n\n\t\tvar self = this;\n\t\tvar dMs = Math.max( (new Date().getTime() ) - self.startTime, 1);\n\n\t\tvar swiping = self.isSwiping;\n\t\tvar panning = self.isPanning;\n\t\tvar zooming = self.isZooming;\n\n\t\tself.endPoints = pointers( e );\n\n\t\tself.$container.removeClass( 'fancybox-controls--isGrabbing' );\n\n\t\t$(document).off( '.fb.touch' );\n\n\t\tif ( self.requestId ) {\n\t\t\tcancelAFrame( self.requestId );\n\n\t\t\tself.requestId = null;\n\t\t}\n\n\t\tself.isSwiping = false;\n\t\tself.isPanning = false;\n\t\tself.isZooming = false;\n\n\t\tif ( self.canTap ) {\n\t\t\treturn self.onTap( e );\n\t\t}\n\n\t\tself.speed = 366;\n\n\t\t// Speed in px/ms\n\t\tself.velocityX = self.distanceX / dMs * 0.5;\n\t\tself.velocityY = self.distanceY / dMs * 0.5;\n\n\t\tself.speedX = Math.max( self.speed * 0.5, Math.min( self.speed * 1.5, ( 1 / Math.abs( self.velocityX ) ) * self.speed ) );\n\n\t\tif ( panning ) {\n\t\t\tself.endPanning();\n\n\t\t} else if ( zooming ) {\n\t\t\tself.endZooming();\n\n\t\t} else {\n\t\t\tself.endSwiping( swiping );\n\t\t}\n\n\t\treturn;\n\t};\n\n\tGuestures.prototype.endSwiping = function( swiping ) {\n\n\t\tvar self = this;\n\t\tvar ret = false;\n\n\t\tself.instance.isSliding = false;\n\t\tself.sliderLastPos = null;\n\n\t\t// Close if swiped vertically / navigate if horizontally\n\t\tif ( swiping == 'y' && Math.abs( self.distanceY ) > 50 ) {\n\n\t\t\t// Continue vertical movement\n\t\t\t$.fancybox.animate( self.instance.current.$slide, {\n\t\t\t\ttop : self.sliderStartPos.top + self.distanceY + ( self.velocityY * 150 ),\n\t\t\t\topacity : 0\n\t\t\t}, 150 );\n\n\t\t\tret = self.instance.close( true, 300 );\n\n\t\t} else if ( swiping == 'x' && self.distanceX > 50 && self.instance.group.length > 1 ) {\n\t\t\tret = self.instance.previous( self.speedX );\n\n\t\t} else if ( swiping == 'x' && self.distanceX < -50 && self.instance.group.length > 1 ) {\n\t\t\tret = self.instance.next( self.speedX );\n\t\t}\n\n\t\tif ( ret === false && ( swiping == 'x' || swiping == 'y' ) ) {\n\t\t\tself.instance.jumpTo( self.instance.current.index, 150 );\n\t\t}\n\n\t\tself.$container.removeClass( 'fancybox-is-sliding' );\n\n\t};\n\n\t// Limit panning from edges\n\t// ========================\n\n\tGuestures.prototype.endPanning = function() {\n\n\t\tvar self = this;\n\t\tvar newOffsetX, newOffsetY, newPos;\n\n\t\tif ( !self.contentLastPos ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( self.opts.momentum === false ) {\n\t\t\tnewOffsetX = self.contentLastPos.left;\n\t\t\tnewOffsetY = self.contentLastPos.top;\n\n\t\t} else {\n\n\t\t\t// Continue movement\n\t\t\tnewOffsetX = self.contentLastPos.left + ( self.velocityX * self.speed );\n\t\t\tnewOffsetY = self.contentLastPos.top + ( self.velocityY * self.speed );\n\t\t}\n\n\t\tnewPos = self.limitPosition( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );\n\n\t\t newPos.width = self.contentStartPos.width;\n\t\t newPos.height = self.contentStartPos.height;\n\n\t\t$.fancybox.animate( self.$content, newPos, 330 );\n\t};\n\n\n\tGuestures.prototype.endZooming = function() {\n\n\t\tvar self = this;\n\n\t\tvar current = self.instance.current;\n\n\t\tvar newOffsetX, newOffsetY, newPos, reset;\n\n\t\tvar newWidth = self.newWidth;\n\t\tvar newHeight = self.newHeight;\n\n\t\tif ( !self.contentLastPos ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnewOffsetX = self.contentLastPos.left;\n\t\tnewOffsetY = self.contentLastPos.top;\n\n\t\treset = {\n\t\t \ttop : newOffsetY,\n\t\t \tleft : newOffsetX,\n\t\t \twidth : newWidth,\n\t\t \theight : newHeight,\n\t\t\tscaleX : 1,\n\t\t\tscaleY : 1\n\t };\n\n\t // Reset scalex/scaleY values; this helps for perfomance and does not break animation\n\t $.fancybox.setTranslate( self.$content, reset );\n\n\t\tif ( newWidth < self.canvasWidth && newHeight < self.canvasHeight ) {\n\t\t\tself.instance.scaleToFit( 150 );\n\n\t\t} else if ( newWidth > current.width || newHeight > current.height ) {\n\t\t\tself.instance.scaleToActual( self.centerPointStartX, self.centerPointStartY, 150 );\n\n\t\t} else {\n\n\t\t\tnewPos = self.limitPosition( newOffsetX, newOffsetY, newWidth, newHeight );\n\n\t\t\t// Switch from scale() to width/height or animation will not work correctly\n\t\t\t$.fancybox.setTranslate( self.content, $.fancybox.getTranslate( self.$content ) );\n\n\t\t\t$.fancybox.animate( self.$content, newPos, 150 );\n\t\t}\n\n\t};\n\n\tGuestures.prototype.onTap = function(e) {\n\t\tvar self = this;\n\t\tvar $target = $( e.target );\n\n\t\tvar instance = self.instance;\n\t\tvar current = instance.current;\n\n\t\tvar endPoints = ( e && pointers( e ) ) || self.startPoints;\n\n\t\tvar tapX = endPoints[0] ? endPoints[0].x - self.$stage.offset().left : 0;\n\t\tvar tapY = endPoints[0] ? endPoints[0].y - self.$stage.offset().top : 0;\n\n\t\tvar where;\n\n\t\tvar process = function ( prefix ) {\n\n\t\t\tvar action = current.opts[ prefix ];\n\n\t\t\tif ( $.isFunction( action ) ) {\n\t\t\t\taction = action.apply( instance, [ current, e ] );\n\t\t\t}\n\n\t\t\tif ( !action) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase \"close\" :\n\n\t\t\t\t\tinstance.close( self.startEvent );\n\n\t\t\t\tbreak;\n\n\t\t\t\tcase \"toggleControls\" :\n\n\t\t\t\t\tinstance.toggleControls( true );\n\n\t\t\t\tbreak;\n\n\t\t\t\tcase \"next\" :\n\n\t\t\t\t\tinstance.next();\n\n\t\t\t\tbreak;\n\n\t\t\t\tcase \"nextOrClose\" :\n\n\t\t\t\t\tif ( instance.group.length > 1 ) {\n\t\t\t\t\t\tinstance.next();\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinstance.close( self.startEvent );\n\t\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\t\tcase \"zoom\" :\n\n\t\t\t\t\tif ( current.type == 'image' && ( current.isLoaded || current.$ghost ) ) {\n\n\t\t\t\t\t\tif ( instance.canPan() ) {\n\t\t\t\t\t\t\tinstance.scaleToFit();\n\n\t\t\t\t\t\t} else if ( instance.isScaledDown() ) {\n\t\t\t\t\t\t\tinstance.scaleToActual( tapX, tapY );\n\n\t\t\t\t\t\t} else if ( instance.group.length < 2 ) {\n\t\t\t\t\t\t\tinstance.close( self.startEvent );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t};\n\n\t\t// Ignore right click\n\t\tif ( e.originalEvent && e.originalEvent.button == 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Skip if current slide is not in the center\n\t\tif ( instance.isSliding ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Skip if clicked on the scrollbar\n\t\tif ( tapX > $target[0].clientWidth + $target.offset().left ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check where is clicked\n\t\tif ( $target.is( '.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container' ) ) {\n\t\t\twhere = 'Outside';\n\n\t\t} else if ( $target.is( '.fancybox-slide' ) ) {\n\t\t\twhere = 'Slide';\n\n\t\t} else if ( instance.current.$content && instance.current.$content.has( e.target ).length ) {\n\t\t \twhere = 'Content';\n\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if this is a double tap\n\t\tif ( self.tapped ) {\n\n\t\t\t// Stop previously created single tap\n\t\t\tclearTimeout( self.tapped );\n\t\t\tself.tapped = null;\n\n\t\t\t// Skip if distance between taps is too big\n\t\t\tif ( Math.abs( tapX - self.tapX ) > 50 || Math.abs( tapY - self.tapY ) > 50 || instance.isSliding ) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// OK, now we assume that this is a double-tap\n\t\t\tprocess( 'dblclick' + where );\n\n\t\t} else {\n\n\t\t\t// Single tap will be processed if user has not clicked second time within 300ms\n\t\t\t// or there is no need to wait for double-tap\n\t\t\tself.tapX = tapX;\n\t\t\tself.tapY = tapY;\n\n\t\t\tif ( current.opts[ 'dblclick' + where ] && current.opts[ 'dblclick' + where ] !== current.opts[ 'click' + where ] ) {\n\t\t\t\tself.tapped = setTimeout(function() {\n\t\t\t\t\tself.tapped = null;\n\n\t\t\t\t\tprocess( 'click' + where );\n\n\t\t\t\t}, 300);\n\n\t\t\t} else {\n\t\t\t\tprocess( 'click' + where );\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t$(document).on('onActivate.fb', function (e, instance) {\n\t\tif ( instance && !instance.Guestures ) {\n\t\t\tinstance.Guestures = new Guestures( instance );\n\t\t}\n\t});\n\n\t$(document).on('beforeClose.fb', function (e, instance) {\n\t\tif ( instance && instance.Guestures ) {\n\t\t\tinstance.Guestures.destroy();\n\t\t}\n\t});\n\n\n}( window, document, window.jQuery || jQuery ));\n\n// ==========================================================================\n//\n// SlideShow\n// Enables slideshow functionality\n//\n// Example of usage:\n// $.fancybox.getInstance().SlideShow.start()\n//\n// ==========================================================================\n;(function (document, $) {\n\t'use strict';\n\n\t$.extend(true, $.fancybox.defaults, {\n\t\tbtnTpl : {\n\t\t\tslideShow :\n\t\t\t\t''\n\t\t},\n\t\tslideShow : {\n\t\t\tautoStart : false,\n speed : 3000\n\t\t}\n\t});\n\n\tvar SlideShow = function( instance ) {\n\t\tthis.instance = instance;\n\t\tthis.init();\n\t};\n\n\t$.extend( SlideShow.prototype, {\n\t\ttimer : null,\n\t\tisActive : false,\n\t\t$button : null,\n\n\t\tinit : function() {\n\t\t\tvar self = this;\n\n\t\t\tself.$button = self.instance.$refs.toolbar.find('[data-fancybox-play]').on('click', function() {\n\t\t\t\tself.toggle();\n\t\t\t});\n\n\t\t\tif ( self.instance.group.length < 2 || !self.instance.group[ self.instance.currIndex ].opts.slideShow ) {\n\t\t\t\tself.$button.hide();\n\t\t\t}\n\t\t},\n\n\t\tset : function( force ) {\n\t\t\tvar self = this;\n\n\t\t\t// Check if reached last element\n\t\t\tif ( self.instance && self.instance.current && (force === true || self.instance.current.opts.loop || self.instance.currIndex < self.instance.group.length - 1 )) {\n\t\t\t\tself.timer = setTimeout(function() {\n\t\t\t\t\tif ( self.isActive ) {\n\t\t\t\t\t\tself.instance.jumpTo( (self.instance.currIndex + 1) % self.instance.group.length );\n\t\t\t\t\t}\n\n\t\t\t\t}, self.instance.current.opts.slideShow.speed);\n\n\t\t\t} else {\n\t\t\t\tself.stop();\n\t\t\t\tself.instance.idleSecondsCounter = 0;\n\t\t\t\tself.instance.showControls();\n\t\t\t}\n\t\t},\n\n\t\tclear : function() {\n\t\t\tvar self = this;\n\n\t\t\tclearTimeout( self.timer );\n\n\t\t\tself.timer = null;\n\t\t},\n\n\t\tstart : function() {\n\t\t\tvar self = this;\n\t\t\tvar current = self.instance.current;\n\n\t\t\tif ( current ) {\n\t\t\t\tself.isActive = true;\n\n\t\t\t\tself.$button\n\t\t\t\t\t.attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_STOP )\n\t\t\t\t\t.removeClass( 'fancybox-button--play' )\n\t\t\t\t\t.addClass( 'fancybox-button--pause' );\n\n\t\t\t\t\tself.set( true );\n\t\t\t}\n\t\t},\n\n\t\tstop : function() {\n\t\t\tvar self = this;\n\t\t\tvar current = self.instance.current;\n\n\t\t\tself.clear();\n\n\t\t\tself.$button\n\t\t\t\t.attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_START )\n\t\t\t\t.removeClass( 'fancybox-button--pause' )\n\t\t\t\t.addClass( 'fancybox-button--play' );\n\n\t\t\tself.isActive = false;\n\t\t},\n\n\t\ttoggle : function() {\n\t\t\tvar self = this;\n\n\t\t\tif ( self.isActive ) {\n\t\t\t\tself.stop();\n\n\t\t\t} else {\n\t\t\t\tself.start();\n\t\t\t}\n\t\t}\n\n\t});\n\n\t$(document).on({\n\t\t'onInit.fb' : function(e, instance) {\n\t\t\tif ( instance && !instance.SlideShow ) {\n\t\t\t\tinstance.SlideShow = new SlideShow( instance );\n\t\t\t}\n\t\t},\n\n\t\t'beforeShow.fb' : function(e, instance, current, firstRun) {\n\t\t\tvar SlideShow = instance && instance.SlideShow;\n\n\t\t\tif ( firstRun ) {\n\n\t\t\t\tif ( SlideShow && current.opts.slideShow.autoStart ) {\n\t\t\t\t\tSlideShow.start();\n\t\t\t\t}\n\n\t\t\t} else if ( SlideShow && SlideShow.isActive ) {\n\t\t\t\tSlideShow.clear();\n\t\t\t}\n\t\t},\n\n\t\t'afterShow.fb' : function(e, instance, current) {\n\t\t\tvar SlideShow = instance && instance.SlideShow;\n\n\t\t\tif ( SlideShow && SlideShow.isActive ) {\n\t\t\t\tSlideShow.set();\n\t\t\t}\n\t\t},\n\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\n\t\t\tvar SlideShow = instance && instance.SlideShow;\n\n\t\t\t// \"P\" or Spacebar\n\t\t\tif ( SlideShow && current.opts.slideShow && ( keycode === 80 || keycode === 32 ) && !$(document.activeElement).is( 'button,a,input' ) ) {\n\t\t\t\tkeypress.preventDefault();\n\n\t\t\t\tSlideShow.toggle();\n\t\t\t}\n\t\t},\n\n\t\t'beforeClose.fb onDeactivate.fb' : function(e, instance) {\n\t\t\tvar SlideShow = instance && instance.SlideShow;\n\n\t\t\tif ( SlideShow ) {\n\t\t\t\tSlideShow.stop();\n\t\t\t}\n\t\t}\n\t});\n\n\t// Page Visibility API to pause slideshow when window is not active\n\t$(document).on(\"visibilitychange\", function() {\n\t\tvar instance = $.fancybox.getInstance();\n\t\tvar SlideShow = instance && instance.SlideShow;\n\n\t\tif ( SlideShow && SlideShow.isActive ) {\n\t\t\tif ( document.hidden ) {\n\t\t\t\tSlideShow.clear();\n\n\t\t\t} else {\n\t\t\t\tSlideShow.set();\n\t\t\t}\n\t\t}\n\t});\n\n}( document, window.jQuery || jQuery ));\n\n// ==========================================================================\n//\n// FullScreen\n// Adds fullscreen functionality\n//\n// ==========================================================================\n;(function (document, $) {\n\t'use strict';\n\n\t// Collection of methods supported by user browser\n\tvar fn = (function () {\n\n\t\tvar fnMap = [\n\t\t\t[\n\t\t\t\t'requestFullscreen',\n\t\t\t\t'exitFullscreen',\n\t\t\t\t'fullscreenElement',\n\t\t\t\t'fullscreenEnabled',\n\t\t\t\t'fullscreenchange',\n\t\t\t\t'fullscreenerror'\n\t\t\t],\n\t\t\t// new WebKit\n\t\t\t[\n\t\t\t\t'webkitRequestFullscreen',\n\t\t\t\t'webkitExitFullscreen',\n\t\t\t\t'webkitFullscreenElement',\n\t\t\t\t'webkitFullscreenEnabled',\n\t\t\t\t'webkitfullscreenchange',\n\t\t\t\t'webkitfullscreenerror'\n\n\t\t\t],\n\t\t\t// old WebKit (Safari 5.1)\n\t\t\t[\n\t\t\t\t'webkitRequestFullScreen',\n\t\t\t\t'webkitCancelFullScreen',\n\t\t\t\t'webkitCurrentFullScreenElement',\n\t\t\t\t'webkitCancelFullScreen',\n\t\t\t\t'webkitfullscreenchange',\n\t\t\t\t'webkitfullscreenerror'\n\n\t\t\t],\n\t\t\t[\n\t\t\t\t'mozRequestFullScreen',\n\t\t\t\t'mozCancelFullScreen',\n\t\t\t\t'mozFullScreenElement',\n\t\t\t\t'mozFullScreenEnabled',\n\t\t\t\t'mozfullscreenchange',\n\t\t\t\t'mozfullscreenerror'\n\t\t\t],\n\t\t\t[\n\t\t\t\t'msRequestFullscreen',\n\t\t\t\t'msExitFullscreen',\n\t\t\t\t'msFullscreenElement',\n\t\t\t\t'msFullscreenEnabled',\n\t\t\t\t'MSFullscreenChange',\n\t\t\t\t'MSFullscreenError'\n\t\t\t]\n\t\t];\n\n\t\tvar val;\n\t\tvar ret = {};\n\t\tvar i, j;\n\n\t\tfor ( i = 0; i < fnMap.length; i++ ) {\n\t\t\tval = fnMap[ i ];\n\n\t\t\tif ( val && val[ 1 ] in document ) {\n\t\t\t\tfor ( j = 0; j < val.length; j++ ) {\n\t\t\t\t\tret[ fnMap[ 0 ][ j ] ] = val[ j ];\n\t\t\t\t}\n\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t})();\n\n\t// If browser does not have Full Screen API, then simply unset default button template and stop\n\tif ( !fn ) {\n\n\t\tif ( $ && $.fancybox ) {\n\t\t\t$.fancybox.defaults.btnTpl.fullScreen = false;\n\t\t}\n\n\t\treturn;\n\t}\n\n\tvar FullScreen = {\n\n\t\trequest : function ( elem ) {\n\n\t\t\telem = elem || document.documentElement;\n\n\t\t\telem[ fn.requestFullscreen ]( elem.ALLOW_KEYBOARD_INPUT );\n\n\t\t},\n\t\texit : function () {\n\n\t\t\tdocument[ fn.exitFullscreen ]();\n\n\t\t},\n\t\ttoggle : function ( elem ) {\n\n\t\t\telem = elem || document.documentElement;\n\n\t\t\tif ( this.isFullscreen() ) {\n\t\t\t\tthis.exit();\n\n\t\t\t} else {\n\t\t\t\tthis.request( elem );\n\t\t\t}\n\n\t\t},\n\t\tisFullscreen : function() {\n\n\t\t\treturn Boolean( document[ fn.fullscreenElement ] );\n\n\t\t},\n\t\tenabled : function() {\n\n\t\t\treturn Boolean( document[ fn.fullscreenEnabled ] );\n\n\t\t}\n\t};\n\n\t$.extend(true, $.fancybox.defaults, {\n\t\tbtnTpl : {\n\t\t\tfullScreen :\n\t\t\t\t''\n\t\t},\n\t\tfullScreen : {\n\t\t\tautoStart : false\n\t\t}\n\t});\n\n\t$(document).on({\n\t\t'onInit.fb' : function(e, instance) {\n\t\t\tvar $container;\n\n\t\t\tif ( instance && instance.group[ instance.currIndex ].opts.fullScreen ) {\n\t\t\t\t$container = instance.$refs.container;\n\n\t\t\t\t$container.on('click.fb-fullscreen', '[data-fancybox-fullscreen]', function(e) {\n\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tFullScreen.toggle( $container[ 0 ] );\n\n\t\t\t\t});\n\n\t\t\t\tif ( instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true ) {\n\t\t\t\t\tFullScreen.request( $container[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// Expose API\n\t\t\t\tinstance.FullScreen = FullScreen;\n\n\t\t\t} else if ( instance ) {\n\t\t\t\tinstance.$refs.toolbar.find('[data-fancybox-fullscreen]').hide();\n\t\t\t}\n\n\t\t},\n\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\n\n\t\t\t// \"P\" or Spacebar\n\t\t\tif ( instance && instance.FullScreen && keycode === 70 ) {\n\t\t\t\tkeypress.preventDefault();\n\n\t\t\t\tinstance.FullScreen.toggle( instance.$refs.container[ 0 ] );\n\t\t\t}\n\n\t\t},\n\n\t\t'beforeClose.fb' : function( instance ) {\n\t\t\tif ( instance && instance.FullScreen ) {\n\t\t\t\tFullScreen.exit();\n\t\t\t}\n\t\t}\n\t});\n\n\t$(document).on(fn.fullscreenchange, function() {\n\t\tvar isFullscreen = FullScreen.isFullscreen(),\n\t\t\tinstance = $.fancybox.getInstance();\n\n\t\tif ( instance ) {\n\n\t\t\t// If image is zooming, then force to stop and reposition properly\n\t\t\tif ( instance.current && instance.current.type === 'image' && instance.isAnimating ) {\n\t\t\t\tinstance.current.$content.css( 'transition', 'none' );\n\n\t\t\t\tinstance.isAnimating = false;\n\n\t\t\t\tinstance.update( true, true, 0 );\n\t\t\t}\n\n\t\t\tinstance.trigger( 'onFullscreenChange', isFullscreen );\n\n\t\t\tinstance.$refs.container.toggleClass( 'fancybox-is-fullscreen', isFullscreen );\n\t\t}\n\n\t});\n\n}( document, window.jQuery || jQuery ));\n\n// ==========================================================================\n//\n// Thumbs\n// Displays thumbnails in a grid\n//\n// ==========================================================================\n;(function (document, $) {\n\t'use strict';\n\n\t// Make sure there are default values\n\t$.fancybox.defaults = $.extend(true, {\n\t\tbtnTpl : {\n\t\t\tthumbs :\n\t\t\t''\n\t\t},\n\t\tthumbs : {\n\t\t\tautoStart : false, // Display thumbnails on opening\n\t\t\thideOnClose : true, // Hide thumbnail grid when closing animation starts\n\t\t\tparentEl : '.fancybox-container', // Container is injected into this element\n\t\t\taxis : 'y' // Vertical (y) or horizontal (x) scrolling\n\t\t}\n\t}, $.fancybox.defaults);\n\n\tvar FancyThumbs = function( instance ) {\n\t\tthis.init( instance );\n\t};\n\n\t$.extend( FancyThumbs.prototype, {\n\n\t\t$button\t\t: null,\n\t\t$grid\t\t: null,\n\t\t$list\t\t: null,\n\t\tisVisible\t: false,\n\t\tisActive\t: false,\n\n\t\tinit : function( instance ) {\n\t\t\tvar self = this;\n\n\t\t\tself.instance = instance;\n\n\t\t\tinstance.Thumbs = self;\n\n\t\t\t// Enable thumbs if at least two group items have thumbnails\n\t\t\tvar first = instance.group[0],\n\t\t\t\tsecond = instance.group[1];\n\n\t\t\tself.opts = instance.group[ instance.currIndex ].opts.thumbs;\n\n\t\t\tself.$button = instance.$refs.toolbar.find( '[data-fancybox-thumbs]' );\n\n\t\t\tif ( self.opts && first && second && (\n\t\t \t\t( first.type == 'image' || first.opts.thumb || first.opts.$thumb ) &&\n\t\t \t\t( second.type == 'image' || second.opts.thumb || second.opts.$thumb )\n\t\t\t)) {\n\n\t\t\t\tself.$button.show().on('click', function() {\n\t\t\t\t\tself.toggle();\n\t\t\t\t});\n\n\t\t\t\tself.isActive = true;\n\n\t\t\t} else {\n\t\t\t\tself.$button.hide();\n\t\t\t}\n\t\t},\n\n\t\tcreate : function() {\n\t\t\tvar self = this,\n\t\t\t\tinstance = self.instance,\n\t\t\t\tparentEl = self.opts.parentEl,\n\t\t\t\tlist,\n\t\t\t\tsrc;\n\n\t\t\tself.$grid = $('
').appendTo( instance.$refs.container.find( parentEl ).addBack().filter( parentEl ) );\n\n\t\t\t// Build list HTML\n\t\t\tlist = '
    ';\n\n\t\t\t$.each(instance.group, function( i, item ) {\n\t\t\t\tsrc = item.opts.thumb || ( item.opts.$thumb ? item.opts.$thumb.attr( 'src' ) : null );\n\n\t\t\t\tif ( !src && item.type === 'image' ) {\n\t\t\t\t\tsrc = item.src;\n\t\t\t\t}\n\n\t\t\t\tif ( src && src.length ) {\n\t\t\t\t\tlist += '
  • ';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlist += '
';\n\n\t\t\tself.$list = $( list ).appendTo( self.$grid ).on('click', 'li', function() {\n\t\t\t\tinstance.jumpTo( $(this).data('index') );\n\t\t\t});\n\n\t\t\tself.$list.find( 'img' ).hide().one('load', function() {\n\t\t\t\tvar $parent\t\t= $(this).parent().removeClass( 'fancybox-thumbs-loading' ),\n\t\t\t\t\tthumbWidth\t= $parent.outerWidth(),\n\t\t\t\t\tthumbHeight\t= $parent.outerHeight(),\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\twidthRatio,\n\t\t\t\t\theightRatio;\n\n\t\t\t\twidth = this.naturalWidth\t|| this.width;\n\t\t\t\theight = this.naturalHeight\t|| this.height;\n\n\t\t\t\t// Calculate thumbnail dimensions; center vertically and horizontally\n\t\t\t\twidthRatio = width / thumbWidth;\n\t\t\t\theightRatio = height / thumbHeight;\n\n\t\t\t\tif (widthRatio >= 1 && heightRatio >= 1) {\n\t\t\t\t\tif (widthRatio > heightRatio) {\n\t\t\t\t\t\twidth = width / heightRatio;\n\t\t\t\t\t\theight = thumbHeight;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\twidth = thumbWidth;\n\t\t\t\t\t\theight = height / widthRatio;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$(this).css({\n\t\t\t\t\twidth : Math.floor(width),\n\t\t\t\t\theight : Math.floor(height),\n\t\t\t\t\t'margin-top' : height > thumbHeight ? ( Math.floor(thumbHeight * 0.3 - height * 0.3 ) ) : Math.floor(thumbHeight * 0.5 - height * 0.5 ),\n\t\t\t\t\t'margin-left' : Math.floor(thumbWidth * 0.5 - width * 0.5 )\n\t\t\t\t}).show();\n\n\t\t\t})\n\t\t\t.each(function() {\n\t\t\t\tthis.src = $( this ).data( 'src' );\n\t\t\t});\n\n\t\t\tif ( self.opts.axis === 'x' ) {\n\t\t\t\tself.$list.width( parseInt( self.$grid.css(\"padding-right\") ) + ( instance.group.length * self.$list.children().eq(0).outerWidth(true) ) + 'px' );\n\t\t\t}\n\t\t},\n\n\t\tfocus : function( duration ) {\n\t\t\tvar self = this,\n\t\t\t\t$list = self.$list,\n\t\t\t\tthumb,\n\t\t\t\tthumbPos;\n\n\t\t\tif ( self.instance.current ) {\n\t\t\t\tthumb = $list.children()\n\t\t\t\t\t.removeClass( 'fancybox-thumbs-active' )\n\t\t\t\t\t.filter('[data-index=\"' + self.instance.current.index + '\"]')\n\t\t\t\t\t.addClass('fancybox-thumbs-active');\n\n\t\t\t\tthumbPos = thumb.position();\n\n\t\t\t\t// Check if need to scroll to make current thumb visible\n\t\t\t\tif ( self.opts.axis === 'y' && ( thumbPos.top < 0 || thumbPos.top > ( $list.height() - thumb.outerHeight() ) ) ) {\n\t\t\t\t\t$list.stop().animate({ 'scrollTop' : $list.scrollTop() + thumbPos.top }, duration);\n\n\t\t\t\t} else if ( self.opts.axis === 'x' && (\n\t\t\t\t\t\tthumbPos.left < $list.parent().scrollLeft() ||\n\t\t\t\t\t\tthumbPos.left > ( $list.parent().scrollLeft() + ( $list.parent().width() - thumb.outerWidth() ) )\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t$list.parent().stop().animate({ 'scrollLeft' : thumbPos.left }, duration);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tupdate : function() {\n\t\t\tthis.instance.$refs.container.toggleClass( 'fancybox-show-thumbs', this.isVisible );\n\n\t\t\tif ( this.isVisible ) {\n\t\t\t\tif ( !this.$grid ) {\n\t\t\t\t\tthis.create();\n\t\t\t\t}\n\n\t\t\t\tthis.instance.trigger( 'onThumbsShow' );\n\n\t\t\t\tthis.focus( 0 );\n\n\t\t\t} else if ( this.$grid ) {\n\t\t\t\tthis.instance.trigger( 'onThumbsHide' );\n\t\t\t}\n\n\t\t\t// Update content position\n\t\t\tthis.instance.update();\n\t\t},\n\n\t\thide : function() {\n\t\t\tthis.isVisible = false;\n\t\t\tthis.update();\n\t\t},\n\n\t\tshow : function() {\n\t\t\tthis.isVisible = true;\n\t\t\tthis.update();\n\t\t},\n\n\t\ttoggle : function() {\n\t\t\tthis.isVisible = !this.isVisible;\n\t\t\tthis.update();\n\t\t}\n\t});\n\n\t$(document).on({\n\n\t\t'onInit.fb' : function(e, instance) {\n\t\t\tvar Thumbs;\n\n\t\t\tif ( instance && !instance.Thumbs ) {\n\t\t\t\tThumbs = new FancyThumbs( instance );\n\n\t\t\t\tif ( Thumbs.isActive && Thumbs.opts.autoStart === true ) {\n\t\t\t\t\tThumbs.show();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t'beforeShow.fb' : function(e, instance, item, firstRun) {\n\t\t\tvar Thumbs = instance && instance.Thumbs;\n\n\t\t\tif ( Thumbs && Thumbs.isVisible ) {\n\t\t\t\tThumbs.focus( firstRun ? 0 : 250 );\n\t\t\t}\n\t\t},\n\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\n\t\t\tvar Thumbs = instance && instance.Thumbs;\n\n\t\t\t// \"G\"\n\t\t\tif ( Thumbs && Thumbs.isActive && keycode === 71 ) {\n\t\t\t\tkeypress.preventDefault();\n\n\t\t\t\tThumbs.toggle();\n\t\t\t}\n\t\t},\n\n\t\t'beforeClose.fb' : function( e, instance ) {\n\t\t\tvar Thumbs = instance && instance.Thumbs;\n\n\t\t\tif ( Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false ) {\n\t\t\t\tThumbs.$grid.hide();\n\t\t\t}\n\t\t}\n\n\t});\n\n}(document, window.jQuery));\n\n//// ==========================================================================\n//\n// Share\n// Displays simple form for sharing current url\n//\n// ==========================================================================\n;(function (document, $) {\n\t'use strict';\n\n\t$.extend(true, $.fancybox.defaults, {\n\t\tbtnTpl : {\n\t\t\tshare :\n\t\t\t\t''\n\t\t},\n\t\tshare : {\n\t\t\ttpl :\n\t\t\t\t'
' +\n\t\t\t\t\t'

{{SHARE}}

' +\n\t\t\t\t\t'

' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t\t\t'' +\n\t\t\t\t\t\t\t'Facebook' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t\t\t'' +\n\t\t\t\t\t\t\t'Pinterest' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t\t\t'' +\n\t\t\t\t\t\t\t'Twitter' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t'

' +\n\t\t\t\t\t'

' +\n\t\t\t\t'
'\n\t\t}\n\t});\n\n\tfunction escapeHtml(string) {\n\t\tvar entityMap = {\n\t\t '&': '&',\n\t\t '<': '<',\n\t\t '>': '>',\n\t\t '\"': '"',\n\t\t \"'\": ''',\n\t\t '/': '/',\n\t\t '`': '`',\n\t\t '=': '='\n\t\t};\n\n\t\treturn String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\n\t\t\treturn entityMap[s];\n\t\t});\n\t}\n\n\t$(document).on('click', '[data-fancybox-share]', function() {\n\t\tvar f = $.fancybox.getInstance(),\n\t\t\turl,\n\t\t\ttpl;\n\n\t\tif ( f ) {\n\t\t\turl = f.current.opts.hash === false ? f.current.src : window.location;\n\t\t\ttpl = f.current.opts.share.tpl\n\t\t\t\t\t.replace( /\\{\\{src\\}\\}/g, encodeURIComponent( url ) )\n\t\t\t\t\t.replace( /\\{\\{src_raw\\}\\}/g, escapeHtml( url ) )\n\t\t\t\t\t.replace( /\\{\\{descr\\}\\}/g, f.$caption ? encodeURIComponent( f.$caption.text() ) : '' );\n\n\t\t\t$.fancybox.open({\n\t\t\t\tsrc : f.translate( f, tpl ),\n\t\t\t\ttype : 'html',\n\t\t\t\topts : {\n\t\t\t\t\tanimationEffect : \"fade\",\n\t\t\t\t\tanimationDuration : 250\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t});\n\n}( document, window.jQuery || jQuery ));\n\n// ==========================================================================\n//\n// Hash\n// Enables linking to each modal\n//\n// ==========================================================================\n;(function (document, window, $) {\n\t'use strict';\n\n\t// Simple $.escapeSelector polyfill (for jQuery prior v3)\n\tif ( !$.escapeSelector ) {\n\t\t$.escapeSelector = function( sel ) {\n\t\t\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\t\t\tvar fcssescape = function( ch, asCodePoint ) {\n\t\t\t\tif ( asCodePoint ) {\n\t\t\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\t\t\treturn \"\\uFFFD\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t\t\t}\n\n\t\t\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\t\t\treturn \"\\\\\" + ch;\n\t\t\t};\n\n\t\t\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n\t\t};\n\t}\n\n\t// Create new history entry only once\n\tvar shouldCreateHistory = true;\n\n\t// Variable containing last hash value set by fancyBox\n\t// It will be used to determine if fancyBox needs to close after hash change is detected\n var currentHash = null;\n\n\t// Throttling the history change\n\tvar timerID = null;\n\n\t// Get info about gallery name and current index from url\n function parseUrl() {\n var hash = window.location.hash.substr( 1 );\n var rez = hash.split( '-' );\n var index = rez.length > 1 && /^\\+?\\d+$/.test( rez[ rez.length - 1 ] ) ? parseInt( rez.pop( -1 ), 10 ) || 1 : 1;\n var gallery = rez.join( '-' );\n\n\t\t// Index is starting from 1\n\t\tif ( index < 1 ) {\n\t\t\tindex = 1;\n\t\t}\n\n return {\n hash : hash,\n index : index,\n gallery : gallery\n };\n }\n\n\t// Trigger click evnt on links to open new fancyBox instance\n\tfunction triggerFromUrl( url ) {\n\t\tvar $el;\n\n if ( url.gallery !== '' ) {\n\n\t\t\t// If we can find element matching 'data-fancybox' atribute, then trigger click event for that ..\n\t\t\t$el = $( \"[data-fancybox='\" + $.escapeSelector( url.gallery ) + \"']\" ).eq( url.index - 1 );\n\n if ( !$el.length ) {\n\t\t\t\t// .. if not, try finding element by ID\n\t\t\t\t$el = $( \"#\" + $.escapeSelector( url.gallery ) + \"\" );\n\t\t\t}\n\n\t\t\tif ( $el.length ) {\n\t\t\t\tshouldCreateHistory = false;\n\n\t\t\t\t$el.trigger( 'click' );\n\t\t\t}\n\n }\n\t}\n\n\t// Get gallery name from current instance\n\tfunction getGalleryID( instance ) {\n\t\tvar opts;\n\n\t\tif ( !instance ) {\n\t\t\treturn false;\n\t\t}\n\n\t\topts = instance.current ? instance.current.opts : instance.opts;\n\n\t\treturn opts.hash || ( opts.$orig ? opts.$orig.data( 'fancybox' ) : '' );\n\t}\n\n\t// Start when DOM becomes ready\n $(function() {\n\n\t\t// Check if user has disabled this module\n\t\tif ( $.fancybox.defaults.hash === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Update hash when opening/closing fancyBox\n\t $(document).on({\n\t\t\t'onInit.fb' : function( e, instance ) {\n\t\t\t\tvar url, gallery;\n\n\t\t\t\tif ( instance.group[ instance.currIndex ].opts.hash === false ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\turl = parseUrl();\n\t\t\t\tgallery = getGalleryID( instance );\n\n\t\t\t\t// Make sure gallery start index matches index from hash\n\t\t\t\tif ( gallery && url.gallery && gallery == url.gallery ) {\n\t\t\t\t\tinstance.currIndex = url.index - 1;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t'beforeShow.fb' : function( e, instance, current ) {\n\t\t\t\tvar gallery;\n\n\t\t\t\tif ( !current || current.opts.hash === false ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t gallery = getGalleryID( instance );\n\n\t // Update window hash\n\t if ( gallery && gallery !== '' ) {\n\n\t\t\t\t\tif ( window.location.hash.indexOf( gallery ) < 0 ) {\n\t\t instance.opts.origHash = window.location.hash;\n\t\t }\n\n\t\t\t\t\tcurrentHash = gallery + ( instance.group.length > 1 ? '-' + ( current.index + 1 ) : '' );\n\n\t\t\t\t\tif ( 'replaceState' in window.history ) {\n\t\t\t\t\t\tif ( timerID ) {\n\t\t\t\t\t\t\tclearTimeout( timerID );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttimerID = setTimeout(function() {\n\t\t\t\t\t\t\twindow.history[ shouldCreateHistory ? 'pushState' : 'replaceState' ]( {} , document.title, window.location.pathname + window.location.search + '#' + currentHash );\n\n\t\t\t\t\t\t\ttimerID = null;\n\n\t\t\t\t\t\t\tshouldCreateHistory = false;\n\n\t\t\t\t\t\t}, 300);\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\twindow.location.hash = currentHash;\n\t\t\t\t\t}\n\n\t }\n\n\t },\n\n\t\t\t'beforeClose.fb' : function( e, instance, current ) {\n\t\t\t\tvar gallery, origHash;\n\n\t\t\t\tif ( timerID ) {\n\t\t\t\t\tclearTimeout( timerID );\n\t\t\t\t}\n\n\t\t\t\tif ( current.opts.hash === false ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tgallery = getGalleryID( instance );\n\t\t\t\torigHash = instance && instance.opts.origHash ? instance.opts.origHash : '';\n\n\t // Remove hash from location bar\n\t if ( gallery && gallery !== '' ) {\n\n\t if ( 'replaceState' in history ) {\n\t\t\t\t\t\twindow.history.replaceState( {} , document.title, window.location.pathname + window.location.search + origHash );\n\n\t } else {\n\t\t\t\t\t\twindow.location.hash = origHash;\n\n\t\t\t\t\t\t// Keep original scroll position\n\t\t\t\t\t\t$( window ).scrollTop( instance.scrollTop ).scrollLeft( instance.scrollLeft );\n\t }\n\t }\n\n\t\t\t\tcurrentHash = null;\n\t }\n\t });\n\n\t\t// Check if need to close after url has changed\n\t\t$(window).on('hashchange.fb', function() {\n\t\t\tvar url = parseUrl();\n\n\t\t\tif ( $.fancybox.getInstance() ) {\n\t\t\t\tif ( currentHash && currentHash !== url.gallery + '-' + url.index && !( url.index === 1 && currentHash == url.gallery ) ) {\n\t\t\t\t\tcurrentHash = null;\n\n\t\t\t\t\t$.fancybox.close();\n\t\t\t\t}\n\n\t\t\t} else if ( url.gallery !== '' ) {\n\t\t\t\ttriggerFromUrl( url );\n\t\t\t}\n\t\t});\n\n\t\t// Check current hash and trigger click event on matching element to start fancyBox, if needed\n\t\tsetTimeout(function() {\n\t\t\ttriggerFromUrl( parseUrl() );\n\t\t}, 50);\n });\n\n}( document, window, window.jQuery || jQuery ));\n","/**\n * Owl Carousel v2.2.1\n * Copyright 2013-2017 David Deutsch\n * Licensed under ()\n */\n/**\n * Owl carousel\n * @version 2.1.6\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n * @todo Lazy Load Icon\n * @todo prevent animationend bubling\n * @todo itemsScaleUp\n * @todo Test Zepto\n * @todo stagePadding calculate wrong active classes\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates a carousel.\n\t * @class The Owl Carousel.\n\t * @public\n\t * @param {HTMLElement|jQuery} element - The element to create the carousel for.\n\t * @param {Object} [options] - The options\n\t */\n\tfunction Owl(element, options) {\n\n\t\t/**\n\t\t * Current settings for the carousel.\n\t\t * @public\n\t\t */\n\t\tthis.settings = null;\n\n\t\t/**\n\t\t * Current options set by the caller including defaults.\n\t\t * @public\n\t\t */\n\t\tthis.options = $.extend({}, Owl.Defaults, options);\n\n\t\t/**\n\t\t * Plugin element.\n\t\t * @public\n\t\t */\n\t\tthis.$element = $(element);\n\n\t\t/**\n\t\t * Proxied event handlers.\n\t\t * @protected\n\t\t */\n\t\tthis._handlers = {};\n\n\t\t/**\n\t\t * References to the running plugins of this carousel.\n\t\t * @protected\n\t\t */\n\t\tthis._plugins = {};\n\n\t\t/**\n\t\t * Currently suppressed events to prevent them from beeing retriggered.\n\t\t * @protected\n\t\t */\n\t\tthis._supress = {};\n\n\t\t/**\n\t\t * Absolute current position.\n\t\t * @protected\n\t\t */\n\t\tthis._current = null;\n\n\t\t/**\n\t\t * Animation speed in milliseconds.\n\t\t * @protected\n\t\t */\n\t\tthis._speed = null;\n\n\t\t/**\n\t\t * Coordinates of all items in pixel.\n\t\t * @todo The name of this member is missleading.\n\t\t * @protected\n\t\t */\n\t\tthis._coordinates = [];\n\n\t\t/**\n\t\t * Current breakpoint.\n\t\t * @todo Real media queries would be nice.\n\t\t * @protected\n\t\t */\n\t\tthis._breakpoint = null;\n\n\t\t/**\n\t\t * Current width of the plugin element.\n\t\t */\n\t\tthis._width = null;\n\n\t\t/**\n\t\t * All real items.\n\t\t * @protected\n\t\t */\n\t\tthis._items = [];\n\n\t\t/**\n\t\t * All cloned items.\n\t\t * @protected\n\t\t */\n\t\tthis._clones = [];\n\n\t\t/**\n\t\t * Merge values of all items.\n\t\t * @todo Maybe this could be part of a plugin.\n\t\t * @protected\n\t\t */\n\t\tthis._mergers = [];\n\n\t\t/**\n\t\t * Widths of all items.\n\t\t */\n\t\tthis._widths = [];\n\n\t\t/**\n\t\t * Invalidated parts within the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._invalidated = {};\n\n\t\t/**\n\t\t * Ordered list of workers for the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._pipe = [];\n\n\t\t/**\n\t\t * Current state information for the drag operation.\n\t\t * @todo #261\n\t\t * @protected\n\t\t */\n\t\tthis._drag = {\n\t\t\ttime: null,\n\t\t\ttarget: null,\n\t\t\tpointer: null,\n\t\t\tstage: {\n\t\t\t\tstart: null,\n\t\t\t\tcurrent: null\n\t\t\t},\n\t\t\tdirection: null\n\t\t};\n\n\t\t/**\n\t\t * Current state information and their tags.\n\t\t * @type {Object}\n\t\t * @protected\n\t\t */\n\t\tthis._states = {\n\t\t\tcurrent: {},\n\t\t\ttags: {\n\t\t\t\t'initializing': [ 'busy' ],\n\t\t\t\t'animating': [ 'busy' ],\n\t\t\t\t'dragging': [ 'interacting' ]\n\t\t\t}\n\t\t};\n\n\t\t$.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {\n\t\t\tthis._handlers[handler] = $.proxy(this[handler], this);\n\t\t}, this));\n\n\t\t$.each(Owl.Plugins, $.proxy(function(key, plugin) {\n\t\t\tthis._plugins[key.charAt(0).toLowerCase() + key.slice(1)]\n\t\t\t\t= new plugin(this);\n\t\t}, this));\n\n\t\t$.each(Owl.Workers, $.proxy(function(priority, worker) {\n\t\t\tthis._pipe.push({\n\t\t\t\t'filter': worker.filter,\n\t\t\t\t'run': $.proxy(worker.run, this)\n\t\t\t});\n\t\t}, this));\n\n\t\tthis.setup();\n\t\tthis.initialize();\n\t}\n\n\t/**\n\t * Default options for the carousel.\n\t * @public\n\t */\n\tOwl.Defaults = {\n\t\titems: 3,\n\t\tloop: false,\n\t\tcenter: false,\n\t\trewind: false,\n\n\t\tmouseDrag: true,\n\t\ttouchDrag: true,\n\t\tpullDrag: true,\n\t\tfreeDrag: false,\n\n\t\tmargin: 0,\n\t\tstagePadding: 0,\n\n\t\tmerge: false,\n\t\tmergeFit: true,\n\t\tautoWidth: false,\n\n\t\tstartPosition: 0,\n\t\trtl: false,\n\n\t\tsmartSpeed: 250,\n\t\tfluidSpeed: false,\n\t\tdragEndSpeed: false,\n\n\t\tresponsive: {},\n\t\tresponsiveRefreshRate: 200,\n\t\tresponsiveBaseElement: window,\n\n\t\tfallbackEasing: 'swing',\n\n\t\tinfo: false,\n\n\t\tnestedItemSelector: false,\n\t\titemElement: 'div',\n\t\tstageElement: 'div',\n\n\t\trefreshClass: 'owl-refresh',\n\t\tloadedClass: 'owl-loaded',\n\t\tloadingClass: 'owl-loading',\n\t\trtlClass: 'owl-rtl',\n\t\tresponsiveClass: 'owl-responsive',\n\t\tdragClass: 'owl-drag',\n\t\titemClass: 'owl-item',\n\t\tstageClass: 'owl-stage',\n\t\tstageOuterClass: 'owl-stage-outer',\n\t\tgrabClass: 'owl-grab'\n\t};\n\n\t/**\n\t * Enumeration for width.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Width = {\n\t\tDefault: 'default',\n\t\tInner: 'inner',\n\t\tOuter: 'outer'\n\t};\n\n\t/**\n\t * Enumeration for types.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Type = {\n\t\tEvent: 'event',\n\t\tState: 'state'\n\t};\n\n\t/**\n\t * Contains all registered plugins.\n\t * @public\n\t */\n\tOwl.Plugins = {};\n\n\t/**\n\t * List of workers involved in the update process.\n\t */\n\tOwl.Workers = [ {\n\t\tfilter: [ 'width', 'settings' ],\n\t\trun: function() {\n\t\t\tthis._width = this.$element.width();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = this._items && this._items[this.relative(this._current)];\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tthis.$stage.children('.cloned').remove();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar margin = this.settings.margin || '',\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\trtl = this.settings.rtl,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': 'auto',\n\t\t\t\t\t'margin-left': rtl ? margin : '',\n\t\t\t\t\t'margin-right': rtl ? '' : margin\n\t\t\t\t};\n\n\t\t\t!grid && this.$stage.children().css(css);\n\n\t\t\tcache.css = css;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,\n\t\t\t\tmerge = null,\n\t\t\t\titerator = this._items.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\twidths = [];\n\n\t\t\tcache.items = {\n\t\t\t\tmerge: false,\n\t\t\t\twidth: width\n\t\t\t};\n\n\t\t\twhile (iterator--) {\n\t\t\t\tmerge = this._mergers[iterator];\n\t\t\t\tmerge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;\n\n\t\t\t\tcache.items.merge = merge > 1 || cache.items.merge;\n\n\t\t\t\twidths[iterator] = !grid ? this._items[iterator].width() : width * merge;\n\t\t\t}\n\n\t\t\tthis._widths = widths;\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar clones = [],\n\t\t\t\titems = this._items,\n\t\t\t\tsettings = this.settings,\n\t\t\t\tview = Math.max(settings.items * 2, 4),\n\t\t\t\tsize = Math.ceil(items.length / 2) * 2,\n\t\t\t\trepeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,\n\t\t\t\tappend = '',\n\t\t\t\tprepend = '';\n\n\t\t\trepeat /= 2;\n\n\t\t\twhile (repeat--) {\n\t\t\t\t// Switch to only using appended clones\n\t\t\t\tclones.push(this.normalize(clones.length / 2, true));\n\t\t\t\tappend = append + items[clones[clones.length - 1]][0].outerHTML;\n\t\t\t\tclones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));\n\t\t\t\tprepend = items[clones[clones.length - 1]][0].outerHTML + prepend;\n\t\t\t}\n\n\t\t\tthis._clones = clones;\n\n\t\t\t$(append).addClass('cloned').appendTo(this.$stage);\n\t\t\t$(prepend).addClass('cloned').prependTo(this.$stage);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tsize = this._clones.length + this._items.length,\n\t\t\t\titerator = -1,\n\t\t\t\tprevious = 0,\n\t\t\t\tcurrent = 0,\n\t\t\t\tcoordinates = [];\n\n\t\t\twhile (++iterator < size) {\n\t\t\t\tprevious = coordinates[iterator - 1] || 0;\n\t\t\t\tcurrent = this._widths[this.relative(iterator)] + this.settings.margin;\n\t\t\t\tcoordinates.push(previous + current * rtl);\n\t\t\t}\n\n\t\t\tthis._coordinates = coordinates;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar padding = this.settings.stagePadding,\n\t\t\t\tcoordinates = this._coordinates,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,\n\t\t\t\t\t'padding-left': padding || '',\n\t\t\t\t\t'padding-right': padding || ''\n\t\t\t\t};\n\n\t\t\tthis.$stage.css(css);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar iterator = this._coordinates.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\titems = this.$stage.children();\n\n\t\t\tif (grid && cache.items.merge) {\n\t\t\t\twhile (iterator--) {\n\t\t\t\t\tcache.css.width = this._widths[this.relative(iterator)];\n\t\t\t\t\titems.eq(iterator).css(cache.css);\n\t\t\t\t}\n\t\t\t} else if (grid) {\n\t\t\t\tcache.css.width = cache.items.width;\n\t\t\t\titems.css(cache.css);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tfilter: [ 'items' ],\n\t\trun: function() {\n\t\t\tthis._coordinates.length < 1 && this.$stage.removeAttr('style');\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = cache.current ? this.$stage.children().index(cache.current) : 0;\n\t\t\tcache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));\n\t\t\tthis.reset(cache.current);\n\t\t}\n\t}, {\n\t\tfilter: [ 'position' ],\n\t\trun: function() {\n\t\t\tthis.animate(this.coordinates(this._current));\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'position', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tpadding = this.settings.stagePadding * 2,\n\t\t\t\tbegin = this.coordinates(this.current()) + padding,\n\t\t\t\tend = begin + this.width() * rtl,\n\t\t\t\tinner, outer, matches = [], i, n;\n\n\t\t\tfor (i = 0, n = this._coordinates.length; i < n; i++) {\n\t\t\t\tinner = this._coordinates[i - 1] || 0;\n\t\t\t\touter = Math.abs(this._coordinates[i]) + padding * rtl;\n\n\t\t\t\tif ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))\n\t\t\t\t\t|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {\n\t\t\t\t\tmatches.push(i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$stage.children('.active').removeClass('active');\n\t\t\tthis.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');\n\n\t\t\tif (this.settings.center) {\n\t\t\t\tthis.$stage.children('.center').removeClass('center');\n\t\t\t\tthis.$stage.children().eq(this.current()).addClass('center');\n\t\t\t}\n\t\t}\n\t} ];\n\n\t/**\n\t * Initializes the carousel.\n\t * @protected\n\t */\n\tOwl.prototype.initialize = function() {\n\t\tthis.enter('initializing');\n\t\tthis.trigger('initialize');\n\n\t\tthis.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);\n\n\t\tif (this.settings.autoWidth && !this.is('pre-loading')) {\n\t\t\tvar imgs, nestedSelector, width;\n\t\t\timgs = this.$element.find('img');\n\t\t\tnestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;\n\t\t\twidth = this.$element.children(nestedSelector).width();\n\n\t\t\tif (imgs.length && width <= 0) {\n\t\t\t\tthis.preloadAutoWidthImages(imgs);\n\t\t\t}\n\t\t}\n\n\t\tthis.$element.addClass(this.options.loadingClass);\n\n\t\t// create stage\n\t\tthis.$stage = $('<' + this.settings.stageElement + ' class=\"' + this.settings.stageClass + '\"/>')\n\t\t\t.wrap('
');\n\n\t\t// append stage\n\t\tthis.$element.append(this.$stage.parent());\n\n\t\t// append content\n\t\tthis.replace(this.$element.children().not(this.$stage.parent()));\n\n\t\t// check visibility\n\t\tif (this.$element.is(':visible')) {\n\t\t\t// update view\n\t\t\tthis.refresh();\n\t\t} else {\n\t\t\t// invalidate width\n\t\t\tthis.invalidate('width');\n\t\t}\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.addClass(this.options.loadedClass);\n\n\t\t// register event handlers\n\t\tthis.registerEventHandlers();\n\n\t\tthis.leave('initializing');\n\t\tthis.trigger('initialized');\n\t};\n\n\t/**\n\t * Setups the current settings.\n\t * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?\n\t * @todo Support for media queries by using `matchMedia` would be nice.\n\t * @public\n\t */\n\tOwl.prototype.setup = function() {\n\t\tvar viewport = this.viewport(),\n\t\t\toverwrites = this.options.responsive,\n\t\t\tmatch = -1,\n\t\t\tsettings = null;\n\n\t\tif (!overwrites) {\n\t\t\tsettings = $.extend({}, this.options);\n\t\t} else {\n\t\t\t$.each(overwrites, function(breakpoint) {\n\t\t\t\tif (breakpoint <= viewport && breakpoint > match) {\n\t\t\t\t\tmatch = Number(breakpoint);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsettings = $.extend({}, this.options, overwrites[match]);\n\t\t\tif (typeof settings.stagePadding === 'function') {\n\t\t\t\tsettings.stagePadding = settings.stagePadding();\n\t\t\t}\n\t\t\tdelete settings.responsive;\n\n\t\t\t// responsive class\n\t\t\tif (settings.responsiveClass) {\n\t\t\t\tthis.$element.attr('class',\n\t\t\t\t\tthis.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\\\S+\\\\s', 'g'), '$1' + match)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.trigger('change', { property: { name: 'settings', value: settings } });\n\t\tthis._breakpoint = match;\n\t\tthis.settings = settings;\n\t\tthis.invalidate('settings');\n\t\tthis.trigger('changed', { property: { name: 'settings', value: this.settings } });\n\t};\n\n\t/**\n\t * Updates option logic if necessery.\n\t * @protected\n\t */\n\tOwl.prototype.optionsLogic = function() {\n\t\tif (this.settings.autoWidth) {\n\t\t\tthis.settings.stagePadding = false;\n\t\t\tthis.settings.merge = false;\n\t\t}\n\t};\n\n\t/**\n\t * Prepares an item before add.\n\t * @todo Rename event parameter `content` to `item`.\n\t * @protected\n\t * @returns {jQuery|HTMLElement} - The item container.\n\t */\n\tOwl.prototype.prepare = function(item) {\n\t\tvar event = this.trigger('prepare', { content: item });\n\n\t\tif (!event.data) {\n\t\t\tevent.data = $('<' + this.settings.itemElement + '/>')\n\t\t\t\t.addClass(this.options.itemClass).append(item)\n\t\t}\n\n\t\tthis.trigger('prepared', { content: event.data });\n\n\t\treturn event.data;\n\t};\n\n\t/**\n\t * Updates the view.\n\t * @public\n\t */\n\tOwl.prototype.update = function() {\n\t\tvar i = 0,\n\t\t\tn = this._pipe.length,\n\t\t\tfilter = $.proxy(function(p) { return this[p] }, this._invalidated),\n\t\t\tcache = {};\n\n\t\twhile (i < n) {\n\t\t\tif (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {\n\t\t\t\tthis._pipe[i].run(cache);\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\n\t\tthis._invalidated = {};\n\n\t\t!this.is('valid') && this.enter('valid');\n\t};\n\n\t/**\n\t * Gets the width of the view.\n\t * @public\n\t * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.\n\t * @returns {Number} - The width of the view in pixel.\n\t */\n\tOwl.prototype.width = function(dimension) {\n\t\tdimension = dimension || Owl.Width.Default;\n\t\tswitch (dimension) {\n\t\t\tcase Owl.Width.Inner:\n\t\t\tcase Owl.Width.Outer:\n\t\t\t\treturn this._width;\n\t\t\tdefault:\n\t\t\t\treturn this._width - this.settings.stagePadding * 2 + this.settings.margin;\n\t\t}\n\t};\n\n\t/**\n\t * Refreshes the carousel primarily for adaptive purposes.\n\t * @public\n\t */\n\tOwl.prototype.refresh = function() {\n\t\tthis.enter('refreshing');\n\t\tthis.trigger('refresh');\n\n\t\tthis.setup();\n\n\t\tthis.optionsLogic();\n\n\t\tthis.$element.addClass(this.options.refreshClass);\n\n\t\tthis.update();\n\n\t\tthis.$element.removeClass(this.options.refreshClass);\n\n\t\tthis.leave('refreshing');\n\t\tthis.trigger('refreshed');\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onThrottledResize = function() {\n\t\twindow.clearTimeout(this.resizeTimer);\n\t\tthis.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onResize = function() {\n\t\tif (!this._items.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._width === this.$element.width()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.$element.is(':visible')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.enter('resizing');\n\n\t\tif (this.trigger('resize').isDefaultPrevented()) {\n\t\t\tthis.leave('resizing');\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.invalidate('width');\n\n\t\tthis.refresh();\n\n\t\tthis.leave('resizing');\n\t\tthis.trigger('resized');\n\t};\n\n\t/**\n\t * Registers event handlers.\n\t * @todo Check `msPointerEnabled`\n\t * @todo #261\n\t * @protected\n\t */\n\tOwl.prototype.registerEventHandlers = function() {\n\t\tif ($.support.transition) {\n\t\t\tthis.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));\n\t\t}\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\tthis.on(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tif (this.settings.mouseDrag) {\n\t\t\tthis.$element.addClass(this.options.dragClass);\n\t\t\tthis.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });\n\t\t}\n\n\t\tif (this.settings.touchDrag){\n\t\t\tthis.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));\n\t\t}\n\t};\n\n\t/**\n\t * Handles `touchstart` and `mousedown` events.\n\t * @todo Horizontal swipe threshold as option\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragStart = function(event) {\n\t\tvar stage = null;\n\n\t\tif (event.which === 3) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ($.support.transform) {\n\t\t\tstage = this.$stage.css('transform').replace(/.*\\(|\\)| /g, '').split(',');\n\t\t\tstage = {\n\t\t\t\tx: stage[stage.length === 16 ? 12 : 4],\n\t\t\t\ty: stage[stage.length === 16 ? 13 : 5]\n\t\t\t};\n\t\t} else {\n\t\t\tstage = this.$stage.position();\n\t\t\tstage = {\n\t\t\t\tx: this.settings.rtl ?\n\t\t\t\t\tstage.left + this.$stage.width() - this.width() + this.settings.margin :\n\t\t\t\t\tstage.left,\n\t\t\t\ty: stage.top\n\t\t\t};\n\t\t}\n\n\t\tif (this.is('animating')) {\n\t\t\t$.support.transform ? this.animate(stage.x) : this.$stage.stop()\n\t\t\tthis.invalidate('position');\n\t\t}\n\n\t\tthis.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');\n\n\t\tthis.speed(0);\n\n\t\tthis._drag.time = new Date().getTime();\n\t\tthis._drag.target = $(event.target);\n\t\tthis._drag.stage.start = stage;\n\t\tthis._drag.stage.current = stage;\n\t\tthis._drag.pointer = this.pointer(event);\n\n\t\t$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));\n\n\t\t$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {\n\t\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event));\n\n\t\t\t$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));\n\n\t\t\tif (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.enter('dragging');\n\t\t\tthis.trigger('drag');\n\t\t}, this));\n\t};\n\n\t/**\n\t * Handles the `touchmove` and `mousemove` events.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragMove = function(event) {\n\t\tvar minimum = null,\n\t\t\tmaximum = null,\n\t\t\tpull = null,\n\t\t\tdelta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this.difference(this._drag.stage.start, delta);\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tif (this.settings.loop) {\n\t\t\tminimum = this.coordinates(this.minimum());\n\t\t\tmaximum = this.coordinates(this.maximum() + 1) - minimum;\n\t\t\tstage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;\n\t\t} else {\n\t\t\tminimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());\n\t\t\tmaximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());\n\t\t\tpull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;\n\t\t\tstage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);\n\t\t}\n\n\t\tthis._drag.stage.current = stage;\n\n\t\tthis.animate(stage.x);\n\t};\n\n\t/**\n\t * Handles the `touchend` and `mouseup` events.\n\t * @todo #261\n\t * @todo Threshold for click event\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragEnd = function(event) {\n\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this._drag.stage.current,\n\t\t\tdirection = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';\n\n\t\t$(document).off('.owl.core');\n\n\t\tthis.$element.removeClass(this.options.grabClass);\n\n\t\tif (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {\n\t\t\tthis.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);\n\t\t\tthis.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));\n\t\t\tthis.invalidate('position');\n\t\t\tthis.update();\n\n\t\t\tthis._drag.direction = direction;\n\n\t\t\tif (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {\n\t\t\t\tthis._drag.target.one('click.owl.core', function() { return false; });\n\t\t\t}\n\t\t}\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.leave('dragging');\n\t\tthis.trigger('dragged');\n\t};\n\n\t/**\n\t * Gets absolute position of the closest item for a coordinate.\n\t * @todo Setting `freeDrag` makes `closest` not reusable. See #165.\n\t * @protected\n\t * @param {Number} coordinate - The coordinate in pixel.\n\t * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.\n\t * @return {Number} - The absolute position of the closest item.\n\t */\n\tOwl.prototype.closest = function(coordinate, direction) {\n\t\tvar position = -1,\n\t\t\tpull = 30,\n\t\t\twidth = this.width(),\n\t\t\tcoordinates = this.coordinates();\n\n\t\tif (!this.settings.freeDrag) {\n\t\t\t// check closest item\n\t\t\t$.each(coordinates, $.proxy(function(index, value) {\n\t\t\t\t// on a left pull, check on current index\n\t\t\t\tif (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {\n\t\t\t\t\tposition = index;\n\t\t\t\t// on a right pull, check on previous index\n\t\t\t\t// to do so, subtract width from value and set position = index + 1\n\t\t\t\t} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {\n\t\t\t\t\tposition = index + 1;\n\t\t\t\t} else if (this.op(coordinate, '<', value)\n\t\t\t\t\t&& this.op(coordinate, '>', coordinates[index + 1] || value - width)) {\n\t\t\t\t\tposition = direction === 'left' ? index + 1 : index;\n\t\t\t\t}\n\t\t\t\treturn position === -1;\n\t\t\t}, this));\n\t\t}\n\n\t\tif (!this.settings.loop) {\n\t\t\t// non loop boundries\n\t\t\tif (this.op(coordinate, '>', coordinates[this.minimum()])) {\n\t\t\t\tposition = coordinate = this.minimum();\n\t\t\t} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {\n\t\t\t\tposition = coordinate = this.maximum();\n\t\t\t}\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Animates the stage.\n\t * @todo #270\n\t * @public\n\t * @param {Number} coordinate - The coordinate in pixels.\n\t */\n\tOwl.prototype.animate = function(coordinate) {\n\t\tvar animate = this.speed() > 0;\n\n\t\tthis.is('animating') && this.onTransitionEnd();\n\n\t\tif (animate) {\n\t\t\tthis.enter('animating');\n\t\t\tthis.trigger('translate');\n\t\t}\n\n\t\tif ($.support.transform3d && $.support.transition) {\n\t\t\tthis.$stage.css({\n\t\t\t\ttransform: 'translate3d(' + coordinate + 'px,0px,0px)',\n\t\t\t\ttransition: (this.speed() / 1000) + 's'\n\t\t\t});\n\t\t} else if (animate) {\n\t\t\tthis.$stage.animate({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));\n\t\t} else {\n\t\t\tthis.$stage.css({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Checks whether the carousel is in a specific state or not.\n\t * @param {String} state - The state to check.\n\t * @returns {Boolean} - The flag which indicates if the carousel is busy.\n\t */\n\tOwl.prototype.is = function(state) {\n\t\treturn this._states.current[state] && this._states.current[state] > 0;\n\t};\n\n\t/**\n\t * Sets the absolute position of the current item.\n\t * @public\n\t * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.\n\t * @returns {Number} - The absolute position of the current item.\n\t */\n\tOwl.prototype.current = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._current;\n\t\t}\n\n\t\tif (this._items.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tposition = this.normalize(position);\n\n\t\tif (this._current !== position) {\n\t\t\tvar event = this.trigger('change', { property: { name: 'position', value: position } });\n\n\t\t\tif (event.data !== undefined) {\n\t\t\t\tposition = this.normalize(event.data);\n\t\t\t}\n\n\t\t\tthis._current = position;\n\n\t\t\tthis.invalidate('position');\n\n\t\t\tthis.trigger('changed', { property: { name: 'position', value: this._current } });\n\t\t}\n\n\t\treturn this._current;\n\t};\n\n\t/**\n\t * Invalidates the given part of the update routine.\n\t * @param {String} [part] - The part to invalidate.\n\t * @returns {Array.} - The invalidated parts.\n\t */\n\tOwl.prototype.invalidate = function(part) {\n\t\tif ($.type(part) === 'string') {\n\t\t\tthis._invalidated[part] = true;\n\t\t\tthis.is('valid') && this.leave('valid');\n\t\t}\n\t\treturn $.map(this._invalidated, function(v, i) { return i });\n\t};\n\n\t/**\n\t * Resets the absolute position of the current item.\n\t * @public\n\t * @param {Number} position - The absolute position of the new item.\n\t */\n\tOwl.prototype.reset = function(position) {\n\t\tposition = this.normalize(position);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._speed = 0;\n\t\tthis._current = position;\n\n\t\tthis.suppress([ 'translate', 'translated' ]);\n\n\t\tthis.animate(this.coordinates(position));\n\n\t\tthis.release([ 'translate', 'translated' ]);\n\t};\n\n\t/**\n\t * Normalizes an absolute or a relative position of an item.\n\t * @public\n\t * @param {Number} position - The absolute or relative position to normalize.\n\t * @param {Boolean} [relative=false] - Whether the given position is relative or not.\n\t * @returns {Number} - The normalized position.\n\t */\n\tOwl.prototype.normalize = function(position, relative) {\n\t\tvar n = this._items.length,\n\t\t\tm = relative ? 0 : this._clones.length;\n\n\t\tif (!this.isNumeric(position) || n < 1) {\n\t\t\tposition = undefined;\n\t\t} else if (position < 0 || position >= n + m) {\n\t\t\tposition = ((position - m / 2) % n + n) % n + m / 2;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Converts an absolute position of an item into a relative one.\n\t * @public\n\t * @param {Number} position - The absolute position to convert.\n\t * @returns {Number} - The converted position.\n\t */\n\tOwl.prototype.relative = function(position) {\n\t\tposition -= this._clones.length / 2;\n\t\treturn this.normalize(position, true);\n\t};\n\n\t/**\n\t * Gets the maximum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.maximum = function(relative) {\n\t\tvar settings = this.settings,\n\t\t\tmaximum = this._coordinates.length,\n\t\t\titerator,\n\t\t\treciprocalItemsWidth,\n\t\t\telementWidth;\n\n\t\tif (settings.loop) {\n\t\t\tmaximum = this._clones.length / 2 + this._items.length - 1;\n\t\t} else if (settings.autoWidth || settings.merge) {\n\t\t\titerator = this._items.length;\n\t\t\treciprocalItemsWidth = this._items[--iterator].width();\n\t\t\telementWidth = this.$element.width();\n\t\t\twhile (iterator--) {\n\t\t\t\treciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;\n\t\t\t\tif (reciprocalItemsWidth > elementWidth) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaximum = iterator + 1;\n\t\t} else if (settings.center) {\n\t\t\tmaximum = this._items.length - 1;\n\t\t} else {\n\t\t\tmaximum = this._items.length - settings.items;\n\t\t}\n\n\t\tif (relative) {\n\t\t\tmaximum -= this._clones.length / 2;\n\t\t}\n\n\t\treturn Math.max(maximum, 0);\n\t};\n\n\t/**\n\t * Gets the minimum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.minimum = function(relative) {\n\t\treturn relative ? 0 : this._clones.length / 2;\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.items = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._items.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._items[position];\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.mergers = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._mergers.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._mergers[position];\n\t};\n\n\t/**\n\t * Gets the absolute positions of clones for an item.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @returns {Array.} - The absolute positions of clones for the item or all if no position was given.\n\t */\n\tOwl.prototype.clones = function(position) {\n\t\tvar odd = this._clones.length / 2,\n\t\t\teven = odd + this._items.length,\n\t\t\tmap = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._clones, function(v, i) { return map(i) });\n\t\t}\n\n\t\treturn $.map(this._clones, function(v, i) { return v === position ? map(i) : null });\n\t};\n\n\t/**\n\t * Sets the current animation speed.\n\t * @public\n\t * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.\n\t * @returns {Number} - The current animation speed in milliseconds.\n\t */\n\tOwl.prototype.speed = function(speed) {\n\t\tif (speed !== undefined) {\n\t\t\tthis._speed = speed;\n\t\t}\n\n\t\treturn this._speed;\n\t};\n\n\t/**\n\t * Gets the coordinate of an item.\n\t * @todo The name of this method is missleanding.\n\t * @public\n\t * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.\n\t * @returns {Number|Array.} - The coordinate of the item in pixel or all coordinates.\n\t */\n\tOwl.prototype.coordinates = function(position) {\n\t\tvar multiplier = 1,\n\t\t\tnewPosition = position - 1,\n\t\t\tcoordinate;\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._coordinates, $.proxy(function(coordinate, index) {\n\t\t\t\treturn this.coordinates(index);\n\t\t\t}, this));\n\t\t}\n\n\t\tif (this.settings.center) {\n\t\t\tif (this.settings.rtl) {\n\t\t\t\tmultiplier = -1;\n\t\t\t\tnewPosition = position + 1;\n\t\t\t}\n\n\t\t\tcoordinate = this._coordinates[position];\n\t\t\tcoordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;\n\t\t} else {\n\t\t\tcoordinate = this._coordinates[newPosition] || 0;\n\t\t}\n\n\t\tcoordinate = Math.ceil(coordinate);\n\n\t\treturn coordinate;\n\t};\n\n\t/**\n\t * Calculates the speed for a translation.\n\t * @protected\n\t * @param {Number} from - The absolute position of the start item.\n\t * @param {Number} to - The absolute position of the target item.\n\t * @param {Number} [factor=undefined] - The time factor in milliseconds.\n\t * @returns {Number} - The time in milliseconds for the translation.\n\t */\n\tOwl.prototype.duration = function(from, to, factor) {\n\t\tif (factor === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));\n\t};\n\n\t/**\n\t * Slides to the specified item.\n\t * @public\n\t * @param {Number} position - The position of the item.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.to = function(position, speed) {\n\t\tvar current = this.current(),\n\t\t\trevert = null,\n\t\t\tdistance = position - this.relative(current),\n\t\t\tdirection = (distance > 0) - (distance < 0),\n\t\t\titems = this._items.length,\n\t\t\tminimum = this.minimum(),\n\t\t\tmaximum = this.maximum();\n\n\t\tif (this.settings.loop) {\n\t\t\tif (!this.settings.rewind && Math.abs(distance) > items / 2) {\n\t\t\t\tdistance += direction * -1 * items;\n\t\t\t}\n\n\t\t\tposition = current + distance;\n\t\t\trevert = ((position - minimum) % items + items) % items + minimum;\n\n\t\t\tif (revert !== position && revert - distance <= maximum && revert - distance > 0) {\n\t\t\t\tcurrent = revert - distance;\n\t\t\t\tposition = revert;\n\t\t\t\tthis.reset(current);\n\t\t\t}\n\t\t} else if (this.settings.rewind) {\n\t\t\tmaximum += 1;\n\t\t\tposition = (position % maximum + maximum) % maximum;\n\t\t} else {\n\t\t\tposition = Math.max(minimum, Math.min(maximum, position));\n\t\t}\n\n\t\tthis.speed(this.duration(current, position, speed));\n\t\tthis.current(position);\n\n\t\tif (this.$element.is(':visible')) {\n\t\t\tthis.update();\n\t\t}\n\t};\n\n\t/**\n\t * Slides to the next item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.next = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) + 1, speed);\n\t};\n\n\t/**\n\t * Slides to the previous item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.prev = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) - 1, speed);\n\t};\n\n\t/**\n\t * Handles the end of an animation.\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onTransitionEnd = function(event) {\n\n\t\t// if css2 animation then event object is undefined\n\t\tif (event !== undefined) {\n\t\t\tevent.stopPropagation();\n\n\t\t\t// Catch only owl-stage transitionEnd event\n\t\t\tif ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.leave('animating');\n\t\tthis.trigger('translated');\n\t};\n\n\t/**\n\t * Gets viewport width.\n\t * @protected\n\t * @return {Number} - The width in pixel.\n\t */\n\tOwl.prototype.viewport = function() {\n\t\tvar width;\n\t\tif (this.options.responsiveBaseElement !== window) {\n\t\t\twidth = $(this.options.responsiveBaseElement).width();\n\t\t} else if (window.innerWidth) {\n\t\t\twidth = window.innerWidth;\n\t\t} else if (document.documentElement && document.documentElement.clientWidth) {\n\t\t\twidth = document.documentElement.clientWidth;\n\t\t} else {\n\t\t\tconsole.warn('Can not detect viewport width.');\n\t\t}\n\t\treturn width;\n\t};\n\n\t/**\n\t * Replaces the current content.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The new content.\n\t */\n\tOwl.prototype.replace = function(content) {\n\t\tthis.$stage.empty();\n\t\tthis._items = [];\n\n\t\tif (content) {\n\t\t\tcontent = (content instanceof jQuery) ? content : $(content);\n\t\t}\n\n\t\tif (this.settings.nestedItemSelector) {\n\t\t\tcontent = content.find('.' + this.settings.nestedItemSelector);\n\t\t}\n\n\t\tcontent.filter(function() {\n\t\t\treturn this.nodeType === 1;\n\t\t}).each($.proxy(function(index, item) {\n\t\t\titem = this.prepare(item);\n\t\t\tthis.$stage.append(item);\n\t\t\tthis._items.push(item);\n\t\t\tthis._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}, this));\n\n\t\tthis.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);\n\n\t\tthis.invalidate('items');\n\t};\n\n\t/**\n\t * Adds an item.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The item content to add.\n\t * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.\n\t */\n\tOwl.prototype.add = function(content, position) {\n\t\tvar current = this.relative(this._current);\n\n\t\tposition = position === undefined ? this._items.length : this.normalize(position, true);\n\t\tcontent = content instanceof jQuery ? content : $(content);\n\n\t\tthis.trigger('add', { content: content, position: position });\n\n\t\tcontent = this.prepare(content);\n\n\t\tif (this._items.length === 0 || position === this._items.length) {\n\t\t\tthis._items.length === 0 && this.$stage.append(content);\n\t\t\tthis._items.length !== 0 && this._items[position - 1].after(content);\n\t\t\tthis._items.push(content);\n\t\t\tthis._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t} else {\n\t\t\tthis._items[position].before(content);\n\t\t\tthis._items.splice(position, 0, content);\n\t\t\tthis._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}\n\n\t\tthis._items[current] && this.reset(this._items[current].index());\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('added', { content: content, position: position });\n\t};\n\n\t/**\n\t * Removes an item by its position.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {Number} position - The relative position of the item to remove.\n\t */\n\tOwl.prototype.remove = function(position) {\n\t\tposition = this.normalize(position, true);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.trigger('remove', { content: this._items[position], position: position });\n\n\t\tthis._items[position].remove();\n\t\tthis._items.splice(position, 1);\n\t\tthis._mergers.splice(position, 1);\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('removed', { content: null, position: position });\n\t};\n\n\t/**\n\t * Preloads images with auto width.\n\t * @todo Replace by a more generic approach\n\t * @protected\n\t */\n\tOwl.prototype.preloadAutoWidthImages = function(images) {\n\t\timages.each($.proxy(function(i, element) {\n\t\t\tthis.enter('pre-loading');\n\t\t\telement = $(element);\n\t\t\t$(new Image()).one('load', $.proxy(function(e) {\n\t\t\t\telement.attr('src', e.target.src);\n\t\t\t\telement.css('opacity', 1);\n\t\t\t\tthis.leave('pre-loading');\n\t\t\t\t!this.is('pre-loading') && !this.is('initializing') && this.refresh();\n\t\t\t}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));\n\t\t}, this));\n\t};\n\n\t/**\n\t * Destroys the carousel.\n\t * @public\n\t */\n\tOwl.prototype.destroy = function() {\n\n\t\tthis.$element.off('.owl.core');\n\t\tthis.$stage.off('.owl.core');\n\t\t$(document).off('.owl.core');\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\twindow.clearTimeout(this.resizeTimer);\n\t\t\tthis.off(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tfor (var i in this._plugins) {\n\t\t\tthis._plugins[i].destroy();\n\t\t}\n\n\t\tthis.$stage.children('.cloned').remove();\n\n\t\tthis.$stage.unwrap();\n\t\tthis.$stage.children().contents().unwrap();\n\t\tthis.$stage.children().unwrap();\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.refreshClass)\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.removeClass(this.options.loadedClass)\n\t\t\t.removeClass(this.options.rtlClass)\n\t\t\t.removeClass(this.options.dragClass)\n\t\t\t.removeClass(this.options.grabClass)\n\t\t\t.attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\\\S+\\\\s', 'g'), ''))\n\t\t\t.removeData('owl.carousel');\n\t};\n\n\t/**\n\t * Operators to calculate right-to-left and left-to-right.\n\t * @protected\n\t * @param {Number} [a] - The left side operand.\n\t * @param {String} [o] - The operator.\n\t * @param {Number} [b] - The right side operand.\n\t */\n\tOwl.prototype.op = function(a, o, b) {\n\t\tvar rtl = this.settings.rtl;\n\t\tswitch (o) {\n\t\t\tcase '<':\n\t\t\t\treturn rtl ? a > b : a < b;\n\t\t\tcase '>':\n\t\t\t\treturn rtl ? a < b : a > b;\n\t\t\tcase '>=':\n\t\t\t\treturn rtl ? a <= b : a >= b;\n\t\t\tcase '<=':\n\t\t\t\treturn rtl ? a >= b : a <= b;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\t/**\n\t * Attaches to an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The event handler to attach.\n\t * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.\n\t */\n\tOwl.prototype.on = function(element, event, listener, capture) {\n\t\tif (element.addEventListener) {\n\t\t\telement.addEventListener(event, listener, capture);\n\t\t} else if (element.attachEvent) {\n\t\t\telement.attachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Detaches from an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The attached event handler to detach.\n\t * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.\n\t */\n\tOwl.prototype.off = function(element, event, listener, capture) {\n\t\tif (element.removeEventListener) {\n\t\t\telement.removeEventListener(event, listener, capture);\n\t\t} else if (element.detachEvent) {\n\t\t\telement.detachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Triggers a public event.\n\t * @todo Remove `status`, `relatedTarget` should be used instead.\n\t * @protected\n\t * @param {String} name - The event name.\n\t * @param {*} [data=null] - The event data.\n\t * @param {String} [namespace=carousel] - The event namespace.\n\t * @param {String} [state] - The state which is associated with the event.\n\t * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.\n\t * @returns {Event} - The event arguments.\n\t */\n\tOwl.prototype.trigger = function(name, data, namespace, state, enter) {\n\t\tvar status = {\n\t\t\titem: { count: this._items.length, index: this.current() }\n\t\t}, handler = $.camelCase(\n\t\t\t$.grep([ 'on', name, namespace ], function(v) { return v })\n\t\t\t\t.join('-').toLowerCase()\n\t\t), event = $.Event(\n\t\t\t[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),\n\t\t\t$.extend({ relatedTarget: this }, status, data)\n\t\t);\n\n\t\tif (!this._supress[name]) {\n\t\t\t$.each(this._plugins, function(name, plugin) {\n\t\t\t\tif (plugin.onTrigger) {\n\t\t\t\t\tplugin.onTrigger(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.register({ type: Owl.Type.Event, name: name });\n\t\t\tthis.$element.trigger(event);\n\n\t\t\tif (this.settings && typeof this.settings[handler] === 'function') {\n\t\t\t\tthis.settings[handler].call(this, event);\n\t\t\t}\n\t\t}\n\n\t\treturn event;\n\t};\n\n\t/**\n\t * Enters a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.enter = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tif (this._states.current[name] === undefined) {\n\t\t\t\tthis._states.current[name] = 0;\n\t\t\t}\n\n\t\t\tthis._states.current[name]++;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Leaves a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.leave = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tthis._states.current[name]--;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Registers an event or state.\n\t * @public\n\t * @param {Object} object - The event or state to register.\n\t */\n\tOwl.prototype.register = function(object) {\n\t\tif (object.type === Owl.Type.Event) {\n\t\t\tif (!$.event.special[object.name]) {\n\t\t\t\t$.event.special[object.name] = {};\n\t\t\t}\n\n\t\t\tif (!$.event.special[object.name].owl) {\n\t\t\t\tvar _default = $.event.special[object.name]._default;\n\t\t\t\t$.event.special[object.name]._default = function(e) {\n\t\t\t\t\tif (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {\n\t\t\t\t\t\treturn _default.apply(this, arguments);\n\t\t\t\t\t}\n\t\t\t\t\treturn e.namespace && e.namespace.indexOf('owl') > -1;\n\t\t\t\t};\n\t\t\t\t$.event.special[object.name].owl = true;\n\t\t\t}\n\t\t} else if (object.type === Owl.Type.State) {\n\t\t\tif (!this._states.tags[object.name]) {\n\t\t\t\tthis._states.tags[object.name] = object.tags;\n\t\t\t} else {\n\t\t\t\tthis._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);\n\t\t\t}\n\n\t\t\tthis._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {\n\t\t\t\treturn $.inArray(tag, this._states.tags[object.name]) === i;\n\t\t\t}, this));\n\t\t}\n\t};\n\n\t/**\n\t * Suppresses events.\n\t * @protected\n\t * @param {Array.} events - The events to suppress.\n\t */\n\tOwl.prototype.suppress = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tthis._supress[event] = true;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Releases suppressed events.\n\t * @protected\n\t * @param {Array.} events - The events to release.\n\t */\n\tOwl.prototype.release = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tdelete this._supress[event];\n\t\t}, this));\n\t};\n\n\t/**\n\t * Gets unified pointer coordinates from event.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} - The `mousedown` or `touchstart` event.\n\t * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.\n\t */\n\tOwl.prototype.pointer = function(event) {\n\t\tvar result = { x: null, y: null };\n\n\t\tevent = event.originalEvent || event || window.event;\n\n\t\tevent = event.touches && event.touches.length ?\n\t\t\tevent.touches[0] : event.changedTouches && event.changedTouches.length ?\n\t\t\t\tevent.changedTouches[0] : event;\n\n\t\tif (event.pageX) {\n\t\t\tresult.x = event.pageX;\n\t\t\tresult.y = event.pageY;\n\t\t} else {\n\t\t\tresult.x = event.clientX;\n\t\t\tresult.y = event.clientY;\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t/**\n\t * Determines if the input is a Number or something that can be coerced to a Number\n\t * @protected\n\t * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested\n\t * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number\n\t */\n\tOwl.prototype.isNumeric = function(number) {\n\t\treturn !isNaN(parseFloat(number));\n\t};\n\n\t/**\n\t * Gets the difference of two vectors.\n\t * @todo #261\n\t * @protected\n\t * @param {Object} - The first vector.\n\t * @param {Object} - The second vector.\n\t * @returns {Object} - The difference.\n\t */\n\tOwl.prototype.difference = function(first, second) {\n\t\treturn {\n\t\t\tx: first.x - second.x,\n\t\t\ty: first.y - second.y\n\t\t};\n\t};\n\n\t/**\n\t * The jQuery Plugin for the Owl Carousel\n\t * @todo Navigation plugin `next` and `prev`\n\t * @public\n\t */\n\t$.fn.owlCarousel = function(option) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\n\t\treturn this.each(function() {\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('owl.carousel');\n\n\t\t\tif (!data) {\n\t\t\t\tdata = new Owl(this, typeof option == 'object' && option);\n\t\t\t\t$this.data('owl.carousel', data);\n\n\t\t\t\t$.each([\n\t\t\t\t\t'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'\n\t\t\t\t], function(i, event) {\n\t\t\t\t\tdata.register({ type: Owl.Type.Event, name: event });\n\t\t\t\t\tdata.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {\n\t\t\t\t\t\tif (e.namespace && e.relatedTarget !== this) {\n\t\t\t\t\t\t\tthis.suppress([ event ]);\n\t\t\t\t\t\t\tdata[event].apply(this, [].slice.call(arguments, 1));\n\t\t\t\t\t\t\tthis.release([ event ]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, data));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof option == 'string' && option.charAt(0) !== '_') {\n\t\t\t\tdata[option].apply(data, args);\n\t\t\t}\n\t\t});\n\t};\n\n\t/**\n\t * The constructor for the jQuery Plugin\n\t * @public\n\t */\n\t$.fn.owlCarousel.Constructor = Owl;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * AutoRefresh Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto refresh plugin.\n\t * @class The Auto Refresh Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoRefresh = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Refresh interval.\n\t\t * @protected\n\t\t * @type {number}\n\t\t */\n\t\tthis._interval = null;\n\n\t\t/**\n\t\t * Whether the element is currently visible or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._visible = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoRefresh) {\n\t\t\t\t\tthis.watch();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoRefresh.Defaults = {\n\t\tautoRefresh: true,\n\t\tautoRefreshInterval: 500\n\t};\n\n\t/**\n\t * Watches the element.\n\t */\n\tAutoRefresh.prototype.watch = function() {\n\t\tif (this._interval) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = this._core.$element.is(':visible');\n\t\tthis._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);\n\t};\n\n\t/**\n\t * Refreshes the element.\n\t */\n\tAutoRefresh.prototype.refresh = function() {\n\t\tif (this._core.$element.is(':visible') === this._visible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = !this._visible;\n\n\t\tthis._core.$element.toggleClass('owl-hidden', !this._visible);\n\n\t\tthis._visible && (this._core.invalidate('width') && this._core.refresh());\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoRefresh.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\twindow.clearInterval(this._interval);\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Lazy Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the lazy plugin.\n\t * @class The Lazy Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Lazy = function(carousel) {\n\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Already loaded items.\n\t\t * @protected\n\t\t * @type {Array.}\n\t\t */\n\t\tthis._loaded = [];\n\n\t\t/**\n\t\t * Event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this._core.settings || !this._core.settings.lazyLoad) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ((e.property && e.property.name == 'position') || e.type == 'initialized') {\n\t\t\t\t\tvar settings = this._core.settings,\n\t\t\t\t\t\tn = (settings.center && Math.ceil(settings.items / 2) || settings.items),\n\t\t\t\t\t\ti = ((settings.center && n * -1) || 0),\n\t\t\t\t\t\tposition = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,\n\t\t\t\t\t\tclones = this._core.clones().length,\n\t\t\t\t\t\tload = $.proxy(function(i, v) { this.load(v) }, this);\n\n\t\t\t\t\twhile (i++ < n) {\n\t\t\t\t\t\tthis.load(clones / 2 + this._core.relative(position));\n\t\t\t\t\t\tclones && $.each(this._core.clones(this._core.relative(position)), load);\n\t\t\t\t\t\tposition++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set the default options\n\t\tthis._core.options = $.extend({}, Lazy.Defaults, this._core.options);\n\n\t\t// register event handler\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tLazy.Defaults = {\n\t\tlazyLoad: false\n\t};\n\n\t/**\n\t * Loads all resources of an item at the specified position.\n\t * @param {Number} position - The absolute position of the item.\n\t * @protected\n\t */\n\tLazy.prototype.load = function(position) {\n\t\tvar $item = this._core.$stage.children().eq(position),\n\t\t\t$elements = $item && $item.find('.owl-lazy');\n\n\t\tif (!$elements || $.inArray($item.get(0), this._loaded) > -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t$elements.each($.proxy(function(index, element) {\n\t\t\tvar $element = $(element), image,\n\t\t\t\turl = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src');\n\n\t\t\tthis._core.trigger('load', { element: $element, url: url }, 'lazy');\n\n\t\t\tif ($element.is('img')) {\n\t\t\t\t$element.one('load.owl.lazy', $.proxy(function() {\n\t\t\t\t\t$element.css('opacity', 1);\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this)).attr('src', url);\n\t\t\t} else {\n\t\t\t\timage = new Image();\n\t\t\t\timage.onload = $.proxy(function() {\n\t\t\t\t\t$element.css({\n\t\t\t\t\t\t'background-image': 'url(\"' + url + '\")',\n\t\t\t\t\t\t'opacity': '1'\n\t\t\t\t\t});\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this);\n\t\t\t\timage.src = url;\n\t\t\t}\n\t\t}, this));\n\n\t\tthis._loaded.push($item.get(0));\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tLazy.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis._core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * AutoHeight Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto height plugin.\n\t * @class The Auto Height Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoHeight = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight && e.property.name == 'position'){\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'loaded.owl.lazy': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight\n\t\t\t\t\t&& e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoHeight.Defaults = {\n\t\tautoHeight: false,\n\t\tautoHeightClass: 'owl-height'\n\t};\n\n\t/**\n\t * Updates the view.\n\t */\n\tAutoHeight.prototype.update = function() {\n\t\tvar start = this._core._current,\n\t\t\tend = start + this._core.settings.items,\n\t\t\tvisible = this._core.$stage.children().toArray().slice(start, end),\n\t\t\theights = [],\n\t\t\tmaxheight = 0;\n\n\t\t$.each(visible, function(index, item) {\n\t\t\theights.push($(item).height());\n\t\t});\n\n\t\tmaxheight = Math.max.apply(null, heights);\n\n\t\tthis._core.$stage.parent()\n\t\t\t.height(maxheight)\n\t\t\t.addClass(this._core.settings.autoHeightClass);\n\t};\n\n\tAutoHeight.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Video Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the video plugin.\n\t * @class The Video Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Video = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Cache all video URLs.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._videos = {};\n\n\t\t/**\n\t\t * Current playing item.\n\t\t * @protected\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis._playing = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @todo The cloned content removale is too late\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'resize.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.video && this.isInFullScreen()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.is('resizing')) {\n\t\t\t\t\tthis._core.$stage.find('.cloned .owl-video-frame').remove();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position' && this._playing) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar $element = $(e.content).find('.owl-video');\n\n\t\t\t\tif ($element.length) {\n\t\t\t\t\t$element.css('display', 'none');\n\t\t\t\t\tthis.fetch($element, $(e.content));\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Video.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\tthis._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {\n\t\t\tthis.play(e);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tVideo.Defaults = {\n\t\tvideo: false,\n\t\tvideoHeight: false,\n\t\tvideoWidth: false\n\t};\n\n\t/**\n\t * Gets the video ID and the type (YouTube/Vimeo/vzaar only).\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {jQuery} item - The item containing the video.\n\t */\n\tVideo.prototype.fetch = function(target, item) {\n\t\t\tvar type = (function() {\n\t\t\t\t\tif (target.attr('data-vimeo-id')) {\n\t\t\t\t\t\treturn 'vimeo';\n\t\t\t\t\t} else if (target.attr('data-vzaar-id')) {\n\t\t\t\t\t\treturn 'vzaar'\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 'youtube';\n\t\t\t\t\t}\n\t\t\t\t})(),\n\t\t\t\tid = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),\n\t\t\t\twidth = target.attr('data-width') || this._core.settings.videoWidth,\n\t\t\t\theight = target.attr('data-height') || this._core.settings.videoHeight,\n\t\t\t\turl = target.attr('href');\n\n\t\tif (url) {\n\n\t\t\t/*\n\t\t\t\t\tParses the id's out of the following urls (and probably more):\n\t\t\t\t\thttps://www.youtube.com/watch?v=:id\n\t\t\t\t\thttps://youtu.be/:id\n\t\t\t\t\thttps://vimeo.com/:id\n\t\t\t\t\thttps://vimeo.com/channels/:channel/:id\n\t\t\t\t\thttps://vimeo.com/groups/:group/videos/:id\n\t\t\t\t\thttps://app.vzaar.com/videos/:id\n\n\t\t\t\t\tVisual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F\n\t\t\t*/\n\n\t\t\tid = url.match(/(http:|https:|)\\/\\/(player.|www.|app.)?(vimeo\\.com|youtu(be\\.com|\\.be|be\\.googleapis\\.com)|vzaar\\.com)\\/(video\\/|videos\\/|embed\\/|channels\\/.+\\/|groups\\/.+\\/|watch\\?v=|v\\/)?([A-Za-z0-9._%-]*)(\\&\\S+)?/);\n\n\t\t\tif (id[3].indexOf('youtu') > -1) {\n\t\t\t\ttype = 'youtube';\n\t\t\t} else if (id[3].indexOf('vimeo') > -1) {\n\t\t\t\ttype = 'vimeo';\n\t\t\t} else if (id[3].indexOf('vzaar') > -1) {\n\t\t\t\ttype = 'vzaar';\n\t\t\t} else {\n\t\t\t\tthrow new Error('Video URL not supported.');\n\t\t\t}\n\t\t\tid = id[6];\n\t\t} else {\n\t\t\tthrow new Error('Missing video URL.');\n\t\t}\n\n\t\tthis._videos[url] = {\n\t\t\ttype: type,\n\t\t\tid: id,\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\n\t\titem.attr('data-video', url);\n\n\t\tthis.thumbnail(target, this._videos[url]);\n\t};\n\n\t/**\n\t * Creates video thumbnail.\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {Object} info - The video info object.\n\t * @see `fetch`\n\t */\n\tVideo.prototype.thumbnail = function(target, video) {\n\t\tvar tnLink,\n\t\t\ticon,\n\t\t\tpath,\n\t\t\tdimensions = video.width && video.height ? 'style=\"width:' + video.width + 'px;height:' + video.height + 'px;\"' : '',\n\t\t\tcustomTn = target.find('img'),\n\t\t\tsrcType = 'src',\n\t\t\tlazyClass = '',\n\t\t\tsettings = this._core.settings,\n\t\t\tcreate = function(path) {\n\t\t\t\ticon = '
';\n\n\t\t\t\tif (settings.lazyLoad) {\n\t\t\t\t\ttnLink = '
';\n\t\t\t\t} else {\n\t\t\t\t\ttnLink = '
';\n\t\t\t\t}\n\t\t\t\ttarget.after(tnLink);\n\t\t\t\ttarget.after(icon);\n\t\t\t};\n\n\t\t// wrap video content into owl-video-wrapper div\n\t\ttarget.wrap('
');\n\n\t\tif (this._core.settings.lazyLoad) {\n\t\t\tsrcType = 'data-src';\n\t\t\tlazyClass = 'owl-lazy';\n\t\t}\n\n\t\t// custom thumbnail\n\t\tif (customTn.length) {\n\t\t\tcreate(customTn.attr(srcType));\n\t\t\tcustomTn.remove();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (video.type === 'youtube') {\n\t\t\tpath = \"//img.youtube.com/vi/\" + video.id + \"/hqdefault.jpg\";\n\t\t\tcreate(path);\n\t\t} else if (video.type === 'vimeo') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vimeo.com/api/v2/video/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data[0].thumbnail_large;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (video.type === 'vzaar') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vzaar.com/api/videos/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data.framegrab_url;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Stops the current video.\n\t * @public\n\t */\n\tVideo.prototype.stop = function() {\n\t\tthis._core.trigger('stop', null, 'video');\n\t\tthis._playing.find('.owl-video-frame').remove();\n\t\tthis._playing.removeClass('owl-video-playing');\n\t\tthis._playing = null;\n\t\tthis._core.leave('playing');\n\t\tthis._core.trigger('stopped', null, 'video');\n\t};\n\n\t/**\n\t * Starts the current video.\n\t * @public\n\t * @param {Event} event - The event arguments.\n\t */\n\tVideo.prototype.play = function(event) {\n\t\tvar target = $(event.target),\n\t\t\titem = target.closest('.' + this._core.settings.itemClass),\n\t\t\tvideo = this._videos[item.attr('data-video')],\n\t\t\twidth = video.width || '100%',\n\t\t\theight = video.height || this._core.$stage.height(),\n\t\t\thtml;\n\n\t\tif (this._playing) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('playing');\n\t\tthis._core.trigger('play', null, 'video');\n\n\t\titem = this._core.items(this._core.relative(item.index()));\n\n\t\tthis._core.reset(item.index());\n\n\t\tif (video.type === 'youtube') {\n\t\t\thtml = '';\n\t\t} else if (video.type === 'vimeo') {\n\t\t\thtml = '';\n\t\t} else if (video.type === 'vzaar') {\n\t\t\thtml = '';\n\t\t}\n\n\t\t$('
' + html + '
').insertAfter(item.find('.owl-video'));\n\n\t\tthis._playing = item.addClass('owl-video-playing');\n\t};\n\n\t/**\n\t * Checks whether an video is currently in full screen mode or not.\n\t * @todo Bad style because looks like a readonly method but changes members.\n\t * @protected\n\t * @returns {Boolean}\n\t */\n\tVideo.prototype.isInFullScreen = function() {\n\t\tvar element = document.fullscreenElement || document.mozFullScreenElement ||\n\t\t\t\tdocument.webkitFullscreenElement;\n\n\t\treturn element && $(element).parent().hasClass('owl-video-frame');\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tVideo.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis._core.$element.off('click.owl.video');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Video = Video;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Animate Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the animate plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Animate = function(scope) {\n\t\tthis.core = scope;\n\t\tthis.core.options = $.extend({}, Animate.Defaults, this.core.options);\n\t\tthis.swapping = true;\n\t\tthis.previous = undefined;\n\t\tthis.next = undefined;\n\n\t\tthis.handlers = {\n\t\t\t'change.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.previous = this.core.current();\n\t\t\t\t\tthis.next = e.property.value;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.swapping = e.type == 'translated';\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'translate.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {\n\t\t\t\t\tthis.swap();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\tthis.core.$element.on(this.handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAnimate.Defaults = {\n\t\tanimateOut: false,\n\t\tanimateIn: false\n\t};\n\n\t/**\n\t * Toggles the animation classes whenever an translations starts.\n\t * @protected\n\t * @returns {Boolean|undefined}\n\t */\n\tAnimate.prototype.swap = function() {\n\n\t\tif (this.core.settings.items !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!$.support.animation || !$.support.transition) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.core.speed(0);\n\n\t\tvar left,\n\t\t\tclear = $.proxy(this.clear, this),\n\t\t\tprevious = this.core.$stage.children().eq(this.previous),\n\t\t\tnext = this.core.$stage.children().eq(this.next),\n\t\t\tincoming = this.core.settings.animateIn,\n\t\t\toutgoing = this.core.settings.animateOut;\n\n\t\tif (this.core.current() === this.previous) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (outgoing) {\n\t\t\tleft = this.core.coordinates(this.previous) - this.core.coordinates(this.next);\n\t\t\tprevious.one($.support.animation.end, clear)\n\t\t\t\t.css( { 'left': left + 'px' } )\n\t\t\t\t.addClass('animated owl-animated-out')\n\t\t\t\t.addClass(outgoing);\n\t\t}\n\n\t\tif (incoming) {\n\t\t\tnext.one($.support.animation.end, clear)\n\t\t\t\t.addClass('animated owl-animated-in')\n\t\t\t\t.addClass(incoming);\n\t\t}\n\t};\n\n\tAnimate.prototype.clear = function(e) {\n\t\t$(e.target).css( { 'left': '' } )\n\t\t\t.removeClass('animated owl-animated-out owl-animated-in')\n\t\t\t.removeClass(this.core.settings.animateIn)\n\t\t\t.removeClass(this.core.settings.animateOut);\n\t\tthis.core.onTransitionEnd();\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tAnimate.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis.core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Autoplay Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the autoplay plugin.\n\t * @class The Autoplay Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Autoplay = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * The autoplay timeout.\n\t\t * @type {Timeout}\n\t\t */\n\t\tthis._timeout = null;\n\n\t\t/**\n\t\t * Indicates whenever the autoplay is paused.\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._paused = false;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'settings') {\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis.play();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.stop();\n\t\t\t\t\t}\n\t\t\t\t} else if (e.namespace && e.property.name === 'position') {\n\t\t\t\t\t//console.log('play?', e);\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis._setAutoPlayInterval();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoplay) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'play.owl.autoplay': $.proxy(function(e, t, s) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.play(t, s);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'stop.owl.autoplay': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseover.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseleave.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchstart.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchend.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Autoplay.Defaults, this._core.options);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoplay.Defaults = {\n\t\tautoplay: false,\n\t\tautoplayTimeout: 5000,\n\t\tautoplayHoverPause: false,\n\t\tautoplaySpeed: false\n\t};\n\n\t/**\n\t * Starts the autoplay.\n\t * @public\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t */\n\tAutoplay.prototype.play = function(timeout, speed) {\n\t\tthis._paused = false;\n\n\t\tif (this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('rotating');\n\n\t\tthis._setAutoPlayInterval();\n\t};\n\n\t/**\n\t * Gets a new timeout\n\t * @private\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t * @return {Timeout}\n\t */\n\tAutoplay.prototype._getNextTimeout = function(timeout, speed) {\n\t\tif ( this._timeout ) {\n\t\t\twindow.clearTimeout(this._timeout);\n\t\t}\n\t\treturn window.setTimeout($.proxy(function() {\n\t\t\tif (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._core.next(speed || this._core.settings.autoplaySpeed);\n\t\t}, this), timeout || this._core.settings.autoplayTimeout);\n\t};\n\n\t/**\n\t * Sets autoplay in motion.\n\t * @private\n\t */\n\tAutoplay.prototype._setAutoPlayInterval = function() {\n\t\tthis._timeout = this._getNextTimeout();\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.stop = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.clearTimeout(this._timeout);\n\t\tthis._core.leave('rotating');\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.pause = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._paused = true;\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoplay.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis.stop();\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Navigation Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the navigation plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} carousel - The Owl Carousel.\n\t */\n\tvar Navigation = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Indicates whether the plugin is initialized or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._initialized = false;\n\n\t\t/**\n\t\t * The current paging indexes.\n\t\t * @protected\n\t\t * @type {Array}\n\t\t */\n\t\tthis._pages = [];\n\n\t\t/**\n\t\t * All DOM elements of the user interface.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._controls = {};\n\n\t\t/**\n\t\t * Markup for an indicator.\n\t\t * @protected\n\t\t * @type {Array.}\n\t\t */\n\t\tthis._templates = [];\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * Overridden methods of the carousel.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._overrides = {\n\t\t\tnext: this._core.next,\n\t\t\tprev: this._core.prev,\n\t\t\tto: this._core.to\n\t\t};\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.push('
' +\n\t\t\t\t\t\t$(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '
');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'added.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 0, this._templates.pop());\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'remove.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 1);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.draw();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && !this._initialized) {\n\t\t\t\t\tthis._core.trigger('initialize', null, 'navigation');\n\t\t\t\t\tthis.initialize();\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._initialized = true;\n\t\t\t\t\tthis._core.trigger('initialized', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._initialized) {\n\t\t\t\t\tthis._core.trigger('refresh', null, 'navigation');\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._core.trigger('refreshed', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Navigation.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t * @todo Rename `slideBy` to `navBy`\n\t */\n\tNavigation.Defaults = {\n\t\tnav: false,\n\t\tnavText: [ 'prev', 'next' ],\n\t\tnavSpeed: false,\n\t\tnavElement: 'div',\n\t\tnavContainer: false,\n\t\tnavContainerClass: 'owl-nav',\n\t\tnavClass: [ 'owl-prev', 'owl-next' ],\n\t\tslideBy: 1,\n\t\tdotClass: 'owl-dot',\n\t\tdotsClass: 'owl-dots',\n\t\tdots: true,\n\t\tdotsEach: false,\n\t\tdotsData: false,\n\t\tdotsSpeed: false,\n\t\tdotsContainer: false\n\t};\n\n\t/**\n\t * Initializes the layout of the plugin and extends the carousel.\n\t * @protected\n\t */\n\tNavigation.prototype.initialize = function() {\n\t\tvar override,\n\t\t\tsettings = this._core.settings;\n\n\t\t// create DOM structure for relative navigation\n\t\tthis._controls.$relative = (settings.navContainer ? $(settings.navContainer)\n\t\t\t: $('
').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$previous = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[0])\n\t\t\t.html(settings.navText[0])\n\t\t\t.prependTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.prev(settings.navSpeed);\n\t\t\t}, this));\n\t\tthis._controls.$next = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[1])\n\t\t\t.html(settings.navText[1])\n\t\t\t.appendTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.next(settings.navSpeed);\n\t\t\t}, this));\n\n\t\t// create DOM structure for absolute navigation\n\t\tif (!settings.dotsData) {\n\t\t\tthis._templates = [ $('
')\n\t\t\t\t.addClass(settings.dotClass)\n\t\t\t\t.append($(''))\n\t\t\t\t.prop('outerHTML') ];\n\t\t}\n\n\t\tthis._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)\n\t\t\t: $('
').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$absolute.on('click', 'div', $.proxy(function(e) {\n\t\t\tvar index = $(e.target).parent().is(this._controls.$absolute)\n\t\t\t\t? $(e.target).index() : $(e.target).parent().index();\n\n\t\t\te.preventDefault();\n\n\t\t\tthis.to(index, settings.dotsSpeed);\n\t\t}, this));\n\n\t\t// override public methods of the carousel\n\t\tfor (override in this._overrides) {\n\t\t\tthis._core[override] = $.proxy(this[override], this);\n\t\t}\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @protected\n\t */\n\tNavigation.prototype.destroy = function() {\n\t\tvar handler, control, property, override;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (control in this._controls) {\n\t\t\tthis._controls[control].remove();\n\t\t}\n\t\tfor (override in this.overides) {\n\t\t\tthis._core[override] = this._overrides[override];\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t/**\n\t * Updates the internal state.\n\t * @protected\n\t */\n\tNavigation.prototype.update = function() {\n\t\tvar i, j, k,\n\t\t\tlower = this._core.clones().length / 2,\n\t\t\tupper = lower + this._core.items().length,\n\t\t\tmaximum = this._core.maximum(true),\n\t\t\tsettings = this._core.settings,\n\t\t\tsize = settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items;\n\n\t\tif (settings.slideBy !== 'page') {\n\t\t\tsettings.slideBy = Math.min(settings.slideBy, settings.items);\n\t\t}\n\n\t\tif (settings.dots || settings.slideBy == 'page') {\n\t\t\tthis._pages = [];\n\n\t\t\tfor (i = lower, j = 0, k = 0; i < upper; i++) {\n\t\t\t\tif (j >= size || j === 0) {\n\t\t\t\t\tthis._pages.push({\n\t\t\t\t\t\tstart: Math.min(maximum, i - lower),\n\t\t\t\t\t\tend: i - lower + size - 1\n\t\t\t\t\t});\n\t\t\t\t\tif (Math.min(maximum, i - lower) === maximum) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tj = 0, ++k;\n\t\t\t\t}\n\t\t\t\tj += this._core.mergers(this._core.relative(i));\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Draws the user interface.\n\t * @todo The option `dotsData` wont work.\n\t * @protected\n\t */\n\tNavigation.prototype.draw = function() {\n\t\tvar difference,\n\t\t\tsettings = this._core.settings,\n\t\t\tdisabled = this._core.items().length <= settings.items,\n\t\t\tindex = this._core.relative(this._core.current()),\n\t\t\tloop = settings.loop || settings.rewind;\n\n\t\tthis._controls.$relative.toggleClass('disabled', !settings.nav || disabled);\n\n\t\tif (settings.nav) {\n\t\t\tthis._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));\n\t\t\tthis._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));\n\t\t}\n\n\t\tthis._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);\n\n\t\tif (settings.dots) {\n\t\t\tdifference = this._pages.length - this._controls.$absolute.children().length;\n\n\t\t\tif (settings.dotsData && difference !== 0) {\n\t\t\t\tthis._controls.$absolute.html(this._templates.join(''));\n\t\t\t} else if (difference > 0) {\n\t\t\t\tthis._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));\n\t\t\t} else if (difference < 0) {\n\t\t\t\tthis._controls.$absolute.children().slice(difference).remove();\n\t\t\t}\n\n\t\t\tthis._controls.$absolute.find('.active').removeClass('active');\n\t\t\tthis._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');\n\t\t}\n\t};\n\n\t/**\n\t * Extends event data.\n\t * @protected\n\t * @param {Event} event - The event object which gets thrown.\n\t */\n\tNavigation.prototype.onTrigger = function(event) {\n\t\tvar settings = this._core.settings;\n\n\t\tevent.page = {\n\t\t\tindex: $.inArray(this.current(), this._pages),\n\t\t\tcount: this._pages.length,\n\t\t\tsize: settings && (settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items)\n\t\t};\n\t};\n\n\t/**\n\t * Gets the current page position of the carousel.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.current = function() {\n\t\tvar current = this._core.relative(this._core.current());\n\t\treturn $.grep(this._pages, $.proxy(function(page, index) {\n\t\t\treturn page.start <= current && page.end >= current;\n\t\t}, this)).pop();\n\t};\n\n\t/**\n\t * Gets the current succesor/predecessor position.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.getPosition = function(successor) {\n\t\tvar position, length,\n\t\t\tsettings = this._core.settings;\n\n\t\tif (settings.slideBy == 'page') {\n\t\t\tposition = $.inArray(this.current(), this._pages);\n\t\t\tlength = this._pages.length;\n\t\t\tsuccessor ? ++position : --position;\n\t\t\tposition = this._pages[((position % length) + length) % length].start;\n\t\t} else {\n\t\t\tposition = this._core.relative(this._core.current());\n\t\t\tlength = this._core.items().length;\n\t\t\tsuccessor ? position += settings.slideBy : position -= settings.slideBy;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Slides to the next item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.next = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);\n\t};\n\n\t/**\n\t * Slides to the previous item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.prev = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);\n\t};\n\n\t/**\n\t * Slides to the specified item or page.\n\t * @public\n\t * @param {Number} position - The position of the item or page.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.\n\t */\n\tNavigation.prototype.to = function(position, speed, standard) {\n\t\tvar length;\n\n\t\tif (!standard && this._pages.length) {\n\t\t\tlength = this._pages.length;\n\t\t\t$.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);\n\t\t} else {\n\t\t\t$.proxy(this._overrides.to, this._core)(position, speed);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Hash Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the hash plugin.\n\t * @class The Hash Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Hash = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Hash index for the items.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._hashes = {};\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.startPosition === 'URLHash') {\n\t\t\t\t\t$(window).trigger('hashchange.owl.navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tvar hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');\n\n\t\t\t\t\tif (!hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._hashes[hash] = e.content;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position') {\n\t\t\t\t\tvar current = this._core.items(this._core.relative(this._core.current())),\n\t\t\t\t\t\thash = $.map(this._hashes, function(item, hash) {\n\t\t\t\t\t\t\treturn item === current ? hash : null;\n\t\t\t\t\t\t}).join();\n\n\t\t\t\t\tif (!hash || window.location.hash.slice(1) === hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\twindow.location.hash = hash;\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Hash.Defaults, this._core.options);\n\n\t\t// register the event handlers\n\t\tthis.$element.on(this._handlers);\n\n\t\t// register event listener for hash navigation\n\t\t$(window).on('hashchange.owl.navigation', $.proxy(function(e) {\n\t\t\tvar hash = window.location.hash.substring(1),\n\t\t\t\titems = this._core.$stage.children(),\n\t\t\t\tposition = this._hashes[hash] && items.index(this._hashes[hash]);\n\n\t\t\tif (position === undefined || position === this._core.current()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._core.to(this._core.relative(position), false, true);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tHash.Defaults = {\n\t\tURLhashListener: false\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tHash.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\t$(window).off('hashchange.owl.navigation');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Hash = Hash;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Support Plugin\n *\n * @version 2.1.0\n * @author Vivid Planet Software GmbH\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\tvar style = $('').get(0).style,\n\t\tprefixes = 'Webkit Moz O ms'.split(' '),\n\t\tevents = {\n\t\t\ttransition: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitTransition: 'webkitTransitionEnd',\n\t\t\t\t\tMozTransition: 'transitionend',\n\t\t\t\t\tOTransition: 'oTransitionEnd',\n\t\t\t\t\ttransition: 'transitionend'\n\t\t\t\t}\n\t\t\t},\n\t\t\tanimation: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitAnimation: 'webkitAnimationEnd',\n\t\t\t\t\tMozAnimation: 'animationend',\n\t\t\t\t\tOAnimation: 'oAnimationEnd',\n\t\t\t\t\tanimation: 'animationend'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttests = {\n\t\t\tcsstransforms: function() {\n\t\t\t\treturn !!test('transform');\n\t\t\t},\n\t\t\tcsstransforms3d: function() {\n\t\t\t\treturn !!test('perspective');\n\t\t\t},\n\t\t\tcsstransitions: function() {\n\t\t\t\treturn !!test('transition');\n\t\t\t},\n\t\t\tcssanimations: function() {\n\t\t\t\treturn !!test('animation');\n\t\t\t}\n\t\t};\n\n\tfunction test(property, prefixed) {\n\t\tvar result = false,\n\t\t\tupper = property.charAt(0).toUpperCase() + property.slice(1);\n\n\t\t$.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {\n\t\t\tif (style[property] !== undefined) {\n\t\t\t\tresult = prefixed ? property : true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction prefixed(property) {\n\t\treturn test(property, true);\n\t}\n\n\tif (tests.csstransitions()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transition = new String(prefixed('transition'))\n\t\t$.support.transition.end = events.transition.end[ $.support.transition ];\n\t}\n\n\tif (tests.cssanimations()) {\n\t\t/* jshint -W053 */\n\t\t$.support.animation = new String(prefixed('animation'))\n\t\t$.support.animation.end = events.animation.end[ $.support.animation ];\n\t}\n\n\tif (tests.csstransforms()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transform = new String(prefixed('transform'));\n\t\t$.support.transform3d = tests.csstransforms3d();\n\t}\n\n})(window.Zepto || window.jQuery, window, document);\n","'use strict';\n\n// Mettere commenti\nvar currentLanguage = $('html').attr('lang');\nvar siteUrl = $('body').data('site-url');\nvar templateUrl = $('body').data('template-url');\n\n$(document).ready(function() {\n\n\tsiteInit.slider();\n\tsiteInit.carouselMobile();\n\tsiteInit.carousel();\n\tsiteInit.modal();\n\tsiteInit.videoPreview();\n\tsiteInit.toggleClass();\n\n});\n\n$(window).on('load', function() {\n\t// Load function\n});\n\n$(window).scroll(function() {\n\t// Scroll function\n});\n\n$(window).resize(function() {\n\n\tif (window.matchMedia('(min-width: 992px)').matches) {\n\t\t// The viewport is at least 992 pixels wide\n\t}\n\n});\n\nvar siteInit = {\n\t// Slider\n\tslider: function() {\n\n\t\tvar $el = $('.js-slider');\n\n\t\tif ($el.length == 0) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t$el.owlCarousel({\n\t\t\tloop: true,\n\t\t\tdots: true,\n\t\t\tmargin: 0,\n\t\t\tanimateOut: 'fadeOut',\n\t\t\t//animateIn: fade\n\t\t\tcenter: false,\n\t\t\tautoHeight: true,\n\t\t\tstagePadding: 0,\n\t\t\tresponsiveClass: true,\n\t\t\tnav:true,\n\t\t\tautoplay: true,\n\t\t\tresponsive: {\n\t\t\t\t0: {\n\t\t\t\t\titems: 1,\n\t\t\t\t\tdots: true\n\t\t\t\t},\n\t\t\t\t992: {\n\t\t\t\t\titems: 1\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t},\n\n\t// Carousel\n\tcarouselMobile: function() {\n\n\t\t// TODO: Valutare il destroy\n\t\tif (window.matchMedia('(max-width: 1200px)').matches) {\n\n\t\t\tvar $el = $('.js-carousel-mobile');\n\n\t\t\tif ($el.length == 0) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t$el.owlCarousel({\n\t\t\t\tloop: true,\n\t\t\t\tdots: true,\n\t\t\t\tmargin: 24,\n\t\t\t\tcenter: false,\n\t\t\t\tstagePadding: 0,\n\t\t\t\tresponsiveClass: true,\n\t\t\t\tresponsive: {\n\t\t\t\t\t0: {\n\t\t\t\t\t\tautoplay: true,\n\t\t\t\t\t\tnav: false,\n\t\t\t\t\t\titems: 1,\n\t\t\t\t\t\tmargin: 12,\n\t\t\t\t\t\tdots: true\n\t\t\t\t\t},\n\t\t\t\t\t768: {\n\t\t\t\t\t\titems: 2\n\t\t\t\t\t},\n\t\t\t\t\t992: {\n\t\t\t\t\t\titems: 3,\n\t\t\t\t\t\tmargin: 24,\n\t\t\t\t\t\tnav: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t},\n\n\t// Carousel\n\tcarousel: function() {\n\n\t\tvar $el = $('.js-carousel');\n\n\t\tif ($el.length == 0) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t$el.owlCarousel({\n\t\t\tloop: true,\n\t\t\tdots: true,\n\t\t\tmargin: 24,\n\t\t\tcenter: false,\n\t\t\tstagePadding: 0,\n\t\t\tresponsiveClass: true,\n\t\t\tresponsive: {\n\t\t\t\t0: {\n\t\t\t\t\tautoplay: true,\n\t\t\t\t\tnav: false,\n\t\t\t\t\titems: 1,\n\t\t\t\t\tmargin: 12,\n\t\t\t\t\tdots: true\n\t\t\t\t},\n\t\t\t\t768: {\n\t\t\t\t\titems: 2\n\t\t\t\t},\n\t\t\t\t992: {\n\t\t\t\t\titems: 4,\n\t\t\t\t\tmargin: 24,\n\t\t\t\t\tnav: false\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t},\n\n\t// Modal\n\tmodal: function() {\n\n\t\tvar $el = $('[href$=\".jpg\"], [href$=\".png\"], [href$=\".gif\"], [href$=\".jpeg\"], [href$=\".webp\"]');\n\n\t\tif ($el.length == 0) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t$el.fancybox();\n\n\t},\n\n\t// Video preview\n\tvideoPreview: function() {\n\n\t\tvar $el = $('.page__preview');\n\n\t\tif ($el.length == 0) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t$el.fancybox();\n\n\t\tvar timeoutID;\n\t\tvar timeoutHideID;\n\n\t\ttimeoutID = window.setTimeout(showPreview, 10000);\n\n\t\tfunction showPreview() {\n\n\t\t\t$el.fadeIn();\n\t\t\twindow.clearTimeout(timeoutID);\n\t\t\ttimeoutHideID = window.setTimeout(hidePreview, 22000);\n\n\t\t}\n\n\t\tfunction hidePreview() {\n\n\t\t\t$el.fadeOut();\n\t\t\twindow.clearTimeout(timeoutHideID);\n\n\t\t}\n\n\t},\n\n\t// Toggle class\n\ttoggleClass: function() {\n\n\t\tvar elName = '.js-toggle-class';\n\t\tvar $el = $(elName);\n\n\t\tif ($el.length == 0) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t$('body').on('click', elName, function(event) {\n\n\t\t\tevent.preventDefault();\n\t\t\tvar $elCliked = $(this);\n\t\t\tvar toggleClassName = 'is-active';\n\n\t\t\t// Add data-toggle-class-name=\"customclass\" to change the default class name\n\t\t\tif ($elCliked.attr('data-toggle-class-name')) {\n\n\t\t\t\ttoggleClassName = $elCliked.data('toggle-class-name');\n\n\t\t\t}\n\n\t\t\t// Add data-toggle-class-selector=\"selector1 selector2\" to toggle class on different tag\n\t\t\tif ($elCliked.attr('data-toggle-class-selector')) {\n\n\t\t\t\tvar toggleClassSelector = $elCliked.data('toggle-class-selector');\n\t\t\t\tvar obj = toggleClassSelector.split(' ');\n\n\t\t\t\t$.each(obj, function(index, value) {\n\n\t\t\t\t\t$('.' + value).toggleClass(toggleClassName);\n\n\t\t\t\t});\n\n\t\t\t} else {\n\n\t\t\t\t$elCliked.toggleClass(toggleClassName);\n\n\t\t\t}\n\n\t\t});\n\n\t}\n};\n"]}