/**
AjaxComboList Beta

à insérer dans la page (en vrac) : 


window.onload = function(){
	if (window.XMLHttpRequest || window.ActiveXObject){
		var ac = new AjaxComboList("iIdOrganisation", "getRaisonSociale");
	}else{
		alert("Attention, votre navigateur n'est pas compatible avec la technologie \"Ajax\".\nVeuillez installer un navigateur récent : www.GetFirefox.com");
	}
}


<input type="button" name="AJCL_but_iIdOrganisation" id="AJCL_but_iIdOrganisation" value="Cliquer ici pour sélectionner l'organisme" />
<input type="hidden" id="iIdOrganisation" name="iIdOrganisation" />

**/

function AjaxComboList(sIdChamp, sAction, sRootPath, sSessionId){
	this.sIdChamp = sIdChamp;
	this.sAction = sAction;
	this.sComposantPrefix = "AJCL_";
	this.sIdSelect = this.sComposantPrefix+"sel_"+this.sIdChamp;	// Liste des r?sultats
	this.sIdTextfield = this.sComposantPrefix+"txt_"+this.sIdChamp;	// Champ texte pour recherche
	this.sIdLimitOffset = this.sComposantPrefix+"hlo_"+this.sIdChamp;	// Hidden
	this.sIdLimit = this.sComposantPrefix+"hl_"+this.sIdChamp;	// Hidden 
	this.sIdTotal = this.sComposantPrefix+"ht_"+this.sIdChamp;	// Hidden 
	this.sIdAffichage = this.sComposantPrefix+"aff_"+this.sIdChamp;	// Affichage
	this.sIdButton = this.sComposantPrefix+"but_"+this.sIdChamp;	// Bouton de lancement
	this.sIdButtonPrec = this.sComposantPrefix+"butp_"+this.sIdChamp;	// Bouton pr?c?dent
	this.sIdButtonSuiv = this.sComposantPrefix+"buts_"+this.sIdChamp;	// Bouton suivant
	this.sIdButtonFermer = this.sComposantPrefix+"butf_"+this.sIdChamp;	// Bouton fermer
	this.sIdDivDisplay = this.sComposantPrefix+"divDisplay_"+this.sIdChamp;	
	this.sIdMemo = this.sComposantPrefix+"memo_"+this.sIdChamp;	// champ pour mémoriser ce qui a été saisi
	
	this.iWidth = "450px";
	
	this.sURL = "../include/GetListeForAjaxComboList.php";	// URL par d?faut
	this.sRootPath = sRootPath;
	if (sSessionId.length>0) this.sSessionId = "SID="+sSessionId;
	else this.sSessionId = "";
	
	this.sInstanceName = null;
	this.sActionOnChange = "";
	
	this.sIdDiv = this.sComposantPrefix+"div_"+this.sIdChamp;
	
	this.iLimitOffset = 0;	// d?but du LIMIT de la requ?te ; exemple : LIMIT 7,50 => pour commencer ? 7
	this.iLimit = 50;	// valeur du LIMIT de la requ?te ; exemple : LIMIT 7,50 => retourner 50 ?l?ments ? partir du 7?me
		
	var self = this;
	
	// cr?ation du div
	var div = document.createElement("div");
	div.id = this.sIdDiv;
	window.document.body.appendChild(div);
	
	var hiddenMemo = document.createElement("input");
	hiddenMemo.id = this.sIdMemo;
	hiddenMemo.setAttribute("type", "hidden");
	hiddenMemo.setAttribute("name", this.sIdMemo);
	hiddenMemo.setAttribute("value", "");
	window.document.body.appendChild(hiddenMemo);
	
	this.reset = function(){
		document.getElementById(this.sIdMemo).value = "";
		document.getElementById(this.sIdChamp).value = "";
		document.getElementById(this.sIdButton).value = "- non spécifié -";
	}
	
	this.setURL = function(sURL){
		this.sURL = sURL;
	}
	this.getCompleteURL = function (){
		return this.sRootPath+this.sURL+this.sSessionId;
	}
	
	this.setInstanceName = function(sInstanceName){
		this.sInstanceName = sInstanceName;
	}
	this.addActionOnChange = function(sActionOnChange){
		this.sActionOnChange = sActionOnChange;
	}
	
	this.setMinimumSaisi = function(iTaille){
		this.iMinimumSaisi = iTaille;
	};
	this.initialiserChamps = function(sLibelle, sValeur){
		document.getElementById(this.sIdChamp).value = sValeur;
		document.getElementById(this.sIdButton).value = sLibelle;
	}
		
	document.getElementById(this.sIdButton).onclick = function(){
		if (document.getElementById(self.sIdDiv).style.visibility!="visible"){
			/*var t = eval(self.getPosTop(document.getElementById(self.sIdButton)) 
					+ document.getElementById(self.sIdButton).offsetHeight) + "px";*/
			var t = eval(self.getPosTop(document.getElementById(self.sIdButton))-3) + "px";
			var l = eval(self.getPosLeft(document.getElementById(self.sIdButton))) + "px";
			
			var div = document.getElementById(self.sIdDiv);
			div.style.display = "block";
			div.style.visibility = "visible";
			div.style.left = l;
			div.style.top = t;
//			alert("document.getElementById(self.sIdButton)="+document.getElementById(self.sIdButton).value);
			div.style.width = self.iWidth;
					
			div.setAttribute('class', 'AJCL_div');
		    div.setAttribute('className', 'AJCL_div');
			
			var sHTML = "";
			sHTML += "<div align=\"left\">";
			sHTML += "<input type=\"text\" size=\"20\" name=\""+self.sIdTextfield+"\" ";
			sHTML += "id=\""+self.sIdTextfield+"\" class=\"AJCL_search\" accesskey=\"4\" ";
			sHTML += "onkeyup=\"AJCL_launchRequestRecherche('"+self.sIdSelect+"',";
			sHTML += "'"+self.getCompleteURL()+"',";
			sHTML += "'"+self.sAction+"',";
			sHTML += "'"+self.sIdTextfield+"',";
			sHTML += "'"+self.sIdLimitOffset+"',";
			sHTML += "'"+self.sIdLimit+"',";
			sHTML += "'"+self.sIdAffichage+"',";
			sHTML += "'"+self.sIdTotal+"')\"";
			sHTML += "style=\"display:block;left:0px;top:0px;width:382px;\"";
			sHTML += " />";
			sHTML += "</div>";
			
			sHTML += "<div id="+this.sIdDivDisplay+" class=\"divSuggestion\" >";
			sHTML += "<table width=\""+self.iWidth+"\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
			sHTML += "<tr><td>";
			
			sHTML += "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
			sHTML += "<tr>";
			sHTML += "<td width=\"90%\">";
			sHTML += "<div class=\"texte_introduction\">";
			sHTML += "Sélectionnez un élément dans la liste ci-dessous en saisissant ci-dessus les premières lettres de votre recherche.";
			sHTML += "</div>";
			sHTML += "<div align=\"left\" id=\""+self.sIdAffichage+"\">";
			sHTML += "Chargement";			
			sHTML += "</div></td>";
			sHTML += "<td width=\"10%\"><div align=\"right\">";
			sHTML += "<img src=\"../images/cross.gif\" name=\""+self.sIdButtonFermer+"\" ";
			sHTML += "id=\""+self.sIdButtonFermer+"\" ";
			sHTML += "onclick=\"AJCL_contournerBugSelectIE('"+self.sIdDiv+"','"+self.sIdSelect+"');";
			sHTML += "AJCL_fermerDIV('"+self.sIdDiv+"')\" height=\"16\" ";
			sHTML += "/></div></td>";
			sHTML += "</tr></table>";
			
			sHTML += "</td></tr>";
			
			sHTML += "<tr><td>";
			sHTML += "<select ";
			sHTML += "name=\""+self.sIdSelect+"\" ";
			sHTML += "id=\""+self.sIdSelect+"\" ";
			sHTML += "size=\"10\" style=\"width:"+self.iWidth+";\" ";
			sHTML += "onchange=\"AJCL_getItemFromSelect('"+self.sIdChamp+"', ";
			sHTML += "'"+self.sIdSelect+"', '"+self.sIdButton+"', '"+self.sIdDiv+"', ";
			sHTML += "'"+self.sActionOnChange+"', '"+self.sIdMemo+"', '"+self.sIdTextfield+"')\" ";
			sHTML += "/>";
			sHTML += "</td></tr>";
			
			sHTML += "<tr><td>";
			
			sHTML += "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
			sHTML += "<tr>";
			sHTML += "<td><center>";
			sHTML += "<a href=\"javascript:;\" ";
			sHTML += "onclick=\"AJCL_prevResults('"+self.sIdSelect+"',";
			sHTML += "'"+self.getCompleteURL()+"',";
			sHTML += "'"+self.sAction+"',";
			sHTML += "'"+self.sIdTextfield+"',";
			sHTML += "'"+self.sIdLimitOffset+"',";
			sHTML += "'"+self.sIdLimit+"',";
			sHTML += "'"+self.sIdAffichage+"',";
			sHTML += "'"+self.sIdTotal+"')\">";
			sHTML += "<img src=\"../images/precedent.gif\" name=\""+self.sIdButtonPrec+"\" ";
			sHTML += "id=\""+self.sIdButtonPrec+"\" alt=\"Précédent\" ";
			sHTML += " />Résultats précédents";
			sHTML += "</a>";
			sHTML += " - ";			

			
			sHTML += "<a href=\"javascript:;\" ";
			sHTML += "onclick=\"AJCL_nextResults('"+self.sIdSelect+"',";
			sHTML += "'"+self.getCompleteURL()+"',";
			sHTML += "'"+self.sAction+"',";
			sHTML += "'"+self.sIdTextfield+"',";
			sHTML += "'"+self.sIdLimitOffset+"',";
			sHTML += "'"+self.sIdLimit+"',";
			sHTML += "'"+self.sIdAffichage+"',";
			sHTML += "'"+self.sIdTotal+"')\">";
			sHTML += "Résultats suivants";
			sHTML += "<img src=\"../images/suivant.gif\" name=\""+self.sIdButtonSuiv+"\" ";
			sHTML += "id=\""+self.sIdButtonSuiv+"\" alt=\"Suivant\" ";
			sHTML += " /></a></center></td>";
			sHTML += "</tr></table>";
			
			sHTML += "</td></tr>";
			
			sHTML += "</table>";
			sHTML += "<input type=\"hidden\" id=\""+self.sIdLimitOffset+"\" name=\""+self.sIdLimitOffset+"\" />";
			sHTML += "<input type=\"hidden\" id=\""+self.sIdLimit+"\" name=\""+self.sIdLimit+"\" />";
			sHTML += "<input type=\"hidden\" id=\""+self.sIdTotal+"\" name=\""+self.sIdTotal+"\" />";
			sHTML += "</div>";
			
			document.getElementById(self.sIdDiv).innerHTML = sHTML;			
			document.getElementById(self.sIdDiv).onclick = function(){};
						
			document.getElementById(self.sIdLimitOffset).value = self.iLimitOffset;
			document.getElementById(self.sIdLimit).value = self.iLimit;
			
			document.getElementById(self.sIdTextfield).value = document.getElementById(self.sIdMemo).value;
			document.getElementById(self.sIdTextfield).focus();
			
			/* t = eval(self.getPosTop(document.getElementById(self.sIdButton)) 
					+ document.getElementById(self.sIdButton).offsetHeight) + "px";*/
			
			//document.getElementById(self.sIdTextfield).setAttribute('class', 'AJCL_search');
		    //document.getElementById(self.sIdTextfield).setAttribute('className', 'AJCL_search');
			
			AJCL_contournerBugSelectIE(self.sIdDiv, self.sIdSelect);
			
			AJCL_launchRequest(self.sIdSelect,
								self.getCompleteURL(),
								self.sAction, 
								self.sIdTextfield, 
								self.sIdLimitOffset, 
								self.sIdLimit,
								self.sIdAffichage,
								self.sIdTotal);
		}else{
			AJCL_contournerBugSelectIE(self.sIdDiv, self.sIdSelect);
			AJCL_fermerDIV(self.sIdDiv);
		}
	};

	this.getPosTop = function(obj){
		toreturn = 0;
		while(obj){
			toreturn += obj.offsetTop;
			obj = obj.offsetParent;
		}
		return toreturn;
	};
	this.getPosLeft = function(obj){
		toreturn = 0;
		while(obj){
			toreturn += obj.offsetLeft;
			obj = obj.offsetParent;
		}
		return toreturn;
	};
}

