function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

function getSelected(obj) {
	for(i = 0; i < obj.length; i++) {
		if(obj[i].selected) {
			return obj[i];
		}
	}
	return null;
}

// Moves a country, but it doesn't sort the list.
function moveCountry(selFrom, selTo, inputList, country)
{
	selFrom 	= $(selFrom);
	selTo 		= $(selTo);
	inputList	= $(inputList);
	
	if(selTo.options.length == 1 && selTo[0].value == '') {
		selTo.removeChild(selTo[0]);
	}

	selTo.appendChild( country );
	if(!hasOptions(selFrom)) {
		var selAll = document.createElement('option');
		selAll.value = '';
		selAll.innerHTML = 'All';
		selAll.disabled = true;
		selFrom.appendChild(selAll);
	}
	return true;	
}

// Moves the currently selected country and sorts the list
function moveSelectedCountry(selFrom, selTo, inputList) {
	selFrom 	= $(selFrom);
	selTo 		= $(selTo);
	inputList	= $(inputList);
	
	if(selectedItem = getSelected(selFrom)) {
		moveCountry(selFrom, selTo, inputList, selectedItem);
		
		sortSelect(selTo);
		updateInputList(inputList, selectedItem);

		return true;
	}
	else
		return false;
}

function moveAllCountries(selFrom, selTo, inputList) {
	selFrom 	= $(selFrom);
	selTo 		= $(selTo);
	inputList	= $(inputList);

	selectedItem = getSelected(selFrom);
	
	while (hasOptions(selFrom) && selFrom[0].value != '' )
	{
		updateInputList(inputList, selFrom[0]);
		moveCountry(selFrom, selTo, inputList, selFrom[0]);
	}
	sortSelect(selTo);
}

function updateInputList(inputList, selectedItem) {
	var removed = false;
	var countries = inputList.value.split(" ");
	for(i = 0; i < countries.length; i++) {
		if(selectedItem != null && countries[i] == selectedItem.value) {
			countries.splice(i,1);
			removed = true;
		}
	}
	if(removed == false && selectedItem != null) {

		countries.push(selectedItem.value);
	}
	inputList.value = countries.join(" ");
}

// -------------------------------------------------------------------
// hasOptions(obj)
//  Utility function to determine if a select object has an options array
// -------------------------------------------------------------------
function hasOptions(obj) {
	if (obj!=null && obj.options.length > 0) { return true; }
	return false;
}

// -------------------------------------------------------------------
// sortSelect(select_object)
//   Pass this function a SELECT object and the options will be sorted
//   by their text (display) values
// -------------------------------------------------------------------
function sortSelect(obj) {
	var o = new Array();
	if (!hasOptions(obj)) { return; }
	for (var i=0; i<obj.options.length; i++) {
		o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;
		}
	if (o.length==0) { return; }
	o = o.sort( 
		function(a,b) { 
			if ((a.text+"") < (b.text+"")) { return -1; }
			if ((a.text+"") > (b.text+"")) { return 1; }
			return 0;
			} 
		);

	for (var i=0; i<o.length; i++) {
		obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
		}
	}


