/* TRANSFERT */
function LeftToRight(l1,l2,tab) {
  if(l1.options.selectedIndex<0){
		alert("Vous devez sélectionner un élément dans la liste de gauche !");
  }
  else{
	while (l1.options.selectedIndex>=0) {
		selection = l1.options[l1.options.selectedIndex];
		objOption = selection.cloneNode(true);
			
	  	if(selection.parentNode.nodeName=='OPTGROUP'){
			optg_src = selection.parentNode;
			optgroup_id = optg_src.getAttribute("id");
			
			if(!OptGroup_Exist(l2,optgroup_id)){
				optGroup = optg_src.cloneNode(false);
				for(placeo=0;placeo<tab.length;placeo++){
				if(tab[placeo].nom==optGroup.id){ break; }
				}
				if(placeo >= l2.childNodes.length){
				l2.appendChild(optGroup);
				}
				else{
				l2.insertBefore(optGroup, l2.childNodes[placeo]);
				}
		    }
			else{
				optGroup = Get_OptGroup(l2,optgroup_id);
				for(placeo=0;placeo<tab.length;placeo++){
				if(tab[placeo].nom==optGroup.id){ break; }
				}
			}

			for(place=0;place<tab[placeo].enfant.length;place++){
				if(tab[placeo].enfant[place]==objOption.value){ break; }
			}
			
			if(place >= optGroup.childNodes.length){
				optGroup.appendChild(objOption);
			}
			else{
				optGroup.insertBefore(objOption, optGroup.childNodes[place]);
			}
			
			optg_src.removeChild(selection);
			if(optg_src.childNodes.length==0){
				l1.removeChild(optg_src);
			}
		}
		else{
			l2.appendChild(objOption);
			l1.removeChild(selection);
		}
	}
  }
}


function RightToLeft(l1,l2,tab) {
  if(l2.options.selectedIndex<0){
		alert("Vous devez sélectionner un élément dans la liste de droite !");
  }
  else{	
		while (l2.options.selectedIndex>=0) {
		selection = l2.options[l2.options.selectedIndex];
		objOption = selection.cloneNode(true);
			
	  	if(selection.parentNode.nodeName=='OPTGROUP'){
			optg_src = selection.parentNode;
			optgroup_id = optg_src.getAttribute("id");
			if(!OptGroup_Exist(l1,optgroup_id)){
				optGroup = optg_src.cloneNode(false);
				
				for(placeo=0;placeo<tab.length;placeo++){
				if(tab[placeo].nom==optGroup.id){ break; }
				}
				if(placeo >= l1.childNodes.length){
				l1.appendChild(optGroup);
				}
				else{
				l1.insertBefore(optGroup, l1.childNodes[placeo]);
				}
		    }
			else{
				optGroup = Get_OptGroup(l1,optgroup_id);
				for(placeo=0;placeo<tab.length;placeo++){
				if(tab[placeo].nom==optGroup.id){ break; }
				}
			}
			
			for(place=0;place<tab[placeo].enfant.length;place++){
				if(tab[placeo].enfant[place]==objOption.value){ break; }
			}
			
			if(place >= optGroup.childNodes.length){
				optGroup.appendChild(objOption);
			}
			else{
				optGroup.insertBefore(objOption, optGroup.childNodes[place]);
			}
			
			optg_src.removeChild(selection);
			if(optg_src.childNodes.length==0){
				l2.removeChild(optg_src);
			}
		}
		else{
			for(place=0;place<tab.length;place++){
				if(tab[place].nom==objOption.value){ break; }
			}
			
			if(place >= l1.childNodes.length){
				l1.appendChild(objOption);
			}
			else{
				l1.insertBefore(objOption, l1.childNodes[place]);
			}
			l2.removeChild(selection);
		}
	}
  }
}


function AllLeftToRight(l1,l2) {
	var selEnf = l1.childNodes;
	for(i=0;i<selEnf.length;i++){
		if(selEnf[i].nodeName=='OPTGROUP'){
			optGroup = selEnf[i].cloneNode(false);
			l2.appendChild(optGroup);
			optgEnf = selEnf[i].childNodes;
			for(j=0;j<optgEnf.length; j++){
			objOption = optgEnf[j].cloneNode(true);
			optGroup.appendChild(objOption);
			}
		}
		else{
		objOption = selEnf[i].cloneNode(true);
		l2.appendChild(objOption);
		}
	}
	RemoveElement(l1);
}


function AllRightToLeft(l1,l2) {
	var selEnf = l2.childNodes;
	for(i=0;i<selEnf.length;i++){
		if(selEnf[i].nodeName=='OPTGROUP'){
			optGroup = selEnf[i].cloneNode(false);
			l1.appendChild(optGroup);
			optgEnf = selEnf[i].childNodes;
			for(j=0;j<optgEnf.length; j++){
			objOption = optgEnf[j].cloneNode(true)
			optGroup.appendChild(objOption);
			}
		}
		else{
		objOption = selEnf[i].cloneNode(true);
		l1.appendChild(objOption);
		}
	}
	RemoveElement(l2);
}


