// -----------------------------------------------------------------------
// Javascript module for gmaps 
//
// -----------------------------------------------------------------------

var map;
//var latlngs = [];
// var bDrawLines = false;
var InfoWindowOpen=-1;
var DataOK = true;
var http = getXMLHTTLRequest();
var Markerptr = 0;
var myMarkers = [];

  // ------------------------------------------------------------
  // Prototype for an location
  //
  function locationdef(id,ptype,lat,long,name)
  {
    this.id = id;
    this.ptype = ptype;
    this.latitude = lat;
    this.longitude = long;
    this.name = name;
  }

  function AddLocation(id,ptype,lat,long,name)
  {
     myMarkers[Markerptr++] = new locationdef(id,ptype,lat,long,name);
  }

  function getXMLHTTLRequest()
  {
    var req = false;

    try
    {
      req = new XMLHttpRequest();
    }
    catch(err1)
    {
      try 
      {
        req = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch(err2)
      {
        try
        {
          req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(err3)
        {
          req = false;
        }
      }
    } 
  
    return req;
  }

function GetPlaceDetailsXML()
{
  if (http.readyState == 4)  
  {
    if (http.status == 200)
    {
      var placeDetails = http.responseXML;
      var txt = '';

      var tag = null
      //tag = placeDetails.getElementsByTagName("name")[0];
      //if (tag != null)
      //{
      //   // txt = tag.childNodes[0].nodeValue + ":";
      //}

      //tag = placeDetails.getElementsByTagName("image")[0];
      //if (tag != null)
      //{
      //   // txt = txt + '<img src="' + tag.childNodes[0].nodeValue + '.jpg" align="left" hspace="5">';
      //}

      tag = placeDetails.getElementsByTagName("details")[0];
      if (tag != null)
      {
         txt = txt + tag.childNodes[0].nodeValue;
      }

      tag = placeDetails.getElementsByTagName("error")[0];
      if (tag != null)
      {
         txt = txt + tag.childNodes[0].nodeValue;
      }

      if (txt == '')
      {
        txt = 'Unable to load information';
      }

      var old = document.getElementById('itemInfo').firstChild;
      var txt = document.createTextNode(txt);
      document.getElementById('itemInfo').replaceChild(txt, old);
    }
    else
    {
      document.getElementById('itemInfo').innerText = 'Error: ' + http.status;
    }
  }
}

function findID(gmid)
{
  var mymrkr=-1;
  for (var m in myMarkers)
  {
    if (gmid == myMarkers[m].id)
    {
      mymrkr=m;
      break;
    }
  }
  return mymrkr;
}


function findLinkID(gmid)
{
  var mymrkr=-1;
  for (var m in GridLinks)
  {
    if (gmid == GridLinks[m].id)
    {
      mymrkr=m;
      break;
    }
  }
  return mymrkr;
}


function showLinkInfo(gmid)
{
  var mymrkr=findLinkID(gmid);
  if (mymrkr!=-1)
  {
    if (InfoWindowOpen!=gmid)
    {
      hideinfo();
    }

    var latlng=new GLatLng(GridLinks[mymrkr].latitude, GridLinks[mymrkr].longitude);
    var mydiv = document.createElement('div');
    mydiv.innerHTML=GridLinks[mymrkr].name + '<br><br><ul>' +
                 '<li><a href="gmapareas.htm?MAP=' + GridLinks[mymrkr].id + '">Click here to view this map section.</a></li></ul>';
    map.openInfoWindowHtml(latlng, mydiv);
    InfoWindowOpen = gmid;
  }
}

function showinfo(gmid)
{
  var mymrkr=findID(gmid);
  if (mymrkr!=-1)
  {
    if (InfoWindowOpen!=gmid)
    {
      hideinfo();
    }
    var latlng=new GLatLng(myMarkers[mymrkr].latitude, myMarkers[mymrkr].longitude);

    var mydiv = document.createElement('div');

    //var s = new String(myMarkers[mymrkr].id);

    //if (s.substr(0,1) == 'M')
    if (myMarkers[mymrkr].ptype == 99)
    {
      mydiv.innerHTML=myMarkers[mymrkr].name + ' Castle<br><br>Castle not documented on this site.<br><br><a href="#" onclick="ZoomIn(\'' + gmid + '\');">Zoom in on this location</a>';
    }
    else if (myMarkers[mymrkr].ptype == 98)
    {
      mydiv.innerHTML=myMarkers[mymrkr].name + '<br><br>Abbey not documented on this site.<br><br><a href="#" onclick="ZoomIn(\'' + gmid + '\');">Zoom in on this location</a>';
    }
    else
    {
      mydiv.innerHTML=myMarkers[mymrkr].name + '<br><br><ul>' +
                   '<li><a href="#" onclick="ZoomIn(\'' + gmid + '\');">Zoom in on this location</a></li>'+
                   '<li><a href="#" onclick="moreinfo(\'' + gmid + '\');">Click here for more information</a></li></ul>';

    }

    map.openInfoWindowHtml(latlng, mydiv);
    InfoWindowOpen=gmid;

    // AJAX link to get the details 
    if (gmkey!=0)
    {
      var myUrl = 'http://www.timeref.com/placedetsxml.php?id=' + myMarkers[mymrkr].id;

      http.open("GET", myUrl, true);
      http.onreadystatechange = GetPlaceDetailsXML;
      http.send(null);
    }
  }
}

function ZoomOut()
{
  map.returnToSavedPosition();
  document.getElementById('zoomoutlink').style.display="none";
  document.getElementById('zoominlink').style.display="inline";
}

function fullmap()
{
    map.savePosition();
    map.setCenter(new GLatLng(55, -2), 6);
    map.setMapType(G_NORMAL_MAP);
    return false;
}

function ZoomIn(m)
{
  var mymrkr=findID(m);
  if (mymrkr != -1)
  {
    hideinfo();
    map.savePosition();
    map.setCenter(new GLatLng(myMarkers[mymrkr].latitude, myMarkers[mymrkr].longitude), 18);
    map.setMapType(G_HYBRID_MAP);
    return false;
  }
}

function hideinfo()
{
  if (InfoWindowOpen!=-1)
  {
    map.closeInfoWindow();
    InfoWindowOpen=-1;
  }
}

function addCentreMarker(lat, long, gmid)
{
  var location = new GLatLng(lat,long);
  var myicon = new GIcon();
  myicon.iconSize = new GSize(16,16);
  myicon.iconAnchor = new GPoint(5,5);
  myicon.infoWindowAnchor = new GPoint(5,5);
  myicon.image='centre.gif';
  var marker = new GMarker(location,myicon);
  map.addOverlay(marker);

  GEvent.addListener(marker, 'mouseover', function() { showLinkInfo(gmid) } );
}

function addAMarker(lat, long, gmid, ptype)
{
  var location = new GLatLng(lat, long);

  if ((ptype == 0) || (ptype == 1) || (ptype == 2) || (ptype == 98) || (ptype == 99))
  {
    var myicon = new GIcon();
    myicon.iconSize = new GSize(16,16);
    myicon.iconAnchor = new GPoint(5,5);
    myicon.infoWindowAnchor = new GPoint(5,5);

    if (ptype == 0) myicon.image='castle100.gif';
    if (ptype == 1) myicon.image='cath100.gif';
    if (ptype == 2) myicon.image='abbey100.gif';
    if (ptype == 98) myicon.image='minor2.gif';
    if (ptype == 99) myicon.image='minor.gif';

    var marker = new GMarker(location,myicon);
  }
  else
  {
    var marker = new GMarker(location);
  }
  map.addOverlay(marker);

  GEvent.addListener(marker, 'mouseover', function() { showinfo(gmid) } );
}


function go()
{
  if (mapnumber!=-1)
  {
    var mymrkr=findLinkID(mapnumber);
    if (mymrkr==-1) mymrkr = 0;
    loadMap(GridLinks[mymrkr].latitude, GridLinks[mymrkr].longitude, GridLinks[mymrkr].zoom, G_PHYSICAL_MAP /*G_NORMAL_MAP*/);
  }
  else
  {
    // position the center at default location
    loadMap(54, -2, 6, G_PHYSICAL_MAP);
  }

  if (DataOK == true)
  {
    for (var m in myMarkers)
    {
      addAMarker(myMarkers[m].latitude, myMarkers[m].longitude,myMarkers[m].id,myMarkers[m].ptype);
//      if (bDrawLines)
//      {
//        latlngs.push(new GLatLng(myMarkers[m].latitude, myMarkers[m].longitude));
//      }
    }


//    if (bDrawLines)
//    {
//      var polyline = new GPolyline(latlngs, 'FF6633', 15, 0.5);
//      map.addOverlay(polyline);
//    }

    if (mapnumber!=-1)
    {
      // draw the grids
      var pt = 0;
      var ptlatlngs = [];
      var firstpt;

      for (var m in GridBoxes)
      {
        if (pt == 0)
        { 
           ptlatlngs = [];
           firstpt = new GLatLng(GridBoxes[m].latitude, GridBoxes[m].longitude);
        }

        ptlatlngs.push(new GLatLng(GridBoxes[m].latitude, GridBoxes[m].longitude));
  
        if (pt == 3)
        {
          ptlatlngs.push(firstpt);
          var boxpolyline = new GPolyline(ptlatlngs, 'FF6633', 3, 0.7);
          map.addOverlay(boxpolyline);
          pt = 0;
        }
        else
        {
          pt++;
        }
      }

      // draw the centre points
      for (var m in GridLinks)
      {
        if (GridLinks[m].id != mapnumber)
        {
          addCentreMarker(GridLinks[m].latitude, GridLinks[m].longitude, GridLinks[m].id);
        }
      }
    }
  }

  // ----
  if (gmkey==0)
  {
    var old = document.getElementById('itemInfo').firstChild;
    var txt = document.createTextNode('Automatic information not available');
    document.getElementById('itemInfo').replaceChild(txt, old);
  }
}

function moreinfo(gmid)
{
  var mymrkr=findID(gmid);
  if (mymrkr!=-1)
  {
    location.href = "hpl" + myMarkers[mymrkr].id + ".htm";
  }
}




