function initGalleriesScroll(galleryId) {
	var container = new scrollingObject('imagecontainer'+galleryId, 'imageviewer'+galleryId, 'imagetable'+galleryId, 'galleriesloader'+galleryId);
	container.setUpScrollControls('scrollbuttons'+galleryId);	
}

function initGalleryScroll() {
	var container = new scrollingObject('imagecontainer', 'imageviewer', 'imagetable', 'galleryloader');
	container.setUpScrollControls('scrollbuttons');
}

function initGalleriesPage(passArgs, xmlDoc) {
	var totalGperP = 5;
	var contentArea = passArgs[0];
	var galleryStart = parseInt(passArgs[1]);
//	var pageLoaded = false;
//	while (!pageLoaded) {
//		pageLoaded = pollContentSimple("galleries-end", false);
//	}
	
	var xmlGalleries = xmlDoc.getElementsByTagName("gallery");
	var prevGalleryStart = galleryStart - totalGperP;
	var nextGalleryStart = xmlGalleries.length <= (totalGperP+galleryStart) ? galleryStart : galleryStart + totalGperP;
	var galleryEnd = xmlGalleries.length <= (totalGperP+galleryStart) ? xmlGalleries.length : nextGalleryStart;

	//set the gallery nav left and right buttons
	var leftNavCont = getElementSafe("left-nav-container");
	var rightNavCont = getElementSafe("right-nav-container");
	var lnHref = leftNavCont.getElementsByTagName("a")[0]
	var rnHref = rightNavCont.getElementsByTagName("a")[0]
	var hrefPrefix = "galleries.shtml?startPos=";
	
	if (prevGalleryStart < 0) leftNavCont.style.visibility = "hidden";
	if (nextGalleryStart < galleryEnd) rightNavCont.style.visibility = "hidden";
	if (prevGalleryStart >= 0) {
		lnHref.href = hrefPrefix + prevGalleryStart;
		leftNavCont.style.visibility = "visible";
	}
	if (nextGalleryStart >= galleryEnd) {
		rnHref.href = hrefPrefix + nextGalleryStart;
		rightNavCont.style.visibility = "visible";
	}
	
	var origDiv = getElementSafe(contentArea);
	if (origDiv.innerHTML != "") {
		for (i=galleryStart; i<=galleryEnd-1; i++) {
			var galleryRef = xmlGalleries[i].getElementsByTagName("ref-title")[0].firstChild.nodeValue;
			var galleryXML = "/xml/gallery-" + galleryRef + ".xml";
			var passArgs = new Array();
			passArgs[0] = contentArea;
			passArgs[1] = galleryRef;
			passArgs[2] = i-galleryStart;
			passArgs[3] = (i == (xmlGalleries.length-1)) ? true: false;
			loadXML(galleryXML, initGalleries, passArgs);
		}
	}
}

