{"version":3,"sources":["webpack:///./src/module/no-tracking.ts","webpack:///./src/module/google-analytics.ts","webpack:///./src/app-config.ts","webpack:///./Web/Shared/Component/ContactForm/contact-form.ts","webpack:///./src/module/form.ts","webpack:///./Web/Shared/layout.ts","webpack:///./src/module/facebook-pixel.ts","webpack:///./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js","webpack:///./Web/Home/home.ts","webpack:///./node_modules/owl.carousel/dist/owl.carousel.js"],"names":["__webpack_require__","d","__webpack_exports__","hasNoTrackingCookies","COOKIES_KEY","document","cookie","match","setupGA","setEvent","setAdsConversion","_no_tracking__WEBPACK_IMPORTED_MODULE_0__","_googleAdsConfig","undefined","googleAnalyticsId","googleAdsConfig","Object","script","createElement","type","async","src","getElementsByTagName","appendChild","script2","textContent","Id","setTimeout","gtag","scrolled","querySelectorAll","forEach","elem","trackEventName","dataset","addEventListener","trackConversionName","eventName","eventCategory","eventLabel","event_category","event_label","value","conversionName","send_to","convertor","appConfig","__assign","JSON","parse","getElementById","googleMapSetting","apiKey","locations","position","lat","lng","url","zoom","center","styles","setupContactForm","elementId","config","processing","combineToFormData","error","beforeSend","success","e","preventDefault","formElement","target","xhr","XMLHttpRequest","readyState","status","responseText","console","finally","onprogress","event","Math","round","loaded","total","toFixed","open","action","formData","FormData","length","log","obj","keys","key","append","send","ajaxForm","querySelector","style","display","errorText","reset","google_analytics","setupLayout","facebookPixelId","no_tracking","fbq","setupPixel","app_config","googleAdsId","hpLink","whatsApp","mapLink","emailLink","contactForm","contact_form","jquery","ready","prev","each","classList","toggle","x","remove","add","animate","scrollTop","window","onscroll","pageYOffset","jQuery","$","info","stuff","fn","fancybox","div","$pressed","defaults","closeExisting","loop","gutter","keyboard","preventCaptionOverlap","arrows","infobar","smallBtn","toolbar","buttons","idleTime","protect","modal","image","preload","ajax","settings","data","iframe","tpl","css","attr","scrolling","video","format","autoStart","defaultType","animationEffect","animationDuration","zoomOpacity","transitionEffect","transitionDuration","slideClass","baseClass","baseTpl","spinnerTpl","errorTpl","btnTpl","download","close","arrowLeft","arrowRight","parentEl","hideScrollbar","autoFocus","backFocus","trapFocus","fullScreen","touch","vertical","momentum","hash","media","slideShow","speed","thumbs","hideOnClose","axis","wheel","onInit","noop","beforeLoad","afterLoad","beforeShow","afterShow","beforeClose","afterClose","onActivate","onDeactivate","clickContent","current","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","cancelAFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","id","clearTimeout","transitionEnd","t","el","transitions","transition","OTransition","MozTransition","WebkitTransition","forceRedraw","$el","offsetHeight","mergeOpts","opts1","opts2","rez","extend","isArray","FancyBox","content","opts","index","this","isPlainObject","isMobile","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","group","slides","addContent","init","prototype","$container","buttonStr","self","firstItemOpts","addClass","getInstance","body","scrollHeight","innerHeight","innerWidth","documentElement","clientWidth","translate","replace","appendTo","$refs","container","item","find","trigger","activate","jumpTo","str","arr","n","items","makeArray","i","$item","found","srcParts","options","$orig","contentType","charAt","inArray","$thumb","$trigger","thumb","caption","apply","split","shift","filter","push","updateControls","Thumbs","isActive","create","focus","addEvents","removeEvents","on","stopPropagation","previous","next","isScaledDown","originalEvent","requestId","update","stage","hide","show","keycode","keyCode","which","ctrlKey","altKey","shiftKey","is","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","isDragging","hideControls","off","clearInterval","duration","pos","isMoved","slidePos","stagePos","prop","diff","groupLen","isClosing","isAnimating","createSlide","forcedDuration","isNumeric","$slide","loadSlide","getTranslate","slide","stop","isComplete","removeClass","left","width","className","join","leftPos","setTranslate","top","transform","opacity","complete","isLoaded","revealContent","updateSlide","scaleToActual","y","imgPos","posX","posY","scaleX","scaleY","$content","canvasWidth","canvasHeight","height","newImgWidth","newImgHeight","hasError","updateCursor","SlideShow","scaleToFit","end","getFitPos","maxWidth","maxHeight","minRatio","aspectRatio","parseFloat","min","floor","ratio","adjustCaption","adjustLayout","navigation","toggleClass","get","clientHeight","centerSlide","siblings","parent","children","hasClass","abs","nextWidth","nextHeight","canPan","isZoomable","Guestures","isFunction","fitPos","ajaxLoad","isLoading","setImage","setIframe","setContent","videoFormat","setError","showLoading","textStatus","jqXHR","one","abort","ghost","$img","$image","checkSrcset","onerror","$ghost","onload","setBigImage","temp","pxRatio","windowWidth","srcset","devicePixelRatio","map","ret","trim","substring","postfix","sort","a","b","j","img","sizes","resolveImageSlideSize","naturalWidth","naturalHeight","max","hideLoading","imgWidth","imgHeight","$iframe","Date","getTime","isReady","$body","frameWidth","frameHeight","contents","ignore","max-width","ceil","outerWidth","outerHeight","unbind","empty","isRevealed","hasOwnProperty","parents","$placeholder","insertAfter","html","after","$smallBtn","wrap","first","wrapInner","$spinner","fadeIn","button","$clone","preventOverlap","$caption","captionH","clone","eq","marginBottom","inlinePadding","actualPadding","disableLayoutFix","effect","effectClassName","start","getThumbPos","thumbPos","btw","brw","bbw","blw","elemCenter","ownerDocument","getBoundingClientRect","offsetWidth","elementFromPoint","inViewport","Document","exitFullscreen","webkitExitFullscreen","scrollLeft","focusableItems","focusedItemIndex","focusableStr","activeElement","instance","isVisible","domRect","done","cleanUp","$focus","scrollX","scrollY","name","args","Array","slice","call","arguments","unshift","hasHiddenControls","andCaption","toggleControls","version","command","all","destroy","test","navigator","userAgent","use3d","getComputedStyle","getPropertyValue","documentMode","props","to","leaveAnimationName","from","propertyName","callCallback","selector","_run","$target","isDefaultPrevented","currentTarget","youtube","matcher","params","autoplay","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","instagram","gmap_place","indexOf","gmap_search","param","urlParams","paramObj","provider","providerName","providerOpts","m","p","decodeURIComponent","p1","s","origSrc","contentSource","VideoAPILoader","class","loading","load","vendor","_this","onYouTubeIframeAPIReady","YT","Player","events","onStateChange","Vimeo","afterShow.fb","getPointerXY","result","touches","changedTouches","pageX","pageY","clientX","clientY","distance","point2","point1","what","sqrt","pow","isClickable","onclick","atts","attributes","nodeName","substr","isScrollable","overflowY","overflowX","horizontal","scrollWidth","$bg","bg","$stage","proxy","tapped","ontouchstart","isTouchDevice","offset","realPoints","startPoints","startEvent","canTap","isPanning","isSwiping","isZooming","isScrolling","startTime","distanceX","distanceY","contentLastPos","contentStartPos","sliderStartPos","centerPointStartX","centerPointStartY","percentageOfImageAtPinchPointX","percentageOfImageAtPinchPointY","startDistanceBetweenFingers","removeEventListener","ontouchmove","newPoints","onSwipe","onPan","onZoom","ontouchend","angle","swiping","sliderLastPos","atan2","PI","transition-duration","limitMovement","minTranslateX","minTranslateY","maxTranslateX","maxTranslateY","newOffsetX","newOffsetY","currentOffsetX","currentOffsetY","currentWidth","currentHeight","limitPosition","newWidth","newHeight","pinchRatio","translateFromZoomingX","translateFromZoomingY","centerPointEndX","centerPointEndY","translateFromTranslatingX","newPos","panning","zooming","endPoints","dMs","onTap","velocityX","velocityY","endPanning","endZooming","endSwiping","len","canAdvance","where","tapX","tapY","process","prefix","addBack","progress","timer","$button","$progress","inner","set","force","clear","removeAttr","onInit.fb","beforeShow.fb","afterKeydown.fb","keypress","beforeClose.fb onDeactivate.fb","hidden","fnMap","val","FullScreen","request","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","fullscreenchange","beforeClose.fb","CLASS","FancyThumbs","$grid","$list","list","innerHTML","share","currentHash","location","string","entityMap","encodeURIComponent","&","<",">","\"","'","/","`","=","String","text","shareInstance","shareCurrent","click","href","parseUrl","pop","gallery","triggerFromUrl","escapeSelector","getGalleryID","sel","ch","asCodePoint","charCodeAt","toString","origHash","hashTimer","history","title","pathname","search","hasCreatedHistory","back","replaceState","fb","reverse","tmp","prevTime","currTime","deltaY","deltaX","wheelDelta","detail","r","jquery__WEBPACK_IMPORTED_MODULE_1__","_Shared_layout__WEBPACK_IMPORTED_MODULE_3__","owlCarousel","dots","autoplayTimeout","navText","responsive","0","nav","1365","margin","769","1025","__webpack_provided_window_dot_jQuery","Animate","Owl","element","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","rewind","checkVisibility","mouseDrag","touchDrag","pullDrag","freeDrag","stagePadding","merge","mergeFit","autoWidth","startPosition","rtl","smartSpeed","fluidSpeed","dragEndSpeed","responsiveRefreshRate","responsiveBaseElement","fallbackEasing","slideTransition","nestedItemSelector","itemElement","stageElement","refreshClass","loadedClass","loadingClass","rtlClass","responsiveClass","dragClass","itemClass","stageClass","stageOuterClass","grabClass","Width","Default","Inner","Outer","Type","Event","State","cache","relative","grid","margin-left","margin-right","iterator","widths","clones","view","size","repeat","prepend","normalize","outerHTML","prependTo","coordinates","padding","padding-left","padding-right","minimum","maximum","outer","begin","matches","op","initializeStage","initializeItems","$items","refresh","not","invalidate","imgs","nestedSelector","enter","preloadAutoWidthImages","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","factor","revert","srcElement","originalTarget","warn","nodeType","before","splice","images","Image","unwrap","removeData","o","listener","capture","attachEvent","detachEvent","namespace","count","camelCase","relatedTarget","onTrigger","register","concat","object","special","owl","_default","tag","number","isNaN","second","option","$this","Constructor","Zepto","AutoRefresh","carousel","_core","_interval","_visible","initialized.owl.carousel","autoRefresh","watch","autoRefreshInterval","getOwnPropertyNames","Lazy","_loaded","initialized.owl.carousel change.owl.carousel resized.owl.carousel","lazyLoad","lazyLoadEager","$elements","background-image","handlers","AutoHeight","_previousHeight","initialized.owl.carousel refreshed.owl.carousel","autoHeight","changed.owl.carousel","loaded.owl.lazy","_intervalId","refThis","resize","autoHeightClass","lazyLoadEnabled","visible","toArray","heights","maxheight","Video","_videos","_playing","resize.owl.carousel","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","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","_call","_time","_timeout","_paused","play.owl.autoplay","stop.owl.autoplay","mouseover.owl.autoplay","autoplayHoverPause","pause","mouseleave.owl.autoplay","touchstart.owl.core","touchend.owl.core","autoplaySpeed","_next","read","timeout","elapsed","Navigation","_initialized","_pages","_controls","_templates","_overrides","dotsData","dotClass","added.owl.carousel","remove.owl.carousel","draw","navSpeed","navElement","navContainer","navContainerClass","navClass","slideBy","dotsClass","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"],"mappings":"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","file":"0.209cc23157cc7d9f6129.bundle.js","sourcesContent":["const COOKIES_KEY = 'noTracking';\r\n\r\nexport function setNoTrackingCookies() {\r\n document.cookie = `${COOKIES_KEY}expires=${new Date(\"2025-01-01\").toString()}`;\r\n console.log('No Tracking Cookies Settle!')\r\n}\r\n\r\nexport function hasNoTrackingCookies():boolean {\r\n return !!document.cookie.match(COOKIES_KEY);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { hasNoTrackingCookies } from './no-tracking';\r\n\r\ndeclare global {\r\n let gtag: (...args: any[]) => void\r\n}\r\ninterface GoogleAdsConfig {\r\n Id : string,\r\n convertor : {\r\n [name : string] : string,\r\n }\r\n}\r\n\r\nlet _googleAdsConfig : GoogleAdsConfig | undefined = undefined;\r\nexport function setupGA(googleAnalyticsId: string, googleAdsConfig?: GoogleAdsConfig ) {\r\n if(hasNoTrackingCookies()) return;\r\n let script = document.createElement('script') as HTMLScriptElement;\r\n script.type = 'text/javascript';\r\n script.async = true;\r\n script.src = `https://www.googletagmanager.com/gtag/js?id=${googleAnalyticsId}`;\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n \r\n // 因为它需要定义全局变量,所以不能再 ts 里面写. \r\n let script2 = document.createElement('script') as HTMLScriptElement;\r\n script2.type = 'text/javascript';\r\n script2.textContent = `\r\n window.dataLayer = window.dataLayer || [];\r\n function gtag(){dataLayer.push(arguments);}\r\n gtag('js', new Date()); \r\n gtag('config', '${ googleAnalyticsId }', {\r\n 'custom_map': {\r\n 'dimension1': 'scrolled'\r\n }\r\n });\r\n ${googleAdsConfig ? `gtag('config', '${googleAdsConfig.Id}');` : ''}\r\n `;\r\n document.getElementsByTagName('head')[0].appendChild(script2);\r\n\r\n setTimeout(()=>{\r\n gtag('event', 'scrolled_dimension', {\r\n 'scrolled': 'true'\r\n });\r\n },15000);\r\n \r\n document.querySelectorAll('.googleAnalyticsTracking').forEach(elem => {\r\n const trackEventName = elem.dataset['googleAnalyticsEvent'];\r\n elem.addEventListener('click', () => { \r\n setEvent(trackEventName);\r\n });\r\n }); \r\n if(googleAdsConfig){\r\n _googleAdsConfig = googleAdsConfig;\r\n document.querySelectorAll('.googleAdsTracking').forEach(elem => {\r\n const trackConversionName = elem.dataset['googleAdsConversion'];\r\n elem.addEventListener('click', () => { \r\n setAdsConversion(trackConversionName);\r\n });\r\n }); \r\n }\r\n}\r\n\r\nexport function setEvent(eventName:string, eventCategory?:string, eventLabel?:string ){\r\n if(hasNoTrackingCookies()) return;\r\n eventCategory = eventCategory || eventName;\r\n eventLabel = eventLabel || eventName;\r\n gtag('event', `event_${eventName}`, {\r\n 'event_category': `event_${eventCategory}`,\r\n 'event_label': `event_${eventLabel}`,\r\n 'value': 1\r\n });\r\n}\r\n\r\nexport function setAdsConversion(conversionName:string){\r\n if(hasNoTrackingCookies()) return;\r\n gtag('event', 'conversion', { 'send_to': `${_googleAdsConfig.Id}/${_googleAdsConfig.convertor[conversionName]}` });\r\n}\r\n\r\nexport function trySetAdsConversion(conversionName:string){\r\n if(_googleAdsConfig){\r\n setAdsConversion(conversionName);\r\n }\r\n}\r\n\r\n\r\n","export const appConfig = {\r\n ...JSON.parse((document.getElementById('inputHiddenForAppConfig') as HTMLInputElement).value),\r\n ...{\r\n \"googleMapSetting\": {\r\n \"apiKey\": \"AIzaSyDVpWKo8BfojulFDsVvgiz469YoSuOHFP0\",\r\n \"locations\": [\r\n {\r\n \"position\": {\r\n \"lat\": 1.3637087,\r\n \"lng\": 103.8545555\r\n },\r\n \"url\": \"https://www.google.com/maps/place/443+Ang+Mo+Kio+Ave+10,+06%E6%96%B0%E5%8A%A0%E5%9D%A1+560443/@1.3637087,103.8545555,17z/data=!4m5!1m2!2m1!1sBlk+443,+Ang+Mo+Kio+Ave+10,+%2306-1225+Singapore.!3m1!1s0x31da16e2dee7ce01:0xbca7ca3d572cef0\"\r\n }\r\n ],\r\n \"zoom\": 18,\r\n \"center\": {\r\n \"lat\": 1.3637087,\r\n \"lng\": 103.8545555\r\n },\r\n \"styles\": [\r\n \r\n ]\r\n }\r\n }\r\n\r\n}\r\n\r\n","import { ajaxForm } from \"../../../../src/module/form\";\r\nimport { setEvent, setAdsConversion } from \"../../../../src/module/google-analytics\";\r\n\r\nexport function setupContactForm(elementId : string){\r\n ajaxForm({\r\n elementId: elementId,\r\n beforeSend: () => { \r\n document.querySelector(`#${elementId} .buttonSubmit`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonLoading`).style.display = 'block';\r\n },\r\n error: (errorText) => {\r\n document.querySelector(`#${elementId} .buttonSubmit`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonLoading`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonError`).style.display = 'block';\r\n console.log(errorText);\r\n },\r\n processing: () => {\r\n //upload percentage\r\n },\r\n success: () => {\r\n document.querySelector(`#${elementId} .buttonSubmit`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonLoading`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonError`).style.display = 'none';\r\n document.querySelector(`#${elementId} .buttonSuccess`).style.display = 'block';\r\n (document.getElementById(elementId) as HTMLFormElement).reset();\r\n setEvent('contactForm');\r\n setAdsConversion('contactForm');\r\n },\r\n finally: () => {\r\n //finish all job\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","\r\n// note : 不支持 input file 哦\r\nexport function localStorageForm(config: {\r\n elementId: string,\r\n localStorageKey: string,\r\n redirectUrl: string\r\n}): void {\r\n const { elementId, localStorageKey, redirectUrl } = config;\r\n const form = document.getElementById(elementId);\r\n form.addEventListener('submit', (e: Event) => {\r\n e.preventDefault();\r\n const formElement = e.target as HTMLFormElement;\r\n const formData = new FormData(formElement)\r\n let store: any = {};\r\n formData.forEach((value, key) => {\r\n store[key] = value;\r\n });\r\n localStorage.setItem(localStorageKey, JSON.stringify(store));\r\n location.href = redirectUrl;\r\n });\r\n}\r\n\r\nexport function formDataToObject(formElement: HTMLFormElement): any {\r\n const formData = new FormData(formElement);\r\n let result: any = {};\r\n formData.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n return result;\r\n}\r\n\r\n\r\nexport function ajaxForm(config: {\r\n elementId: string\r\n beforeSend: () => void\r\n success: (responseText: string) => void\r\n error: (responseText: string) => void\r\n finally: () => void\r\n processing?: (percent: number) => void\r\n combineToFormData?: { [propName : string] : any }[]\r\n}): void {\r\n config.processing = config.processing || function () { };\r\n config.combineToFormData = config.combineToFormData || [];\r\n const { elementId, error, beforeSend, success, processing, combineToFormData } = config;\r\n const form = document.getElementById(elementId);\r\n form.addEventListener('submit', (e: Event) => {\r\n e.preventDefault();\r\n const formElement = e.target as HTMLFormElement;\r\n beforeSend();\r\n var xhr = new XMLHttpRequest();\r\n xhr.addEventListener('readystatechange', () => {\r\n if (xhr.readyState === 4) {\r\n if (xhr.status === 200) {\r\n success(xhr.responseText);\r\n }\r\n else {\r\n console.error({\r\n status: xhr.status,\r\n responseText: xhr.responseText\r\n });\r\n error(xhr.responseText);\r\n }\r\n config.finally();\r\n }\r\n });\r\n xhr.onprogress = function (event) {\r\n processing(+Math.round(event.loaded / event.total * 100).toFixed(0));\r\n };\r\n xhr.open(\"POST\", formElement.action, true);\r\n let formData = new FormData(formElement);\r\n if (combineToFormData.length > 0) {\r\n console.log(combineToFormData)\r\n combineToFormData.forEach(obj => {\r\n Object.keys(obj).forEach(key => {\r\n formData.append(key, obj[key]);\r\n });\r\n });\r\n }\r\n formData.forEach((value, key) => {\r\n console.log(key, value);\r\n });\r\n xhr.send(formData);\r\n });\r\n}\r\n","import { setupPixel } from '../../src/module/facebook-pixel';\r\nimport { setupGA } from '../../src/module/google-analytics';\r\nimport { slideToggle } from '../../src/module/dom';\r\nimport { setupExtension } from '../../src/module/extensions';\r\nimport { appConfig } from '../../src/app-config';\r\nimport { setupGoogleMap } from '../../src/module/google-map';\r\nimport * as $ from \"jquery\";\r\nimport { setupContactForm } from './Component/ContactForm/contact-form';\r\n\r\nexport function setupLayout() {\r\n setupPixel(appConfig.facebookPixelId);\r\n setupGA(appConfig.googleAnalyticsId, {\r\n Id: appConfig.googleAdsId,\r\n convertor: {\r\n 'hpLink': 'HnbnCNei-aQBENbKl9sC',\r\n 'whatsApp': 'JQGvCMr_3KUBENbKl9sC',\r\n 'mapLink': '_iySCL280aUBENbKl9sC',\r\n 'emailLink': 'cTE6CMfI_aQBENbKl9sC',\r\n 'contactForm': 'f-abCM_N_aQBENbKl9sC',\r\n //'liveChat': '_txPCI--0aUBENbKl9sC'\r\n }\r\n });\r\n setupContactForm('footerForm');\r\n\r\n $(document).ready(function () {\r\n var prev: HTMLElement = null;\r\n\r\n document.querySelectorAll(\".drop\").forEach(each => {\r\n each.addEventListener(\"click\", () => {\r\n if (prev == each) {\r\n each.classList.toggle(\"active\");\r\n } else {\r\n for (let x = 0; x < document.querySelectorAll(\".drop\").length; x++) {\r\n document.querySelectorAll(\".drop\")[x].classList.remove(\"active\");\r\n }\r\n\r\n each.classList.add(\"active\");\r\n }\r\n prev = each as HTMLElement;\r\n });\r\n });\r\n\r\n document.querySelector(\".toTop\").addEventListener(\"click\", function () {\r\n $(\"html, body\").animate({ scrollTop: 0 }, 800);\r\n return false;\r\n });\r\n\r\n window.onscroll = function () {\r\n let offset = window.pageYOffset;\r\n if (offset >= 50) {\r\n document.querySelector(\"header\").classList.add(\"active\");\r\n document.querySelector(\".toTop\").classList.add(\"active\");\r\n } else {\r\n document.querySelector(\"header\").classList.remove(\"active\");\r\n document.querySelector(\".toTop\").classList.remove(\"active\");\r\n }\r\n }\r\n\r\n document.querySelectorAll(\".mobileMenuBar\").forEach(each => {\r\n each.addEventListener(\"click\", () => {\r\n each.classList.toggle(\"active\");\r\n })\r\n });\r\n });\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import { hasNoTrackingCookies } from \"./no-tracking\";\r\n\r\ndeclare let fbq : (...args: any[]) => void\r\n\r\nexport function setupPixel(facebookPixelId : string) {\r\n if(hasNoTrackingCookies()) return;\r\n let script = document.createElement('script') as HTMLScriptElement;\r\n script.type = 'text/javascript'; \r\n script.textContent = `\r\n !function (f, b, e, v, n, t, s) {\r\n if (f.fbq) return; n = f.fbq = function () {\r\n n.callMethod ?\r\n n.callMethod.apply(n, arguments) : n.queue.push(arguments)\r\n };\r\n if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0';\r\n n.queue = []; t = b.createElement(e); t.async = !0;\r\n t.src = v; s = b.getElementsByTagName(e)[0];\r\n s.parentNode.insertBefore(t, s)\r\n }(window, document, 'script','https://connect.facebook.net/en_US/fbevents.js');\r\n `;\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n fbq('init', facebookPixelId);\r\n fbq('track', 'PageView');\r\n\r\n document.querySelectorAll('.facebookPixelTracking').forEach(elem => {\r\n let trackEventName = elem.dataset['facebookPixelEvent'];\r\n elem.addEventListener('click', () => { \r\n fbq('track', trackEventName);\r\n });\r\n }); \r\n}\r\n\r\n\r\n\r\n\r\n\r\n","// ==================================================\n// fancyBox v3.5.7\n//\n// Licensed GPLv3 for open source use\n// or fancyBox Commercial License for commercial use\n//\n// http://fancyapps.com/fancybox/\n// Copyright 2019 fancyApps\n//\n// ==================================================\n(function (window, document, $, undefined) {\r\n \"use strict\";\r\n\r\n window.console = window.console || {\r\n info: function (stuff) {}\r\n };\r\n\r\n // If there's no jQuery, fancyBox can't work\r\n // =========================================\r\n\r\n if (!$) {\r\n return;\r\n }\r\n\r\n // Check if fancyBox is already initialized\r\n // ========================================\r\n\r\n if ($.fn.fancybox) {\r\n console.info(\"fancyBox already initialized\");\r\n\r\n return;\r\n }\r\n\r\n // Private default settings\r\n // ========================\r\n\r\n var defaults = {\r\n // Close existing modals\r\n // Set this to false if you do not need to stack multiple instances\r\n closeExisting: false,\r\n\r\n // Enable infinite gallery navigation\r\n loop: false,\r\n\r\n // Horizontal space between slides\r\n gutter: 50,\r\n\r\n // Enable keyboard navigation\r\n keyboard: true,\r\n\r\n // Should allow caption to overlap the content\r\n preventCaptionOverlap: true,\r\n\r\n // Should display navigation arrows at the screen edges\r\n arrows: true,\r\n\r\n // Should display counter at the top left corner\r\n infobar: true,\r\n\r\n // Should display close button (using `btnTpl.smallBtn` template) over the content\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically enabled for \"html\", \"inline\" or \"ajax\" items\r\n smallBtn: \"auto\",\r\n\r\n // Should display toolbar (buttons at the top)\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically hidden if \"smallBtn\" is enabled\r\n toolbar: \"auto\",\r\n\r\n // What buttons should appear in the top right corner.\r\n // Buttons will be created using templates from `btnTpl` option\r\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n buttons: [\r\n \"zoom\",\r\n //\"share\",\r\n \"slideShow\",\r\n //\"fullScreen\",\r\n //\"download\",\r\n \"thumbs\",\r\n \"close\"\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime: 3,\r\n\r\n // Disable right-click and use simple image protection for images\r\n protect: false,\r\n\r\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n modal: false,\r\n\r\n image: {\r\n // Wait for images to load before displaying\r\n // true - wait for image to load and then display;\r\n // false - display thumbnail and load the full-sized image over top,\r\n // requires predefined image dimensions (`data-width` and `data-height` attributes)\r\n preload: false\r\n },\r\n\r\n ajax: {\r\n // Object containing settings for ajax request\r\n settings: {\r\n // This helps to indicate that request comes from the modal\r\n // Feel free to change naming\r\n data: {\r\n fancybox: true\r\n }\r\n }\r\n },\r\n\r\n iframe: {\r\n // Iframe template\r\n tpl: '',\r\n\r\n // Preload iframe before displaying it\r\n // This allows to calculate iframe content width and height\r\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n preload: true,\r\n\r\n // Custom CSS styling for iframe wrapping element\r\n // You can use this to set custom iframe dimensions\r\n css: {},\r\n\r\n // Iframe tag attributes\r\n attr: {\r\n scrolling: \"auto\"\r\n }\r\n },\r\n\r\n // For HTML5 video only\r\n video: {\r\n tpl: '\",\r\n format: \"\", // custom video format\r\n autoStart: true\r\n },\r\n\r\n // Default content type if cannot be detected automatically\r\n defaultType: \"image\",\r\n\r\n // Open/close animation type\r\n // Possible values:\r\n // false - disable\r\n // \"zoom\" - zoom images from/to thumbnail\r\n // \"fade\"\r\n // \"zoom-in-out\"\r\n //\r\n animationEffect: \"zoom\",\r\n\r\n // Duration in ms for open/close animation\r\n animationDuration: 366,\r\n\r\n // Should image change opacity while zooming\r\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n zoomOpacity: \"auto\",\r\n\r\n // Transition effect between slides\r\n //\r\n // Possible values:\r\n // false - disable\r\n // \"fade'\r\n // \"slide'\r\n // \"circular'\r\n // \"tube'\r\n // \"zoom-in-out'\r\n // \"rotate'\r\n //\r\n transitionEffect: \"fade\",\r\n\r\n // Duration in ms for transition animation\r\n transitionDuration: 366,\r\n\r\n // Custom CSS class for slide element\r\n slideClass: \"\",\r\n\r\n // Custom CSS class for layout\r\n baseClass: \"\",\r\n\r\n // Base template for layout\r\n baseTpl: '
' +\r\n '
' +\r\n '
' +\r\n '
 / 
' +\r\n '
{{buttons}}
' +\r\n '
{{arrows}}
' +\r\n '
' +\r\n '
' +\r\n \"
\" +\r\n \"
\",\r\n\r\n // Loading indicator template\r\n spinnerTpl: '
',\r\n\r\n // Error message template\r\n errorTpl: '

{{ERROR}}

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

Hi!

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

{{SHARE}}

\" +\r\n \"

\" +\r\n '' +\r\n '' +\r\n \"Facebook\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Twitter\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Pinterest\" +\r\n \"\" +\r\n \"

\" +\r\n '

' +\r\n \"
\"\r\n }\r\n });\r\n\r\n function escapeHtml(string) {\r\n var entityMap = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n \"/\": \"/\",\r\n \"`\": \"`\",\r\n \"=\": \"=\"\r\n };\r\n\r\n return String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n return entityMap[s];\r\n });\r\n }\r\n\r\n $(document).on(\"click\", \"[data-fancybox-share]\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n current = instance.current || null,\r\n url,\r\n tpl;\r\n\r\n if (!current) {\r\n return;\r\n }\r\n\r\n if ($.type(current.opts.share.url) === \"function\") {\r\n url = current.opts.share.url.apply(current, [instance, current]);\r\n }\r\n\r\n tpl = current.opts.share.tpl\r\n .replace(/\\{\\{media\\}\\}/g, current.type === \"image\" ? encodeURIComponent(current.src) : \"\")\r\n .replace(/\\{\\{url\\}\\}/g, encodeURIComponent(url))\r\n .replace(/\\{\\{url_raw\\}\\}/g, escapeHtml(url))\r\n .replace(/\\{\\{descr\\}\\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : \"\");\r\n\r\n $.fancybox.open({\r\n src: instance.translate(instance, tpl),\r\n type: \"html\",\r\n opts: {\r\n touch: false,\r\n animationEffect: false,\r\n afterLoad: function (shareInstance, shareCurrent) {\r\n // Close self if parent instance is closing\r\n instance.$refs.container.one(\"beforeClose.fb\", function () {\r\n shareInstance.close(null, 0);\r\n });\r\n\r\n // Opening links in a popup window\r\n shareCurrent.$content.find(\".fancybox-share__button\").click(function () {\r\n window.open(this.href, \"Share\", \"width=550, height=450\");\r\n return false;\r\n });\r\n },\r\n mobile: {\r\n autoFocus: false\r\n }\r\n }\r\n });\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n // Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n if (!$.escapeSelector) {\r\n $.escapeSelector = function (sel) {\r\n var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n var fcssescape = function (ch, asCodePoint) {\r\n if (asCodePoint) {\r\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n if (ch === \"\\0\") {\r\n return \"\\uFFFD\";\r\n }\r\n\r\n // Control characters and (dependent upon position) numbers get escaped as code points\r\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\r\n }\r\n\r\n // Other potentially-special ASCII characters get backslash-escaped\r\n return \"\\\\\" + ch;\r\n };\r\n\r\n return (sel + \"\").replace(rcssescape, fcssescape);\r\n };\r\n }\r\n\r\n // Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr(1),\r\n rez = hash.split(\"-\"),\r\n index = rez.length > 1 && /^\\+?\\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,\r\n gallery = rez.join(\"-\");\r\n\r\n return {\r\n hash: hash,\r\n /* Index is starting from 1 */\r\n index: index < 1 ? 1 : index,\r\n gallery: gallery\r\n };\r\n }\r\n\r\n // Trigger click evnt on links to open new fancyBox instance\r\n function triggerFromUrl(url) {\r\n if (url.gallery !== \"\") {\r\n // If we can find element matching 'data-fancybox' atribute,\r\n // then triggering click event should start fancyBox\r\n $(\"[data-fancybox='\" + $.escapeSelector(url.gallery) + \"']\")\r\n .eq(url.index - 1)\r\n .focus()\r\n .trigger(\"click.fb-start\");\r\n }\r\n }\r\n\r\n // Get gallery name from current instance\r\n function getGalleryID(instance) {\r\n var opts, ret;\r\n\r\n if (!instance) {\r\n return false;\r\n }\r\n\r\n opts = instance.current ? instance.current.opts : instance.opts;\r\n ret = opts.hash || (opts.$orig ? opts.$orig.data(\"fancybox\") || opts.$orig.data(\"fancybox-trigger\") : \"\");\r\n\r\n return ret === \"\" ? false : ret;\r\n }\r\n\r\n // Start when DOM becomes ready\r\n $(function () {\r\n // Check if user has disabled this module\r\n if ($.fancybox.defaults.hash === false) {\r\n return;\r\n }\r\n\r\n // Update hash when opening/closing fancyBox\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var url, gallery;\r\n\r\n if (instance.group[instance.currIndex].opts.hash === false) {\r\n return;\r\n }\r\n\r\n url = parseUrl();\r\n gallery = getGalleryID(instance);\r\n\r\n // Make sure gallery start index matches index from hash\r\n if (gallery && url.gallery && gallery == url.gallery) {\r\n instance.currIndex = url.index - 1;\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var gallery;\r\n\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n // Check if need to update window hash\r\n gallery = getGalleryID(instance);\r\n\r\n if (!gallery) {\r\n return;\r\n }\r\n\r\n // Variable containing last hash value set by fancyBox\r\n // It will be used to determine if fancyBox needs to close after hash change is detected\r\n instance.currentHash = gallery + (instance.group.length > 1 ? \"-\" + (current.index + 1) : \"\");\r\n\r\n // If current hash is the same (this instance most likely is opened by hashchange), then do nothing\r\n if (window.location.hash === \"#\" + instance.currentHash) {\r\n return;\r\n }\r\n\r\n if (firstRun && !instance.origHash) {\r\n instance.origHash = window.location.hash;\r\n }\r\n\r\n if (instance.hashTimer) {\r\n clearTimeout(instance.hashTimer);\r\n }\r\n\r\n // Update hash\r\n instance.hashTimer = setTimeout(function () {\r\n if (\"replaceState\" in window.history) {\r\n window.history[firstRun ? \"pushState\" : \"replaceState\"]({},\r\n document.title,\r\n window.location.pathname + window.location.search + \"#\" + instance.currentHash\r\n );\r\n\r\n if (firstRun) {\r\n instance.hasCreatedHistory = true;\r\n }\r\n } else {\r\n window.location.hash = instance.currentHash;\r\n }\r\n\r\n instance.hashTimer = null;\r\n }, 300);\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance, current) {\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n clearTimeout(instance.hashTimer);\r\n\r\n // Goto previous history entry\r\n if (instance.currentHash && instance.hasCreatedHistory) {\r\n window.history.back();\r\n } else if (instance.currentHash) {\r\n if (\"replaceState\" in window.history) {\r\n window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || \"\"));\r\n } else {\r\n window.location.hash = instance.origHash;\r\n }\r\n }\r\n\r\n instance.currentHash = null;\r\n }\r\n });\r\n\r\n // Check if need to start/close after url has changed\r\n $(window).on(\"hashchange.fb\", function () {\r\n var url = parseUrl(),\r\n fb = null;\r\n\r\n // Find last fancyBox instance that has \"hash\"\r\n $.each(\r\n $(\".fancybox-container\")\r\n .get()\r\n .reverse(),\r\n function (index, value) {\r\n var tmp = $(value).data(\"FancyBox\");\r\n\r\n if (tmp && tmp.currentHash) {\r\n fb = tmp;\r\n return false;\r\n }\r\n }\r\n );\r\n\r\n if (fb) {\r\n // Now, compare hash values\r\n if (fb.currentHash !== url.gallery + \"-\" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {\r\n fb.currentHash = null;\r\n\r\n fb.close();\r\n }\r\n } else if (url.gallery !== \"\") {\r\n triggerFromUrl(url);\r\n }\r\n });\r\n\r\n // Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n setTimeout(function () {\r\n if (!$.fancybox.getInstance()) {\r\n triggerFromUrl(parseUrl());\r\n }\r\n }, 50);\r\n });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Wheel\r\n// Basic mouse weheel support for gallery navigation\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance, current) {\r\n instance.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\", function (e) {\r\n var current = instance.current,\r\n currTime = new Date().getTime();\r\n\r\n if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \"auto\" && current.type !== \"image\")) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (current.$slide.hasClass(\"fancybox-animated\")) {\r\n return;\r\n }\r\n\r\n e = e.originalEvent || e;\r\n\r\n if (currTime - prevTime < 250) {\r\n return;\r\n }\r\n\r\n prevTime = currTime;\r\n\r\n instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \"next\" : \"previous\"]();\r\n });\r\n }\r\n });\r\n})(document, jQuery);","import './home.scss';\r\nimport * as $ from 'jquery';\r\nimport 'owl.carousel/dist/owl.carousel';\r\nimport { setupLayout } from '../Shared/layout';\r\nimport '@fancyapps/fancybox';\r\n\r\nsetupLayout();\r\n\r\n$('#carousel-1').owlCarousel({\r\n loop: true,\r\n items: 1,\r\n dots: false,\r\n autoplay: true,\r\n autoplayTimeout: 8000,\r\n navText: [\"\", \"\"],\r\n responsive: {\r\n 0: {\r\n nav: false\r\n },\r\n 1365: {\r\n nav: true\r\n }\r\n }\r\n});\r\n\r\n$('#carousel-2').owlCarousel({\r\n loop: true,\r\n margin: 16,\r\n dots: false,\r\n autoplay: true,\r\n autoplayTimeout: 6000,\r\n navText: [\"\", \"\"],\r\n responsive: {\r\n 0: {\r\n nav: false,\r\n items: 1\r\n },\r\n 769: {\r\n items: 2\r\n },\r\n 1025: {\r\n items: 3\r\n }\r\n }\r\n})","/**\n * Owl Carousel v2.3.4\n * Copyright 2013-2018 David Deutsch\n * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE\n */\n/**\n * Owl carousel\n * @version 2.3.4\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 being 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\t\tcheckVisibility: true,\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\t\tslideTransition: '',\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\t// TODO: Should be computed from number of min width items in stage\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 > 0) {\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\trepeat -= 1;\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\tthis.$stage.children('.center').removeClass('center');\n\t\t\tif (this.settings.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 * Create the stage DOM element\n\t */\n\tOwl.prototype.initializeStage = function() {\n\t\tthis.$stage = this.$element.find('.' + this.settings.stageClass);\n\n\t\t// if the stage is already in the DOM, grab it and skip stage initialization\n\t\tif (this.$stage.length) {\n\t\t\treturn;\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 + '>', {\n\t\t\t\"class\": this.settings.stageClass\n\t\t}).wrap( $( '
', {\n\t\t\t\"class\": this.settings.stageOuterClass\n\t\t}));\n\n\t\t// append stage\n\t\tthis.$element.append(this.$stage.parent());\n\t};\n\n\t/**\n\t * Create item DOM elements\n\t */\n\tOwl.prototype.initializeItems = function() {\n\t\tvar $items = this.$element.find('.owl-item');\n\n\t\t// if the items are already in the DOM, grab them and skip item initialization\n\t\tif ($items.length) {\n\t\t\tthis._items = $items.get().map(function(item) {\n\t\t\t\treturn $(item);\n\t\t\t});\n\n\t\t\tthis._mergers = this._items.map(function() {\n\t\t\t\treturn 1;\n\t\t\t});\n\n\t\t\tthis.refresh();\n\n\t\t\treturn;\n\t\t}\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.isVisible()) {\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\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.initializeStage();\n\t\tthis.initializeItems();\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 * @returns {Boolean} visibility of $element\n\t * if you know the carousel will always be visible you can set `checkVisibility` to `false` to\n\t * prevent the expensive browser layout forced reflow the $element.is(':visible') does\n\t */\n\tOwl.prototype.isVisible = function() {\n\t\treturn this.settings.checkVisibility\n\t\t\t? this.$element.is(':visible')\n\t\t\t: true;\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.isVisible()) {\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] !== undefined ? 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\t\tthis.settings.slideTransition ? ' ' + this.settings.slideTransition : ''\n\t\t\t\t)\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\tif (iterator) {\n\t\t\t\treciprocalItemsWidth = this._items[--iterator].width();\n\t\t\t\telementWidth = this.$element.width();\n\t\t\t\twhile (iterator--) {\n\t\t\t\t\treciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;\n\t\t\t\t\tif (reciprocalItemsWidth > elementWidth) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\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.isVisible()) {\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\t\tthis.$stage.remove();\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.3.4\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.isVisible();\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.isVisible() === 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.3.4\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\t\t\t\t\t//TODO: Need documentation for this new option\n\t\t\t\t\tif (settings.lazyLoadEager > 0) {\n\t\t\t\t\t\tn += settings.lazyLoadEager;\n\t\t\t\t\t\t// If the carousel is looping also preload images that are to the \"left\"\n\t\t\t\t\t\tif (settings.loop) {\n position -= settings.lazyLoadEager;\n n++;\n }\n\t\t\t\t\t}\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\tlazyLoadEager: 0\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 url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src') || $element.attr('data-srcset');\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 } else if ($element.is('source')) {\n $element.one('load.owl.lazy', $.proxy(function() {\n this._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n }, this)).attr('srcset', 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.3.4\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\tthis._previousHeight = 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 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\tthis._intervalId = null;\n\t\tvar refThis = this;\n\n\t\t// These changes have been taken from a PR by gavrochelegnou proposed in #1575\n\t\t// and have been made compatible with the latest jQuery version\n\t\t$(window).on('load', function() {\n\t\t\tif (refThis._core.settings.autoHeight) {\n\t\t\t\trefThis.update();\n\t\t\t}\n\t\t});\n\n\t\t// Autoresize the height of the carousel when window is resized\n\t\t// When carousel has images, the height is dependent on the width\n\t\t// and should also change on resize\n\t\t$(window).resize(function() {\n\t\t\tif (refThis._core.settings.autoHeight) {\n\t\t\t\tif (refThis._intervalId != null) {\n\t\t\t\t\tclearTimeout(refThis._intervalId);\n\t\t\t\t}\n\n\t\t\t\trefThis._intervalId = setTimeout(function() {\n\t\t\t\t\trefThis.update();\n\t\t\t\t}, 250);\n\t\t\t}\n\t\t});\n\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\tlazyLoadEnabled = this._core.settings.lazyLoad,\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\tif (maxheight <= 1 && lazyLoadEnabled && this._previousHeight) {\n\t\t\tmaxheight = this._previousHeight;\n\t\t}\n\n\t\tthis._previousHeight = maxheight;\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.3.4\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|be\\-nocookie\\.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 ? '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\t\t\"class\": 'owl-video-tn ' + lazyClass,\n\t\t\t\t\t\t\"srcType\": path\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttnLink = $( '
', {\n\t\t\t\t\t\t\"class\": \"owl-video-tn\",\n\t\t\t\t\t\t\"style\": 'opacity:1;background-image:url(' + path + ')'\n\t\t\t\t\t});\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\t\t\t\"class\": \"owl-video-wrapper\",\n\t\t\t\"style\": dimensions\n\t\t}));\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\t\t\tiframe;\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\thtml = $( '' );\n\t\thtml.attr( 'height', height );\n\t\thtml.attr( 'width', width );\n\t\tif (video.type === 'youtube') {\n\t\t\thtml.attr( 'src', '//www.youtube.com/embed/' + video.id + '?autoplay=1&rel=0&v=' + video.id );\n\t\t} else if (video.type === 'vimeo') {\n\t\t\thtml.attr( 'src', '//player.vimeo.com/video/' + video.id + '?autoplay=1' );\n\t\t} else if (video.type === 'vzaar') {\n\t\t\thtml.attr( 'src', '//view.vzaar.com/' + video.id + '/player?autoplay=true' );\n\t\t}\n\n\t\tiframe = $(html).wrap( '
' ).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.3.4\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.3.4\n * @author Bartosz Wojciechowski\n * @author Artus Kolanowski\n * @author David Deutsch\n * @author Tom De Caluwé\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 id.\n\t\t * @type {Number}\n\t\t */\n\t\tthis._call = null;\n\n\t\t/**\n\t\t * Depending on the state of the plugin, this variable contains either\n\t\t * the start time of the timer or the current timer value if it's\n\t\t * paused. Since we start in a paused state we initialize the timer\n\t\t * value.\n\t\t * @type {Number}\n\t\t */\n\t\tthis._time = 0;\n\n\t\t/**\n\t\t * Stores the timeout currently used.\n\t\t * @type {Number}\n\t\t */\n\t\tthis._timeout = 0;\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 = true;\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' && this._paused) {\n\t\t\t\t\t// Reset the timer. This code is triggered when the position\n\t\t\t\t\t// of the carousel was changed through user interaction.\n\t\t\t\t\tthis._time = 0;\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 * Transition to the next slide and set a timeout for the next transition.\n\t * @private\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t */\n\tAutoplay.prototype._next = function(speed) {\n\t\tthis._call = window.setTimeout(\n\t\t\t$.proxy(this._next, this, speed),\n\t\t\tthis._timeout * (Math.round(this.read() / this._timeout) + 1) - this.read()\n\t\t);\n\n\t\tif (this._core.is('interacting') || document.hidden) {\n\t\t\treturn;\n\t\t}\n\t\tthis._core.next(speed || this._core.settings.autoplaySpeed);\n\t}\n\n\t/**\n\t * Reads the current timer value when the timer is playing.\n\t * @public\n\t */\n\tAutoplay.prototype.read = function() {\n\t\treturn new Date().getTime() - this._time;\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\tvar elapsed;\n\n\t\tif (!this._core.is('rotating')) {\n\t\t\tthis._core.enter('rotating');\n\t\t}\n\n\t\ttimeout = timeout || this._core.settings.autoplayTimeout;\n\n\t\t// Calculate the elapsed time since the last transition. If the carousel\n\t\t// wasn't playing this calculation will yield zero.\n\t\telapsed = Math.min(this._time % (this._timeout || timeout), timeout);\n\n\t\tif (this._paused) {\n\t\t\t// Start the clock.\n\t\t\tthis._time = this.read();\n\t\t\tthis._paused = false;\n\t\t} else {\n\t\t\t// Clear the active timeout to allow replacement.\n\t\t\twindow.clearTimeout(this._call);\n\t\t}\n\n\t\t// Adjust the origin of the timer to match the new timeout value.\n\t\tthis._time += this.read() % timeout - elapsed;\n\n\t\tthis._timeout = timeout;\n\t\tthis._call = window.setTimeout($.proxy(this._next, this, speed), timeout - elapsed);\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\t// Reset the clock.\n\t\t\tthis._time = 0;\n\t\t\tthis._paused = true;\n\n\t\t\twindow.clearTimeout(this._call);\n\t\t\tthis._core.leave('rotating');\n\t\t}\n\t};\n\n\t/**\n\t * Pauses the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.pause = function() {\n\t\tif (this._core.is('rotating') && !this._paused) {\n\t\t\t// Pause the clock.\n\t\t\tthis._time = this.read();\n\t\t\tthis._paused = true;\n\n\t\t\twindow.clearTimeout(this._call);\n\t\t}\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.3.4\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: [\n\t\t\t'',\n\t\t\t''\n\t\t],\n\t\tnavSpeed: false,\n\t\tnavElement: 'button type=\"button\" role=\"presentation\"',\n\t\tnavContainer: false,\n\t\tnavContainerClass: 'owl-nav',\n\t\tnavClass: [\n\t\t\t'owl-prev',\n\t\t\t'owl-next'\n\t\t],\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 = [ $('