﻿var geocodedPoint;
function onGeocodeClick() {
    //Map.Clear();

    if (document.getElementById('cboDistFromAddress').value == '') {
        alert("Please choose a distance from this address to search.");
        return;
    }
    if (document.getElementById("txtWhere").value == '') {
        alert("Please enter an address to search.");
        return;
    }

    address = document.getElementById("txtWhere").value;
    StartGeocoding(address);
}

function StartGeocoding(address) {
    if (address == '') {
        alert('Please enter an address, then try again.');
        return;
    }
    if (geocoder) {
        geocoder.getLocations(address, SearchTrailsByLatLng);
    }


	
}

function SearchTrailsByLatLng(response) {
    if (!response || response.Status.code != 200) {
        alert("Sorry, we were unable to geocode that address");
    }
    else {
        place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
	geocodedPoint = point;
                 
        params = point.x + "," + point.y + "," + document.getElementById('cboDistFromAddress').value;
        searching = true;
        TrailService.TrailService.GetTrailWithinDistance(params, GetTrailSuccess, GetTrailFailure);
	
	zoomtoarea();

    }
}

function zoomtoarea()
{

	//zoom to the distance specified around the point geocoded

	var circleRadius = document.getElementById('cboDistFromAddress').value / 1609;
	//alert(circleRadius);
	var center = geocodedPoint;	

	map.setCenter(center);
	var bounds1 = new GLatLngBounds();
	var circlePoints = Array();
	var circle;

	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 point2 = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
			circlePoints.push(point2);
			bounds1.extend(point2);
		}
		//if (d < 1.5678565720686044) {
		//	circle = new GPolygon(circlePoints, '#000000', 2, 1, '#000000', 0.25);	
		//}
		//else {
		//	circle = new GPolygon(circlePoints, '#000000', 2, 1);	
		//}
		//map.addOverlay(circle); 

		map.setZoom(map.getBoundsZoomLevel(bounds1));
	}
}