/**
 *                                          BriqueLight
 */
/**
 * Suggestion de css:
 * Cas 2 colonnes:
.AutoCompleteDivTitle{font-family:Arial, Helvetica, sans-serif;font-size:11px;background-color:#fff;color:#333;text-align:center;height:14px;display:block;}
.AutoCompleteDivListeStyle{border:1px solid #aaa;word-wrap:break-word;background-color:#f8ecdf;margin:0;width:200px;z-index:10;text-align: left;}
.AutoCompleteDiv{padding:2px 0 2px 3px;border-collapse:collapse;line-height:14px;overflow:hidden;background-color:#f8ecdf;cursor:pointer;color:#333;font-family:Arial, Helvetica, sans-serif;font-size:11px;width:196px;}
.AutoCompleteDivCol1{width:150px;float:left;position: relative;}
.AutoCompleteDivCol2{width:40px;color:#999;}
.AutoCompleteDivAct{padding:2px 0 2px 3px;border-collapse:collapse;line-height:14px;background-color:#F60;cursor:pointer;color:#FFF;font-family:Arial, Helvetica, sans-serif;font-size:11px;overflow: hidden;}
.AutoCompleteId{display:none;visibility:hidden;}

 * Exemple d'initialisation:
 BLCompletion = new BLAutocompleter2(document.getElementById('div_Completion'), document.getElementById('rdata'),'appelFromCompletionSearch', CUrl,'kw','dtd=2.0&cbf=BLCompletion.cmpl');
 */

/**
 *
 * Classe d'Autocompletion
 *
 */
