/******************************************************************************/
/* Permet lorsque l'on saisie une lettre d'avoir 	  */
/* dans une liste tous ce qui commence par la lettre ou qui contient celle-ci */
/* Peut contenir aussi un mot												  */
/******************************************************************************/ 

var magazinesArray;//tableau des noms des magazines et idProduit des magazines
var Nbmagazines;
var IdProduitMag;
var Nom = navigator.appName;
var NomMagazine;
var Results; // nbre de resultat trouvé
var titreTmp;
var nomSelected;
var inList; // flag pour voir si on est dans la liste
var elmFirst;
var esc; //flag permettant de verifier si on a cliqué ou pas à coté de la liste

//On récupère idmagazine : valeur de l'élément sélectionné dans la liste magazine. Cela correspond à un indice qui permettra d'aboutir
//via la ligne de code  'magazinesArray[idmagazine]' au nom du magazine et de la positionner dans la zone de saisie. 
//dataField : correspond au nom du champ de saisie départ ou arrivée sélectionné, où le résultat du clic su la liste magazine sera déposé.
function setDataFieldValue(dataField, idmagazine, indice, bKeyUP)
{
	var select = document.getElementById("idListe");
	var options = select.options;
	
 //La valeur '0xxAA' correspond au 1er élément des listes  : '<<<<< Liste : X magazines>>>>>, qui ne doit rien renvoyé lorsqu'on clique dessus.
 
 if (bKeyUP && event.keyCode != 13)		return;
 if (idmagazine == '0xxAA'){
 //alert("ie"); // IE
	dataField.value = titreTmp;
	document.recherche_titre.titre.focus();
	return;
}

 dataField.value					= dataField.lastCompletion = magazinesArray[idmagazine][0];
 NomMagazine = dataField.value;
 IdProduitMag = magazinesArray[idmagazine][1];
 esc=1;
 document.recherche_titre.titre.focus();
 dataField.resultList.innerHTML	= "";
 nomSelected = 1;
}

function setDataFieldValueSelected(event, dataField, idmagazine, indice, bKeyUP)
{
	var select = document.getElementById("idListe");
	var options = select.options;
	evt =  event.keyCode;
	esc=0;
	var select = document.getElementById("idListe");
	var options = select.options;
	
	//action lorsqu'on se trouve sur le 1er element de la liste et qu'on presse la fleche du haut
	//le focus revient sur la zone de saisie et recupere se que l'utilisateur avait saisie
	if (elmFirst == 1 && evt == 38)
	 {
		
		if (titreTmp !=  dataField.value) 
		{
			dataField.value = titreTmp;
		}
		esc=1;
		nomSelected = 0;
		NomMagazine = titreTmp;//dataField.value;
		document.recherche_titre.titre.focus();
		elmFirst=0;
		return;
	}
	//action lorsqu'on presse la touche escape
	//le focus revient sur la zone de saisie et recupere se que l'utilisateur avait saisie
	if (evt == 27)
	{
		if (titreTmp !=  dataField.value) 
			{
				dataField.value = titreTmp;
			}
			nomSelected = 0;
			NomMagazine = titreTmp;
			esc=1;
			document.recherche_titre.titre.focus();
			return ;
	}
	 dataField.value			= dataField.lastCompletion = magazinesArray[idmagazine][0];
	 NomMagazine = dataField.value;
	 IdProduitMag = magazinesArray[idmagazine][1];
	 nomSelected = 1;
	 
	if (options.length > 1)
	{	
		 if (options[1].selected && evt == 40){ elmFirst=2;}
		 if (options[0].selected){ elmFirst=1;}
	}
	else elmFirst=1;
	if ( event.keyCode == 13)
	 {
	 esc=1;
	 document.recherche_titre.titre.focus();
	 dataField.resultList.innerHTML	= "";
	 }
}

function onBlurSelect(dataField)
{
	//si on clic  n'importe ou sur la page, la liste disparait, la zone de saisie recupere le focus
	if (esc==1)
	{
	esc=0;
	}
	else
	{
	dataField.value = titreTmp;
	document.recherche_titre.titre.focus();
	dataField.resultList.innerHTML	= "";
	}
			//var select = document.getElementById("idListe");
			//var options = select.options;
			//options[0].disabled = true;
			//options[0].selected = true;
	//document.recherche_titre.titre.focus();
	//dataField.resultList.innerHTML	= "";
}

