function AddItem(from, to, maxSelected, errorMsg, hidden, eventref)
{
	var index = from.selectedIndex;
	if (index == -1) return;

	var text = from.options[index].text;
	var value = from.options[index].value;
	
	if (Contains(to, value)) return;
	
	if (to.length == maxSelected && maxSelected != -1)
	{
		alert(errorMsg);
		return;
	}
	
	var i, j;
	var l = to.length;
	to.options[l] = new Option;
	
	for (i = 0; i < l && to.options[i].text <= text; i++);
	for (j = l; j > i; j--)
	{
		to.options[j].value = to.options[j-1].value;
		to.options[j].text = to.options[j-1].text;
	}
	to.options[j].value = value;
	to.options[j].text = text;
	
	UpdateHiddenField(to, hidden);
	from.selectedIndex = -1;
	to.selectedIndex = -1;
	//to.selectedIndex = j;
	
	eval(eventref);
}

function Contains (list, value)
{
	for (var i = 0; i < list.length; i++)
		if (list.options[i].value == value) return true;
	return false;
}

function RemoveItem(from, hidden,eventref)
{
	var index = from.selectedIndex;
	if (index == -1) return;
	from.options[index] = null;
	from.selectedIndex = -1;
	
	UpdateHiddenField(from, hidden);
	eval(eventref);
	
	//if (from.options.length > 0)
	//	from.selectedIndex = from.options.length - 1;
}

function UpdateHiddenField(list, hidden)
{
	hidden.value = "";
	for (var i = 0; i < list.length; i++)
		hidden.value += list.options[i].value + ",";
}
