// Control debugging output
var debug = 0;		

// Globals
var map; 		// Ref to map object
var markers = [];	// Array of markers that go on the map
var radars = [];	// Assoc array of radars (key is an index)
var locations = [];	// Assoc array of locations (key is loc id)

// Setup map
function initmap() {
    if (!GBrowserIsCompatible()) {
	document.getElementById("map").innerHTML = "<h1>Browser not compatible with Google Maps. Sorry...</h1>";
	return;
    }
    
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    resetMap();

    GDownloadUrl("/radars/data.json", parsedata);
}

function parsedata(reply) {
    eval(reply);
    
    for (var i in locations) {
	loc = locations[i];
	var descr = "<center><b>" + loc.name + ", " + loc.country + "</b></center><br>" + getdescrforloc(loc.id);
	loc.marker = createmarker(loc.lat, loc.lng, descr);
	map.addOverlay(loc.marker);
    }
    
    var sidebar = document.getElementById("sidebar");
    addradarsbytype(radars, "VPR", sidebar);
    addradarsbytype(radars, "SK", sidebar);
    addradarsbytype(radars, "IONO", sidebar);
    addradarsbytype(radars, "MPR", sidebar);
}

function getdescrforloc(id) {
    var descr = "";
    
    for (var i in radars) {
	radar = radars[i];
	if (radar.locid == id) {
	    if (descr != "")
		descr += "<hr>";
	    
	    descr += "<b>Name:</b> " + radar.name + ".";
	    descr += "<br><b>Type:</b> " + longradartype(radar.type) + ".";
	    if (radar.customer != "") {
		var cust = radar.customer.replace(",", "<br>");
		descr += "<br><b>Customer:</b> " + cust + ".";
	    }
	    if (radar.note != "")
	    descr += "<br><b>Note:</b> " + radar.note + ".";
	    if (radar.commyear != "")
		descr += "<br><b>Commissioned:</b> " + radar.commyear + ".";
	    if (radar.supplied != "")
		descr += "<br><b>Supplied:</b> " + radar.supplied + ".";
	    if (radar.mardoc)
		descr += "<br><b>Partner:</b> A collaboration with <a href=\"http://www.mardoc-inc.com\">MARDOC Inc</a>.";
	}
    }
    
    return descr;
}

function addradarsbytype(radars, type, sidebar) {
    sidebar.innerHTML += "<h3>" + longradartype(type) + "</h3>";

    for (var i in radars) {
	radar = radars[i];
	if (radar.type == type) {
	    locname = radar.name + ", " + locations[radar.locid].country;
	    sidebar.innerHTML += "<a href='javascript:infoLink(" + radar.locid + ");'>" + locname + "</a><br> ";
	}
    }
    
    sidebar.innerHTML += "<p>";
}


function longradartype(type) {
    if (type == "SK")
	return "SKiYMET";
    else if (type == "VPR")
	return "VHF Profiler";
    else if (type == "MPR")
	return "MF Profiler";
    else if (type == "IONO")
	return "Ionospheric";
    else
	return "Unknown";
}

// Trigger a click for a given marker
function infoLink(locid) {
    GEvent.trigger(locations[locid].marker, "click");
}

// Make logging console
if (debug) {
    function log(msg) {
	GLog.write(msg);
    }
} else {
    function log(msg) {
    }
}
	
// Reset the map back to where it started
function resetMap() {
    map.setCenter(new GLatLng(-22.219618, 114.102951), 2);
    map.setMapType(G_SATELLITE_MAP);
    for (var i in locations) {
	loc = locations[i];
	loc.marker.closeInfoWindow();
    }
}

// Create a marker with popup window
function createmarker(lat, lng, html) {
    var point = new GLatLng(lat, lng);
    var myIcon = new GIcon(G_DEFAULT_ICON);
    myIcon.iconSize = new GSize(32, 32);
    // Icon from http://www.visual-case.it/cgi-bin/vc/GMapsIcons.pl
    myIcon.image = "http://maps.google.com/mapfiles/ms/micons/postoffice-jp.png";
    myIcon.shadow = "http://maps.google.com/mapfiles/ms/micons/postoffice-jp.shadow.png";
    // Need imageMap really..
    var marker = new GMarker(point, {icon : myIcon});
    
    GEvent.addListener(marker, "click", function() {
			   map.setCenter(marker.getLatLng());
			   map.setZoom(13);
			   marker.openInfoWindowHtml(html)});

    GEvent.addListener(marker, "mouseover", function() {
			   marker.openInfoWindowHtml(html)});

    return marker;
}

// Can't use <head onload=""> in Drupal
window.onload = initmap;
window.onunload = GUnload;


