var item_form = null;
var zoom_level = 16;
var map = null;
var marker = null;

window.addEvent('load', function() {

  // check for a form and the item_lat, item_lng values
  item_form = document.forms['item_edit'];
  if (item_form) {
    if (parseInt(item_form.item_lat.value) && item_form.item_lat.value.length &&
        parseInt(item_form.item_lat.value) && item_form.item_lat.value.length) {
      var point = new GLatLng(parseFloat(item_form.item_lat.value),
                              parseFloat(item_form.item_lng.value));
      setLocation(point);
    }

    $('geocode_item').addEvent('click', function(e) {
      e = new Event(e).stop();
      if (item_form.item_street.value.length &&
          item_form.item_suburb.value.length &&
          item_form.item_postcode.value.length) {
        var address = item_form.item_street.value+','+item_form.item_suburb.value+','+
                      item_form.item_postcode.value+',QLD,Australia';
        geocodeAddress(address);
      }
      else {
    	  alert('Please enter your address, suburb and postcode');
      }
    });
  }
});

function initalizeMap()
{
  map = new GMap2(document.getElementById("gps_map"));
  map.setUIToDefault();
}


function geocodeAddress(address)
{
  if (!map) {
    initalizeMap();
  }
  var geocoder = new GClientGeocoder();
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        alert(address + " not found");
      } else {
        setLocation(point);
        marker.openInfoWindowHtml(address);
      }
    }
  );
}

function setLocation(point)
{
  if (!map) {
    initalizeMap();
  }
  map.setCenter(point, zoom_level);
  if (!marker) {
    marker = new GMarker(point, {draggable: true});
    map.addOverlay(marker);
    GEvent.addListener(marker, 'dragend', updateLatLng);
  }
  else {
    marker.setLatLng(point);
  }
  updateLatLng(point);
}

function setStaticLocation(point)
{
  if (!map) {
    initalizeMap();
  }
  map.setCenter(point, zoom_level);
  if (!marker) {
    marker = new GMarker(point);
    map.addOverlay(marker);
    GEvent.addListener(marker, 'dragend', updateLatLng);
  }
  else {
    marker.setLatLng(point);
  }
  updateLatLng(point);
}

function updateLatLng(point)
{
  if (item_form) {
    item_form.item_lat.value = point.y;
    item_form.item_lng.value = point.x;
  }
}
