
function sajax_debug(text) {
	if (sajax_debug_mode)
		alert(text);
}

function cb_alert(x){
	alert(x);
}

function cb_refresh(x){
	refresh();
}

function cb_header(x){
	header(x);
}

function cb_empty(x){}
		
function sajax_init_object() {
	sajax_debug("sajax_init_object() called..")
	
	var A;
 			
	var msxmlhttp = new Array(
		'Msxml2.XMLHTTP.5.0',
		'Msxml2.XMLHTTP.4.0',
		'Msxml2.XMLHTTP.3.0',
		'Msxml2.XMLHTTP',
		'Microsoft.XMLHTTP');
	for (var i = 0; i < msxmlhttp.length; i++) {
		try {
			A = new ActiveXObject(msxmlhttp[i]);
		} catch (e) {
			A = null;
		}
	}
	
	if(!A && typeof XMLHttpRequest != "undefined")
		A = new XMLHttpRequest();
	if (!A)
		sajax_debug("Could not create connection object.");
	return A;
}

var sajax_requests = new Array();

function sajax_cancel() {
	for (var i = 0; i < sajax_requests.length; i++) 
		sajax_requests[i].abort();
}

function addPostData(name, value){
	postDataAdd += "&" + name + "=" + escape(value);
}

function getPostData(){
	return postDataAdd;
}
function sajax_do_call(func_name, args) {

	var i, xObject, n;
	var uri;
	var post_data;
	var target_id;

	sajax_debug("in sajax_do_call().." + sajax_request_type + "/" + sajax_target_id);
	target_id = sajax_target_id;
	if (typeof(sajax_request_type) == "undefined" || sajax_request_type == "") 
		sajax_request_type = "GET";
	
	uri = sajax_remote_uri;
	if (sajax_request_type == "GET") {
	
		if (uri.indexOf("?") == -1) 
			uri += "?rs=" + escape(func_name);
		else
			uri += "&rs=" + escape(func_name);
		uri += "&rst=" + escape(sajax_target_id);
		uri += "&rsrnd=" + new Date().getTime();
		
		for (i = 0; i < args.length-1; i++) {
			//uri += "&rsargs[]=" + encodeURIComponent(args[i]);
			//uri += "&rsargs[]=" + encodeURIComponent($.toJSON(args[i]));
			uri += "&rsargs[]=" + encodeURIComponent(Object.toJSON(args[i]));
		}

		post_data = null;
	}else if (sajax_request_type == "POST") {
		post_data = "rs=" + escape(func_name);
		post_data += "&rst=" + escape(sajax_target_id);
		post_data += "&rsrnd=" + new Date().getTime();
		
		for (i = 0; i < args.length-1; i++) {Object.toJSON(args[i])
			//post_data = post_data + "&rsargs[]=" + escape(args[i]);
			//post_data = post_data + "&rsargs[]=" + encodeURIComponent($.toJSON(args[i]));
			post_data = post_data + "&rsargs[]=" + encodeURIComponent(Object.toJSON(args[i]));
		}
	}else {
		alert("Illegal request type: " + sajax_request_type);
	}
	
	xObject = sajax_init_object();
	if (xObject == null) {
		if (sajax_failure_redirect != "") {
			location.href = sajax_failure_redirect;
			return false;
		} else {
			sajax_debug("NULL sajax object for user agent:\n" + navigator.userAgent);
			return false;
		}
	} else {
		xObject.open(sajax_request_type, uri, true);
		// window.open(uri);
		
		sajax_requests[sajax_requests.length] = xObject;
		
		if (sajax_request_type == "POST") {
			xObject.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
			xObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		}
	
		xObject.onreadystatechange = function() {
			if (xObject.readyState != 4) 
				return;
		
			if(sajax_output_print){
			  	sajax_debug_mode = 1;
				sajax_debug("received " + xObject.responseText);
				sajax_debug_mode = 0;
			}
			sajax_debug("received " + xObject.responseText);
		
			var status;
			var data;
			var txt = xObject.responseText.replace(/^\s*|\s*$/g,"");
			status = txt.charAt(0);
			data = txt.substring(2);

			if (status == "") {
				// let's just assume this is a pre-response bailout and let it slide for now
			} else if (status == "-") 
				alert("Error: " + data);
			else {
				var script = document.createElement('script'); 
				script.type = 'text/javascript'; 
				script.src = sajax_base + '/javascript/javascript_buffer.js.php'; 
				document.getElementsByTagName('head')[0].appendChild(script); 
				
				if (target_id != "") 
					document.getElementById(target_id).innerHTML = eval(data);
				else {
					try {
						var callback;
						var extra_data = false;
						if (typeof args[args.length-1] == "object") {
							callback = args[args.length-1].callback;
							extra_data = args[args.length-1].extra_data;
						} else {
							callback = args[args.length-1];
						}
		
						callback(eval(data), extra_data);
					} catch (e) {
						if(!LIFE_MODE){
							sajax_debug_mode = 1;
							sajax_debug("Caught error " + e + ": Could not evalll " + data );
							sajax_debug_mode = 0;
						}
						
						setStatus('Er is een fout op de pagina opgetreden. Druk op <b>\'F5\'</b> om de pagina te vernieuwen');
						alert('Er is een fout op de pagina opgetreden. De pagina kan niet geladen worden. Druk op \'F5\' om de pagina te vernieuwen. Wij zijn op de hoogte gesteld van de fout en zullen het probleem zo snel mogelijk oplossen.');
						
						x_debug("Error " + e + ": Could not evalll " + data, function(){});
						
					  	if(sajax_output_print){
						  	sajax_debug_mode = 1;
							sajax_debug("Caught error " + e + ": Could not evalll " + data );
							sajax_debug_mode = 0;
						}
						//sajax_debug("Caught error " + e + ": Could not eval " + data );
					}
				}
				//document.getElementById('loadDiv').innerHTML = '<img src="./includes/images/load1.gif" title="Loading" />';
				//document.body.style.cursor = '';
			}
		}
	}
	
	post_data += getPostData();
	
	sajax_debug(func_name + " uri = " + uri + "/post = " + post_data);
	xObject.send(post_data);
	sajax_debug(func_name + " waiting..");

	delete xObject;
	return true;
}

function startLoader(cbDiv){
	cbbDiv=cbDiv;
	if(getEl(cbDiv)){
		getEl('sajaxLoader').src =  VIEW_HTTP + '/img/ajax/loader.gif'
		getEl(cbbDiv).style.opacity = '0.5';
		getEl(cbbDiv).style.filter = 'alpha(opacity = 50)';
	}else if(LIFE_MODE){
		alert("CB Div: " + cbDiv + " is niet gedefineerd!! sajax:startloader()");
	}
	setStatus('Pagina wordt opgevraagd.');
}

function setStatus(sStatus){
	getEl('status').innerHTML = sStatus; 		
}

function stopLoader(){
	if(getEl(cbbDiv)){
		getEl(cbbDiv).style.opacity = '1';
		getEl(cbbDiv).style.filter = 'alpha(opacity=100)';
	}
	
	if(getEl('sajaxLoader')){
		getEl('sajaxLoader').src = VIEW_HTTP + '/img/ajax/loader_ready.gif'
	}
	setStatus('Pagina is geladen.');
}

function cb_ajax(x){
	getEl(cbbDiv).innerHTML = x;
	setTimeout ('stopLoader()', 200);
}

