}\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 (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 (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 (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 (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 (function($, window, document, undefined) {\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: $('