/*----------------------------------------------------------------------------\
|                               MyMap:                                        |
|-----------------------------------------------------------------------------*/


var map;
var points_downloaded = new Array;
var points_on_map = new Array;
var point_set;
var point_set_name; 

function initialize() {
//	var points = new Array();
	if (GBrowserIsCompatible()) 
	{
		map = new GMap2(document.getElementById("map"),{mapTypes:[G_PHYSICAL_MAP]} );
		map.addControl(new GLargeMapControl());
		//map.addControl(new GMapTypeControl());
		var centre_y=9.1481; var centre_x=40.4930; var zoom=5;
		var center = new GLatLng(centre_y, centre_x);
		 
		map.setCenter(center, zoom);
		
		loadPoints("set2");
		
		GEvent.addListener(map, 'zoomend', function(){
			loadPoints();
			document.getElementById('zoom').innerHTML="Custom";
		});
		GEvent.addListener(map, 'moveend', function(){
			loadPoints();
			document.getElementById('zoom').innerHTML="Custom";
		});
	}
}

function setCentre(map, centre_x, centre_y, zoom) {
		var center = new GLatLng(centre_y, centre_x);
		map.setCenter(center, zoom);
}

function updateMarkers(){
	var mapBounds = map.getBounds();
	
	//Remove any existing points that are no longer on map: 
	for(k in points_on_map) {
		if(!mapBounds.contains(points_on_map[k][0].getPoint()) || !(points_downloaded[k])) {
			map.removeOverlay(points_on_map[k][0]);
			delete points_on_map[k];
		}
	}
	
	for (k in points_downloaded){
		if(!points_on_map[k] && mapBounds.contains(points_downloaded[k][0])) {
			points_on_map[k] = new Array();
			points_on_map[k][0] = createSimpleMarker(points_downloaded[k][0], points_downloaded[k][1], points_downloaded[k][2], points_downloaded[k][3], points_downloaded[k][4]);
			points_on_map[k][1] = points_downloaded[3]; 
			map.addOverlay(points_on_map[k][0]);
		}
	}
	
}


function loadPoints(setName){
	if(setName){
		point_set = setName;
	}
	
	//Boundary info:
	var bounds = map.getBounds();
	var bounds_sw = bounds.getSouthWest();
	var bounds_ne = bounds.getNorthEast();
	
	//Prepare Querystring:
	var getVars = 'ne=' + bounds_ne.toUrlValue() + '&sw=' + bounds_sw.toUrlValue() + '&setname=' + point_set;
	
	//Log:
	//GLog.writeUrl('/map/populateXml?'+getVars);
	
	var request = GXmlHttp.create();
	request.open('GET', '/map/populateXml?'+getVars, true);
	request.onreadystatechange = function() {
		
		if(request.readyState == 4) {
			if(request.status == 200){
				//Clear existing points_downloaded:
				points_downloaded = []; 
					
				var xmlDoc = GXml.parse(request.responseText);
				
				var ds = xmlDoc.documentElement.getElementsByTagName("dataset");
				point_set_name = ds[0].getAttribute("name"); 
				document.getElementById('dataset').innerHTML=point_set_name;
				
				var markers = xmlDoc.documentElement.getElementsByTagName("marker");
				for (var i = 0; i < markers.length; i++) {
					pk = markers[i].getAttribute("pid");
					
					var lat = parseFloat(markers[i].getAttribute("lat"));
					var lng = parseFloat(markers[i].getAttribute("lng"));
					var point = new GLatLng(lat,lng);
			
					points_downloaded[pk] = new Array(point, markers[i].getAttribute("title"), markers[i].getAttribute("body"), markers[i].getAttribute("pid"), markers[i].getAttribute("url"), markers[i].getAttribute("icon"));
				} 
			}
			updateMarkers();
			
		}
		else
		{
			document.getElementById('dataset').innerHTML="Unable to Connect to Server";
		}
	}

	request.send(null);	
	document.getElementById('dataset').innerHTML="<img src='/images/activity_indicator.gif' width='16' height='16' align='absmiddle' />Updating Map...";
			
}

function createSimpleMarker(point, label, html, pid, url){
	var marker = new GMarker(point);
	
	GEvent.addListener(marker, "click", function() {
	  marker.openInfoWindowHtml("<div class='ginfowindow'><h2>" + label + "</h2><p><img src='/images/spacer.gif' align='left' height='100px' width='1px'/><img src='/index.php/map/streamThumbnail?gid=" + pid + "' align='left' />" + html + "</p><p align='right'>" + "<a href='/documents/info/" + url + "'>Link</a>" + "</p></div>");
	});
	
	return marker;
}

function zoomTo(name){
	switch(name){
		case "BG":
			setCentre(map, 35.5717, 10.5766, 7);
		break;
		case "Oromia":
			setCentre(map, 38.5268, 6.9023, 6);
		break;
		case "SNNPR":
			setCentre(map, 36.6687, 6.4417, 7);
		break;				
		default:
			setCentre(map, 40.4930, 9.1481, 5);
		break;
	}	
	document.getElementById('zoom').innerHTML=name;	
}

