/** Juin 2003 damien@vt-design.com
*** Classe qui permet l'echange d'elements <options> entre 2 liste
* Update damien avril 2006
**/


	/****************************************
	* constructeur
	*
	* @param : 2 inputs selected et 1 input text
	*****************************************/

function DoubleLST(lstOrigine, lstNew, strListe)
{
	
	//variable d'instance
	this.lstNew	= document.getElementById(lstNew);
	this.lstOrigine	= document.getElementById(lstOrigine);

	this.strListe	= document.getElementById(strListe);
	
	var dbl=this;
	this.lstOrigine.ondblclick=function(){dbl.add()};
	this.lstNew.ondblclick=function(){dbl.remove()};	
	var valIds=this.strListe.value;
	
	this.init();
	
	if(valIds!=null)
	{				
		this.addValIDStr(valIds);
	}	
}

	/****************************************
	* init > initialisation du premier <option>
	*
	* @param : 2 inputs selected
	*****************************************/

DoubleLST.prototype.init=function()
{
	this.lstNew.length=1;
	this.lstNew.options[this.lstNew.length-1].text="choisissez...";
	this.lstNew.options[this.lstNew.length-1].value=0;

	if(this.strListe.value!=null)
	{	
		this.strListe.value="";
	}
}

DoubleLST.prototype.addAll = function()
{
    if(confirm('Ajouter tous les éléments de la liste ?')){
	this.init();
		
	for(var i=0; i<this.lstOrigine.length; i++)
	{		
		if(this.lstNew.options[this.lstNew.length-1].value == 0)
		{
			this.lstNew.length=1;
		}
		else
		{
			this.lstNew.length++;
		}
		
		var option= this.lstOrigine.options[i];
		
		this.lstNew.options[this.lstNew.length-1].value = option.value;
		this.lstNew.options[this.lstNew.length-1].text = option.text;
		this.lstNew.options[this.lstNew.length-1].style.color = option.style.color;		
	}
	
	this.parseList();
    }
}

	/****************************************
	* add > ajoute le champ selectionn???
	*
	* @param : 2 inputs selected
	*****************************************/
DoubleLST.prototype.add=function(){

	var ajouter=false;
	
	var state = this.exist();

	if(state == 0){

		if(this.lstNew.options[this.lstNew.length-1].value == 0){
			this.lstNew.length=1;
		}else{
			this.lstNew.length++;
		}

		//var re = new RegExp("^(&nbsp;)*[\|\-]*(&nbsp;)*--");
		var txt=this.lstOrigine.options[this.lstOrigine.selectedIndex].text;
		this.lstOrigine.options[this.lstOrigine.selectedIndex].disabled=true;

		this.lstNew.options[this.lstNew.length-1].value=this.lstOrigine.options[this.lstOrigine.selectedIndex].value;
		this.lstNew.options[this.lstNew.length-1].text=txt;
		this.lstNew.options[this.lstNew.length-1].style.color=this.lstOrigine.options[this.lstOrigine.selectedIndex].style.color;
		this.parseList();
		ajouter=true;
	}
	else if(state == 1){
		//caract�res accentu�s cod�s en octal
		alert("Cette entr\351e a d\351j\340 \351t\351 ajout\351e");
		ajouter=false;
	}
	else if(state == 2){
		alert("Veuillez s\351lectionner une entr\351e !");
		ajouter=false;
	} 

	return ajouter;
}

DoubleLST.prototype.addVal=function(valeur,texte){

	if(this.lstNew.options[this.lstNew.length-1].value == 0){
		this.lstNew.length=1;
	}else{
		this.lstNew.length++;
	}

	this.lstNew.options[this.lstNew.length-1].value=valeur;
	this.lstNew.options[this.lstNew.length-1].text=texte;

	this.parseList();

}

DoubleLST.prototype.addValIDStr=function(valeur){

	
	if(valeur != null && valeur !=""){
		//on recupere la liste au format String, ex: 4,123,8
		var bbb = valeur.split(",");
		//initialisation de la futur valeur
		valeur = 0;

		for(var i = 0 ; i < bbb.length ; i++){

			//on parcour le tableau bbb contenant chaque id de la String
			valeur=bbb[i];
				
			//si la valeur n'existe pas encore ds la lstNEw:
			if(!this.IDExist(valeur)){

				//on cherche l'index de la valeur ds lstOrigine
				var index=-1;
				//on parcours la liste pr trouver l'index suivant la liste:
				for(var j=0;j<this.lstOrigine.length; j++){
					if(this.lstOrigine.options[j].value==valeur){
						index=j;						
						break;
					}
				}
				
				if(index>=0){
					if(this.lstNew.options[this.lstNew.length-1].value == 0){
						this.lstNew.length=1;
					}else{
						this.lstNew.length++;
					}
					
				
					this.lstNew.options[this.lstNew.length-1].value=this.lstOrigine.options[index].value;
					this.lstNew.options[this.lstNew.length-1].text=this.lstOrigine.options[index].text;
					this.lstNew.options[this.lstNew.length-1].style.color=this.lstOrigine.options[index].style.color;
					
	
					this.parseList();
				}
			}else{
				//alert("cette entr&eacute;e a d&eacute;ja &eacute;t&eacute; ajout&eacute;e!");
			}
		}
	}
}