var BLAutocompleter2 = function(divCompletion,field,onSubmitFunction,url,paramName,defaultParams,cssPrefix,selectToHide, idField , fieldToUpdate){
	if (!divCompletion) { return false; }
	if (!field) { return false; }
	this._completeDivRows=0;
	this._completeDivDivList=null;
	this._highlightedSuggestionIndex=-1;
	this._highlightedSuggestionDiv=null;
	this._cursorUpDownPressed=true;
	this._lastKeyCode=null;
	this._eventKeycode=null;

	//    this._resultCache=new Object(); // mecanisme de cache des requetes
	this._cookieName="history";    // le nom du cookie
	this._maxNbSuggestions=10;    // le nombre de suggestions a afficher
	this._completeDiv=divCompletion;    // le div de completion
	this._useHistory=false;    // indique si l'historique doit etre affiche'
	this._use2ndColumn=null;    // indique si une 2nde colonne est a rechercher
	this._useId=null;    // indique si l'ID (invisible) est a gerer
	this._suggestionUsed=null;    // vaut true si la suggestion est utilisee dans l'input (clic, return, ...)
	this._inputField=field;    // le champ texte lui-meme
	this._onSubmitFunction=onSubmitFunction;    // fonction a lancer en cas de validation (clic, return).
	this._urlSearch=url;    //l 'adresse a interroger pour trouver les suggestions
	this._paramName=paramName;    // le nom du parametre. Ex: kw
	this._defaultParams=defaultParams;    // les parametres par defaut a envoyer. Ex: dtd=2.0
	this._selectElementToHide=selectToHide;    // un select eventuel a cacher
	this._inputField.setAttribute('autocomplete','off');
	this.createAutocompleteDiv();
	this.onMouseOverUpdate= true;
	this._currentInputFieldValue=this._inputField.value;
	this._oldInputFieldValue=this._currentInputFieldValue;
	this._aDetails = [];
	this._aFieldsToUpdate = [];
	this._reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
	
	if (typeof(idField)!='undefined' || idField != '' )
    	this._idField=idField;
  	else this._idField=null;
  	
	if (typeof(cssPrefix)!='undefined')
		this._cssPrefix=cssPrefix;
	else this._cssPrefix='';
	
	if (typeof(fieldToUpdate)!='undefined'){
		this._aFieldsToUpdate=fieldToUpdate;
	}
	else this._aFieldsToUpdate='';
	
	var completeur=this;
	//    this.cacheResults("",new Array());
	
	/**
	* Handler pour le keydown du document (fleches, ...)
	*/
	this._inputField.onkeydown=function(event){
		// acces evenement compatible IE/Firefox
		if (!event&&window.event)
			event=window.event;
		// on enregistre la touche ayant declenche l'evenement
		if (event){
			completeur._lastKeyCode=event.keyCode;
			if ((completeur._lastKeyCode==18)||(completeur._lastKeyCode==27)) return false;
		}
		if (completeur.handleCursorUpDownEnter(completeur._lastKeyCode)&&(completeur._lastKeyCode!=0)){
			// si on a presse une touche autre que haut/bas/enter
			completeur._suggestionUsed=null;
			completeur.PressAction();
		} else if (completeur._highlightedSuggestionIndex>= 0) return false;
	};
	
	/**
	* Handler pour le keyup du champ texte
	*/
	this._inputField.onkeyup=function(event){
		// acces evenement compatible IE/Firefox
		if (!event&&window.event)
			event=window.event;
		completeur._eventKeycode=event.keyCode;
		// touche alt (18) ou echap (27)
		if (completeur._eventKeycode==18) return false;
		if (completeur._eventKeycode==27){
			completeur.hideCompleteDiv();
			return false;
		}
		// touche fleche haut (38) ou fleche bas (40)
		if (completeur._eventKeycode==40||completeur._eventKeycode==38){
			// on autorise le blur du champ (traitement dans onblur)
			completeur.blurThenGetFocus();
		}
		// contenu du champ texte
		var V=completeur._inputField.value;
		if (completeur._eventKeycode!=0){
			// touche entree (13 / 3)
			if (completeur._eventKeycode==13||completeur._eventKeycode==3){
				var d=completeur._inputField;
				// on met en place l'ensemble du champ texte en repoussant la selection
				if (d.createTextRange){
					d.createTextRange().moveStart("character",d.value.length);
					d.select();
				}
				else if (d.setSelectionRange)
					d.setSelectionRange(d.value.length,d.value.length)
				//          removeAutoComplete(completeur._inputField);
				if (completeur._useHistory==true)
					updateCookie(V,completeur._cookieName);
				if (completeur._onSubmitFunction){
					if (completeur._highlightedSuggestionIndex>= 0) {
						completeur._aDetails = completeur.splitCode(completeur._idValue);
						if (typeof(completeur._aFieldsToUpdate[0]) != 'undefined' && typeof(completeur._aFieldsToUpdate[1]) != 'undefined') {
							document.getElementById(completeur._aFieldsToUpdate[0]).value = completeur._aDetails['code'];
							document.getElementById(completeur._aFieldsToUpdate[1]).value = completeur._aDetails['flag'];
						}
completeur.hideCompleteDiv();

						eval(completeur._onSubmitFunction+'("'+escape(completeur._inputField.value)+'","'+completeur._2ndColumnValue+'","'+completeur._idValue+'")');
					}
				}
				completeur.hideCompleteDiv();
				return false;
			}
			else{
				// si on n'a pas pu agrandir le champ non selectionne, on le met en place violemment.
				if (completeur._inputField.value!=V) completeur._inputField.value= V;
			}
		}
		// si la touche n'est ni haut, ni bas, on stocke la valeur utilisateur du champ
		if ((completeur._eventKeycode!=40)&&(completeur._eventKeycode!=38)){
			// le champ courant n est pas change si key Up ou key Down
			completeur._cursorUpDownPressed=false;
			completeur._currentInputFieldValue=V;
		}
		else cursorAfterValue(completeur._inputField);
		if (completeur._oldInputFieldValue!=completeur._currentInputFieldValue){
			var valeur=escape(completeur._currentInputFieldValue);
			if (valeur!=''){
			/*          var suggestions=completeur._resultCache[completeur._currentInputFieldValue];
			if (suggestions){ // la reponse etait encore dans le cache
			completeur.displayComplete(valeur,suggestions)
			} else{
			*/            
				writeScript2(completeur._urlSearch+'&'+completeur._paramName+'='+valeur+'&'+completeur._defaultParams)// appel distant
				completeur._inputField.focus();
			//          }
			}
			else completeur.hideCompleteDiv();
		}
		completeur._oldInputFieldValue=completeur._currentInputFieldValue;
	};
	
	/**
	* Handler de blur sur le champ texte
	*/
	this._inputField.onblur=function(event){
		if (!completeur._cursorUpDownPressed){
			// si le blur n'est pas cause par la touche haut/bas
			setTimeout(function() { completeur.hideCompleteDiv(); },150);
		}
		completeur._cursorUpDownPressed=false;
	}
	
	/* Handler de resize de la fenetre: recalcule la taille des suggestions */
	gaddEvent2(window,'resize',function(){ completeur.setCompleteDivSize();});
}
	
