/*
	Fri 11 December 2009 12:31:30 slm

	Styled GMap text to avoid white text in pronav
*/

var map ;
var marker ;
var bMarkerInfoDisplayed ;
var zoom ;
var centre ;


// sInfoTexts are set by calling into function setInfoText
// from ASP, having obtained the phrase from VBS
var sInfoText_drag ;
var sInfoText_incompatible ;
var sGoogleError ;
var sGooglePlaceNotFound ;


// address is set to the latlng object when asking for reverse geocode (lat/lon to place - to get country)
var address ;


function setText ( sDrag , sIncompat , sGError , sGPNF )
	{
		// alert ( sDrag ) ;
		// alert ( sIncompat ) ;
		// alert ( sGError ) ;
		// alert ( sGPNF ) ;

		sInfoText_drag = sDrag ;
		sInfoText_incompatible = sIncompat ;
		sGoogleError = sGError ;
		sGooglePlaceNotFound = sGPNF ;
	}


// not sure what this function is for
function other()
	{
		var obj = document.thisform;

		if ((obj.title.value) == "Other") {
			(obj.xname.style.visibility = "visible");
		} else {
			(obj.xname.value = "");
			(obj.xname.style.visibility = "hidden");
		}
	}	



function testJS()
	{
		alert("hello" );
	}

function centreMap()
	{
		initialize();
		alert("centreMap" );
	}


function mapClick(point,src,overlay)
	{
		// alert("map clicked" );
		var latlon ;
		latlon = map.fromContainerPixelToLatLng(point);
		var lat;
		var lon;
		lat=latlon.lat();
		lon=latlon.lng();

		var s ;
		s = "lat: " + lat + " , lon: " + lon ;
		// alert ( s ) ;
		map.addOverlay(new GMarker ( new GLatLng ( lat,lon) , {draggable: true} ) );
	}

	

function markerDragStart()
	{
		map.closeInfoWindow();
	}


function markerClick()
	{
		// map.setCenter(marker.getLatLng(), 14);
		bMarkerInfoDisplayed = false ;
		markerDragEnd() ;
	}

function showSearch(response)
	{
		while ( true ) // with break at end, so it's actually do...while false
		{
			 if ( !response )
			 {
			   alert( sGoogleError );
			   break ;
			 }

			switch ( response.Status.code )
			{
			case 200 :
				{
					var place ;
					place = response.Placemark[0];
					var point ;
					point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);

					map.setCenter(point, 13);
					map.setUIToDefault();
					marker = new GMarker ( point , {draggable: true} ) ;

					addMarker();
					markerDragEnd();
				}
				break ;
			case 602 :
				{
				   alert ( sGooglePlaceNotFound ) ;
				}
				break ;
			default :
				 {
				   alert( sGoogleError );
				   break ;
				 }
			 }

			 break ;
		}

	}


function searchMap (  )
	{
		var sSearch = document.getElementById("searchTerm").value;
		// alert (sSearch) ;
		map.clearOverlays();
		var geocoder = new GClientGeocoder();
		geocoder.getLocations( sSearch , showSearch );
	}



function showAddress(response)
	{
		while ( true ) // with break at end, so it's actually do...while false
		{
			 if ( !response )
			 {
			   alert( sGoogleError );
			   break ;
			 }

			switch ( response.Status.code )
			{
			case 200 :
				{
					var revCountryField = document.getElementById("revCountry") ;
					revCountryField.value = response.Placemark[0].AddressDetails.Country.CountryNameCode ;
					var revGeoAddressField = document.getElementById("revGeoAddress") ;
					revGeoAddressField.value = response.Placemark[0].address ;
				}
				break ;
			case 602 :
				{
				   alert ( sGooglePlaceNotFound ) ;
				}
				break ;
			default :
				 {
				   alert( sGoogleError );
				   break ;
				 }
			 }

			 break ;
		}
	}

function reverseGeocode(latlon)
	{
		address = latlon;
		// now get country back for this latlon
		var geocoder = new GClientGeocoder();
		geocoder.getLocations(latlon,this.showAddress);
	}



function test ( )
	{
		// force error (undeclared variable); get debug break
		// x = y ;
		var latField = document.getElementById("lat") ;
		var lonField = document.getElementById("lon") ;
		var zoomField = document.getElementById("zoom") ;

		var latlon = map.getCenter();
		latField.value = latlon.lat();
		lonField.value = latlon.lng();
		zoomField.value = map.getZoom() ;
	}


function setExistingPoint ( )
	{
		var latField = document.getElementById("lat") ;
		var lonField = document.getElementById("lon") ;
		var zoomField = document.getElementById("zoom") ;
		if ( latField != null && lonField != null )
		{
			// alert("fields not null");
			var latValue = latField.value ;
			var lonValue = lonField.value ;
			if ( latValue != 999 && lonValue != 999 )
			{
				// force break
				// y = x ;

				var point ;
				point = new GLatLng(latValue, lonValue);

				marker = new GMarker ( point , {draggable: true} ) ;
				addMarker();
				var sReport ;
				var z = parseInt(zoomField.value) ;
				// sReport = "Centring/zooming map: " + point + "," + z
				// alert(sReport) ;
				// map.setCenter doesn't convert a string as second 
				// parameter to the required integer
				map.setCenter ( point , z );
				// alert("Centring/zooming done") ;
			}
		}
	}


function markerDragEnd()
	{
		// force break
		// y = x ;
		var latField = document.getElementById("lat") ;
		var lonField = document.getElementById("lon") ;
		var zoomField = document.getElementById("zoom") ;

		var latlon = marker.getLatLng();
		latField.value = latlon.lat();
		lonField.value = latlon.lng();
		zoomField.value = map.getZoom() ;

		if ( !bMarkerInfoDisplayed )
		{
			bMarkerInfoDisplayed = true ;
			var sInfo = "<p style='color:black' >" + sInfoText_drag + "</p>" ;
			marker.openInfoWindowHtml(sInfo,100) ;
		}

		reverseGeocode(latlon);
	}


function addMarker()
	{
		GEvent.addListener(marker, "dragstart", this.markerDragStart ) ;
		GEvent.addListener(marker, "dragend", this.markerDragEnd ) ;
		GEvent.addListener(marker, "click", this.markerClick ) ;

		map.addOverlay(marker);
	}


function initializeMap (  )
	{
	/*
		// thought this might fix the memory leak, but no...
		// GUnload();
		{
			// var s = VBSCallTest() ;
			// alert(s) ;
		}
	*/

		bMarkerInfoDisplayed = false ;
		if (GBrowserIsCompatible())
		{
			map = new GMap2(document.getElementById("map_canvas"));
			// map.enableGoogleBar();

			map.setCenter(new GLatLng(0, 0), 2);
			map.setUIToDefault();

			// GEvent.addListener(map, "click", function() {  alert("You clicked the map.");});

			// this doesn't work here, we need the rest of the form displayed
			//setExistingPoint();
		}
		else
		{
			alert(sInfoText_incompatible);
		}
	}


function cleanupMap()
	{
		GUnload();
	}
