//<![CDATA[
var map;
// this variable will collect the html which will eventualkly be placed in the sidebar
var WorldHtml = [];
var CanadaHtml = '';
var USAHtml = '';
var SAmericaHtml = '';
var CAmericaHtml = '';
var AfricaHtml = '';
var AsiaHtml = '';

// arrays to hold copies of the markers and html used by the sidebar
// because the function closure trick doesnt work there
var gWorldPoints = [];
var gCanadaPoints = [];
var gUSAPoints = [];
var gSAmericaPoints = [];
var gCAmericaPoints = [];
var gAfricaPoints = [];
var gAsiaPoints = [];

var gWorldZoom = [];
var gCanadaZoom = [];
var gUSAZoom = [];
var gSAmericaZoom = [];
var gCAmericaZoom = [];
var gAfricaZoom = [];
var gAsiaZoom = [];

var L1Htmls = [];
var L2Htmls = [];
var L3Htmls = [];

var gL1Markers = [];
var gL2Markers = [];
var gL3Markers = [];

// Create LSI custom markers
//cache my icon images
var imgCorridor = new Image(15, 30);
imgCorridor.src = 'images/pin_blue.png';
var imgForestry = new Image(15, 30);
imgForestry.src = 'images/pin_green.png';
var imgMine = new Image(15, 30);
imgMine.src = 'images/pin_yellow.png';
var imgTopo = new Image(15, 30);
imgTopo.src = 'images/pin_red.png';
var imgTransmission = new Image(15, 30);
imgTransmission.src = 'images/pin_cyan.png';
var imgGDS = new Image(15, 30);
imgGDS.src = 'images/pin_orange.png';
var imgShadow = new Image(38, 30);
imgShadow.scr = 'images/pin_shadow.png';

var icoCorridor = new GIcon();
icoCorridor.image = 'images/pin_blue.png';
icoCorridor.shadow = 'images/pin_shadow.png';
//icoCorridor.shadow = null;
icoCorridor.iconSize = new GSize(15, 30);
icoCorridor.shadowSize = new GSize(38, 30);
//icoCorridor.shadowSize = new GSize(0, 0);
icoCorridor.iconAnchor = new GPoint(9, 29);
icoCorridor.infoWindowAnchor = new GPoint(9, 1);

var icoForestry = new GIcon();
icoForestry.image = 'images/pin_green.png';
icoForestry.shadow = 'images/pin_shadow.png';
//icoForestry.shadow = null;
icoForestry.iconSize = new GSize(15, 30);
icoForestry.shadowSize = new GSize(38, 30);
//icoForestry.shadowSize = new GSize(0, 0);
icoForestry.iconAnchor = new GPoint(9, 29);
icoForestry.infoWindowAnchor = new GPoint(9, 1);

var icoMine = new GIcon();
icoMine.image = 'images/pin_yellow.png';
icoMine.shadow = 'images/pin_shadow.png';
//icoMine.shadow = null;
icoMine.iconSize = new GSize(15, 30);
icoMine.shadowSize = new GSize(38, 30);
//icoMine.shadowSize = new GSize(0, 0);
icoMine.iconAnchor = new GPoint(9, 29);
icoMine.infoWindowAnchor = new GPoint(9, 1);

var icoTransmission = new GIcon();
icoTransmission.image = 'images/pin_cyan.png';
icoTransmission.shadow = 'images/pin_shadow.png';
//icoTransmission.shadow = null;
icoTransmission.iconSize = new GSize(15, 30);
icoTransmission.shadowSize = new GSize(38, 30);
//icoTransmission.shadowSize = new GSize(0, 0);
icoTransmission.iconAnchor = new GPoint(9, 29);
icoTransmission.infoWindowAnchor = new GPoint(9, 1);

var icoTopo = new GIcon();
icoTopo.image = 'images/pin_red.png';
icoTopo.shadow = 'images/pin_shadow.png';
//icoTopo.shadow = null;
icoTopo.iconSize = new GSize(15, 30);
icoTopo.shadowSize = new GSize(38, 30);
//icoTopo.shadowSize = new GSize(0, 0);
icoTopo.iconAnchor = new GPoint(9, 29);
icoTopo.infoWindowAnchor = new GPoint(9, 1);