BLAutocompleter2.prototype = {
	/**
	* remplace la chaine de recherche dans la chaine de retour
	*/
	fnFormatResult:function(value, currentValue) {
		var pattern = '(' + currentValue.replace(this.reEscape, '\\$1') + ')';
		return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
	},
	/**
	* Indique si le champ actuellement en place est issu de la completion
	*/
	completionUsed:function(){
		return this._suggestionUsed;
	},
	/**
	* Fonction de callback appelee une fois que le javascript est retourne'
	*/
	cmpl:function(jsonData){
		var liste=this.handleJsonSuggestions(jsonData);
		//    this.cacheResults(this._currentInputFieldValue,liste);
		this.displayComplete(this._currentInputFieldValue,liste);
		//init les champs ID avec la premiere valeur trouvée dans le tableau JSON  si dispo
		if(typeof(liste) != 'undefined' && array_key_exists(2,liste) && liste.length>0 && liste[2][0]!='' && this._idField!=null && document.getElementById(this._idField)){
			document.getElementById(this._idField).value=liste[2][0];
		}
	},
	/**
	* Mecanisme de caching des reponses
	*/
	//cacheResults: function (debut,suggestions){
	//  this._resultCache[debut]=suggestions;
	//},
	/**
	* Change la classe d'un element
	*/
	setStyleForElement:function(c,name){
		if (c!=null){
			if (this._cssPrefix!='') c.className= name+ " "+ this._cssPrefix+name;      // surcharge
			else c.className= name;
		}
	},
	/**
	* Transformation des donnees JSON en tableau
	*/
	handleJsonSuggestions:function(xmlDoc){
		var options= xmlDoc[1];
		var optionsListe= new Array();
		var optionsCol1= new Array();
		optionsCol1['value'] = [];
		optionsCol1['id'] = [];
		if ((options)&&(options.length)){
			for(var i=0;(i<options.length)&&(i< this._maxNbSuggestions);++i){
				var sTemp = '';
				// met en gras l'element de recherche dans la chaine de retour
				sTemp=this.fnFormatResult(options[i],xmlDoc[0]);
				optionsCol1['value'].push(sTemp);
				optionsCol1['id'].push(options[i]);
//				optionsCol1.push(options[i]);
			}
//			optionsListe.push(optionsCol1);
			optionsListe.push(optionsCol1['value']);
			optionsListe.push(optionsCol1['id']);
		}
		// colonne 2
		if (this._use2ndColumn&&xmlDoc[2]){
			var optionsCol2= this.handle2ndColumn(xmlDoc[2]);
//			if (optionsCol2!= false)
				optionsListe.push(optionsCol2);
		}
		// ID
		if (this._useId&&xmlDoc[3]){
			var optionsCol3= this.handle2ndColumn(xmlDoc[3]);
			if (optionsCol3!= false)
				optionsListe.push(optionsCol3);
		}
		return optionsListe;
	},
	/**
	* Calcule la position du div de completion
	*/
	setCompleteDivSize:function(){
		if (this._completeDiv){
			//this._completeDiv.style.left= /*this._inputField.offsetLeft*/10+"px";
			//this._completeDiv.style.top= /*this._inputField.offsetTop+ this._inputField.offsetHeight-1*/55+"px";
			this._completeDiv.className ="divCompletion";
		}
	},
	/**
	* Cree le div de completion
	*/
	createAutocompleteDiv:function(){
		this._completeDiv.style.visibility="hidden";
		this._completeDiv.style.position="relative";
		this._completeDiv.style.zIndex="400";
		this.setCompleteDivSize();
		this.setStyleForElement(this._completeDiv,"AutoCompleteDivListeStyle");
	},
	/**
	* format les données du 3eme champ retournées en json (specially for meteo
	*/
	splitCode:function(sData) {
		var aSplit, aTmp, sSuffix;
		aTmp = [];
		sSuffix = '';
		aSplit = sData.split(new RegExp("(#)+", "g"));
		switch (aSplit[0]) {
			case 'plage' :	sSuffix = ' , <span style="color:#3399FF;"><b>littoral</b></span>';break;
			case 'montagne' :	sSuffix = ' , <span style="color:#3399FF;"><b>montagne</b></span>';break;
			case 'region' :	sSuffix = ' <span style="color:#3399FF;"><b>r&eacute;gion</b></span> ';break;
			case 'continent' :	sSuffix = ' <span style="color:#3399FF;"><b>continent</b></span> ';break;
			case 'dom-tom' :	sSuffix = ' , <span style="color:#3399FF;">Dom-Tom</span>';break;
			default  :	break;
		}
		
		if(!!(window.attachEvent && !window.opera)) {
			aTmp['flag']  	= (typeof(aSplit[0]) == "undefined") ? "" : aSplit[0];
			aTmp['code'] 	= (typeof(aSplit[1]) == "undefined") ? "" : aSplit[1];
			aTmp['place']  	= ((typeof(aSplit[2]) == "undefined") ? "" : aSplit[2]);
			aTmp['cont']  	= (typeof(aSplit[3]) == "undefined") ? "" : aSplit[3];	
		}
		else {
			aTmp['flag']  	= (typeof(aSplit[0]) == "undefined") ? "" : aSplit[0];
			aTmp['code'] 	= (typeof(aSplit[2]) == "undefined") ? "" : aSplit[2];
			aTmp['place']  	= ((typeof(aSplit[4]) == "undefined") ? "" : aSplit[4]);
			aTmp['cont']  	= (typeof(aSplit[6]) == "undefined") ? "" : aSplit[6];		
		}
		if (aSplit[0] == 'monde') {
			sSuffix += ' , <span style="color:#000;"><strong>'+aTmp['cont']+'</strong></span>';
		}
		aTmp['detail']  = '('+aTmp['place'] + sSuffix+')';
		return aTmp;
	},
	/**
	* Affiche le div de completion
	*/
	displayComplete:function(valeur,liste){
		while(this._completeDiv.childNodes.length>0){
			this._completeDiv.removeChild(this._completeDiv.childNodes[0]);
		}
		if ((liste[1])&&(liste[1].length>0)){
			if (this._useHistory==true)
				this.displayHistory();
			var newDiv=document.createElement("SPAN");
			newDiv.innerHTML='Suggestions';      //titre de la liste
			newDiv.id='completeDivTitle';
			this.setStyleForElement(newDiv,"AutoCompleteDivTitle");
			this._completeDiv.appendChild(newDiv);
			var completeur=this;
			// mise en place des suggestions
			for (var f=0;f<liste[1].length;++f){
				var newDivLine= document.createElement("div");
				this.displayId(newDivLine,liste[1][f]);
				this.setStyleForElement(newDivLine,"AutoCompleteDiv");
				var newSpan= document.createElement("span");
				newSpan.innerHTML= liste[0][f];// le texte de la suggestion
				this.setStyleForElement(newSpan,"AutoCompleteDivCol1");
				newDivLine.appendChild(newSpan);
				if (this._use2ndColumn){
					if ((liste[2])&&(liste[2][f])) {
						this.display2ndColumn(newDivLine,liste[2][f]);
					}
					else if (this._use2ndColumn&&(liste[3])&&(liste[3][f])) {
						var aTmp = [];
						aTmp = this.splitCode(liste[3][f]);
						this.display2ndColumn(newDivLine,aTmp['detail']);
					}
					else 
						this.display2ndColumn(newDivLine,"&nbsp;");
				}
				if (this._useId){
					if (this._use2ndColumn&&(liste[3])&&(liste[3][f])) {
						this.displayId(newDivLine,liste[3][f]);
					}
					else if (!this._use2ndColumn&&(liste[2][f]))
						this.displayId(newDivLine,liste[2][f]);
				}
				this._completeDiv.appendChild(newDivLine);
				newDivLine.onmousedown=function(event){
					divOnMouseDown2(completeur,event,this);
				};
				newDivLine.onmousemove=function(event){
					divOnMouseMove2(completeur,event,this);
				};
				newDivLine.onmouseout=function(event){
					divOnMouseOut2(completeur,event,this);
				};
//				this._completeDiv.appendChild(newDivLine);
			}
			if (this._selectElementToHide)
				hideSelectElementCompletion(this._selectElementToHide);
			this.PressAction();
		}
		else { // pas de suggestions
			this.hideCompleteDiv();
			this._completeDivRows= 0;
		}
	},
	/**
	* Change la suggestion selectionnee
	* Cette methode traite les touches haut, bas et enter
	*/
	handleCursorUpDownEnter:function(eventCode){
		if (eventCode==40){
			this.highlightNewValue(this._highlightedSuggestionIndex+1);
			return false;
		}
		else if (eventCode==38){
			this.highlightNewValue(this._highlightedSuggestionIndex-1);
			return false;
		}
		else if (eventCode==13||eventCode==3){
			return false;
		}
		this._suggestionUsed=null;
		return true;
	},
	/**
	* Gere une touche pressee autre que haut, bas et enter
	*/
	PressAction:function(){
		var suggestionList= this._completeDiv.getElementsByTagName("div");
		var suggestionLongueur=suggestionList.length;
		// on stocke les valeurs precedentes
		// nombre de possibilites de completion
		this._completeDivRows=suggestionLongueur;
		// possiblites de completion
		this._completeDivDivList=suggestionList;
		// si le champ est vide, on cache les propositions de completion
		if (this._currentInputFieldValue==""||suggestionLongueur==0)
			this.hideCompleteDiv();
		else
			this.showCompleteDiv();
		
		// on deselectionne toutes les suggestions
		for(var i=0;i<suggestionLongueur;i++){
			this.setStyleForElement(suggestionList.item(i),"AutoCompleteDiv");
		}
		this._highlightedSuggestionIndex=-1;
		this._highlightedSuggestionDiv=null;
		var supprSelection=false;
		switch(this._eventKeycode){
			// fleche gauche, fleche droite, page up, page down, autres ?
			case 8:case 33:case 34:case 35:case 35:case 36:case 37:case 39:case 45:case 46:// on supprime la suggestion du texte utilisateur
					supprSelection=true;
					break;
			default:break
		}
		// si on a une suggestion (n-1) selectionnee
		if (!supprSelection&&this._highlightedSuggestionDiv){
			this.setStyleForElement(this._highlightedSuggestionDiv,"AutoCompleteDivAct");
			var z=this._currentInputFieldValue;
		}
		else{
			// sinon, plus aucune suggestion de selectionnee
			this._highlightedSuggestionIndex=-1;
		}
	},
	/**
	* Permet le blur du champ texte apres que la touche haut/bas ait ete pressee
	* Le focus est recupere apres traitement (via le timeout).
	*/
	blurThenGetFocus:function(completeur){
		this._cursorUpDownPressed=true;
		this._inputField.blur();
		var _self=this;
		setTimeout(function(){
			_self._inputField.focus();
			if (_self._inputField.value){ // forcer le curseur en fin de ligne (ie6)
				oldValue= _self._inputField.value;
				_self._inputField.value= "";    // effacement
				_self._inputField.value= oldValue;    // puis reecriture
			}
		},10);
		return;
	},
	/**
	* Cache completement les choix de completion
	*/
	hideCompleteDiv:function(){
		this._completeDiv.style.visibility="hidden";
		this._highlightedSuggestionIndex=-1;
		if (this._selectElementToHide) showSelectElementCompletion(this._selectElementToHide);
	},
	/**
	* Rend les choix de completion visibles
	*/
	showCompleteDiv:function(){
		this.setCompleteDivSize();
		this._completeDiv.style.visibility="visible";
	},
	/**
	* Change la suggestion en surbrillance
	*/
	highlightNewValue:function(C){
		if (!this._completeDivDivList||(this._completeDivRows<=0))
			return;
		
		this.showCompleteDiv();
		this._suggestionUsed=true;
		this.setStyleForElement(this._highlightedSuggestionDiv,"AutoCompleteDiv");
		if (C>=this._completeDivRows)
			C=0;
		if (C<0)
			C=this._completeDivRows-1;  // pour retourner dans l'input, mettre   this._highlightedSuggestionIndex=-1;    this._inputField.focus();
		this._highlightedSuggestionIndex=C;
		this._highlightedSuggestionDiv= this._completeDivDivList.item(C);
		if (this._highlightedSuggestionDiv!= null){
			this.setStyleForElement(this._highlightedSuggestionDiv,"AutoCompleteDivAct");
			this._inputField.value= getSuggestions2(this._highlightedSuggestionDiv,0);
    	if(this._idField!=null && document.getElementById(this._idField)){
    	   document.getElementById(this._idField).value=getSuggestions2(this._highlightedSuggestionDiv,2);
    	}
			this.affectValues(this._highlightedSuggestionDiv);
			this._completeDiv.scrollTop= C*this._highlightedSuggestionDiv.offsetHeight;
		}
	},
	/**
	* affecte les values
	*/
	affectValues:function(theDiv){
		if (this._use2ndColumn)
			this._2ndColumnValue=getSuggestions2(theDiv,2);
		if (this._useId){
			if (this._use2ndColumn){
				this._idValue=getSuggestions2(theDiv,'last'); 
			}
			else {
				this._idValue=getSuggestions2(theDiv,2);
			}
		}
	},
	/**
	* Affiche un div contenant la 2nde colonne
	*/
	display2ndColumn:function(newDiv,element){
	var newSpan=document.createElement("SPAN");
		newSpan.innerHTML=element;
		this.setStyleForElement(newSpan,"AutoCompleteDivCol2");
		newDiv.appendChild(newSpan);
		return false;
	},
	/**
	* Affiche un div contenant la 2nde colonne
	*/
	handle2ndColumn:function(liste){
		var optionsCol2=new Array();
		var options2=liste;
		if (liste.length){
			for(var i=0;i<liste.length;++i){
				optionsCol2.push(liste[i]);
			}
			return optionsCol2;
		}
		return false;
	},
	/**
	* creer un span invisible contenant l'id
	*/
	displayId:function(newDiv,element){
		var newSpan=document.createElement("SPAN");
		newSpan.innerHTML=element;
		this.setStyleForElement(newSpan,"AutoCompleteId");
		newDiv.appendChild(newSpan);
		return false;
	},
	/**
	* Affiche l'historique
	*/
	displayHistory:function(){
		cookieHistory=handleCookieData(this._cookieName,this._inputField.value);
		if (cookieHistory.length>0){
			var historyDiv=document.createElement("SPAN");
      		historyDiv.innerHTML='Historique&nbsp;(<a href="#" class="AutoCompleteDivDel" onClick="javascript:deleteCookie(\''+this._cookieName+'\',\''+this._completeDiv.id+'\',\''+this._inputField.id+'\');return false; ">effacer</a>)';
			historyDiv.id='completeDivTitle';
			this.setStyleForElement(historyDiv,"AutoCompleteDivTitle");
			this._completeDiv.appendChild(historyDiv);
			var completeur=this;
			for(var f=0;f<cookieHistory.length;f++){
				var nouveauDiv=document.createElement("DIV");
				nouveauDiv.onmousedown=function(event){
					divOnMouseDown2(completeur,event,this);
				};
				nouveauDiv.onmousemove=function(event){
					divOnMouseMove2(completeur,event,this);
				};
				nouveauDiv.onmouseout=function(event){
					divOnMouseOut2(completeur,event,this);
				};
				this.setStyleForElement(nouveauDiv,"AutoCompleteDiv");
				var nouveauSpan=document.createElement("SPAN");
       			nouveauSpan.innerHTML=cookieHistory[f][0];        // le texte de la suggestion
				this.setStyleForElement(nouveauSpan,"AutoCompleteDivCol1");
				nouveauDiv.appendChild(nouveauSpan);
    		if (this._use2ndColumn)
    		{
              if ((cookieHistory[f])&&(cookieHistory[f][1]))
                this.display2ndColumn(nouveauDiv, cookieHistory[f][1]);
              else
                this.display2ndColumn(nouveauDiv,"&nbsp;");
            }
				this._completeDiv.appendChild(nouveauDiv);
			}
		}
	}
}
/* /BLAutocompleter2.prototype */

