var xhrSuggest = createXhrObject();
var focus = false;
var currentId = 0;
var suggestLength = 0;
var inList;

function addLettre(search,idVille,nomVille) {
	
	if(xhrSuggest) {
		if(search.length > 1) {
			try {
				xhrSuggest.open('GET','etab_suggest_act.php?etab='+escape(search)+'&ville='+idVille+'&nom_ville='+nomVille,true);
				xhrSuggest.send(null);
				//On passe la fonction écouteur : ATTENTION => ne jamais metter de parentheses a la fonction passée !!
				xhrSuggest.onreadystatechange = handleAddLettreRequestStateChange;
			}
			catch(e){
				alert('Erreur JS : function addLettre\n' + e.toString());
			}
		}
		else {
			document.getElementById('suggestDiv').style.display = 'none';
		}	
	}
	else {
		alert('addLettre\n Objet Manquant ! ');
	}	
}

/*
Fonction ecouteur de la reponse du serveur

Propriétés de readyState :
	0 = uninitilized
	1 = loading
	2 = loaded
	3 = interactive
	4 = complete
	
	ATTENTION => Firefox affiche plusieurs fois les alert
				il renvoie plusieurs fois le statut 200, faire attention a ce qu'il n'execute pas les lecture de reponses a chaque fois !
*/
function handleAddLettreRequestStateChange() {	
	
	//DEBUG
	if(xhrSuggest) {		
		if(xhrSuggest.readyState == 4) {
			//continue seulement si le statut HTTP est OK
			if(xhrSuggest.status == 200) {
				handleAddLettreServerResponse();
			}
		}
	}
	else {
		alert('handleAddPopulaireRequestStateChange\nObjet xhr manquant !');
	}
}

//Recupere la reponse du serveur et l'affiche
function handleAddLettreServerResponse() {
	// Initialisation de la variable de contenu
	var html = '';
	var suggestXMLResponse;
	suggestXMLResponse = xhrSuggest.responseXML;
	
	xmlRoot = suggestXMLResponse.documentElement;
	
	var ville = xmlRoot.getElementsByTagName('ville');
	ville = ville.item(0).getAttribute('nom_ville');
	etab = xmlRoot.getElementsByTagName('etab');
		
	var listEtab = document.getElementById('suggestDiv');
	var html = '';
		
	// Nombre de résultats renvoyés
	suggestLength = etab.length;
	
	// On affiche la liste
	if(suggestLength > 0) {
		listEtab.style.display = 'block';
	}
	else {
		listEtab.style.display = 'none';
	}
	
	var idList = 1; // Création des id a la volée
	
	if(suggestLength > 15) {
		suggestLength = 16; // le nombre de résultats apparant dans la liste, permet de créer des indices
		for(var i=0;i<15;i++) {
			var id_etab = etab.item(i).getAttribute('id_etab');
			var classe = etab.item(i).getAttribute('nom_url_classe');
			var nom_etab = etab.item(i).getAttribute('nom_etab');		
			var nom_url_etab = etab.item(i).getAttribute('nom_url_etab');		
		
			html += '<input	onBlur="focusOff();"';
			html += 'onMouseOver="giveFocus('+idList+',1);" ';
			html += 'onClick="redirect(\''+classe+'-'+ville+'-'+id_etab+'-'+nom_url_etab+'.html\',\''+document.getElementById('list0').value+'\',\''+escape(nom_etab)+'\',\'click\');"';
			html += 'readonly="readonly" type="text" class="fieldSuggest nanoTypo vert bold"';
			html += 'id="list'+idList+'" value="'+unescape(nom_etab)+'" name=\''+classe+'-'+ville+'-'+id_etab+'-'+nom_url_etab+'.html\' />';
				
			idList++;
	
		}
		// On ajoute une ligne pour voir tout les résultats	
		html += '<input	onBlur="focusOff();"';
		html += 'onMouseOver="giveFocus('+idList+',1);" ';
		html += 'onClick="autoCompletion.submit()"';
		html += 'readonly="readonly" type="text" class="fieldSuggest nanoTypo grisMoyen bold"';
		html += 'id="list'+idList+'" value="Voir plus de résultats..." name=\'\' />';
	}
	else {
		for(var i=0;i<suggestLength;i++) {
			var id_etab = etab.item(i).getAttribute('id_etab');
			var classe = etab.item(i).getAttribute('nom_url_classe');
			var nom_etab = etab.item(i).getAttribute('nom_etab');
			var nom_url_etab = etab.item(i).getAttribute('nom_url_etab');
		
			html += '<input	onBlur="focusOff();"';
			html += 'onMouseOver="giveFocus('+idList+',1);" ';
			html += 'onClick="redirect(\''+classe+'-'+ville+'-'+id_etab+'-'+nom_url_etab+'.html\',\''+document.getElementById('list0').value+'\',\''+escape(nom_etab)+'\',\'click\');"';
			html += 'readonly="readonly" type="text" class="fieldSuggest nanoTypo vert bold"';
			html += 'id="list'+idList+'" value="'+unescape(nom_etab)+'" name=\''+classe+'-'+ville+'-'+id_etab+'-'+nom_url_etab+'.html\' />';
						
			idList++;
		}	
	}
	
	html += '<span  class="grisClair microTypo curseurMain textAlignRight"  onClick="document.getElementById(\'suggestDiv\').style.display=\'none\';">x fermez</span>';

	listEtab.innerHTML = html;
	document.body.onclick = function () { document.getElementById('suggestDiv').style.display = 'none';};
}

