// Constructeur de la classe
function AutoComplete(oTextbox, oDivautocomplete, oHiddentextbox, cWs) {
    // Déclaration des variables membres (propriétés)
    // on stocke la référence à this dans une variable. 
    var self                = this;

    // Déclaration d'une variable publique
    this.oTextBox            = oTextbox;
    this.odivAutocomplete    = oDivautocomplete;
    this.oHiddenTextBox      = oHiddentextbox;
    this.cWs                 = cWs;
    this.bValid              = false;
   
    // Déclaration d'une fonction membre (méthode)
    //this.Selectionne = selectionne;
    //this.Valid       = validSaisie;

    // Pour apprendre à binder un événement :
    //this.TextBox.bind('keyup', this.Bonjour); // appel la fonction Bonjour()
    // ou
    //this.TextBox.bind('keyup', function() {alert('User clicked on "foo."');  });

    //=====================================================
    // Method : TextBox:keyup
    //=====================================================
    self.oTextBox.keyup(function() {
        var valeur = self.oTextBox.val();

        if (valeur.length >= 2) {
            var position = self.oTextBox.position();

            self.odivAutocomplete.css({ "z-index": 10000, "left": position.left + "px", "top": (position.top + self.oTextBox.height() + 5) + "px" });

            self.odivAutocomplete.show("slow");
            //Méthode GET :
            self.odivAutocomplete.load(self.cWs + "?methode=ville&commune=" + escape(valeur) + "&nb=15");

        } else {
            self.oHiddenTextBox.val('');
        }
    });

    //=====================================================
    // Method : validSaisie
    //=====================================================
    self.validSaisie = function() {
        var ValRetour = true;
        if (self.oHiddenTextBox.val() == '' && self.oTextBox.val() != '') {
            // La personne a tapé une ville mais n'a pas validé son choix
            // en cliquant dans une ville dans la liste :
            alert("Vous devez selectionner une localisation dans la liste. Merci");
            ValRetour = false;
        }
        self.bValid = ValRetour;
    };

    //=====================================================
    // Method : divAutocomplete.click
    // On recupere le click de l'internaute
    //=====================================================
    self.odivAutocomplete.click(function(event) {
        var $target = $(event.target);
        if ($target.is("li")) {
            //alert($target.html());                // recupere la valeur du li
            //alert($target.attr('custom:value'));  // recupère le parametre particulier du li
            self.oTextBox.val($target.html());
            self.oHiddenTextBox.val($target.attr('custom:value'));
            self.odivAutocomplete.hide("slow");
        }
    });

}

