var map = null;
var activateGMap = function(){
// Set up Google map object
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("mapclient"));

// Copyright tagging
	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,21);
	
// Set up bathmetry WMS (the background layer we use beneath all layers).
	tileDoq.myLayers='topo'; // This is the name of the layer we use for bathymetry
	tileDoq.myFormat='image/jpeg';
	tileDoq.myBaseURL='http://www.marine-geo.org/services/wms?'; // This is where our mapserver is
	tileDoq.getTileUrl=CustomGetTileUrl;
	tileDoq.getOpacity = function() {return 1.0;}

// Set a variable equal to that layer
	var gmrt_layer=[tileDoq];
// Take the same layer except with the country labels (used in Google Maps' "Hybrid" layer) placed on top of that layer
	var gmrt_hybrid_layer=[tileDoq,G_HYBRID_MAP.getTileLayers()[1]];

// Create a new Google map type based on two layers described above
	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);
	
// This is our seafloor features layer
	var tileDoqGEBCO= new GTileLayer(new GCopyrightCollection(""),1,21);
	tileDoqGEBCO.myLayers='GEBCOGazetteer'; // This layer used in our wmsext.map file is called GEBCOGazetteer in this case
	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"; // Note that we used our mapserver's url to load a new .map file
	tileDoqGEBCO.getTileUrl=CustomGetTileUrl;
	tileDoqGEBCO.getOpacity = function() {return 1;}

// Take the layer from the bathymetry tile set and add the seafloor feature's tile set over it
	var gmrt_hybrid_layer_GEBCO=[bathymetry.getTileLayers()[0],tileDoqGEBCO];

// Create a new google maptype based on the line above
	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-Seismic';
	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_hybrid_layer_Station=[bathymetry.getTileLayers()[0],tileDoqStation];

	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_hybrid_layer_Ridge2k=[bathymetry.getTileLayers()[0],tileDoqRidge2k];

	var bathyhybrid_Ridge2k = new GMapType(gmrt_hybrid_layer_Ridge2k, G_SATELLITE_MAP.getProjection(), "Ridge2000", 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_hybrid_layer_MARGINS=[bathymetry.getTileLayers()[0],tileDoqMARGINS];

	var bathyhybrid_MARGINS = new GMapType(gmrt_hybrid_layer_MARGINS, G_SATELLITE_MAP.getProjection(), "MARGINS", G_SATELLITE_MAP);

	var tileDoqMCS= new GTileLayer(new GCopyrightCollection(""),1,21);
//	tileDoqMCS.myLayers='tracks';
	tileDoqMCS.myLayers='TracksSeismic';
	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.myBaseURL="http://www.marine-geo.org/exe/mapserv?map=/system/link/server/apache/htdocs/marine-geo/services/ogc/wmscontrolpoints.map";
	tileDoqMCS.getTileUrl=CustomGetTileUrl;
	tileDoqMCS.getOpacity = function() {return 1;}

	var gmrt_hybrid_layer_MCS=[bathymetry.getTileLayers()[0],tileDoqMCS];

	var bathyhybrid_MCS = new GMapType(gmrt_hybrid_layer_MCS, G_SATELLITE_MAP.getProjection(), "Track", G_SATELLITE_MAP);

	var tileDoqSamples= new GTileLayer(new GCopyrightCollection(""),1,21);
	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_hybrid_layer_Samples=[bathymetry.getTileLayers()[0],tileDoqSamples];

	var bathyhybrid_Samples = new GMapType(gmrt_hybrid_layer_Samples, G_SATELLITE_MAP.getProjection(), "Samples", G_SATELLITE_MAP);
	
	map.getMapTypes().length = 0;
		map.addMapType(bathyhybrid_MCS);
		map.addMapType(bathymetry);
		map.addMapType(bathyhybrid_GEBCO);
		map.addMapType(bathyhybrid_Station);
		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();

		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(22, 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= (18-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);
					
					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];
					}
					infoWindowHtml += "</div>";
					marker.openInfoWindowHtml(infoWindowHtml);
					GEvent.addListener(marker, 'click', function (){map.setCenter(point); marker.openInfoWindowHtml(infoWindowHtml)});
				}
			}
		}
		if (map.getCurrentMapType().getName() == "Stations") {
			request.open('GET','stations_info.php'+getVars);
			request.send(null);
		}
		
		request2.onreadystatechange = function() {
			if(request2.readyState == 4) {
				if (request2.responseText.indexOf('no results') == -1) {
					var lines = request2.responseText.split('\n');
					var is_processed_line = false;
//					if (lines[2].indexOf("_proc_lines") != -1)
//						is_processed_line = true;
//					entry = lines[2].replace("Layer '","").replace("_anno","").replace("_proc_lines","").replace("_proc_lines_anno","").replace("'","");
					entry = lines[4].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 /><div id='utig'><br /></div><div id='fielddata'><br /></div></span>";
//					if (is_processed_line)
//						infoWindowHtml += "<br /><a href='http://www.ig.utexas.edu/sdc/lists_html/segyfiles_proc.php?cruise="+entry.toLowerCase()+"'>Seismic processed data at ASP-UTIG</a><br /><a href='http://www.marine-geo.org/tools/search/SeismicField.php?id="+entry+"'>Seismic field data at ASP-LDEO</a>";
					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?seismic=true', 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);
				}
			}
		}
		
		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() == "Track") {
			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=TracksSeismic&query_layers=TracksSeismic&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);
		}
	}
}