/***************************************** Gestion des fleches HAUT et BAS *******************************************************/

// Gestion des événements claviers
function eventCapture(value,idVille,nomVille,event) {
	
	switch (event.keyCode) {
		// TOUCHE " FLECHE BAS "
		case 40:// On enlève le focus de l'élément courant
				looseFocus(currentId);
				focusInList(); 
				// Si l'élément courant n'est pas le dernier de la liste
				if (currentId < suggestLength ) {
					// On donne le focus à l'élément suivant
					giveFocus(currentId+1);
					currentId++; // On déplace l'élément suivant
				}
				else {
					// On revient au début de la liste
					giveFocus(1);
					currentId = 1;
				}
		break;
						
		// TOUCHE " FLECHE HAUT "
		case 38: // Si l'élément courant n'est pas le 1er de la liste
				if (currentId >= 1) {
					focusInList(); 
					// On enlève le focus
					looseFocus(currentId);
					// Si on est pas retourné en position 0
					if (currentId >= 2) {
						// On donne le focus à l'élément au-dessus
						giveFocus(currentId-1);
						// On déplace l'élément courant
						currentId--;
					}
					else {
						// On boucle en fin de liste
						giveFocus(suggestLength);
						currentId = suggestLength;
					}
					giveFocus(currentId);
				}
		break;
						
		// TOUCHES " FLECHE GAUCHE " et " FLECHE DROITE " desactivees
		case 37: break;
		case 39: break;
		
		// TOUCHE " ENTRER "
		case 13: // Si le focus est sur un élément de la liste de suggestion
				if (currentId != 0 ) {
					// Si il s'agit d'un établissement (name = lien de la page de l'établissement)
					if(document.getElementById('list'+currentId).name != '') {						
						// On redirige vers la page de l'établissement
						redirect(document.getElementById('list'+currentId).name,value,escape(document.getElementById('list'+currentId).value),'enter');
						
					}
					// On est sur un autre élément (plus de résultat...)
					else {
						focusOnField();
						// On valide le formulaire
						autoCompletion.submit();
					}
				}
		break;
							
		// TOUTES LES AUTRES TOUCHES => On éxécute la fonction AJAX
		default:	
				currentId = 0;
				addLettre(value,idVille,nomVille);
		break;
	
	} // Fin du SWITCH
}
/*
 * Permet de controler que l'on est dans une recherche
 * Cela permet de ne pa effacer la liste si un 
 * click est porte au niveau de la liste, alors qu'elle sera effacee si on click ailleur
*/
function focusOn() {
	focus = true;
}
function focusOff() {
	focus = false;
}


function focusInList()
{
	inList = true;
}

function focusOnField()
{
	inList = false;
}

function valid_form()
{
	if(inList)
	{
		return false;
	}
	else
	{
		return true;
	}
}

/*
 * Permet la redirection apres un click ou l'appui sur "entrer"
*/
function redirect(lien_href,value,fiche_redirect,method) {
	
	//alert(fiche_redirect);
	var xhrFindEtab = createXhrObject();
	if(xhrFindEtab) {
		
		try {
			xhrFindEtab.open('GET','etab_suggest_valid_act.php?search='+value+'&redirect='+fiche_redirect+'&method='+method,false);
			xhrFindEtab.send(null);
			//On passe la fonction écouteur : ATTENTION => ne jamais metter de parentheses a la fonction passée !!
			
			//xhrFindEtab.onreadystatechange = handleRedirectRequestStateChange;
			
		}
		catch(e){
			alert('Erreur JS : function addLettre\n' + e.toString());
		}
	
	}
	else {
		alert('addLettre\n Objet Manquant ! ');
	}	
	
	window.location.href = lien_href;
}


/**
  *		Permet de changer le style des inputs
  *		@ param : id => id de l'input text a changer le style
  *			      control => permet suivant les cas l'activation de certaines operations
  *
  */
function giveFocus(id,control) {
	if (id != 0 && id != currentId) {
		var inputHidden = document.getElementById('list'+id);
		inputHidden.className = 'fieldSuggestSelected nanoTypo blanc bold';
		inputHidden.style.cursor = 'pointer'; // Pour IE qui ne prend pas en compte les :hover sur les div en CSS
	}
	// Permet d'enlever le focus sur l'id courant
	if (control == 1 && id != currentId)	{
		looseFocus(currentId);
		currentId = id;
	}
}

/**
  *		Permet d'enlever le style focus et de remettre le style normal
  *		Fonction appelee depuis " give_focus_style " avant de mettre le style focus au nouveau input courant
  *
  *		@ param : id => id de l'input text a desactiver le style focus
  */
function looseFocus(id) {
	if (currentId != 0) {
		var inputHidden = document.getElementById('list'+id);
		// Si on quitte un établissement
		if(inputHidden.name != '') {
			inputHidden.className = 'fieldSuggest nanoTypo vert bold';
		}
		// on quitte un autre élément (voir plus...)
		else {
			inputHidden.className = 'fieldSuggest nanoTypo grisMoyen bold';
		}			
	}
}