function initGalleries(passArgs, galleryXML) {
//	var pageLoaded = false;
//	while (!pageLoaded) {
//		pageLoaded = pollContentSimple("galleries-end", false);
//	}
	//get back all a hrefs and img tags. check for the parentnode id before adding stuff dragged in from galleryXML, then iterate over the gallerydiv and replace ? with the loop number
	var contentArea = passArgs[0];
	var galleryRef = passArgs[1];
	var galleryCounter = passArgs[2];
	var lastGallery = passArgs[3];
	galleryCounter = galleryCounter+1;
	
	var origDiv = getElementSafe(contentArea);
	if (origDiv.innerHTML != "") {
		var galleryDiv = getElementSafe("galleries-x")
		var galleryName = galleryXML.getElementsByTagName("name")[0];
		var galleryImages = galleryXML.getElementsByTagName("image");

		var newGallery = galleryDiv.cloneNode(true);
		newGallery.id = "galleries-" + galleryCounter;
		
		var linkTags = newGallery.getElementsByTagName("a");
		for (i=0; i<linkTags.length; i++) {
			if (linkTags[i].parentNode.id == "galleries-title") {
				linkTags[i].href = "gallery.shtml?name=" + galleryRef;
				linkTags[i].innerHTML = galleryName.firstChild.nodeValue.toLowerCase() + "<span>Click to visit the gallery</span>";
			}
		}

		var imageTable = newGallery.getElementsByTagName("table")[0];
		imageTable.id = imageTable.id.replace("?", galleryCounter);
		var tableBody = imageTable.getElementsByTagName("tbody")[0];
		var rowTemplate = tableBody.getElementsByTagName("tr")[0];
		var imageInfoHidden = getElementSafe("image-info-always-hidden");
		var bottomBar = getElementSafe("bottom-bar-template");

		for (i=0; i<galleryImages.length; i++) {
			var newRow = rowTemplate.cloneNode(true);			
			
			var imgSrc = galleryImages[i].getElementsByTagName("src")[0].firstChild.nodeValue;
			var imgTitle = galleryImages[i].getElementsByTagName("title")[0].firstChild.nodeValue;
			var imgName = imgSrc.slice(imgSrc.lastIndexOf("/")+1);
			var imgDetails = galleryImages[i].getElementsByTagName("detail");

			var ahref = newRow.getElementsByTagName("a")[0];
			ahref.href = cleanupHash(window.location.href) + "&" + imgName;
			var imgTag = newRow.getElementsByTagName("img")[0];
			imgTag.src = imgSrc;
			imgTag.alt = imgTitle + " (click for larger image)";
			imgTag.title = imgTitle  + " (click for larger image)";
			tableBody.appendChild(newRow);
			
			for (j=0; j<imgDetails.length; j++) {
				var imgDetailTitle = imgDetails[j].getAttribute("title");
				var imgDetailInfo;
				if (imgDetailTitle == "DESCRIPTION:") {
					imgDetailInfo = bottomBar.cloneNode(true);
					imgDetailInfo.id = "bottom-bar-" + imgName;
					var infoPara = imgDetailInfo.getElementsByTagName("p")[0];
					infoPara.innerHTML = "<span class='p-white'>" + imgTitle + "</span><br/>" + imgDetails[j].firstChild.nodeValue;
					imageInfoHidden.appendChild(imgDetailInfo);
				}
			}			
		}
		//remove template row
		tableBody.removeChild(rowTemplate);

		//iterate and remove ? in ids replacing with galleryCounter
		var galleryDivs = newGallery.getElementsByTagName("div");
		for (i=0; i<galleryDivs.length; i++) {
			if (galleryDivs[i].id.indexOf("?") > -1) {
				galleryDivs[i].id = galleryDivs[i].id.replace("?",galleryCounter);
			}
		}
		var galleryContainer = getElementSafe("galleries-container");
		galleryContainer.appendChild(newGallery);
		
		initGalleriesScroll(galleryCounter);
	}
}

