// Ajax Gallery
// my global xmlhttprequest variable, this is so i can cancel/overwrite any current requests if i make a new one
var requester;
var _timer;
var fade_counter = null;
var fade_status;
var loaded = false;
var new_src;
var clickable = true;
var faded = false;
var alt = "";
var title = "";

var galleryViewer = 
{
	/* ====================================================================================================
	/* */
	init: function()
	{
		if (document.getElementById("gallery"))
		{
			var galleryHolder = document.getElementById("gallery");
		}
		else if (document.getElementById("gallery_sb"))
		{
			var galleryHolder = document.getElementById("gallery_sb");
		}
		else
		{
			return;
		}
		
		var thumbnails = galleryHolder.getElementsByTagName("a");
		
		for (var i = 0; i < thumbnails.length; i++)
		{
			Core.addEventListener(thumbnails[i], "click", galleryViewer.clickListener);
		}
		
	},
	
	/* ====================================================================================================
	/* */
	fadeOut: function()
	{	
		fade_status = "fading";
		if (document.getElementById("enlarged_img") && !faded)
		{
			var object = document.getElementById("enlarged_img").style;
			var opacity = fade_counter * 10;
			object.opacity = (opacity / 100);
			object.MozOpacity = (opacity / 100);
			object.KhtmlOpacity = (opacity / 100);
			object.filter = "alpha(opacity=" + opacity + ")";
		}
		if (fade_counter != 0 && !faded)
		{
			setTimeout(galleryViewer.fadeOut, 10);
		}
		else
		{
			var enlarged = document.getElementById("enlarged");
			if (!loaded){enlarged.style.background = "url(/images/loading.gif) no-repeat center 75px";}
			faded = true;
			fade_status = null;
		}
		fade_counter--;
	},
	
	/* ====================================================================================================
	/* */
	fadeIn: function()
	{
		
		fade_status = "fading";
		var object = document.getElementById("enlarged_img").style;
		var opacity = fade_counter * 10;
		object.opacity = (opacity / 100);
		object.MozOpacity = (opacity / 100);
		object.KhtmlOpacity = (opacity / 100);
		object.filter = "alpha(opacity=" + opacity + ")";
		
		if (fade_counter != 10)
		{
			setTimeout(galleryViewer.fadeIn, 20);
		}
		else
		{
			fade_status = null;
			faded = false;
			clickable = true;
		}
		fade_counter++;
	},
	
	/* ====================================================================================================
	/* */
	checkStatus: function(whichFade,checkCounter)
	{
		if (fade_status != null)
		{
			if (checkCounter < 20)
			{
				checkCounter++;
				setTimeout(function(){galleryViewer.checkStatus(whichFade, checkCounter);}, 200);
			}
			else
			{
				document.location.reload();
			}
		}
		else
		{
			if (whichFade == "out")
			{

					fade_counter = 10;
					galleryViewer.fadeOut();

			}
			else if (whichFade == "in")
			{	
				// all the setTimeouts are to slow the process a bit so it doesn't look choppy
				setTimeout(function(){
						var enlarged = document.getElementById("enlarged");
						enlarged.style.background = "none"; // remove loading gif
							setTimeout(function(){
							var enlarged_img = document.getElementById("enlarged_img");
							enlarged_img.parentNode.removeChild(enlarged_img); // delete old img
							},10);
								setTimeout(function(){
								var enlarged = document.getElementById("enlarged");
								var newImg = document.createElement("img"); // create new
								newImg.src = new_src;
								newImg.alt = alt;
								newImg.title = title;
								newImg.id = "enlarged_img";
								newImg.style.opacity = 0;
								newImg.style.MozOpacity = 0;
								newImg.style.KhtmlOpacity = 0;
								newImg.style.filter = "alpha(opacity=" + 0 + ")";
								enlarged.appendChild(newImg); // append new
								},10);
									setTimeout(function(){
									fade_counter = 0;
									galleryViewer.fadeIn();
									},50);
				},10);	
			}
		}
	},
	
	/* ====================================================================================================
	/* */
	writeError: function(errorMsg)
	{
		alert(errorMsg);
	},
	
	/* ====================================================================================================
	/* */
	clickListener: function(event)
	{	
		Core.preventDefault(event);
		if (clickable)
		{
			clickable = false;
			clearTimeout(_timer);
			//if (requester){alert();}
			//if (requester){requester.abort();}
			//requester.abort();
			loaded = false;
			// Create the XMLHttpRequest Object
			try
			{
				requester = new XMLHttpRequest();
			}
			catch(error)
			{
				try
				{
					requester = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch(error)
				{
					requester = null;
				}
			}
			// end create request
			
			if (requester != null)
			{
				new_src = this.href;
				
				alt = this.firstChild.alt;
				title = this.firstChild.title;
				var thumbnail = this;
				var enlarged = document.getElementById("enlarged");
				var enlarged_img = document.getElementById("enlarged_img");
				
				galleryViewer.checkStatus("out",0);
				//setTimeout(function(){clickable = true;},500);
				
				// Set timout for contacting server
				_timer = setTimeout(function()
					{
						requester.abort();
						galleryViewer.writeError("No response from server. Please try again.");
					}, 13000);
				
				requester.open("GET", new_src, true);
	
				requester.onreadystatechange = function()
				{
					if (requester.readyState == 4)
					{
						clearTimeout(_timer);
						if (requester.status == 200 || requester.status == 304)
						{
							// =====================================================================
							
							loaded = true;
							galleryViewer.checkStatus("in",0);
	
							// =====================================================================
						}
						else
						{
							alert("not found");
						}
					}
				};
				requester.send(null);
				
			}
			else
			{
				// no ajax
			}
		}
	}
}

Core.start(galleryViewer);