/*
Slimbox v1.4 - The ultimate lightweight Lightbox clone
by Christophe Beyls (http://www.digitalia.be) - MIT-style license.
Inspired by the original Lightbox v2 by Lokesh Dhakar.
*/
var Lightbox={
init:function(options){
	this.options=$extend({
		resizeDuration:400,
		resizeTransition:false,	//default transition
		initialWidth:250,
		initialHeight:250,
		animateCaption:true,
		showCounter:true
	},options||{});

	this.anchors=[];
	$each(document.links,function(el){
		if(el.rel && el.rel.test(/^lightbox/i)){
			el.onclick=this.click.pass(el,this);
			this.anchors.push(el);
		}
	},this);
	this.eventKeyDown=this.keyboardListener.bindAsEventListener(this);
	this.eventPosition=this.position.bind(this);

	this.overlay=new Element('div',{'id':'lbOverlay'}).injectInside(document.body);

	this.center=new Element('div',{'id':'lbCenter','styles':{'width':this.options.initialWidth,'height':this.options.initialHeight,'marginLeft':-(this.options.initialWidth/2),'display':'none'}}).injectInside(document.body);
	this.image=new Element('div',{'id':'lbImage'}).injectInside(this.center);
	this.prevLink=new Element('a',{'id':'lbPrevLink','href':'#','styles':{'display':'none'}}).injectInside(this.image);
	this.nextLink=this.prevLink.clone().setProperty('id','lbNextLink').injectInside(this.image);
	this.prevLink.onclick=this.previous.bind(this);
	this.nextLink.onclick=this.next.bind(this);

	this.bottomContainer=new Element('div',{'id':'lbBottomContainer','styles':{'display':'none'}}).injectInside(document.body);
	this.bottom=new Element('div',{'id':'lbBottom'}).injectInside(this.bottomContainer);
	new Element('a',{'id':'lbCloseLink','href':'#'}).injectInside(this.bottom).onclick=this.overlay.onclick=this.close.bind(this);
	this.caption=new Element('div',{'id':'lbCaption'}).injectInside(this.bottom);
	this.number=new Element('div',{'id':'lbNumber'}).injectInside(this.bottom);
	new Element('div',{'styles':{'clear':'both'}}).injectInside(this.bottom);

	var nextEffect=this.nextEffect.bind(this);
	this.fx={
		overlay:this.overlay.effect('opacity',{duration:500}).hide(),
		resize:this.center.effects($extend({duration:this.options.resizeDuration,onComplete:nextEffect},this.options.resizeTransition?{transition:this.options.resizeTransition}:{})),
		image:this.image.effect('opacity',{duration:500,onComplete:nextEffect}),
		bottom:this.bottom.effect('margin-top',{duration:400,onComplete:nextEffect})
	};

	this.preloadPrev=new Image();
	this.preloadNext=new Image();
},

click:function(link){
	if(link.rel.length==8){
		if(link.id!=null){
			var a=new String(link.id);
			if(a.indexOf("trck")!=-1){
				var b=a.split("_");
				trck('/'+b[1]);
			}
		}
		return this.show(link.href,link.title);
	}
	var j,imageNum,images=[];
	this.anchors.each(function(el){
		if(el.rel==link.rel){
			for(j=0;j<images.length;j++) if(images[j][0]==el.href) break;
			if(j==images.length){
				images.push([el.href,el.title]);
				if(el.href==link.href) imageNum=j;
			}
		}
	},this);
	return this.open(images,imageNum);
},

show:function(url,title){
	return this.open([[url,title]],0);
},

open:function(images,imageNum){
	this.images=images;
	this.position();
	this.setup(true);
	this.top=window.getScrollTop()+(window.getHeight() / 15);
	this.center.setStyles({top:this.top,display:''});
	this.fx.overlay.start(0.8);
	return this.changeImage(imageNum);
},

position:function(){
	this.overlay.setStyles({'top':window.getScrollTop(),'height':window.getHeight()});
},

setup:function(open){
	var elements=$A(document.getElementsByTagName('object'));
	elements.extend(document.getElementsByTagName(window.ie?'select':'embed'));
	elements.each(function(el){
		if(open) el.lbBackupStyle=el.style.visibility;
		el.style.visibility=open?'hidden':el.lbBackupStyle;
	});
	var fn=open?'addEvent':'removeEvent';
	window[fn]('scroll',this.eventPosition)[fn]('resize',this.eventPosition);
	document[fn]('keydown',this.eventKeyDown);
	this.step=0;
},

keyboardListener:function(event){
	switch (event.keyCode){
		case 27:case 88:case 67:this.close();break;
		case 37:case 80:this.previous();break;
		case 39:case 78:this.next();
	}
},

previous:function(){
	return this.changeImage(this.activeImage-1);
},

next:function(){
	return this.changeImage(this.activeImage+1);
},

changeImage:function(imageNum){
	if(this.step||(imageNum<0)||(imageNum >= this.images.length)) return false;
	this.step=1;
	this.activeImage=imageNum;

	this.center.style.backgroundColor='';
	this.bottomContainer.style.display=this.prevLink.style.display=this.nextLink.style.display='none';
	this.fx.image.hide();
	this.center.className='lbLoading';

	this.preload=new Image();
	this.preload.onload=this.nextEffect.bind(this);
	this.preload.src=this.images[imageNum][0];
	return false;
},

nextEffect:function(){
	switch (this.step++){
	case 1:
		this.center.className='';
		this.image.style.backgroundImage='url('+this.images[this.activeImage][0]+')';
		this.image.style.width=this.bottom.style.width=this.preload.width+'px';
		this.image.style.height=this.prevLink.style.height=this.nextLink.style.height=this.preload.height+'px';

		this.caption.setHTML(this.images[this.activeImage][1]||'');
		this.number.setHTML((!this.options.showCounter||(this.images.length==1))?'':'Image '+(this.activeImage+1)+' of '+this.images.length);

		if(this.activeImage) this.preloadPrev.src=this.images[this.activeImage-1][0];
		if(this.activeImage != (this.images.length - 1)) this.preloadNext.src=this.images[this.activeImage+1][0];
		if(this.center.clientHeight != this.image.offsetHeight){
			this.fx.resize.start({height:this.image.offsetHeight});
			break;
		}
		this.step++;
	case 2:
		if(this.center.clientWidth != this.image.offsetWidth){
			this.fx.resize.start({width:this.image.offsetWidth,marginLeft:-this.image.offsetWidth/2});
			break;
		}
		this.step++;
	case 3:
		this.bottomContainer.setStyles({top:this.top+this.center.clientHeight,height:0,marginLeft:this.center.style.marginLeft,display:''});
		this.fx.image.start(1);
		break;
	case 4:
		this.center.style.backgroundColor='#000';
		if(this.options.animateCaption){
			this.fx.bottom.set(-this.bottom.offsetHeight);
			this.bottomContainer.style.height='';
			this.fx.bottom.start(0);
			break;
		}
		this.bottomContainer.style.height='';
	case 5:
		if(this.activeImage) this.prevLink.style.display='';
		if(this.activeImage != (this.images.length - 1)) this.nextLink.style.display='';
		this.step=0;
	}
},

close:function(){
	if(this.step<0) return;
	this.step=-1;
	if(this.preload){
		this.preload.onload=Class.empty;
		this.preload=null;
	}
	for(var f in this.fx) this.fx[f].stop();
	this.center.style.display=this.bottomContainer.style.display='none';
	this.fx.overlay.chain(this.setup.pass(false,this)).start(0);
	return false;
}
};
window.addEvent('domready',Lightbox.init.bind(Lightbox));
