/*
See http://kvdb.net/projects/6pp on how to use this script.
*/

// Namespacing the code so the examples don't clash.
var net = {};
net.kvdb = {};
net.kvdb.Range = {};
var _range = net.kvdb.Range;

_range.isValidPostcode = function(postcode) {
        // Check if input is a valid 4PP.
        return /^\d{4}$/.test(postcode);
}

_range.lastLookup = null;
_range.fromRange = function(e) {
        // Only request a lookup if the user entered a new postcode or range.
        var postcode = document.getElementById('range_postcode').value;
	var range = document.getElementById('range');
	range = range.options[range.selectedIndex].value;
	if (this.isValidPostcode(postcode)) {
		// If the same range was already retrieved, skip.
                if (_range.lastLookup != postcode + range) {
                        this.lookupRange();
                }
        } else {
                this.resetResults();
        }
        _range.lastLookup = postcode + range;
}

_range.lookupRange = function() {
	// Perform a range lookup based on postcode

	// Clear fields.
	this.resetResults();

	// Enable spinner, so the user knows the lookup is being performed.
	var spinner = document.getElementById("range_spinner");
	if (spinner) {
		spinner.style.display = '';
	}

	var range_postcode = document.getElementById('range_postcode').value;
	var range = document.getElementById('range');
	range = range.options[range.selectedIndex].value;
	this.loadScript('http://6pp.kvdb.net/services/getpostcode?fourpp=' + range_postcode + '&range=' + range + '&tg_format=json&jsonp=_range.showRangeResults');
}

_range.loadScript = function(url) {
        // Insert javascript dynamically for JSONP cross-site callback
        var script = document.createElement('script');
	script.type = 'text/javascript';
        script.src = url;
        document.getElementsByTagName('head')[0].appendChild(script);
}

_range.resetResults = function() {
	// Empty the result element
	document.getElementById('range_results').innerHTML = "";
}

_range.showRangeResults = function(json) {
	// Disable spinner
	var spinner = document.getElementById("range_spinner");
	if (spinner) {
		spinner.style.display = 'none';
	}

        // Check the amount of results, or show an error.
        try
        {
		var count = json.result['postcodes'].length;
        }
        catch(err)
        {
                alert(json.result);
        }

	// Show the neighbouring postcodes
	var range_results = document.getElementById('range_results');
	for (var i = 0; i < count; i++)
	{
		var fourpp = json.result['postcodes'][i]['fourpp'];
		var city_name = json.result['postcodes'][i]['city_name'];
		var distance = json.result['postcodes'][i]['distance'];
		range_results.innerHTML += fourpp + ": " + city_name + " (" + distance + "km)<br/>";
	}
}

