var map;
var container;
var opacity = 0.4;
var circle;
var centerMarker;
var circleUnits;
var circleRadius;
var zoom = 13;
var centerPoint;
var radii = new Array(1, 3, 5);
var radii_colors = new Array('#00ff00', '#ffff00', '#ffcccc');

if (navigator.geolocation) {
	navigator.geolocation.getCurrentPosition(parseNavigatorPosition);
} else if (google.loader.ClientLocation) {	
	centerPoint = new GLatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
} else {
	centerPoint = new GLatLng(30.448378, -91.152020);
}

function parseNavigatorPosition(location) {
	centerPoint = new GLatLng(location.coords.latitude, location.coords.longitude);
	doLoad();
}

function load() {
	doLoad();
}

function doLoad() {
	if (GBrowserIsCompatible()) {
		container = document.getElementById("mapDiv");
		map = new GMap2(container, {draggableCursor:"crosshair"});		
		
		map.setCenter(centerPoint, zoom);

		//map.addControl(new GScaleControl());
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.enableGoogleBar();
		map.enableScrollWheelZoom();
		map.disableDoubleClickZoom();
		
		GEvent.addListener(map, 'dblclick', function (overlay, latlng) {
			map.setCenter(latlng);
			drawCircle();
		});

		//var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(0, 620));
		//map.addControl(new MStatusControl({position:pos}));
	}
}

function drawCircle() {
	map.clearOverlays();
	doDrawCircle();
}

function doDrawCircle(){
	i = 0;
	while (i < radii.length) {
		circleRadius = radii[i];
	
		var center = map.getCenter();
		var bounds = new GLatLngBounds();
	
		var circlePoints = Array();
	
		with (Math) {
			var d = circleRadius/3963.189;	// radians
			var lat1 = (PI/180)* center.lat(); // radians
			var lng1 = (PI/180)* center.lng(); // radians
	
			for (var a = 0 ; a < 361 ; a++ ) {
				var tc = (PI/180)*a;
				var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
				var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
				var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
				var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
				circlePoints.push(point);
				bounds.extend(point);
			}
			if (d < 1.5678565720686044) {
				circle = new GPolygon(circlePoints, '#4f4f4f', 1, 0.8, radii_colors[i], .15);
			}
			else {
				circle = new GPolygon(circlePoints, '#4f4f4f', 1, 0.8);	
			}
			circle.id = i;
			map.addOverlay(circle); 
		}
		i++;
	}
	map.setZoom(map.getBoundsZoomLevel(bounds));
	centerMarker = new GMarker(map.getCenter(), {draggable:false});
	map.addOverlay(centerMarker);
	GEvent.addListener(centerMarker, 'dragend', function(overlay, latlng) {
		map.setCenter(latlng);
		drawCircle();
	});
}