//	Lightbox v2.02 by Lokesh Dhakar - http://www.huddletogether.com
//	http://huddletogether.com/projects/lightbox2/
//	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/

var resizeSpeed=7;
var borderSize=10;
var imageArray=new Array;
var activeImage;

if(resizeSpeed>10){resizeSpeed=10;}
if(resizeSpeed<1){resizeSpeed=1;}
resizeDuration=(11-resizeSpeed)*0.15;

Object.extend(Element,{
		getWidth:function(element){
			element=$(element);
			return element.offsetWidth;
		},
		setWidth:function(element,w){
			element=$(element);
			element.style.width=w+"px";
		},
		setHeight:function(element,h){
			element=$(element);
			element.style.height=h+"px";
		},
		setTop:function(element,t){
			element=$(element);
			element.style.top=t+"px";
		},
		setSrc:function(element,src){
			element=$(element);
			element.src=src;
		},
		setHref:function(element,href){
			element=$(element);
			element.href=href;
		},
		setInnerHTML:function(element,content){
			element=$(element);
			element.innerHTML=content;
		}
});

Array.prototype.removeDuplicates=function(){
	for(i=1;i<this.length;i++){
		if(this[i][0]==this[i-1][0]){
			this.splice(i,1);
		}
	}
}

Array.prototype.empty=function(){
	for(i=0;i<=this.length;i++){
		this.shift();
	}
}

var Lightbox=Class.create();

