(function(n,t){typeof define=="function"&&define.amd?define([],t):typeof module=="object"&&module.exports?module.exports=t():n.SimpleLightbox=t()})(this,function(){function f(n){for(var t,r,i=1;i<arguments.length;i++)if(t=arguments[i],t)for(r in t)t.hasOwnProperty(r)&&(n[r]=t[r]);return n}function u(n,t){n&&t&&(n.className+=" "+t)}function r(n,t){n&&t&&(n.className=n.className.replace(new RegExp("(\\s|^)"+t+"(\\s|$)")," ").trim())}function t(n){var t=document.createElement("div");return t.innerHTML=n.trim(),t.childNodes[0]}function i(n,t){return(n.matches||n.matchesSelector||n.msMatchesSelector).call(n,t)}function e(){return"innerHeight"in window?window.innerHeight:document.documentElement.offsetHeight}function n(){this.init.apply(this,arguments)}return n.defaults={elementClass:"",elementLoadingClass:"slbLoading",htmlClass:"slbActive",closeBtnClass:"",nextBtnClass:"",prevBtnClass:"",loadingTextClass:"",closeBtnCaption:"Close",nextBtnCaption:"Next",prevBtnCaption:"Previous",loadingCaption:"Loading...",bindToItems:!0,closeOnOverlayClick:!0,closeOnEscapeKey:!0,nextOnImageClick:!1,showCaptions:!1,captionAttribute:"title",urlAttribute:"href",startAt:0,loadingTimeout:100,appendTarget:"body",beforeSetContent:null,beforeClose:null,afterClose:null,beforeDestroy:null,afterDestroy:null,videoRegex:new RegExp(/youtube.com|vimeo.com/)},f(n.prototype,{init:function(t){t=this.options=f({},n.defaults,t);var i=this,r;t.$items&&(r=t.$items.get());t.elements&&(r=[].slice.call(typeof t.elements=="string"?document.querySelectorAll(t.elements):t.elements));this.eventRegistry={lightbox:[],thumbnails:[]};this.items=[];this.captions=[];r&&r.forEach(function(n,r){i.items.push(n.getAttribute(t.urlAttribute));i.captions.push(n.getAttribute(t.captionAttribute));t.bindToItems&&i.addEvent(n,"click",function(n){n.preventDefault();i.showPosition(r)},"thumbnails")});t.items&&(this.items=t.items);t.captions&&(this.captions=t.captions)},addEvent:function(n,t,i,r){return this.eventRegistry[r||"lightbox"].push({element:n,eventName:t,callback:i}),n.addEventListener(t,i),this},removeEvents:function(n){return this.eventRegistry[n].forEach(function(n){n.element.removeEventListener(n.eventName,n.callback)}),this.eventRegistry[n]=[],this},next:function(){return this.showPosition(this.currentPosition+1)},prev:function(){return this.showPosition(this.currentPosition-1)},normalizePosition:function(n){return n>=this.items.length?n=0:n<0&&(n=this.items.length-1),n},showPosition:function(n){var t=this.normalizePosition(n);return typeof this.currentPosition!="undefined"&&(this.direction=t>this.currentPosition?"next":"prev"),this.currentPosition=t,this.setupLightboxHtml().prepareItem(this.currentPosition,this.setContent).show()},loading:function(n){var i=this,t=this.options;n?this.loadingTimeout=setTimeout(function(){u(i.$el,t.elementLoadingClass);i.$content.innerHTML='<p class="slbLoadingText '+t.loadingTextClass+'">'+t.loadingCaption+"<\/p>";i.show()},t.loadingTimeout):(r(this.$el,t.elementLoadingClass),clearTimeout(this.loadingTimeout))},prepareItem:function(n,i){var r=this,u=this.items[n],f;return this.loading(!0),this.options.videoRegex.test(u)?i.call(r,t('<div class="slbIframeCont"><iframe class="slbIframe" frameborder="0" allowfullscreen src="'+u+'"><\/iframe><\/div>')):(f=t('<div class="slbImageWrap"><img class="slbImage" src="'+u+'" /><\/div>'),this.$currentImage=f.querySelector(".slbImage"),this.options.showCaptions&&this.captions[n]&&f.appendChild(t('<div class="slbCaption">'+this.captions[n]+"<\/div>")),this.loadImage(u,function(){r.setImageDimensions();i.call(r,f);r.loadImage(r.items[r.normalizePosition(r.currentPosition+1)])})),this},loadImage:function(n,t){if(!this.options.videoRegex.test(n)){var i=new Image;t&&(i.onload=t);i.src=n}},setupLightboxHtml:function(){var n=this.options;return this.$el||(this.$el=t('<div class="slbElement '+n.elementClass+'"><div class="slbOverlay"><\/div><div class="slbWrapOuter"><div class="slbWrap"><div class="slbContentOuter"><div class="slbContent"><\/div><button type="button" title="'+n.closeBtnCaption+'" class="slbCloseBtn '+n.closeBtnClass+'">×<\/button>'+(this.items.length>1?'<div class="slbArrows"><button type="button" title="'+n.prevBtnCaption+'" class="prev slbArrow'+n.prevBtnClass+'">'+n.prevBtnCaption+'<\/button><button type="button" title="'+n.nextBtnCaption+'" class="next slbArrow'+n.nextBtnClass+'">'+n.nextBtnCaption+"<\/button><\/div>":"")+"<\/div><\/div><\/div><\/div>"),this.$content=this.$el.querySelector(".slbContent")),this.$content.innerHTML="",this},show:function(){return this.modalInDom||(document.querySelector(this.options.appendTarget).appendChild(this.$el),u(document.documentElement,this.options.htmlClass),this.setupLightboxEvents(),this.modalInDom=!0),this},setContent:function(n){var i=typeof n=="string"?t(n):n;return this.loading(!1),this.setupLightboxHtml(),r(this.$content,"slbDirectionNext"),r(this.$content,"slbDirectionPrev"),this.direction&&u(this.$content,this.direction==="next"?"slbDirectionNext":"slbDirectionPrev"),this.options.beforeSetContent&&this.options.beforeSetContent(i,this),this.$content.appendChild(i),this},setImageDimensions:function(){this.$currentImage&&(this.$currentImage.style.maxHeight=e()+"px")},setupLightboxEvents:function(){var n=this;return this.eventRegistry.lightbox.length?this:(this.addEvent(this.$el,"click",function(t){var r=t.target;i(r,".slbCloseBtn")||n.options.closeOnOverlayClick&&i(r,".slbWrap")?n.close():i(r,".slbArrow")?i(r,".next")?n.next():n.prev():n.options.nextOnImageClick&&n.items.length>1&&i(r,".slbImage")&&n.next()}).addEvent(document,"keyup",function(t){n.options.closeOnEscapeKey&&t.keyCode===27&&n.close();n.items.length>1&&((t.keyCode===39||t.keyCode===68)&&n.next(),(t.keyCode===37||t.keyCode===65)&&n.prev())}).addEvent(window,"resize",function(){n.setImageDimensions()}),this)},close:function(){this.modalInDom&&(this.runHook("beforeClose"),this.removeEvents("lightbox"),this.$el&&this.$el.parentNode.removeChild(this.$el),r(document.documentElement,this.options.htmlClass),this.modalInDom=!1,this.runHook("afterClose"));this.direction=undefined;this.currentPosition=this.options.startAt},destroy:function(){this.close();this.runHook("beforeDestroy");this.removeEvents("thumbnails");this.runHook("afterDestroy")},runHook:function(n){this.options[n]&&this.options[n](this)}}),n.open=function(t){var i=new n(t);return t.content?i.setContent(t.content).show():i.showPosition(i.options.startAt)},n.registerAsJqueryPlugin=function(t){t.fn.simpleLightbox=function(i){var r,u=this;return this.each(function(){t.data(this,"simpleLightbox")||(r=r||new n(t.extend({},i,{$items:u})),t.data(this,"simpleLightbox",r))})};t.SimpleLightbox=n},typeof window!="undefined"&&window.jQuery&&n.registerAsJqueryPlugin(window.jQuery),n})