/**
 * Dit object doet een request naar een ServerSide script-bestand: phpFile of action
 *
 * // INIT:
 * var req = new createRequestObject();
 * req.container = 'contentdiv'; // Deze moet gezet zijn OF er MOET een action meegestuurd worden naar showDetail (zie verder)
 * req.phpFile = 'phpfile.php'; // Deze moet gezet zijn OF er MOET een action meegestuurd worden naar showDetail (zie verder)
 * req.method = 'get'; // optional, indien deze en de showDetail method niet gezet zijn, staat deze standaard op get
 * req.init();
 *
 * // MAKE REQUEST:
 * showDetail(action, container, method) // Waar action optioneel de bestandsnaam aangeeft van het aan te roepen bestand
 */

function createRequestObject()
{	
		var needMethod = 0, needAction = 0, method = "GET";
		this.init = init;
		this.showDetail = showDetail;
		
		// Deze handle is nodig voor de handleResponse functie
		var objHandle = this;
				
		function requestObject() 
		{
				var ro;
		    
		    if ( window.ActiveXObject ) {
      		ro = new ActiveXObject("Microsoft.XMLHTTP");
		    } else if ( window.XMLHttpRequest ) {
		      ro = new XMLHttpRequest();
		    }
		    
		    return ro;
		}
		
		function init()
		{
				if (!this.container)
				{
					this.needContainer = 0; // Standaard is deze 1
				}
				if (!this.phpFile)
				{
					this.needAction = 1;
				}
				if (this.method != 'post') this.method = 'get';
				
				this.errors = 0;
		}

		function showDetail(action, container, sendMethod)
		{
				if (!action)
				{
					if (this.needAction)
					{
						alert('Er is een fout opgetreden. De actie kon niet worden uitgevoerd (No action defined).');
						return 0;
					}
					else
					{
						action = this.phpFile;
					}
				}
				
				if (!container && this.needContainer)
				{
					alert('Er is een fout opgetreden. De actie kon niet worden uitgevoerd (No container defined).');
					return 0;
				}
				else
				{
						this.container = container;
				}
				if(this.container && !document.getElementById(this.container))
				{
						alert('Er is een fout opgetreden. De actie kon niet worden uitgevoerd (Container doesn\'t exist).');
						return 0;
				}
				
				if (!sendMethod)
				{
					sendMethod = this.method;
				}
				
				if (this.errors) return 0;
				
				this.http = new requestObject();
				
		    this.http.open(sendMethod, action);
		    this.http.onreadystatechange = handleResponse;
		    this.http.send(null);
		}
		
		function handleResponse()
		{
				if(objHandle.http.readyState == 4){
		        var response = objHandle.http.responseText;
		        var update = new Array();

		        if (objHandle.container==''){
		        		//alert(response);
		        
		        }else if (objHandle.container!=''){
		        		document.getElementById(objHandle.container).innerHTML = response;
		        		$('#'+objHandle.container).slideDown('fast');
				        
				        // De javascripts uitvoeren die in de geladen code staan.
				        launchJavascript(response);
				       		        
				     		// Deze functie is toegevoegd om NA het laden van nieuwe content de nieuw-geladen headers te vervangen met sIFR
								run_sIFR();
		        }
				}
		}
		
		function launchJavascript(responseText) {
		  // RegExp from prototype.sonio.net
		  var ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:</script>)';
		           
		  var match    = new RegExp(ScriptFragment, 'img');
		  var scripts  = responseText.match(match);
		
	    if(scripts) {
	        var js = '';
	        for(var s = 0; s < scripts.length; s++) {
	            var match = new RegExp(ScriptFragment, 'im');
	            js += scripts[s].match(match)[1];
	        }
	        eval(js);
	    }
		}
}