/*
	http://livsey.org/experiments/multiselect/
	modified to work with the prototype framework
*/

function sortSelectBox(to)
{
	var o = new Array();
	var i;

	for (i=0; i<to.options.length; i++)
		o[o.length] = to.options[i];

	o = o.sort(
				function(a,b) 
				{ 
					var x = a.text.toLowerCase();
					var y = b.text.toLowerCase();

					if (x<y)
						return -1;

					if (x>y)
						return 1;

					return 0;
				}
			);

	for (i=0; i<o.length; i++)
		to.appendChild(o[i]);
}

function moveSelectedItems(from, to)
{
	var items = getSelectedItems(from);
	if (items.length==0)
		return;
	
	var i;
	for (i=0; i<items.length; i++)
		to.appendChild(items[i]);

	sortSelectBox(to);
	lbdAddCompanyMultis.setSubs();

}

function getSelectedItems(from)
{
	var i;
	var selected = new Array();
	for (i=0; i<from.options.length; i++)
	{
		if (from.options[i].selected)
			selected[selected.length] = from.options[i];
	}
	return selected;
}

function selectAll(select)
{
	select.focus();
	for (i=0; i<select.options.length; i++)
	{
		select.options[i].selected = true;
	}	
}

function deselectAll(select)
{
	select.focus();
	for (i=0; i<select.options.length; i++)
	{
		select.options[i].selected = false;
	}	
}


Event.observe(window, 'load', function()
{
	var selects = document.getElementsByClassName('multiselect');
	var i, selectContainer, select, selectCopy, 
		select2, add, addAll, remove, removeAll, 
		addSpan, addAllSpan, removeSpan, 
		removeAllSpan, imagesContainer, p, form;
		
	for (i=0; i<selects.length; i++)
	{
		select = selects[i];
		select.className = 'multiselectFrom';
		select2 = document.createElement('SELECT');
		select2.className = 'multiselectTo';
		select2.id = select.id+'2';
		select.to = select2;
		select2.to = select;

		select.ondblclick = function(){moveSelectedItems(this, this.to)}
		select2.ondblclick = function(){moveSelectedItems(this, this.to)}

		select2.name = select.name;
		select.name = '_'+select.name;

		selectContainer = document.createElement('DIV');
		selectContainer.className = 'multiselectWrapper';
		select.parentNode.replaceChild(selectContainer, select);
		imagesContainer = selectContainer.cloneNode(false);
		imagesContainer.className = 'multiselectLinkWrapper';
		selectContainer.appendChild(select);
	
		add = document.createElement('A');
		add.href = '#';
		add.className = 'multiselectAdd';
		addSpan = document.createElement('SPAN');
		addSpan.appendChild(document.createTextNode('add item'));
		add.appendChild(addSpan);
		add.fromSelect = select;
		add.toSelect = select2;
		add.onclick = function(){moveSelectedItems(this.fromSelect, this.toSelect);  return false; }

		remove = add.cloneNode(false);
		remove.className = 'multiselectRemove';
		removeSpan = document.createElement('SPAN');
		removeSpan.appendChild(document.createTextNode('remove item'));
		remove.appendChild(removeSpan);
		remove.fromSelect = select2;
		remove.toSelect = select;
		remove.onclick = function(){moveSelectedItems(this.fromSelect, this.toSelect); return false; }

		
		addAll = add.cloneNode(false);
		addAll.className = 'multiselectAddAll';
		addAllSpan = document.createElement('SPAN');
		addAllSpan.appendChild(document.createTextNode('add all items'));
		addAll.appendChild(addAllSpan);
		addAll.fromSelect = select;
		addAll.toSelect = select2;
		addAll.onclick = function(){selectAll(this.fromSelect); moveSelectedItems(this.fromSelect, this.toSelect);  return false; }

		removeAll = add.cloneNode(false);
		removeAll.className = 'multiselectRemoveAll';
		removeAllSpan = document.createElement('SPAN');
		removeAllSpan.appendChild(document.createTextNode('remove all items'));
		removeAll.appendChild(removeAllSpan);
		removeAll.fromSelect = select2;
		removeAll.toSelect = select;
		removeAll.onclick = function(){selectAll(this.fromSelect); moveSelectedItems(this.fromSelect, this.toSelect); return false; }
		
		imagesContainer.appendChild(add);
		imagesContainer.appendChild(addAll);
		imagesContainer.appendChild(remove);		
		imagesContainer.appendChild(removeAll);

		selectContainer.appendChild(imagesContainer);

		selectContainer.appendChild(select2);
		moveSelectedItems(select, select2);

		// find the form this is contained in
		p = select.parentNode;
		while (p.nodeName != 'FORM')
			p = p.parentNode;

		select2.focus();
		select2.multiple = true;

		form = p;
		if (!form.selects)
		{
			form.selects = new Array();
			form.onsubmit = function()
			{
				var x, y;
				for (x=0; x<this.selects.length; x++)
				{
					for (y=0; y<this.selects[x].options.length; y++)
						this.selects[x].options[y].selected = true;
				}
			}
		}
		form.selects[form.selects.length] = select2;	
	}
	scroll(0,0);
}, false);