function initGalleryPage(contentArea, xmlDoc) {
	var pageLoaded = false;
	while (!pageLoaded) {
		pageLoaded = pollContentSimple("gallery-end", false);
	}

//	pollContent("gallery-end", true, false);
	
	var xmlIntro = xmlDoc.getElementsByTagName("intro");
	var xmlImages = xmlDoc.getElementsByTagName("image");
	
	var firstImgElement;
	
	var galleryTitle = xmlIntro[0].getElementsByTagName("name")[0].firstChild.nodeValue;
	
	var optionPopupDiv = getElementSafe("option-popup");
	optionPopupDiv.style.visibility = "hidden";

	
	var origDiv = getElementSafe(contentArea);
	if (origDiv.innerHTML != "") {
		// intro section
		var introDiv = getElementSafe("gallery-intro");
		var introHeadings = introDiv.getElementsByTagName("h1");
		for (i=0; i<introHeadings.length; i++) {
			if (introHeadings[i].className == "p-pink") {
				introHeadings[i].innerHTML = xmlIntro[0].getElementsByTagName("footer")[0].firstChild.nodeValue;
			} else {
				var introSpans = introHeadings[i].getElementsByTagName("span");
				for (j=0; j<introSpans.length; j++) {
					if (introSpans[j].className == "") {
						introSpans[j].innerHTML = "&nbsp;" + xmlIntro[0].getElementsByTagName("description")[0].firstChild.nodeValue;
					} else {
						introSpans[j].innerHTML = galleryTitle;
					}
				}
			}
		}
		//scrolling images section
		var imageTable = getElementSafe("imagetable");
		var tableBody = imageTable.getElementsByTagName("tbody")[0];
		var rowTemplate = getElementSafe("scroll-row-template");

		for (i=0; i<xmlImages.length; i++) {
			var newRow = rowTemplate.cloneNode(true);			
			
			var imgSrc = xmlImages[i].getElementsByTagName("src")[0].firstChild.nodeValue;
			var imgTitle = xmlImages[i].getElementsByTagName("title")[0].firstChild.nodeValue;
			var imgName = imgSrc.slice(imgSrc.lastIndexOf("/")+1);

			var ahref = newRow.getElementsByTagName("a")[0];
			var wl = window.location;
			ahref.href = "#" + imgName;
			var imgTag = newRow.getElementsByTagName("img")[0];
			imgTag.src = imgSrc;
			imgTag.alt = imgTitle;
			imgTag.title = imgTitle;
			
			if (i==0) firstImgElement = ahref;

			tableBody.appendChild(newRow);
		}
		//remove template row
		tableBody.removeChild(rowTemplate);
		
		//image detail section - 
		var imageDetailHidden = getElementSafe("image-detail-always-hidden");
		var imageInfoBar = getElementSafe("image-infobar-template");
		var imageOptionBar = getElementSafe("image-optionbar-template");

		for (i=0; i<xmlImages.length; i++) {
			var newInfoBar = imageInfoBar.cloneNode(true);
			var newOptionBar = imageOptionBar.cloneNode(true);
			var infoParas = newInfoBar.getElementsByTagName("p");
			
			var imgSrc = xmlImages[i].getElementsByTagName("src")[0].firstChild.nodeValue;
			var imgName = imgSrc.slice(imgSrc.lastIndexOf("/")+1);
			var imgTitle = xmlImages[i].getElementsByTagName("title")[0].firstChild.nodeValue;
			var imgDetails = xmlImages[i].getElementsByTagName("detail");
			var imgOptions = xmlImages[i].getElementsByTagName("option");
			
			newInfoBar.id = "image-infobar-" + imgName;

			var titlePara = getTagByIdWithinList(infoParas, "gallery-image-title");
			titlePara.innerHTML = imgTitle;
			var detailShortHeading = getTagByIdWithinList(infoParas, "gallery-image-detail-short-H");
			var detailShortInfo = getTagByIdWithinList(infoParas, "gallery-image-detail-short-I");
			var detailLongHeading = getTagByIdWithinList(infoParas, "gallery-image-detail-long-H");
			var detailLongInfo = getTagByIdWithinList(infoParas, "gallery-image-detail-long-I");
			
			for (j=0; j<imgDetails.length; j++) {
				var imgDetailType = imgDetails[j].getAttribute("type");
				var imgDetailHeading,imgDetailInfo;
				if (imgDetailType == "short") {
					imgDetailHeading = detailShortHeading.cloneNode(true);
					imgDetailInfo = detailShortInfo.cloneNode(true);
				} else {
					imgDetailHeading = detailLongHeading.cloneNode(true);
					imgDetailInfo = detailLongInfo.cloneNode(true);
				}				
				imgDetailHeading.id = "";
				imgDetailInfo.id = "";
				imgDetailHeading.innerHTML = imgDetails[j].getAttribute("title");
				imgDetailInfo.innerHTML = imgDetails[j].firstChild.nodeValue;
				newInfoBar.appendChild(imgDetailHeading);
				newInfoBar.appendChild(imgDetailInfo);
			}
			
			detailShortHeading.style.display = "none";
			detailShortInfo.style.display = "none";
			detailLongHeading.style.display = "none";
			detailLongInfo.style.display = "none";

			imageDetailHidden.appendChild(newInfoBar);
			
			if (imgOptions.length>0) {
				newOptionBar.id = "image-optionbar-" +imgName;
				var optionTable = newOptionBar.getElementsByTagName("table")[0];			
				var optionTableBody = optionTable.getElementsByTagName("tbody")[0];
				var optionDetail = optionTableBody.getElementsByTagName("tr")[0]

				for (k=0; k<imgOptions.length; k++) {
					var newOptionRow = optionDetail.cloneNode(true);
					var optionAhref = newOptionRow.getElementsByTagName("a")[0];
					var optionImgTag = newOptionRow.getElementsByTagName("img")[0];
					var optionTitle;
					
					var imgOptionType = imgOptions[k].getAttribute("type");
					optionTitle = imgOptionType.toLowerCase();
					optionImgTag.src = "/images/gallery/" + optionTitle + "-icon.png";
					optionImgTag.alt = imgName + ":" + optionTitle;
					optionImgTag.title = imgName + ":" + optionTitle;
					optionAhref.href = "#" + optionTitle;
					optionTableBody.appendChild(newOptionRow);

					var detailDivTemplate = getElementSafe("optionbar-template");
					var detailDiv = detailDivTemplate.cloneNode(true);
					detailDiv.id = "optionbar-" + optionTitle;
					var optionItemTable = detailDiv.getElementsByTagName("table")[0];
					var optionItemTableBody = optionItemTable.getElementsByTagName("tbody")[0]
					var optionParas = optionItemTableBody.getElementsByTagName("tr");
					
					var imgOptionItems = imgOptions[k].getElementsByTagName("item");
					var optionItemHeader, optionItemValue, tempHeader, tempValue, itemCell;
					
					for (l=0; l<optionParas.length; l++) {
						itemCell = optionParas[l].getElementsByTagName("td");
						switch (itemCell[0].className) {
							case "p-white":
								itemCell[0].innerHTML = optionTitle.toFirstUpperCase();
								break;
							case "no-break":
								optionItemHeader = optionParas[l];
								break;
							default:
								optionItemValue = optionParas[l];
						}
					}

					for (m=0; m<imgOptionItems.length; m++) {
						var imgOptionItemType = imgOptionItems[m].getAttribute("type");
						if (imgOptionItemType == "single") {
							//spacer row
							optionItemTableBody.appendChild(optionItemValue.cloneNode(true));
							tempHeader = optionItemHeader.cloneNode(true);
							tempHeader.firstChild.innerHTML = imgOptionItems[m].getAttribute("heading").toUpperCase() + ":";
							tempHeader.firstChild.colSpan = 2;
							tempHeader.removeChild[1];
							tempValue = optionItemValue.cloneNode(true);
							tempValue.firstChild.innerHTML = imgOptionItems[m].firstChild.nodeValue;
							tempValue.firstChild.colSpan = 2;
							tempValue.removeChild[1];
							optionItemTableBody.appendChild(tempHeader);
							optionItemTableBody.appendChild(tempValue);
						} else if (imgOptionItemType == "list") {
							if (m == 0) {
								optionItemTableBody.appendChild(optionItemValue.cloneNode(true));
								tempHeader = optionItemHeader.cloneNode(true);
								tempHeader.firstChild.innerHTML = imgOptionItems[m].getAttribute("heading").toUpperCase() + ":";
								tempHeader.lastChild.innerHTML = imgOptionItems[m].firstChild.nodeValue.toUpperCase() + ":";
								optionItemTableBody.appendChild(tempHeader);
							} else {
								tempValue = optionItemValue.cloneNode(true);
								tempValue.firstChild.innerHTML = imgOptionItems[m].getAttribute("heading");
								tempValue.lastChild.innerHTML = imgOptionItems[m].firstChild.nodeValue;
								tempValue.firstChild.style.paddingRight = "30px";
								optionItemTableBody.appendChild(tempValue);
							}
						}							
						tempHeader = null;
						tempValue = null;
					}
					optionItemTableBody.removeChild(optionItemHeader);
					optionItemTableBody.removeChild(optionItemValue);
					newOptionBar.appendChild(detailDiv);
				}
				optionTableBody.removeChild(optionDetail);
				imageDetailHidden.appendChild(newOptionBar);
			}
		}		
		initGalleryScroll();
		replaceDetailImage(firstImgElement, true);
	}
}

function getTagByIdWithinList(elementList, elementId) {
	for (z=0; z<elementList.length; z++) {
		if (elementList[z].id == elementId) {
			return elementList[z];
		}
	}
	return null;
}

