var gMap 			= null;
var gLat 			= 0;
var gLng 			= 0;
var gZoom 			= 1;
var	gMini			= false;
var gWantPin		= false;
var gMarkersUrl 	= "";
var gPhotographer 	= "";
var gTrip			= "";
var gAlbum			= "";
var gFolder			= "";
var gType 			= "";
var gPins			= new Array();
var gTracks			= "";
var gTracksOn		= false;

function initMap(lat, lng, zoom, markersUrl, type, mini, trip, photographer, album, folder, want_pin, gpsTracks) {
	gLat 		= lat;
	gLng 		= lng;
	gZoom 		= zoom;
	gMarkersUrl = markersUrl;
	gType       = type;
	gMini		= mini;
	gWantPin	= want_pin;
	gTrip		= trip;
	gAlbum		= album;
	gPhotographer= photographer;
	gFolder		= folder;
	gTracks		= gpsTracks;
}

function include(destination) {
	var e=window.document.createElement('script');
	e.setAttribute('src',destination);
	window.document.body.appendChild(e);
}

function unloadMap() {
}

function loadMap() {
	if(GBrowserIsCompatible() && gZoom) {

		gMap = new GMap2(document.getElementById("map"));
				
		gMap.addMapType(G_PHYSICAL_MAP);
		gMap.setMapType(G_PHYSICAL_MAP);
		
		gMap.getContainer().style.overflow='hidden';
		
		if(!gMini) {
			gMap.addControl(new GLargeMapControl());
			gMap.addControl(new GMapTypeControl());
			gMap.addControl(new GOverviewMapControl());
		}
		else {
			gMap.addControl(new GSmallMapControl());
		}
		
		gMap.setCenter(new GLatLng(0, 0), 1);

		drawMap();

		if(!gMini) {
			GEvent.addListener(gMap, "moveend", updateMarkers);
		}
	}
}

function mapIsLoaded() {
	if(gMap && gMap.isLoaded()) {
		return true;
	}
	else {
		return false;
	}
}

function toggleTracks() {
	if(mapIsLoaded()) {
		if(gTracksOn) {
			gMap.clearOverlays();
			gTracksOn = false;
		}
		else {
			loadTracks();
			gTracksOn = true;
		}
	}
}

function loadTracks() {
	if(mapIsLoaded()) {
		if(gTracks) {
			include('/gps-tracks/' + gTracks);
		}
	}
}

function drawMap() {
	if(mapIsLoaded()) {
		gMap.setCenter(new GLatLng(gLat, gLng), gZoom);

		if(gType) {
			var types = gMap.getMapTypes();
			for(var i = 0; i < types.length; i++) {
				if(types[i].getName() == gType) {
					gMap.setMapType(types[i]);
				}
			}
		}
		
		if(!gWantPin) {
			updateMarkers();
		}
		else {
			var point		= null;
			var icon = new GIcon();
			icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
			icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
			icon.iconSize = new GSize(12, 20);
			icon.shadowSize = new GSize(22, 20);
			icon.iconAnchor = new GPoint(6, 20);
			icon.infoWindowAnchor = new GPoint(5, 1);
			point = new GLatLng(gLat, gLng);
			
			var overlay = createMarker(point, icon, '');
			gPins[gPins.length] = overlay;
					
			gMap.addOverlay(overlay);
		}
	}
}

function clearPins() {
	if(mapIsLoaded()) {

		if(gPins.length) {
			for(i = 0; i < gPins.length; i++) {
				gMap.removeOverlay(gPins[i]);
			}
			
			gPins.length = 0;
		}
	}
}

