//******************************************************************************************************************//
//                                          Fonction Ajax pour l'Aedituus
//
//  Recherche du GDS d'un utilisateur par son username
//******************************************************************************************************************//

//******************************************************************************************************************
//  Initialisation des variables
//******************************************************************************************************************
// les variables "champs HTML"
var _documentForm = null;           // le formulaire contenant notre champ texte
var _inputField = null;             // le champ texte lui-même
var _inputGds = null;               // Le champ qui va recevoir le GDS
var _divGds = null;
var _submitButton = null;           // le bouton submit de notre formulaire

// variables JS
var _oldInputFieldValue="";         // valeur précédente du champ texte
var _currentInputFieldValue="";     // valeur actuelle du champ texte
var _xmlHttp = null;                // l'objet xmlHttpRequest utilisé pour contacter le serveur
var _resultCache = new Array();     // mécanisme de cache des requêtes

//******************************************************************************************************************
//  Initialisation du script
//******************************************************************************************************************
function initGetGDS(forml, username, valider, champgds, info_gds)
{
    //alert("on est là..getGDS");
    
    _documentForm = forml;
    _inputField = username;
    _inputGds = champgds;
    _divGds = info_gds;
    _submitButton = valider;

    mainLoop();
}

//******************************************************************************************************************
// retourne un objet xmlHttpRequest.
// méthode compatible entre tous les navigateurs (IE/Firefox/Opera)
//******************************************************************************************************************
function getXMLHTTP()
{
    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)
        {
            try
            {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e1)
            {
                xhr = null;
            }
        }
    }
    else
    { // XMLHttpRequest non supporté par le navigateur
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    }
    return xhr;
}

//******************************************************************************************************************
// Boucle principale
//******************************************************************************************************************
function mainLoop()
{
    _currentInputFieldValue = _inputField.value;
    if(_oldInputFieldValue != _currentInputFieldValue)
    {
        var username = escapeURI(_currentInputFieldValue);
        var gds=_resultCache[_currentInputFieldValue];
        if(gds)
        { // la réponse était encore dans le cache
            _inputGds.value = gds;
            //_divGds.innerHTML = 'GDS ok';
        }
        else
        {
            callSuggestions(username) // appel distant
        }
        _inputField.focus()
    }
    _oldInputFieldValue = _currentInputFieldValue;
    setTimeout("mainLoop()",200); // la fonction se redéclenchera dans 200 ms
    return true
}

//******************************************************************************************************************
// échappe les caractères spéciaux
//******************************************************************************************************************
function escapeURI(La)
{
    if(encodeURIComponent)
    {
        return encodeURIComponent(La);
    }
    if(escape)
    {
        return escape(La)
    }
}

//******************************************************************************************************************
//  Connection au serveur et envoie de la requete, récupération du GDS si il y en a un
//******************************************************************************************************************
function callSuggestions(username)
{
//alert("Connection au serveur et récupération du GDS");

    if(_xmlHttp && _xmlHttp.readyState!=0)
    {
        _xmlHttp.abort()
    }
    _xmlHttp = getXMLHTTP();
    if(_xmlHttp)
    {
        //appel à l'url distante
        _xmlHttp.open("GET",_adresseRecherche+"?username="+username,true);
        _xmlHttp.onreadystatechange=function()
        {
            if(_xmlHttp.readyState == 4 && _xmlHttp.responseText)
            {
                var gds = _xmlHttp.responseText;
                _inputGds.value = gds;
                //_divGds.innerHTML = gds;
                cacheResults(username, gds)
            }
            else
            {
                _inputGds.value = '';
                //_divGds.innerHTML = 'GDS non trouvé';
            }
        };
        // envoi de la requête
        _xmlHttp.send(null)
    }
}

//******************************************************************************************************************
// Mécanisme de caching des réponses
//******************************************************************************************************************
function cacheResults(username, gds)

{
    _resultCache[username] = gds
}


function urlencode (text)
{

    text = text.toString();

    // this escapes 128 - 255, as JS uses the unicode code points for them.
    // This causes problems with submitting text via AJAX with the UTF-8 charset.
    var matches = text.match(/[\x90-\xFF]/g);
    if (matches)
    {
        for (var matchid = 0; matchid < matches.length; matchid++)
        {
            var char_code = matches[matchid].charCodeAt(0);
            text = text.replace(matches[matchid], '%u00' + (char_code & 0xFF).toString(16).toUpperCase());
        }
    }

    return escape(text).replace(/\+/g, "%2B");
}