/* EVENT FUNCTION */
function array_key_exists ( key, search ) {
    if( !search || (search.constructor !== Array && search.constructor !== Object) ){
        return false;
    }
    return search[key] !== undefined;
}
/**
 * Appelle un script js, via l'entete html
 */
function writeScript2(url){
	var head=document.getElementsByTagName('head')[0];
	var script=document.createElement('script');
	script.setAttribute('charset','ISO-8859-1'); 
	script.setAttribute('id','scrComp');
	script.setAttribute('type','text/javascript');
	script.setAttribute('src',url);
  if(document.getElementById('scrComp')){
		var oldSrc = document.getElementById('scrComp');
		head.removeChild(oldSrc);
	}
	head.appendChild(script);
}
/**
 * Suppression rapide de l'autocompletion
 */
function removeAutoComplete(field){
  field.onkeyup=null;
}

/* Cacher les champs select (ie6) */
function hideSelectElementCompletion(divId){
	var nods=document.getElementById(divId).getElementsByTagName('select');
	for(i=0;i<nods.length;i++){
		nods[i].style.visibility='hidden';
		nods[i].cptHideDivAction=0;
	}
}
/* Afficher les champs select (ie6) */
function showSelectElementCompletion(divId){
	var nods=document.getElementById(divId).getElementsByTagName('select');
	for(i=0;i<nods.length;i++){
		if (nods[i].cptHideDivAction==0){
		  nods[i].style.visibility='visible';
		}
		nods[i].cptHideDivAction=1;
	}
}
/**
 * Place le curseur a la fin du champ (ie)
 */
