var currentImage;
var currentPage = 1;
var maxPages;
var xmlHttp;
var loadingImage;
var transitionType = "fade";
var transitionSpeed = "normal";

function showImage(gallery, id)
{ 
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null)
	{
		alert ("Browser does not support HTTP Request");
		return;
	} 
	var url="getimg.php";
	url=url+"?gallery="+gallery+"&id="+id;
	url=url+"&sid="+Math.random();
	xmlHttp.onreadystatechange=imageStateChanged;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function showPage(gallery, page)
{
	if (document.getElementById("gal_dropdown") != null)
	{
		document.getElementById("gal_dropdown").selectedIndex = page - 1;
	}
	if (document.getElementById("gal_textselect") != null)
	{
		var textselectsrc = "";
		for (i = 1; i <= maxPages; i++)
		{
			if (i == page)
			{
				textselectsrc += "<b>" + i + "</b>&nbsp;";
			}
			else
			{
				textselectsrc += "<a href=\"javascript:selectPage(" + gallery + ", " + i + ");\">" + i + "</a>&nbsp;";
			}
		}
		document.getElementById("gal_textselect").innerHTML= textselectsrc;
	}
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null)
	{
		alert ("Browser does not support HTTP Request");
		return;
	} 
	var url="getpage.php";
	url=url+"?gallery="+gallery+"&page="+page;
	url=url+"&sid="+Math.random();
	xmlHttp.onreadystatechange=pageStateChanged;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function imageStateChanged() 
{
	xmlDoc=xmlHttp.responseXML;
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
	{
		large_size_w = parseInt(xmlDoc.getElementsByTagName("largesizew")[0].childNodes[0].nodeValue);
		large_size_h = parseInt(xmlDoc.getElementsByTagName("largesizeh")[0].childNodes[0].nodeValue);
		var imageSrc = "";
		imageSrc +="<img src=\"" +
		xmlDoc.getElementsByTagName("image")[0].childNodes[0].nodeValue
		+ "\" ";
		imageSrc += "alt=\"" +
		xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue
		+ "\" " +
		"title=\"" +
		xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue
		+ "\" ";
		if (large_size_w)
		{
			imageSrc += "width=\"" + large_size_w + "\" ";
		}
		if (large_size_h)
		{
			imageSrc += "height=\"" + large_size_h + "\" ";
		}
		imageSrc += "border=\"0\"/>";
		if (document.getElementById("gal_largeimg2") != null)
		{
			document.getElementById("gal_largeimg2").innerHTML=imageSrc;
		}
		
		if (document.getElementById("gal_title2") != null)
		{
			document.getElementById("gal_title2").innerHTML="" +
			xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
		}
		
		if (document.getElementById("gal_descshort2") != null)
		{
			document.getElementById("gal_descshort2").innerHTML="" +
			xmlDoc.getElementsByTagName("descshort")[0].childNodes[0].nodeValue;
		}
		
		if (document.getElementById("gal_desclong2") != null)
		{
			document.getElementById("gal_desclong2").innerHTML="" +
			xmlDoc.getElementsByTagName("desclong")[0].childNodes[0].nodeValue;
		}
		if (document.getElementById("gal_largeimg") != null && document.getElementById("gal_largeimg2")  != null)
		{
			transObj("#gal_largeimg", "#gal_largeimg2", transitionType, transitionSpeed);
		}
		if (document.getElementById("gal_title") != null && document.getElementById("gal_title2") != null)
		{
			transObj("#gal_title", "#gal_title2", transitionType, transitionSpeed);
		}
		if (document.getElementById("gal_descshort") != null && document.getElementById("gal_descshort2") != null)
		{
			transObj("#gal_descshort", "#gal_descshort2", transitionType, transitionSpeed);
		}
		if (document.getElementById("gal_desclong") != null && document.getElementById("gal_desclong2") != null)
		{
			transObj("#gal_desclong", "#gal_desclong2", transitionType, transitionSpeed);
		}
	}
	else if (xmlHttp.readyState==3 || xmlHttp.readyState==2 || xmlHttp.readyState==1)
	{
		if (document.getElementById("gal_largeimg") != null)
		{
			if (document.getElementById("gal_loadingimg") == null)
			{
				document.getElementById("gal_largeimg").innerHTML+=
				"<img src=\"" +
				loadingImage
				+ "\" id=\"gal_loadingimg\" style=\"position: absolute;\" border=\"0\" />"
				var largeimg = $("#gal_largeimg");
				var largeimgchild = largeimg.children();
				var offset = largeimg.offset();
				$("#gal_loadingimg").css({
					top: (offset.top + (largeimgchild.height() / 2)),
					left: (offset.left + (largeimgchild.width() / 2))
				});
			}
		}
	}
}

