var gkey = "ABQIAAAAqgd_2ErPbsDiFOLWspGXURTUfd3hJhdysthROlY4QlL2dcxZGRSRwBZ8ML_8TFPJOqPHlYFzZV6h4Q";

// This Javascript is based on code provided by the
// Blackpool Community Church Javascript Team
// http://www.commchurch.freeserve.co.uk/
// http://econym.googlepages.com/index.htm
var map;
var isFirstLoad = true;
var centerOnClick = true;

function initialize() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map_canvas"));
		map.setCenter(new GLatLng(0.0, 0.0), 1);
		map.addControl(new GLargeMapControl());
		map.addControl(new GHierarchicalMapTypeControl());
		map.addMapType(G_PHYSICAL_MAP);
        map.setMapType(G_PHYSICAL_MAP);
		map.enableScrollWheelZoom();

		// Download the data in data.xml and load it on the map. The format we
		// expect is:
		// <markers>
		// <marker lat="37.441" lng="-122.141"/>
		// <marker lat="37.322" lng="-121.213"/>
		// </markers>
		process_it = function(data) {
			var jsonData = eval('(' + data + ')');
			map.clearOverlays();
            
            var bounds = new GLatLngBounds;

			for ( var i = 0; i < jsonData.markers.length; i++) {
				var marker = jsonData.markers[i];
				var latlng = new GLatLng(parseFloat(marker.lat), parseFloat(marker.lng));
				map.addOverlay(createMarker(latlng, marker));
				//map.setCenter(latlng);
                bounds.extend(latlng);
			}
			updatePilotList(jsonData.markers, map);
            if (isFirstLoad &&  jsonData.markers.length > 1) {
                isFirstLoad = false;
                
                var north = bounds.getNorthEast().lng();
                var east = bounds.getNorthEast().lat();
                //bounds.extend(new GLatLng(east + 1.0, north);
                window.status = new GLatLng(east + 1.0, north);
                map.setZoom(map.getBoundsZoomLevel(bounds));
                map.setCenter(bounds.getCenter());
            }
		};
		
		process_track = function(data) {
			var jsonData = eval('(' + data + ')');
	        for (var i=0; i<jsonData.lines.length; i++) {
	            var pts = [];
	            for (var j=0; j<jsonData.lines[i].points.length; j++) {
	              pts[j] = new GLatLng(parseFloat(jsonData.lines[i].points[j].lat), parseFloat(jsonData.lines[i].points[j].lng));
	            }
	            map.addOverlay(new GPolyline(pts, jsonData.lines[i].colour, jsonData.lines[i].width)); 
                var bounds = new GLatLngBounds(
                                        new GLatLng(parseFloat(jsonData.lines[i].bounds.left), parseFloat(jsonData.lines[i].bounds.bottom)),
                                        new GLatLng(parseFloat(jsonData.lines[i].bounds.right), parseFloat(jsonData.lines[i].bounds.top))
                                    );
                if (centerOnClick) {
                    map.setZoom(map.getBoundsZoomLevel(bounds));
                    map.setCenter(bounds.getCenter());
                }
            }
		};

		// Creates a marker at the given point
		// Clicking the marker will hide it
		function createMarker(latlng, m) {
			var marker = new GMarker(latlng);
			marker.value = m.id;
			GEvent.addListener(marker, "click", function() {
				//var myHtml = "<b>#" + m.id + "</b><br/>" + m.callsign + "<br/>" + m.plane + "<br/>" + m.alt + ", " + m.kias + "<br/>";
				
				var html = "<div class=\"myMarker\">";
				html += "<p><label>Callsign:</label>&nbsp;" + m.callsign + "<p>";
				html += "<p><label>Aircraft:</label>&nbsp;" + m.plane + "</p>";
				html += "<p><label>KTas:</label>&nbsp;" + m.kias + "</p>";
				html += "<p><label>Alt:</label>&nbsp;" + m.alt + "</p>";
				html += "<p><label>Hdg:</label>&nbsp;" + m.hdg + "</p>";
                if (marker.dest != "") {
					html += "<p><label>flying to:</label>&nbsp;" + m.dest+ "</p>";
				}

				html += "<p><label>Track:</label>&nbsp;<a href='#' onclick='showTrack(" + m.id + ",false)'>Track</a></p>";
				//myHtml += "<p><label></label></p>";
				html += "</div>";
				
				map.openInfoWindowHtml(latlng, html);
			});
			return marker;
		}
		
		GDownloadUrl("data.php?action=positions", process_it);

		window.setInterval(reloadMarkers, 1000 * 10);
		
		updatePilotList = function(markers, theMap) {
			var pilotList = document.getElementById("pilotlist");
			if (pilotList != 'undefined'){
				var html = "";
				for ( var i = 0; i < markers.length; i++) {
					var marker = markers[i];
					html += "<li><a href='#' onclick='centerPilot(" + marker.lat + "," +marker.lng + ");'>" + marker.callsign + "</a>(<a href='#' onclick='showTrack(" + marker.id + ",true)'>T</a>), " + marker.plane + " at " + marker.alt + "ft, " + marker.kias + "kt";
					if (marker.dest != "") {
						html += ", flying to " + marker.dest;
					}
					html += "</li>";
				}
				pilotList.innerHTML = html;
			}
		};
	}
}

function centerPilot(lat, lng){
	map.setCenter(new GLatLng(parseFloat(lat), parseFloat(lng)));
}

function showTrack(id, center) {
    centerOnClick = center;
	GDownloadUrl("data.php?&action=track&id=" + id, process_track);	
}

function reloadMarkers() {
	GDownloadUrl("data.php?action=positions", process_it);
}


