﻿//V1.06 11 January 2008 Dave Howes. Copyright C M Howes Communications 2007-2008.
var usingMap = false;
function loadMapContent() {
	usingMap = true;
	clearOverlay();
	menuHideLabelLink();
	var picMain = "<img src=\"zGraphics/clickmap.jpg\" alt=\"Location Search Clickable Map\" width=\"450\" height=\"371\" id=\"mainpic\"/>";
	var txtMain = "<h4>Map Based Photo Search</h4><p>Click a location on the map to search for photos taken close to that point. Results are listed with the nearest pictures first. ";
	txtMain += "Clicking on a search result 'thumbnail' picture will display a larger picture with its information shown here.</p>";
	var theId3 = "picbox";
	var lyrRef3 = document.getElementById(theId3);
	lyrRef3.style.width = "470px";
	lyrRef3.style.background = "#fff";
	lyrRef3.innerHTML = picMain;
	var theId2 = "textbox";
	var lyrRef2 = document.getElementById(theId2);
	txtMain += "<p>&nbsp;</p>";
	lyrRef2.innerHTML = txtMain;
	getPicPosition();
}
var picRef = "";
var picPosX = 0;
var picPosY = 0;
var pixwidth = 10;
var pixheight = 10;
var searchCoords = "&";
var peopleCoords = "&";
var searchParam = "&";
var magPicURL = "";
var peopleHotspots = false;
var showMag = false;
function getPicPosition() {
	var elementRef = document.getElementById("mainpic");
	var x = 0;
	var y = 0;
	while(elementRef) {
		x += elementRef.offsetLeft;
		y += elementRef.offsetTop;
		elementRef = elementRef.offsetParent;
	}
	picPosX = x;
	picPosY = y;
	picRef = document.getElementById("mainpic");
	if (picRef) {
		picRef.onclick = findClickPoint;
	}
}
function findClickPoint(e) {
	if (!e) {
		e = window.event;
		var positnX = e.clientX;
		var positnY = e.clientY;
	} else {
		var positnX = e.pageX;
		var positnY = e.pageY;
	}
	var picClickX = positnX - picPosX;
	var picClickY = positnY - picPosY;
	if (usingMap) {
		searchTerm = "Location Map";
		searchType = "typ=m";
		searchCoords = "&x=" + picClickX + "&y=" + picClickY;
		processGet('mapclick');
	} else {
		magPicURL = "photo-magnify.php?img=" + imageID + "&x=" + picClickX + "&y=" + picClickY;
		var magImg = "<img src=\"" + magPicURL + "\" alt=\"\" width=\"100\" height=\"100\" id=\"hcpic\" />";
		positnX = positnX - 50;
		positnY = positnY - 50;
		overlayRef.style.left = positnX + "px";
		overlayRef.style.top = positnY + "px";
		overlayRef.innerHTML = magImg;
		showMag = true;
		if (peopleHotspots) {
			searchParam = "typ=p&img=" + imageID + "&sf=" + sfID;
			peopleCoords = "&x=" + picClickX + "&y=" + picClickY;
			processGet('picclick');
		}
	}
}
var navItemID = "";
var picLabelsOn = false;
function showPicLabels() {
	lablePicURL = "hotspot-label.php?img=" + imageID;
	var labelImg = '<img src="' + lablePicURL + '&wd=' + pixwidth + '&ht=' + pixheight + '&sf=' + sfID + '" alt="" width="' + pixwidth + '" height="' + pixheight + '" border="0" id=\"hclabel\" />';
	overlay2Ref.style.left = picPosX + "px";
	overlay2Ref.style.top = picPosY + "px";
	overlay2Ref.style.width = pixwidth + "px";
	overlay2Ref.style.height = pixheight + "px";
	overlay2Ref.innerHTML = labelImg;
	picLabelsOn = true;
	var labelRef = document.getElementById("hclabel");
	labelRef.onclick = findClickPoint;
	var divRef = document.getElementById("labellink");
	divRef.style.display = "none";
	var div2Ref = document.getElementById("labelhide");
	div2Ref.style.display = "block";
}
function clearOverlay() {
	if (showMag) {
		showMag = false;
		overlayRef.style.left = "-200px";
		overlayRef.style.top = "-200px";
		overlayRef.innerHTML = "";
	}
	if (picLabelsOn) {
		picLabelsOn = false;
		overlay2Ref.style.left = "-500px";
		overlay2Ref.style.top = "-500px";
		overlay2Ref.innerHTML = "";
		if (peopleHotspots) {
			var divRef = document.getElementById("labellink");
			divRef.style.display = "block";
			var div2Ref = document.getElementById("labelhide");
			div2Ref.style.display = "none";
		}
	}
}
textRef = document.getElementById("textbox");
textRef.onclick = clearOverlay;
document.onclick = clearMenu;
function showMenu(theId) {
	if (navItemID) {
		clearMenu();
	}
	var lyrRef = document.getElementById(theId);
	lyrRef.style.display = "block";
	navItemID = theId;
}
function clearMenu() {
	var lyrRef = document.getElementById(navItemID);
	if (lyrRef) {
		lyrRef.style.display = "none";
	}
}
var righthDisplayID = "";
var prevRightDispID = "";
var infoBoxShowing = false;
function loadRightContent(contID) {
	clearRightContent();
	var lyrRef = document.getElementById(contID);
	lyrRef.style.display = "block";
	righthDisplayID = contID;
}
function clearRightContent() {
	if (righthDisplayID) {
		var lyrRef = document.getElementById(righthDisplayID);
		lyrRef.style.display = "none";
	}
}
function menuShowLabelLink() {
	var divRef = document.getElementById("labellink");
	divRef.style.display = "block";
	var div2Ref = document.getElementById("labelhide");
	div2Ref.style.display = "none";
}
function menuHideLabelLink() {
	var divRef = document.getElementById("labellink");
	divRef.style.display = "none";
	var div2Ref = document.getElementById("labelhide");
	div2Ref.style.display = "none";
}
function clearPicSpotInfo() {
	if (prevRightDispID) {
		loadRightContent(prevRightDispID);
		infoBoxShowing = false;
	}
}
var xmlHttp = createXmlHttpRequestObject();
function createXmlHttpRequestObject() {
	try {
		xmlHttp = new XMLHttpRequest();
	} catch(e) {
		try {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch(e) {
			xmlHttp = false;
		}
	}
	if (!xmlHttp) {
		alert("Error creating the XMLHttpRequest object.");
	} else {
		return xmlHttp;
	}
}
var searchType = "k";
var searchTerm = "";
var searchBatch = "&";
var searchCount = "&";
var imageID = "";
var sfID = "";
var sysErrorMsg = false;
var batchNo = 0;
var countNo = 0;
var batchSize = 4;
var displayNow = false;
function processGet(requestType) {
	if (sysErrorMsg) {
		sysErrorMsg = false;
		var mssg = "";
		var theId = "thumbsbox";
		var lyrRef = document.getElementById(theId);
		lyrRef.innerHTML = mssg;
	}
	if (requestType == "srch") {
		var repPattern = /\+/g;
		var searchKwd = searchTerm.replace(repPattern, "AND");
		var serverURL = "photo-search.php?" + searchType + "&kwd=" + searchKwd;
		batchNo = 0;
	} else if (requestType == "nop") {
		if (searchType == "typ=m") {
			var serverURL = "photo-search.php?" + searchType + searchCoords + searchBatch + searchCount;
		} else {
			var repPattern = /\+/g;
			var searchKwd = searchTerm.replace(repPattern, "AND");
			var serverURL = "photo-search.php?" + searchType + "&kwd=" + searchKwd + searchBatch + searchCount;
		}
	} else if (requestType == "loadpic") {
		var serverURL = "photo-data.php?img=" + imageID;
	} else if (requestType == "mapclick") {
		var serverURL = "photo-search.php?" + searchType + searchCoords;
		batchNo = 0;
	} else if (requestType == "picclick") {
		var serverURL = "photo-hotspots.php?" + searchParam + peopleCoords;
	}
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
		xmlHttp.open("GET", serverURL, true);
		xmlHttp.onreadystatechange = handleResponse;
		xmlHttp.send(null);
	} else {
		setTimeout("processGet(requestType)", 1000);
	}
}
function handleResponse() {
	if (xmlHttp.readyState == 4) {
		if (xmlHttp.status == 200) {
			var xmlResponse = xmlHttp.responseXML;
			var xmlDocumentElement = xmlResponse.documentElement;
			var statusArray = xmlDocumentElement.getElementsByTagName("status");
			var dataStatus = statusArray[0].firstChild.data;
			if (dataStatus == "SearchDone") {
				var countArray = xmlDocumentElement.getElementsByTagName("count");
				countNo = countArray[0].firstChild.nodeValue;
				var picidArray = xmlDocumentElement.getElementsByTagName("picid");
				var titleArray = xmlDocumentElement.getElementsByTagName("title");
				var textArray = xmlDocumentElement.getElementsByTagName("text");
				var displayBatch = batchNo;
				displayBatch++ ;
				var numLetters = "th";
				if (displayBatch == 1) {
					numLetters = "st";
				} else if (displayBatch == 2) {
					numLetters = "nd";
				} else if (displayBatch == 3) {
					numLetters = "rd";
				}
				var mssg = "<p class=\"spacer1\">&nbsp;</p><h4 class=\"search1\">Search: " + searchTerm + "</h4>";
				if (countNo == 0) {
					mssg += "<p><strong>Results: no matches found</strong></p>";
				} else if (countNo == 1) {
					mssg += "<p><strong>Results: 1 match found</strong></p>";
					var dispNowID = picidArray[0].firstChild.data;
					var displayOK = true;
				} else if (countNo <= batchSize) {
					mssg += "<p><strong>Results: " + countNo + " matches</strong></p>";
				} else {
					mssg += "<p><strong>Results: " + countNo + " matches, " + displayBatch + numLetters + " batch</strong></p>";
				}
				if (batchNo > 0) {
					mssg += "<form><input type=\"button\" class=\"btn1\" value=\"Previous Batch\" onclick=\"doPrevBatch()\">";
				} else {
					mssg += "<form>";
				}
				if ((displayBatch * batchSize) >= countNo) {
					mssg += "</form>";
				} else {
					mssg += "<input type=\"button\" class=\"btn2\" value=\"Next Batch\" onclick=\"doNextBatch()\"></form>";
				}
				var graphicID = "";
				var graphicURL = "";
				var srchTitle = "";
				var srchText = "";
				var repPattern = /%%GBP%%/g;
				for (var i = 0; i < picidArray.length; i++) {
					graphicID = picidArray[i].firstChild.data;
					srchTitle = titleArray[i].firstChild.data;
					srchTitle = srchTitle.replace(repPattern, "&pound;");
					srchText = textArray[i].firstChild.data;
					srchText = srchText.replace(repPattern, "&pound;");
					graphicURL = "photo.php?img=" + graphicID + "&typ=t";
					mssg += "<a href=\"javascript: loadPhoto('" + graphicID + "');\">";
					mssg += "<img src=\"" + graphicURL + "\" alt=\"\" class=\"thumbnail1\" /></a>";
					mssg += "<p class=\"srch1\">Picture: ";
					mssg += graphicID;
					mssg += "</p>";
					mssg += "<p><strong>";
					mssg += srchTitle;
					mssg += "</strong></p>";
					mssg += "<p class=\"srch2\">";
					mssg += srchText;
					mssg += "<br clear=\"all\" /></p>";
				}
				var theId = "thumbsbox";
				var lyrRef = document.getElementById(theId);
				loadRightContent(theId);
				lyrRef.innerHTML = mssg;
				if ((displayNow) && (displayOK)) {
					loadPhoto(dispNowID);
				}
				displayNow = false;
			} else if (dataStatus == "LookupDone") {
				var picidArray = xmlDocumentElement.getElementsByTagName("picid");
				var sfidArray = xmlDocumentElement.getElementsByTagName("sfid");
				var titleArray = xmlDocumentElement.getElementsByTagName("title");
				var dateArray = xmlDocumentElement.getElementsByTagName("date");
				var peopleArray = xmlDocumentElement.getElementsByTagName("people");
				var crholderArray = xmlDocumentElement.getElementsByTagName("crholder");
				var crurlArray = xmlDocumentElement.getElementsByTagName("crurl");
				var photogArray = xmlDocumentElement.getElementsByTagName("photog");
				var lenderArray = xmlDocumentElement.getElementsByTagName("lender");
				var fdbkArray = xmlDocumentElement.getElementsByTagName("fdbk");
				var connectedArray = xmlDocumentElement.getElementsByTagName("cnctd");
				var textArray = xmlDocumentElement.getElementsByTagName("text");
				var pixelsArray = xmlDocumentElement.getElementsByTagName("pixels");
				var pictureID = picidArray[0].firstChild.nodeValue;
				sfID = sfidArray[0].firstChild.nodeValue;
				var pix = pixelsArray[0].firstChild.nodeValue;
				var sizeArray = pix.split(",");
				pixwidth = sizeArray[0];
				pixheight = sizeArray[1];
				var picMain = "<img src=\"photo.php?img=" + pictureID + "&typ=m\" alt=\"\" width=\"" + pixwidth + "\" height=\"" + pixheight + "\" id=\"mainpic\" />";
				var shortTitle = titleArray[0].firstChild.nodeValue;
				var txtMain = "";
				if (shortTitle != "%NONE%") {
					var repPattern = /%%GBP%%/g;
					shortTitle = shortTitle.replace(repPattern, "&pound;");
					txtMain += "<h4>" + pictureID + ": " + shortTitle + "</h4>";
				}
				var dateDesc = dateArray[0].firstChild.nodeValue;
				if (dateDesc != "%NONE%") {
					txtMain += "<p class=\"date1\">Date: " + dateDesc + "</p>";
				}
				var peopleCSV =  peopleArray[0].firstChild.nodeValue;
				if (peopleCSV == "%NONE%") {
					peopleHotspots = false;
					menuHideLabelLink()
				} else {
					peopleHotspots = true;
					 menuShowLabelLink();
				}
				var displayText = textArray[0].firstChild.nodeValue;
				if (displayText != "%NONE%") {
					var repPattern = /%%GT%%/g;
					displayText = displayText.replace(repPattern, "<");
					repPattern = /%%LT%%/g;
					displayText = displayText.replace(repPattern, ">");
					repPattern = /%%GBP%%/g;
					displayText = displayText.replace(repPattern, "&pound;");
					repPattern = /<BR>/g;
					displayText = displayText.replace(repPattern, "<br />");
					repPattern = /<br \/><br \/>/g;
					displayText = displayText.replace(repPattern, "</p><p>");
					txtMain += "<p>" + displayText + "</p>";
				}
				var photographer = photogArray[0].firstChild.nodeValue;
				if (photographer != "%NONE%") {
					txtMain += "<p class=\"info1\">Photographer: " + photographer + "</p>";
				}
				var lender = lenderArray[0].firstChild.nodeValue;
				if (lender != "%NONE%") {
					txtMain += "<p class=\"info1\">Picture lent by : " + lender + "</p>";
				}
				var connectCSV = connectedArray[0].firstChild.nodeValue;
				if (connectCSV != "%NONE%") {
					var conIDs = connectCSV.split(",");
					txtMain += "<p class=\"info1\">Connected Photos: ";
					var firstOne = true;
					for (var i = 0; i < conIDs.length; i++) {
						var imgID = conIDs[i];
						if (firstOne) {
							firstOne = false;
						} else {
							txtMain += " | ";
						}
						txtMain += "<a href=\"javascript: loadPhoto('" + imgID + "');\">" + imgID + "</a>"; 
					}
					txtMain += "</p>";
				}
				var fdback = fdbkArray[0].firstChild.nodeValue;
				if (fdback != "%NONE%") {
					var repPattern = /%%GT%%/g;
					fdback = fdback.replace(repPattern, "<");
					repPattern = /%%LT%%/g;
					fdback = fdback.replace(repPattern, ">");
					repPattern = /%%GBP%%/g;
					fdback = fdback.replace(repPattern, "&pound;");
					repPattern = /<BR>/g;
					fdback = fdback.replace(repPattern, "<br />");
					repPattern = /<ITEM>/g;
					fdback = fdback.replace(repPattern, "</p><p class=\"fdbk1\">");
					repPattern = /<br \/><br \/>/g;
					fdback = fdback.replace(repPattern, "</p><p class=\"fdbk2\">");
					txtMain += "<p class=\"fdbk1\"><strong>Feedback:</strong> " + fdback + "</p>";
				}
				var theId3 = "picbox";
				var lyrRef3 = document.getElementById(theId3);
				var pixWid = pixwidth - 0;
				pixWid = pixWid + 20;
				lyrRef3.style.width = pixWid + "px";
				lyrRef3.style.background = "#fff";
				lyrRef3.innerHTML = picMain;
				var theId2 = "textbox";
				var lyrRef2 = document.getElementById(theId2);
				txtMain += "<p>&nbsp;</p>";
				lyrRef2.innerHTML = txtMain;
				getPicPosition();
			} else if (dataStatus == "PersonFound") {
				var personNameArray = xmlDocumentElement.getElementsByTagName("name");
				var personTxtArray = xmlDocumentElement.getElementsByTagName("txt");
				var personName = personNameArray[0].firstChild.nodeValue;
				var personTxt = personTxtArray[0].firstChild.nodeValue;
				if (personTxt == "%NONE%") {
					personTxt = "&nbsp;";
				} else {
					var repPattern = /%%GT%%/g;
					personTxt = personTxt.replace(repPattern, "<");
					repPattern = /%%LT%%/g;
					personTxt = personTxt.replace(repPattern, ">");
					repPattern = /%%GBP%%/g;
					personTxt = personTxt.replace(repPattern, "&pound;");
					repPattern = /<BR>/g;
					personTxt = personTxt.replace(repPattern, "<br />");
					repPattern = /<br \/><br \/>/g;
					personTxt = personTxt.replace(repPattern, "</p><p>");
				}
				var infoContent = "<img src=\"" + magPicURL + "\" alt=\"" + personName + "\" width=\"100\" height=\"100\" id=\"thumbnail2\" />";
				infoContent += "<h4>Name: " + personName + "</h4><p>" + personTxt + "</p>";
				infoContent += "<form><input type=\"button\" class=\"btn1\" value=\"Close This Panel\" onclick=\"clearPicSpotInfo()\"></form>";
				if (!infoBoxShowing) {
					prevRightDispID = righthDisplayID;
				}
				clearRightContent();
				righthDisplayID = "infobox";
				var lyrRef5 = document.getElementById("infobox");
				lyrRef5.innerHTML = infoContent;
				lyrRef5.style.display = "block";
				infoBoxShowing = true;
			} else if (dataStatus == "LookupFailed") {
				clearPicSpotInfo();
			} else if (dataStatus == "Error") {
				errorsArray = xmlDocumentElement.getElementsByTagName("error");
				var mssg = "<p class=\"spacer1\">&nbsp;</p><h4 class=\"search1\">System Error Message</h4><p>";
				mssg += errorsArray[0].firstChild.nodeValue;
				mssg += "</p>";
				var theId4 = "thumbsbox";
				var lyrRef4 = document.getElementById(theId4);
				loadRightContent(theId4);
				lyrRef4.innerHTML = mssg;
				sysErrorMsg = true;
			}
		} else {
			alert("Error - problem accessing the server's Photo Archive database. Error message: " + xmlHttp.statusText);
		}
	}
}
function doSearchK(form) {
	var choice = form.keywords.selectedIndex;
	var term = form.keywords[choice].value;
	if (term) {
		searchTerm = term;
		searchType = "typ=k";
		processGet('srch');
	}
}
function doSearchS(form) {
	var term = form.swords.value;
	searchTerm = term;
	searchType = "typ=s";
	processGet('srch');
}
function doSearchA(form) {
	var term = form.swords.value;
	for (var i = 0; i < form.atype.length; i++) {
		if (form.atype[i].checked) {
			var advancedMode = form.atype[i].value;
		}
	}
	searchTerm = term;
	searchType = "typ=a&am=" + advancedMode;
	var dateFrom = form.datef.value;
	var dateTo = form.datet.value;
	if (dateFrom) {
		searchType += "&df=" + dateFrom;
	}
	if (dateTo) {
		searchType += "&dt=" + dateTo;
	}
	processGet('srch');
}
function doSearchR(form) {
	var term = form.swords.value;
	var imgIdPattern = /^([A-Z]{2}[0-9]{3})([a-z_]{0,1})$/;
	var result = term.match(imgIdPattern);
	if (result != null) {
		searchTerm = term;
		searchType = "typ=s";
		processGet('srch');
		displayNow = true;
	} else {
		alert ("The Picture Reference Code is not in a valid format.");
	}
}
function doFeedback() {
	var feedbackURL = "photo-feedback.php?img=" + imageID;
	var openWindow = window.open(feedbackURL, "feedbackWin", "directories,menubar,scrollbars,resizable,toolbar,width=994,height=700");
}
function doOrder() {
	var orderURL = "photo-order-enquiry.php?gid=" + imageID;
	var openWindow = window.open(orderURL, "orderWin", "directories,menubar,scrollbars,resizable,toolbar,width=994,height=700");
}
function doNextBatch() {
	batchNo++ ;
	searchBatch = "&bch=" + batchNo;
	searchCount  = "&cnt=" + countNo;
	processGet('nop');
}
function doPrevBatch() {
	batchNo-- ;
	searchBatch = "&bch=" + batchNo;
	searchCount  = "&cnt=" + countNo;
	processGet('nop');
}
function loadPhoto(picID) {
	usingMap = false;
	clearOverlay();
	imageID = picID;
	processGet('loadpic');
}
function movementFix() {
	clearOverlay();
	getPicPosition();
}
loadRightContent('searchKW');
window.onresize = movementFix;
