function ffamove(lstSrc, lstDest, idhidden, sep, leftofval, rightofval, checkdest, values, selecttype,direction)
{

	if(direction == 'sel')
	direction = 'right';

	if(direction == 'choice')
	direction = 'left';


	ffamoveItem(lstSrc, lstDest, sep , leftofval, rightofval,checkdest, values, selecttype,direction) ;



	if(isSelectLien(lstSrc))
	{
		if(valuesSelected != "")
		ffagenerateIdItemsLiens(document.getElementById(idhidden), document.getElementById('sel'+idhidden), sep, leftofval, rightofval) ;
	}
	else
	ffagenerateIdItems(document.getElementById(idhidden), document.getElementById('sel'+idhidden), sep, leftofval, rightofval) ;

}

function ffamoveAll(lstSrc, lstDest, idhidden, sep, leftofval, rightofval, checkdest, values, selecttype,direction){
	var src = document.getElementById(lstSrc) ;

	for(i=0;i<src.length;i++){
		src.options[i].selected = true ;
	}

	ffamove(lstSrc, lstDest, idhidden, sep, leftofval, rightofval, checkdest, values, selecttype,direction) ;
}

function isSelectLien(lstSrc)
{
	myString = new String(lstSrc)
	rExp = /liens/gi;
	results = myString.search(rExp)
	if(results == -1)
	return false;
	else
	return true;
}

function ffamoveItem(lstSrc, lstDest, sep , leftofval, rightofval,checkdest, values, selecttype,direction)
{

	var src = document.getElementById(lstSrc) ;
	var dest = document.getElementById(lstDest) ;
	//var seltypeidx = selecttype.selectedIndex ;
	var seltypeidx = selecttype.selectedIndex ;

	var srcValue = selecttype.options[seltypeidx].value ;
	var seltypeidx = srcValue;//select.selectedIndex ;

	//Ajout d'un élément
	if(isSelectLien(lstSrc))
	{
		
		if(valuesSelected != "")
		{
			if(direction == "right")
			valuesSelected[seltypeidx].push(new Array(src.options[src.selectedIndex].value, src.options[src.selectedIndex].text));
			//Suppression d'un élément
			if(direction == "left")
			valuesSelected[seltypeidx].splice(src.selectedIndex,1);
		}
	}



	while (src.selectedIndex >= 0)
	{
		var flagmove = false ;

		//check type destination si == source
		if(checkdest){
			for(var i=0;i<values[seltypeidx].length && !flagmove;i++){
				if (values[seltypeidx][i][0] == src.options[src.selectedIndex].value){
					flagmove = true ;
				}
			}
		}

		var srcIdx = src.selectedIndex ;
		var srcValue = src.options[srcIdx].value ;
		var srcText = src.options[srcIdx].text ;

		src.options[srcIdx] = null ;

		// vérifier si pas déjà dans la liste
		for (var i=0 ; i<dest.options.length ; i++)
		{
			if (dest.options[i].value == srcValue)
			return ;
		}

		//si type destination == type source
		if(!checkdest || flagmove){
			dest.options.add(new Option(srcText, srcValue))
		}
	}
}

function ffamoveup(lst, idhidden, sep, leftofval, rightofval){
	var src = document.getElementById(lst) ;

	//Récupération du nom de la combo grâce au nom de la liste
	var selectCombo = document.getElementById("type"+lst.substr(3,lst.length-3));

	var srcIdx = src.selectedIndex ;
	var srcValue = src.options[srcIdx].value ;
	var srcText = src.options[srcIdx].text ;

	if(srcIdx > 0){
		var srcIdxup = src.selectedIndex-1 ;
		var srcValueup = src.options[srcIdxup].value ;
		var srcTextup = src.options[srcIdxup].text ;

		src.options[srcIdxup].value = srcValue ;
		src.options[srcIdxup].text = srcText ;
		src.options[srcIdx].value = srcValueup ;
		src.options[srcIdx].text = srcTextup ;

		src.selectedIndex=src.selectedIndex-1 ;
	}



	if(isSelectLien(lst))
	{
		
		if(valuesSelected != ""){
			//Réinsertion des éléments dans le bon ordre
			orderValuesSelected(src,selectCombo);
			ffagenerateIdItemsLiens(document.getElementById(idhidden), document.getElementById('sel'+idhidden), sep, leftofval, rightofval) ;
		}
	}

	else
	ffagenerateIdItems(document.getElementById(idhidden), document.getElementById('sel'+idhidden), sep, leftofval, rightofval) ;

}