function cursorAfterValue(n){
	if (n.value){
		oldValue= n.value;
		n.value= "";    // effacement
		n.value= oldValue;    // puis reecriture
	}
}
/**
 * Retourne la valeur de la possibilite (texte) contenu dans une div de possibilite, dans la colonne col (0,1,2)
 */
function getSuggestions2(uneDiv,col){
	if (col == 'last') {
		var nLength = uneDiv.getElementsByTagName('span').length;
		return uneDiv.getElementsByTagName('span')[nLength-1].firstChild.data;
	}
	else if ((!uneDiv)||(!(uneDiv.getElementsByTagName('span')[col])))return null;
	return uneDiv.getElementsByTagName('span')[col].firstChild.data;
}
/**
 * Ecoute les evenements d'un element (window, document, ...)
 */
function gaddEvent2(obj,evenement,fn){
	if (obj.addEventListener)
		obj.addEventListener(evenement,fn,false)
	else if (obj.attachEvent)
		obj.attachEvent("on"+evenement,fn)
	else
		return false;
}
/**
 * Declenchee quand on clique sur une div contenant une possibilite
 */
function divOnMouseDown2(completeur,event,laDiv){
	completeur._inputField.value=getSuggestions2(laDiv,0);
	completeur.affectValues(laDiv);
	completeur._suggestionUsed=true;
	if (completeur._useHistory==true){
		var cookieValue=completeur._inputField.value;
		if(completeur._use2ndColumn==true){
			cookieValue+='|'+getSuggestions2(laDiv,2);
		}
		updateCookie(cookieValue,completeur._cookieName);
	}
	completeur.hideCompleteDiv();
	completeur.blurThenGetFocus();
	completeur._completeDiv.innerHTML='';
	if (completeur._onSubmitFunction){
		completeur._aDetails = completeur.splitCode(completeur._idValue);
		if (typeof(completeur._aFieldsToUpdate[0]) != 'undefined' && typeof(completeur._aFieldsToUpdate[1]) != 'undefined') {
			// update all hidden Elt
			document.getElementById(completeur._aFieldsToUpdate[0]).value = completeur._aDetails['code'];
			document.getElementById(completeur._aFieldsToUpdate[1]).value = completeur._aDetails['flag'];
		}
		eval(completeur._onSubmitFunction+'("'+completeur._inputField.value+'","'+completeur._2ndColumnValue+'","'+completeur._idValue+'")');
	}return true;
}
/**
 * Declenchee quand on passe sur une div de possibilite. La div precedente est passee en style normal
 */
