
/*--------------------------------------------------------------*/
//Gallery Setup Variables
var xmlToImport = "gallery.xml"; //Defines XML document to load.  Links from HTML pages reference
var holderID = "galleryPanel";  //Defines the <div> id the gallery will be loaded into
var maxThumbs = 10;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
//Image Viewer Setup Variables
var iv_imageBox = "image" //Div in which full size image will be populated.
var iv_titleBox = "titleBox" //Div in which the title of the gallery will populated.
var iv_captionBox = "captionBox" //Div in which the caption will be populated.
var iv_navBack = "navBack" //Div in which the "previous" control will be populated.
var iv_navNext = "navNext" 
var iv_navPageNum = "navPageNum"
/*--------------------------------------------------------------*/

var xmlDoc;
var reqXML;
var currentGallery;
var currentImage = null;
var currentPage = null;
var totalGalleries;
var totalImages;
var remainingImages;
var totalPages=1;
var imageViewer;

function parseQuery() {
	var query = window.location.search.substring(1);
	if(query ==""){
		//Enter code for default gallery generation
		currentGallery = "default";
	}else{
		var variables = query.split('&');
		for (i=0; i<variables.length; i++){
			parseValue(variables, i);
		}
		if(currentPage==null){
			currentPage =0;	
		}
	}
	//importXML();
	loadXMLDoc(xmlToImport)
}

function parseValue(stringAr, value){
	var variable = stringAr[value].split('=');
	var variableName = variable[0];
	var variableValue = variable[1];
	switch(variableName){
		case "gallery":
			currentGallery = variableValue*1;	
		break;
		case "page":
			currentPage = variableValue*1;
		break;
		case "image":
			currentImage = variableValue*1;
		break;
		
	}
	
}

/*
function importXML(){
	if (document.implementation && document.implementation.createDocument)
		{
			xmlDoc=document.implementation.createDocument("","",null);
			xmlDoc.onload=galleryLoaderSwitch;			

		}
	else if (window.ActiveXObject)
		{
			xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async="false";
			xmlDoc.onreadystatechange = function () {
				if (xmlDoc.readyState == 4) galleryLoaderSwitch();
			};
			
		}
	else
		{
			alert('Your browser can\'t handle this script');
			return;
		}
		xmlDoc.load(xmlToImport);
}
*/


function loadXMLDoc(url) {
	reqXML = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			reqXML = new XMLHttpRequest();
        } catch(e) {
			reqXML = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	reqXML = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		reqXML = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		reqXML = false;
        	}
		}
    }
	if(reqXML) {
		reqXML.onreadystatechange = processReqChange;
		reqXML.open("GET", url, true);
		reqXML.send("");
	}
}
function processReqChange() {
	 if (reqXML.readyState == 4) {
			xmlDoc = reqXML.responseXML;
			galleryLoaderSwitch();
    }
}

function galleryLoaderSwitch(){
	if (currentGallery =="default"){
		loadGalleriesDefault();
	}else if(currentImage!=null){
		imageViewLoader(currentGallery, currentImage);
	}else{
		loadGallery(currentGallery);
	}
}

