////////////////////////////////////////////////////////////////////
//Recuperer l'objet XMLHttpRequest
function getXhr()
{
    var xhr = null; 
    if(window.XMLHttpRequest) {// Firefox et autres 
        xhr = new XMLHttpRequest(); 
        }

    else if(window.ActiveXObject)
    { // Internet Explorer 
        try {
            xhr = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    else 
    { // XMLHttpRequest non supporté par le navigateur 
        //alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
        xhr = false; 
    } 
    return xhr;
}

function getsiteurl() {
    try {
        return getElement_By_Id("Config_UrlSite").value.toString()
    }
    catch (ex) {
        return "";
    }

}

//Interfaces publiques
//******************************************************************************************************
//StrURL : Page demandée
//strParam : les paramètres séparés par &
//bxml : indique si le flux de retour est de type xml ou seulement de type text
function serviceGET(strUrl,strParam,bxml) { 
	return callservice(strUrl,strParam,"GET",bxml);
}
function servicePOST(strUrl,strParam,bxml) { // Proxy Pour POST
	
	return callservice(strUrl,strParam,"POST",bxml);
}

function srzService() {
    this.text=""; // this.responseText : le contenu
	this.stCode = ""; // statut HTTP : 200 si Ok, sinon les autres
	this.rtCode = ""; // OK ou NOK suivant ce que rend le service
	this.msg = ""; // le message d'erreur ou le résultat de la fonction
	this.doc=""; // l'objet DOM
	this.content=""; // l'intérieur du document
	this.getContent=getContent; //Requête this.getContent("//ROOT/ELEMENT") => contenu (entre les balises ><)
	this.getAttribute = getAttribute; //Requête this.getContent("//ROOT/ELEMENT","att") => valeur de lattribut att de la balise element
	this.ErrorCode = "";
}


//Méthodes privées
//******************************************************************************************************

function evaluateXPath(aNode, aExpr) { // Requete XPATH FireFox
  var xpe = new XPathEvaluator();
  var nsResolver = xpe.createNSResolver(aNode.ownerDocument == null ?
    aNode.documentElement : aNode.ownerDocument.documentElement);
  var result = xpe.evaluate(aExpr, aNode, nsResolver, 0, null);
  var found = [];
  var res;
  while (res = result.iterateNext())
    found.push(res);
  return found;
}

//Récupérer du contenu : //Root/Element
function getContent(uri) {
	if (window.ActiveXObject) {
		return this.doc.selectNodes(uri)[0].text;
	} else {
	    if (window.XMLHttpRequest) {
	    		return evaluateXPath(this.doc,uri)[0].textContent;
		    }
	    }
	return res;
    }

//Récupérer un attribut : //Root/Element, label de l'attribut
function getAttribute(uri,Attribute) {
	var res="";
	try
	{
	    if (window.ActiveXObject) {
		    return this.doc.selectNodes(uri)[0].getAttribute(Attribute);
	    } else {
	        if (window.XMLHttpRequest) {
    	        
	             return evaluateXPath(this.doc,uri + "/@" + Attribute)[0].value;
		        }
	        }
	}
	catch(ex){}
	return res;
}

// fonction proprement dite d'appel
function callservice(strUrl,strParam,mode,bxml) {

	var xmlHttp = getXhr();
	var rs = new srzService();
	var docXML = null;
	if (mode=="POST") {
	    xmlHttp.open(mode, strUrl,false);
	    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	    
	    xmlHttp.send(strParam);
	} else {
	    xmlHttp.open(mode, strUrl + "?" + strParam,false);
	    //xmlHttp.setRequestHeader("Content-Type", "text/xml");
	    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	    xmlHttp.send(null);
	}

	var strHTML = "";
	if (xmlHttp.readyState == 4) { 
	    rs.stCode = xmlHttp.status;
        rs.text = xmlHttp.responseText;
		if (xmlHttp.status != 200) {
			rs.msg = "Erreur HTTP : " +  xmlHttp.status;
			//return null;
		}
		if (bxml) {
            if (window.ActiveXObject) {
			    docXML = new ActiveXObject("Microsoft.XMLDOM");
			    docXML.loadXML(xmlHttp.responseText);
            } else {
                docXML = (new DOMParser()).parseFromString(xmlHttp.responseText, "text/xml");
            }
            rs.doc = docXML;
            rs.rtCode = rs.getAttribute("//R","status");
	        rs.msg  = rs.getAttribute ("//R","message");
	        rs.content = rs.getContent ("//R");
	        //if (rs.rtCode != "OK") {
    	    //    alert("Erreur : " + rs.msg);
	        //    return null;
	        //    }
	        }
	   }
     return rs;
}

function TransformMsgResultToXML(msg) {
    var rs = new srzService();
    if (window.ActiveXObject) {
        docXML = new ActiveXObject("Microsoft.XMLDOM");
        docXML.loadXML(msg);
    } else {
        docXML = (new DOMParser()).parseFromString(msg, "text/xml");
    }
    rs.doc = docXML;
    rs.rtCode = rs.getAttribute("//R", "status");
    rs.msg = rs.getAttribute("//R", "message");
    rs.content = rs.getContent("//R");
    rs.errorCode = rs.getAttribute("//R", "errorCode");
    return rs;
}
// fonction de test
function test() {
var r = servicePOST(getsiteurl()+"/XMLHttpProxy/CanevasService.aspx","Action=InContent&p1=Param1&p2=Parametre2",true);
alert(r.rtCode+ "\n" + r.msg+ "\n" + r.content);
alert(r.getContent("//R/p1"));
alert(r.getAttribute("//R/p2","valeur"))
}