function divOnMouseMove2(completeur,event,laDiv){
	completeur._cursorUpDownPressed=false;
	if (completeur._highlightedSuggestionDiv){
		completeur.setStyleForElement(completeur._highlightedSuggestionDiv,"AutoCompleteDiv");
	}
	children = laDiv.parentNode.childNodes;
	for(i=0; i < children.length; i++) {
		if (laDiv==children[i]) {
			completeur._highlightedSuggestionIndex=i-1;
			completeur._highlightedSuggestionDiv= laDiv;
			break;
		}
	}
	completeur.setStyleForElement(laDiv,"AutoCompleteDivAct");
	if (completeur.onMouseOverUpdate) {
		completeur._suggestionUsed=true;
		completeur._inputField.value=getSuggestions2(laDiv,0);
		completeur.affectValues(laDiv);
	}
}
/**
 * Declenchee quand la souris quitte une div de possiblite. La div repasse a l'etat normal
 */
function divOnMouseOut2(completeur,event,laDiv){
	completeur.setStyleForElement(laDiv,"AutoCompleteDiv");
	if(this._idField!=null && document.getElementById(this._idField)){
		document.getElementById(this._idField).value=getSuggestions2(this,2);
	}
}
/**
 *                                          pluginHistory.js
 */
// le nombre de reponses a afficher dans l'historique
var _maxHistoryItemNb=5;

