/*
 -----------------------------------------------------------------------------------



	Litebox v1.0

	A combined effort between detrate and gannon

	07/03/06



	Source edited from Lightbox v2.02

	by Lokesh Dhakar - http:www.huddletogether.com



	For more information on this script, visit:

	http:doknowevil.net/litebox



	Licensed under the Creative Commons Attribution 2.5 License - http:creativecommons.org/licenses/by/2.5/

	

	Credit also due to those who have helped, inspired, and made their code available to the public.

	Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.org), Thomas Fuchs(mir.aculo.us), and others.



 -----------------------------------------------------------------------------------





	Configuration


*/
var fileLoadingImage = WEB_ROOT_images + "loading_background.gif";		

var fileBottomNavCloseImage = WEB_ROOT_images + "closelabel.gif";

var resizeSpeed = 6;	/* controls the speed of the image resizing (1=slowest and 10=fastest) */

var borderSize = 10;	/*if you adjust the padding in the CSS, you will need to update this variable*/




var imageArray = new Array;

var activeImage;

var lightBoxImageWidth;

var lightBoxImageHeight;

if(resizeSpeed > 10){ resizeSpeed = 10;}

if(resizeSpeed < 1){ resizeSpeed = 1;}

resizeDuration = (11 - resizeSpeed) * 100;




Object.extend(Element, {

	hide: function() {

		for (var i = 0; i < arguments.length; i++) {

			var element = $(arguments[i]);

			element.style.display = 'none';

		}

	},

	show: function() {

		for (var i = 0; i < arguments.length; i++) {

			var element = $(arguments[i]);

			element.style.display = '';

		}

	},

	getWidth: function(element) {

	   	element = $(element);

	   	return element.offsetWidth; 

	},

	setWidth: function(element,w) {

	   	element = $(element);

		element.style.width = w +"px";

	},

	getHeight: function(element) {

		element = $(element);

		return element.offsetHeight;

	},

	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; 

	},

	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()

	 Constructor runs on completion of the DOM loading. Loops through anchor tags looking for 

	 'lightbox' references and applies onclick events to appropriate links. The 2nd section of

	 the function inserts html at the bottom of the page which is used to display the shadow 

	 overlay and the image container.

	
*/
	initialize: function() {

		if (!document.getElementsByTagName){ return; }

		var anchors = document.getElementsByTagName('a');



		/* loop through all anchor tags */

		for (var i=0; i<anchors.length; i++){

			var anchor = anchors[i];

			

			var relAttribute = String(anchor.getAttribute('rel'));

			

			/* use the string.match() method to catch 'lightbox' references in the rel attribute */

			if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){

				anchor.onclick = function () {myLightbox.start(this); return false;}

			}

		}



		var objBody = document.getElementsByTagName("body").item(0);

		if(!document.getElementById('overlay'))

		{

			var objOverlay = document.createElement("div");

			objOverlay.setAttribute('id','overlay');

			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');

/*---for top close button----------*/

		var objTopNav = document.createElement("div");

		objTopNav.setAttribute('id','topNav');

		objTopNav.setAttribute('align','right');

		objImageContainer.appendChild(objTopNav);

	

		var objTopNavCloseLink = document.createElement("a");

		objTopNavCloseLink.setAttribute('id','TopNavClose');

		objTopNavCloseLink.setAttribute('href','javascript:void(0)');

		objTopNavCloseLink.onclick = function() { myLightbox.end(); return false; }

		objTopNav.appendChild(objTopNavCloseLink);

	

		var objTopNavCloseImage = document.createElement("img");

		objTopNavCloseImage.setAttribute('id','idImgTopClose');

		objTopNavCloseImage.setAttribute('alt','Close');

		objTopNavCloseImage.setAttribute('src', fileBottomNavCloseImage);

		objTopNavCloseLink.appendChild(objTopNavCloseImage);	

/*-------------	*/

			

			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','javascript:void(0)');

			objHoverNav.appendChild(objPrevLink);

			

			var objNextLink = document.createElement("a");

			objNextLink.setAttribute('id','nextLink');

			objNextLink.setAttribute('href','javascript:void(0)');

			objHoverNav.appendChild(objNextLink);

		

			var objLoading = document.createElement("div");

			objLoading.setAttribute('id','loading');

			objImageContainer.appendChild(objLoading);

		

			var objLoadingLink = document.createElement("a");

			objLoadingLink.setAttribute('id','loadingLink');

			objLoadingLink.setAttribute('href','javascript:void(0)');

			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);



/*for pic tagging start div*/

			var objImageTags = document.createElement("div");

			objImageTags.setAttribute('id','imageTags');

			objImageData.appendChild(objImageTags);

/*for pic tagging end div		*/



			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','javascript:void(0)');

			objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }

			objBottomNav.appendChild(objBottomNavCloseLink);

		

			var objBottomNavCloseImage = document.createElement("img");

			objBottomNavCloseImage.setAttribute('id','idImgBottomClose');

			objBottomNavCloseImage.setAttribute('alt','Close');

			objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);

			objBottomNavCloseLink.appendChild(objBottomNavCloseImage);

			

			overlayEffect = new fx.Opacity(objOverlay, { duration: 300 });	

			overlayEffect.hide();

			imageEffect = new fx.Opacity(objLightboxImage, { duration: 350, onComplete: function() { imageDetailsEffect.custom(0,1); }});

			imageEffect.hide();

			

			imageDetailsEffect = new fx.Opacity('imageDataContainer', { duration: 400, onComplete: function() { navEffect.custom(0,1); }}); 

			imageDetailsEffect.hide();

			

			navEffect = new fx.Opacity('hoverNav', { duration: 100 });

			navEffect.hide();

		}

	},

	/*

	

		start()

		Display overlay and lightbox. If image is part of a set, add siblings to imageArray.

	
	*/
	start: function(imageLink) {	

		hideSelectBoxes();







		/* stretch overlay to fill page and fade in */

		var arrayPageSize = getPageSize();

		Element.setHeight('overlay', arrayPageSize[1]);

		overlayEffect.custom(0,0.8);



		imageArray = [];

		imageNum = 0;		



		if (!document.getElementsByTagName){ return; }

		var anchors = document.getElementsByTagName('a');

		

		/* if image is NOT part of a set.. */

		if((imageLink.getAttribute('rel') == 'lightbox')){

			/* add single image to imageArray */

			imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));			

		} else {

		/* if image is part of a set.. */



			/* loop through anchors, find other imegesin set, and add them to imageArray */

			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++;}

		}



		/* calculate top offset for the lightbox and display */

		var arrayPageSize = getPageSize();

		var arrayPageScroll = getPageScroll();

		var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 15);



		Element.setTop('lightbox', lightboxTop);

		Element.show('lightbox');

		this.changeImage(imageNum);

