// 
// This map uses the Google Maps API, http://www.google.com/apis/maps/
// 
// (c)2005 Traverse Area District Library
// Contact wireless@tadl.tcnet.org
// 

var map;
var xmlDoc;
var useXslt = false;
var okIcon;
var unknownIcon;
var futureIcon;
var downIcon;
var fullstatus = new Array();
fullstatus["ok"] = "OK";
fullstatus["unknown"] = "Unknown (assumed up)";
fullstatus["future"] = "Future - Not Yet Operational";
fullstatus["down"] = "Suspected Down";
  

if (GBrowserIsCompatible()) {
	var centerpoint = new GLatLng(44.756930,-85.607553);
}

function load(){
	if (Tget("ds").indexOf("f") != -1) {
		var statusform = document.forms["statusform"];
		statusform.showfuture.checked = true;	
	}

	var p = Tget("p");
	
	if (p != "") {
		setShowProvider(p);
	}
	
	var z = Tget("z");

	if (z != "") {
		TsetZoom(z);
	}

	if (GBrowserIsCompatible()) {
		document.getElementById("map").innerHTML = "";
		map = initMap();
		initIcons();
		loadXml();
	} else {
		document.getElementById("map").innerHTML = "<div class=\"error\"><p>Sorry, the browser you are using does not appear to be capable of displaying this map.</p><p>All is not lost! You can still view the <a href=\"hotspots-list.html\">text-only list of hotspots</a>.</p></div>";
	}
}

function setShowProvider(desiredProvider) {
	var desiredProvider;
	var showproviderRadio = document.forms["providerform"].showprovider;
	for (var i = 0; i < showproviderRadio.length; i++) {
		if (showproviderRadio[i].value == desiredProvider) {
			showproviderRadio[i].checked = true;
		}
	}
}

function getShowProvider() {
	var showprovider;
        var showproviderRadio;
        showproviderRadio = document.forms["providerform"].showprovider;
        for (var i = 0; i < showproviderRadio.length; i++) {
                if (showproviderRadio[i].checked == true) {
                        showprovider = showproviderRadio[i].value;
                }
        }
	return showprovider;
}

function TsetZoom(zoom) {
	var zoom;
	document.forms["mapform"].TzoomLevel.value = zoom;
}

function TgetZoom() {
	var Tzoom;
	Tzoom = parseFloat(document.forms["Tmapform"].TzoomLevel.value);
	return Tzoom;
}

function initMap() {
	var map = new GMap2(document.getElementById("map"));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	map.addControl(new GScaleControl());
	map.enableDoubleClickZoom();
	map.enableContinuousZoom();
	map.setCenter(centerpoint, 13);
	//var handler = new GKeyboardHandler(map);
	GEvent.addListener(map, "click", function(marker, point) {
		var marker; // Passed if we clicked on a marker
		var point; // Passed if we didn't click on a marker
		if (marker == undefined) {
			map.closeInfoWindow();
		}
	});
return map;

}

function enableKeys() {
	var handler = new GKeyboardHandler(map);
}

function createMarker(point, icon, info, tooltip) {
	var marker = new GMarker(point, {icon: icon, title: tooltip});
	GEvent.addListener(marker, "click", function() {
		TopenInfoWindow(marker, info);
	});

	return marker;
}

function TopenInfoWindow(marker,infoXml) {
	var marker;
	var infoXml;
	if (useXslt == true) {
		marker.openInfoWindowXslt(infoXml, "hotspots.xsl");
	} else {
		var html = TfakeXslt(infoXml);
		marker.openInfoWindowHtml(html);
	}

}

function TfakeXslt(infoXml) {
	var infoXml;
	var html;
	var name = TnodeValue("name", infoXml);
	var address = TnodeValue("address", infoXml);
	var provider = TnodeValue("provider", infoXml);
	var ssid = TnodeValue("ssid", infoXml);
	var status = TnodeValue("status", infoXml);
	html  = "<div class=\"infoWindow\">";
	html += "<span class=\"name\">" + name + "</span><br>";
	html += address + "<br>";
	html += "Provider: " + provider + "<br>";
	html += "SSID: " + ssid + "<br>";
	html += "Status: <span class=\"status-" + status + "\">" + fullstatus[status] + "</span>";
	html += "</div>";
	return html;	
}

