/* Nieuwe stijl */
var formKoppelingHints = true;
var formKoppelingUrlPrefix = '';
function formKoppeling(type, details){
	// variabelen?
	var bronnen = [];
	var targets = [];
	var vars = [];
	
	var url = formKoppelingUrlPrefix+'ajaxServices.php?return=koppeling&mode=';	
	
	// listeners instellen
	switch(type){
		case 'agentschapnummer':
			bronnen = [details.klantnummer];
			//targets = ['bedrijfsnaam','straatnaam','huisnummer','postcode','plaats'];
		break;
		case 'postcode':
			bronnen = [details.postcode, details.huisnummer];
			//targets = ['straatnaam','plaats'];
		break;
		default:
	}
	
	// tijdelijke boodschap in de targets zetten
	$H(details).each(function(target){
		if(bronnen.indexOf(target[1])==-1){
			if(formKoppelingHints){
				$(target[1]).value = 'Dit veld wordt automatisch voor u ingevuld';
				$(target[1]).setStyle({'color':'#BBBBBB'});
			}
		}
		
		new Event.observe($(target[1]),'focus',function(){	
			if($(target[1]).value == 'Dit veld wordt automatisch voor u ingevuld'){
				$(target[1]).value = '';
				$(target[1]).setStyle({'color':'#000'});
			}		
		});
	});
	
	// check de bronnen op een wijziging
	bronnen.each(function(bron){
	
		new Event.observe($(bron),'blur',function(){
			var link = url;
			var fout = false;
			
			// valideer & url maken
			switch(type){
				case 'agentschapnummer':
					// check het nummer - moet van 'bron' zijn
					fout = !(parseInt($F(bron)) > 0);
					mess = 'Even geduld, de bedrijfsnaam voor u opgezocht';
					errmess = 'Het door u ingevoerd agentschapsnummer is bij ons niet bekend.';
					link += 'agentschapsnummer';
				break;
				case 'postcode':
					var pc = $F(details.postcode).toUpperCase().replace(' ','');
					// check postcode en huisnummer				
					if(!formCheckPostcode(pc)){
						fout = true;
					}
					if($F(details.huisnummer).length == 0){
						fout = true;
					}	
					mess = 'Even geduld, straatnaam en plaats worden voor u opgezocht';
					errmess = 'De door u ingevoerde combinatie van huisnummer en postcode is bij ons niet bekend';
					link += 'postcode';			
				break;
				default:
			}		
			
			// data ophalen
			if(!fout){
				// targets disabelen	
				var targets = $H(details);		
				var first = true;
				var hint;
				var target1;
				targets.each(function(target){
					if(first && formKoppelingHints){
						target1 = $(target[1]);
						hint = target[1]+'_hint';
						Element.update(hint,'<p>'+mess+'</p>');
						showHint(target1);						
						first = false;
						$(target[1]).disable();
					}
				});

				
				// url opbouwen
				switch(type){
					case 'agentschapnummer':
						link += '&agentschapsnummer=' + $F(details.klantnummer);
					break;
					case 'postcode':
						link += '&pc=' + $F(details.postcode);
						link += '&hn=' + $F(details.huisnummer);
						
						// bij straat en plaats een boodschap plaatsen 'Dit veld wordt automatisch voor u ingevuld';
						//$(details.plaats).value = 'Dit veld wordt automatisch voor u ingevuld';	
						//$(details.straatnaam).value = 'Dit veld wordt automatisch voor u ingevuld';	
					break;
					default: 
					
				};
					
				// ajax call 
				new Ajax.Request(link, { 
					method: 'get', 
					onSuccess: function(transport){
						var json = transport.responseText.evalJSON(true);
						
						// kleur weer corrigeren voor alle velden
						$H(details).each(function(target){
							$(target[1]).setStyle({'color':'#000'});
						});						
						
						// is het ook gevonden?
						if(json.error==false){
							if(formKoppelingHints){
								removeHint(target1);
							}
							switch(type){
								case 'agentschapnummer':
									$(details.bedrijfsnaam).value = json.Bedrijfsnaam;
									$(details.straatnaam).value = json.Straat;
									$(details.huisnummer).value = json.Huisnummer;
									$(details.postcode).value = json.Postcode;
									$(details.plaats).value = json.Plaats;
								break;
								case 'postcode':
									$(details.straatnaam).value = json.Straatnaam;
									$(details.plaats).value = json.Woonplaats;								
								break;
								default:
							}
						}else{
							if(formKoppelingHints){
								Element.update(hint,'<p>'+errmess+'</p>');
							}
							switch(type){
								case 'postcode':
									$(details.plaats).value = '';	
									$(details.straatnaam).value = '';									
								break;
								default:
							}
						}

						targets.each(function(target){
							$(target[1]).enable();
						});
					}
				});	
		
			}else{
				//cLog('niet gevalideerd');
			}	
		});
	});
}


/* Functies voor de formlisteners */
function formListen(type, bronnen, targets){
	// observeer de laatste bron
	Event.observe($(bronnen[bronnen.length - 1]),'blur',function(){
		// variabelen
		var fout = false;
		var mess = '';
		var errmess = '';
		var url = 'ajaxServices.php?return=listener&mode=';
		var respKeys = [];
		var values = [];
		
		// values uit bronnen halen
		var i = 0;
		bronnen.each(function(bron){
			values[i++] = $F(bron);
		});

		// afhankelijk van mode	
		// 0. Postcode
		if(type == 'postcode'){
			if(!formCheckPostcode(values[1])){
				fout = true;
			}
			if(values[0].length == 0){
				fout = true;
			}
			mess = 'Even geduld, straatnaam en plaats worden voor u opgezocht';
			errmess = 'De door u ingevoerde combinatie van huisnummer en postcode is bij ons niet bekend';
			respKeys = ['Straatnaam','Woonplaats'];
			url += 'postcode';
		}
		// 1. Agentschapsnummer
		if(type == 'agentschapsnummer'){
			fout = values[0] + 0 == 0;
			mess = 'Even geduld, de bedrijfsnaam voor u opgezocht';
			errmess = 'Het door u ingevoerd agentschapsnummer is bij ons niet bekend.';
			respKeys = ['Bedrijfsnaam','Straat','Huisnummer','Postcode','Plaats'];
			url += 'agentschapsnummer';
		}
		
		// actie uitvoeren
		if(!fout){
		
			// targets disabelen
			targets.each(function(target){
				$(target).disable();
			});
			var target1 = $(targets[0]);
			
			// boodschap tonen
			var hint = target1.id+'_hint';
			Element.update(hint,'<p>'+mess+'</p>');
			showHint(target1);
			
			// url opbouwen
			values.each(function(value){
				url += '&values[]=' + value;
			});
						
			// ajax call 
			new Ajax.Request(url, { 
				method: 'get', 
				onSuccess: function(transport){
					var json = transport.responseText.evalJSON(true);
					
					if(json.error==false){
						removeHint(target1);
					}else{
						Element.update(hint,'<p>'+errmess+'</p>');
					}
					
					var c = 0;
					targets.each(function(target){
						if(json.error==false){
							$(target).value = eval('json.' + respKeys[c]);
						}else{
							
						}
						$(target).enable();
						c++;
					});
				}
			});		
		
		
		}else{
			//cLog('FOUT');
		}
	});
}
