/* Functions to display a map, with markers and optional coordinate input
*/

function createMarker(loc) {
  var marker; 
  var opts= {};
  if (loc.icon!=null) {
    opts.icon= specialIcon[loc.icon];
  }
  marker = new GMarker( new GLatLng( loc.lat, loc.lon), opts);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(loc.ldesc);
  }); 
  return marker;
}

function loadmap( width, height, north, east, south, west, maxzoom) {
  if (GBrowserIsCompatible()) {
// var locationinfo_html = "";

    var m = document.getElementById("map");
    m.style.width = width;
    m.style.height = height;
    var cen = new GLatLng( (north+south)/2, (east+west)/2);
    // Add fudge factor to marker extremes
    var fudgev= (north - south)/10;
    var fudgeh= (east - west)/10;
    south= south - fudgev;
    north= north + fudgev;
    west = west - fudgeh;
    east = east + fudgeh;
    var bnds= new GLatLngBounds(new GLatLng(south,west), new GLatLng(north,east));
    var map = new GMap2(m);
    // Allow border for controls - doesn't seem to work!
    var innersz= new GSize( width-200, height-100);
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    var zm= map.getBoundsZoomLevel(bnds, innersz);
    if (maxzoom < zm) {
      zm= maxzoom;
    }
    map.setCenter( cen, zm, G_HYBRID_MAP);
    for (var i = 0; i < markers.length; i++) {
      if (typeof(markers[i])!="undefined")
	map.addOverlay( createMarker(markers[i]));
    }
  }
  return map;
}

function loadCoordIP(map, srcTable, srcLat, srcLon, srcSpan) {
  if (srcLat != "" && srcLon != "" && srcSpan != "") {
    var oldPt= new GLatLng(srcLat, srcLon);
    map.setCenter( oldPt, parseInt(srcSpan), G_HYBRID_MAP);
    map.addOverlay(new GMarker(oldPt));
  }
  GEvent.addListener(map, "dblclick", function(marker, point) {
	map.clearOverlays();
	map.addOverlay(new GMarker(point));
	document.getElementById(srcTable + "_lat").value = point.lat().toString();
	document.getElementById(srcTable + "_lon").value = point.lng().toString();
	document.getElementById(srcTable +"_span").value = map.getZoom().toString();
  });
  GEvent.addListener(map, "zoomend", function() {
    if (document.getElementById(srcTable + "_lat").value != "" 
		&& document.getElementById(srcTable + "_lon").value != "")
    document.getElementById(srcTable + "_span").value = map.getZoom().toString();
  });
}