/**
 * Verifie si le parametre se trouve deja dans le cookie
 */
function itemInCookie(itemInfos,_cookieName){
	var cookie=greadCookie(_cookieName);
	if (cookie!=null){
		cookie=unescape(cookie);
		cookie=cookie.split("$");
		for(j=0;j<cookie.length;j++){
			if (itemInfos==cookie[j]){
				return true;
			}
		}
	}
  	return false;
}
/**
 * Renvoie le contenu du cookie dans une liste
 */
function handleCookieData(_cookieName,_inputFieldValue){
	var cookie=greadCookie(_cookieName);
	var historyList=new Array();
	if (cookie!=null){
		cookie=unescape(cookie);
		cookie=cookie.split("$");
		for(i=0;i<cookie.length;i+=2){
			//var currentItem=cookie[i+1];
			var currentValue=cookie[i].split("|");
			// if (currentItem.toLowerCase().indexOf(noAccentCmpl(_inputFieldValue.toLowerCase()))==0){
			historyList.push(currentValue);
			//}
		}
	}
	return historyList;
}
/**
 * Lecture du cookie
 * Renvoie le contenu brut du cookie
 */
function greadCookie(name){
	var arg=name+"=";
	var alen=arg.length;
	var clen=document.cookie.length;
	var begin=0;
	while(begin<clen){
		var end=begin+alen;
		if (document.cookie.substring(begin,end)==arg){
			var endstr=document.cookie.indexOf(";",end);
			if (endstr==-1)endstr=document.cookie.length;
			return unescape(document.cookie.substring(end,endstr));
		}
		begin=document.cookie.indexOf(" ",begin)+1;
		if (begin==0)break;
	}
	return null;
}
/**
 * Met a jour le cookie, avec le parametre fourni
 */
