/******************************************************************************/
/* 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( baseURL,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;
 //openResultSearch(baseURL);
}

function setDataFieldValue2(baseURL, dataField, idmagazine)
{
	//var select = document.getElementById("idListe");
	//var options = select.options;
	
	var select = document.getElementById(idmagazine);
	
	key = idmagazine.split('_');
	key = key[1];
	
 //La valeur '0xxAA' correspond au 1er élément des listes  : '<<<<< Liste : X magazines>>>>>, qui ne doit rien renvoyé lorsqu'on clique dessus.
 
 dataField.value					= dataField.lastCompletion = magazinesArray[key][0];
 NomMagazine = dataField.value;
 IdProduitMag = magazinesArray[key][1];
 esc=1;
 document.recherche_titre.titre.focus();
 //dataField.resultList.innerHTML	= "";
 nomSelected = 1;
 openResultSearch(baseURL);
}

function mouseOnValue(idElem){
	var divElem = document.getElementById(idElem);
	
	if(divElem.className == "adlp_element_even"){
		divElem.className = "adlp_element_hover_even";
	}else{
		divElem.className = "adlp_element_hover_odd";
	}

}

function mouseOutValue(idElem){
	var divElem = document.getElementById(idElem);
	
	if(divElem.className == "adlp_element_hover_even"){
		divElem.className = "adlp_element_even";
	}else{
		divElem.className = "adlp_element_odd";
	}

}

function moveFocus(evt,dataField){
	elemTabs = document.getElementsByName('element');
	tabLen = elemTabs.length;

	if(tabLen!=0){
		var last = (tabLen - 1);
		var elem = null; 
		var prev = null ;
		var next = null;
		
		for(i=0;i<tabLen;i++){
			elemClass = elemTabs[i].className;
			if(elemClass == "adlp_element_hover_even" || elemClass == "adlp_element_hover_odd"){
				elem = i;
				next = i + 1;
				prev = i - 1;
			}
		}
		
		if(evt == 40 || evt == 39){
			if(elem == null){
				elemTabs[0].className = "adlp_element_hover_even";
				key = elemTabs[0].id.split('_');
				key = key[1];
				dataField.value	= dataField.lastCompletion = magazinesArray[key][0];
				NomMagazine = dataField.value;
				IdProduitMag = magazinesArray[key][1];
			}else{
				if((elem%2)==0){
					divClass = "adlp_element_even"; 
					divHoverClass = "adlp_element_hover_odd"; 
				}else{
					divClass = "adlp_element_odd"; 
					divHoverClass = "adlp_element_hover_even"; 
				}
				if(elem != last){
					
					elemTabs[elem].className = divClass;
					elemTabs[next].className = divHoverClass;
					key = elemTabs[next].id.split('_');
					key = key[1];
					dataField.value	= dataField.lastCompletion = magazinesArray[key][0];
					NomMagazine = dataField.value;
					IdProduitMag = magazinesArray[key][1];
				}else{
					elemTabs[elem].className = divClass;
					elemTabs[0].className = divHoverClass;
					key = elemTabs[0].id.split('_');
					key = key[1];
					dataField.value	= dataField.lastCompletion = magazinesArray[key][0];
					NomMagazine = dataField.value;
					IdProduitMag = magazinesArray[key][1];
					
				}
			}
		}else{
			if(evt == 38 || evt == 37){
				if(elem == null){
					if((last%2)!=0){
						
						divHoverClass = "adlp_element_hover_odd"; 
					}else{
						divHoverClass = "adlp_element_hover_odd"; 
					}
					
					elemTabs[last].className = divHoverClass;
					key = elemTabs[last].id.split('_');
					key = key[1];
					dataField.value					= dataField.lastCompletion = magazinesArray[key][0];
					NomMagazine = dataField.value;
					IdProduitMag = magazinesArray[key][1];
				}else{
					if((elem%2)==0){
						divClass = "adlp_element_even"; 
						divHoverClass = "adlp_element_hover_odd"; 
					}else{
						divClass = "adlp_element_odd"; 
						divHoverClass = "adlp_element_hover_even"; 
					}
					if(elem != 0){
						elemTabs[elem].className = divClass;
						elemTabs[prev].className = divHoverClass;
						key = elemTabs[prev].id.split('_');
						key = key[1];
						dataField.value = dataField.lastCompletion = magazinesArray[key][0];
						NomMagazine = dataField.value;
						IdProduitMag = magazinesArray[key][1];
					}else{
						elemTabs[elem].className = divClass;
						elemTabs[last].className = divHoverClass;
						key = elemTabs[last].id.split('_');
						key = key[1];
						dataField.value					= dataField.lastCompletion = magazinesArray[key][0];
						NomMagazine = dataField.value;
						IdProduitMag = magazinesArray[key][1];
					}
				}
			}
		}
	}
		
	
}

function setDataFieldValueSelected(baseURL, 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	= NomMagazine;
	 document.getElementById('ResultListDep').innerHTML = '';
	 //openResultSearch(baseURL);
	 }
}

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, baseURL)
{
	titreTmp = dataFieldValue;
	evt=event;
 //nomSelected = 0;
 NomMagazine = dataFieldValue;
 if (dataField.lastText == dataFieldValue)	return;
 
 NomMagazine = removeAccents(NomMagazine)
 
 var newValue	= removeAccents(dataFieldValue).toLowerCase();
 dataField.value = newValue;
 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(newValue.length == 1){
			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;
			}
			}else{
				if (indexFound == -1)
				{
					bRattrape = true;
					indexFound = magazinesArray[i][0].indexOf(newValue);
					if (indexFound == -1)
					{
						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;
				
				lastFondNamePart = lastFoundName.split("+");
				if(lastFondNamePart[1]!=null){
					iWhere = lastFondNamePart[1].toLowerCase().indexOf('hs'); 
					//alert(iWhere);
					if( iWhere > -1) {
						lastFoundName = lastFondNamePart[0];
					}
				}
				lastFoundName = lastFoundName.replace(newValue.toUpperCase() , "<span style='font-weight:bold;text-decoration:underline;'>"+newValue+"</span>")
				//alert(lastFoundName);
				Results 		+= 1;
				if((Results%2)!=0){
					divClass = "adlp_element_even"; 
				}else{
					divClass = "adlp_element_odd"; 
				}
				//if (Results==1) htmlToInsert = "<OPTION value="+i+" style='cursor: pointer; width: 100%;' selected>"+lastFoundName.toLowerCase()+"</OPTION>";
				//else htmlToInsert = "<OPTION value="+i+" style='cursor: pointer; width: 100%;'>"+lastFoundName.toLowerCase()+"</OPTION>";
				htmlToInsert = "<div onfocus='alert(this.id);' name='element' class='"+divClass +"' onmouseout='mouseOutValue(this.id);' onMouseOver='mouseOnValue(this.id);' onclick='setDataFieldValue2(\""+ baseURL +"\",document.recherche_titre."+dataField.fieldName+",this.id); return false;' id='res_"+i+"'>"+lastFoundName.toLowerCase()+"</div>";
				
				//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;' onfocus='onFocusSelect(event,document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,true);return false;' onblur='onBlurSelect();return false;' onkeyup='setDataFieldValueSelected(\"" + baseURL + "\", event, document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,true);return false;' onchange='setDataFieldValue(\""+baseURL+"\",document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,false); return false;' >" + HTML + "</select><br>";//<OPTION value='0xxAA' selected>" + resultRem + "</OPTION>
		HTML = "<span class='m_liste_magazines' style='background-color:white;color:black;padding:5px;text-align:center;border:1px inset black;'>"+ HTML +"</span>";
	 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;' onfocus='setDataFieldValueSelected(\""+ baseURL +"\",event,document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,true);return false;' onblur='onBlurSelect(document.recherche_titre."+dataField.fieldName+");return false;' onkeyup='setDataFieldValueSelected( \"" + baseURL + "\", event,document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,true);return false;' onclick='setDataFieldValue( \""+baseURL+"\",document.recherche_titre."+dataField.fieldName+",this[this.selectedIndex].value,false); return false;' size='4' width='190' >" + HTML + "</SELECT>";//<OPTION value='0xxAA' selected>" + resultRem + "</OPTION>
		HTML = "<div class='adlp_liste'>"+ HTML +"</div>";
	 }
	 // 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	= "<div class='m_liste_magazines' style='background-color:white;color:black;padding:5px;text-align:center;border:1px inset black;'>Il n'y a pas de titres contenant "+ newValue +"</div>"; 
	 } 
     //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,baseURL){
	evt =  event.keyCode;		//window.event.keyCode?window.event.keyCode:event.which;	
	//alert(evt);
	if (evt != 40 && evt != 39 && evt != 38 && evt != 37)
	{
	findMag(dataField,dataFieldValue,evt,baseURL);
	}
	else 
		moveFocus(evt,dataField );
		if	(document.recherche_titre.liste != null)
		{
		document.recherche_titre.liste.focus();
		}
}