function updateMarkers() {
	if(gMarkersUrl) {
	
		clearPins();
		
		var bounds = gMap.getBounds();
		var zoom   = gMap.getZoom();		
		
		if(!gWantPin) {
		
			GDownloadUrl(gMarkersUrl+ '?zoom=' + zoom 
								+ '&north=' + bounds.getNorthEast().lat()
								+ '&south=' + bounds.getSouthWest().lat()
								+ '&east=' + bounds.getNorthEast().lng()
								+ '&west=' + bounds.getSouthWest().lng()
								+ '&photographer=' + gPhotographer 
								+ '&trip=' + gTrip 
								+ '&album=' + gAlbum 
								+ '&folder=' + gFolder

						, setUpMarkers);
		}

	}
	
	clearlog();
		
	log('<a href="http://shoebox.digitopia.net/cgi-bin/iowa/shoebox/map/index.html?zoom=' + gMap.getZoom() + '&lat=' + gMap.getCenter().lat() + '&lng=' + gMap.getCenter().lng() + '&type=' + gMap.getCurrentMapType().getName() + '">link to this map</a>');
	
}

function createMarker(point, icon, data) {
	var marker = new GMarker(point, icon);
  	GEvent.addListener(marker, "click", function(){marker.openInfoWindowHtml(data);});
	return marker;
}

function clearlog() {
	var div = document.getElementById('messages');
	if(div) {
		div.innerHTML = "";
	}
}

function log(message) {
	var div = document.getElementById('messages');
	if(div) {
		div.innerHTML += '<br>' + message;
	}
}

function setUpMarkers(data, responseCode) {
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");

	var thumbs = document.getElementById('thumbs');
	if(thumbs) {
		thumbs.innerHTML = '';
	}

	for (var i = 0; i < markers.length; i++) {

		var info  		= unescape(markers[i].getAttribute("info"));
		var icon_path  	= markers[i].getAttribute("icon");
		var name  		= markers[i].getAttribute("name");
		var minzoom  	= markers[i].getAttribute("minzoom");
		var maxzoom  	= markers[i].getAttribute("maxzoom");
		var point		= null;

		var icon = new GIcon();

		icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
		icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
		icon.iconSize = new GSize(12, 20);
		icon.shadowSize = new GSize(22, 20);
		icon.iconAnchor = new GPoint(6, 20);
		icon.infoWindowAnchor = new GPoint(5, 1);

		if(icon_path != '' && ! gMini) {
			icon.image = icon_path;
			icon.iconSize = new GSize(60, 60);
		}

		// icon.image    = icon_path;
		
		
		if(markers[i].getAttribute("lat") != 0 &&  markers[i].getAttribute("lng") != 0) {
		
			point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
		
			var overlay = createMarker(point, icon, info);
			
			gPins[gPins.length] = overlay;
			
			gMap.addOverlay(overlay);
		
			if(thumbs) {
				thumbs.innerHTML += info;
			}
		
//			log('added marker for ' + name + '@ ' + point + ' levels:' + minzoom + '-' + maxzoom);
		}
	}
}

function setupAjax() {
	var http_request = null;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		http_request = new XMLHttpRequest();
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	if (!http_request) {
		alert('Browser unable to make AJAX request');
	}

	return http_request;
}

function getXmlFirstChildData(tag,xmldoc) {

	var node = xmldoc.getElementsByTagName(tag);
	
	if(node) {
		node = node.item(0);
		if(node) {
			if(node.firstChild) { 
				return unescape(node.firstChild.data);
			}
			else {
				return '';
			}
		}
		else {
			return '';
		}
	}
	return '';
}

function saveFolderLocation(name,lat,lng) {
	var url	= gMarkersUrl
	url += '?action=savelocation';
	url	+= '&folder=' + name;
	url += '&lat=' + lat;
	url += '&lng=' + lng;
	
	var http_request = setupAjax();
	http_request.onreadystatechange = function() { saveFolderLocationDone(http_request); };
	http_request.open('GET', url, true);
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http_request.send(null);
}

function saveFolderLocationDone(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
		}
	}
}

function selectCheckboxes(prefix){
	
	var checkboxes = document.getElementsByName(prefix);

	for(i=0;i < checkboxes.length;i++){
		checkboxes[i].checked = true;
	}
}

