/*
 * Thickbox 1.2 - One box to rule them all.
 * By Cody Lindley (http://www.codylindley.com)
 * Under an Attribution, Share Alike License
 * Thickbox is built on top of the very light weight jquery library.
 */

// Global variables to keep track of any images that are associated with a slideshow or gallery (depending on your parlance)
var imageArray = new Array();
var curImage;
var curGroup;

//on page load call TB_init
$(document).ready(TB_init);

//add thickbox to href elements that have a class of .thickbox
function TB_init(){
	$("a.thickbox").click(TB_ImgClick);
}

function TB_ImgClick(){
	var t = this.name || this.title || this.href || null;		// the caption title (first tries title, then name, then defaults to href)
	var g = this.rel || null;	// see if the image is part of a group
	TB_show(t,this.href,g);
	this.blur();
	return false;
}

// Functions for navigation,  TB_prevImage and TB_nextImage return if the index is about to go outside
// of the bounds of the array.  TB_ChangeImage also checks before it tears down the current window
// and displays the next image.
function TB_prevImage(){	
	if( curImage<=0 ) return false;
	curImage--;
	TB_ChangeImage(curImage);
	return false;
}

function TB_nextImage(){
	if( curImage==(imageArray.length-1) ) return false;
	curImage++;
	TB_ChangeImage(curImage);
	return false;
}

function TB_ChangeImage(imageIndex){
	if( imageIndex<0 || imageIndex>=imageArray.length ) return false;
	//$('#TB_window,#TB_overlay,#TB_HideSelect').remove();
	$("#TB_window").remove();
	$("body").append("<div id='TB_window'></div>");
	disableKeyboardNav();
	TB_show(imageArray[imageIndex][1],imageArray[imageIndex][0],curGroup);
	return false;
}

function TB_show(caption, url, group) {//function called when the user clicks on a thickbox link
	try {
		if( document.getElementById("TB_HideSelect") == null ) {
			$("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");
			$("#TB_overlay").click(TB_remove);
		}		
		
		$(window).scroll(TB_position);
 		
		$("#TB_HideSelect").css({display:"block"});
		TB_overlaySize();
		
		$("body").append("<div id='TB_load'><img src='../../images/thickbox/loading.gif' /></div>");
		TB_load_position();
		
		var urlString = /\.jpg|\.jpeg|\.png|\.gif|\.html|\.htm|\.php|\.cfm|\.asp|\.aspx|\.jsp|\.jst|\.rb|\.txt/g;
		var urlType = url.toLowerCase().match(urlString);
		
		// Reset the image array
		imageArray = [];		
		curImage = 0;
		curGroup = "";
		
		if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif'){//code to show images

			var imgPreloader = new Image();
			imgPreloader.onload = function(){
				
			imgPreloader.onload = null;
			
			// if there is a grouping associated with this image, group all of the images together
			// that have the same group
			if( group )
			{
				// push each group member into the array
				$("a.thickbox[@rel='"+group+"']").each(function(i){var t = this.name||this.title||this.href||null; imageArray.push(new Array(this.href,t));});
				
				// save the current group name
				curGroup = group;
				
				// truck through the imageArray to find the index of the current image
				curImage = 0;	// sanity sake
				while(curImage<imageArray.length && imageArray[curImage][0] != url) { curImage++;}
			}
				
			// Resizing large images added by Christian Montoya
			var pagesize = getPageSize();
			var x = pagesize[0] - 150;
			var y = pagesize[1] - 150;
			var imageWidth = imgPreloader.width;
			var imageHeight = imgPreloader.height;
			if (imageWidth > x) {
				imageHeight = imageHeight * (x / imageWidth); 
				imageWidth = x; 
				if (imageHeight > y) { 
					imageWidth = imageWidth * (y / imageHeight); 
					imageHeight = y; 
				}
			} else if (imageHeight > y) { 
				imageWidth = imageWidth * (y / imageHeight); 
				imageHeight = y; 
				if (imageWidth > x) { 
					imageHeight = imageHeight * (x / imageWidth); 
					imageWidth = x;
				}
			}
			// End Resizing
			
			TB_WIDTH = imageWidth + 20;
			TB_HEIGHT = imageHeight + 100;
			
			// Add the banner
			$("#TB_window").append("<div id='TB_banner'>");
			$("#TB_banner").append("<div id='TB_banlogo'>&nbsp;</div>");
			
			// Add the nav control for the close button			
			$("#TB_banner").append("<div id='TB_navCtl'></div>");
			
			// if the image is part of a group, append the slideshow control
			if( imageArray.length>1 )
			{
				// Add 30 to the height to make room for the Next & Prev buttons at the top
				TB_HEIGHT += 30;
				
				// Set up for the navigation text to know where we're at in the indices
				var navText = "Image " + (curImage+1) + " of " + imageArray.length;
				var navDiv =	"	<p>" + navText + "</p>" +
							 			 	"	<div id='TB_navDir'><a href='' title='Previous Image' id='TB_prevImg'><u>P</u>rev</a></a></div>" +
							 				"	<div id='TB_navDir'><a href='' title='Next Image' id='TB_nextImg'><u>N</u>ext</a></div>" +
							 				"  <div id='TB_closeWndBtn'><a href='' title='Close' id='TB_closeX'>X</a></div>";
				$("#TB_navCtl").append(navDiv);
				
				// add the click events for the prev / next buttons				
				$("#TB_prevImg").click(TB_prevImage);
				$("#TB_nextImg").click(TB_nextImage);
				
				// hide the corresponding button if we're at either bounds of the array
				if( 0==curImage ) $("#TB_prevImg").hide();
				if( curImage==imageArray.length-1 ) $("#TB_nextImg").hide();
			}
			else
			{
				$("#TB_navCtl").append("<div id='TB_closeWndBtn'><a href='' title='Close' id='TB_closeX'>X</a></div>");
			}
			
			// Add the click event
			$("#TB_closeX").click(TB_remove);
			
			// append the image
			$("#TB_window").append("<div id='TB_image'>");
			$("#TB_image").append("<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"'/></a>");			
			
			/*$("#TB_window").append("<div id='TB_captionWrap'>");
			
			// append the caption*/
			$("#TB_window").append("<div id='TB_caption'><p>"+caption+"</p></div>");
			
			TB_position();
			$("#TB_load").remove();
			$("#TB_ImageOff").click(TB_remove);
			$("#TB_window").show();
			}
			imgPreloader.src = url;
		}
		
		if(urlType=='.htm'||urlType=='.html'||urlType=='.php'||urlType=='.asp'||urlType=='.aspx'||urlType=='.jsp'||urlType=='.jst'||urlType=='.rb'||urlType=='.txt'||urlType=='.cfm' || (url.indexOf('TB_inline') != -1)){//code to show html pages
			
			var queryString = url.replace(/^[^\?]+\??/,'');
			var params = parseQuery( queryString );
			
			TB_WIDTH = (params['width']*1) + 30;
			TB_HEIGHT = (params['height']*1) + 40;
			ajaxContentW = TB_WIDTH - 30;
			ajaxContentH = TB_HEIGHT - 45;
			$("#TB_window").append("<div id='TB_closeAjaxWindow'><div id='TB_closeWindowButton'><a href=''><img src='../../images/thickbox/closelabel.gif'></a></div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");
			$("#TB_closeWindowButton").click(TB_remove);
			
				if(url.indexOf('TB_inline') != -1){	
					$("#TB_ajaxContent").html($('#' + params['inlineId']).html());
					TB_position();
					$("#TB_load").remove();
					$("#TB_window").slideDown();
				}else{
					$("#TB_ajaxContent").load(url, function(){
						TB_position();
						$("#TB_load").remove();
						$("#TB_window").slideDown();
					});
				}
			
		}
		
		// re-enable the keyboard navigation
		enableKeyboardNav();
		$(window).resize(TB_position);
		
	} catch(e) {		
		alert( e );
		
		// Added to account for the case where I got an error loading a page and the "Loading" GIF was displayed since 
		// the overlay window needs to be torn down since there was a problem.
		TB_remove();
	}
}

