/* $Id: ajax.js,v 1.2 2010-06-11 07:19:30 benoit Exp $
 *  Factorisation du Code JS/Ajax pour le front
 */

/* Creation d'un object de type XMLHttpRequest selon le type de navigateur
 */
function creationObjetXHR() {
    var xhr;

    try {
	return new XMLHttpRequest();
    } catch(ex) {
	var progIDs = [ 'Msxml2.DOMDocument.6.0',  'Msxml2.DOMDocument.3.0'];

	for (var i = 0; i < progIDs.length; i++) {
	    try {
		var xmlDOM = new ActiveXObject(progIDs[i]);
		return xmlDOM;
	    }
	    catch (ex) {}
	}
    }
    return null;
}

function executeAjaxQueryGET(url, responsefunc) {
    var xmlhttp = creationObjetXHR();

    if (xmlhttp) {
	xmlhttp.onreadystatechange = function() {responsefunc(xmlhttp);};
	xmlhttp.open("GET", url,true);
	xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
	xmlhttp.send(null);
	return true;
    } else {
	return false;
    }
}

function executeAjaxQueryPOST(url, responsefunc, params) {
    var xmlhttp = creationObjetXHR();

    if (xmlhttp) {
	xmlhttp.onreadystatechange = function() {responsefunc(xmlhttp);};
	xmlhttp.open("POST", url,true);
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
	xmlhttp.setRequestHeader("Content-length", params.length);
	xmlhttp.setRequestHeader("Connection", "close");

	xmlhttp.send(params);
	return true;
    } else {
	return false;
    }
}

/* Remplacement d'un bloc html par le contenu d'une requete Ajax:
 */
function chargeBlocAjax(url, id) {

    var trait_response = function(xhr) {
	if (xhr.readyState == 4) {
	    if (xhr.status == 200) {
	    	var reponse=xhr.responseText;
	    	document.getElementById(id).innerHTML=reponse;
	    } else {
	    	document.getElementById(id).innerHTML="<b>Chargement bloc Ajax Impossible: </b>"+xhr.statusText;
	    }
	}
    };

    if (executeAjaxQueryGET(url, trait_response)) {
	return true;
    } else {
	document.getElementById(id).innerHTML="<b>Chargement bloc Ajax Impossible: </b> Votre navigateur n'est pas compatible, veuillez le mettre a jour";
	return false;
    }
}

/* Redirection via une URL obtenue par une requete Ajax:
 */
function redirigeViaAjax(url) {

    var trait_response = function(xhr) {
	if (xhr.readyState == 4 && xhr.status == 200) {
	    var url_value= xhr.responseText;
	    url_value = (url_value.replace("\r", ""));
	    url_value = (url_value.replace("\n", ""));
	    // meme chose en regexp ?: url_value = url_value.replace(/^\s*/im,"");
	    window.location.href = url_value;
	}
    };

    if (executeAjaxQueryGET(url, trait_response)) {
	return true;
    } else {
	return false;
    }
}

function html_entity_decode(str) {
    var ta=document.createElement("textarea");
    ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
    return ta.value;
}

