var geocoder = new GClientGeocoder();
var defaultLat = 37.770308;
var defaultLon = -122.437820;
var setLat = defaultLat;
var setLon = defaultLon;
var lastMarker;

function initMap(lat, lon, defaultCenterLatitude, defaultCenterLongitude) {
    map = new GMap(document.getElementById("map"));
    map.addControl(new GLargeMapControl()); // added
    map.addControl(new GMapTypeControl()); // added
    map.centerAndZoom(new GPoint(defaultCenterLongitude, defaultCenterLatitude), 4);
    GEvent.addListener(map, 'click', function(overlay, point) {
    if (overlay) map.removeOverlay(overlay);
    else if (point) {
      placeMarker(point.y, point.x);
      closeMap();
//      map.recenterOrPanToLatLng(point);
    }
  });
}

function placeMarker(markerLat, markerLon) {
  setLat = markerLat;
  setLon = markerLon;
  var point = new GPoint(setLon, setLat);
  var marker = new GMarker(point);
  map.addOverlay(marker);
  map.centerAndZoom(point, 4);
}

function closeMap() {
  document.getElementById("latitude").value = setLat;
  document.getElementById("longitude").value = setLon;
  document.getElementById("address").value = "";
  unshade(1);
}

function findLocation(addressEncoded, lat, lon, showMarker, defaultCenterLatitude, defaultCenterLongitude) {
  address = Base64.decode(addressEncoded);
  if(showMarker) initMap(lat, lon, defaultCenterLatitude, defaultCenterLongitude);
//  alert("address = " + address + ", lat = " + lat + ", lon = " + lon);
  if(((address === undefined) || (address == null) || ("" == address)) && ((lat != null) && (lon != null)) && (lat != "") && (lon != "")) {
//    alert("trying to placeMarker at lat = " + lat + ", lon = " + lon);
    if(showMarker) placeMarker(lat, lon);
  }
  else if((address !== undefined) && (address != null) && !isEmpty(address)){ 
  //  alert("trying to getLocation for address = " + address);
    geocoder.getLocations(address, function (response) {

      if (!response || response.Status.code != 200) {
        $("#address_alert").css("display","inline");
//alert("Failed to geocode address");
      } else {
        $("#address_alert").css("display","none");
        place = response.Placemark[0];
//alert("place.Point.coordinates[0] = " + place.Point.coordinates[0] + ", place.Point.coordinates[1] = " + place.Point.coordinates[1]);
        setLat = place.Point.coordinates[1];
        setLon = place.Point.coordinates[0];
        document.getElementById("latitude").value = setLat;
        document.getElementById("longitude").value = setLon;
        if(showMarker) placeMarker(setLat, setLon);
      }
    });
  }
//  else alert("doing nothing?!");
}

function verifyAddress(address) {
  if((address !== undefined) && (address != null)){ 

    geocoder.getLocations(address, function (response) {

      if (!response || response.Status.code != 200) {
        alert("Failed to geocode address = " + address);
      } else {
        place = response.Placemark[0];
        setLat = place.Point.coordinates[1];
        setLon = place.Point.coordinates[0];
        document.getElementById("latitude").value = setLat;
        document.getElementById("longitude").value = setLon;
        alert(address + " resolves to (" + setLat + ", " + setLon + ")");
      }
    });
  }
}