function customGetTileUrl(coord, zoom) {
  var f = "http://sailing.mit.edu/tiles/" + zoom + "/" + coord.x + "_" + coord.y + ".png";
  return f;
}

function myispng() {
  return true;
}

function myisopaque() {
  return 1.0;
}


function mercator(latlng) {
  var x = (180 + latlng.lng()) / 360.0;
  var y = 0.5 - 0.5 * Math.log(Math.tan(Math.PI / 4 + Math.PI * latlng.lat() / 360)) / Math.PI;
  return new GPoint(x,y);
}
	  
function demercator(point) {
  var lng = 360.0 * point.x - 180.0;
  var lat = 2.0 * Math.atan(Math.exp(2.0 * Math.PI * (0.5 - point.y))) - Math.PI / 2.0;
  lat *= 180 / Math.PI;
  return new GLatLng(lat, lng);
}
  
function getTileUrl(latlng, zoom) {
  var numtiles = Math.pow(2, zoom);
  var merc = mercator(latlng);
  var tilex = Math.floor(merc.x * numtiles);
  var tiley = Math.floor(merc.y * numtiles);
  var str = "http://wmbr.org/tiles/" + zoom + "/" + tilex + "_" + tiley + ".png";
  return str;
}

function createTMarker(aLatLng, aName, anIcon) {
  var marker = new GMarker(aLatLng, { icon:anIcon });
  GEvent.addListener(marker, "click", function() {  
    marker.openInfoWindowHtml('<b>' + aName + '<br />MBTA Station Entrance</b>');  
  });
  return marker;
}

function createLetterIcon(letter) {
  var anIcon = new GIcon();
  anIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";  
  anIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
  anIcon.iconSize = new GSize(20, 34);
  anIcon.shadowSize = new GSize(37, 34);
  anIcon.iconAnchor = new GPoint(9, 34);
  anIcon.infoWindowAnchor = new GPoint(9, 2);
  anIcon.infoShadowAnchor = new GPoint(18, 25);
  return anIcon;
}

function initializeGMap() {
  if (GBrowserIsCompatible()) {
    var centerLatLng = new GLatLng(42.360240, -71.0485);
    var mooringLatLng = new GLatLng(42.360716, -71.047050);
    var pavilionLatLng = new GLatLng(42.358448, -71.087764);
    var aquariumTLatLng = new GLatLng(42.359800, -71.051636);
    var bwmLatLng = new GLatLng(42.360344, -71.049159);

    var blueTIcon = new GIcon();
    blueTIcon.image = "http://sailing.mit.edu/bluewater/blue_T.png";
    blueTIcon.shadow = "http://sailing.mit.edu/bluewater/T_shadow.png";
    blueTIcon.iconSize = new GSize(18, 18);
    blueTIcon.shadowSize = new GSize(28, 18);
    blueTIcon.iconAnchor = new GPoint(9, 9);
    blueTIcon.infoWindowAnchor = new GPoint(12, 4);

    var sailIcon = new GIcon();
    sailIcon.image = "http://sailing.mit.edu/bluewater/sail_icon.png";
    sailIcon.shadow = "http://sailing.mit.edu/bluewater/sail_shadow.png";
    sailIcon.iconSize = new GSize(30, 34);
    sailIcon.shadowSize = new GSize(39, 34);
    sailIcon.iconAnchor = new GPoint(12, 31);
    sailIcon.infoWindowAnchor = new GPoint(17, 18);

    var pavIcon = new GIcon();
    pavIcon.image = "http://sailing.mit.edu/bluewater/burgee_small.png";
    pavIcon.shadow = "http://sailing.mit.edu/bluewater/burgee_small_shadow.png";
    pavIcon.iconSize = new GSize(21, 31);
    pavIcon.shadowSize = new GSize(32, 31);
    pavIcon.iconAnchor = new GPoint(1, 30);
    pavIcon.infoWindowAnchor = new GPoint(15, 6);

    var infoIconM = createLetterIcon("M");

    var bwmMarker = new GMarker(bwmLatLng, { icon:infoIconM });
    var aqMarker1 = createTMarker(aquariumTLatLng, 'Aquarium', blueTIcon);
    var pavMarker = new GMarker(pavilionLatLng, { icon:pavIcon });
    var sailMarker = new GMarker(mooringLatLng, { icon:sailIcon });

    var map = new GMap2(document.getElementById("map"));
    map.setCenter(centerLatLng, 15);
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    map.setMapType(G_NORMAL_MAP);


    var minzoom = 8;
    var maxzoom = 17;
    var copyright = new GCopyright(1, new GLatLngBounds(new GLatLng(39.72663, -74.16886),
                                   new GLatLng(44.86702, -64.95033)), minzoom, "(Public Domain)");
    var copyrightCollection = new GCopyrightCollection('Theodric Technologies');
    copyrightCollection.addCopyright(copyright);

    var tilelayers = [new GTileLayer(copyrightCollection, minzoom, maxzoom)];
    tilelayers[0].getTileUrl = customGetTileUrl;
    tilelayers[0].isPng = myispng;
    tilelayers[0].getOpacity = myisopaque;

    var custommap = new GMapType(tilelayers, new GMercatorProjection(maxzoom+1), "Nautical",
                                 {errorMessage:"No data available"});
    map.addMapType(custommap);


    map.addOverlay(aqMarker1);
    map.addOverlay(pavMarker);
    map.addOverlay(bwmMarker);
    map.addOverlay(sailMarker);

    GEvent.addListener(sailMarker, "click", function() {  
      sailMarker.openInfoWindowHtml('<b>Nevermore\'s Mooring</b><br /><img src="nevermore_moored3.jpg" />');  
    });

    GEvent.addListener(pavMarker, "click", function() {  
      pavMarker.openInfoWindowHtml('<b>MIT Sailing Pavilion</b>');  
    });

    GEvent.addListener(bwmMarker, "click", function() {  
      bwmMarker.openInfoWindowHtml('<div style="text-align:center"><span style="font-size:14"><b>Marina Entrance</b></span><br /><img src="/bluewater/bwm_small2.jpg" /><br />Entrance Gate to <br /><a href="http://www.bostonwaterboatmarina.com/" target="_blank">Boston Waterboat Marina</a></div>');  
    });
  }
}


