/*
 * Thickbox 3.1 - One Box To Rule Them All.
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2007 cody lindley
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
*/
		  
var tb_pathToImage = "/Images/icons/loadingAnimation.gif";		  
var pathToGalleries = "/Images/Galleries";

//Album Data
var haveAlbum = false;
var AlbumName = '';
var XMLAlbumData = null; 
var photos = null; 
var thumbURLs = null; 
var photoURLs = null; 
var titles = null; 
var sources = null; 
var markets = null; 
var descriptions = null; 
var sourceURLs = null; 
var listingids = null; 
var regionids = null; 
var categoryids = null; 


//on page load call tb_init
$(document).ready(function(){
	tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox
	imgLoader = new Image();// preload image
	imgLoader.src = tb_pathToImage;
});

//add thickbox to href & area elements that have a class of .thickbox
function tb_init(domChunk){    
	$(domChunk).click(function(){  
		var a = this.href || this.alt;
		var g = this.rel || false;
		tb_show(a,g);
		this.blur();
		return false;
	});
}

// shoudl be moved to a proper Ajax library one day
function createAjaxXMLObject()
{
	var AjaxXMLObject = false; 	
	// Try IE
	try { AjaxXMLObject = new ActiveXObject("MSXML2.XMLHTTP"); }
	catch (not_MSXML2) {
		try { AjaxXMLObject = new ActiveXObject("Microsoft.XMLHTTP"); }
		catch (not_Microsoft) { AlbumFile = false; }
	}	
	// If not IE, assume Mozilla
	if ( !AjaxXMLObject && window.XMLHttpRequest) {
		AjaxXMLObject = new XMLHttpRequest();
		AjaxXMLObject.overrideMimeType("text/xml");
	}
	return AjaxXMLObject;
}

function getAlbum(id)
{	
	var AlbumFileURL = pathToGalleries+'/Albums/'+id+'.xml';
	var AlbumFile = createAjaxXMLObject();
	if (AlbumFile) { 
		AlbumFile.open("GET",AlbumFileURL,false);	
		AlbumFile.send(null);
		if (AlbumFile.status == 200) {		
			// get Album Data
			XMLAlbumData = AlbumFile.responseXML; 
			photos = XMLAlbumData.getElementsByTagName("photo");			
			thumbURLs = XMLAlbumData.getElementsByTagName("thumbURL");		
			photoURLs = XMLAlbumData.getElementsByTagName("photoURL");
			titles = XMLAlbumData.getElementsByTagName("title");		
			sources = XMLAlbumData.getElementsByTagName("source");		
			markets = XMLAlbumData.getElementsByTagName("market");		
			descriptions = XMLAlbumData.getElementsByTagName("description");		
			sourceURLs = XMLAlbumData.getElementsByTagName("sourceURL");		
			listingids = XMLAlbumData.getElementsByTagName("listingid");		
			regionids = XMLAlbumData.getElementsByTagName("regionid");		
			categoryids = XMLAlbumData.getElementsByTagName("categoryid");
			return true;
		} 
	}
	return false;
}