function deselectCheckboxes(prefix){
	
	var checkboxes = document.getElementsByName(prefix);

	for(i=0;i < checkboxes.length;i++){
		checkboxes[i].checked = false;
	}
}


function selectAllImages() {
	selectCheckboxes('select_image');
}

function deselectAllImages() {
	deselectCheckboxes('select_image');
}

function clearTargetFolders() {
	deselectCheckboxes('target_folder');
}

function setGeoForSelectedImages() {
	var images = document.getElementsByName('select_image');

	var obj = document.getElementById('lat');
	var lat = obj.value;

	var obj = document.getElementById('lng');
	var lng = obj.value;

	var rows = '';;

	for(i = 0; i < images.length; i++) {
		if(images[i].checked) {
			if(rows) {
				rows += '|';
			}
			rows += images[i].value;
		}
	}

	var url	= '/cgi-bin/iowa/ajax.xml?';
	url    += 'proc=imageupdate_set_geo';
	url    += '&images=' + rows;
	url    += '&lat=' + lat;
	url    += '&lng=' + lng;
	
	var http_request = setupAjax();
	http_request.onreadystatechange = function() { updateGeoDone(http_request); };
	http_request.open('GET', url, true);
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http_request.send(null);
}

function updateGeoDone(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
			var status = getXmlFirstChildData('status', xmldoc);
			if(status == 'ok') {
				// just recording the hit
			}
			else {
				alert('ajax error ' + status);
			}
		}
	}
}


function addFoldersForSelectedImages() {

	var images = document.getElementsByName('select_image');
	var folders = document.getElementsByName('target_folder');

	var rows = '';;
	var folder_rows = '';

	for(i = 0; i < images.length; i++) {
		if(images[i].checked) {
			if(rows) {
				rows += '|';
			}
			rows += images[i].value;
		}
	}
	
	for(i = 0; i < folders.length; i++) {
		if(folders[i].checked) {
			if(folder_rows) {
				folder_rows += '|';
			}
			folder_rows += folders[i].value;
		}
	}
	
	alert('adding folders ' + folder_rows + " to images " + rows);

	var url	= '/cgi-bin/iowa/ajax.xml?';
	url    += 'proc=imageupdate_add_folders';
	url    += '&images=' + rows;
	url    += '&folders=' + folder_rows;
	
	var http_request = setupAjax();
	http_request.onreadystatechange = function() { updateFoldersDone(http_request); };
	http_request.open('GET', url, true);
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http_request.send(null);

}

function setFoldersForSelectedImages() {
	var images = document.getElementsByName('select_image');
	var folders = document.getElementsByName('target_folder');

	var rows = '';;
	var folder_rows = '';

	for(i = 0; i < images.length; i++) {
		if(images[i].checked) {
			if(rows) {
				rows += '|';
			}
			rows += images[i].value;
		}
	}
	
	for(i = 0; i < folders.length; i++) {
		if(folders[i].checked) {
			if(folder_rows) {
				folder_rows += '|';
			}
			folder_rows += folders[i].value;
		}
	}
	
	alert('set folders ' + folder_rows + " on images " + rows);

	var url	= '/cgi-bin/iowa/ajax.xml?';
	url    += 'proc=imageupdate_set_folders';
	url    += '&images=' + rows;
	url    += '&folders=' + folder_rows;
	
	var http_request = setupAjax();
	http_request.onreadystatechange = function() { updateFoldersDone(http_request); };
	http_request.open('GET', url, true);
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http_request.send(null);
}

function selectionChanged(checkbox) {	
	if(checkbox.checked) {
		var sel_count = 0;
	
		var images = document.getElementsByName('select_image');
		for(i = 0; i < images.length; i++) {
			if(images[i].checked) {
				++sel_count;
			}
		}

		if(sel_count == 1) {
			var url	= '/cgi-bin/iowa/ajax.xml?';
			url    += 'proc=imageupdate_get_folders';
			url    += '&images=' + checkbox.value;
			var http_request = setupAjax();
			http_request.onreadystatechange = function() { getFoldersForImageDone(http_request); };
			http_request.open('GET', url, true);
			http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			http_request.send(null);
		}
	}
}

