/** Ce script permet de suggérer les villes et départements à partir d'au moins 2 tapes au clavier lors de la saisie d'une ville */ /** * Script requis : * suggest_dep_ville_def.js contenant les définitions particulières à l'espace (ou le site) et à mettre dans l'espace */ gs_ancienne_recherche = ''; var ajax_ville_retour = { departements_villes_selon_chaine: function( psa_liste ) { liste_afficher( psa_liste ); } } gAV_ville = new AjaxVille( ajax_ville_retour ); // globale conservant les résultats de la liste de propositions courante var gsa_liste; // Index de la ville sélectionnée dans la liste var gi_index_selectionne = 0; // Valeur courante var gs_valeur_courante = ''; var validation_formulaire = false; function suggest_dep_ville_start() { ls_recherche = getelement( 'localisation' ).value; // Détecte si le texte a été modifié, càd s'il est différent du texte précédent // et si ce n'est pas le texte de départ (4 formes possibles) if( (ls_recherche != gs_ancienne_recherche) && (ls_recherche != 'Ville, cp, departement') && (ls_recherche != 'Ville, cp, département') && (ls_recherche != 'Ville ou departement') && (ls_recherche != 'Ville ou département') ) { if( ls_recherche.length > 1 ) { // appel gAV_ville.departements_villes_selon_chaine( ls_recherche, gia_liste_departements ); } else { getelement( 'div_suggest_dep_ville_liste' ).style.display = 'none'; } gs_ancienne_recherche = ls_recherche; } window.setTimeout( 'suggest_dep_ville_start()', 250 ); } function liste_afficher( psa_liste ) { gsa_liste = psa_liste; ldiv_liste = getelement( 'div_suggest_dep_ville_liste' ); ldiv_liste.innerHTML = ''; if( psa_liste.length == 0 ) { ldiv_liste.style.display = 'none'; } else { ldiv_liste.style.display = 'block'; for( li=0 ; li < psa_liste.length ; li++ ) { var la_ligne = document.createElement( "a" ); ls_resultat = psa_liste[li]; // ls_resultat est de la forme clef#valeur (Agence Bidule) // où xxx est l'id du client. On le sépare pour le mémoriser // au niveau de l'attribut tag du span et on ne l'affiche pas. ls_clef = ls_resultat.substr( 0, ls_resultat.indexOf("#") ); ls_valeur = ls_resultat.substr( ls_resultat.indexOf("#") + 1 ); if( li == gi_index_selectionne ) { la_ligne.className = 'selection'; gs_valeur_courante = ls_valeur; } la_ligne.innerHTML = ls_valeur; la_ligne.href = '#'; la_ligne.tag = ls_clef; la_ligne.onmousedown = suggest_dep_ville_select; ldiv_liste.appendChild( la_ligne ); } } } function suggest_dep_ville_select( evenement, ps_valeur_courante ) { if( typeof(ps_valeur_courante) == 'undefined' ) { // affiche dans l'input l'élément sélectionné getelement( 'localisation' ).value = this.innerHTML; } else { getelement( 'localisation' ).value = gs_valeur_courante; } // neutralise le prochain appel gs_ancienne_recherche = getelement( 'localisation' ).value; // masque la liste getelement( 'div_suggest_dep_ville_liste' ).style.display = 'none'; } // Permet de gérer la sélection avec les touches du clavier function modifier_selection( evenement ) { var touche = window.event ? evenement.keyCode : evenement.which; if( (touche == 40) && (gi_index_selectionne < gsa_liste.length -1) ) { gi_index_selectionne++; liste_afficher( gsa_liste ); } else if( (touche == 38) && (gi_index_selectionne > 0) ) { gi_index_selectionne--; liste_afficher( gsa_liste ); } else if( touche == 13 ) { suggest_dep_ville_select( null, gs_valeur_courante ); } } function valider_formulaire( valeur ) { if( valeur != null ) { validation_formulaire = valeur; } return validation_formulaire; }