Lightbox.prototype={
	initialize:function(){
		if(!document.getElementsByTagName){
			return;
		}
	
		var anchors=document.getElementsByTagName('a');
	
		for(var i=0;i<anchors.length;i++){
			var anchor=anchors[i];
			var relAttribute=String(anchor.getAttribute('rel'));
			if(anchor.getAttribute('href')&&(relAttribute.toLowerCase().match('lightbox'))){
				anchor.onclick=function(){
					myLightbox.start(this);
					return false;
				}
			}
		}
		var objBody=document.getElementsByTagName("body").item(0);
		var objOverlay=document.createElement("div");
		objOverlay.setAttribute('id','overlay');
		objOverlay.style.display='none';
		
		objOverlay.onclick=function(){
			myLightbox.end();
			return false;
		}
	
		objBody.appendChild(objOverlay);
		var objLightbox=document.createElement("div");
		objLightbox.setAttribute('id','lightbox');
		objLightbox.style.display='none';
		objBody.appendChild(objLightbox);
		var objOuterImageContainer=document.createElement("div");
		objOuterImageContainer.setAttribute('id','outerImageContainer');
		objLightbox.appendChild(objOuterImageContainer);
		var objImageContainer=document.createElement("div");
		objImageContainer.setAttribute('id','imageContainer');
		objOuterImageContainer.appendChild(objImageContainer);
		var objLightboxImage=document.createElement("img");
		objLightboxImage.setAttribute('id','lightboxImage');
		objImageContainer.appendChild(objLightboxImage);
		var objHoverNav=document.createElement("div");
		objHoverNav.setAttribute('id','hoverNav');
		objImageContainer.appendChild(objHoverNav);
		var objPrevLink=document.createElement("a");
		objPrevLink.setAttribute('id','prevLink');
		objPrevLink.setAttribute('href','#');
		objHoverNav.appendChild(objPrevLink);
		var objNextLink=document.createElement("a");
		objNextLink.setAttribute('id','nextLink');
		objNextLink.setAttribute('href','#');
		objHoverNav.appendChild(objNextLink);
		var objLoading=document.createElement("div");
		objLoading.setAttribute('id','lightboxLoading');
		objImageContainer.appendChild(objLoading);
		var objLoadingLink=document.createElement("a");
		objLoadingLink.setAttribute('id','loadingLink');
		objLoadingLink.setAttribute('href','#');
	
		objLoadingLink.onclick=function(){
			myLightbox.end();
			return false;
		}
	
		objLoading.appendChild(objLoadingLink);
		var objLoadingImage=document.createElement("img");
		objLoadingImage.setAttribute('src',fileLoadingImage);
		objLoadingLink.appendChild(objLoadingImage);
		var objImageDataContainer=document.createElement("div");
		objImageDataContainer.setAttribute('id','imageDataContainer');
		objImageDataContainer.className='clearfix';
		objLightbox.appendChild(objImageDataContainer);
		var objImageData=document.createElement("div");
		objImageData.setAttribute('id','imageData');
		objImageDataContainer.appendChild(objImageData);
		var objImageDetails=document.createElement("div");
		objImageDetails.setAttribute('id','imageDetails');
		objImageData.appendChild(objImageDetails);
		var objCaption=document.createElement("span");
		objCaption.setAttribute('id','caption');
		objImageDetails.appendChild(objCaption);
		var objNumberDisplay=document.createElement("span");
		objNumberDisplay.setAttribute('id','numberDisplay');
		objImageDetails.appendChild(objNumberDisplay);
		var objBottomNav=document.createElement("div");
		objBottomNav.setAttribute('id','bottomNav');
		objImageData.appendChild(objBottomNav);
		var objBottomNavCloseLink=document.createElement("a");
		objBottomNavCloseLink.setAttribute('id','bottomNavClose');
		objBottomNavCloseLink.setAttribute('href','#');
		
		objBottomNavCloseLink.onclick=function(){
			myLightbox.end();
			return false;
		}
		objBottomNav.appendChild(objBottomNavCloseLink);
		var objBottomNavCloseImage=document.createElement("img");
		objBottomNavCloseImage.setAttribute('src',fileBottomNavCloseImage);
		objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
	},
	start:function(imageLink){
		hideSelectBoxes();
		var arrayPageSize=getPageSize();
		Element.setHeight('overlay',arrayPageSize[1]);
		new Effect.Appear('overlay',{duration:0.2,from:0.0,to:0.8});
		imageArray=[];
		imageNum=0;
		if(!document.getElementsByTagName){
			return;
		}
		var anchors=document.getElementsByTagName('a');
		if((imageLink.getAttribute('rel')=='lightbox')){
			imageArray.push(new Array(imageLink.getAttribute('href'),imageLink.getAttribute('title')));
		}else{
			for(var i=0;i<anchors.length;i++){
				var anchor=anchors[i];
				if(anchor.getAttribute('href')&&(anchor.getAttribute('rel')==imageLink.getAttribute('rel'))){
					imageArray.push(new Array(anchor.getAttribute('href'),anchor.getAttribute('title')));
				}
			}
		
			imageArray.removeDuplicates();
			while(imageArray[imageNum][0]!=imageLink.getAttribute('href')){
				imageNum++;
			}
		}
		
		var arrayPageSize=getPageSize();
		var arrayPageScroll=getPageScroll();
		var lightboxTop=arrayPageScroll[1]+(arrayPageSize[3]/15);
		Element.setTop('lightbox',lightboxTop);
		Element.show('lightbox');
		this.changeImage(imageNum);
	},
	changeImage:function(imageNum){
		activeImage=imageNum;
		Element.show('lightboxLoading');
		Element.hide('lightboxImage');
		Element.hide('hoverNav');
		Element.hide('prevLink');
		Element.hide('nextLink');
		Element.hide('imageDataContainer');
		Element.hide('numberDisplay');
		imgPreloader=new Image();
		imgPreloader.onload=function(){
			Element.setSrc('lightboxImage',imageArray[activeImage][0]);
			myLightbox.resizeImageContainer(imgPreloader.width,imgPreloader.height);
		}
		imgPreloader.src=imageArray[activeImage][0];
	},
	resizeImageContainer:function(imgWidth,imgHeight){
		this.wCur=Element.getWidth('outerImageContainer');
		this.hCur=Element.getHeight('outerImageContainer');
		this.xScale=((imgWidth+(borderSize*2))/this.wCur)*100;
		this.yScale=((imgHeight+(borderSize*2))/this.hCur)*100;
		wDiff=(this.wCur-borderSize*2)-imgWidth;
		hDiff=(this.hCur-borderSize*2)-imgHeight;
		if(!(hDiff==0)){
			new Effect.Scale('outerImageContainer',
							this.yScale,
							{scaleX:false,
							duration:resizeDuration,
							queue:'front'});
		}
		if(!(wDiff==0)){
			new Effect.Scale('outerImageContainer',
							this.xScale,
							{scaleY:false,delay:resizeDuration,duration:resizeDuration});
		}
		if((hDiff==0)&&(wDiff==0)){
			if(navigator.appVersion.indexOf("MSIE")!=-1){
				pause(250);
			}else{
				pause(100);
			}
		}
		Element.setHeight('prevLink',imgHeight);
		Element.setHeight('nextLink',imgHeight);
		Element.setWidth('imageDataContainer',imgWidth+(borderSize*2));
		this.showImage();
	},
	showImage:function(){
		Element.hide('lightboxLoading');
		new Effect.Appear('lightboxImage',{duration:0.5,queue:'end',afterFinish:function(){myLightbox.updateDetails();}});
		this.preloadNeighborImages();
	},
	updateDetails:function(){
		Element.show('caption');
		Element.setInnerHTML('caption',imageArray[activeImage][1]);
		if(imageArray.length>1){
			Element.show('numberDisplay');
			Element.setInnerHTML('numberDisplay',"Image "+eval(activeImage+1)+" of "+imageArray.length);
		}
		new Effect.Parallel([new Effect.SlideDown('imageDataContainer',
							{sync:true,duration:resizeDuration+0.25,from:0.0,to:1.0}),
							new Effect.Appear('imageDataContainer',
							{sync:true,duration:1.0})],
							{duration:0.65,afterFinish:function(){myLightbox.updateNav();}});
	},
	updateNav:function(){
		Element.show('hoverNav');
		if(activeImage!=0){
			Element.show('prevLink');
			document.getElementById('prevLink').onclick=function(){
				myLightbox.changeImage(activeImage-1);
				return false;
			}
		}
		if(activeImage!=(imageArray.length-1)){Element.show('nextLink');document.getElementById('nextLink').onclick=function(){myLightbox.changeImage(activeImage+1);return false;}}
		this.enableKeyboardNav();
	},
	enableKeyboardNav:function(){
		document.onkeydown=this.keyboardAction;
	},
	disableKeyboardNav:function(){
		document.onkeydown='';
	},
	keyboardAction:function(e){
		if(e==null){
			keycode=event.keyCode;
		}else{
			keycode=e.which;
		}
		key=String.fromCharCode(keycode).toLowerCase();
		if((key=='x')||(key=='o')||(key=='c')){
			myLightbox.end();
		}else if(key=='p'){
			if(activeImage!=0){
				myLightbox.disableKeyboardNav();
				myLightbox.changeImage(activeImage-1);
			}
		}else if(key=='n'){
			if(activeImage!=(imageArray.length-1)){
				myLightbox.disableKeyboardNav();
				myLightbox.changeImage(activeImage+1);}
		}
	},
	preloadNeighborImages:function(){
		if((imageArray.length-1)>activeImage){
			preloadNextImage=new Image();
			preloadNextImage.src=imageArray[activeImage+1][0];
		}
		if(activeImage>0){
			preloadPrevImage=new Image();
			preloadPrevImage.src=imageArray[activeImage-1][0];
		}
	},
	end:function(){
		this.disableKeyboardNav();
		Element.hide('lightbox');
		new Effect.Fade('overlay',{duration:0.2});
		showSelectBoxes();
	}
}