function setupAjax() {
	var http_request = null;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		http_request = new XMLHttpRequest();
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	if (!http_request) {
		alert('Browser unable to make AJAX request');
	}

	return http_request;
}

function updateFoldersDone(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
			var status = getXmlFirstChildData('status', xmldoc);
			if(status == 'ok') {
				// just recording the hit
			}
			else {
				alert('ajax error ' + status);
			}
		}
	}
}

function getFoldersForImageDone(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
			var status = getXmlFirstChildData('status', xmldoc);
			if(status == 'ok') {
				var folders = getXmlFirstChildData('folders', xmldoc);

				var sel = folders.split('|');
				for(i = 0; i < sel.length; i++) {
					var obj = document.getElementById('target_folder_' + sel[i]);
					if(obj) {
						obj.checked = true;
					}
				}
			}
			else {
				alert('ajax error ' + status);
			}
		}
	}
}

/* legacy */

bName = navigator.appName;
bVer = parseInt(navigator.appVersion);

if ((bName == "Netscape" && bVer >= 3) || (bName == "Microsoft Internet Explorer" && bVer >= 4)) {
	br = "n3";
}
else {
	br = "n2";
}

function preLoadImages() {
	if (br == "n3") {
	}
}

function imgRoll(imgName,src) {
	if(br == "n3" && document.images) {
		document[imgName].src = src;
	}
}

function openPhoto(url,width,height) {
	window.open(url, 'photo', 'scrollbars=yes,resizable=yes,toolbar=no,location=no,directories=no,menubar=no,width=' + width + ',height=' + height);
}

function popUp(url,width,height) {
	window.open(url, 'folder', 'scrollbars=yes,toolbar=no,resizable=yes,location=no,directories=no,menubar=no,width=' + width + ',height=' + height);
}

function openInfo(url,width,height) {
	window.open(url, 'info', 'scrollbars=yes,toolbar=no,resizable=yes,location=no,directories=no,menubar=no,width=' + width + ',height=' + height);
}

function setupAjax() {
	var http_request = null;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		http_request = new XMLHttpRequest();
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	if (!http_request) {
		alert('Browser unable to make AJAX request');
	}

	return http_request;
}

function editPhotoInfo(photo) {
	var url = '/cgi-bin/iowa/shoebox/ajax.xml';
	var params = 'proc=photoeditgetpane';
	params += '&photo=' + photo;
	
	var pane = document.getElementById('edit_' + photo);
	if(pane) {
		pane.style.display='';
		pane.innerHTML = 'Loading.';
		var http_request = setupAjax();
		http_request.onreadystatechange = function() { editPhotoInfoDone(http_request); };
		http_request.open('POST', url, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		http_request.send(params);
	}
	else {
		alert('could not find div editpane');
	}
}

function editPhotoInfoDone(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
			var status = getXmlFirstChildData('status', xmldoc);
			if(status == 'ok') {
				var row = getXmlFirstChildData('row', xmldoc);
				var pane = document.getElementById('edit_' + row);
				var form = getXmlFirstChildData('form', xmldoc);
				if(pane) {
					pane.innerHTML = form;
				}
				else {
					alert('could not find div editpane');
				}
			}
			else {
				alert('error ' + status);
			}
		}
		else {
			alert('http error ' + http_request.status);
		}
	}
}

