// -------------------------------------------------------------------------
//  Boite a outils JavaScript XmlHttpRequest
// -------------------------------------------------------------------------
//  PREFIXE: rqst0
// -------------------------------------------------------------------------

// -------------------------------------------------------------------------
//  Initialisation suivant navigateur
// -------------------------------------------------------------------------
//  [RETURN] Objet XmlHttpRequest ou null si erreur
// -------------------------------------------------------------------------

function shr_rqst0_GetXmlHttpRequest()
{
 var lintCurrentProgID;
 var lintCurrentProgIDMax;
 var lobjXmlHttpRequest = null;

 // IE Browsers
 var ltstrProgID = ['msxml2.xmlhttp.5.0','msxml2.xmlhttp.4.0','msxml2.xmlhttp.3.0','msxml2.xmlhttp','Microsoft.XMLHttp'];

 for (lintCurrentProgID=0,lintCurrentProgIDMax=ltstrProgID.length ; lintCurrentProgID<lintCurrentProgIDMax ; lintCurrentProgID++)
    {
     try
        { lobjXmlHttpRequest = new ActiveXObject(ltstrProgID[lintCurrentProgID]); }
     catch(ex){}
    }

 // Mozilla Browsers
 if (  (!lobjXmlHttpRequest)
     &&(typeof XMLHttpRequest != 'undefined') )
   { lobjXmlHttpRequest = new XMLHttpRequest(); }

 return(lobjXmlHttpRequest);
}


// -------------------------------------------------------------------------
//  Encode d'une URL
// -------------------------------------------------------------------------
//  [IN] pstrData Données à encoder
//  [RETURN] Données après encodage
// -------------------------------------------------------------------------

function shr_rqst0_Escape(pstrData)
{
 // Encodage de base
 lstrData = escape(pstrData);

 // Encodage du carractere + non encode par la fonction escape
 lstrData = lstrData.replace(/\+/g,'%2B');

 return(lstrData);
}


// -------------------------------------------------------------------------
//  Execution d'une requete serveur sans retour de données et sans
//  Rechargement de la page
// -------------------------------------------------------------------------
//  [IN] pstrURL : URL d'appel
//  [IN] pstrData : Données POST sous la forme : Nom1=Valeur1&Nom2=Valeur2
//  [RETURN] bool : true si requete émise, sinon false
// -------------------------------------------------------------------------

function shr_rqst0_SendData(pstrURL, pstrData)
{
 var lobjXmlHttpRequest = shr_rqst0_GetXmlHttpRequest();

 if (lobjXmlHttpRequest == null)
   { return(false); }

 lobjXmlHttpRequest.open('POST',pstrURL,true);
 lobjXmlHttpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 lobjXmlHttpRequest.send(pstrData);
 return(true);
}


// -------------------------------------------------------------------------
//  Mise en forme des données d'un formulaire pour un envois.
// -------------------------------------------------------------------------
//  [IN] pobjForm : Formulaire
//  [RETURN] string : Données du formulaire après mise en forme
// -------------------------------------------------------------------------

function shr_rqst0_GetFormData(pobjForm)
{
 var lintI;
 var lintIMax;
 var lstrRequest = '';

 lobjFormInfo = eval(pobjForm.name + 'FormInfo');

 if (typeof lobjFormInfo.OnSubmitBuild == 'function')
   { lobjFormInfo.OnSubmitBuild(); }

 for (lintI=0,lintIMax=pobjForm.elements.length ; lintI<lintIMax ; lintI++)
    {
     // Uniquement si checkbox ou radio bouton selectionne
     if (  (  (pobjForm.elements[lintI].type == 'checkbox')
            ||(pobjForm.elements[lintI].type == 'radio') )
         &&(!pobjForm.elements[lintI].checked) )
       { continue; }

     // Zone speciale (redirection sur modVPost)
     if (pobjForm.elements[lintI].name == 'strFormAction')
       { continue; }

     lstrRequest += '&' + pobjForm.elements[lintI].name + '=' + shr_rqst0_Escape(pobjForm.elements[lintI].value);
    }

 return(lstrRequest);
}

// -------------------------------------------------------------------------
//  Retourne les données en retour sous la forme d'un objet.
// -------------------------------------------------------------------------
//  [IN] pstrResponseText : Chaine de réponse
//  [RETURN] object : Objet regroupant les variables et leurs valeurs
// -------------------------------------------------------------------------

function shr_rqst0_XmlHttpRequestDecode(pstrResponseText)
{
 lobjResponse = null;
 eval('var lobjResponse={' + unescape(pstrResponseText) + '};');
 return(lobjResponse);
}