/*		AjaxRequest.get({

				'url':WEB_ROOT+"ajax_pd.php?action=getIndividualPicsTagging&picname="+imageArray[imageNum][0],

				'onSuccess':function(req){ $('imageTags').innerHTML=req.responseText; }

			})*/

	},


/*
	

		changeImage()

		Hide most elements and preload image in preparation for resizing image container.

	
*/
	changeImage: function(imageNum) {



		activeImage = imageNum;	/* update global var */



		/* hide elements during transition */

		Element.show('loading');

		imageDetailsEffect.hide();

		imageEffect.hide();

		navEffect.hide();

		Element.hide('prevLink');

		Element.hide('nextLink');

		Element.hide('numberDisplay');

		imgPreloader = new Image();

		/* once image is preloaded, resize image container */

		imgPreloader.onload=function(){

			Element.setSrc('lightboxImage', imageArray[activeImage][0]);

			if(imgPreloader.width < 350) imgPreloader.width = 350
			if(imgPreloader.width > 390) imgPreloader.width = 390
			
			imgPreloader.height = lightBoxImageHeight + 40
			
			myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height);



			AjaxRequest.get({

					'url':WEB_ROOT+"ajax_pd.php?action=getIndividualPicsTagging&picname="+imageArray[activeImage][0],

					'onLoading':function(req){ $('imageTags').innerHTML='Loading...'; },

					'onSuccess':function(req){ $('imageTags').innerHTML=req.responseText; }

				})

		}

		imgPreloader.src = imageArray[activeImage][0];
	},



	resizeImageContainer: function( imgWidth, imgHeight) {



		/* get current height and width */

		this.wCur = Element.getWidth('outerImageContainer');

		this.hCur = Element.getHeight('outerImageContainer');



		/* calculate size difference between new and old image, and resize if necessary */

		wDiff = (this.wCur - borderSize * 2) - imgWidth;

		hDiff = (this.hCur - borderSize * 2) - imgHeight;

		

		/* Resize the outerImageContainer very sexy like */

		reHeight = new fx.Height('outerImageContainer', { duration: resizeDuration });

		reHeight.custom(Element.getHeight('outerImageContainer'),imgHeight+(borderSize*2)); 

		reWidth = new fx.Width('outerImageContainer', { duration: resizeDuration, onComplete: function() { imageEffect.custom(0,1); }});

		reWidth.custom(Element.getWidth('outerImageContainer'),imgWidth+(borderSize*2));



		/* if new and old image are same size and no scaling transition is necessary,  */

		/* do a quick pause to prevent image flicker. */

		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));

		Element.setWidth( 'hoverNav', imgWidth + (borderSize * 2));

		Element.setWidth('lightboxImage', lightBoxImageWidth);
		Element.setHeight('lightboxImage', lightBoxImageHeight);

		this.showImage();

	},

	

	showImage: function(){

		Element.hide('loading');

		myLightbox.updateDetails(); 

		this.preloadNeighborImages();

	},



	updateDetails: function() {



		Element.show('caption');

		Element.setInnerHTML( 'caption', imageArray[activeImage][1]);

		

		/* if image is part of set display 'Image x of x' */

		if(imageArray.length > 1){

			Element.show('numberDisplay');

			Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeImage + 1) + " of " + imageArray.length);

		}



		myLightbox.updateNav();

	},


	updateNav: function() {



		/* if not first image in set, display prev image button */

		if(activeImage != 0){

			Element.show('prevLink');

			document.getElementById('prevLink').onclick = function() {

				myLightbox.changeImage(activeImage - 1); return false;

			}

		}



		/* if not last image in set, display next image button */

		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) { /* ie */

			keycode = event.keyCode;

		} else { /* mozilla */

			keycode = e.which;

		}



		key = String.fromCharCode(keycode).toLowerCase();

		

		if((key == 'x') || (key == 'o') || (key == 'c')){	/* close lightbox */

			myLightbox.end();

		} else if(key == 'p'){	/* display previous image */

			if(activeImage != 0){

				myLightbox.disableKeyboardNav();

				myLightbox.changeImage(activeImage - 1);

			}

		} else if(key == 'n'){	/* display next image */

			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');

		imageEffect.toggle();

		overlayEffect.custom(0.8,0);

		showSelectBoxes();

		doDivFinalClosing();/*add by maneesh and used to check is their any other popup like ajax window or not and this function is present in ajax_pd.js file .*/

	}

}




