var map;
var gInitialZoom = 1;

// Please set gMaxWidth before calling KMLparser. This is used to define
// the maximum width of the popup window.
var gMaxWidth = 300;
var gMinZoomForLabel = 1;

// Mapserver layer
var map_path_level1 = "/var/www/dev/services/coml/www.coml.org/projects_map/coml.map";
var map_path_level2 = "/var/www/dev/services/coml/www.coml.org/projects_map/coml.map";
//var gUrlMapserver = "http://seamap.env.duke.edu/cgi-bin/mapserv?map=" + map_path;
//var gUrlMapserver = "http://seamap.env.duke.edu/cgi-bin/mapserv";
var gUrlMapserver = "http://green.env.duke.edu/cgi-bin/mapserv";
var gSeamapLayerOpacity = 1.0;


// Load Google Map
function load() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());

		map.setCenter(new GLatLng(0, 0), gInitialZoom, G_SATELLITE_MAP);

		// Set up layer from Mapserver
		load_project_areas(map);

		// Set up label markers from KML
		CoML.load(map, 'legend_local', 'legend_global');

		// Prepare global projects
		// Add custom contorl that load map image.
		//gDistanceControl = new DistanceControl();
		//map.addControl(gDistanceControl);
	}
}


/*****
Set up layer from Mapserver
*****/
function load_project_areas(map) {
	// GCopyright doesn't matter unless the overlay is added to the map as a new maptype.
	var copyright = new GCopyright(1,
	   new GLatLngBounds(new GLatLng(23,122),new GLatLng(46,151) ),
	    1, "OBIS-SEAMAP");

	var copyrightCollection = new GCopyrightCollection('COML');
	copyrightCollection.addCopyright(copyright);

	var myTileLayer = new GTileLayer(copyrightCollection, 1, 16);
	myTileLayer.getTileUrl = myGetTileUrl;
	myTileLayer.getOpacity = function() { return gSeamapLayerOpacity; }
	myTileLayer.isPng = function() { return true; }

	var myTileOverlay = new GTileLayerOverlay(myTileLayer);

	map.addOverlay( myTileOverlay );
}

/***** Mapserver layer definition *****/
// Return URL to get a tile image from Mapserver.
function myGetTileUrl(tile, zoom) {

    // max zoom plus 1
    var projection = new GMercatorProjection(18);

    // Four vertices location in pixcel in GPoint coordinates
    var p1 = new GPoint(tile.x*256,tile.y*256);
    var p2 = new GPoint(p1.x+256,p1.y+256);

    // latitude/longitude of four vertices location in decimal degree
    var latlng1 = projection.fromPixelToLatLng(p1,zoom);
    var latlng2 = projection.fromPixelToLatLng(p2,zoom);

    var lat1 = latlng1.lat();
    var lon1 = latlng1.lng();
    var lat2 = latlng2.lat();
    var lon2 = latlng2.lng();

    // binding box for mapserver
    var minlat = Math.min(lat1,lat2);
    var minlon = Math.min(lon1,lon2);
    var maxlat = Math.max(lat1,lat2);
    var maxlon = Math.max(lon1,lon2);
	var bbox = minlon + "," + minlat + "," + maxlon + "," + maxlat;

	var mapext = minlon + "+" + minlat + "+" + maxlon + "+" + maxlat;

	if (zoom > 1) {
		var url = gUrlMapserver + "?map=" + map_path_level2;
	} else {
		var url = gUrlMapserver + "?map=" + map_path_level1;
	}

	var mapserver_request = url + "&mode=map&mapsize=256+256";
	mapserver_request += "&mapext=" + mapext;

	// Add random parameter, so the image is not cached by browser
	//var random_parm = (new Date()).format('mmddyyyyhhnnss');
    //return mapserver_request + "&" + random_parm;
    return mapserver_request;
}
