var XibGeoservices = Class.create({
	initialize:function(ajaxURI){
		this.ajaxURI = ajaxURI;
		this.notificationsMessage  = new Element('div',{className:'message'});
		this.notificationsObject = new Element('div',{id:'geoservice_layer',className:'geoservice_layer'});
		var THIS = this;
		// THIS holds the reference to this-object in responders scopes
		this.defaultResponders = {
			onCreate:function(oXHR,oJson){THIS.notifyCreation(oXHR)},
			onComplete:function(oXHR){THIS.notifyCompletion(oXHR)},
			onFailure:function(oXHR){THIS.notifyFailure((oXHR.responseJSON['exception'] || oXHR.statusText));},
			onSuccess:function(oXHR,oJson){alert('Success: ' + oXHR.statusText)}
		}
	},
	
	notifyCreation:function(oXHR){
		if(!$('geoservice_layer')){
			$(document.body).insert(this.notificationsObject);
			$(this.notificationsObject).insert('<div class="background"></div>');
			$(this.notificationsObject).insert(this.notificationsMessage);
			$(this.notificationsMessage).innerHTML = 'Adresgegevens worden gecontroleerd ... ';
		}else{
			$('geoservice_layer').show();
		}
	},
	
	notifyInputError:function(msg){
		alert(msg);
	},
	
	notifyCompletion:function(oXHR){
		//Element.remove(this.notificationsObject);
		this.notificationsMessage.innerHTML = 'Voltooid';
		$(this.notificationsObject).fade({ duration:1.0});
		
	},
	
	notifyFailure:function(msg){
		alert('Er is een fout voorgekomen: ' + msg);
	},
	
	verifyAddress:function(input,params){
		params = Object.extend(params,{'method':'post','parameters':input});
		return new Ajax.Request(this.ajaxURI+'verifyAddress',params);
	},
	
	getAdressPostcode:function(postcode,huisnummer){
		var params = Object.extend(this.defaultResponders,(arguments[2] || {}));
		params.method	= 'post';
		params.parameters = {'postcode':postcode,'huisnummer':huisnummer};
		return new Ajax.Request(this.ajaxURI+'getAdresxpressPostcode',params);
	},
	
	getAdresxpressCheckadres:function(straatnaam,huisnummer,woonplaats){
		var params = Object.extend(this.defaultResponders,(arguments[2] || {}));
		params.method	= 'post';
		params.parameters = {'straatnaam':straatnaam,'huisnummer':huisnummer,'woonplaats':woonplaats};
		return new Ajax.Request(this.ajaxURI+'getAdresxpressCheckadres',params);
	},
	
	getAdresxpressWoonplaatsStraatnaam:function(postcode){
		var params = Object.extend(this.defaultResponders,(arguments[2] || {}));
		params.method	= 'post';
		params.parameters = {'postcode':postcode};
		return new Ajax.Request(this.ajaxURI+'getAdresxpressWoonplaatsStraatnaam',params);
	},
	
	doSearchDMZ:function(naam,straatnaam_huisnummer,postcode_woonplaats,telefoon,kvk_nummer){
		var params = Object.extend(this.defaultResponders,(arguments[2] || {}));
		params.method	= 'post';
		params.parameters = {
			'naam':naam,
			'straatnaam_huisnummer':straatnaam_huisnummer,
			'postcode_woonplaats':postcode_woonplaats,
			'telefoon':telefoon,
			'kvk_nummer':kvk_nummer
		};
		return new Ajax.Request(this.ajaxURI+'doSearchDMZ',params);
	},
	
	doGetDMZRecord:function(search_id,kvk_hash){
		var params = Object.extend(this.defaultResponders,(arguments[2] || {}));
		params.method	= 'post';
		params.parameters = {'search_id':search_id,'kvk_hash':kvk_hash};
		return new Ajax.Request(this.ajaxURI+'doGetDMZRecord',params);
	},
	
	getMaxLife:function(postcode,huisnummer,huisnradd){
		var params = Object.extend(this.defaultResponders,(arguments[2] || {}));
		params.method	= 'post';
		params.parameters = {'postcode':postcode,'huisnummer':huisnummer,'huisnummertoevoeging':huisnummertoevoeging};
		return new Ajax.Request(this.ajaxURI+'getMaxLife',params);
	},
	
	getRiskScore:function(postcode){
		var params = Object.extend(this.defaultResponders,(arguments[2] || {}));
		params.method	= 'post';
		params.parameters = {'postcode':postcode};
		return new Ajax.Request(this.ajaxURI+'getRiskScore',params);
	},
	
	getRouteXpress:function(pc1,pc2,planmode){
		var params = Object.extend(this.defaultResponders,(arguments[2] || {}));
		params.method	= 'post';
		params.parameters = {'postcode1':pc1,'postcode2':pc2,'planmode':planmode};
		return new Ajax.Request(this.ajaxURI+'getRouteXpress',params);
	},
	
	getAdresxpressEasyCheck:function(straathuisnummerwoonplaats){
		var params = Object.extend(this.defaultResponders,(arguments[2] || {}));
		params.method	= 'post';
		params.parameters = {'straathuisnummerwoonplaats':straathuisnummerwoonplaats};
		return new Ajax.Request(this.ajaxURI+'getAdresxpressEasyCheck',params);
	},
	
	doValidatie:function(naam,netnummer,abonneenummer,postcode,huisnummer){
		var params = Object.extend(this.defaultResponders,(arguments[2] || {}));
		params.method	= 'post';
		params.parameters = {
			'naam':naam,
			'netnummer':netnummer,
			'abonneenummer':abonneenummer,
			'postcode':postcode,
			'huisnummer':huisnummer
		};
		return new Ajax.Request(this.ajaxURI+'doSearchDMZ',params);
	}
	
	

});