function AJCL_chargerSelect(sReponse, sIdSelect, sIdAffichage, sIdTotal, sIdLimitOffset, sIdLimit){
	var iTotal = 0;
	var aReponseLibelle = new Array();
	var aReponseId = new Array();
	eval(sReponse);
	var l1 = document.getElementById(sIdSelect);
	for (var i=0;i<aReponseId.length;i++){
		l1.options[i] = new Option(aReponseLibelle[i], aReponseId[i],0,0);
	}
	document.getElementById(sIdTotal).value = iTotal;
	//Page x/xx (xx r?sultats)
	var s = "";
	if(iTotal<1){
		s += "Aucun résultat n'a été trouvé";
	}else{
		s += "Page ";
		var iLo = parseInt(document.getElementById(sIdLimitOffset).value,10);
		var iLi = parseInt(document.getElementById(sIdLimit).value,10);
		
		s += Math.floor(iLo/iLi)+1;
		s += "/";
		s += Math.ceil(iTotal/iLi);
		
		s += " ("+iTotal+" résultat";
		if (iTotal>1) s += "s";
		s += ")";
	}
	document.getElementById(sIdAffichage).innerHTML = s;
}

function AJCL_viderSelect(sIdSelect, sIdAffichage){
	var l1 = document.getElementById(sIdSelect);
   	l1.options.length = 0;
	var s = "Aucun résultat n'a été trouvé";
	document.getElementById(sIdAffichage).innerHTML = s;
}
function AJCL_afficherPatienterSelect(sIdSelect, sIdAffichage){
	var l1 = document.getElementById(sIdSelect);
   	l1.options[0] = new Option("Patientez SVP...", -1,0,0);
   	var s = "Chargement...";
	document.getElementById(sIdAffichage).innerHTML = s;
}