function ajaxSavePhotoInfo(photo) {
	var url = '/cgi-bin/iowa/shoebox/ajax.xml';
	
	var params 		= 'proc=photoeditsave&photo=' + photo;
	var description = document.getElementById('input_description_' + photo).value;
	var info 		= document.getElementById('input_info_' + photo).value;

	var static_obj = document.getElementById('description_' + photo);
	static_obj.innerHTML = description;

	static_obj = document.getElementById('info_' + photo);					
	static_obj.innerHTML = info;

	
	params += '&description=' + escape(description);
	params += '&info=' + escape(info);

	var pane = document.getElementById('edit_' + photo);
	if(pane) {
		pane.innerHTML = 'Saving.';
		var http_request = setupAjax();
		http_request.onreadystatechange = function() { ajaxSavePhotoDone(http_request); };
		http_request.open('POST', url, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		http_request.send(params);
	}
	else {
		alert('could not find div editpane');
	}
}

function ajaxSavePhotoDone(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
			var status = getXmlFirstChildData('status', xmldoc);
			if(status == 'ok') {
				var row = status = getXmlFirstChildData('photo', xmldoc);
				var pane = document.getElementById('edit_' + row);
				if(pane) {					
					pane.style.display='none';
				}
				else {
					alert('could not find div edit_' + row);
				}
			}
			else {
				alert('error ' + status);
			}
		}
		else {
			alert('http error ' + http_request.status);
		}
	}
}

function ajaxEditPhotoForm(photo,album) {
	var url = '/cgi-bin/iowa/shoebox/ajax.xml?proc=photoeditform&album=' + album + '&photo=' + photo;

	var pane = document.getElementById('editpane');
	if(pane) {
		pane.style.display = '';
		var http_request = setupAjax();
		http_request.onreadystatechange = function() { ajaxEditPhotoFormPopulate(http_request); };
		http_request.open('GET', url, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		http_request.send(null);
	}
	else {
		alert('could not find div editpane');
	}
}

function ajaxEditPhotoFormPopulate(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
			var status = getXmlFirstChildData('status', xmldoc);
			if(status == 'ok') {
				var data = getXmlFirstChildData('data', xmldoc);
				var pane = document.getElementById('editpane');
				if(pane) {
					pane.innerHTML = data;
				}
				else {
					alert('could not find div editpane');
				}
			}
			else {
				alert('error ' + status);
			}
		}
		else {
			alert('http error ' + http_request.status);
		}
	}
}

var browsingImages = new Array();
var browsingImagesCurrentImage = 0;
var browsingImagesCurrentRow = 0;
var browsingImagesPagination = "";

function initAjaxPhotoBrowsing(album,folder,photo) {	
	var url = '/cgi-bin/iowa/shoebox/ajax.xml?proc=getphotos&album=' + album + '&folder=' + folder + '&photo=' + photo;
	browsingImagesCurrentRow = photo;

	var obj = document.getElementById('pagination_div');
	if(obj) {
		browsingImagesPagination = obj.innerHTML;
	}
	
	var http_request = setupAjax();
	http_request.onreadystatechange = function() { initAjaxPhotoBrowsingDone(http_request); };
	http_request.open('GET', url, true);
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http_request.send(null);
}

function initAjaxPhotoBrowsingDone(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
			var panes = xmldoc.getElementsByTagName("image");
			
			for(var i = 0; i < panes.length; i++) {
				browsingImages[browsingImages.length] = panes[i];
				
				if(panes[i].getAttribute("row") == browsingImagesCurrentRow) {
					ajaxSetPhoto(i);
				}	
			}
		}
	}
}

function fixPageNav() {
	var lat  = browsingImages[browsingImagesCurrentImage].getAttribute("lat");
	var lng  = browsingImages[browsingImagesCurrentImage].getAttribute("lng");

	if(gMap) {
		clearPins();
	
		if(lat || lng) {
	
			var point = new GLatLng(lat, lng);
			var icon = new GIcon();
			icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
			icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
			icon.iconSize = new GSize(12, 20);
			icon.shadowSize = new GSize(22, 20);
			icon.iconAnchor = new GPoint(6, 20);
			icon.infoWindowAnchor = new GPoint(5, 1);
			
			var overlay = createMarker(point, icon, '');
			
			gPins[gPins.length] = overlay;

			gMap.addOverlay(overlay);
			gMap.panTo(point)
	
		}
	}

	var obj = document.getElementById('pagination_div');
	if(obj) {
		obj.innerHTML = browsingImagesPagination;

		var hrefs = obj.getElementsByTagName('a');
		hrefs[1].onclick = function() { ajaxFirstPhoto(); return false; };
		hrefs[2].onclick = function() { ajaxPreviousPhoto(); return false; };
		hrefs[3].onclick = function() { ajaxNextPhoto(); return false; };
		hrefs[4].onclick = function() { ajaxLastPhoto(); return false; };
				
		obj = document.getElementById('current_photo');
		if(obj) {
			obj.innerHTML = browsingImagesCurrentImage + 1;
		}
	}
}