function onFocusSelect(event, dataField, idmagazine, indice, bKeyUP)
{			
			/*if (idmagazine == '0xxAA'){
				//alert("m"); // mozilla
				dataField.value = titreTmp;;
				document.recherche_titre.titre.focus();
				return;
			}*/
	  		 dataField.value			= dataField.lastCompletion = magazinesArray[idmagazine][0];
			 NomMagazine = dataField.value;
			 IdProduitMag = magazinesArray[idmagazine][1];
			 nomSelected = 1;
}

function initDataFieldForCompletion(dataFieldName, resultDiv, typeField, nextField)
{
 var dataField				= eval("document.recherche_titre."+dataFieldName);
 dataField.lastText			= "";
 dataField.lastCompletion	= "";
	
 if ( navigator.userAgent.indexOf('Mozilla/4.7') == -1 ) {
  dataField.resultList		= ((navigator.userAgent.toLowerCase().indexOf('netscape') > -1) || (navigator.userAgent.toLowerCase().indexOf('mozilla') > -1))
				? 	document.getElementById(resultDiv) : document.all[resultDiv];
 }
	
	dataField.fieldName			= dataFieldName;
	dataField.nextField		= nextField;
	dataField.typeField			= typeField;
}


function removeAccents(sNom)
{
	sNom = sNom.replace('à','a');
	sNom = sNom.replace('â','a');
	sNom = sNom.replace('ä','a');

	sNom = sNom.replace('é','e');
	sNom = sNom.replace('è','e');
	sNom = sNom.replace('ê','e');
	sNom = sNom.replace('ë','e');

	sNom = sNom.replace('ï','i');
	sNom = sNom.replace('î','i');

	sNom = sNom.replace('ô','o');
	sNom = sNom.replace('ö','o');

	sNom = sNom.replace('û','u');
	sNom = sNom.replace('ù','u');

	sNom = sNom.replace('ç','c');
	return sNom;
}


