/* 
-----------------------------------------
JQUERY POSTCODECHECK PLUGIN
jQuery 1.4.4
Nederlandse versie
Gemaakt door Dick de Leeuw,
met dank aan Paul v. d. Kamer
www.wlanshop.nl
------------------------------------------
*/


(function($){
	$.fn.extend({
		
		postcodeCheck: function(options) {

			var defaults = {
				landIsNederland: true,
				valueLand: "Nederland",
				inputLand: "select[name$='Land']",
				inputLandOverride: false,
				inputPostcode: "input[name$='Postcode']",
				inputHuisnummer: "input[name$='Huisnummer']",
				inputStraatnaam: "input[name$='Straatnaam']",
				labelStraatnaam: "label[for$='Straatnaam']",
				inputPlaats: "input[name$='Plaats']",
				labelPlaats: "label[for$='Plaats']",
				foutmeldingContainer: "div#foutmelding-postcodecheck",
				inputUitleg: "span.tekst-automatisch-invul"
			};
			
			var options = $.extend(defaults, options);
		
			return this.each(function() {
				
				//Objecten aanmaken
				var o = options;
				var object = $(this);
				var veldLand = $(o.inputLand, object);
				var veldPostcode = $(o.inputPostcode, object); 
				var veldHuisnummer = $(o.inputHuisnummer, object);
				var veldStraatnaam = $(o.inputStraatnaam, object);
				var labelStraatnaam = $(o.labelStraatnaam, object);
				var veldPlaats = $(o.inputPlaats, object);
				var labelPlaats = $(o.labelPlaats, object);
				var veldFoutmelding = $(o.foutmeldingContainer, object);
				var veldUitleg = $(o.inputUitleg, object);
				
				//Indien ander land selector wordt gebruikt
				if (o.inputLandOverride) {
					veldLand = o.inputLandOverrideValue;
				};
			
			
			
				/* POSTCODECHECK: FORMAT
				----------------------------------------
				Forceer postcode en huisnummer in hoofdletters
				*/
				
				//Hoofdletters
				$([veldPostcode, veldHuisnummer]).each(function(i, veld){
					$(veld).keyup(function(event){
						$(veld).val(String($(this).val()).toUpperCase());
					});
					$(veld).change(function(event){
						$(veld).val(String($(this).val()).toUpperCase());
					});
				});
				
				//Verwijder whitespace
				$([veldPostcode, veldHuisnummer]).each(function(i, veld){
					var txt = $(veld);
					var func = function() {
						txt.val(txt.val().replace(/\s/g, ''));
					}
					txt.keyup(func).blur(func);
				});
				

				
				/* POSTCODECHECK: NIET NEDERLAND
				----------------------------------------
				Als klant niet in Nederland woont dan wordt postcodecheck verwijderd
				*/
				$(veldLand).bind(($.browser.msie ? "click" : "change"), function () {
					
					//Maak velden leeg en verwijder validatie classes
					$(veldPostcode).val("").removeClass('LV_valid_field').removeClass('LV_invalid_field');
					$(veldHuisnummer).val("").removeClass('LV_valid_field').removeClass('LV_invalid_field');
					$(veldStraatnaam).val("").removeClass('LV_valid_field').removeClass('LV_invalid_field');
					$(veldPlaats).val("").removeClass('LV_valid_field').removeClass('LV_invalid_field');
					
					//Wis eventuele foutmelding
					$(veldFoutmelding).html('');
					
					//Als land niet Nederland is, verwijder disabled attribuut en autoinvul class
					if ($(veldLand).val() != o.valueLand) {
						$(veldStraatnaam).removeClass('autoinvul').removeAttr("readonly");
						$(veldPlaats).removeClass('autoinvul').removeAttr("readonly");
						$(veldUitleg).hide();
						$(labelStraatnaam).html("<img src=\"/site/d_nieuw/img/bestelproces/verplicht-veld.gif\" alt=\"indicator voor verplicht veld\" /> Straatnaam");
						$(labelPlaats).html("<img src=\"/site/d_nieuw/img/bestelproces/verplicht-veld.gif\" alt=\"indicator voor verplicht veld\" /> Plaats");
						o.landIsNederland = false;
					}
					else { //Land is wel Nederland
						$(veldStraatnaam).addClass('autoinvul').attr("readonly", true);
						$(veldPlaats).addClass('autoinvul').attr("readonly", true);
						$(veldUitleg).show();
						$(labelStraatnaam).html("Straatnaam");
						$(labelPlaats).html("Plaats");
						o.landIsNederland = true;
					};
				});
				
				
				
				/* POSTCODECHECK: POSTCODE AANPASSEN
				----------------------------------------
				Als postcode wordt gewijzigd dan worden de andere velden geleegd
				*/
				$(veldPostcode).bind(($.browser.msie ? "focusout" : "change"), function () {
					
					//Get value en verwijder whitespace
					var $postcode = $.trim($(veldPostcode).val()).replace(/ /g,'');
					var $huisnummer = $.trim($(veldHuisnummer).val()).replace(/ /g,'');
					var $straatnaam = $.trim($(veldStraatnaam).val()).replace(/ /g,'');
					var $plaats = $.trim($(veldPlaats).val()).replace(/ /g,'');
					
					//Wis eventuele foutmelding
					$(veldFoutmelding).html('');
					
					//Leeg velden als deze zijn ingevuld en land is Nederland
					if ($huisnummer.length > 0 && $straatnaam.length > 0 && $plaats.length > 0 && o.landIsNederland) {
						$(veldPostcode).removeClass('LV_valid_field').removeClass('LV_invalid_field');
						$(veldHuisnummer).val("").removeClass('LV_valid_field').removeClass('LV_invalid_field');
						$(veldStraatnaam).val("").removeClass('LV_valid_field').removeClass('LV_invalid_field');
						$(veldPlaats).val("").removeClass('LV_valid_field').removeClass('LV_invalid_field'); 
					};
				});
				
				
				
				/* POSTCODECHECK: AJAX REQUEST
				----------------------------------------
				Straatnaam en plaats opvragen aan de hand van postcode en huisnummer
				*/		
				$(veldHuisnummer).bind(($.browser.msie ? "focusout" : "change"), function () {
					
					//Get value en verwijder whitespace
					var $postcode = $.trim($(veldPostcode).val()).replace(/ /g,'');
					var $huisnummer = $.trim($(veldHuisnummer).val()).replace(/ /g,'');
					
					//Als postcode nog leeg is bij invullen huisnummer
					if ($postcode.length <= 0 && $huisnummer.length > 0 && o.landIsNederland) {
						$(veldFoutmelding).html('<p class="notice">Vul eerst uw postcode in.</p>');
						$(veldHuisnummer).val("");
						$(veldPostcode).focus();
					};
					
					//Alleen uitvoeren indien postcode en huisnummer zijn ingevuld en land is Nederland
					if ($postcode.length > 0 && $huisnummer.length > 0 && o.landIsNederland) {
						
						//Toon loading icon
						$(veldStraatnaam).addClass('loader');
						$(veldPlaats).addClass('loader');
						
						//Ajax request
						$.ajax	({	type: "POST", 
									url: "/site/d_nieuw/scripts/postcodecheck.php", 
									data: {postcode: $postcode, huisnummer: $huisnummer}, 
									cache: false,
									dataType: 'html',
									timeout: 15000,
									error: function(){
										//Toon foutmelding
										$(veldFoutmelding).html('<p class="error">Er is een fout opgetreden bij het automatisch ophalen van uw straatnaam en plaats. Vul uw straatnaam en plaats zelf in.</p>');
										
										//Verberg loading icon
										$(veldStraatnaam).removeClass('loader');
										$(veldPlaats).removeClass('loader');
					
										//Velden vrijgeven
										$(veldStraatnaam).val("").removeClass('autoinvul').removeAttr("readonly");
										$(veldPlaats).val("").removeClass('autoinvul').removeAttr("readonly");
										$(veldUitleg).hide();
										$(labelStraatnaam).html("<img src=\"/site/d_nieuw/img/bestelproces/verplicht-veld.gif\" alt=\"indicator voor verplicht veld\" /> Straatnaam");
										$(labelPlaats).html("<img src=\"/site/d_nieuw/img/bestelproces/verplicht-veld.gif\" alt=\"indicator voor verplicht veld\" /> Plaats");
										$(veldStraatnaam).focus();
									},
									success: function(html){	
										//Wis eventuele foutmelding
										$(veldFoutmelding).html('');
										
										//Reset velden
										$(veldStraatnaam).addClass('autoinvul').attr("readonly", true);
										$(veldPlaats).addClass('autoinvul').attr("readonly", true);
										$(veldUitleg).show();
										$(labelStraatnaam).html("Straatnaam");
										$(labelPlaats).html("Plaats");
														
										//Verberg loading icon
										$(veldStraatnaam).removeClass('loader');
										$(veldPlaats).removeClass('loader'); 
																
										//Ontvang response
										var $response=$(html);
										var returnStraatnaam = $response.filter('div#returnStraatnaam').text();
										var returnPlaats = $response.filter('div#returnPlaats').text();
										var returnError = $response.filter('div#returnError').text();
										var returnFatalError = $response.filter('div#returnFatalError').text();
										
										//Retourneer waardes
										if (returnError == "false" && returnFatalError == "false") { //Geen fouten, straat en plaats invullen
											$(veldHuisnummer).addClass('LV_valid_field').removeClass('LV_invalid_field');
											$(veldPostcode).addClass('LV_valid_field').removeClass('LV_invalid_field');
											$(veldStraatnaam).val(returnStraatnaam).addClass('LV_valid_field').removeClass('LV_invalid_field');
											$(veldPlaats).val(returnPlaats).addClass('LV_valid_field').removeClass('LV_invalid_field');
										}
										else if (returnError == "true" && returnFatalError == "false"){ //Fout, adres is ongeldig
											//Toon foutmelding
											$(veldFoutmelding).html('<p class="notice">U heeft een niet bestaande combinatie van postcode en huisnummer ingevoerd.</p>');
											
											//Velden aanpassen en cursor verplaatsen
											$(veldStraatnaam).val("").removeClass('LV_valid_field').addClass('LV_invalid_field');
											$(veldPlaats).val("").removeClass('LV_valid_field').addClass('LV_invalid_field');
											$(veldHuisnummer).val("").removeClass('LV_valid_field').addClass('LV_invalid_field');
											$(veldPostcode).removeClass('LV_valid_field').addClass('LV_invalid_field').focus();
										}
										else { //Fatale fout, velden vrijgeven
											$(veldFoutmelding).html('<p class="error">Er is een fout opgetreden bij het automatisch ophalen van uw straatnaam en plaats. Vul uw straatnaam en plaats zelf in.</p>');
											$(veldStraatnaam).val("").removeClass('autoinvul').removeAttr("readonly");
											$(veldPlaats).val("").removeClass('autoinvul').removeAttr("readonly");
											$(veldUitleg).hide();
											$(labelStraatnaam).html("<img src=\"/site/d_nieuw/img/bestelproces/verplicht-veld.gif\" alt=\"indicator voor verplicht veld\" /> Straatnaam");
											$(labelPlaats).html("<img src=\"/site/d_nieuw/img/bestelproces/verplicht-veld.gif\" alt=\"indicator voor verplicht veld\" /> Plaats");
											$(veldStraatnaam).focus();
										};
									}
						});
					}
			
				});
			
			});
		
		}
	});
})(jQuery);