function ajaxSetPhoto(i) {
	browsingImagesCurrentImage = i;
	
	var row  = browsingImages[i].getAttribute("row");
	var lat  = browsingImages[i].getAttribute("lat");
	var lng  = browsingImages[i].getAttribute("lng");
	var html = browsingImages[i].firstChild.data;
		
	var photo_pane = document.getElementById('photo_pane');
	if(photo_pane) {
		photo_pane.innerHTML = html;
		fixPageNav();
	}
}

function ajaxNextPhoto() {
	if(browsingImages.length && browsingImagesCurrentImage < browsingImages.length - 1) {

		var i = browsingImagesCurrentImage + 1;
		
		ajaxSetPhoto(i);
	}
}

function ajaxPreviousPhoto() {
	if(browsingImages.length && browsingImagesCurrentImage > 0) {

		var i = browsingImagesCurrentImage - 1;
		
		ajaxSetPhoto(i)
	}
}

function ajaxFirstPhoto() {
	if(browsingImages.length) {

		var i = 0;
		
		ajaxSetPhoto(i)
	}
}

function ajaxLastPhoto() {
	if(browsingImages.length) {

		var i = browsingImages.length - 1;
		
		ajaxSetPhoto(i)
	}
}

function copyGeo(index, delta, rows) {

	var row_array = rows.split(',');
	
	var from = row_array[index - 1 + delta];
	var to	 = row_array[index - 1];
	
	alert('copy geo from row ' + from + ' to row ' + to);

	var url	= '/cgi-bin/iowa/ajax.xml?';
	url    += 'proc=copy_geo';
	url    += '&from=' 	+ from;
	url    += '&to=' 	+ to;
	
	var http_request = setupAjax();
	http_request.onreadystatechange = function() { copyGeoDone(http_request); };
	http_request.open('GET', url, true);
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http_request.send(null);
}

function copyGeoDone(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
			document.location.href = document.location.href;
		}
	}
}

var blowupPhotoIndex	= -1;
var blowupPhotoList 	= null;
var blowupWindow		= null;
var blowupPhotos		= null;
var	blowupDataLoaded	= false;

function blowup(index,photo_list) {

	blowupPhotoIndex 	= index - 1;
	blowupPhotoList 	= photo_list.split(',');
	blowupDataLoaded	= false;
	
	blowupWindow = dialogBoxShowWindow('blowup','','',1050,900,'','/cgi-bin/iowa/blowup.html?photo=' + blowupPhotoList[blowupPhotoIndex] ,true);
	var url	= '/cgi-bin/iowa/ajax.xml?proc=get_photo_data';
	url += '&photos=' + photo_list;
	var http_request = setupAjax();
	http_request.onreadystatechange = function() { blowupDone(http_request); };
	http_request.open('GET', url, true);
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http_request.send(null);
}

function blowupDone(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
			var status = getXmlFirstChildData('status', xmldoc);

			if(status == 'ok') {
				blowupPhotos = xmldoc.getElementsByTagName("photo");
				blowupDataLoaded = true;
			}
			else {
				alert('ajax error loading album data ' + status);
			}
		}
	}
}

function blowupShowDelta(delta) {
	blowupPhotoIndex += delta;
	if(blowupPhotoIndex < 0) { blowupPhotoIndex = blowupPhotos.length -1; }
	if(blowupPhotoIndex > (blowupPhotos.length -1)) { blowupPhotoIndex = 0; }
	blowupShowPhoto();
}


