function ffamove(lstSrc, lstDest, idhidden, sep, leftofval, rightofval, checkdest, values, selecttype)
{
	ffamoveItem(lstSrc, lstDest, sep , leftofval, rightofval,checkdest, values, selecttype) ;
	ffagenerateIdItems(document.getElementById(idhidden), document.getElementById('sel'+idhidden), sep, leftofval, rightofval) ;
}

function ffamoveAll(lstSrc, lstDest, idhidden, sep, leftofval, rightofval, checkdest, values, selecttype){
	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) ;
}

function ffamoveItem(lstSrc, lstDest, sep , leftofval, rightofval,checkdest, values, selecttype) 
{
	var src = document.getElementById(lstSrc) ;
	var dest = document.getElementById(lstDest) ;
	var seltypeidx = selecttype.selectedIndex ;
	
	
	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) ;
	
	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 ;		
	}
	
	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 ;
	
	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 ;
	}
	
	ffagenerateIdItems(document.getElementById(idhidden), document.getElementById('sel'+idhidden), sep, leftofval, rightofval) ;
}
				
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 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], "", "")) ;
		}
	}
}