//Fonction qui regarde s'il y a des magazines à ou aux éléments saisies dans la zone de saisie.
//Rempli la liste déroulante des magazines correspondant à la saisie et l'affiche dans un calque.
//dataFieldValue : contient la valeur de ce qui a été saisie dans la zone départ ou arrivée,
//pour savoir si cette valeur est contenue dans le tableau des magazines.
//dataField : contient le nom du fomulaire qui englobe tous les champs de formulaire (saisie, les listes déroulantes...°
function findMag(dataField, dataFieldValue, event)
{
	titreTmp = dataFieldValue;
	evt=event;
 //nomSelected = 0;
 NomMagazine = dataFieldValue;
 if (dataField.lastText == dataFieldValue)	return;
 
 var newValue	= removeAccents(dataFieldValue).toLowerCase();
 var RL 			= dataField.resultList;

	// --- La zone a été vidée !
	if (newValue.length == 0)
	{
		RL.innerHTML		= "";
		dataField.lastText	= "";
		return;
	}

	// --- Tentative de saisie après completion !
	if (dataField.lastCompletion != "" && (dataFieldValue.substring(0, dataField.lastCompletion.length) == (dataField.lastCompletion)))
	{
		dataField.value = dataField.lastCompletion;
		if (navigator.userAgent.indexOf("Opera")!=-1)
		{
			dataField.select();
			dataField.value 	= dataField.lastCompletion;
		}
		return;		
	}
	
	var bPrefixLastCompletion	= (dataField.lastCompletion != "" && (dataField.lastCompletion.substring(0, newValue.length) == (dataFieldValue)));
	var bCharAdded				= (dataField.lastText.length < newValue.length);

	var htmlToInsert	= "";
	var htmlPrefixR		= "";
	var htmlIncludesR	= "";
	var htmlPrefix		= "";
	var htmlIncludes	= "";
	var lastFoundName	= "";
		Results			= 0;
		
		for (i=0; i<Nbmagazines; i++)
		{
		  	indexFound = magazinesArray[i][0].toLowerCase().indexOf(newValue);
			if (indexFound != 0)
			{
			  	bRattrape = true;
			  	indexFound = magazinesArray[i][0].indexOf(newValue);
				if (indexFound != 0)
				{
				  	indexFound = magazinesArray[i][0].indexOf("-"+newValue);	// recherche par debut de mot identique				
				}
			}
			else
			{
			  	bRattrape = false;
			}
			//On crée ici la liste contenant les magazines correspondant à la valeur de la saisie.
			if (indexFound > -1) 
			{
				lastFoundName 	= magazinesArray[i][0];
				lastIdProdFound = magazinesArray[i][1];
				IdProduitMag = lastIdProdFound;
				Results 		+= 1;
				if (Results==1) htmlToInsert = "<OPTION value="+i+" style='cursor: pointer; width: 100%;' selected>"+lastFoundName+"</OPTION>";
				else htmlToInsert = "<OPTION value="+i+" style='cursor: pointer; width: 100%;'>"+lastFoundName+"</OPTION>";
				if (bRattrape)
					if (indexFound == 0)
						htmlPrefixR 	+= htmlToInsert;
					else
						htmlIncludesR	+= htmlToInsert;
				else
					if (indexFound == 0)
						htmlPrefix 		+= htmlToInsert;
					else
						htmlIncludes	+= htmlToInsert;
			}
		}


	if (Results == 1 && (!bPrefixLastCompletion || bCharAdded))
	{
	   dataField.value 	= dataField.lastText = dataField.lastCompletion = lastFoundName;
	   NomMagazine = dataField.value;
	   nomSelected=1;
	   if (navigator.userAgent.indexOf("Opera")!=-1)
		{
			dataField.select();
			dataField.value 	= lastFoundName;	
		}
		RL.innerHTML = "";
	}
	else
	{
	nomSelected=0;
	 //On affiche ici le résultat, c-à-d la liste déroulante dans un calque.
	 var HTML = htmlPrefix + htmlPrefixR + htmlIncludes + htmlIncludesR;
	//var resultRem = "    ________    " + Results + " magazine"+ (Results>1 ? "s":"") + " trouvé"+ (Results>1 ? "s":"") +"    _________    ";
					  	
     //On regarde si on est sous plateforme Mac ou Windows, si c'est le cas, on regarde la particularité Internet Explorer :
	 //L'affichage pour cette dernière se différencie des autres, c-à-d que la liste ne doit pas comporter un  size='7' et width='230'
	 
	 height = 12 * Results + 10;
	 
     if (( navigator.platform.indexOf('MacPPC') != -1 ) && (Nom == 'Microsoft Internet Explorer'))
	  HTML = "<select name='liste' class='m_liste_magazines' style='height: "+height+"px;overflow: hidden;z-index:9;position:absolute;' onfocus='onFocusSelect(event,document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,true);return false;' onblur='onBlurSelect();return false;' onkeyup='setDataFieldValueSelected(event, document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,true);return false;' onchange='setDataFieldValue(document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,false); return false;' >" + HTML + "</select><br>";//<OPTION value='0xxAA' selected>" + resultRem + "</OPTION>
	 else {  //Liste affiché pour tout navigateur différent de IE Mac.
//	 alert("autre que IE mac");
      HTML = "<SELECT id='idListe' class='m_liste_magazines' name='liste' style='height: "+height+"px;overflow: hidden;hidden;z-index:9;position:absolute;' onfocus='setDataFieldValueSelected(event,document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,true);return false;' onblur='onBlurSelect(document.recherche_titre."+dataField.fieldName+");return false;' onkeyup='setDataFieldValueSelected(event,document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,true);return false;' onclick='setDataFieldValue(document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,false); return false;' size='4' width='190' >" + HTML + "</SELECT>";//<OPTION value='0xxAA' selected>" + resultRem + "</OPTION>
	 }
	 // Je regarde si on trouve des magazines par rapport au(x) lettre(s) tapé(s).
	 //Si ce n'est pas le cas, on dévalide le calque pour qu'il n'affiche pas 0 magazines...
	 if ( Results == 0){ HTML = ""; dataField.resultList.innerHTML	= ""; 
	 } 
     //Cas où il y a au moins un magazine
	 else RL.innerHTML = HTML; //On affiche le résultat dans un calque
      dataField.lastText = dataFieldValue;
	  
	}
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function func_KeyUp(event,dataField,dataFieldValue){
	evt =  event.keyCode;		//window.event.keyCode?window.event.keyCode:event.which;	
	//alert(evt);
	if (evt != 40)
	{
	findMag(dataField,dataFieldValue,evt);
	}
	else if	(document.recherche_titre.liste != null)
		{
		document.recherche_titre.liste.focus();
		}
}