function deleteCookie( _cookieName, _completeDivId, _inputField){
	document.cookie = _cookieName + "=;path=/;expires=Thu, 01-Jan-1970 00:00:01 GMT";
	document.getElementById(_completeDivId).innerHTML='';
	document.getElementById(_inputField).focus();
	return false;
}
/**
 * Met a jour le cookie, avec le parametre fourni
 */
function updateCookie(suggestSel,_cookieName){
	if (!itemInCookie(suggestSel,_cookieName)){
		suggestNoAccent=noAccentCmpl(suggestSel);
		var newCookieValue=escape(suggestSel);
		newCookieValue+="$"+escape(suggestNoAccent);
		var oldCookieValue=greadCookie(_cookieName);
		if (oldCookieValue!=null){
			oldCookieValue=unescape(oldCookieValue);
			oldCookieValue=oldCookieValue.split("$");
			for(i=1;i<=oldCookieValue.length;i+=2){
				//  empiler la nouvelle valeur au debut
				if (i<=_maxHistoryItemNb+2||_maxHistoryItemNb==0)
					newCookieValue+="$"+oldCookieValue[i-1]+"$"+oldCookieValue[i];
			}
		}
		document.cookie=_cookieName+"="+escape(newCookieValue)+";path=/";
	}
}
/**
 * Met a jour le cookie, avec le parametre fourni
 */
function noAccentCmpl(str){
	var a= "\xE0\xE2\xE4\xE1\xC0\xC1\xC4\xC2\xEB\xE8\xE9\xEA\xCA\xC9\xC8\xCB\xEF\xEE\xED\xEC\xCC\xCD\xCE\xCF\xFC\xF9\xFB\xFA\xDA\xD9\xDB\xDC\xE3\xF5\xF1\xC3\xD5\xD1\xE7";
	var b="aaaaAAAAeeeeEEEEiiiiIIIIooooOOOOuuuuUUUUaonAONc";
	for(var i=0;i<a.length;i++){
		str=str.split(a.charAt(i)).join(b.charAt(i));
	}
	return str;
}
/* /EVENT FUNCTION */
/**
 * / pluginHistory.js
 */

