view markers.js @ 176:d68111417b8e gmap2

Fix opening of infowindow.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 11 Mar 2014 22:34:26 +0200
parents a1a725a9541d
children 662e8b5ec9a5
line wrap: on
line source

// $Id: markers.js 2284 2009-09-21 12:47:20Z jeskko $
//
// List of marker types
//
var pmapMarkerTypes =
[
  ["Guilds",    "guild"],
  ["PCities",   "pcity"],
  ["Shrines",   "shrine"],
  ["Areas",     "default"],
];


var pmapMMgr;
var pmapAreas = [];
var pmapMarkers = [];
var pmapMIndex = 0;
var pmapBIndex = 0;
var pmapBuiltin = [];
var pmapSideBuiltinHTML, pmapSidePublicHTML, pmapSidePrivateHTML;
var pmapInfoWindow;


function pmapMyClick(i)
{
  pmap.panTo(pmapMarkers[i].getPosition());
  setTimeout("pmapShowInfo("+ i +")", 1000);
}


function pmapShowInfo(i)
{
  google.maps.event.trigger(pmapMarkers[i], "click");
}


function pmapCreateMarker(point,name,html,icon,type,continent,mclass)
{
  var marker = new google.maps.Marker(
  {
    position: point,
    icon: icon,
  });

  google.maps.event.addListener(marker, "click", function()
  {
    pmapInfoWindow.setContent("<div class=\"infowin\">"+html+"</div>");
    pmapInfoWindow.open(pmap, this);
  });

  if (mclass == "builtin")
  {
    pmapBuiltin[pmapBIndex] = new Array(2);
    pmapBuiltin[pmapBIndex][0] = type;
    pmapBuiltin[pmapBIndex][1] = continent;
    pmapSideBuiltinHTML += '<a class="'+continent+'" id="marker'+pmapBIndex+'" href="javascript:pmapMyClick('+ pmapMIndex +')">'+ name +'</a>';
    pmapBIndex++;
  }

  if (mclass == "private") pmapSidePrivateHTML += '<a href="javascript:pmapMyClick(' + pmapMIndex + ')">' + name + '</a><br>';
  if (mclass == "public") pmapSidePublicHTML += '<a href="javascript:pmapMyClick(' + pmapMIndex + ')">' + name + '</a><br>';

  pmapMarkers[pmapMIndex++] = marker;
  return marker;
}


function pmapCreateMarkerType(m, mclass)
{
  var type = m["type"];

  if (type == "")
    type = "default";

  if (name.indexOf('FERRY') == 0)
    type = "ferry";

  var ppos = pmapMapCoordsToLatLng(new google.maps.Point(m["x"] * 2 + 1, m["y"] * 2 + 1), 7);
  var marker = pmapCreateMarker(ppos, m["name"], m["html"], pmapIcons[type], type, m["continent"], mclass);

  if (pmapAreas[type] == undefined)
    pmapAreas[type] = [];

  pmapAreas[type].push(marker);
}


function pmapAddMarkers(mlist, minzoom, maxzoom)
{
  if (mlist)
    pmapMMgr.addMarkers(mlist, minzoom, maxzoom);
}


function pmapInitializeMarkers()
{
  pmapMMgr = new MarkerManager(pmap);
  google.maps.event.addListener(pmapMMgr, 'loaded', pmapLoadMarkers);
}


