  var map;
  var geocoder;
  var centerChangedLast;
  var reverseGeocodedLast;
  var currentReverseGeocodeResponse;

  function initialize() {
    var latlng = new google.maps.LatLng(51.5476447, -0.0601675);
    var myOptions = {
      zoom: 13,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
	  navigationControl: true,
	  navigationControlOptions: google.maps.NavigationControlStyle.SMALL,
  	  mapTypeControl: false,
  	  scaleControl: true

    };
    map = new google.maps.Map(document.getElementById("googleMap"), myOptions);
    geocoder = new google.maps.Geocoder();


    setupEvents();
    centerChanged();
  }

  function setupEvents() {
    reverseGeocodedLast = new Date();
    centerChangedLast = new Date();

	//get address every 1 sec
	/*
    setInterval(function() {
      if((new Date()).getSeconds() - centerChangedLast.getSeconds() > 1) {
        if(reverseGeocodedLast.getTime() < centerChangedLast.getTime())
          reverseGeocode();
      }
    }, 1000);
	*/

    google.maps.event.addListener(map, 'zoom_changed', function() {
      //document.getElementById("zoom_level").innerHTML = map.get_zoom();
    });

    google.maps.event.addListener(map, 'center_changed', centerChanged);

    google.maps.event.addDomListener(document.getElementById('crosshair'),'dblclick', function() {
       map.set_zoom(map.get_zoom() + 1);
    });

  }

  function getCenterLatLngText() {
    return map.getCenter().lat() +', '+ map.getCenter().lng();
  }

  function centerChanged() {
    centerChangedLast = new Date();
    var latlng = getCenterLatLngText();
	document.getElementById('latlng').value = latlng;
    //document.getElementById('formatedAddress').innerHTML = '';
    currentReverseGeocodeResponse = null;
  }

  function reverseGeocode() {
    reverseGeocodedLast = new Date();
    geocoder.geocode({latLng:map.getCenter()},reverseGeocodeResult);
  }

  function reverseGeocodeResult(results, status) {
    currentReverseGeocodeResponse = results;
    if(status == 'OK') {
      if(results.length == 0) {
        document.getElementById('address').value = 'None';
      } else {
        document.getElementById('address').value = results[0].formatted_address;
      }
    } else {
      document.getElementById('address').value = 'Error';
    }
  }


  function geocode() {
	var error='';
	if (document.submitform.address.value=="") error=error+'- the address\r\n';
	if (document.submitform.location.value=="") error=error+'- the area\r\n';
	if (document.submitform.postcode.value=="") error=error+'- the postcode\r\n';
	if (error) {
		error='Please enter:\r\n'+error;
		alert (error);
	} else {
    	var fullAddress = document.submitform.address.value+', '+document.submitform.location.value+', '+document.submitform.postcode.value+', UK';
		geocoder.geocode({
		  'address': fullAddress,
		  'partialmatch': true}, geocodeResult);
	}
  }

  function geocodeResult(results, status) {
    if (status == 'OK' && results.length > 0) {
      map.fitBounds(results[0].geometry.viewport);
		document.getElementById('located').value = 1;
    } else {
      alert("Geocode was not successful for the following reason: " + status);
    }
  }
