//<![CDATA[

var SpeciesKey;
var Region;	// Used to identify which region within a species' range we're dealing with for species (such as
						// Brook trout) that are too large to be displayed on one map.
var map;
var bounds;
var PointsVisible = false;

// this variable will collect the html which will eventually be placed in the side_bar
var side_bar_html = "";

// array to hold copies of the markers and html used by the side_bar
var gmarkers = [];
var MarkerIndex = 0;

//----------------------------------------------------------------
// A function to create the marker and set up the event window
function createMarker(point,name,html) {
	var marker = new GMarker(point);

	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
	});

	// save the info we need to use later for the side_bar
//gmarkers[MarkerIndex] = marker;
	gmarkers.push(marker);

	// add a line to the side_bar html
	side_bar_html += '<a href="javascript:myclick(' + MarkerIndex + ')">' + name + '</a><br>';

	MarkerIndex++;

	return marker;
}

//----------------------------------------------------------------
// This function picks up the click and opens the corresponding info window
function myclick(i) {
	if (PointsVisible) {
		GEvent.trigger(gmarkers[i], "click");
	}
}

//----------------------------------------------------------------
function TogglePoints() {
//debug("Toggling points " + Date());

	for (var j=0; j<gmarkers.length; j++) {
		if (!PointsVisible) {
			map.addOverlay(gmarkers[j]);
		}
		else {
			map.removeOverlay(gmarkers[j]);
		}			
	}
	PointsVisible = !PointsVisible;
//debug("PointsVisible finished, set to " + PointsVisible + "  " + Date());
}

// Initial performance:
// Add markers: 20s,18,17
// Hide markers: 3s,3,4

// Removed redundant array:
// Add markers: 7,6,6
// Hide markers: 2,3,3



//----------------------------------------------------------------

var process_kml = function(doc)  {
	var xmlDoc = GXml.parse(doc)

	bounds = new GLatLngBounds();

// Build an array with a Node for each Placemark.
	var placemarks = xmlDoc.documentElement.getElementsByTagName("Placemark");  
	for (var i = 0; i < placemarks.length; i++) {
		// Extract name, description, and coordinates from each Placemark.
		var name=GXml.value(placemarks[i].getElementsByTagName("name")[0]);
		var desc=GXml.value(placemarks[i].getElementsByTagName("description")[0]);
		var PointNode=placemarks[i].getElementsByTagName("Point")[0];

		if (PointNode != null) {

			PointCoords = GXml.value(PointNode.getElementsByTagName("coordinates")[0]);

			var ordinate = PointCoords.split(",");
			
			if (ordinate.length > 1) { // Skip empty coordinates
				var point = new GLatLng(parseFloat(ordinate[1]),parseFloat(ordinate[0]));
				bounds.extend(point);
				var marker = createMarker(point,name,desc)
			}
		}
	}

	// put the assembled side_bar_html contents into the side_bar div
	document.getElementById("side_bar").innerHTML = side_bar_html;
	
	var czoom = (map.getBoundsZoomLevel(bounds));
	var clat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) /2;
	var clng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) /2;

	map.setCenter(new GLatLng(clat,clng),czoom);

//	MarkerMgr = new GMarkerManager(map);
//	MarkerMgr.addMarkers(gmarkers,10,17);
//	MarkerMgr.refresh();
	
	// Refresh the markers any time the user moves or zooms the map.
//	GEvent.addListener(map, "moveend",  function(){MarkerMgr.refresh();})
//	GEvent.addListener(map, "zoomend",  function(){MarkerMgr.refresh();})
}

//----------------------------------------------------------------
		
