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,16);
	
	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,16);
	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,16);
	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,16);
	tileDoqStation.myLayers='Stations-World';
	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,16);
	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(), "Ridge2000", G_SATELLITE_MAP);
	
	var tileDoqMARGINS= new GTileLayer(new GCopyrightCollection(""),1,16);
	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(), "MARGINS", G_SATELLITE_MAP);

	var tileDoqMCS= new GTileLayer(new GCopyrightCollection(""),1,16);
	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,16);
	tileDoqSamples.myLayers='samples-world';
	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 tileDoqTracks= new GTileLayer(new GCopyrightCollection(""),1,21);
	tileDoqTracks.myLayers='TracksGMRT';
	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);
	
	var tileDoqGrids= new GTileLayer(new GCopyrightCollection(""),1,21);
	tileDoqGrids.myLayers='GridsGMRT';
	tileDoqGrids.myFormat='image/gif';
	tileDoqGrids.myBaseURL="http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/services/ogc/wmscontrolpoints.map";
	tileDoqGrids.getTileUrl=CustomGetTileUrl;
	tileDoqGrids.getOpacity = function() {return 1;}

	var gmrt_layer_Grids=[tileDoqGrids];
	var gmrt_hybrid_layer_Grids=[bathymetry.getTileLayers()[0],tileDoqGrids];

	var bathyhybrid_Grids = new GMapType(gmrt_hybrid_layer_Grids, G_SATELLITE_MAP.getProjection(), "Grids", G_SATELLITE_MAP);
	
 	map.getMapTypes().length = 0;
	map.addMapType(bathymetry);
	map.addMapType(bathymetry_mask);
	map.addMapType(bathyhybrid_Tracks);
	map.addMapType(bathyhybrid_Grids);
	map.addMapType(bathyhybrid_GEBCO);
//		map.addMapType(bathyhybrid_mask);
//		map.addMapType(G_SATELLITE_MAP);
//		map.addMapType(G_HYBRID_MAP);
	var givenmaptypes = map.getMapTypes();
	map.setMapType(givenmaptypes[0]);
	
	// Marker support
	GEvent.addListener(map, 'click', select_point);
	GEvent.addListener(map, "maptypechanged",function() { map.clearOverlays() });
	
	// Map interfacing
	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();
		var request3 = 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>: "+values[3]+"<br /><em>Feature Type</em>: " + values[4];
					}
//					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>Expedition 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 /><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?gmrt=1', 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);
				}
			}
		}
		request3.onreadystatechange = function() {
			if(request3.readyState == 4) {
				if (request3.responseText.indexOf('no results') == -1) {
					var lines = request3.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>Compilation 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 /></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?grid=1', 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=TracksGMRT&query_layers=TracksGMRT&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);
		} else if (map.getCurrentMapType().getName() == "Grids") {
			request3.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=GridsGMRT&query_layers=GridsGMRT&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);
			request3.send(null);
		}
	}
}