var icoGDS = new GIcon();
icoGDS.image = 'images/pin_orange.png';
icoGDS.shadow = 'images/pin_shadow.png';
//icoGDS.shadow = null;
icoGDS.iconSize = new GSize(15, 30);
icoGDS.shadowSize = new GSize(38, 30);
//icoGDS.shadowSize = new GSize(0, 0);
icoGDS.iconAnchor = new GPoint(9, 29);
icoGDS.infoWindowAnchor = new GPoint(9, 1);

function onLoad() {
	// add controls and center/zoom the map
	var a=document.getElementById("map");
	if (navigator.appVersion.indexOf("MSIE 5.5")!=-1)
		a.ownerDocument=document;
	map = new GMap2(a);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.addMapType(G_PHYSICAL_MAP);
	map.setMapType(G_PHYSICAL_MAP);
	map.enableScrollWheelZoom();
	GEvent.addListener(map, "zoomend", function(oldLevel, newLevel) {
		OnZoom(oldLevel, newLevel);
	});
	LoadRegions();
	ZoomToRegion("World");
	LoadProjects();
}


function OnZoom(oldZoomLevel, newZoomLevel) {
	//zoom in from Level 1 to Level 2
	if (oldZoomLevel < 3 && newZoomLevel < 5 && newZoomLevel >= 3) {
		ShowL2Projects();
	}
	//zoom in from Level 1 to Level 3
	if (oldZoomLevel < 3 && newZoomLevel >= 5) {
		ShowL2Projects();
		ShowL3Projects();
	}
	//zoom out from Level 2 to Level 1
	if (oldZoomLevel < 5 && oldZoomLevel >= 3 && newZoomLevel < 3) {
		HideL2Projects();
	}
	//zoom in from Level 2 to Level 3
	if (oldZoomLevel < 5 && oldZoomLevel >= 3 && newZoomLevel >= 5) {
		ShowL3Projects();
	}
	//zoom out from Level 3 to Level 1
	if (oldZoomLevel >= 5 && newZoomLevel < 3) {
		HideL3Projects();
		HideL2Projects();
	}
	//zoom out from Level 3 to Level 2
	if (oldZoomLevel >= 5 && newZoomLevel < 5 && newZoomLevel >= 3) {
		HideL3Projects();
	}
}


function ShowL1Projects() {
	for (var i = 0; i < gL1Markers.length; i++) {
		map.addOverlay(gL1Markers[i]);
		
	}
}


function ShowL2Projects() {
	for (var i = 0; i < gL2Markers.length; i++) {
		map.addOverlay(gL2Markers[i]);
	}
}


function HideL2Projects() {
	for (var i = 0; i < gL2Markers.length; i++) {
		map.removeOverlay(gL2Markers[i]);
	}
}


function ShowL3Projects() {
	for (var i = 0; i < gL3Markers.length; i++) {
		map.addOverlay(gL3Markers[i]);
	}
}


function HideL3Projects() {
	for (var i = 0; i < gL3Markers.length; i++) {
		map.removeOverlay(gL3Markers[i]);
	}
}


