function preparePolygon() {
	var polyOptions = {
		path: polyPoints,
		strokeColor: "#000000",
		strokeOpacity: 0.8,
		strokeWeight: 1,
		fillColor: "#ffb987",
	fillOpacity: 0.35};
	polyShape = new google.maps.Polygon(polyOptions);
	polyShape.setMap(map);
}
function addLatLng(point) {
	if(Points.length > 3) {
		alert("U kunt maximaal 4 posities opgegeven.");
		return false;
	}
	if(polyShape.getMap() == null) {
		preparePolygon()
	}

	polyPoints = polyShape.getPath();
	polyPoints.insertAt(polyPoints.length, point.latLng);

	//Create an array of latlngs. polyPoints can't be used because it is an MVC object.
	Points.push(point.latLng);
	setMarker(point.latLng);
	calculateArea(Points);
}
function setMarker(point) {
	i = Points.length - 1;
	Marker[i] = new google.maps.Marker({
		position: point,
		draggable: true,
		map: map
	});
	Marker[i].num = i;
	google.maps.event.addListener(Marker[i], 'mouseup', setMarkerPosition);
	calculateArea(Points);
}
function setMarkerPosition() {
	point = this.getPosition();
	Points[this.num] = point;

	polyPoints = polyShape.getPath();
	polyPoints.removeAt(this.num)
	polyPoints.insertAt(this.num, point);

	calculateArea(Points);
}

function calculateArea(points) {
	l = points.length;
	s = "";
	for(i = 0 ; i < l ; i++) {
		s = s + points[i].lat() + "," + points[i].lng() + "\n";
	}

	$(coordsField).val(s);

	gob("roofArea").value='';
	if(points.length > 2) {
		var areaMeters2=PlanarPolygonAreaMeters2(points);
		if(areaMeters2>1000000.0) areaMeters2=SphericalPolygonAreaMeters2(points);
		gob("roofArea").value=Areas(areaMeters2.toFixed(2));
	}
}
function PlanarPolygonAreaMeters2(points) {
	var a=0.0;
	for(var i=0;i<points.length;++i)
	{var j=(i+1)%points.length;
		var xi=points[i].lng()*metersPerDegree*Math.cos(points[i].lat()*radiansPerDegree);
		var yi=points[i].lat()*metersPerDegree;
		var xj=points[j].lng()*metersPerDegree*Math.cos(points[j].lat()*radiansPerDegree);
		var yj=points[j].lat()*metersPerDegree;
	a+=xi*yj-xj*yi;}
	return Math.abs(a/2.0);
}
function SphericalPolygonAreaMeters2(points) {
	var totalAngle=0.0;
	//alert(points[0]);
	for(i=0;i<points.length;++i)
	{var j=(i+1)%points.length;
		var k=(i+2)%points.length;
	totalAngle+=Angle(points[i],points[j],points[k]);}
	var planarTotalAngle=(points.length-2)*180.0;
	var sphericalExcess=totalAngle-planarTotalAngle;
	if(sphericalExcess>420.0)
	{totalAngle=points.length*360.0-totalAngle;
	sphericalExcess=totalAngle-planarTotalAngle;}
	else if(sphericalExcess>300.0&&sphericalExcess<420.0) {
		sphericalExcess=Math.abs(360.0-sphericalExcess);
	}
	return sphericalExcess*radiansPerDegree*earthRadiusMeters*earthRadiusMeters;
}
function Angle(p1,p2,p3) {
	var bearing21=Bearing(p2,p1);
	var bearing23=Bearing(p2,p3);
	var angle=bearing21-bearing23;
	if(angle<0.0) angle+=360.0;
	return angle;
}
function Bearing(from,to) {
	var lat1=from.lat()*radiansPerDegree;
	var lon1=from.lng()*radiansPerDegree;
	var lat2=to.lat()*radiansPerDegree;
	var lon2=to.lng()*radiansPerDegree;
	var angle=-Math.atan2(Math.sin(lon1-lon2)*Math.cos(lat2),Math.cos(lat1)*Math.sin(lat2)-Math.sin(lat1)*Math.cos(lat2)*Math.cos(lon1-lon2));
	if(angle<0.0) angle+=Math.PI*2.0;
	angle=angle*degreesPerRadian;
	return angle;
}

function Areas(areaMeters2) {
	var areaHectares=areaMeters2/meters2PerHectare;
	var areaKm2=areaMeters2/metersPerKm/metersPerKm;
	var areaFeet2=areaMeters2*feetPerMeter*feetPerMeter;
	var areaMiles2=areaFeet2/feetPerMile/feetPerMile;
	var areaAcres=areaMiles2*acresPerMile2;
	//return areaMeters2.toPrecision(4)+' m&sup2; / '+areaHectares.toPrecision(4)+' hectares / '+areaKm2.toPrecision(4)+' km&sup2; / '+areaFeet2.toPrecision(4)+' ft&sup2; / '+areaAcres.toPrecision(4)+' acres / '+areaMiles2.toPrecision(4)+' mile&sup2;';}
	//var area = areaMeters2+' m&sup2; / '+areaHectares.toFixed(4)+' hectares / '+areaKm2.toFixed(4)+' km&sup2;<br />'
	//+areaFeet2.toFixed(2)+' ft&sup2; / '+areaAcres.toFixed(4)+' acres / '+areaMiles2.toFixed(4)+' mile&sup2;';
	var area = areaMeters2;
	return area;
}
function clearMap() {
	if (Marker) {
		for (i in Marker) {
			Marker[i].setMap(null);
		}
	}

	polyPoints = [];
	Points = [];
	Marker = [];
	polyShape.setMap(null);
	gob("roofArea").value = '-';

	$(coordsField).val('');
}
function deleteLastPoint() {
	if(polyPoints.length > 1) {
		polyPoints = polyShape.getPath();
		polyPoints.removeAt(polyPoints.length-1);
		Points.pop();
		calculateArea(Points);
	}
}
function deg2rad(deg) {
	return deg * (Math.PI / 180);
}
function rad2deg(rad) {
	return rad * (180 / Math.PI);
}

function noenter(e) {
	var evt = e || window.event;
	if(evt.keyCode == 13) {
		showAddress();
		return false;
	}
}
