
var sitemarker;
var parkmarker;
var busnmarker;

if (GBrowserIsCompatible())
{
  var GMAP = null;
  var bounds = new GLatLngBounds();

  function setMap()
  {
    dview = 0;
    GMAP = new GMap2(document.getElementById("mainview"));
    GMAP.setUIToDefault();

    bounds.extend(sitept);
    bounds.extend(busnpt);
    
    sitemarker = new GMarker(sitept, marker1);
    GMAP.addOverlay(sitemarker);
    
    var slat = sitept.lat().toFixed(6);
    var slng = sitept.lng().toFixed(6);

    GEvent.addListener(sitemarker,"click", function()
      {
        sitemarker.openInfoWindowHtml('<center><font color=#000000><b><br/>'+stname+'</b><br/>('+slat+', '+slng+')</center>');
      });
    GEvent.addListener(sitemarker,"mouseover", function()
      {
        sitemarker.openInfoWindowHtml('<center><font color=#000000><b><br/>'+stname+'</b><br/>('+slat+', '+slng+')</center>');
      });

    busnmarker = new GMarker(busnpt, marker5);
    GMAP.addOverlay(busnmarker);
    var blat = busnpt.lat().toFixed(6);
    var blng = busnpt.lng().toFixed(6);
    GEvent.addListener(busnmarker,"click", function()
      {
        if(logo.length > 0)
          busnmarker.openInfoWindowHtml('<center><font color=#000000><b>'+bsname+'</b><br/>('+blat+', '+blng+')<br/><img src="'+logo+'"></center>');
        else
          busnmarker.openInfoWindowHtml('<center><br/><font color=#000000><b>'+bsname+'</b><br/>('+blat+', '+blng+')</center>');
      });
    GEvent.addListener(busnmarker,"mouseover", function()
      {
        if(logo.length > 0)
          busnmarker.openInfoWindowHtml('<center><font color=#000000><b>'+bsname+'</b><br/>('+blat+', '+blng+')<br/><img src="'+logo+'"></center>');
        else
          busnmarker.openInfoWindowHtml('<center><br/><font color=#000000><b>'+bsname+'</b><br/>('+blat+', '+blng+')</center>');
      });

    if(parkpt.lat() != 0 && parkpt.lng() != 0)
    {
      bounds.extend(parkpt);
      parkmarker = new GMarker(parkpt, marker8);
      GMAP.addOverlay(parkmarker);
      var plat = parkpt.lat().toFixed(6);
      var plng = parkpt.lng().toFixed(6);
      GEvent.addListener(parkmarker,"click", function()
        {
          parkmarker.openInfoWindowHtml('<center><font color=#000000><b>Parking for<br/>'+stname+'</b><br/>('+plat+', '+plng+')</center>');
        });
      GEvent.addListener(parkmarker,"mouseover", function()
        {
          parkmarker.openInfoWindowHtml('<center><font color=#000000><b>Parking for<br/>'+stname+'</b><br/>('+plat+', '+plng+')</center>');
        });
    }
    GMAP.setCenter(bounds.getCenter());
    var zoom = GMAP.getBoundsZoomLevel(bounds) - 1;
    GMAP.setZoom(zoom);
    
    getDirections();
  }

  var GEO = new GClientGeocoder();
  var GDIR = new GDirections();

  var reasons = [];
  reasons[G_GEO_SUCCESS]              = "Success";
  reasons[G_GEO_MISSING_ADDRESS]      = "Missing Address: The address was either missing or had no value.";
  reasons[G_GEO_UNKNOWN_ADDRESS]      = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
  reasons[G_GEO_UNAVAILABLE_ADDRESS]  = "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
  reasons[G_GEO_BAD_KEY]              = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
  reasons[G_GEO_TOO_MANY_QUERIES]     = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
  reasons[G_GEO_SERVER_ERROR]         = "Server error: The geocoding request could not be successfully processed.";
  
  var route;

  GEvent.addListener(GDIR, "error", function()
    {
      var code = GDIR.getStatus().code;
      var errtext = reasons[code];
      var pt = [];
      pt[0] = new GLatLng(points[ptindex].lat, points[ptindex].lng);
      pt[1] = new GLatLng(points[ptindex+1].lat, points[ptindex+1].lng);
//      genErrorHTML(pt, errtext);
      GMAP.addOverlay(route = new GPolyline(pt, '#ff0000', 16));
//      drawStep();
    });

  GEvent.addListener(GDIR, "load", function()
    {
//      document.getElementById('descript').innerHTML = 'OK';
//      return;

      var status = GDIR.getStatus();
      if(status.code == G_GEO_SUCCESS)
      {
        GMAP.addOverlay(route = GDIR.getPolyline());
        showDirections(GDIR.getRoute(0));
      }
//      drawStep();
    });

  var phtml = '<table style=width:100%"><tr><td colspan=4><div style="background:white"><center><a href=# onclick="genPrintPage()">Printable directions</a></center></div></td></tr></table>';
  var dhtml = '';
  var chtml = '<tr><td style="font-style:italic" colspan=4>Directions generated by Google Maps</td></tr>';
  var pwin = null;

  function showDirections(grt)
  {
    var tdist = grt.getDistance().meters / 1000;
    var tdur = Math.round(grt.getDuration().seconds / 60);
    
    document.getElementById('titlecell').innerHTML =
      '<table class=noborder style="border-collapse:collapse;width:100%">'+
      '<tr><td class=noborder style="text-align:center">'+
      '<div style="font-size:12pt">Distance = '+tdist+' km, Duration = '+tdur+' min</div></td>'+
      '<td class=noborder style="width:200;text-align:right">'+
      '<input type=button id=detailedbtn class=buttonblue style="width:200" onclick="javascript:showDetailed()" value="SHOW DETAILED DIRECTIONS"></td></tr>';

    if(dhtml.length == 0)
    {
      dhtml = '<table style="width:100%">';

      var nsteps = grt.getNumSteps();

      dhtml +=  '<tr><td colspan=2 class=tdlh>From "'+stname+
                '" to "'+bsname+'"</td><td class=tdrh>'+tdist+'&nbsp;km</td><td class=tdrh>'+tdur+'&nbsp;min</td></tr>';

      for(var i = 0; i < nsteps; i++)
      {
        var step  = grt.getStep(i);
        var pt    = step.getLatLng();
        var dist  = step.getDistance().meters / 1000;
        var dur   = Math.round(step.getDuration().seconds / 60);
        var descr = step.getDescriptionHtml();
        var n     = i + 1;
        var m     = i + 1;

        dhtml +=  '<tr><td class=tdr><a name="mark'+m+'"><a href=# onclick="setPtMarker('+pt.lat()+','+pt.lng()+')">'+n+
                  '</a></td><td class=tdl>'+descr+'</td><td class=tdr>'+dist+
                  '&nbsp;km</td><td class=tdr>'+dur+'&nbsp;min</td></tr>';
      }
      dhtml += '</table>';
    }
  }

  var ptmarker;

  function setPtMarker(lat, lng)
  {
    if(ptmarker)
      GMAP.removeOverlay(ptmarker);
    ptmarker = new GMarker(new GLatLng(lat, lng), marker9);
    GMAP.addOverlay(ptmarker);
    GMAP.setZoom(13);
    GMAP.panTo(ptmarker.getPoint());
  }


  function showDetailed()
  {
    if(dview == 0)
    {
      document.getElementById('descript').innerHTML = phtml+dhtml+phtml;
      document.getElementById('detailedbtn').value = 'SHOW DESCRIPTION';
      dview = 1;
    }
    else
    {
      document.getElementById('descript').innerHTML = descr;
      document.getElementById('detailedbtn').value = 'SHOW DETAILED DIRECTIONS';
      dview = 0;
    }
  }

  function genPrintPage()
  {
    if(pwin != null)
      pwin.close();
    var closelink = '<center><a href="javascript:window.opener=null;window.close();">Close window</a></center>';
    pphtml =  '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN" "http://www.w3.org/TR/html4/loose.dtd">'+
              '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" style="height:100%; width:100%;">'+
              '<head><title>Hidden Canada print route</title>'+
              '<meta http-equiv=content-type content="text/html; charset=UTF-8"/>'+
              '<meta http-equiv=X-UA-Compatible content=IE=EmulateIE7 />'+
              '<meta name=description content="Hidden Canada print route"/>'+
              '<style type=text/css>@import url("./styles/mainstyle.css");</style>'+
              '</head><body><table>'+dhtml+chtml+closelink+'</table></body></html>';
    pwin = window.open('', 'pwindow');
    pwin.document.write(pphtml);
    pwin.focus();
  }

  function getDirections()
  {
    var opts = {};
    var p1;
    if(parkpt.lat() != 0 && parkpt.lng() != 0)
      p1 = parkpt;
    else
      p1 = sitept;
    var query = 'from: ' + p1.lat() + ', ' + p1.lng() + ' to: ' + busnpt.lat() + ', ' + busnpt.lng();
    opts.travelMode = G_TRAVEL_MODE_DRIVING;
    opts.avoidHighways = true;
    GDIR.load(query, {options:opts, getPolyline:true, getSteps:true});
    document.getElementById('titlecell').innerHTML = '<center><b>STAND BY...'
  }
  
}
else
{
  alert("Sorry, the Google Maps API is not compatible with this browser");
}


