function AJAX_request(url, func, func_error) {
	// @param url		: url a appeler avec AJAX
	// @param func		: fonction a appeler pour traiter la reponse (remplace %RESPONSE% par la reponse AJAX)
	// @param func_error: fonction a appeler si AJAX ne peut pas s'initialiser
	
	var http_request = false;

	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		//if (http_request.overrideMimeType) {
		//	http_request.overrideMimeType('text/xml');
			// Voir la note ci-dessous à propos de cette ligne
		//}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("MSXML2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	if (!http_request) {
		if(func_error)
			eval(func_error);
		else
			alert('ERROR! Unable to create XMLHTTP instance!');
		return false;
	}
	
	http_request.onreadystatechange = function() {
		if( (resp=AJAX_getResponseText(http_request)) !=null) {
			//while(resp.indexOf("\r")>=0)
			//	resp = resp.replace("\r", "");
			func = func.replace("%RESPONSE%", resp);
			
			eval(func);
			return true;
		}
	}

	http_request.open('GET', url, true);
	http_request.send(null);
	return true;

}

/*
function AJAX_return(req) {
	return req;
}
*/

function AJAX_getResponseText(http_request) {
	// La fonction retourne le résultat, ou une erreur (avec un ¤ devant), ou null

	if(http_request.readyState == 4) {
		
		if(http_request.status == 200)
			req = http_request.responseText;
		else
			req = "¤AJAX ERROR!\n\nAn error has occured (error "+ http_request.status +")!";
		
		return req;
	}
	else
		return null;

}
