var jsLightbox =
{
	loadingImage: '/_modules/mod_imageLibrary/lightbox_loading.gif',
	closeButton: '/_modules/mod_imageLibrary/lightbox_close.gif',
	prevButton: '/_modules/mod_imageLibrary/lightbox_arrowPrev.gif',
	nextButton: '/_modules/mod_imageLibrary/lightbox_arrowNext.gif',
	imageGroup: null,
	imageNumber: 0,
	imageTotal: 0,
	getPageScroll: function(){
		
		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) 
		return arrayPageScroll;
	},
	
	getPageSize: function(){
		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;
	},
	
	pause: function(ms) {
		var now = new Date();
		var exitTime = now.getTime() + ms;
		while (true) {
			now = new Date();
			if (now.getTime() > exitTime) return;
		}
	},
	
	getKey: function(e){
		if (e == null) {
			keycode = event.keyCode;
		} else {
			keycode = e.which;
		}
		key = String.fromCharCode(keycode).toLowerCase();
		
		if(key=='x' || key==String.fromCharCode(27)){ jsLightbox.hideLightbox(); }
	},
	listenKey: function() {
		document.onkeypress = jsLightbox.getKey;
	},
	
	showLightbox: function(objLink,num,total,group){
		var objOverlay = document.getElementById('jsLightbox-overlay');
		var objLightbox = document.getElementById('jsLightbox');
		var objCaption = document.getElementById('jsLightbox-caption');
		var objImage = document.getElementById('jsLightbox-image');
		var objLoadingImage = document.getElementById('jsLightbox-loadingImage');
		var objLightboxDetails = document.getElementById('jsLightbox-details');
		var objPrevImage = document.getElementById('jsLightbox-prevImage');
		var objNextImage = document.getElementById('jsLightbox-nextImage');
		
		var imgSrc = objLink.href;
		if(imgSrc.indexOf('/~thumbnail/') > -1){
			imgSrc = imgSrc.substring(imgSrc.indexOf('/~thumbnail/') + 12);
			imgSrc = imgSrc.substring(imgSrc.indexOf('/'));
		}
		
		var arrayPageSize = jsLightbox.getPageSize();
		var arrayPageScroll = jsLightbox.getPageScroll();
		
		if (total != null) jsLightbox.imageTotal = total;
		if (group != null) jsLightbox.imageGroup = group;
		jsLightbox.imageNumber = num;
		if (jsLightbox.imageNumber != null){
			objLink = document.getElementById(jsLightbox.imageGroup + jsLightbox.imageNumber);
		}
		objPrevImage.style.display = objNextImage.style.display = 'none';
		if (jsLightbox.imageNumber != null) {
			if (objPrevImage && jsLightbox.imageNumber > 1) {
				objPrevImage.style.display = 'block';
			}
			if (objNextImage && jsLightbox.imageNumber < jsLightbox.imageTotal) {
				objNextImage.style.display = 'block';
			}
		}
		
		if (objLoadingImage) {
			objLoadingImage.style.top = (arrayPageScroll[1] + ((arrayPageSize[3] - 35 - objLoadingImage.height) / 2) + 'px');
			objLoadingImage.style.left = (((arrayPageSize[0] - 20 - objLoadingImage.width) / 2) + 'px');
			objLoadingImage.style.display = 'block';
		}
		
		objOverlay.style.height = (arrayPageSize[1] + 'px');
		objOverlay.style.display = 'block';
		
		imgPreload = new Image();
		imgPreload.onload=function(){
			objImage.src = imgSrc;//objLink.href;
	
			var lightboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 35 - imgPreload.height) / 2);
			var lightboxLeft = ((arrayPageSize[0] - 20 - imgPreload.width) / 2);
			
			objLightbox.style.top = (lightboxTop < 0) ? "0px" : lightboxTop + "px";
			objLightbox.style.left = (lightboxLeft < 0) ? "0px" : lightboxLeft + "px";
	
			objLightboxDetails.style.width = imgPreload.width + 'px';
			
			if(objLink.getAttribute('title')){
				objCaption.style.display = 'block';
				objCaption.innerHTML = objLink.getAttribute('title');
			} else {
				objCaption.style.display = 'none';
			}
			
			if (navigator.appVersion.indexOf("MSIE")!=-1){
				jsLightbox.pause(250);
			} 
			
			if (objLoadingImage) {	objLoadingImage.style.display = 'none'; }
			
			selects = document.getElementsByTagName('select');
			for (i = 0; i != selects.length; i++) {
				selects[i].style.visibility = "hidden";
			}
			objLightbox.style.display = 'block';
			
			arrayPageSize = jsLightbox.getPageSize();
			objOverlay.style.height = (arrayPageSize[1] + 'px');
			
			jsLightbox.listenKey();
	
			return false;
		}
		imgPreload.src = imgSrc;//objLink.href;
	},
	
	hideLightbox: function(){
		objOverlay = document.getElementById('jsLightbox-overlay');
		objOverlay.style.display = 'none';
		objLightbox = document.getElementById('jsLightbox');
		objLightbox.style.display = 'none';
		
		selects = document.getElementsByTagName('select');
		for (i = 0; i != selects.length; i++) {
			selects[i].style.visibility = "visible";
		}
		document.onkeypress = '';
	},
	
	initLightbox: function(){
		if (!document.getElementsByTagName){ return; }
		
		var anchors = document.getElementsByTagName('a');
		for (var i=0; i<anchors.length; i++){
			var anchor = anchors[i];
			if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "lightbox")){
				anchor.onclick = function () {jsLightbox.showLightbox(this); return false;}
			}
		}
		var imgs = document.getElementsByTagName('img');
		for (var i=0; i<imgs.length; i++){
			var img = imgs[i];
			if (img.getAttribute("rel") == "lightbox"){
				img.onclick = function () {jsLightbox.showLightbox(this); return false;}
				img.style.cursor = 'pointer';
			}
		}
		
		var objBody = document.getElementsByTagName('body').item(0);
		
		var objOverlay = document.createElement('div');
			objOverlay.setAttribute('id','jsLightbox-overlay');
			objOverlay.onclick = function () {jsLightbox.hideLightbox(); return false;}
			objOverlay.style.display = 'none';
			objOverlay.style.position = 'absolute';
			objOverlay.style.top = '0';
			objOverlay.style.left = '0';
			objOverlay.style.backgroundColor = '#000';
			objOverlay.style.opacity = '0.75';
			if(document.all) objOverlay.style.filter = 'alpha(opacity=75)';
			objOverlay.style.zIndex = '32090';
		 	objOverlay.style.width = '100%';
		objBody.insertBefore(objOverlay, objBody.firstChild);
		
		var arrayPageSize = jsLightbox.getPageSize();
		var arrayPageScroll = jsLightbox.getPageScroll();
	
		var imgPreloader = new Image();
			imgPreloader.onload=function(){
				var objLoadingImageLink = document.createElement('a');
					objLoadingImageLink.setAttribute('href','#');
					objLoadingImageLink.onclick = function () {jsLightbox.hideLightbox(); return false;}
					objOverlay.appendChild(objLoadingImageLink);
				var objLoadingImage = document.createElement('img');
					objLoadingImage.src = jsLightbox.loadingImage;
					objLoadingImage.setAttribute('id','jsLightbox-loadingImage');
					objLoadingImage.style.position = 'absolute';
					objLoadingImage.style.border = 'none';
					objLoadingImage.style.zIndex = '32150';
					objLoadingImageLink.appendChild(objLoadingImage);
				imgPreloader.onload=function(){};
				return false;
			}
			imgPreloader.src = jsLightbox.loadingImage;
		
		var objLightbox = document.createElement('div');
			objLightbox.setAttribute('id','jsLightbox');
			objLightbox.style.display = 'none';
			objLightbox.style.position = 'absolute';
			objLightbox.style.backgroundColor = '#eee';
			objLightbox.style.padding = '10px';
			objLightbox.style.borderBottom = '2px solid #222';
			objLightbox.style.borderRight = '2px solid #222';
			objLightbox.style.zIndex = '32100';	
		objBody.insertBefore(objLightbox, objOverlay.nextSibling);
		
		var objLink = document.createElement('a');
			objLink.setAttribute('href','#');
			objLink.setAttribute('title','Click to close');
			objLink.onclick = function() {jsLightbox.hideLightbox(); return false;}
		objLightbox.appendChild(objLink);
		
		var imgPreloadCloseButton = new Image();
			imgPreloadCloseButton.onload=function(){
				var objCloseButton = document.createElement('img');
					objCloseButton.src = jsLightbox.closeButton;
					objCloseButton.setAttribute('id','jsLightbox-closeButton');
					objCloseButton.style.position = 'absolute';
					objCloseButton.style.top = '5px';
					objCloseButton.style.right = '5px';
					objCloseButton.style.border = 'none';
					objCloseButton.style.zIndex = '32200';
					objLink.appendChild(objCloseButton);
				return false;
			}
			imgPreloadCloseButton.src = jsLightbox.closeButton;
		
		var objImage = document.createElement('img');
			objImage.setAttribute('id','jsLightbox-image');
			objImage.style.border = 'none';
			objImage.style.clear = 'both';
		objLink.appendChild(objImage);
		
		var objPrevLink = document.createElement('a');
			objPrevLink.setAttribute('href','#');
			objPrevLink.onclick = function() {jsLightbox.hideLightbox(); jsLightbox.showLightbox(this, jsLightbox.imageNumber-1); return false;}
			objLightbox.appendChild(objPrevLink);
		var objPrevImage = document.createElement("img");
			objPrevImage.src = jsLightbox.prevButton;
			objPrevImage.setAttribute('id','jsLightbox-prevImage');
			objPrevImage.style.position = 'absolute';
			objPrevImage.style.display = 'none';
			objPrevImage.style.border = 'none';
			objPrevImage.style.top = '40%';
			objPrevImage.style.left = '2px';
			objPrevImage.style.zIndex = '32150';
			objPrevLink.appendChild(objPrevImage);
		
		var objNextLink = document.createElement('a');
			objNextLink.setAttribute('href','#');
			objNextLink.onclick = function() {jsLightbox.hideLightbox(); jsLightbox.showLightbox(this, jsLightbox.imageNumber+1); return false;}
			objLightbox.appendChild(objNextLink);
		var objNextImage = document.createElement("img");
			objNextImage.src = jsLightbox.nextButton;
			objNextImage.setAttribute('id','jsLightbox-nextImage');
			objNextImage.style.position = 'absolute';
			objNextImage.style.display = 'none';
			objNextImage.style.border = 'none';
			objNextImage.style.top = '40%';
			objNextImage.style.right = '2px';
			objNextImage.style.zIndex = '32150';
			objNextLink.appendChild(objNextImage);
		
		var objLightboxDetails = document.createElement('div');
			objLightboxDetails.setAttribute('id','jsLightbox-details');
			objLightboxDetails.style.fontSize = '1.1em';
			objLightboxDetails.style.paddingTop = '0.4em';
		objLightbox.appendChild(objLightboxDetails);
		
		var objCaption = document.createElement('div');
			objCaption.setAttribute('id','jsLightbox-caption');
			objCaption.style.display = 'none';
			objCaption.style.styleFloat = 'left';
			objCaption.style.cssFloat = 'left';
		objLightboxDetails.appendChild(objCaption);
		
		var objKeyboardMsg = document.createElement('div');
			objKeyboardMsg.setAttribute('id','jsLightbox-keyboardMsg');
			objKeyboardMsg.style.fontSize = '1.1em';
			objKeyboardMsg.style.styleFloat = 'right';
			objKeyboardMsg.style.cssFloat = 'right';
			objKeyboardMsg.innerHTML = 'press <a href="#" onclick="jsLightbox.hideLightbox(); return false;">x</a> to close';
		objLightboxDetails.appendChild(objKeyboardMsg);
	}, 
	
	init: function(func){	
		var oldonload = window.onload;
		if (typeof window.onload != 'function'){
	    	window.onload = func;
		} else {
			window.onload = function(){
			oldonload();
			func();
			}
		}
	
	}
}
jsLightbox.init(jsLightbox.initLightbox);

