/*	Lightbox JS: Fullsize Image Overlays 	by Lokesh Dhakar - http://www.huddletogether.com	For more information on this script, visit:	http://huddletogether.com/projects/lightbox/	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/	(basically, do anything you want, just leave my name and link)		Modified by Greg Smith to add the capability of displaying .flv files (with size encoded into filename or in query string)	Modified by Greg Smith to add the capability of displaying arbitrary .php files (with size optionally encoded into filename or in query string), using a_get(url) AJAX function	Modified by Greg Smith to allow calling showLightbox(param) programmatically with param as an object ref OR as a simple href 		Table of Contents	-----------------	Configuration		Functions	- getPageScroll()	- getPageSize()	- pause()	- getKey()	- listenKey()	- showLightbox()	- hideLightbox()	- initLightbox()	- addLoadEvent()		Function Calls	- addLoadEvent(initLightbox)*///// Configuration//// If you would like to use a custom loading image or close button reference them in the next two lines.var loadingImage = 'images/loading.gif';		var closeButton = 'images/close.gif';		//// getPageScroll()// Returns array with x,y page scroll values.// Core code from - quirksmode.org//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;}//// getPageSize()// Returns array with page width, height and window width, height// Core code from - quirksmode.org// Edit for Firefox by pHaez//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;	}	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 	return arrayPageSize;}//// pause(numberMillis)// Pauses code execution for specified time. Uses busy code, not good.// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602//function pause(numberMillis) {	var now = new Date();	var exitTime = now.getTime() + numberMillis;	while (true) {		now = new Date();		if (now.getTime() > exitTime)			return;	}}//// getKey(key)// Gets keycode. If 'x' is pressed then it hides the lightbox.//function getKey(e) {	if (e == null) { // ie		keycode = event.keyCode;	} else { // mozilla		keycode = e.which;	}	key = String.fromCharCode(keycode).toLowerCase();		if(key == 'x'){ hideLightbox(); }}//// listenKey()//function listenKey () {	document.onkeypress = getKey; }	//// showLightbox() // the included parameter can be a link <a> object element, or just the href for the file of interest// Preloads images. Places new (image file)/(flv video player)/(ajax file) in lightbox then centers and displays.//function showLightbox(thisLinkObj) {														//alert("showLightbox(), this href is *" + thisLinkObj.href + "*");			if (!thisLinkObj.href) {																//alert("the parameter passed in as thisLinkObj has no href attribute");		var the_href	= thisLinkObj;		var thisLinkObj = document.createElement("a");										//alert("new <a> element created as thisLinkObj");		thisLinkObj.setAttribute('href',the_href);											//alert("href " + the_href + " assigned to element thisLinkObj");	} else {		if (thisLinkObj.href.indexOf("?")!=-1) {			var href_pts	= thisLinkObj.href.split("?");			var q_str		= href_pts[1];													//alert("this link had an href with a query string: " + q_str);			var q_str_pts	= q_str.split("&");			for (i=0; i<q_str_pts.length; i++) {				if (q_str_pts[i].indexOf("lid=")!=-1) {					var parm_pts	= q_str_pts[i].split("=");					var the_lid		= parm_pts[1];											//alert("this link had an lid of " + the_lid);					var jmp_to		= "groups/jacks.php?action=click&lid=" + the_lid;					var recorded	= a_get(jmp_to);										//alert(recorded);				}			}		}	}		// prep objects	var objOverlay = document.getElementById('overlay');										var objLightbox = document.getElementById('lightbox');										var objCaption = document.getElementById('lightboxCaption');								var objImage = document.getElementById('lightboxImage');									var objLoadingImage = document.getElementById('loadingImage');								var objLightboxDetails = document.getElementById('lightboxDetails');							var arrayPageSize = getPageSize();	var arrayPageScroll = getPageScroll();	// center loadingImage if it exists	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';	}	// set height of Overlay to take up whole page and show	objOverlay.style.height = (arrayPageSize[1] + 'px');	objOverlay.style.display = 'block';	var sz_code		= false;	var fileAddr	= thisLinkObj.href;														//alert ("fileAddr is " + fileAddr);														if (fileAddr.indexOf("?")!=-1) {																var queryParts	= fileAddr.split("?");		noQ_Addr		= queryParts[0];															q_str			= queryParts[1];		if (q_str.indexOf("wxh=")!=-1) {			qpts	= q_str.split("wxh=");			sz_code	= qpts[1].substring(0,7);												//alert ("sz_code is " + sz_code);		}	} else {		noQ_Addr	= fileAddr;	}		var fileParts	= noQ_Addr.split(".");														var fileExt		= fileParts[fileParts.length-1];												var b4Ext		= fileParts[fileParts.length-2];											var fileDisp	= b4Ext.substring(b4Ext.length-7);										//what assumption(s) are we making here? - that the div size in the format wwwxhhh is immediately before the .flv ...											var fileChk	= 	b4Ext.substring(b4Ext.length-8);												if (sz_code) {																			//alert("there is a valid wwwxhhh size encoded into the query string");		var dispArr		= sz_code.split("x"); 		var div_wd		= dispArr[0];																	var div_ht		= dispArr[1];														//alert("the video/div width is " + div_wd + "px, and the height is " + div_ht + "px");													} else if (fileChk.indexOf("_")!=-1 && fileChk.indexOf("x")!=-1) {						//alert("there is a valid wwwxhhh size encoded into the filename");		var dispArr		= fileDisp.split("x"); 		var div_wd		= dispArr[0];																	var div_ht		= dispArr[1];														//alert("the video/div width is " + div_wd + "px, and the height is " + div_ht + "px");													} else {																				//alert("there is NOT a valid wwwxhhh size encoded into the query string or the filename");		var div_wd		= 400;																	var div_ht		= 400;																//alert("the video/div width is " + div_wd + "px, and the height is " + div_ht + "px");													}		var fileParts2	= noQ_Addr.split("/");	var fileName	= fileParts2[fileParts2.length-1];												if (fileExt!="flv" && fileExt!="php" && fileExt!="htm" && fileExt!="html" && fileExt!="mp3") {	///// do this more elegantly...																		document.getElementById("lightboxImage").style.display	= "block";		imgPreload = new Image();															// preload image		imgPreload.onload=function(){			objImage.src = thisLinkObj.href;																					// center lightbox and make sure that the top and left values are not negative			// and the image placed outside the viewport			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(thisLinkObj.getAttribute('title')){															objCaption.style.display = 'block';				//objCaption.style.width = imgPreload.width + 'px';				objCaption.innerHTML = thisLinkObj.getAttribute('title');								} else {				objCaption.style.display = 'none';			}																														// A small pause between the image loading and displaying is required with IE,			// this prevents the previous image displaying for a short burst causing flicker.			if (navigator.appVersion.indexOf("MSIE")!=-1){				pause(250);			} 				if (objLoadingImage) {	objLoadingImage.style.display = 'none'; }												// Hide select boxes as they will 'peek' through the image in IE			selects = document.getElementsByTagName("select");															for (i = 0; i != selects.length; i++) {					selects[i].style.visibility = "hidden";			}				var the_title				= thisLinkObj.getAttribute('title');															objCaption.innerHTML 		= the_title;																	objLightbox.style.display 	= 'block';																			// After image is loaded, update the overlay height as the new image might have			// increased the overall page height.			arrayPageSize = getPageSize();																				objOverlay.style.height = (arrayPageSize[1] + 'px');																	// Check for 'x' keypress			listenKey();				return false;																							}			imgPreload.src = thisLinkObj.href;																			//thisLinkObj.setAttribute('title','Click image to close');	} else {																										document.getElementById("lightboxImage").style.display	= "none";		var divCode	= "";		var divBgnd	= "";				if (fileExt=="flv") { 																							divBgnd		= "#FFFFFF";			//div_wd	= div_wd*1.25;																//multiply flv size here if desired...														//div_ht	= div_ht*1.25;															divCode		= 	'<object data="includes/37-flvplayer.swf?video=../video/' + fileName + '"';			divCode		+=	'type="application/x-shockwave-flash" width="' + div_wd + '" height="' + div_ht + '" >';			divCode		+=	'<param name="movie" value="includes/37-flvplayer.swf?video=../video/' + fileName + '" />';			divCode		+=	'</object>';																				div_htx		= div_ht*1 + 6;		} else {																										divBgnd		= "#FFFFFF";																					divCode		= a_get(fileAddr);			div_htx		= div_ht*1;		}						var nuDiv 					= document.createElement("div");																										nuDiv.setAttribute('id','lbc_div');																												nuDiv.style.backgroundColor	= divBgnd;																							//		nuDiv.style.width			= div_wd + "px";																						//		nuDiv.style.height			= div_ht + "px";				nuDiv.style.width			= div_wd + "px";																								nuDiv.style.height			= div_htx + "px";				nuDiv.style.overflow		= "auto";		nuDiv.innerHTML	= divCode;																									var	litebxDiv	= document.getElementById("lightbox");		var	detailsDiv	= document.getElementById("lightboxDetails");				litebxDiv.insertBefore(nuDiv, detailsDiv);		litebxDiv.setAttribute('title','Click outside window to close');				// center lightbox and make sure that the top and left values are not negative, and the image placed outside the viewport		var lightboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 35 - div_ht) / 2);				var lightboxLeft = ((arrayPageSize[0] - 20 - div_wd) / 2);											objLightbox.style.top = (lightboxTop < 0) ? "0px" : lightboxTop + "px";						objLightbox.style.left = (lightboxLeft < 0) ? "0px" : lightboxLeft + "px";					objLightboxDetails.style.width = div_wd + 'px';														if(thisLinkObj.getAttribute('title')){			objCaption.style.display = 'block';															//objCaption.style.width = imgPreload.width + 'px';			objCaption.innerHTML = thisLinkObj.getAttribute('title');								} else {			objCaption.style.display = 'none';														}/*				// A small pause between the image loading and displaying is required with IE,		// this prevents the previous image displaying for a short burst causing flicker.		if (navigator.appVersion.indexOf("MSIE")!=-1){			pause(250);																				} */				if (objLoadingImage) {	objLoadingImage.style.display = 'none'; }							// Hide select boxes as they will 'peek' through the image in IE		selects = document.getElementsByTagName("select");									        for (i = 0; i != selects.length; i++) {                selects[i].style.visibility = "hidden";										        }			objLightbox.style.display = 'block';														// After image is loaded, update the overlay height as the new image might have increased the overall page height. ????		arrayPageSize = getPageSize();																objOverlay.style.height = (arrayPageSize[1] + 'px');												// Check for 'x' keypress		listenKey();																				return false;																				} // end of flv or not if/else} // end of showLightBox functionfunction hideLightbox() {	objOverlay 	= document.getElementById('overlay');	objLightbox = document.getElementById('lightbox');	objOverlay.style.display 	= 'none';	objLightbox.style.display 	= 'none';		// remove lbc_div to cleanup after video or msg (also stops video playback in ie...)	var	litebxDiv	= document.getElementById("lightbox");	if (document.getElementById("lbc_div")) {								var lbcDivObj	= document.getElementById("lbc_div");		litebxDiv.removeChild(lbcDivObj);	}		// make select boxes visible	selects = document.getElementsByTagName("select");    for (i = 0; i != selects.length; i++) {		selects[i].style.visibility = "visible";	}	// disable keypress listener	document.onkeypress = '';}//// initLightbox()// Function runs on window load, going through link tags looking for rel="lightbox".// These links receive onclick events that enable the lightbox display for their targets.// The function also inserts html markup at the top of the page which will be used as a// container for the overlay pattern and the inline image.//function initLightbox() {																		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];		if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "lightbox")){			anchor.onclick = function () {showLightbox(this); return false;}		}	}	// the rest of this code inserts html at the top of the page that looks like this:	//	// <div id="overlay">	//		<a href="#" id="obj_link" onclick="hideLightbox(); return false;"><img id="loadingImage" /></a>	//	</div>	// <div id="lightbox">	//		<a href="#" onclick="hideLightbox(); return false;" title="Click anywhere to close image">	//			<img id="closeButton" />			//			<img id="lightboxImage" />	//		</a>	//		<div id="lightboxDetails">	//			<div id="lightboxCaption"></div>	//			<div id="keyboardMsg"></div>	//		</div>	// </div>		var objBody = document.getElementsByTagName("body").item(0);		// create overlay div and hardcode some functional styles (aesthetic styles are in CSS file)	var objOverlay = document.createElement("div");	objOverlay.setAttribute('id','overlay');	objOverlay.onclick = function () {hideLightbox(); return false;}	objOverlay.style.display = 'none';	objOverlay.style.position = 'absolute';	objOverlay.style.top = '0';	objOverlay.style.left = '0';	objOverlay.style.zIndex = '90'; 	objOverlay.style.width = '100%';	objBody.insertBefore(objOverlay, objBody.firstChild);		var arrayPageSize = getPageSize();	var arrayPageScroll = getPageScroll();	// preload and create loader image	var imgPreloader = new Image();		// if loader image found, create link to hide lightbox and create loadingimage	imgPreloader.onload=function(){		var objLoadingImageLink = document.createElement("a");		objLoadingImageLink.setAttribute('href','#');		objLoadingImageLink.onclick = function () {hideLightbox(); return false;}		objOverlay.appendChild(objLoadingImageLink);				var objLoadingImage = document.createElement("img");		objLoadingImage.src = loadingImage;		objLoadingImage.setAttribute('id','loadingImage');		objLoadingImage.style.position = 'absolute';		objLoadingImage.style.zIndex = '150';		objLoadingImageLink.appendChild(objLoadingImage);		imgPreloader.onload=function(){};	//	clear onLoad, as IE will flip out w/animated gifs		return false;	}	imgPreloader.src = loadingImage;	// create lightbox div, same note about styles as above	var objLightbox = document.createElement("div");	objLightbox.setAttribute('id','lightbox');	objLightbox.style.display = 'none';	objLightbox.style.position = 'absolute';	objLightbox.style.zIndex = '100';	objLightbox.style.padding = '3px';	objLightbox.style.backgroundColor = '#EEEEEE';	objBody.insertBefore(objLightbox, objOverlay.nextSibling);		// create link	var objLink = document.createElement("a");	objLink.setAttribute('id','obj_link');	objLink.setAttribute('href','#');	objLink.setAttribute('title','Click to close');	objLink.onclick = function () {hideLightbox(); return false;}	objLightbox.appendChild(objLink);	/*	// preload and create close button image	var imgPreloadCloseButton = new Image();	// if close button image found, 	imgPreloadCloseButton.onload=function(){		var objCloseButton = document.createElement("img");		objCloseButton.src = closeButton;		objCloseButton.setAttribute('id','closeButton');		objCloseButton.style.position = 'absolute';		objCloseButton.style.zIndex = '200';		objLink.appendChild(objCloseButton);		return false;	}	imgPreloadCloseButton.src = closeButton;	*/	// create image	var objImage = document.createElement("img");	objImage.setAttribute('id','lightboxImage');	objLink.appendChild(objImage);		// create details div, a container for the caption and keyboard message	var objLightboxDetails = document.createElement("div");	objLightboxDetails.setAttribute('id','lightboxDetails');	objLightbox.appendChild(objLightboxDetails);	// create caption	var objCaption = document.createElement("div");	objCaption.setAttribute('id','lightboxCaption');	objCaption.style.display = 'none';	objLightboxDetails.appendChild(objCaption);	// create keyboard message	var objKeyboardMsg = document.createElement("div");	objKeyboardMsg.setAttribute('id','keyboardMsg');//	objKeyboardMsg.innerHTML = 'click anywhere or press <a href="#" onclick="hideLightbox(); return false;"><kbd>x</kbd></a> to close';	objKeyboardMsg.innerHTML = '<span style="font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10px;">click outside window or press the <big><kbd>"x"</kbd></big> key to close</span>';	objLightboxDetails.appendChild(objKeyboardMsg);}function a_get(url) {				var HR 		= false;																if (window.XMLHttpRequest) { // Mozilla, Safari,...										HR = new XMLHttpRequest();															if (HR.overrideMimeType) {			HR.overrideMimeType('text/html');		   }	} else if (window.ActiveXObject) { // IE		try {			HR = new ActiveXObject("Msxml2.XMLHTTP");										} catch (e) {			try {				HR = new ActiveXObject("Microsoft.XMLHTTP");									} catch (e) {}		}	}	if (!HR) {		alert("Unfortunately your browser doesn't support this feature.");		return false;	}	HR.open('GET', url, false);													HR.send(null);																	return HR.responseText;}//// addLoadEvent()// Adds event to window.onload without overwriting currently assigned onload functions.// Function found at Simon Willison's weblog - http://simon.incutio.com///function addLoadEvent(func){		var oldonload = window.onload;	if (typeof window.onload != 'function'){    	window.onload = func;	} else {		window.onload = function(){		oldonload();		func();		}	}}addLoadEvent(initLightbox);	// run initLightbox onLoad