// Ajax ///
// NB : il faut déclarer cet objet en global si on souhaite pouvoir intervenir
// sur celui-ci afin qu'une seule et unique requête soit exécutée.
var AJCL_HttpObj = null;
if (window.XMLHttpRequest) {
	AJCL_HttpObj = new XMLHttpRequest();
}else if (window.ActiveXObject) {
	AJCL_HttpObj = new ActiveXObject("Microsoft.XMLHTTP");
}
function AJCL_launchRequest(sIdSelect, sURL, sAction, sIdTextfield, sIdLimitOffset, sIdLimit, sIdAffichage, sIdTotal){
	// on réinitialise la variable de sorte à interrompre une éventuelle
	// requête déjà en cours d'exécution
	if (window.XMLHttpRequest) {
		AJCL_HttpObj = new XMLHttpRequest();
	}else if (window.ActiveXObject) {
		AJCL_HttpObj = new ActiveXObject("Microsoft.XMLHTTP");
	}
	AJCL_viderSelect(sIdSelect, sIdAffichage);
	AJCL_afficherPatienterSelect(sIdSelect, sIdAffichage);
	try{
		// on pr?pare l'envoi avec l'url donn?e
		var sU = "sAction="+escape(sAction);
		sU += "&sChamp="+escape(document.getElementById(sIdTextfield).value);
		sU += "&iLimitOffset="+document.getElementById(sIdLimitOffset).value;
		sU += "&iLimit="+document.getElementById(sIdLimit).value;

		AJCL_HttpObj.open("POST", sURL);

		// fonction ex?cut?e lorsque le traitement est termin?
		AJCL_HttpObj.onreadystatechange = function(){
			if (AJCL_HttpObj.readyState == 4) {
				var sReponse = AJCL_HttpObj.responseText;
				if (sReponse.length>0){
					AJCL_viderSelect(sIdSelect, sIdAffichage);
					AJCL_chargerSelect(sReponse, sIdSelect, sIdAffichage, sIdTotal, sIdLimitOffset, sIdLimit);
				}else{
					AJCL_viderSelect(sIdSelect, sIdAffichage);
				}
			}else{
			}
		}
		AJCL_HttpObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		AJCL_HttpObj.send(sU);
	} catch (e){alert("Erreur > AJCL_launchRequest :\n\n"+e);}
}

