﻿var Slimbox=(function(){var win=window,ie6=Browser.Engine.trident4,options,images,activeImage=-1,activeURL,prevImage,nextImage,compatibleOverlay,middle,centerWidth,centerHeight,preload={},preloadPrev=new Image(),preloadNext=new Image(),overlay,center,image,sizer,prevLink,nextLink,bottomContainer,bottom,caption,number,fxOverlay,fxResize,fxImage,fxBottom;win.addEvent("domready",function(){$(document.body).adopt($$(overlay=new Element("div",{id:"lbOverlay",events:{click:close}}),center=new Element("div",{id:"lbCenter"}),bottomContainer=new Element("div",{id:"lbBottomContainer"})).setStyle("display","none"));image=new Element("div",{id:"lbImage"}).injectInside(center).adopt(sizer=new Element("div",{styles:{position:"relative"}}).adopt(prevLink=new Element("a",{id:"lbPrevLink",href:"#",events:{click:previous}}),nextLink=new Element("a",{id:"lbNextLink",href:"#",events:{click:next}})));bottom=new Element("div",{id:"lbBottom"}).injectInside(bottomContainer).adopt(new Element("a",{id:"lbCloseLink",href:"#",events:{click:close}}),caption=new Element("div",{id:"lbCaption"}),number=new Element("div",{id:"lbNumber"}))});function position(){var scroll=win.getScroll(),size=win.getSize();$$(center,bottomContainer).setStyle("left",scroll.x+(size.x/2))}function setup(open){["object",ie6?"select":"embed"].forEach(function(tag){Array.forEach(document.getElementsByTagName(tag),function(el){if(open)el._slimbox=el.style.visibility;el.style.visibility=open?"hidden":el._slimbox})});overlay.style.display=open?"":"none";var fn=open?"addEvent":"removeEvent";win[fn]("scroll",position)[fn]("resize",position);document[fn]("keydown",keyDown)}function keyDown(event){var code=event.code;return options.closeKeys.contains(code)?close():options.nextKeys.contains(code)?next():options.previousKeys.contains(code)?previous():false}function previous(){return changeImage(prevImage)}function next(){return changeImage(nextImage)}function changeImage(imageIndex){if(imageIndex>=0){activeImage=imageIndex;activeURL=images[imageIndex][0];prevImage=(activeImage||(options.loop?images.length:0))-1;nextImage=((activeImage+1)%images.length)||(options.loop?0:-1);stop();center.className="lbLoading";preload=new Image();preload.onload=animateBox;preload.src=activeURL}return false}function animateBox(){center.className="";fxImage.set(0);image.setStyles({backgroundImage:"url("+activeURL+")",display:""});sizer.setStyle("width",preload.width);$$(sizer,prevLink,nextLink).setStyle("height",preload.height);caption.set("html",images[activeImage][1]||"");number.set("html",(((images.length>1)&&options.counterText)||"").replace(/{x}/,activeImage+1).replace(/{y}/,images.length));if(prevImage>=0)preloadPrev.src=images[prevImage][0];if(nextImage>=0)preloadNext.src=images[nextImage][0];centerWidth=image.offsetWidth;centerHeight=image.offsetHeight;var top=Math.max(0,middle-(centerHeight/2))-20,fn;if(center.offsetHeight!=centerHeight){fxResize.start({height:centerHeight,top:top})}if(center.offsetWidth!=centerWidth){fxResize.start({width:centerWidth,marginLeft:-centerWidth/2})}fn=function(){bottomContainer.setStyles({width:centerWidth,top:top+centerHeight,marginLeft:-centerWidth/2,visibility:"hidden",display:""});fxImage.start(1)};if(fxResize.check(fn))fn()}function animateCaption(){if(prevImage>=0)prevLink.style.display="";if(nextImage>=0)nextLink.style.display="";fxBottom.set(-bottom.offsetHeight).start(0);bottomContainer.style.visibility=""}function stop(){preload.onload=$empty;preload.src=preloadPrev.src=preloadNext.src=activeURL;fxResize.cancel();fxImage.cancel();fxBottom.cancel();$$(prevLink,nextLink,image,bottomContainer).setStyle("display","none")}function close(){if(activeImage>=0){stop();activeImage=prevImage=nextImage=-1;center.style.display="none";fxOverlay.cancel().chain(setup).start(0)}return false}Element.implement({slimbox:function(_options,linkMapper){$$(this).slimbox(_options,linkMapper);return this}});Elements.implement({slimbox:function(_options,linkMapper,linksFilter){linkMapper=linkMapper||function(el){return[el.href,el.title]};linksFilter=linksFilter||function(){return true};var links=this;links.removeEvents("click").addEvent("click",function(){var filteredLinks=links.filter(linksFilter,this);return Slimbox.open(filteredLinks.map(linkMapper),filteredLinks.indexOf(this),_options)});return links}});return{open:function(_images,startImage,_options){options=$extend({loop:false,overlayOpacity:0.8,overlayFadeDuration:400,resizeDuration:400,resizeTransition:false,initialWidth:250,initialHeight:250,imageFadeDuration:400,captionAnimationDuration:400,counterText:"Image {x} of {y}",closeKeys:[27,88,67],previousKeys:[37,80],nextKeys:[39,78]},_options||{});fxOverlay=new Fx.Tween(overlay,{property:"opacity",duration:options.overlayFadeDuration});fxResize=new Fx.Morph(center,$extend({duration:options.resizeDuration,link:"chain"},options.resizeTransition?{transition:options.resizeTransition}:{}));fxImage=new Fx.Tween(image,{property:"opacity",duration:options.imageFadeDuration,onComplete:animateCaption});fxBottom=new Fx.Tween(bottom,{property:"margin-top",duration:options.captionAnimationDuration});if(typeof _images=="string"){_images=[[_images,startImage]];startImage=0}middle=win.getScrollTop()+(win.getHeight()/2);centerWidth=options.initialWidth;centerHeight=options.initialHeight;center.setStyles({top:Math.max(0,middle-(centerHeight/2)),width:centerWidth,height:centerHeight,marginLeft:-centerWidth/2,display:""});compatibleOverlay=ie6||(overlay.currentStyle&&(overlay.currentStyle.position!="fixed"));var scroll=win.getScroll(),size=win.getSize();if(compatibleOverlay){overlay.setStyles({'position':'absolute','height':window.getScrollHeight(),'width':window.getScrollWidth()})}fxOverlay.set(0).start(options.overlayOpacity);position();setup(1);images=_images;options.loop=options.loop&&(images.length>1);return changeImage(startImage)}}})();Slimbox.scanPage=function(){$$(document.links).filter(function(el){return el.rel&&el.rel.test(/^lightbox/i)}).slimbox({counterText:"Photo {x} / {y}"},null,function(el){return(this==el)||((this.rel.length>8)&&(this.rel==el.rel))});$$('a.photo').each(function(photo){photo.addEvent('click',function(e){e.stop();this.getNext().getElement('a').fireEvent('click')})})};window.addEvent("domready",Slimbox.scanPage);