function ZoomToRegion(region) {
	map.closeInfoWindow();
	switch (region)
	{
		case "World":
			map.setCenter(new GLatLng(20.0000, -15.0000), 1);
			document.getElementById("Regions").innerHTML = WorldHtml[0];
			for (var i = 1; i < WorldHtml.length; i++) {
				document.getElementById("Regions").innerHTML += WorldHtml[i];
			}
			break;
		case "Canada":
			map.setCenter(gWorldPoints[0], gWorldZoom[0]);
			document.getElementById("Regions").innerHTML = WorldHtml[0];
			for (var i = 1; i < WorldHtml.length; i++) {
				document.getElementById("Regions").innerHTML += WorldHtml[i];
				if (i==1) {
					document.getElementById("Regions").innerHTML += CanadaHtml;
				}
			}
			break;
		case "USA":
			map.setCenter(gWorldPoints[1], gWorldZoom[1]);
			document.getElementById("Regions").innerHTML = WorldHtml[0];
			for (var i = 1; i < WorldHtml.length; i++) {
				document.getElementById("Regions").innerHTML += WorldHtml[i];
				if (i==2) {
					document.getElementById("Regions").innerHTML += USAHtml;
				}
			}
			break;
		case "Central America/Caribbean":
			map.setCenter(gWorldPoints[2], gWorldZoom[2]);
			document.getElementById("Regions").innerHTML = WorldHtml[0];
			for (var i = 1; i < WorldHtml.length; i++) {
				document.getElementById("Regions").innerHTML += WorldHtml[i];
				if (i==3) {
					document.getElementById("Regions").innerHTML += CAmericaHtml;
				}
			}
			break;
		case "South America":
			map.setCenter(gWorldPoints[3], gWorldZoom[3]);
			document.getElementById("Regions").innerHTML = WorldHtml[0];
			for (var i = 1; i < WorldHtml.length; i++) {
				document.getElementById("Regions").innerHTML += WorldHtml[i];
				if (i==4) {
					document.getElementById("Regions").innerHTML += SAmericaHtml;
				}
			}
			break;
		case "Africa":
			map.setCenter(gWorldPoints[4], gWorldZoom[4]);
			document.getElementById("Regions").innerHTML = WorldHtml[0];
			for (var i = 1; i < WorldHtml.length; i++) {
				document.getElementById("Regions").innerHTML += WorldHtml[i];
				if (i==5) {
					document.getElementById("Regions").innerHTML += AfricaHtml;
				}
			}
			break;
		case "Asia":
			map.setCenter(gWorldPoints[5], gWorldZoom[5]);
			document.getElementById("Regions").innerHTML = WorldHtml[0];
			for (var i = 1; i < WorldHtml.length; i++) {
				document.getElementById("Regions").innerHTML += WorldHtml[i];
				if (i==6) {
					document.getElementById("Regions").innerHTML += AsiaHtml;
				}
			}
			break;
		case "Northwest Territories":
			map.setCenter(gCanadaPoints[0], gCanadaZoom[0]);
			break;
		case "British Columbia":
			map.setCenter(gCanadaPoints[1], gCanadaZoom[1]);
			break;
		case "Alberta":
			map.setCenter(gCanadaPoints[2], gCanadaZoom[2]);
			break;
		case "Saskatchewan":
			map.setCenter(gCanadaPoints[3], gCanadaZoom[3]);
			break;
		case "Manitoba":
			map.setCenter(gCanadaPoints[4], gCanadaZoom[4]);
			break;
		case "Ontario":
			map.setCenter(gCanadaPoints[5], gCanadaZoom[5]);
			break;
		case "Quebec":
			map.setCenter(gCanadaPoints[6], gCanadaZoom[6]);
			break;
		case "Nova Scotia":
			map.setCenter(gCanadaPoints[7], gCanadaZoom[7]);
			break;
		case "Newfoundland and Labrador":
			map.setCenter(gCanadaPoints[8], gCanadaZoom[8]);
			break;
		case "Arizona":
			map.setCenter(gUSAPoints[0], gUSAZoom[0]);
			break;
		case "Montana":
			map.setCenter(gUSAPoints[1], gUSAZoom[1]);
			break;
		case "Wisconsin":
			map.setCenter(gUSAPoints[2], gUSAZoom[2]);
			break;
		case "Vermont":
			map.setCenter(gUSAPoints[3], gUSAZoom[3]);
			break;
		case "New Jersey":
			map.setCenter(gUSAPoints[4], gUSAZoom[4]);
			break;
		case "Costa Rica":
			map.setCenter(gCAmericaPoints[0], gCAmericaZoom[0]);
			break;
		case "Dominican Republic":
			map.setCenter(gCAmericaPoints[1], gCAmericaZoom[1]);
			break;
		case "Ecuador":
			map.setCenter(gSAmericaPoints[0], gSAmericaZoom[0]);
			break;
		case "Madagascar":
			map.setCenter(gAfricaPoints[0], gAfricaZoom[0]);
			break;
		case "Myanmar":
			map.setCenter(gAsiaPoints[0], gAsiaZoom[0]);
			break;
		case "Malaysia":
			map.setCenter(gAsiaPoints[1], gAsiaZoom[1]);
			break;
		case "Indonesia":
			map.setCenter(gAsiaPoints[2], gAsiaZoom[2]);
			break;
		case "Papua New Guinea":
			map.setCenter(gAsiaPoints[3], gAsiaZoom[3]);
			break;
	}
}


