 //<![CDATA[

    var map;
    var start;
    var marker;

    function dbg(msg)
    {
	//window.console.debug(msg)
	alert(msg)
    }
  
    function load() {
      if (GBrowserIsCompatible()) {
        var opts = { onMarkersSetCallback: processMarkers, resultList : G_GOOGLEBAR_RESULT_LIST_SUPPRESS, suppressInitialResultSelection : true, showOnLoad: true};
        map = new GMap2(document.getElementById("map"), {googleBarOptions: opts});
        map.addControl(new GSmallMapControl());
        start = new GLatLng(latitude, longitude);
        //map.setCenter(start, zoom);
        map.addControl(new GMapTypeControl());       
        map.setMapType(G_HYBRID_MAP);
      }
    }

    function locateAddress(defaultAddress) {
      var address = defaultAddress;
      if (document.getElementById("address") != null) address = document.getElementById("address").value;

      if (marker)
      {
        map.removeOverlay(marker)
	marker = null
      }

      var geocoder = new GClientGeocoder();
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              //alert(address + " not found");
		map.setCenter(start, 4);
            } else {
              map.setCenter(point, zoom);
              marker = new GMarker(point);
              map.addOverlay(marker);
              //   marker.openInfoWindowHtml(address);
              start = point;
            }
          }
        );
      }
    }

    function processMarkers(markers) {
      // note: markers is an array of LocalResult
      var table = document.createElement('table');
      var tbody = document.createElement('tbody');
      table.appendChild(tbody);
      document.getElementById("results").appendChild(table);
      getDirections(markers, tbody, 0);
    }

    function getDirections(markers, tbody, num) {
      var lat = markers[num].result.lat;
      var lng = markers[num].result.lng;
      var dir = new GDirections();
      GEvent.addListener(dir, "load", function() {
        var tr = document.createElement('tr');
        var td = document.createElement('td');
        td.appendChild(document.createTextNode(markers[num].result.titleNoFormatting));
        tr.appendChild(td);
        var td = document.createElement('td');
        td.innerHTML = dir.getDistance().html;
        tr.appendChild(td);
        tbody.appendChild(tr);
        if ((num+1) < markers.length) getDirections(markers, tbody, (num+1));
      });
      dir.load("from: " + start.lat() + "," + start.lng()  + " to: " + lat + "," + lng);
    }

    function eventZoom(inputObj)
    {
      GEvent.addListener(map, "zoomend", function(oldLevel, newLevel){
         inputObj.value = newLevel;
      });
    }

    function eventMarker(oLat, oLng)
    {
      GEvent.addListener(marker, "drag", function(){
        oLat.value = marker.getLatLng().lat();
        oLng.value = marker.getLatLng().lng();
      });

    }

    function setDraggableMarker()
    {
      var point = start;

      if (marker)
      {
        point = marker.getLatLng();
        map.removeOverlay(marker)
        marker = null
      }else{
      	map.setCenter(point, zoom);
      }
      marker = new GMarker(point, {icon:G_DEFAULT_ICON, draggable: true});
      map.addOverlay(marker);

      marker.enableDragging();

    }

    function setMarker()
    {
      var point = start;
      map.setCenter(point, zoom);
      marker = new GMarker(point); 
      map.addOverlay(marker);

    }

    //]]>