// This key only works from the kvdb.net domain, for demo purposes.
// Replace this auth_key with your own.
var pro6pp_auth_key = "n5SEkGlaFzbkWDfj";

var first_arrived_lat;
var first_arrived_lng;
function pro6pp_distance() {
	$('.pro6pp_distance_message').html("");
        first_arrived_lat = first_arrived_lng = null;
	var from = $('.pro6pp_distance_from_postcode').val();
	var to = $('.pro6pp_distance_to_postcode').val();
	if (from.length == 6 && to.length == 6)
	{
		$.getJSON("http://api.pro6pp.nl/v1/autocomplete?auth_key=" + pro6pp_auth_key + "&nl_sixpp=" + from + "&callback=?", function(data) {
			pro6pp_fillin(data);
		});
		$.getJSON("http://api.pro6pp.nl/v1/autocomplete?auth_key=" + pro6pp_auth_key + "&nl_sixpp=" + to + "&callback=?", function(data) {
			pro6pp_fillin(data);
		});
	} else {
                $('.pro6pp_distance_message').html("Twee 6PP postcodes nodig");
        }
}

function calculate_distance(lat1, lng1, lat2, lng2) {
	toRad = function(v) { return v * (Math.PI / 180);};

	// Gebruik de 'Haversine' formule om de afstand tussen 2 punten te berekenen.
	var R = 6371; // Earth radius in km
	var dLat = toRad(lat2-lat1);
	var dLon = toRad(lng2-lng1); 
	var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
	        Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * 
        	Math.sin(dLon/2) * Math.sin(dLon/2); 
	var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
	var d = R * c;
	return d;
}

function pro6pp_fillin(json) {
	if (json.status == 'ok') {
		if (json.results.length == 0) {
			$('.pro6pp_message').html("Postcode ongeldig of niet gevonden");
		} else {
                        if (first_arrived_lat == null) {
				// Bewaar de coordinaten van de eerste postcode.
				first_arrived_lat = json.results[0].lat;
				first_arrived_lng = json.results[0].lng;
			} else {
				// Coordinaten van beide postcodes bekend. Reken de afstand uit.
				var distance = calculate_distance(json.results[0].lat, json.results[0].lng, first_arrived_lat, first_arrived_lng);
                                // Netjes afronden om 2 decimalen
                                distance = distance.toFixed(2);
				$('.pro6pp_distance_message').html("The distance between (" + json.results[0].lat + ", " + json.results[0].lng + ") and (" +
				  first_arrived_lat + ", " + first_arrived_lng + ") is: " + distance + "km");
			}
		}
	} else {
		$('.pro6pp_distance_message').html(json.error.message);
	}
}

$(document)
	.ready(function() {
        $('.pro6pp_distance_submit').click(pro6pp_distance);
});