function LoadProjects () {
	var request = GXmlHttp.create();
	request.open("GET", "project_data.xml", true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			// obtain the array of markers and loop through it
			var projects = xmlDoc.documentElement.getElementsByTagName("marker");
			var i1=0;
			var i2=0;
			var i3=0;
			for (var i = 0; i < projects.length; i++) {
				// obtain the attribues of each marker
				var lat = parseFloat(projects[i].getAttribute("lat"));
				var lng = parseFloat(projects[i].getAttribute("lng"));
				var html = '<span class="map_location">' + projects[i].getAttribute("location") + '</span>';
				html += '<br>' + projects[i].getAttribute("description");
				var point = new GPoint(lng,lat);
				var icon = projects[i].getAttribute("icon")
				var level = projects[i].getAttribute("level")
				// create the marker
				var marker;
				switch (icon)
				{
					case "corridor":
						marker = createMarker(point,html,icoCorridor);
						break;
					case "forestry":
						marker = createMarker(point,html,icoForestry);
						break;
					case "mine":
						marker = createMarker(point,html,icoMine);
						break;
					case "topo":
						marker = createMarker(point,html,icoTopo);
						break;
					case "transmission":
						marker = createMarker(point,html,icoTransmission);
						break;
					case "GDS":
						marker = createMarker(point,html,icoGDS);
						break;
				}
				switch (level)
				{
					case "1":
						gL1Markers[i1] = marker;
						L1Htmls[i1] = html;
						i1++;
						break;
					case "2":
						gL2Markers[i2] = marker;
						L2Htmls[i2] = html;
						i2++;
						break;
					case "3":
						gL3Markers[i3] = marker;
						L3Htmls[i3] = html;
						i3++;
						break;
				}
			}
			ShowL1Projects();
		}
	}
	request.send(null);
}


// A function to create the marker and set up the event window
function createMarker(point,html,ico) {
	// FF 1.5 fix
	html = '<div style="white-space:nowrap;" class="main_content">' + html + '</div>';
	var marker = new GMarker(point, ico);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}


