var selectionEnCours = false; // spécifie si l'utilisateur est en train de sélectionner un item parmi la liste de suggestions

function initSuggest() {
  //  Création des objets pour la mise en place du suggest
  $("input.suggestable").each(function () {
    $(this).after(createSuggestBlock(this)) // Construction du bloc suggest
      .focus(function(){ // démarre la suggestion
        $("#"+this.id+"+div>div").show();
        demanderReponses(this);         
      })
      .keyup(function() { 
        $("#"+this.id+"+div>div").show();
        demanderReponses(this); // démarre la suggestion
      })
      .blur(function() { // stoppe la suggestion
        if(selectionEnCours) { return; } // sauf si la sélection est en cours
        $("#"+this.id+"+div>div").hide();      
      })
      .attr({autocomplete: "off"});
  }); 
}

/**
 * Construit un bloc de suggestion, à l'intérieur de parent, associé à node et placé avant nextNode
 */ 
function createSuggestBlock(node){
  return $(document.createElement("div")) // wrapper
    .addClass("suggest-block")
    .click(function(e) {
      $(this).children().hide();
    })
    .append(
      $(document.createElement("div")) // bloc contenant la liste des résultats
        .addClass("sgc")
        .mouseover(function() {
          selectionEnCours = true;
        })
        .mouseout(function() {
          selectionEnCours = false;
        })
        .hide()
    );  
}

function demanderReponses(input){
  // Construction des paramètres de la requête
  var params = {champ: input.id};
  $(input).parent().children("input").each(function() {
    params[this.id] = this.value;
  });
  
  // Appel Ajax
  $.post("suggest.ajax.php", params, function (data, textStatus) {
    remplirBlocSuggestion(input, data);
  });

  selectionEnCours = false;
}

function remplirBlocSuggestion(input, data){
  var suggestDiv = $(input).next().children("div:first"); // on se positionne sur le div conteneur
  suggestDiv.empty(); // On vide le div
  var liste = data.split("\n");
  $(liste).each(function(i, valeur) { // On ajoute chaque valeur à la suggestion
    $(suggestDiv).append(
      $(document.createElement("div"))
        .addClass("suggest-link")
        .mouseover(function() {
          $(this).addClass("over");
        })
        .mouseout(function() {
          $(this).removeClass("over");
        })
        .click(function() {
          $(input).val($(this).text()); // Mise à jour de la valeur de l'input
        })
        .text(valeur)
    );
  });
}