function GMapInit(inSpeciesKey, inRegion, inMapServerBaseURL) {

	SpeciesKey = inSpeciesKey;
	Region = inRegion;

	if (! GBrowserIsCompatible()) {
		// display a warning if the browser was not compatible
		alert("Sorry, the Google Maps API is not compatible with this browser");
	}

	else {
		var mapElement = document.getElementById("map");
		
		if (mapElement == null) {
			alert("Unable to initialize map. Try refreshing your browser.");
			return;
		}
		 
		// Create the map
		map = new GMap2(mapElement);
		map.enableDoubleClickZoom();
		map.enableContinuousZoom();

		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());

		// Add the custom overlay (HUCS) to it. 
		// Note: when I tried doing this after the GDownloadUrl, it sometimes didn't work in IE. Polygons never got drawn.
		var custommap1 = CreateCustomTileLayer(inMapServerBaseURL);
		map.getMapTypes().length = 0;
		map.addMapType(custommap1);
		map.setMapType(custommap1);

		// Parse the marker points from the appropriate KML file, based on Species.
		if (isNaN(SpeciesKey)) {
			alert("Error: Unable to determine Species Key");
		}
		else {
			switch (SpeciesKey) {
				case 1: GDownloadUrl("gmaps/GBPoints.kml",process_kml);
					break;
				case 2: 
					switch (Region) {
						case "ME" : 
							GDownloadUrl("gmaps/BTPoints_ME.kml",process_kml);
							break;
							
						case "NH_VT" : 
							GDownloadUrl("gmaps/BTPoints_NH_VT.kml",process_kml);
							break;
							
						case "MA_CT_RI" : 
							GDownloadUrl("gmaps/BTPoints_MA_CT_RI.kml",process_kml);
							break;
							
						case "NY" : 
							GDownloadUrl("gmaps/BTPoints_NY.kml",process_kml);
							break;
							
						case "PA_NJ" : 
							GDownloadUrl("gmaps/BTPoints_PA_NJ.kml",process_kml);
							break;
							
						case "VA_WV_MD" : 
							GDownloadUrl("gmaps/BTPoints_VA_WV_MD.kml",process_kml);
							break;
							
						case "NC_SC_TN_GA" : 
							GDownloadUrl("gmaps/BTPoints_NC_SC_TN_GA.kml",process_kml);
							break;
							
						default: 
							alert("Unrecognized Region");
							break;
					}
					break;
				case 4: GDownloadUrl("gmaps/SRFSPoints.kml",process_kml);
					break;
				case 5: GDownloadUrl("gmaps/YCTPoints.kml",process_kml);
					break;
				case 6: GDownloadUrl("gmaps/WCTPoints.kml",process_kml);
					break;
				case 7: GDownloadUrl("gmaps/CRCTPoints.kml",process_kml);
					break;
				case 8: GDownloadUrl("gmaps/RGCTPoints.kml",process_kml);
					break;
				case 10: GDownloadUrl("gmaps/ATPoints.kml",process_kml);
					break;
				case 11: GDownloadUrl("gmaps/BLMWPoints.kml",process_kml);
					break;
				case 14: GDownloadUrl("gmaps/LCTPoints.kml",process_kml);
					break;
				case 15: GDownloadUrl("gmaps/DABTPoints.kml",process_kml);
					break;
				case 16: GDownloadUrl("gmaps/NPWTPoints.kml",process_kml);
					break;
				case 18: GDownloadUrl("gmaps/MAGPoints.kml",process_kml);
					break;
				case 19: GDownloadUrl("gmaps/BLWTPoints.kml",process_kml);
					break;
				case 21: GDownloadUrl("gmaps/MCRRPoints.kml",process_kml);
					break;
				case 22: GDownloadUrl("gmaps/ELRBPoints.kml",process_kml);
					break;
				case 23: GDownloadUrl("gmaps/PCTPoints.kml",process_kml);
					break;
				case 24: GDownloadUrl("gmaps/LKGTPoints.kml",process_kml);
					break;
				case 25: GDownloadUrl("gmaps/CGTPoints.kml",process_kml);
					break;
				case 27: GDownloadUrl("gmaps/GLRTPoints.kml",process_kml);
					break;
				case 31: GDownloadUrl("gmaps/BCT2Points.kml",process_kml);
					break;
				case 33: GDownloadUrl("gmaps/DBNTPoints.kml",process_kml);
					break;
	            case 35: GDownloadUrl("gmaps/GilaPoints.kml", process_kml);
	                break;
	            case 37: GDownloadUrl("gmaps/CohoPoints.kml", process_kml);
	                break;
	            case 38: GDownloadUrl("gmaps/CentWinSthdPoints.kml", process_kml);
	                break;
	            case 40: GDownloadUrl("gmaps/NWinSthdPoints.kml", process_kml);
	                break;
	            case 41: GDownloadUrl("gmaps/SWinSthdPoints.kml", process_kml);
	                break;
	            case 43: GDownloadUrl("gmaps/NSumSthdPoints.kml", process_kml);
	                break;
	            case 46: GDownloadUrl("gmaps/CentFallChinPoints.kml", process_kml);
	                break;
	            case 48: GDownloadUrl("gmaps/NFallChinPoints.kml", process_kml);
	                break;
	            case 49: GDownloadUrl("gmaps/NSprChinPoints.kml", process_kml);
	                break;
	            case 50: GDownloadUrl("gmaps/CentSprChinPoints.kml", process_kml);
	                break;
	            case 51: GDownloadUrl("gmaps/GLCPoints.kml", process_kml);
					break;
	            case 52: GDownloadUrl("gmaps/CentWinChinPoints.kml", process_kml);
	                break;
	            case 54: GDownloadUrl("gmaps/AtlSmnPoints.kml", process_kml);
	                break;
	            case 55: GDownloadUrl("gmaps/WTColoRiv.kml", process_kml);
	                break;
	            case 57: GDownloadUrl("gmaps/WTGreatBasin.kml", process_kml);
	                break;
	            case 58: GDownloadUrl("gmaps/WTColumbia.kml", process_kml);
	                break;
	            default: 
					alert("Unrecognized Species Key");
					break;
			}
		}	
		// === add the Streams layer ===
//		var custommap2 = CreateStreamTileLayer();
//		map.addMapType(custommap2);
	}
}
//]]>

