/**
 * @class Client
 * Client des services de consultation de la base de données
 *
 * @note      Copyright(C) CCI.fr SAS, 2004
 * @author    Olivier GUILLOUX <olivier.guilloux@entreprise.cci.fr>
 * @author    Florent LAOT <f.laot@entreprise.cci.fr>
 * @author    François DE FAUCAL <f.juindefaucal@entreprise.cci.fr>
 * @version   $Revision: 4436 $
 * @date      $Date: 2008-03-18 14:27:00 +0100 (mar, 18 mar 2008) $
 */

/**
 * Lire le filtre, construit l'url du service, effectue l'appel XMLRPC
 *
 * @param p_identifiantSousOnglet: Identifiant du sous onglet
 *
 */
function C_validerFiltre(p_idSousOnglet){
    // Initialise le service et l'id
    this.identifiant = p_idSousOnglet;
    this.executer();
    return this.resultat;
}
function C_finaliserExecution(){
    // Emet la requête
    try {
	    this.xmlhttp.send(null);
        
        // Variables globales déclarées dans Page.js
        // XXX: revoir complètement la fonction F_lireFiltre et ce qui est 
        // ci-dessous
	    var familleFiltre = this.identifiant.charAt(0).toUpperCase() +
    	    this.identifiant.substring(1, this.identifiant.length);
        valeurFiltre = document.getElementById("filtre" + familleFiltre).value;
  	    verrouFiltrage = false;
    } catch(e) {    	
	    var avertissement = new ExceptionAEF("WC002");
    	avertissement.afficher();

		window.setTimeout("verrouFiltrage = false", 120);
    }
    return this.resultat;
}

/**
 * Evaluer et transferer les données
 */
function C_setOptions(self){
    // Initialise le nom du formulaire à remplir
    var identifiant = 'valeurs' + self.identifiant.charAt(0).toUpperCase() 
    	+ self.identifiant.substring(1, self.identifiant.length);
    var champ = document.getElementById(identifiant);

    // 'readyState == 4' correspond au téléchargement complet du fichier
    if (self.xmlhttp.readyState == 4) {
        texte = self.xmlhttp.responseText;
        if (texte.length > 0) {

            // Evalue le résultat
            try {
                reponse = self.xmlhttp.responseText;
                eval('list = ' + reponse);
            } catch(e) {
            	e = new ExceptionAEF('WC003');    	
            	e.ajouterReference("Client.js", 80);
		    	e.afficher();
        
                var list = new Array(0);
            }

            // Vide les options du select
            for (var i=(champ.options.length-1); i>=0; i--) {
                champ.options[i] = null;
            }
            champ.selectedIndex = -1;

            // Transfert des données dans la liste
            // Ce n'est pas au service de filtrer, c'est au client de prendre ce qu'il veut
            // On fait donc un min entre le nombre de valeurs que nous retourne le service et 25 qui est le seuil acceptable.
            var max = Math.min(list.length,25);
            for (i = 0; i < max; i++) {
                optionValue = list[i][0];
                optionLabel = list[i][1];
                newOption = new Option(optionLabel, optionValue);
                newOption.setAttribute('title', optionLabel);
                champ.options[i] = newOption;
            }
        }
    }
    return champ.id;
}


/**
 * Cette classe est la classe cliente des services.
 * Documentation sur XMLHttpRequest à l'adresse suivante :
 * http://www.xulplanet.com/references/elemref/ref_XMLHttpRequest.html
 */
function ClientListeFiltre() {
    this.parent = ClientService;
    this.parent();

    // Identifiant du sous onglet
    this.identifiant = null;

    this.validerFiltre = C_validerFiltre;
    this.handlerEvenement = C_setOptions;
    this.finaliserExecution = C_finaliserExecution;
}
