function AjaxHandler(){this.xmlhttp=this.createXMLHTTP();this.timer=null;this.params=null;};AjaxHandler.prototype={createXMLHTTP:function(){var xmlhttp=null;try{if(typeof XMLHttpRequest!='undefined'){xmlhttp=new XMLHttpRequest();}else if(typeof ActiveXObject!='undefined'){xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');}}catch(e){xmlhttp=null;}
return xmlhttp;},doRequest:function(url,callback,custom,post_data,timeout){if(this.params){this.params.error='HTTP request afgebroken.';this.abortRequest();return;}
this.abortRequest();this.params={url:(typeof url=='string'?url:''),callback:(typeof callback=='function'?callback:null),custom:(typeof custom!='undefined'?custom:null),postData:(typeof post_data=='string'?post_data:''),timeout:(typeof timeout=='number'&&timeout>0?timeout:-1),httpMethod:(typeof post_data=='string'&&post_data!=''?'POST':'GET'),beginTime:(new Date()).getTime(),error:'',status:null,responseText:null,responseXML:null};if(!this.params.callback){this.params.error='Het callback argument is ongeldig.';this.doCallback();return;}
if(!this.xmlhttp){this.params.error='Geen AJAX ondersteuning aangetroffen.';this.doCallback();return;}
try{var scope=this;var obj=this.params;if(obj.timeout>-1){setTimeout(function(){scope.doTimeout(obj);},obj.timeout);}
this.xmlhttp.onreadystatechange=function(){scope.doResponse(obj);};this.xmlhttp.open(this.params.httpMethod,this.params.url,true);this.xmlhttp.send((this.params.httpMethod=='POST'?this.params.postData:null));}catch(e){this.params.error='Er is een fout opgetreden bij het initiëren van het request.';this.doCallback();}},doResponse:function(obj){if(this.xmlhttp.readyState!=4){return;}
if(obj!=this.params){return;}
this.params.status=(this.xmlhttp.status||0);this.params.responseText=(this.xmlhttp.responseText||'');this.params.responseXML=(this.xmlhttp.responseXML||null);this.doCallback();},doTimeout:function(obj){if(obj!=this.params){return;}
this.params.error='HTTP request afgebroken wegens timeout.';this.abortRequest();},abortRequest:function(){try{if(this.xmlhttp){this.xmlhttp.onreadystatechange=function(){};this.xmlhttp.abort();}}catch(e){}
if(this.params){this.doCallback();}},doCallback:function(){var obj=this.params;clearTimeout(this.timer);if(obj.error!=''){AjaxHandler.doDebug(obj.error);}
if(obj.callback){obj.callback(obj);}
this.params=null;}};AjaxHandler.doDebug=function(){var debug=(location.search&&location.search.indexOf('debugsite')!=-1);return function(msg){if(debug){alert(msg);}};}();AjaxHandler.doRequest=function(){var handlers=[];return function(url,callback,custom,post_data,timeout){var handler=null;for(var i=0;i<handlers.length;i++){if(!handlers[i].params){handler=handlers[i];break;}}
if(!handler){handler=new AjaxHandler();handlers.push(handler);}
handler.doRequest(url,callback,custom,post_data,timeout);return handler;};}();