function Element(un_nom,un_enfant) {
	this.nom=un_nom;
	this.enfant=un_enfant;
}

function OptGroup_Exist(liste,id){
	var collEnfants = liste.childNodes;
	for (var i = 0; i < collEnfants.length; i++) 
	{
		if(collEnfants[i].nodeName=='OPTGROUP'){
			if(collEnfants[i].getAttribute("id")==id){ return true; }
		}
	}
	return false;
}


function Get_OptGroup(liste,id){
	var collEnfants = liste.childNodes;
	for (var i = 0; i < collEnfants.length; i++) 
	{
		if(collEnfants[i].nodeName=='OPTGROUP'){
			if(collEnfants[i].getAttribute("id")==id){ return collEnfants[i]; }
		}
	}
	return false;
}


function RemoveElement(parent){
	collEnfants = parent.childNodes;
	len = collEnfants.length-1;
	for (n=len;n!=-1;n--) 
	{	
		parent.removeChild(collEnfants[n]);
	}
}


function MemoListe(liste,recval){
	var rec = "";
	collEnfants = liste.childNodes;
	for (n=0;n<collEnfants.length;n++) 
	{	
		if(collEnfants[n].nodeName=='OPTION'){
			rec+=collEnfants[n].getAttribute("value")+",";
		}
		if(collEnfants[n].nodeName=='OPTGROUP'){
			collEnf = collEnfants[n].childNodes;
			for (m=0;m<collEnf.length;m++) 
			{
				if(collEnf[m].nodeName=='OPTION'){
				rec+=collEnf[m].getAttribute("value")+",";
				}
			}
		}
	}
	rec = rec.substring(0,(rec.length-1));
	recval.value=rec;
}


/* POSITIONNEMENT */
function Monter(l1){
  if(l1.options.selectedIndex<0){
		alert("Vous devez sélectionner un élément dans la liste de droite !");
  }
  else{	
		while (l1.options.selectedIndex>=0) {
		selection = l1.options[l1.options.selectedIndex];
		objOption = selection.cloneNode(true);
			if(selection.parentNode.nodeName=='OPTGROUP'){
			optg_src = selection.parentNode;
			optGroup = optg_src.cloneNode(true);
			firstenf = optg_src.firstChild;
				if(firstenf.value==selection.value){
					for(i=0;i<l1.childNodes.length;i++){
					if(l1.childNodes[i].id==optg_src.id){ break; }
					}
					if(i>0){
					l1.insertBefore(optGroup, l1.childNodes[(i-1)]);
					l1.removeChild(optg_src);		
					}
					else{
					l1.options[l1.options.selectedIndex].selected=false;
					}
				}
				else{
					for(i=0;i<optg_src.childNodes.length;i++){
					if(optg_src.childNodes[i].value==selection.value){ break; }
					}
					optg_src.insertBefore(objOption, optg_src.childNodes[(i-1)]);
					optg_src.removeChild(selection);
				}
			}
			else{
				for(i=0;i<l1.childNodes.length;i++){
					if(l1.childNodes[i].value==selection.value){ break; }
				}
				if(i>0){
				l1.insertBefore(objOption, l1.childNodes[(i-1)]);
				l1.removeChild(selection);
				}
				else{
				l1.options[l1.options.selectedIndex].selected=false;
				}
			}
		}
		
  }
}

function Descendre(l1){
  if(l1.options.selectedIndex<0){
		alert("Vous devez sélectionner un élément dans la liste de droite !");
  }
  else{	
		while (l1.options.selectedIndex>=0) {
		selection = l1.options[l1.options.selectedIndex];
		objOption = selection.cloneNode(true);
			if(selection.parentNode.nodeName=='OPTGROUP'){
			optg_src = selection.parentNode;
			optGroup = optg_src.cloneNode(true);
			lastenf = optg_src.lastChild;
				if(lastenf.value==selection.value){
					for(i=0;i<l1.childNodes.length;i++){
					if(l1.childNodes[i].id==optg_src.id){ break; }
					}
					if(i<(l1.childNodes.length-2)){
					l1.insertBefore(optGroup,l1.childNodes[(i+2)]);
					}
					else{
					l1.appendChild(optGroup);
					}
					l1.removeChild(optg_src);
				}
				else{
					for(i=0;i<optg_src.childNodes.length;i++){
					if(optg_src.childNodes[i].value==selection.value){ break; }
					}
					if(i<(optg_src.childNodes.length-2)){
					optg_src.insertBefore(objOption, optg_src.childNodes[(i+2)]);
					}
					else{
					optg_src.appendChild(objOption);
					}
					optg_src.removeChild(selection);
				}
			}
			else{
				for(i=0;i<l1.childNodes.length;i++){
					if(l1.childNodes[i].value==selection.value){ break; }
				}
				if(i<(l1.childNodes.length-2)){
				l1.insertBefore(objOption, l1.childNodes[(i+2)]);
				}
				else{
				l1.appendChild(objOption)
				}
				l1.removeChild(selection);
			}
		}
		
  }
}