function LoadRegions () {
	// Read the data from project_data.xml
	WorldHtml[0] = '<a href="javascript:ZoomToRegion(\'World\')">World</a><br>';
	CanadaHtml = "";
	var request = GXmlHttp.create();
	request.open("GET", "region_data.xml", true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			// obtain the array of markers and loop through it
			var regions = xmlDoc.documentElement.getElementsByTagName("worldregion");
			var i = 0;
			for (i = 0; i < regions.length; i++) {
				// obtain the attribues of each marker
				var lat = parseFloat(regions[i].getAttribute("lat"));
				var lng = parseFloat(regions[i].getAttribute("lng"));
				var point = new GLatLng(lat,lng);
				gWorldPoints[i] = point;
				var label = regions[i].getAttribute("label");
				var zoom = parseInt(regions[i].getAttribute("zoom"));
				gWorldZoom[i] = zoom;
				WorldHtml[i+1] = '<a href="javascript:ZoomToRegion(\'' + label + '\')">' + label + '</a><br><div id="' + label + '"></div>';
			}
			// put the assembled sidebar_html contents into the sidebar div
			document.getElementById("Regions").innerHTML = WorldHtml[0];
			for (i = 1; i < WorldHtml.length; i++) {
				document.getElementById("Regions").innerHTML += WorldHtml[i];
			}

			regions = xmlDoc.documentElement.getElementsByTagName("canadaregion");
			for (i = 0; i < regions.length; i++) {
				// obtain the attribues of each marker
				var lat = parseFloat(regions[i].getAttribute("lat"));
				var lng = parseFloat(regions[i].getAttribute("lng"));
				var point = new GLatLng(lat,lng);
				gCanadaPoints[i] = point;
				var label = regions[i].getAttribute("label");
				var zoom = parseInt(regions[i].getAttribute("zoom"));
				gCanadaZoom[i] = zoom;
				CanadaHtml += '<a href="javascript:ZoomToRegion(\'' + label + '\')">-  ' + label + '</a><br>';
			}

			regions = xmlDoc.documentElement.getElementsByTagName("usaregion");
			for (i = 0; i < regions.length; i++) {
				// obtain the attribues of each marker
				var lat = parseFloat(regions[i].getAttribute("lat"));
				var lng = parseFloat(regions[i].getAttribute("lng"));
				var point = new GLatLng(lat,lng);
				gUSAPoints[i] = point;
				var label = regions[i].getAttribute("label");
				var zoom = parseInt(regions[i].getAttribute("zoom"));
				gUSAZoom[i] = zoom;
				USAHtml += '<a href="javascript:ZoomToRegion(\'' + label + '\')">-  ' + label + '</a><br>';
			}

			regions = xmlDoc.documentElement.getElementsByTagName("camericaregion");
			for (i = 0; i < regions.length; i++) {
				// obtain the attribues of each marker
				var lat = parseFloat(regions[i].getAttribute("lat"));
				var lng = parseFloat(regions[i].getAttribute("lng"));
				var point = new GLatLng(lat,lng);
				gCAmericaPoints[i] = point;
				var label = regions[i].getAttribute("label");
				var zoom = parseInt(regions[i].getAttribute("zoom"));
				gCAmericaZoom[i] = zoom;
				CAmericaHtml += '<a href="javascript:ZoomToRegion(\'' + label + '\')">-  ' + label + '</a><br>';
			}

			regions = xmlDoc.documentElement.getElementsByTagName("samericaregion");
			for (i = 0; i < regions.length; i++) {
				// obtain the attribues of each marker
				var lat = parseFloat(regions[i].getAttribute("lat"));
				var lng = parseFloat(regions[i].getAttribute("lng"));
				var point = new GLatLng(lat,lng);
				gSAmericaPoints[i] = point;
				var label = regions[i].getAttribute("label");
				var zoom = parseInt(regions[i].getAttribute("zoom"));
				gSAmericaZoom[i] = zoom;
				SAmericaHtml += '<a href="javascript:ZoomToRegion(\'' + label + '\')">-  ' + label + '</a><br>';
			}

			regions = xmlDoc.documentElement.getElementsByTagName("africaregion");
			for (i = 0; i < regions.length; i++) {
				// obtain the attribues of each marker
				var lat = parseFloat(regions[i].getAttribute("lat"));
				var lng = parseFloat(regions[i].getAttribute("lng"));
				var point = new GLatLng(lat,lng);
				gAfricaPoints[i] = point;
				var label = regions[i].getAttribute("label");
				var zoom = parseInt(regions[i].getAttribute("zoom"));
				gAfricaZoom[i] = zoom;
				AfricaHtml += '<a href="javascript:ZoomToRegion(\'' + label + '\')">-  ' + label + '</a><br>';
			}

			regions = xmlDoc.documentElement.getElementsByTagName("asiaregion");
			for (i = 0; i < regions.length; i++) {
				// obtain the attribues of each marker
				var lat = parseFloat(regions[i].getAttribute("lat"));
				var lng = parseFloat(regions[i].getAttribute("lng"));
				var point = new GLatLng(lat,lng);
				gAsiaPoints[i] = point;
				var label = regions[i].getAttribute("label");
				var zoom = parseInt(regions[i].getAttribute("zoom"));
				gAsiaZoom[i] = zoom;
				AsiaHtml += '<a href="javascript:ZoomToRegion(\'' + label + '\')">-  ' + label + '</a><br>';
			}
		}
	}
	request.send(null);
}

//]]>
