var map = null;
var activateGMap = function(){
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("mapclient"));
		var d = new Date();
		var copyright = new GCopyright(1,
		new GLatLngBounds(new GLatLng(-90, -180), new GLatLng(90, 180)), 0,
		"Bathymetry &copy;"+d.getFullYear()+" <a href='http://www.marine-geo.org'>MGDS</a>");
		var copyrightCollection = new GCopyrightCollection("");
		copyrightCollection.addCopyright(copyright);
		var tileDoq= new GTileLayer(copyrightCollection,1,22);
		
		tileDoq.myLayers='topo';
		tileDoq.myFormat='image/jpeg';
		tileDoq.myBaseURL='http://www.marine-geo.org/services/wms?';
		tileDoq.getTileUrl=CustomGetTileUrl;
		tileDoq.getOpacity = function() {return 1.0;}
	
		var gmrt_layer=[tileDoq];
		var gmrt_hybrid_layer=[tileDoq,G_HYBRID_MAP.getTileLayers()[1]];
	
		var bathymetry = new GMapType(gmrt_layer, G_SATELLITE_MAP.getProjection(), "Bathymetry", G_SATELLITE_MAP);
		var bathyhybrid = new GMapType(gmrt_hybrid_layer, G_SATELLITE_MAP.getProjection(), "Hybrid", G_SATELLITE_MAP);
		
	/*		var tileDoqMask= new GTileLayer(new GCopyrightCollection(""),1,21);
		tileDoqMask.myLayers='topo-mask';
		tileDoqMask.myFormat='image/jpeg';
		tileDoqMask.myBaseURL="http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/services/ogc/wms_mask.map";
		tileDoqMask.getTileUrl=CustomGetTileUrl;
		tileDoqMask.getOpacity = function() {return 1.0;}
	
		var gmrt_layer_mask=[tileDoqMask];
			var gmrt_hybrid_layer_mask=[tileDoqMask,G_HYBRID_MAP.getTileLayers()[1]];
	
		var bathymetry_mask = new GMapType(gmrt_layer_mask, G_SATELLITE_MAP.getProjection(), "Masked", G_SATELLITE_MAP);
		var bathyhybrid_mask = new GMapType(gmrt_hybrid_layer_mask, G_SATELLITE_MAP.getProjection(), "Hybrid", G_SATELLITE_MAP);
	*/
	
		var tileDoqGEBCO= new GTileLayer(new GCopyrightCollection(""),1,21);
		tileDoqGEBCO.myLayers='GEBCOGazetteer';
		tileDoqGEBCO.myFormat='image/gif';
		tileDoqGEBCO.myBaseURL="http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/services/ogc/wmsext.map";
		tileDoqGEBCO.getTileUrl=CustomGetTileUrl;
		tileDoqGEBCO.getOpacity = function() {return 1;}
	
		var gmrt_layer_GEBCO=[tileDoqGEBCO];
		var gmrt_hybrid_layer_GEBCO=[bathymetry.getTileLayers()[0],tileDoqGEBCO];
	
		var bathymetry_GEBCO = new GMapType(gmrt_layer_GEBCO, G_SATELLITE_MAP.getProjection(), "Labels", G_SATELLITE_MAP);
		var bathyhybrid_GEBCO = new GMapType(gmrt_hybrid_layer_GEBCO, G_SATELLITE_MAP.getProjection(), "Seafloor Feature", G_SATELLITE_MAP);
		
		var tileDoqStation= new GTileLayer(new GCopyrightCollection(""),1,21);
		tileDoqStation.myLayers='Stations-R2K';
		tileDoqStation.myFormat='image/gif';
		tileDoqStation.myBaseURL="http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/services/ogc/wmsext.map";
		tileDoqStation.getTileUrl=CustomGetTileUrl;
		tileDoqStation.getOpacity = function() {return 1;}
	
		var gmrt_layer_Station=[tileDoqStation];
		var gmrt_hybrid_layer_Station=[bathymetry.getTileLayers()[0],tileDoqStation];
	
	//		var bathymetry_Station = new GMapType(gmrt_layer_Station, G_SATELLITE_MAP.getProjection(), "Stations", G_SATELLITE_MAP);
		var bathyhybrid_Station = new GMapType(gmrt_hybrid_layer_Station, G_SATELLITE_MAP.getProjection(), "Stations", G_SATELLITE_MAP);
		
		var tileDoqRidge2k= new GTileLayer(new GCopyrightCollection(""),1,21);
		tileDoqRidge2k.myLayers='Sites-Ridge2k';
		tileDoqRidge2k.myFormat='image/gif';
		tileDoqRidge2k.myBaseURL="http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/services/ogc/wmsext.map";
		tileDoqRidge2k.getTileUrl=CustomGetTileUrl;
		tileDoqRidge2k.getOpacity = function() {return 1;}
	
		var gmrt_layer_Ridge2k=[tileDoqRidge2k];
		var gmrt_hybrid_layer_Ridge2k=[bathymetry.getTileLayers()[0],tileDoqRidge2k];
	
	//		var bathymetry_Ridge2k = new GMapType(gmrt_layer_Ridge2k, G_SATELLITE_MAP.getProjection(), "Ridge2ks", G_SATELLITE_MAP);
		var bathyhybrid_Ridge2k = new GMapType(gmrt_hybrid_layer_Ridge2k, G_SATELLITE_MAP.getProjection(), "Sites", G_SATELLITE_MAP);
		
		var tileDoqMARGINS= new GTileLayer(new GCopyrightCollection(""),1,21);
		tileDoqMARGINS.myLayers='Sites-MARGINS';
		tileDoqMARGINS.myFormat='image/gif';
		tileDoqMARGINS.myBaseURL="http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/services/ogc/wmsext.map";
		tileDoqMARGINS.getTileUrl=CustomGetTileUrl;
		tileDoqMARGINS.getOpacity = function() {return 1;}
	
		var gmrt_layer_MARGINS=[tileDoqMARGINS];
		var gmrt_hybrid_layer_MARGINS=[bathymetry.getTileLayers()[0],tileDoqMARGINS];
	
	//		var bathymetry_MARGINS = new GMapType(gmrt_layer_MARGINS, G_SATELLITE_MAP.getProjection(), "MARGINS", G_SATELLITE_MAP);
		var bathyhybrid_MARGINS = new GMapType(gmrt_hybrid_layer_MARGINS, G_SATELLITE_MAP.getProjection(), "Sites", G_SATELLITE_MAP);
	
		var tileDoqMCS= new GTileLayer(new GCopyrightCollection(""),1,21);
		tileDoqMCS.myLayers='tracks';
		tileDoqMCS.myFormat='image/gif';
		tileDoqMCS.myBaseURL="http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/services/ogc/wmsmcs.map";
		tileDoqMCS.getTileUrl=CustomGetTileUrl;
		tileDoqMCS.getOpacity = function() {return 1;}
	
		var gmrt_layer_MCS=[tileDoqMCS];
		var gmrt_hybrid_layer_MCS=[bathymetry.getTileLayers()[0],tileDoqMCS];
	
	//		var bathymetry_MCS = new GMapType(gmrt_layer_MCS, G_SATELLITE_MAP.getProjection(), "MCS", G_SATELLITE_MAP);
		var bathyhybrid_MCS = new GMapType(gmrt_hybrid_layer_MCS, G_SATELLITE_MAP.getProjection(), "MCS", G_SATELLITE_MAP);
	
		var tileDoqSamples= new GTileLayer(new GCopyrightCollection(""),1,21);
		tileDoqSamples.myLayers='Samples-R2K';
		tileDoqSamples.myFormat='image/gif';
		tileDoqSamples.myBaseURL="http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/services/ogc/wmsext.map";
		tileDoqSamples.getTileUrl=CustomGetTileUrl;
		tileDoqSamples.getOpacity = function() {return 1;}
	
		var gmrt_layer_Samples=[tileDoqSamples];
		var gmrt_hybrid_layer_Samples=[bathymetry.getTileLayers()[0],tileDoqSamples];
	
	//		var bathymetry_Samples = new GMapType(gmrt_layer_Samples, G_SATELLITE_MAP.getProjection(), "Samples", G_SATELLITE_MAP);
		var bathyhybrid_Samples = new GMapType(gmrt_hybrid_layer_Samples, G_SATELLITE_MAP.getProjection(), "Samples", G_SATELLITE_MAP);
	
		var tileDoqVents= new GTileLayer(new GCopyrightCollection(""),1,21);
		tileDoqVents.myLayers='Vents-R2K';
		tileDoqVents.myFormat='image/gif';
		tileDoqVents.myBaseURL="http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/services/ogc/wmsext.map";
		tileDoqVents.getTileUrl=CustomGetTileUrl;
		tileDoqVents.getOpacity = function() {return 1;}
	
		var gmrt_layer_Vents=[tileDoqVents];
		var gmrt_hybrid_layer_Vents=[bathymetry.getTileLayers()[0],tileDoqVents];
	
	//		var bathymetry_Vents = new GMapType(gmrt_layer_Vents, G_SATELLITE_MAP.getProjection(), "Vents", G_SATELLITE_MAP);
		var bathyhybrid_Vents = new GMapType(gmrt_hybrid_layer_Vents, G_SATELLITE_MAP.getProjection(), "Vents", G_SATELLITE_MAP);
			
		var tileDoqTracks= new GTileLayer(new GCopyrightCollection(""),1,21);
		tileDoqTracks.myLayers='TracksRidge';
		tileDoqTracks.myFormat='image/gif';
		tileDoqTracks.myBaseURL="http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/services/ogc/wmscontrolpoints.map";
		tileDoqTracks.getTileUrl=CustomGetTileUrl;
		tileDoqTracks.getOpacity = function() {return 1;}
	
		var gmrt_layer_Tracks=[tileDoqTracks];
		var gmrt_hybrid_layer_Tracks=[bathymetry.getTileLayers()[0],tileDoqTracks];
	
		var bathyhybrid_Tracks = new GMapType(gmrt_hybrid_layer_Tracks, G_SATELLITE_MAP.getProjection(), "Tracks", G_SATELLITE_MAP);
		
		map.getMapTypes().length = 0;
		map.addMapType(bathyhybrid_Ridge2k);
		map.addMapType(bathymetry);