function evaluateImageArraySize(imgAr){
		while(imgAr>maxThumbs){
				imgAr-=maxThumbs
				totalPages++;
		}
		remainingImages = imgAr;

}
function generatePageNav(g){
	var pageNavMarkup ="<tr><td class='pageNav' colspan='2'>";
	 pageNavMarkup +="<span class='fltLeft'><a href='gallery.html'><< Back to All Galleries</a></span>";
	if(totalPages>1){
		pageNavMarkup+="<span class='fltRight'>Page:&nbsp;&nbsp;"
		if(currentPage>0){
			pageNavMarkup+= "<a href='gallery.html?gallery="+g+"&page="+(currentPage-1)+"' target='_self'>&lt;&lt;</a>&nbsp;";
		}else{
			pageNavMarkup+= "<a class='invisibleLink' href='gallery.html?gallery="+g+"&page="+(currentPage-1)+"' target='_self'>&lt;&lt;</a>&nbsp;";
		}
		for(p=0; p<totalPages; p++){
			if (p==currentPage){
				pageNavMarkup+= "&nbsp;"+(p+1)+"&nbsp;";	
			}else{
				pageNavMarkup+= "&nbsp;<a href='gallery.html?gallery="+g+"&page="+p+"' target='_self'>"+(p+1)+"</a>&nbsp;";
			}
			
		}
		if(currentPage<totalPages-1){
			pageNavMarkup+= "<a href='gallery.html?gallery="+g+"&page="+(currentPage+1)+"' target='_self'>&gt;&gt;</a>&nbsp;";
		}else{
			pageNavMarkup+= "<a class='invisibleLink' href='gallery.html?gallery="+g+"&page="+(currentPage+1)+"' target='_self'>&gt;&gt;</a>&nbsp;";
		}
		pageNavMarkup+="</span>";
	}
	pageNavMarkup+="</td></tr>";
	
	return pageNavMarkup;
}
function generateImageNumbering(){
	if(currentPage>=totalPages-1){
		var imgNumMarkup = "<tr><td colspan='2' class='pageNav'>Images "+(currentPage*maxThumbs+1)+" - "+(currentPage*maxThumbs+remainingImages)+"</td></tr>";
	}else{
		var imgNumMarkup = "<tr><td colspan='2' class='pageNav'>Images "+(currentPage*maxThumbs+1)+" - "+(currentPage*maxThumbs+maxThumbs)+"</td></tr>";
	}
	return imgNumMarkup
}
function loadGallery(i){	
	var gallery = createGalleryObject(i);	
	evaluateImageArraySize(gallery.imgAr.length);
	var pageNavMarkup = generatePageNav(i);
	var imgNumMarkup = generateImageNumbering();
	var holderDiv = document.getElementById(holderID);
	holderDiv.innerHTML += "<div id='gallery"+i+"' class='gallery'></div>";
	var galleryDiv = document.getElementById("gallery"+i);	
	
	var markup = "<table class='gallery'>"
	markup += "<tr><th colspan='2'>"+gallery.title+"</th></tr>";
	markup += "<tr ><td class='galleryDesc' colspan='2'><b>Date: </b>"+gallery.date+"<br/><b>Location: </b>"+gallery.location+"<br/><br/>"+gallery.desc+"</td></tr>";
	markup += pageNavMarkup;
	markup += imgNumMarkup;
	for(j=(maxThumbs*currentPage); j<(Math.min(gallery.imgAr.length,(maxThumbs*currentPage+maxThumbs))) ; j++){	
		var galleryImage = createGalleryImage(gallery, j);
		var imageCaption = createImageCaption(gallery, j);
		var rowClass;
		if(isEven(j)){
			rowClass = "evenRow"
		}else{
			rowClass = "oddRow"	
		}
		markup += "<tr class='"+rowClass+"'><td class='thumbnail'><a href='javascript: openImageViewer("+i+","+j+");'><img src='"+gallery.dir+"/t_"+galleryImage+"' alt='"+imageCaption+"' /><img class='magIcon' src='images/magnify.gif' alt='"+imageCaption+"' /></a></td><td>"+imageCaption+"</td></tr>";
	}
	markup += imgNumMarkup;
	markup += pageNavMarkup;
	markup += "</table>";
	
	galleryDiv.innerHTML = markup;
}
function isEven(num){
	if((num % 2) == 1){
		return false;
	}else{
		return true;	
	}
}
function loadAllGalleries(){
	var totalGalleries = xmlDoc.getElementsByTagName("gallery").length;
	for (i=0; i<totalGalleries; i++){
		loadGallery(i);		
	}
}
function loadGalleriesDefault(){
	var totalGalleries = xmlDoc.getElementsByTagName("gallery").length;
	for (i=0; i<totalGalleries; i++){
		var gallery = createGalleryObject(i);
		var holderDiv = document.getElementById(holderID);
		holderDiv.innerHTML += "<div id='gallery"+i+"' class='gallery'></div>";	 
		var galleryDiv = document.getElementById("gallery"+i);
		var markup = "<table class='gallery'>";
			markup += "<tr><th colspan='2'>"+gallery.title+"</th></tr>";
			markup += "<tr><td class='thumbnail'><a href='gallery.html?gallery="+i+"' target='_self'><img src='"+gallery.dir+"/"+gallery.rep+"' alt='"+gallery.desc+"' /></a></td><td><b>Date: </b>"+gallery.date+"<br/><b>Location: </b>"+gallery.location+"<br/><br/>"+gallery.desc+"</td></tr>";
			markup += "<tr ><td colspan='2' class='pageNav'>Total Images: "+gallery.imgAr.length+"</td></tr>";
			markup += "</table>";
		galleryDiv.innerHTML = markup;
	}
	holderDiv.innerHTML += "<div style='clear:both'></div>";
}