function ffamovedown(lst, idhidden, sep, leftofval, rightofval){
	var src = document.getElementById(lst) ;

	var srcIdx = src.selectedIndex ;
	var srcValue = src.options[srcIdx].value ;
	var srcText = src.options[srcIdx].text ;

	//Récupération du nom de la combo grâce au nom de la liste
	var selectCombo = document.getElementById("type"+lst.substr(3,lst.length-3));

	if(srcIdx < src.options.length-1){
		var srcIdxdown = src.selectedIndex+1 ;
		var srcValuedown = src.options[srcIdxdown].value ;
		var srcTextdown = src.options[srcIdxdown].text ;

		src.options[srcIdxdown].value = srcValue ;
		src.options[srcIdxdown].text = srcText ;
		src.options[srcIdx].value = srcValuedown ;
		src.options[srcIdx].text = srcTextdown ;

		src.selectedIndex=src.selectedIndex+1 ;
	}
	if(isSelectLien(lst))
	{
		
		if(valuesSelected != ""){
			//Réinsertion des éléments dans le bon ordre
			orderValuesSelected(src,selectCombo);
			ffagenerateIdItemsLiens(document.getElementById(idhidden), document.getElementById('sel'+idhidden), sep, leftofval, rightofval) ;

		}
	}

	else
	ffagenerateIdItems(document.getElementById(idhidden), document.getElementById('sel'+idhidden), sep, leftofval, rightofval) ;


}
function orderValuesSelected(src, selectCombo)
{
	idx = selectCombo.options[selectCombo.selectedIndex].value;

	for(i=0 ; i < src.options.length; i++)
	{
		valuesSelected[idx][i] = new Array(src.options[i].value,src.options[i].text);
	}
}

function ffagenerateIdItemsLiens(txtIdItems, lstItems, sep, leftofval, rightofval)
{
	txtIdItems.value = "" ;


	for(i=0 ; i < valuesSelected.length ; i++)
	{
		for(j=0 ; j < valuesSelected[i].length ; j++)
		{
			//alert("j:" + valuesSelected[i][j][0]);
			txtIdItems.value += leftofval+valuesSelected[i][j][0] + rightofval ;
			txtIdItems.value += sep ;
		}


	}

	txtIdItems.value = txtIdItems.value.substring(0,txtIdItems.value.length-1);
}

function ffagenerateIdItems(txtIdItems, lstItems, sep, leftofval, rightofval)
{
	txtIdItems.value = "" ;

	for (var i=0 ; i < lstItems.length ; i++)
	{
		if (i > 0) txtIdItems.value += sep ;
		txtIdItems.value += leftofval+lstItems.options[i].value+rightofval ;
	}
}


function ffachangeLiens(select, values, list, inputselval, sep, leftofval, rightofval,links,selectSelected,valuesSelected)
{

	//Récupération de l'ID du sélectionné
	var srcIdx = select.selectedIndex ;
	//if(!links)
	//{
	//Récupération de sa valeur
	var srcValue = select.options[srcIdx].value ;
	var selectedIndex = srcValue;//select.selectedIndex ;


	//}
	//else
	//var selectedIndex = select.selectedIndex ;



	var listlength = list.options.length ;
	var strselval = new String(inputselval.value) ;
	var selval = strselval.split(sep) ;

	for(var i=listlength-1;i>=0;i--){
		list.options[i] = null ;
	}

	for(var i=0;i<values[selectedIndex].length;i++){
		var flag = true ;
		for(var j=0;j<selval.length && flag;j++){

			if(selval[j] == leftofval+values[selectedIndex][i][0]+rightofval){
				flag = false ;
			}
		}

		if(flag){
			list.options.add(new Option(values[selectedIndex][i][1], values[selectedIndex][i][0], "", "")) ;
			//selectSelected.options.add(new Option(values[selectedIndex][i][1], values[selectedIndex][i][0], "", "")) ;
		}
	}

	var listlength = selectSelected.options.length ;
	var strselval = new String(inputselval.value) ;
	var selval = strselval.split(sep) ;

	for(var i=listlength-1;i>=0;i--){
		selectSelected.options[i] = null ;
	}

	if(valuesSelected !="")
	for(var i=0;i<valuesSelected[selectedIndex].length;i++){
		var flag = true ;
		for(var j=0;j<selval.length && flag;j++){
			if(selval[j] == leftofval+valuesSelected[selectedIndex][i][0]+rightofval){
				flag = false ;
			}
		}

		//if(flag){
		//list.options.add(new Option(values[selectedIndex][i][1], values[selectedIndex][i][0], "", "")) ;
		selectSelected.options.add(new Option(valuesSelected[selectedIndex][i][1], valuesSelected[selectedIndex][i][0], "", "")) ;
		//}
	}

}

function ffachange(select, values, list, inputselval, sep, leftofval, rightofval){


	var selectedIndex = select.selectedIndex ;
	var listlength = list.options.length ;
	var strselval = new String(inputselval.value) ;
	var selval = strselval.split(sep) ;

	for(var i=listlength-1;i>=0;i--){
		list.options[i] = null ;
	}

	for(var i=0;i<values[selectedIndex].length;i++){
		var flag = true ;
		for(var j=0;j<selval.length && flag;j++){
			if(selval[j] == leftofval+values[selectedIndex][i][0]+rightofval){
				flag = false ;
			}
		}

		if(flag){
			list.options.add(new Option(values[selectedIndex][i][1], values[selectedIndex][i][0], "", "")) ;
		}
	}
}