function TnodeValue(nodename, nodelist) {
	var nodename;
	var nodelist;
	var nodevalue;
	try {
		nodevalue = nodelist.getElementsByTagName(nodename)[0].childNodes[0].nodeValue;
	}
	catch (e) {
		nodevalue="";
	}
	finally {
		return nodevalue;
	}
}

function Tget(desiredKey) {
	var query = location.search.substring(1);
	var pairs = query.split("&");
	for (var i = 0; i < pairs.length; i++) {
		var position = pairs[i].indexOf("=");
		if (position == -1) {
			continue;
		}
		var key = pairs[i].substring(0,position);
		var value = pairs[i].substring(position+1);
		if (key == desiredKey) {
			return value;
		} else {
			continue;
		}
	}
	return "";
}

function loadXml() {
	var request = GXmlHttp.create();
	request.open("GET", "hotspots.xml", true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			xmlDoc = request.responseXML;
			TdrawMarkers(TgetZoom());
		}
	}
	request.send(null);
}

function initIcons() {
	var baseIcon = new GIcon();
	baseIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	baseIcon.iconSize = new GSize(12, 20);
	baseIcon.shadowSize = new GSize(22, 20);
	baseIcon.iconAnchor = new GPoint(6, 20);
	baseIcon.infoWindowAnchor = new GPoint(5, 1);
	baseIcon.imageMap = [4,0,0,4,0,7,3,11,4,19,7,19,8,11,11,7,11,4,7,0];
	baseIcon.transparent = "images/mm_20_trans.png";

	okIcon = new GIcon(baseIcon);
	okIcon.image = "http://labs.google.com/ridefinder/images/mm_20_green.png";
	unknownIcon = new GIcon(baseIcon);
	unknownIcon.image = "http://labs.google.com/ridefinder/images/mm_20_gray.png";
	futureIcon = new GIcon(baseIcon);
	futureIcon.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
	downIcon = new GIcon(baseIcon);
	downIcon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
}

function TdrawMarkers(atZoom) {
	var atZoom;
	var showprovider = getShowProvider();
	var statusform = document.forms["statusform"];
	var showok = statusform.showok.checked;
	var showunknown = statusform.showunknown.checked;
	var showfuture = statusform.showfuture.checked;
	var showdown = statusform.showdown.checked;

	if (xmlDoc==undefined) {
		return false;
	}
	
	map.clearOverlays();

	var hotspots = xmlDoc.documentElement.getElementsByTagName("hotspot");
	for (var i = 0; i < hotspots.length; i++) {
		var hotspotXml = hotspots[i];
		var provider = TnodeValue("provider", hotspotXml);
		if (showprovider != "all" && provider != showprovider) {
			continue;
		}
		var name = TnodeValue("name", hotspotXml);
		var latval = parseFloat(TnodeValue("lat", hotspotXml));
		var longval = parseFloat(TnodeValue("long", hotspotXml));
		var point = new GLatLng(latval, longval);
		var icon;
		var status = TnodeValue("status", hotspotXml);
		switch(status) {
			case "ok":
				if (showok != true ) { continue; };
				icon = okIcon;
				break;
			case "future":
				if (showfuture != true ) { continue; };
				icon = futureIcon;
				break;
			case "down":
				if (showdown != true ) { continue; };
				icon = downIcon;
				break;
			default:
				if (showunknown != true ) { continue; };
				icon = unknownIcon;
				break;
		}
		var marker = createMarker(point, icon, hotspotXml, name);
		map.addOverlay(marker);
	}

	if (atZoom != undefined) {
		TsetZoom(atZoom);
		map.setCenter(centerpoint, atZoom);
	}
	
}

