	    	function GetXmlHttpObject() {
				var xmlHttp=null;
				try {
					// Firefox, Opera 8.0+, Safari
					xmlHttp=new XMLHttpRequest();
					}
				catch (e) {
					// Internet Explorer
			  		try {
					    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
					    }
					catch (e) {
						xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			    		}
			  		}
			
				return xmlHttp;
				}
	    	
	    	function on(divName) {
				getStyleObject(divName).display = 'block';
				}
			
			function off(divName) {
				getStyleObject(divName).display = 'none';
				}
				
			function toggle(divName) {
				var currentA;
			
				currentA = (getStyleObject(divName).display == 'none') ? 'block' : 'none';
				getStyleObject(divName).display = currentA;
				}
						function getStyleObject(objectId) {			    if(document.getElementById && document.getElementById(objectId)) {				return document.getElementById(objectId).style;				} else if (document.all && document.all(objectId)) {				return document.all(objectId).style;			 	} else if (document.layers && document.layers[objectId]) {				return document.layers[objectId];			    	} else {				return false;			    	}			    }

			function codeLats(boxToUpdate) {
				geocoder = new GClientGeocoder();
				geocoder.setBaseCountryCode('US');
				
				var address;
				
				if (boxToUpdate == "start") { 
					address = document.submission.start.value;
					} else { 
					address = document.submission.end.value; 
					}
					
				if (address.match(/brooklyn/i)) {
					alert ('Brooklyn isn\'t a city. But you\'ve activated the Hipster Exception(tm), courtesy of @lizfilm.'); 
					
					if (boxToUpdate == "start") { 						
						document.submission.startlat.value = 40.6501037;
						document.submission.startlong.value = -73.9495823;
						document.submission.startcity.value = 'Brooklyn';
						document.submission.startarea.value = 'NY';
						document.submission.startcountry.value = 'US';
		
						startload(40.6501037, -73.9495823);
						gotStart = 1;
						} else {
						document.submission.endlat.value = 40.6501037;
						document.submission.endlong.value = -73.9495823;
						document.submission.endcity.value = 'Brooklyn';
						document.submission.endarea.value = 'NY';
						document.submission.endcountry.value = 'US';
						
						endload(40.6501037, -73.9495823);
						gotEnd = 1;
						}
					} else if ((address) && (address.match(/\w/))) {
					geocoder.getLocations(
					    address,
						function(response) {
							if (!response || response.Status.code != 200) {
								updateStatus("'" + address + "' not found. Try adding more information.");
								} else {
								var place = response.Placemark[0];
								point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
								
								var countrycode = place.AddressDetails.Country.CountryNameCode;
								
								var state;
								if (place.AddressDetails.Country.AdministrativeArea) {
									state = place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
									} else {
									state = "-";
									}
											
								var cityname;
								if (place.AddressDetails.Country.AdministrativeArea) {
									if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea) {
										cityname = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
										} else {
										cityname = place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
										}
									} else if (place.AddressDetails.Country.SubAdministrativeArea) {
									cityname = place.AddressDetails.Country.SubAdministrativeArea.Locality.LocalityName;
									} else if (place.AddressDetails.Country.Locality) {
									cityname = place.AddressDetails.Country.Locality.LocalityName;
									}
									       	
		                       	if (boxToUpdate == "start") { 						
									document.submission.startlat.value = point.y;
									document.submission.startlong.value = point.x;
									document.submission.startcity.value = cityname;
									document.submission.startarea.value = state;
									document.submission.startcountry.value = countrycode;
					
									startload(point.y, point.x);
									gotStart = 1;
									} else {
									document.submission.endlat.value = point.y;
									document.submission.endlong.value = point.x;
									document.submission.endcity.value = cityname;
									document.submission.endarea.value = state;
									document.submission.endcountry.value = countrycode;
									
									endload(point.y, point.x);
									gotEnd = 1;
									}
								}
	      					}
	  					);
	  				}
				}

			function updateStatus(updateInfo) {
				alert(updateInfo);
				}

			function load(size) {
				if (GBrowserIsCompatible()) {
					map = new GMap2(document.getElementById("fullmap"), { mapTypes:[G_HYBRID_MAP] });
					map.setCenter(new GLatLng(38.614495, -97.341861), 3);
					
					if (size == "big") {
						map.setUIToDefault();
						} else {
						map.addControl(new GSmallMapControl());
						}

					redraw();
					}
				}
	
			function loadlargemap() {
				var urltoget = "xml.php";
				if (coded) { urltoget = urltoget + "?id=" + coded; }
			
				GDownloadUrl(urltoget, function(data) {
					var xml = GXml.parse(data);
					
					var bounds = new GLatLngBounds;
					var zoomer = 0;
					
					var markers = xml.documentElement.getElementsByTagName("marker");
					for (var i = 0; i < markers.length; i++) {
						var about = stripslashes(markers[i].getAttribute("about"));
						var type = markers[i].getAttribute("type");
						var coding = markers[i].getAttribute("code");
						var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
							parseFloat(markers[i].getAttribute("lng")));
						var marker = makePoint(point, type, about, coding);
						map.addOverlay(marker);
						}
						
					var ls = xml.documentElement.getElementsByTagName("line");
					for (var a = 0; a < ls.length; a++) {		
						var aboutls = stripslashes(ls[a].getAttribute("about"));
						var color = ls[a].getAttribute("color");
						var cityfrom = ls[a].getAttribute("from");
						var cityto = ls[a].getAttribute("to");
						var dist = ls[a].getAttribute("distance");
						var width  = parseFloat(ls[a].getAttribute("width"));
						var pits = ls[a].getElementsByTagName("point");
						var pts = [];
						
						for (var i = 0; i < pits.length; i++) {
							pts[i] = new GPoint(parseFloat(pits[i].getAttribute("lng")),
							parseFloat(pits[i].getAttribute("lat")));
							
							if (color == "#0abe0a") {
								bounds.extend(new GLatLng(parseFloat(pits[i].getAttribute("lat")), parseFloat(pits[i].getAttribute("lng"))));
								zoomer = 1;
								}
							}
						var polly = new GPolyline(pts,color,width);
						makeLine(polly, aboutls, cityfrom, cityto, dist);
						map.addOverlay(polly);
						}
						
					if (zoomer && jumpOK) {
						zoomlevel = map.getBoundsZoomLevel(bounds);
						if (zoomlevel > 2) { zoomlevel = zoomlevel - 1; }
						map.setCenter(bounds.getCenter(), zoomlevel);
						
						jumpOK = 0;
						}
					});
				}
				
			function redraw() {
				map.clearOverlays(); 
				loadlargemap();
				
				var t = setTimeout("redraw();", 30000);
				}
			     		
			function startload(lat,lng) {
				if (GBrowserIsCompatible()) {
					on('startmap');
					if (!(smap)) {
						smap = new GMap2(document.getElementById("startmap"));
						}
				    smap.setCenter(new GLatLng(lat, lng), 6);
				    }
				}
				
			function endload(lat,lng) {
				if (GBrowserIsCompatible()) {
					on('endmap');
					if (!(emap)) {
						emap = new GMap2(document.getElementById("endmap"));
						}
				    emap.setCenter(new GLatLng(lat, lng), 6);
				    }
				}
			
			function makePoint(point, type, about, coding) {
				var marker = new GMarker(point, customIcons[type]);
				GEvent.addListener(marker, 'mouseover', function() { up(about); });
				GEvent.addListener(marker, 'mouseout', function() { down(); });
				GEvent.addListener(marker, 'click', function() { refineview('cc', coding); });
				return marker;
				}
				
			function makeLine(line, about, from, to, distance) {
				if (from) {
					GEvent.addListener(line, 'mouseover', function() {
				        this.setStrokeStyle({weight:9});
				        if (about) {
					        up('<p class="smaller" style="margin-bottom: 5px;">Move from <strong>' + from + '</strong> to <strong>' + to + '</strong> (' + distance + ' km) because:</p>"' + about + '"');
					        } else {
					        up('<p>Move from <strong>' + from + '</strong> to <strong>' + to + '</strong>. (' + distance + ' km)</p>');
					        }
				      });
					} else {
					GEvent.addListener(line, 'mouseover', function() {
				        this.setStrokeStyle({weight:9});
				        up(about + ' (' + distance + ' km)');
				      });
					}
			    GEvent.addListener(line, 'mouseout', function() {
			        this.setStrokeStyle({weight:3});
			        down();
			      });
				}
			
			function addmove() {
				if (!(gotStart)) {
					codeLats('start');
					} else if (!(gotEnd)) {
					codeLats('end');
					}
				
				if ((!(document.submission.startlat.value)) && (!(document.submission.startlong.value))) {
					updateStatus("Can't submit a move without a valid starting location. ");
					} else if ((!(document.submission.endlat.value)) && (!(document.submission.endlong.value))) {
					updateStatus("Can't submit a move without a valid ending location. ");
					} else {
					//var displayLoading = '<p style="margin-top: 30px;"><big>Submitting move...</big></p>';
					//setBox('addpoint', displayLoading);
					
					xmlHttp = GetXmlHttpObject();
 
					var url = "update.php";
					url = url + "?abt=" + document.submission.about.value;
					url = url + "&s1=" + document.submission.startlat.value;
					url = url + "&s2=" + document.submission.startlong.value;
					url = url + "&s3=" + document.submission.startcity.value;
					url = url + "&s4=" + document.submission.startarea.value;
					url = url + "&s5=" + document.submission.startcountry.value;
					url = url + "&e1=" + document.submission.endlat.value;
					url = url + "&e2=" + document.submission.endlong.value;
					url = url + "&e3=" + document.submission.endcity.value;
					url = url + "&e4=" + document.submission.endarea.value;
					url = url + "&e5=" + document.submission.endcountry.value;
					url = url + "&t=" + count;
					count++;
					
					xmlHttp.onreadystatechange = showResponse;
					xmlHttp.open("GET",url,true);
					xmlHttp.send(null);
					}
				}
				
			function showResponse() {
				if (xmlHttp.readyState==4) {
					setBox('addpoint', xmlHttp.responseText);
					
					if (xmlHttp.responseText.search("<!-- ")) {
						var startpoint = xmlHttp.responseText.search("<!-- ");
						startpoint = startpoint + 5;
						var endpoint = xmlHttp.responseText.search(" //-->");
						var difference = endpoint - startpoint;
						
						coded = xmlHttp.responseText.substr(startpoint, difference);
						
						map.clearOverlays(); 
						loadlargemap();
						
						jumpOK = 1;
						}
				    }			    }
				
			function limitText(field) {
			    if (field.value.length > 500) {
			        field.value = field.value.substring(0, 500);
				    } 
				}
				
			function setBox(divName, replaceWith) {
				if(document.getElementById && document.getElementById(divName)) {					document.getElementById(divName).innerHTML = replaceWith;					} else if (document.all && document.all(divName)) {					document.all(divName).innerHTML = replaceWith;					} else if (document.layers && document.layers[divName]) {					document.layers[divName].innerHTML = replaceWith;					}
				}
				
			function up(display) {
				setBox('outerbox', display);
				on('outerboxshell');
				on('outerbox');
				
				//var t=setTimeout("off('outerboxshell');",4000);
				//var u=setTimeout("off('outerbox');",3999);
				}
			function down() {
				off('outerboxshell');
				off('outerbox');
				setBox('outerbox', '');
				}
				
			function stripslashes(str) {
				str=str.replace(/\\'/g,'\'');
				return str;
				}

			function refineview(type, todisplay) {
				if (type == "x") {
					coded = '';
					off('showall');
					} else {
					coded = type + "." + todisplay;
					on('showall');
					}
				map.clearOverlays(); 
				loadlargemap();
				}