function _FinalizeForm(form)
{
	var ret;
	var x = 0;
	var finalizeFunc = form.elements["_FinalizeFunctions"];

	if(typeof(finalizeFunc) != 'undefined')
	{
		var finalizeArr = new Array();
		
		if(finalizeFunc.length)
			finalizeArr = finalizeFunc;
		else
			finalizeArr[0] = finalizeFunc;
		
		for(x = 0; x < finalizeArr.length; x++)
		{
			eval('ret = ' + finalizeArr[x].value);
			if((typeof(ret) != 'undefined') && !ret)
				return false;
		}
	}
	
	return true;
}

function deleteOption(object, index)
{
	object.options[index] = null;
}

function addOptionSelect(object, text, value, selected)
{
	var defaultSelected = true;
	var optionName = new Option(text, value, defaultSelected, selected);
	object.options[object.length] = optionName;
}

function addOption(object, text, value)
{
	return addOptionSelect(object, text, value, true);
}

function copySelectedSelect(fromObject, toObject, limit, destSel)
{
	var i = 0;
	
	while(i < fromObject.options.length)
		if(fromObject.options[i].selected)
		{
			if(limit && toObject.options.length >= limit)
			{
				alert('A maximum of ' + limit + ' items can be selected.')
				return false
			}

			addOptionSelect(toObject, fromObject.options[i].text, fromObject.options[i].value, destSel);
			deleteOption(fromObject, i);
		}
		else
			i++;
	
	return false;
}

function copySelected(fromObject, toObject, limit)
{
	return copySelectedSelect(fromObject, toObject, limit, true);
}

function selectAllOptions(object)
{
	for(x = 0; x < object.length; x++)
		object.options[x].selected = true;
}

function deleteSelectedOptions(fromObject)
{
	for(var i=fromObject.options.length-1;i>-1;i--)
		if(fromObject.options[i].selected)
			deleteOption(fromObject, i);
}

function reorderSelectedOptions(list, delta)
{
	var total = list.options.length - 1;
	var oldItem;
	var i, stop;
	
	if(total < 1)
		return false;
	
	if(delta > 0)
	{
		i = total;
		stop = -1;
		delta = 1;
	}
	else
	{
		i = 0;
		stop = total + 1;
		delta = -1;
	}
	
	for(; i != stop; i -= delta)
		if(list.options[i].selected)
		{
			//Stop if we're trying delta push off the top or end of the list
			if(i + delta > total || i + delta < 0)
				break;
			
			//Swap option[i] with option[i + delta]
			oldItem = list.options[i + delta];
			list.options[i + delta] = new Option(list.options[i].text, list.options[i].value, 0, list.options[i].selected);
			list.options[i] = new Option(oldItem.text, oldItem.value, 0, oldItem.selected);
		}
	
	list.focus();
}