// Show Image
function tb_show(url, imageGroup) {//function called when the user clicks on a thickbox link

	try {
		if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
			$("body","html").css({height: "100%", width: "100%"});
			$("html").css("overflow","hidden");
			if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6
				$("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");
				$("#TB_overlay").click(tb_remove);
			}
		}else{//all others
			if(document.getElementById("TB_overlay") === null){
				$("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>");
				$("#TB_overlay").click(tb_remove);
			}
		}
		
		if(tb_detectMacXFF()){
			$("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash
		}
		else{
			$("#TB_overlay").addClass("TB_overlayBG");//use background and opacity
		} 
		
		$("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");//add loader to the page
		$('#TB_load').show();//show loader
		
		var baseURL;
	   if(url.indexOf("?")!==-1){ //ff there is a query string involved
			baseURL = url.substr(0, url.indexOf("?"));
	   }else{ 
	   		baseURL = url;
	   }

	   
	   var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
	   var urlType = baseURL.toLowerCase().match(urlString);
		
		//code to show images
		if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp')
		{		
			var caption = "";
			var source = "";
			var market = "";
			var sourceurl = "";
			var listingid = "";
			var regionid = "";
			var categoryid = "";
			var description = "";
			
			var TB_PrevURL = "";
			var TB_NextURL = "";
			
			var TB_PrevHTML = "";
			var TB_NextHTML = "";
			var TB_imageCount = "";	
			
			if(imageGroup){
					
				var AlbumID = parseInt(imageGroup.replace("Album",""));
			
				if (imageGroup != AlbumName) 
					haveAlbum = getAlbum(AlbumID);
								
				if (haveAlbum) { 
					AlbumName = imageGroup;	
							
					//find this photoIndex
					for (photoIndex=0; photoIndex < photos.length; photoIndex++) 
						if (photoURLs[photoIndex].childNodes.length == 1)
							if ((url.indexOf(photoURLs[photoIndex].childNodes[0].nodeValue)) != -1)
								break;
					if (photoIndex > photos.length) photoIndex = -1 // photo not in album!
					
					//assign photo data
					if (titles[photoIndex].childNodes.length == 1)
						caption = titles[photoIndex].childNodes[0].nodeValue;
					if (photoURLs[photoIndex].childNodes.length == 1)
						url = photoURLs[photoIndex].childNodes[0].nodeValue;
					if (sources[photoIndex].childNodes.length == 1)
						source = sources[photoIndex].childNodes[0].nodeValue;	
					if (markets[photoIndex].childNodes.length == 1)
						market = markets[photoIndex].childNodes[0].nodeValue;
					if (descriptions[photoIndex].childNodes.length == 1)
						description = descriptions[photoIndex].childNodes[0].nodeValue;
					if (sourceURLs[photoIndex].childNodes.length == 1)
						sourceurl = sourceURLs[photoIndex].childNodes[0].nodeValue;
					if (listingids[photoIndex].childNodes.length == 1)
						listingid = listingids[photoIndex].childNodes[0].nodeValue;
					if (regionids[photoIndex].childNodes.length == 1)
						regionid = regionids[photoIndex].childNodes[0].nodeValue;
					if (categoryids[photoIndex].childNodes.length == 1)
						categoryid = categoryids[photoIndex].childNodes[0].nodeValue;
					TB_imageCount = "Image " + (photoIndex + 1) +" of "+ (photos.length);
												
					// assign previous photo
					if (photoIndex > 0)
						if (photoURLs[photoIndex-1].childNodes.length == 1) {
							TB_PrevURL = photoURLs[photoIndex-1].childNodes[0].nodeValue;
							TB_PrevHTML = "<span id='TB_prev'><a href='#'>&lt; Prev</a>&nbsp;&nbsp;</span>";
						}
					
					// assign next photo
					if (photoIndex < photos.length-1)
						if (photoURLs[photoIndex+1].childNodes.length == 1) {
							TB_NextURL = photoURLs[photoIndex+1].childNodes[0].nodeValue;
							TB_NextHTML = "<span id='TB_next'>&nbsp;&nbsp;<a href='#'>Next &gt;</a></span>";
						}
					
					imgPreloader = new Image();
					imgPreloader.onload = function(){	
					
						imgPreloader.onload = null;
					
						// Resizing large images
						var pagesize = tb_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	
					
						// FORM THE PAGE			
						var photo_text = '';
						TB_WIDTH = imageWidth + 30;
						TB_HEIGHT = imageHeight + 90;
					
						photo_text += ("<div id='TB_secondLine' align='center'>"+ TB_PrevHTML + TB_imageCount + TB_NextHTML +"</div>");							
						photo_text += ("<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>");	
						
						photo_text += ("<div id='TB_caption'>");
						
						photo_text += ("<strong>"+caption+"</strong>");		
						if (source != null && source != '' ) { 
							photo_text += (" (");
							if (sourceurl != null && sourceurl != '')
								photo_text += ("<a href='"+sourceurl+"' target='_blank' rel='nofollow'>");
							else if (listingid != null && listingid != '')
							{
								photo_text += ("<a onClick=\"javascript: pageTracker._trackPageview('/wedding-ideas/listingClick');\"  href='/wedding-directory/listingclick.cfm?listingid="+listingid+"&nextlistingid=-1");
								if (regionid != null && regionid != '') photo_text += ("&regionid="+regionid);
								if (categoryid != null && categoryid != '') photo_text += ("&categoryid="+categoryid);
								photo_text += ("' target='_blank' rel='nofollow'>");					
							}
							photo_text += (source);
							if ( (sourceurl != null && sourceurl != '') || (listingid != null && listingid != '')) photo_text += ("</a>");
							if (market != null && market != '') photo_text += (", "+market);
							photo_text += (") ");
						}
						if (description != null && description != '') photo_text += ("<p style='font-size: 0.9em; margin: 5px 0px;'>"+description+"</p>");
					
						photo_text += ("</div>");
					
						photo_text += ("<div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a> or Esc Key</div>"); 		
					
						$("#TB_window").append(photo_text);							
						$("#TB_closeWindowButton").click(tb_remove);			
					// Page Completed
					
					if (!(TB_PrevHTML === "")) {
						function goPrev(){
							if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev);}
							$("#TB_window").remove();
							$("body").append("<div id='TB_window'></div>");
							tb_show(TB_PrevURL, imageGroup);
							return false;	
						}
						$("#TB_prev").click(goPrev);
					}
				
					if (!(TB_NextHTML === "")) {		
						function goNext(){
							$("#TB_window").remove();
							$("body").append("<div id='TB_window'></div>");
							tb_show(TB_NextURL, imageGroup);				
							return false;	
						}
						$("#TB_next").click(goNext);									
					}
					
					document.onkeydown = function(e){ 	
						if (e == null) { // ie
							keycode = event.keyCode;
						} else { // mozilla
							keycode = e.which;
						}
						if(keycode == 27){ // close
							tb_remove();
						} 
						else if(keycode == 190){ // display previous image
							if(!(TB_NextHTML == "")){
								document.onkeydown = "";
								goNext();
							}
						} 
						else if(keycode == 188){ // display next image
							if(!(TB_PrevHTML == "")){
								document.onkeydown = "";
								goPrev();
							}
						}	
						
				}; // when the image finishes loading
				
				tb_position();
				$("#TB_load").remove();
				$("#TB_ImageOff").click(tb_remove);
				$("#TB_window").css({display:"block"}); //for safari using css instead of show
				};
				
				imgPreloader.src = url;	
					
				} // haveAlbum = true;
								
			} // if ImageGroup
		
		} // if image file (not HTML etc)

		if(!params['modal']){
			document.onkeyup = function(e){ 	
				if (e == null) { // ie
					keycode = event.keyCode;
				} else { // mozilla
					keycode = e.which;
				}
				if(keycode == 27){ // close
					tb_remove();
				}	
			};
		}
		
	} catch(e) {
		//nothing here
	}
}


//helper functions below
function tb_showIframe(){
	$("#TB_load").remove();
	$("#TB_window").css({display:"block"});
}

function tb_remove() {
 	$("#TB_imageOff").unbind("click");
	$("#TB_closeWindowButton").unbind("click");
	$("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();});
	$("#TB_load").remove();
	if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
		$("body","html").css({height: "auto", width: "auto"});
		$("html").css("overflow","");
	}
	document.onkeydown = "";
	document.onkeyup = "";
	return false;
}

function tb_position() {
$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
	if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
		$("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
	}
}

function tb_parseQuery ( query ) {
   var Params = {};
   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 tb_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 = [w,h];
	return arrayPageSize;
}

function tb_detectMacXFF() {
  var userAgent = navigator.userAgent.toLowerCase();
  if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) {
    return true;
  }
}