DoubleLST.prototype.monter=function(){

	var id_lstNew=this.lstNew.selectedIndex;

	if(id_lstNew>0){

		//on memorise les params de l'index precedent le selectedindex:
		var val	= this.lstNew.options[id_lstNew-1].value;
		var txt	= this.lstNew.options[id_lstNew-1].text;
		var st	= this.lstNew.options[id_lstNew-1].style.color;

		//on remplace par le selectedIndex:
		this.lstNew.options[id_lstNew-1].value		= this.lstNew.options[id_lstNew].value;
		this.lstNew.options[id_lstNew-1].text		= this.lstNew.options[id_lstNew].text;
		this.lstNew.options[id_lstNew-1].style.color	= this.lstNew.options[id_lstNew].style.color;

		//on remet l'indexprecedent en suivant

		this.lstNew.options[id_lstNew].value		= val;
		this.lstNew.options[id_lstNew].text		= txt;
		this.lstNew.options[id_lstNew].style.color	= st;

		this.lstNew.selectedIndex=id_lstNew-1;
		this.parseList();
	}
}

DoubleLST.prototype.descendre=function(){

	var id_lstNew=this.lstNew.selectedIndex;

	if(id_lstNew<this.lstNew.length-1){

		//on memorise les params de l'index precedent le selectedindex:
		var val	= this.lstNew.options[id_lstNew+1].value;
		var txt	= this.lstNew.options[id_lstNew+1].text;
		var st	= this.lstNew.options[id_lstNew+1].style.color;

		//on remplace par le selectedIndex:
		this.lstNew.options[id_lstNew+1].value		= this.lstNew.options[id_lstNew].value;
		this.lstNew.options[id_lstNew+1].text		= this.lstNew.options[id_lstNew].text;
		this.lstNew.options[id_lstNew+1].style.color	= this.lstNew.options[id_lstNew].style.color;

		//on remet l'indexprecedent en suivant

		this.lstNew.options[id_lstNew].value		= val;
		this.lstNew.options[id_lstNew].text		= txt;
		this.lstNew.options[id_lstNew].style.color	= st;

		this.lstNew.selectedIndex=id_lstNew+1;
		this.parseList();
	}
}

DoubleLST.prototype.addValID=function(valeur){

	var ajouter=false;

	if(!this.IDExist(valeur)){
		var index=0;
		//on parcours la liste pr trouver l'index suivant la liste:
		for(var i=0;i<this.lstOrigine.length; i++){
			if(this.lstOrigine.options[i].value==valeur){
				index=i;
				break;
			}
		}

		if(this.lstNew.options[this.lstNew.length-1].value == 0){
			this.lstNew.length=1;
		}else{
			this.lstNew.length++;
		}

		this.lstNew.options[this.lstNew.length-1].value=this.lstOrigine.options[index].value;
		this.lstNew.options[this.lstNew.length-1].text=this.lstOrigine.options[index].text;
		this.lstNew.options[this.lstNew.length-1].style.color=this.lstOrigine.options[index].style.color;

		this.parseList();
	}else{
		alert("Cette entr\351e a d\351j\340 \351t\351 ajout\351e");
		ajouter=false;
	}
	return ajouter;
}

	/****************************************
	* exist > teste si le champ selectionn??? existe deja
	*
	* @param : none
	*****************************************/
DoubleLST.prototype.exist=function(){

	var existant = 0;

	if (this.lstOrigine.selectedIndex >= 0) {
		for (var i = 0; i < this.lstNew.length; i++) {

			if (this.lstNew.options[i].value == this.lstOrigine.options[this.lstOrigine.selectedIndex].value) {
				existant = 1;
			//break;
			}
		}
	}
	else existant = 2;
	
	return existant;
}

	/****************************************
	* IDExist > teste si le champ existe deja
	*
	* @param : value du champ
	*****************************************/

DoubleLST.prototype.IDExist=function(value_id){
	
	for(var i=0; i<this.lstNew.length;i++){
		
		if(parseInt(this.lstNew.options[i].value) == parseInt(value_id))			
			return true;		
	}
	
	return false;
}


	/****************************************
	* remove > supprime un champ
	*
	* @param : none
	*****************************************/

DoubleLST.prototype.remove=function(){

	var id_lstNew=this.lstNew.selectedIndex;

	if(this.lstNew.selectedIndex!=-1){

		var value=this.lstNew.options[this.lstNew.selectedIndex].value;

		if(this.lstNew.length==1){
			this.init();
		}else{

			for(var i=id_lstNew; i<this.lstNew.length-1; i++){
				if(i<this.lstNew.length){
					this.lstNew.options[i].text = this.lstNew.options[(i+1)].text;
					this.lstNew.options[i].value = this.lstNew.options[(i+1)].value;
				}
			}
			this.lstNew.length--;
			this.parseList();
		}

		for(var i=0; i<this.lstOrigine.options.length; i++){

			if(this.lstOrigine.options[i].value==value)
			this.lstOrigine.options[i].disabled=false;
		}

	}else{
		alert("Veuillez selectionner un champ !");
	}
}


	/****************************************
	* parse > retourne une chaine
	*
	* @param : 2 none
	*****************************************/

DoubleLST.prototype.parseList=function(){

	var str="";

	for(var i=0; i<this.lstNew.length; i++){
		str+=this.lstNew.options[i].value;
		if(i<(this.lstNew.length-1)) str+=",";
	}

	this.strListe.value=str;
}

DoubleLST.prototype.like=function(value_){
	if(value_){
		for(var i=0; i<this.lstOrigine.options.length; i++){
				var val=this.lstOrigine.options[i].text;
				if(val.indexOf(value_,0)>=0)
				this.lstOrigine.options[i].style.backgroundColor="#FFEB8F";
				else
				this.lstOrigine.options[i].style.backgroundColor="none";
		}
	}
}

