
var EARTH_RADIUS_EQUATOR = 6378140.0;
var RADIAN = 180 / Math.PI;

function calcLatLong(longitude, lat, distance, bearing) 
{
	 var b = bearing / RADIAN;
	 var lon = longitude / RADIAN;
	 var lat = lat / RADIAN;
	 var f = 1/298.257;
	 var e = 0.08181922;
		
	 var R = EARTH_RADIUS_EQUATOR * (1 - e * e) / Math.pow( (1 - e*e * Math.pow(Math.sin(lat),2)), 1.5);	
	 var psi = distance/R;
	 var phi = Math.PI/2 - lat;
	 var arccos = Math.cos(psi) * Math.cos(phi) + Math.sin(psi) * Math.sin(phi) * Math.cos(b);
	 var latA = (Math.PI/2 - Math.acos(arccos)) * RADIAN;

	 var arcsin = Math.sin(b) * Math.sin(psi) / Math.sin(phi);
	 var longA = (lon - Math.asin(arcsin)) * RADIAN;

	 return new GLatLng (latA, longA);
}

function initialize() 

{
	if (GBrowserIsCompatible()) 
	{

		var map = new GMap2(document.getElementById("map"));
		map.setCenter(new GLatLng(37.4419, -122.1419), 13);
		map.addControl(new GSmallMapControl());
		GEvent.addListener(map, 'click', function(overlay, latlng) {
			var lat = latlng.lat();
			var lng = latlng.lng();

			var width = 1000; //meters
			var radius = (Math.sqrt (2 * (width * width))) / 2;
			
			var polygon = new GPolygon(
							 [
							 calcLatLong(lng, lat, radius, 45),
							 calcLatLong(lng, lat, radius, 135),
							 calcLatLong(lng, lat, radius, -135),
							 calcLatLong(lng, lat, radius, -45),
							 calcLatLong(lng, lat, radius, 45)
							 ], "#f33f00", 2, 1, "#ff0000", 0.2);

			map.addOverlay(polygon);
		});
	}
}

