function extractLatLon(response) {
	if (!response || response.Status.code != 200) {
		alert("The search location could not be located");
	} else {
		var place = response.Placemark[0];

		var map = new GMap2(document.getElementById("map_canvas"));
		var resultsPane = document.getElementById("map_results");
		resultsPane.innerHTML = "";
		map.setCenter(new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]), 11);
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		
		var baseIcon = new GIcon(G_DEFAULT_ICON);
		baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
		baseIcon.iconSize = new GSize(20, 34);
		baseIcon.shadowSize = new GSize(37, 34);
		baseIcon.iconAnchor = new GPoint(9, 34);
		baseIcon.infoWindowAnchor = new GPoint(9, 2);
		
		function createMarker(point, index, infoNode) { 
			// Create a lettered icon for this point using our icon class
			var letter = String.fromCharCode("A".charCodeAt(0) + index);
			var letteredIcon = new GIcon(baseIcon);
			letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
			
			// Set up our GMarkerOptions object
			markerOptions = { icon:letteredIcon };
			var marker = new GMarker(point, markerOptions);
			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindow(infoNode);
			});
			return marker;
		}
		
		var form = document.getElementById("geocode");
		var dataUrl = location.protocol + "//" + location.hostname + "/content/get/hotspot/closestNear?lat=" + place.Point.coordinates[1] + "&lon=" + place.Point.coordinates[0] + "&limit=" + form.limit.value;
		GDownloadUrl(dataUrl, function(data) {
			// Some utility nodes to clone later
			var brNode = document.createElement("br");
			
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("item");
			var mapBounds = new GLatLngBounds(map.getCenter(), map.getCenter());
	                
			for (var i = 0; i < markers.length; i++) {
				var latlng = new GLatLng(parseFloat(getElementTextContent(markers[i].getElementsByTagName("latitude")[0])),
						parseFloat(getElementTextContent(markers[i].getElementsByTagName("longitude")[0])));
				
				if (! mapBounds.contains(latlng)) {
					mapBounds.extend(latlng);
				}
				var resultNode = document.createElement("div");
				var nameNode = document.createElement("div");
				var bNode = document.createElement("b");
				bNode.setAttribute("class", "locHead");
				bNode.appendChild(document.createTextNode(getElementTextContent(markers[i].getElementsByTagName("name")[0])));
				nameNode.appendChild(bNode);
				resultNode.appendChild(nameNode);
				resultNode.appendChild(document.createTextNode(getElementTextContent(markers[i].getElementsByTagName("addressLine1")[0])));
				resultNode.appendChild(brNode.cloneNode(false));
				resultNode.appendChild(document.createTextNode(getElementTextContent(markers[i].getElementsByTagName("city")[0]) + ", "));
				resultNode.appendChild(document.createTextNode(getElementTextContent(markers[i].getElementsByTagName("stateProvince")[0]) + " "));
				resultNode.appendChild(document.createTextNode(getElementTextContent(markers[i].getElementsByTagName("postalCode")[0])));

				var mapMarker = createMarker(latlng, i, resultNode);
				map.addOverlay(mapMarker);
				gpoints[i] = mapMarker;

				var rNode = document.createElement("div");
				rNode.setAttribute("id", "single-result-node");
				var iconNode = document.createElement("div");
				iconNode.setAttribute("id", "icon-node");
				iconImg = document.createElement("img");
				iconImg.setAttribute("src", mapMarker.getIcon().image);
				iconImg.setAttribute("alt", "");
				iconNode.appendChild(iconImg);
				rNode.appendChild(iconNode);
				
				var linkNode = document.createElement("div");
				linkNode.setAttribute("class", "link-node");
				var resultLinkSpan = document.createElement("div");
				resultLinkSpan.setAttribute("class", "result-link");
				resultLinkSpan.setAttribute("id", "result-link");
				//var str='';
				//str+='font-size:14px;';
				//resultLinkSpan.setAttribute("style", str);
				var resultLink = document.createElement("a");
				//str = '';
				//str+='font-size:14px;color:#0090C7;font-weight:bold;line-height:16px;';
				resultLink.setAttribute("href", "#");
				resultLink.setAttribute("gpoint", i);
				resultLink.setAttribute("class", "gresults");
				//resultLink.setAttribute("style", str);
				if (resultLink.addEventListener) {
					resultLink.addEventListener("click", function(evt){openInfo(evt.target.getAttribute("gpoint"));evt.preventDefault();return false;}, false);
				} else if (resultLink.attachEvent) {
					resultLink.attachEvent("onclick", function(){openInfo(event.srcElement.getAttribute("gpoint"));return false;});
				}
				resultLink.appendChild(document.createTextNode(getElementTextContent(markers[i].getElementsByTagName("name")[0])));
				resultLinkSpan.appendChild(resultLink);
				linkNode.appendChild(resultLinkSpan);
				var addressNode = document.createElement("div");
				addressNode.setAttribute("class", "result-address")
				addressNode.appendChild(document.createTextNode(getElementTextContent(markers[i].getElementsByTagName("addressLine1")[0])));
				addressNode.appendChild(brNode.cloneNode(false));
				addressNode.appendChild(document.createTextNode(getElementTextContent(markers[i].getElementsByTagName("city")[0]) + ", "));
				addressNode.appendChild(document.createTextNode(getElementTextContent(markers[i].getElementsByTagName("stateProvince")[0]) + " "));
				addressNode.appendChild(document.createTextNode(getElementTextContent(markers[i].getElementsByTagName("postalCode")[0])));
				linkNode.appendChild(addressNode);
				rNode.appendChild(linkNode);
				resultsPane.appendChild(rNode);
                                
			}
			map.setZoom(map.getCurrentMapType().getSpanZoomLevel(map.getCenter(), mapBounds.toSpan(), map.getSize()));
		});
	}
}

// encodeLocation() is called when you click on the Search button
// in the form. It geocodes the address entered into the form
function encodeLocation() {
	document.getElementById("form_error").innerHTML = "";
	var form = document.getElementById("geocode");
	var a = form.address.value;
	var c = form.city.value;
	var s = form.stateProvince.value;
	var p = form.postalCode.value;
	
	// Basic validation
	if (p.length == 0 &&
		(s.length == 0 || c.length == 0)) {
		document.getElementById("form_error").innerHTML = "You must provide a City and State or a ZIP/Postal Code";
		return;
	}
	
	var q = "";
	if (a.length > 0) {
		q += a;
	}
	if (c.length > 0) {
		if (q.length > 0) {
			q += ", ";
		}
		q += c;
	}
	if (s.length > 0) {
		if (q.length > 0) {
			q += ", ";
		}
		q += s;
	}
	if (p.length > 0) {
		if (p.length > 0) {
			q += " ";
		}
		q += p;
	}

	q = q + ', USA';

	var geocoder = new GClientGeocoder();
	geocoder.getLocations(q, extractLatLon);
}

function getElementTextContent(element) {
	if (element.text == null) {
		return element.textContent;
	} else {
		return element.text;
	}
}

var gpoints = new Array();

function openInfo(index) {
	var mapMarker = gpoints[index];
	if (mapMarker == null) {
		return;
	}
	
	document.getElementById("map_canvas").scrollIntoView(true);

	GEvent.trigger(mapMarker, "click", mapMarker.getLatLng());
}