//helper functions below

function TB_remove() {
	$("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').remove();});
	$("#TB_load").remove();
	disableKeyboardNav();
	return false;
}

function TB_position() {
	var pagesize = getPageSize();	
	var arrayPageScroll = getPageScrollTop();
	
	//,height:TB_HEIGHT+"px"
	$("#TB_window").css({width:TB_WIDTH+"px",
	left: ((pagesize[0] - TB_WIDTH)/2)+"px", top: (arrayPageScroll[1] + ((pagesize[1]-TB_HEIGHT)/2))+"px" });
	TB_overlaySize();

}

function TB_overlaySize(){
	if (window.innerHeight && window.scrollMaxY) {	
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		yScroll = document.body.offsetHeight;
  	}
	$("#TB_overlay").css("height",yScroll +"px");
}

function TB_load_position() {
	var pagesize = getPageSize();
	var arrayPageScroll = getPageScrollTop();

	$("#TB_load")
	.css({left: ((pagesize[0] - 100)/2)+"px", top: (arrayPageScroll[1] + ((pagesize[1]-100)/2))+"px" })
	.css({display:"block"});
}

function parseQuery ( query ) {
   var Params = new Object ();
   if ( ! query ) return Params; // return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) continue;
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}


function getPageScrollTop(){
	var yScrolltop;
	if (self.pageYOffset) {
		yScrolltop = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScrolltop = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScrolltop = document.body.scrollTop;
	}
	arrayPageScroll = new Array('',yScrolltop) 
	return arrayPageScroll;
}

function getPageSize(){
	var de = document.documentElement;
	var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
	
	arrayPageSize = new Array(w,h) 
	return arrayPageSize;
}

/*******************************************************************************************************************
 *
 *		Keyboard Navigation functions - snaked from Lightbox v2.0 (http://www.huddletogether.com/projects/lightbox2/)
 *
 *******************************************************************************************************************/
function enableKeyboardNav(){
		document.onkeydown = keyboardAction; 
}

function disableKeyboardNav(){
		document.onkeydown = '';
}

function	keyboardAction(e){
	if (e == null) { // ie
		keycode = event.keyCode;
	} else { // mozilla
		keycode = e.which;
	}
	
	var key = String.fromCharCode(keycode).toLowerCase();
		
	if((key == 'x') || (key == 'o') || (key == 'c') || (keycode == 0x1B /*ESC*/)){  // close thickbox		
		TB_remove();
	}
	else if(key == 'p' || keycode == 0x25  /*left arrow*/ || keycode == 0x28 /*down arrow*/){	// display previous image
		//disableKeyboardNav();
		TB_prevImage();
	}
	else if(key == 'n' || keycode == 0x27 /*right arrow*/ || keycode == 0x26 /*up arrow*/){	// display next image
		//disableKeyboardNav();
		TB_nextImage();
	}
}