function pmapLoadMarkers()
{
  pmapInfoWindow = new google.maps.InfoWindow;
  //
  // Parse regular markers from JSON
  //
  XDownloadUrl("markers.json", function(data, responseCode)
  {
    var markers = JSON.parse(data);
    pmapSideBuiltinHTML = "";
    pmapSidePublicHTML = "";
    pmapSidePrivateHTML = "";

    for (var nid = 0; nid < markers.length; nid++)
    {
      pmapCreateMarkerType(markers[nid], "builtin");
    }

    pmapAddMarkers(pmapAreas["default"], 7, 11);
    pmapAddMarkers(pmapAreas["guild"],   6, 11);
    pmapAddMarkers(pmapAreas["shrine"],  7, 11);
    pmapAddMarkers(pmapAreas["ferry"],   4, 11);
    pmapAddMarkers(pmapAreas["city"],    4, 11);

    pmapAddMarkers(pmapAreas["pcity"],   8, 11);
    pmapAddMarkers(pmapAreas["fort"],    8, 11);
    pmapMMgr.refresh();

    document.getElementById("sidecontent").innerHTML = pmapSideBuiltinHTML;
  });

  //
  // Parse tradelane markers from another JSON
  //
  XDownloadUrl("tradelane.json", function(data,responseCode)
  {
    var markers = JSON.parse(data);

    for (var nid = 0; nid < markers.length; nid++)
    {
      pmapCreateMarkerType(markers[nid], "tradelane");
    }

    pmapAddMarkers(pmapAreas["tradelane"], 5, 11);
    pmapMMgr.refresh();
  });

  //
  // Create GMap polylines from tradelane line data
  //
  XDownloadUrl("troverlay.json", function(data,responseCode)
  {
    var lines = JSON.parse(data);

    // Go through array of line elements
    for (var nid = 0; nid < lines.length; nid++)
    {
      var points = lines[nid];
      var coords = [];

      // Create polyline points
      for (var npt = 0; npt < points.length; npt++)
      {
        var pt = points[npt];
        coords.push(pmapMapCoordsToLatLng(new google.maps.Point(pt["x"] * 2 + 1, pt["y"] * 2 + 1), 7));
      }

      // Create new polyline and add it to map overlay
      var poly = new google.maps.Polyline({
        path: coords,
        strokeColor: "#ffffff",
        strokeWeight: 1,
        strokeOpacity: 0.7
      });
      
      poly.setMap(pmap);
    }
  });


  //
  // Create map control elements
  //
  var str = "";
  var n = 0;
  for (var i = 0; i < pmapContinents.length; i++)
  {
    var q = pmapContinents[i];
    if (q != null)
    {
      var c = q[0];
      str += "<span id=\"sp"+c+"\"><a href=\"javascript:pmapToggleVisContinent('"+c+"')\">"+c+"</a></span>\n";
      if (n == 2) str += "<br />\n";
      n++;
    }
  }	

  str += "<span id=\"spall_c\"><a href=\"javascript:pmapToggleVisContinent('all_c')\">All</a></span>\n";

  str += "<br /><br />\n";

  n = 0;
  for (var i = 0; i < pmapMarkerTypes.length; i++)
  {
    var q = pmapMarkerTypes[i];
    if (q != null)
    {
      var c = q[1];
      str += "<span id=\"sp"+c+"\"><a href=\"javascript:pmapToggleVisType('"+c+"')\">"+pmapMarkerTypes[i][0]+"</a></span>\n";
      if (n == 2) str += "<br />\n";
      n++;
    }
  }	

  str += "<span id=\"spall_t\"><a href=\"javascript:pmapToggleVisType('all_t')\">All</a></span>\n";

  document.getElementById("controls").innerHTML = str;

  pmapSetVisContinent("all_c", true);
  pmapSetVisType("all_t", true);
  pmapUpdateVisible();
}


//
// Map menu / sidebar control code
//
var markerVisStates = [];


function pmapSetVisState(c, show)
{
  markerVisStates[c] = show;
  document.getElementById("sp" + c).style.background = show ? "white" : "red";
}


function pmapUpdateVisible()
{
  for (var i = 0; i < pmapBuiltin.length; i++)
  {
    var show = markerVisStates[pmapBuiltin[i][0]] && markerVisStates[pmapBuiltin[i][1]];
    document.getElementById("marker" + i).style.display = show ? "block" : "none";
  }
}


function pmapSetVisContinent(c, show)
{
  pmapSetVisState(c, show);
  if (c == "all_c")
  {
    for (var i = 0; i < pmapContinents.length; i++)
    {
      var q = pmapContinents[i];
      if (q != null)
        pmapSetVisState(q[0], show);
    }
  }
}


function pmapSetVisType(c, show)
{
  pmapSetVisState(c, show);
  if (c == "all_t")
  {
    for (var i = 0; i < pmapMarkerTypes.length; i++)
    {
      var q = pmapMarkerTypes[i];
      if (q != null)
        pmapSetVisState(q[1], show);
    }
  }
}


function pmapToggleVisContinent(c)
{
  var first = false;

  if (c != "all_c")
  {
    for (var i = 0; i < pmapContinents.length; i++)
    {
      var q = pmapContinents[i];
      if (q != null)
        if (markerVisStates[pmapBuiltin[i][0]])
        first = true;
    }

    if (first)
    {
      pmapSetVisContinent("all_c", false);
      pmapSetVisContinent(c, true);
    }
  }

  if (!first)
  {
    pmapSetVisContinent(c, !markerVisStates[c]);
  }

  pmapUpdateVisible();
}


function pmapToggleVisType(c)
{
  pmapSetVisType(c, !markerVisStates[c]);
  pmapUpdateVisible();
}