function AJCL_launchRequestRecherche(sIdSelect, sURL, sAction, sIdTextfield, sIdLimitOffset, sIdLimit, sIdAffichage, sIdTotal){
//	pour une recherche il faut remettre le limitoffset ? 0
	document.getElementById(sIdLimitOffset).value = 0;
	AJCL_launchRequest(sIdSelect, sURL, sAction, sIdTextfield, sIdLimitOffset, sIdLimit, sIdAffichage, sIdTotal);
}

function AJCL_nextResults(sIdSelect, sURL, sAction, sIdTextfield, sIdLimitOffset, sIdLimit, sIdAffichage, sIdTotal){
	var iLo = parseInt(document.getElementById(sIdLimitOffset).value,10);
	var iLi = parseInt(document.getElementById(sIdLimit).value,10);
	var iTotal = parseInt(document.getElementById(sIdTotal).value,10);
	if (iTotal>0 && ((iLo+iLi)<iTotal)){
		iLo += iLi;
		document.getElementById(sIdLimitOffset).value = iLo;
		AJCL_launchRequest(sIdSelect, sURL, sAction, sIdTextfield, sIdLimitOffset, sIdLimit, sIdAffichage, sIdTotal);
	}
}

function AJCL_prevResults(sIdSelect, sURL, sAction, sIdTextfield, sIdLimitOffset, sIdLimit, sIdAffichage, sIdTotal){
	var iLo = parseInt(document.getElementById(sIdLimitOffset).value,10);
	var iLi = parseInt(document.getElementById(sIdLimit).value,10);
	var iTotal = parseInt(document.getElementById(sIdTotal).value,10);
	if (iTotal>0 && ((iLo-iLi)>=0)){
		iLo -= iLi;
		document.getElementById(sIdLimitOffset).value = iLo;
		AJCL_launchRequest(sIdSelect, sURL, sAction, sIdTextfield, sIdLimitOffset, sIdLimit, sIdAffichage, sIdTotal);
	}
}

