function TwinList(list1, list2)
{
	// get list elem
	listFrom = document.getElementById(list1);
	listTo = document.getElementById(list2);
	for(var i=0; i<listFrom.options.length; i++) {
		if(listFrom.options[i].selected == true) {
			// create new option in dest list (list2)
			new_opt = new Option();
			new_opt.value = listFrom.options[i].value;
			new_opt.text = listFrom.options[i].text;
			new_opt.order = listFrom.options[i].order;
			new_opt.orig_index = listFrom.options[i].orig_index;
		
			if(listTo.length == 0) {
				var new_place=0;
			} else {
				if (listTo.ordered == 1) {
					var new_place=0;
					while(new_place<listTo.length) {			
						if(parseInt(listFrom.options[i].orig_index) < parseInt(listTo.options[new_place].orig_index)) {
							break;
						}
						new_place++;
					}
				} else {
					var new_place=listTo.options.length;
				}
			}
			
			listTo.options.add(new_opt, new_place);
			// delete selected option from old list (list1)
			listFrom.options[i] = null;
			i--;
		}
	}
}

function UpdateHidden(hf, list)
{
	hidden_field = document.getElementById(hf);
	list_key = document.getElementById(list);

	// update the hidden field ...
	tmp_key = "";
	for(var i=0; i<list_key.length; i++) {
		tmp_key = tmp_key + "," + list_key.options[i].value;
	}
	hidden_field.value = tmp_key.substring(1, tmp_key.length);
}

function MoveItem(list1, where)
{
	listFrom = document.getElementById(list1);
	var aSelected = new Array();
	if(where == "up") {
		var from = 0;
		var to = "i<" + listFrom.options.length;
		var increment = "i+=1";
	} else {
		var from = listFrom.options.length -1 ;
		var to = "i>=0";
		var increment = "i-=1";
	}

	for(var i=from; eval(to); eval(increment)) {
		if(listFrom.options[i].selected == true && (where != "up" || i != 0) && (where != "down" || i != listFrom.options.length-1)) {
			if(where == "up")
				new_place = i-1;
			else
				new_place = i+1;
			
			// save the selected item in a tmp variable
			tmp = new Option();
			tmp.value = listFrom.options[i].value;
			tmp.text = listFrom.options[i].text;
			tmp.order = listFrom.options[i].order;
			tmp.orig_index = listFrom.options[i].orig_index;
			
			// copy the where item on the selected item
			listFrom.options[i].value = listFrom.options[new_place].value;
			listFrom.options[i].text = listFrom.options[new_place].text;
			listFrom.options[i].order = listFrom.options[new_place].order;
			listFrom.options[i].orig_index = listFrom.options[new_place].orig_index;
			
			// copy the tmp item to the where item
			listFrom.options[new_place].value = tmp.value;
			listFrom.options[new_place].text = tmp.text;
			listFrom.options[new_place].order = tmp.order;
			listFrom.options[new_place].orig_index = tmp.orig_index;
	
			// keep trace of selected item to re-select themn after
			aSelected[aSelected.length] = new_place;
			listFrom.options[i].selected = false;
		}
	}
	
	// keep the selected item selected ...
	for(i=0; i<aSelected.length; i++) {
		listFrom.options[aSelected[i]].selected = true;
	}
}