function pageStateChanged() 
{
	xmlDoc=xmlHttp.responseXML;
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
	{
		var maxRows;
		var maxCols;
		var thumb_size_w;
		var thumb_size_h;
		var finishedTable = "";
		var thumb = new Array();
		maxRows = parseInt(xmlDoc.getElementsByTagName("maxrows")[0].childNodes[0].nodeValue);
		maxCols = parseInt(xmlDoc.getElementsByTagName("maxcols")[0].childNodes[0].nodeValue);
		thumb_size_w = parseInt(xmlDoc.getElementsByTagName("thumbsizew")[0].childNodes[0].nodeValue);
		thumb_size_h = parseInt(xmlDoc.getElementsByTagName("thumbsizeh")[0].childNodes[0].nodeValue);
		thumb = xmlDoc.getElementsByTagName("galthumb");
		var k = 0;
		finishedTable += "<table id=\"gal_thumbstable\" class=\"gal_thumbstable\">";
		for (var i = 0; i < maxRows; i++)
		{
			finishedTable += "<tr>";
			for (var j = 0; j < maxCols; j++)
			{
				if (k < thumb.length)
				{
					finishedTable += "<td><a href=\"javascript:selectImage(" +
					xmlDoc.getElementsByTagName("gallery")[k].childNodes[0].nodeValue
					+ "," +
					xmlDoc.getElementsByTagName("id")[k].childNodes[0].nodeValue
					+ ");\" />" +
					"<img src=\"" +
					xmlDoc.getElementsByTagName("thumb")[k].childNodes[0].nodeValue
					+ "\" " +
					"alt=\"" +
					xmlDoc.getElementsByTagName("title")[k].childNodes[0].nodeValue
					+ "\" " +
					"title=\"" +
					xmlDoc.getElementsByTagName("title")[k].childNodes[0].nodeValue
					+ "\" ";
					if (thumb_size_w)
					{
						finishedTable += "width=\"" + thumb_size_w + "\" ";
					}
					if (thumb_size_h)
					{
						finishedTable += "height=\"" + thumb_size_h + "\" ";
					}
					finishedTable += "border=\"0\"/>" +
					"</a></td>";
					k++;
				}
				else
				{
					finishedTable += "<td></td>";
				}
			}
			finishedTable += "</tr>";
		}
		finishedTable += "</table>";
		if (document.getElementById("gal_thumbs2") != null)
		{
			document.getElementById("gal_thumbs2").innerHTML=finishedTable;
		}
		if (document.getElementById("gal_thumbs") != null && document.getElementById("gal_thumbs2") != null)
		{
			transObj("#gal_thumbs", "#gal_thumbs2", transitionType, transitionSpeed);
		}
	}
	else if (xmlHttp.readyState==3 || xmlHttp.readyState==2 || xmlHttp.readyState==1)
	{
		if (document.getElementById("gal_thumbs") != null)
		{
			if (document.getElementById("gal_loadingimg_thumbs") == null)
			{
				document.getElementById("gal_thumbs").innerHTML+=
				"<img src=\"" +
				loadingImage
				+ "\" id=\"gal_loadingimg_thumbs\" style=\"position: absolute;\" border=\"0\" />"
				thumbs = $("#gal_thumbs");
				thumbschild = thumbs.children();
				offset = thumbs.offset();
				$("#gal_loadingimg_thumbs").css({
					top: (offset.top + (thumbschild.height() / 2)),
					left: (offset.left + (thumbschild.width() / 2))
				});
			}
		}
	}
}

function GetXmlHttpObject()
{
	var objXMLHttp=null

	try {
		objXMLHttp = new ActiveXObject("Msxml2.XMLHTTP"); //later IE
	} catch (e) {
		try {
			objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); //earlier IE
		} catch (e) {
			objXMLHttp = null;
		}
	}

	if (objXMLHttp==null)
	{
		objXMLHttp=new XMLHttpRequest(); //IE7, Firefox, Safari
	}
	return objXMLHttp;
}

function selectImage(gallery, id)
{
	currentImage = id;
	showImage(gallery, currentImage);
}

function selectPage(gallery, pageNum)
{
	currentPage = pageNum;
	showPage(gallery, currentPage);
}

function previousPage(gallery)
{
	if (currentPage > 1)
	{
		currentPage--;
		showPage(gallery, currentPage);
	}
	else
	{
		currentPage = maxPages;
		showPage(gallery, currentPage);
	}
}

function nextPage(gallery)
{
	if (currentPage < maxPages)
	{
		currentPage++;
		showPage(gallery, currentPage);
	}
	else
	{
		currentPage = 1;
		showPage(gallery, currentPage);
	}
}

function transObj(container, source, effect, speed)
{
	easing = null;
	if (container != null || source != null)
	{
		if (effect != null)
		{
			switch(effect){		
				// Slide Vertically
				case 'slidevert':
					$(container).animate({height:"0px"}, speed, function(){
						$(container).css('overflow','hidden'); // Fix glitchies
						$(container).html($(source).html());
						$(container).animate({
							height: $(container).children().height()
						}, speed, easing, function(){
							$(container).css('overflow','visible'); // Undo glitchy fix
						});
					});
				break;
				
				case 'slideoverlay':
					$(container).css(
					{
						'overflow': 'hidden', // Fix glitches
						'display': 'block',
						'float': 'left'
					});
					$(source).css(
					{
						'overflow': 'hidden', // Fix glitches
						'width': '0px',
						'display': 'block',
						'float': 'right'
					});
					$(container).animate(
					{
						width: "0px"
					}, speed, function(){
						$(container).css(
						{
							'overflow': 'visible',
							'display': 'none'
						});
					});
					$(source).animate(
					{
						width: $(source).children().width()
					}, speed, easing, function(){
						$(container).html(function(){
							$(container).css(
							{
								'width': '100%',
								'display': 'block'
							});
							$(source).css(
							{
								'width': '0px',
								'display': 'none'
							});
							return $(source).html();
						});
						$(source).css(
						{
							'overflow': 'visible' // Fix glitches
						});
					});
				break;
				
				// Slide Horizontally
				case 'slidehor':
					$(container).animate({width:"0px"}, speed, function(){
						$(container).css('overflow','hidden'); // Fix glitchies
						$(container).html($(source).html());
						$(container).animate({
							width: $(container).children().width()
						}, speed, easing, function(){
							$(container).css('overflow','visible'); // Undo glitchy fix
						});
					});
				break;
					
				// Fade
				case 'fade':
					$(container).animate({ opacity: 0.0 }, speed, function(){
						$(container).html($(source).html());
						$(container).animate({ opacity: 1.0 }, speed);
					});
				break;
			}
		}
		else
		{
			$(container).html($(source).html());
			//bind();
		}
	}
}