function getPageScroll(){



	var yScroll;



	if (self.pageYOffset) {

		yScroll = self.pageYOffset;

	} else if (document.documentElement && document.documentElement.scrollTop){	 /* Explorer 6 Strict*/

		yScroll = document.documentElement.scrollTop;

	} else if (document.body) {/* all other Explorers*/

		yScroll = document.body.scrollTop;

	}



	arrayPageScroll = new Array('',yScroll) 

	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){ /* all but Explorer Mac */

		xScroll = document.body.scrollWidth;

		yScroll = document.body.scrollHeight;

	} else { /* Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari */

		xScroll = document.body.offsetWidth;

		yScroll = document.body.offsetHeight;

	}

	

	var windowWidth, windowHeight;

	if (self.innerHeight) {	/* all except Explorer */

		windowWidth = self.innerWidth;

		windowHeight = self.innerHeight;

	} else if (document.documentElement && document.documentElement.clientHeight) { /* Explorer 6 Strict Mode */

		windowWidth = document.documentElement.clientWidth;

		windowHeight = document.documentElement.clientHeight;

	} else if (document.body) { /* other Explorers */

		windowWidth = document.body.clientWidth;

		windowHeight = document.body.clientHeight;

	}	

	

	/* for small pages with total height less then height of the viewport */

	if(yScroll < windowHeight){

		pageHeight = windowHeight;

	} else { 

		pageHeight = yScroll;

	}



	/* for small pages with total width less then width of the viewport */

	if(xScroll < windowWidth){	

		pageWidth = windowWidth;

	} else {

		pageWidth = xScroll;

	}

	pageWidth = pageWidth - 20;
	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 

	return arrayPageSize;

}




function getKey(e){

	if (e == null) { /* ie */

		keycode = event.keyCode;

	} else { /* mozilla */

		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(orgImgWidth, orgImgHeight) { lightBoxImageWidth = orgImgWidth; lightBoxImageHeight = orgImgHeight; myLightbox = new Lightbox(); };