function getPageScroll(){
	var yScroll;
	if(self.pageYOffset){
		yScroll=self.pageYOffset;
	}else if(document.documentElement&&document.documentElement.scrollTop){
		yScroll=document.documentElement.scrollTop;
	}else if(document.body){
		yScroll=document.body.scrollTop;
	}
	arrayPageScroll=new Array('',yScroll)   	//not sure if this line is supposed to have the ending ; on it (it was missing so i put it there)
	return arrayPageScroll;
}
function getPageSize(){
	var xScroll,yScroll;
	if(window.innerHeight&&window.scrollMaxY){
		xScroll=document.body.scrollWidth;
		yScroll=window.innerHeight+window.scrollMaxY;
	}else if(document.body.scrollHeight>document.body.offsetHeight){
		xScroll=document.body.scrollWidth;
		yScroll=document.body.scrollHeight;
	}else{
		xScroll=document.body.offsetWidth;
		yScroll=document.body.offsetHeight;
	}
	var windowWidth,windowHeight;
	if(self.innerHeight){
		windowWidth=self.innerWidth;
		windowHeight=self.innerHeight;
	}else if(document.documentElement&&document.documentElement.clientHeight){
		windowWidth=document.documentElement.clientWidth;
		windowHeight=document.documentElement.clientHeight;
	}else if(document.body){
		windowWidth=document.body.clientWidth;
		windowHeight=document.body.clientHeight;
	}
	if(yScroll<windowHeight){
		pageHeight=windowHeight;
	}else{
		pageHeight=yScroll;
	}
	if(xScroll<windowWidth){
		pageWidth=windowWidth;
	}else{
		pageWidth=xScroll;
	}
	arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight)
	return arrayPageSize;
}

function getKey(e){
	if(e==null){
		keycode=event.keyCode;
	}else{
		keycode=e.which;
	}
	key=String.fromCharCode(keycode).toLowerCase();
	if(key=='x'){}
}

function listenKey(){
	document.onkeypress=getKey;
}

function showSelectBoxes(){
	selects=document.getElementsByTagName("select");
	for(i=0;i!=selects.length;i++){
		selects[i].style.visibility="visible";
	}
}

function hideSelectBoxes(){
	selects=document.getElementsByTagName("select");
	for(i=0;i!=selects.length;i++){
		selects[i].style.visibility="hidden";
	}
}

function pause(numberMillis){
	var now=new Date();
	var exitTime=now.getTime()+numberMillis;
	while(true){now=new Date();
	if(now.getTime()>exitTime)
	return;
	}
}

function initLightbox(){
	myLightbox=new Lightbox();
}

Event.observe(window,'load',initLightbox,false);