function blowupShowPhoto(alt) {
	if(!blowupDataLoaded) {
		window.setTimeout("blowupShowPhoto()", 300);
	}
	else {
		var markup 		= '';
		var title  		= ''; 
		var description = '';
		var folders		= '';
		var credit		= '';
		var exif		= '';
		var lat			= '';
		var lng			= '';
		var zoom		= '';
		
		var altimages = blowupPhotos[blowupPhotoIndex].getElementsByTagName('alternate');
		
		if(alt) {
			markup += '<a href="javascript:window.parent.blowupShowDelta(1);">' +  getXmlFirstChildData('blowup',altimages[alt]) + '</a>';
			title = getXmlFirstChildData('title',altimages[alt])
			description = getXmlFirstChildData('description',altimages[alt])
			folders = getXmlFirstChildData('folders',altimages[alt])
			exif = getXmlFirstChildData('exif',altimages[alt])
			lat  = altimages[alt].getAttribute("lat");
			lng  = altimages[alt].getAttribute("lng");
			zoom = altimages[alt].getAttribute("zoom");
		}
		else {
			markup += '<a href="javascript:window.parent.blowupShowDelta(1);">' + getXmlFirstChildData('blowup',blowupPhotos[blowupPhotoIndex]) + '</a>';
			title = getXmlFirstChildData('title',blowupPhotos[blowupPhotoIndex])
			description = getXmlFirstChildData('description',blowupPhotos[blowupPhotoIndex])
			folders = getXmlFirstChildData('folders',blowupPhotos[blowupPhotoIndex])
			exif = getXmlFirstChildData('exif',blowupPhotos[blowupPhotoIndex])
			lat  = blowupPhotos[blowupPhotoIndex].getAttribute("lat");
			lng  = blowupPhotos[blowupPhotoIndex].getAttribute("lng");
			zoom = blowupPhotos[blowupPhotoIndex].getAttribute("zoom");
		}
		credit = getXmlFirstChildData('credit',blowupPhotos[blowupPhotoIndex])
		
		if(altimages && altimages.length) {
			markup += '<p>Select from alternate shots below:<hr style="width:754px;"><table><tr>';
			for(var i = 0; i < altimages.length; i++) {
				var thumb = getXmlFirstChildData('thumb',altimages[i]);
				markup += '<td><a href="javascript:window.parent.blowupShowPhoto(' + i + ');">' + thumb + '</a></td>';
			}
			markup += '</tr></table></p>';
		}
		
		var iframe = document.getElementById('iframe_blowup');
		if(iframe) {
	
			iframe.contentWindow.setMapPos(lat,lng,zoom);
			
			var doc = null;
			
			if(document.frames) {
				doc = document.frames["iframe_blowup"].document;
			}
			else {
				doc = iframe.contentDocument;
			}
			
			var div = doc.getElementById('photo');
			if(div) {		
				div.innerHTML = markup;
			}
			else {
				alert('could not find photo div in ' + iframe.id);
			}

			div = doc.getElementById('exif');
			if(div) {		
				div.innerHTML = exif;
			}
			else {
				alert('could not find exif div in ' + iframe.id);
			}
			
			div = doc.getElementById('info');
			if(div) {
				div.innerHTML = '<strong>' + title + '</strong>' 
					+ '<p>' + description + '</p>' 
					+ '<p style="font-size:9px;">' + credit + '</p>' 
					+ '<p style="font-size:9px;color:silver;">' + folders + '</p>';
				
				if(lat || lng) {
					div.innerHTML += '<p style="font-size:9px;color:silver;>Latitude:' + lat + '<br>Logitude:' + lng + '</p>';
				}
			}
			else {
				alert('could not find info div in ' + iframe.id);
			}
		}
		else {
			alert('could not find iframe iframe_blowup');
		}
	}
}