//		map.addMapType(bathyhybrid);
		map.addMapType(bathyhybrid_GEBCO);
		map.addMapType(bathyhybrid_Station);
		map.addMapType(bathyhybrid_Samples);
		map.addMapType(bathyhybrid_Vents);
		map.addMapType(bathyhybrid_Tracks);
		var givenmaptypes = map.getMapTypes();
		map.setMapType(givenmaptypes[0]);
	//		map.addMapType(bathymetry_mask);
	//		map.addMapType(bathyhybrid_mask);
	//		map.addMapType(G_SATELLITE_MAP);
	//		map.addMapType(G_HYBRID_MAP);
	
		// Marker support
		GEvent.addListener(map, 'click', select_point);
		GEvent.addListener(map, "maptypechanged",function() { map.clearOverlays() });
		
		// Map interfacing
	//	map.setCenter(new GLatLng(4.2,0), 2);
		map.setCenter(new GLatLng(0,-96), 2);
		var mapControl = new GMapTypeControl();
		map.addControl(mapControl);
		map.addControl(new GSmallMapControl());
		map.enableScrollWheelZoom();
	}
}

function select_point(overlay, point, bounds, core_href)
{
	if (point)
	{
		map.clearOverlays();
		
		// round lat and long as decimal degrees to three decimal places
/*		point.x = point.x*1000;
		point.y = point.y*1000;
		point.x = Math.round(point.x);
		point.y = Math.round(point.y);
		point.x = point.x/1000;
		point.y = point.y/1000;
*/
		var getVars = '?long='+point.x + "&lat=" + point.y;

		//var request = GXmlHttp.create();
		var request = new XMLHttpRequest();
		var request2 = new XMLHttpRequest();

		// Create our "tiny" marker icon
		var tinyIcon = new GIcon();
		tinyIcon.image = "../js/mm_20_red.png";
		tinyIcon.shadow = "../js/mm_20_shadow.png";
		tinyIcon.iconSize = new GSize(12, 20);
		tinyIcon.shadowSize = new GSize(21, 20);
		tinyIcon.iconAnchor = new GPoint(6, 20);
		tinyIcon.infoWindowAnchor = new GPoint(5, 1);

		request.onreadystatechange = function() {
			if(request.readyState == 4) {
				var reply = request.responseText;
				var values = reply.split("^");
				distance = values[2];
				// if distance less than 1 degree from, click point and nearest core
				var tolerance= (20-map.getZoom())/17;
				if ((distance < tolerance*tolerance*tolerance*tolerance*tolerance) || (map.getZoom() > 12 && distance < tolerance*tolerance*tolerance*tolerance) || (map.getZoom() == 15 && distance < .001) || (map.getZoom() > 15 && map.getZoom() < 18 && distance < .0006) || (map.getZoom() > 17 && map.getZoom() < 21 && distance < .00006) || (map.getZoom() > 20 && distance < .000006)) {
					var point = new GLatLng(values[0],values[1]);
					
					markerOptions = { icon:tinyIcon };
					var marker = new GMarker(point, markerOptions);
					map.addOverlay(marker);
//					var zoom_text = "<br />Zoom: <a href='#' onclick='map.setCenter(new GLatLng("+values[0]+","+values[1]+"));map.setZoom(map.getZoom()+3);return false;'>In</a> / <a href='#' onclick='map.setCenter(new GLatLng("+values[0]+","+values[1]+"));map.setZoom(map.getZoom()-3);return false;'>Out</a>";
					
					if (map.getCurrentMapType().getName() == "Samples") {
						var infoWindowHtml = "<div style='font-size:.80em;'><em>Entry ID</em>: <a target='_blank' href='http://www.marine-geo.org/tools/search/entry.php?id="+values[3]+"'>"+values[3]+"</a><br /><em>Name</em>: <a target='_blank' href='http://www.marine-geo.org/tools/search/Samples.php?data_set_uid="+values[5]+"'>" + values[4] + "</a><br /><em>Type</em>: "+values[6]+"<br /><em>Investigator</em>: "+values[7];
						for (var i=8; i<values.length; i++)
						{
							if (i%3 == 0)
								infoWindowHtml += ",<br />";
							else
								infoWindowHtml += ", ";
							infoWindowHtml += values[i];
						}
					}
					if (map.getCurrentMapType().getName() == "Stations") {
						var infoWindowHtml = "<div style='font-size:.80em;'><em>Entry ID</em>: <a target='_blank' href='http://www.marine-geo.org/tools/search/entry.php?id="+values[3]+"'>"+values[3]+"</a><br /><em>Name</em>: <a target='_blank' href='http://www.marine-geo.org/tools/search/Events.php?event_set_uid="+values[5]+"'>" + values[4] + "</a><br /><em>Type</em>: "+values[6]+values[7]+"<br /><em>Investigator</em>: "+values[8];
					}
					if (map.getCurrentMapType().getName() == "Vents") {
						var infoWindowHtml = "<div style='font-size:.80em;'><em>Feature ID</em>: <a target='_blank' href='http://www.marine-geo.org/tools/search/feature.php?feature_id="+values[3]+"'>"+values[3]+"</a><br /><em>Feature Type</em>: " + values[4];
						if (values[5] != "")
							infoWindowHtml += "<br /><a href='" + values[5]+"'>'View Image(s)</a>";
					}
//					infoWindowHtml += zoom_text;
					infoWindowHtml += "</div>";
					marker.openInfoWindowHtml(infoWindowHtml);
					GEvent.addListener(marker, 'click', function (){marker.openInfoWindowHtml(infoWindowHtml)});
				}
			}
		}
		
		request2.onreadystatechange = function() {
			if(request2.readyState == 4) {
				if (request2.responseText.indexOf('no results') == -1) {
					var lines = request2.responseText.split('\n');
					entry = lines[5].replace("entry_id = '","").replace("'","").replace(/^\s*|\s*$/g,'');
								
					markerOptions = { icon:tinyIcon };
					var marker = new GMarker(point, markerOptions);
					map.addOverlay(marker);
					
					var infoWindowHtml = "<div style='font-size:.80em;'><em>Entry ID</em>: <a target='_blank' href='http://www.marine-geo.org/tools/search/entry.php?id="+entry+"'>"+entry+"</a><br /><span id='target'><br /><br /><br /><br /></span>";
					var httpRequest;
					var type = arguments[0];  // get type of call
					if (window.XMLHttpRequest) { // Mozilla, Safari, ...
						httpRequest = new XMLHttpRequest();
						if (httpRequest.overrideMimeType) {
							httpRequest.overrideMimeType('text/xml');
						}
					}
					else if (window.ActiveXObject) { // IE
						try {
							httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
							}
						catch (e) {
							try {
								httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
							}
							catch (e) {}
						}
					}
					var data = "id="+entry;
					infoWindowHtml += "</div>";
					marker.openInfoWindowHtml(infoWindowHtml);
					GEvent.addListener(marker, 'click', function (){map.setCenter(point); marker.openInfoWindowHtml(infoWindowHtml)});
					httpRequest.open('POST', '../entry.php', true);
					httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
					httpRequest.onreadystatechange = function()
					{
						if (httpRequest.readyState == 4)
						{
							if (httpRequest.status == 200)
							{
								var theTarget = document.getElementById("target");
								if (theTarget != null) {
									theTarget.innerHTML = httpRequest.responseText;
								}
								else {
									setTimeout('document.getElementById("target").innerHTML = "'+httpRequest.responseText+'"',300);
								}
							}
						}
					};
					httpRequest.send(data);
				}
			}
		}
		
		if (map.getCurrentMapType().getName() == "Samples") {
			request.open('GET','samples_info.php'+getVars);
			request.send(null);
		}
		if (map.getCurrentMapType().getName() == "Stations") {
			request.open('GET','stations_info.php'+getVars);
			request.send(null);
		}
		if (map.getCurrentMapType().getName() == "Vents") {
			request.open('GET','vents_info.php'+getVars);
			request.send(null);
		}
		
		var z=map.getZoom();  // zoom level at which to calculate the tile
		
		var proj = map.getCurrentMapType().getProjection();
		var pt = proj.fromLatLngToPixel(point,z);
		
		var lULP = new GPoint(pt.x,(pt.y+7));
		var lLRP = new GPoint((pt.x+7),pt.y);
		
		var lUL = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lULP,z,false);
		var lLR = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lLRP,z,false);
		
		var lBbox=lUL.x+","+lUL.y+","+lLR.x+","+lLR.y; 
		
		if (map.getCurrentMapType().getName() == "Tracks") {
			request2.open('GET','http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/map/wmscontrolpoints.map&version=1.1.1&service=WMS&request=GetFeatureInfo&layers=TracksRidge&query_layers=TracksRidge&srs=EPSG:4326&transparent=TRUE&exceptions=application%2Fvnd.ogc.se_xml&feature_count=1&styles=default&width=7&height=7&x=3.5&y=3.5&radius=7&INFO_FORMAT=text/plain&bbox='+lBbox);
			request2.send(null);
		}
	}
}

function showMap(location)
{
	var ct = new GLatLng(-40,80);
	if (location == "Lau") {
		ct = new GLatLng(-21.023, -175.8);
		map.setCenter(ct,6);
	}
	if (location == "EPR") {
		ct = new GLatLng(9.6, -104);
		map.setCenter(ct,7);
	}
	if (location == "null") {
		ct = new GLatLng(0, -96);
		map.setCenter(ct,2);
	}
	if (location == "MAR") {
		ct = new GLatLng(33.58, -36.87);
		map.setCenter(ct,5);
	}
	if (location == "JdF") {
		ct = new GLatLng(47.747, -129.051);
		map.setCenter(ct,7);
	}
}