function imageViewLoader(gal, img){
	var gallery = createGalleryObject(gal);
	var galleryImage = createGalleryImage(gallery, img);
	var imageCaption = createImageCaption(gallery, img);
	var imageBox = document.getElementById(iv_imageBox);
	imageBox.innerHTML = "<img src='"+gallery.dir+"/"+galleryImage+"' alt='"+imageCaption+"' />"
	var titleBox = document.getElementById(iv_titleBox);
	titleBox.innerHTML = gallery.title;
	var captionBox = document.getElementById(iv_captionBox);
	captionBox.innerHTML = imageCaption;
	var navBack = document.getElementById(iv_navBack);
	if((img-1)>=0){
		navBack.innerHTML += "<a href='image_viewer.html?gallery="+gal+"&image="+(img-1)+"'>&lt; Back</a>";
	}
	var navPageNum = document.getElementById(iv_navPageNum);
	navPageNum.innerHTML += " "+(img+1)+" of "+gallery.imgAr.length+" ";
	var navNext = document.getElementById(iv_navNext);
	
	if((img+1)<gallery.imgAr.length){
		navNext.innerHTML += "<a href='image_viewer.html?gallery="+gal+"&image="+(img+1)+"'>Next &gt;</a>";	
	}
}
function createGalleryObject(value){
	var galleryNode = xmlDoc.getElementsByTagName("gallery")[value];
	var galleryObj = new galleryObject();
	galleryObj.id = galleryNode.getAttribute("id");
	galleryObj.title = galleryNode.getElementsByTagName("title")[0].firstChild.nodeValue;
	galleryObj.date = galleryNode.getElementsByTagName("date")[0].firstChild.nodeValue;
	galleryObj.location = galleryNode.getElementsByTagName("location")[0].firstChild.nodeValue;
	galleryObj.desc = galleryNode.getElementsByTagName("description")[0].childNodes[0].nodeValue;
	//alert(galleryNode.getElementsByTagName("description")[0].childNodes[0].firstChild.nodeValue);
	galleryObj.dir = galleryNode.getElementsByTagName("directory")[0].firstChild.nodeValue;
	galleryObj.imgAr = galleryNode.getElementsByTagName("images")[0].getElementsByTagName("image");
	galleryObj.rep = galleryNode.getElementsByTagName("galleryrep")[0].firstChild.nodeValue;
	return galleryObj;
}
function createGalleryImage(gallery, value){
	var galleryImage = gallery.imgAr[value].getElementsByTagName("file")[0].firstChild.nodeValue
	return galleryImage;
}
function createImageCaption(gallery, value){
	var imageCaption = gallery.imgAr[value].getElementsByTagName("caption")[0].firstChild.nodeValue
	return imageCaption;
}

function galleryObject(){
	this.id = new Number();
	this.title = new String();
	this.date = new String();
	this.location = new String();
	this.desc = new String();
	this.dir = new String();
	this.imgAr = new Array();
	this.galleryRep = new String();
}	


function openImageViewer(gallery, image){
	if(imageViewer && imageViewer.open && !imageViewer.closed){
		imageViewer.location.href = "image_viewer.html?gallery="+gallery+"&image="+image;
	}else{
		imageViewer = window.open("image_viewer.html?gallery="+gallery+"&image="+image,'imageViewer','width=600,height=550,scrollbars=0,location=no,statusbar=0,menubar=0,resizable=0')
	}
	imageViewer.focus();
}



function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}


addLoadEvent(parseQuery);

