<!--



/** function Ajax
	- ajax constructor
	- @params string aType (heeft unieke key voor die php pagina, deze wordt teruggevoerd bij de onreadystatechange aan de standaard functies
	    zo weet je altijd in die statechange functies bij welk ajax onderdeel van de html pagina de statechange functie moet horen)
	- @access public
*/
function Ajax(aType){

	// declareren member vars
	this.req = null
	this.url = null;
	this.method = 'GET';
	this.async = true;
	this.status = null;
	this.statusText = '';
	this.postData = null;
	this.readyState = null;
	this.responseText = null;
	this.responseXML = null;
	this.handleResp = null;
	this.responseFormat = 'text';
	this.mimeType = null;
	this.aType = aType;
	this.rDate = new Date();
	this.aState1 = new Function();
	this.aState2 = new Function();
	this.aState3 = new Function();
	this.aState4 = new Function();



	// init function maken van XMLHttpRequest
	this.init = function(){
		if(!this.req){
			try{
				// firefox, safari IE7 etc
				this.req = new XMLHttpRequest();
			}
			catch(e){
				try{
					// object voor later versions van IE
					this.req = new ActiveXObject('MSXML2.XMLHTTP');
				}
				catch(e){
					try{
						// object voor eerdere versions van IE
						this.req = new ActiveXObject('Microsoft.XMLHTTP');
					}
					catch(e){
						// aanmaken XMLHttpRequest mislukt
						return false;
					}
				}
			}
		}
		return this.req;
	};



	// starten XMLHtppRequest
	// in functie onreadystatechange staan de standaard functies (state: 1, 2, 3 en 4) die per php pagina gebruikt kunnen worden
	// let op: als de functie doReg aangeroepen wordt moeten deze standaard functies gedeclareerd worden
	this.doReq = function(){
		if(!this.init()){
			alert('Could not create XMLHttpRequest.');
			return;
		}

		// openen XMLHttpRequest
		this.req.open(this.method, this.url, this.async);
		if(this.method == 'POST'){
			this.req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		}
		
		// overriden mimetype
		if(this.mimeType){
			try{
				req.overrideMimeType(this.mimeType);
			}
			catch(e){
				// overriden mime type mislukt (browser IE6 of opera?)	
			}
		}

		// onreadystate change
		var self = this;
		this.req.onreadystatechange = function(){
			var resp = null;
			if(self.req.readyState == 2){
				self.aState2(self.aType);
			}
			if(self.req.readyState == 3){
				self.aState3(self.aType);
			}
			if(self.req.readyState == 4){
				self.aState4(self.aType);
				switch(self.responseFormat){
					case 'text':
						resp = self.req.responseText;
						break;
					case 'xml':
						resp = self.req.responseXML;
						break;
					case 'object':
						resp = req;
						break;
				}
				if(self.req.status >= 200 && self.req.status <= 299){
					self.handleResp(resp);
				}else{
					self.handleErr(resp);
				}
			}
		};

		this.req.send(this.postData);
	};





	// afhandelen mimetype
	this.setMimeType = function(mimeType){
		this.mimeType = mimeType;
	};




	// afhandelen errors
	this.handleErr = function(){
		var errorWin;
		alert('An error occurred:\n\nStatus Code: '+this.req.status+'\nStatus description: '+this.req.statusText);
	};


	this.setHandlerBoth = function(funcRef){
		this.handleResp = funcRef;
		this.handleErr = funcRef;
	};



	// aborting
	this.abort = function(){
		if(this.req){
			this.aState4(this.varType);
			this.req.onreadystatechange = function(){};
			this.req.abort();
			this.req = null;
		}
	};



	// set url en handler functie voor get
	this.doGet = function(url, hand, aType, format){
		this.url = url;
		this.handleResp = hand;
		this.responseFormat = format || 'text';
		this.aType = aType || this.aType;
		this.aState1(this.aType);
		this.doReq();
	};



	// set url en handler functie voor post
	this.doPost = function(url, postData, hand, aType, format){
		this.url = url;
		this.handleResp = hand;
		this.responseFormat = format || 'text';
		this.aType = aType || this.aType;
		this.method = 'POST';
		this.postData = postData;
		this.aState1(this.aType);
		this.doReq();
	};
}




// voert javascript uit, jScript moet <script> tags hebben!
function javaEval(jScript){
	var input = jScript;
	var reg = /<script[^>]*>([\s\S]*?)<\/script>/gi;
	if (input.search(reg) != -1) {
		var reg1 = /<script?[^>]+>/gi;			
		var reg2 = /<\/script>/gi;				
		var reg3 = /<!--/;
		var reg4 = /\/\/-->/;
		jsparts = input.split(reg1);
		input = "";
		for (i =0; i < jsparts.length; i++) {
			if (jsparts[i].search(reg2) != -1) {	
				jspart = jsparts[i].split(reg2)	;
				jspart[0] = jspart[0].replace(reg3, "");
				jspart[0] = jspart[0].replace(reg4, "");
				input += jspart[0];
			};
		};
	};
	try {
		JavaScript = document.createElement("script");
		JavaScript.setAttribute("type", "text/javascript");
		JavaScript.text = "<!--\n" + input + "\n//-->";
		document.getElementsByTagName("body")[0].appendChild(JavaScript);
	} catch(e) {
		this.msg("Js error in Server response");
	};
}


//