var request = false;
var ajax_result_func;

function request_initiate(url, result_func){
	if (!request) alert('ajax error: request object not ready');

	request.open("GET", url, true);
	request.onreadystatechange = request_complete;
	request.send(null);

	ajax_result_func = result_func;
}


function request_complete(){
	if (request.readyState == 4){
		if (request.status == 200){
			//var response = request.responseText;
			var xmlDocument = request.responseXML;
			if (xmlDocument){
				var error = xmlDocument.getElementsByTagName('error').item(0).firstChild.data;
				if (error != '-'){
					alert('ajax error (in class): ' + error);
				}else{
					var retval = xmlDocument.getElementsByTagName('retval').item(0).firstChild.data;
					if (ajax_result_func) window[ajax_result_func](retval);
				}
			}else{
				alert('ajax error: empty response string');
			}
		}else if (request.status == 404){
			alert("ajax error: request url does not exist");
		}else{
			alert("ajax error: unknown status code is " + request.status);	
		}
	}
}


function request_object_create(){
	try {
		request = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				request = false;
			}  
		}
	}
}
request_object_create();