function AJCL_getItemFromSelect(sIdChamp, sIdSelect, sIdButton, sDIV, sActionOnChange, sIdMemo, sIdTextfield){
	var l = document.getElementById(sIdSelect);
	if(l.options.selectedIndex>=0 && l.options[l.options.selectedIndex].value>=-1){
		document.getElementById(sIdChamp).value = l.options[l.options.selectedIndex].value;
		document.getElementById(sIdButton).value = l.options[l.options.selectedIndex].text;
		document.getElementById(sIdMemo).value = document.getElementById(sIdTextfield).value;	// Mémorise ce qui a été saisi
		AJCL_contournerBugSelectIE(sDIV, sIdSelect);
		AJCL_fermerDIV(sDIV);
		if (sActionOnChange!=""){
			eval(sActionOnChange);
		}
	}
}
function AJCL_fermerDIV(sIdDiv){
	document.getElementById(sIdDiv).style.display = "none";
	document.getElementById(sIdDiv).style.visibility = "hidden";
}

// AJCL_contournerBugSelectIE :
// 	- sIdDiv : le div qui s'ouvre et couvre les select à cacher
//	- sIdSelectException : le select du composant à ne pas cacher
function AJCL_contournerBugSelectIE(sIdDiv, sIdSelectException){
	// récupération des dimensions du div
	var oDiv = document.getElementById(sIdDiv);
	var x=0; var y=0; var oDivp; 
	if(oDiv.offsetParent){ 
		oDivp=oDiv; 
		while(oDivp.offsetParent){ 
			oDivp=oDivp.offsetParent;
			x+=oDivp.offsetLeft; 
			y+=oDivp.offsetTop; 
		} 
	} 
	x+=oDiv.offsetLeft; 
	y+=oDiv.offsetTop;
	w=oDiv.offsetWidth; 
	h=oDiv.offsetHeight;
	
	// on vérifie qu'il s'agit bien de IE
	var appVer = navigator.appVersion.toLowerCase(); 
	var iePos = appVer.indexOf('msie'); 
	if (iePos !=-1) { 
		var is_minor = parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos))); 
		var is_major = parseInt(is_minor); 
	} 
	if (navigator.appName.substring(0,9) == "Microsoft"){ // Check if IE version is 6 or older 
		if (is_major <= 6) {
			var selx,sely,selw,selh,i 
			var sel=document.getElementsByTagName("SELECT")
			for(i=0;i<sel.length;i++){ 
				selx=0; sely=0; var selp; 
				if(sel[i].offsetParent){ 
					selp=sel[i]; 
					while(selp.offsetParent){ 
						selp=selp.offsetParent;
						selx+=selp.offsetLeft; 
						sely+=selp.offsetTop; 
					} 
				} 
				selx+=sel[i].offsetLeft; 
				sely+=sel[i].offsetTop;
				selw=sel[i].offsetWidth; 
				selh=sel[i].offsetHeight; 
				if(sel[i].id!=sIdSelectException && 
					selx+selw>x && selx<x+w && sely+selh>y && sely<y+h){
					if(sel[i].style.visibility!="hidden") sel[i].style.visibility="hidden"; 
					else sel[i].style.visibility="visible"; 
				}
			}
		} 
	} 
} 

