

function deplaceElement(source, destination, type) {
	
	if (source.selectedIndex == -1) return;
	
	// Ajout ou suppression de l'id dans le champ caché
	switchItem(source.options[source.selectedIndex].value);
	
	// Suppression du select de visualisation
	if (type == 'suppression'){
		select1234Element.options[source.selectedIndex]	= null
		opt 		= new Option(source.options[source.selectedIndex].text, source.options[source.selectedIndex].value);		
		nbOptions 	= select1234Element.options.length;
		
		// Ajout de l'element du tableau de référence
		tOptionsReference[source.options[source.selectedIndex].value] = source.options[source.selectedIndex].text
	}
	
	// Création d'un élément qui reprend les infos de l'element source
	opt = new Option(source.options[source.selectedIndex].text, source.options[source.selectedIndex].value);
	
	// Ajout d'un elemet dans la liste destination
	nbOptions = destination.options.length;
	destination.options[nbOptions]			= opt;
	
	// Ajout de l'element dans le select de visualisation
	if (type == 'ajout'){
		opt 		= new Option(source.options[source.selectedIndex].text, source.options[source.selectedIndex].value);		
		nbOptions 	= select1234Element.options.length;
		select1234Element.options[nbOptions]			= opt;
		
		// Suppression de l'element du tableau de référence
		//tOptionsReference = deleteItem(source.options[source.selectedIndex].text, tOptionsReference); // Finalement on le supprime pas car le tableau de ref est un tab de ref et ne doit pas bouger - a suivre

		debugIt(tOptionsReference);
		//alert(source.options[source.selectedIndex].value);
	}
	
	// Suppression d'un élément dans la liste de départ
	source.options[source.selectedIndex]	= null
	

}

function switchItem(d) {
  
	var isTrouve = false;
	var i = 0;
	
	// On regarde si le tableau contient la valeur
	while( !isTrouve && i < tableau.length)
	{
		if (tableau[i] == d) {
		  tableau.splice(i, 1);
		  isTrouve = true;
		}
	
		i++;
	}
	
	if (!isTrouve) tableau.push(d);
	
	cacheElement.value = tableau.toString();
}

function deleteItem(search, tab) {

	var isTrouve = false;
	var i = 0;
	
	// On regarde si le tableau contient la valeur
	while( !isTrouve && i < tab.length)
	{
		if (tab[i] == search) {
		  tab.splice(i, 1);
		  isTrouve = true;	  
		}
	
		i++;
	}
	
	return tab;
}

function viderTout() {
	
	// Vide le select tjrs visible
	emptySelect(select1234Element);
	
	// Ajoute les element du select de droite au select de gauche
	copySelect(selectDroiteElement, selectGaucheElement);
	
	// Ajoute les element du select de droite au select de gauche
	copySelectToTab(selectDroiteElement, tOptionsReference);
	
	// Vide le select de droite
	emptySelect(selectDroiteElement);
	
	// Vide le tableau javascript référence qui contient les id selectionné
	tableau = new Array();
	
	
	
	// Vide l'element caché
	cacheElement.value="";
}

function updateListBox(str) {
	
	var tabTemp = new Array();
	str = str.toUpperCase();

	// Recherche
	for (var indice in tOptionsReference){
		recallage = parseInt(indice)+1
		if (tOptionsReference[indice].toUpperCase().indexOf(str) != -1) tabTemp[indice]=tOptionsReference[indice];
		
	}
	scratchAndLoadSelect(tabTemp, selectGaucheElement);
}



//////////////////////////----------------- Fonctions génériques

// Affiche les valeurs d'un tableau dans la barre d'état (fonctionne sous ie)
function debugIt(tablo) {
	
	// Mode debugagge off : on met return et puis c tout sinon commenter return;
	//return;
	
	var t = "";
	for (var indice in tablo){		
		t = t + "-" + tablo[indice];			
	}
	window.status=t;
}

function scratchAndLoadSelect(tab, selectElement) {
	
	emptySelect(selectElement)
	
	loadArray(tab, selectElement)
}

// Ajoute l'ensemble clef/valeur d'un tableau javascript
// à la fin d'un select box.
function loadArray(tab, selectElement) {

	for (var indice in tab){
		opt = new Option(tab[indice], indice);	
		selectElement.options[selectElement.options.length]= opt;
	}


}

// Supprime tous les elements d'un selectBox
function emptySelect(selectElement) {
	
	selectElement.options.length=0;
		
}

// Transforme les éléments clef/valeur d'un select en tableau
function copySelectToTab(selectSource, tOptionsReference) {
	
	for (var i=0; i<selectSource.options.length; i++) {			 	
	
		tOptionsReference[selectSource.options[i].value] = selectSource.options[i].text;
	}
	
	return tOptionsReference;
}

// Ajoute les options d'un select à un autre
function copySelect(selectSource, selectDest) {

	for (var i=0; i<selectSource.options.length; i++) {
		
	 	opt = new Option(selectSource.options[i].text, selectSource.options[i].value);
	
		// Ajout d'un elemet dans la liste destination
		nbOptions = selectDest.options.length;
		selectDest.options[nbOptions] = opt;
	}
}
function initElementValue(tab, hiddenElement) {
	i = 0;
	
	for (var indice in tab){
		tableau[i]=indice;
		i++;
	}
	hiddenElement.value = tableau.toString()

}