// *******************************************************************************
// $Archive: /unitedutilities.web.id/public/jsfunctions/js_multilist_func.js $
// $Revision: 2 $
// $Modtime: 6/07/04 11:02 $
// $Author: Jon $
// *******************************************************************************

	
// -------------------------------------------------------------------
// 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 (obj.options==null) { 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);
		}
}

// -------------------------------------------------------------------
// selectAllOptions(select_object)
//  This function takes a select box and selects all options (in a 
//  multiple select object). This is used when passing values between
//  two select boxes. Select all options in the right box before 
//  submitting the form so the values will be sent to the server.
// -------------------------------------------------------------------
function selectAllOptions(psListName) 
{
	
	var loMultiList = document.getElementById(psListName)
	
	if (loMultiList)
	{
		for (var liLoop=0; liLoop<oMultiList.options.length; liLoop++) 
		{
			loMultiList.options[liLoop].selected = true;
		}
	}	
}
	
// -------------------------------------------------------------------
// moveSelectedOptions(select_object,select_object[,autosort(true/false)[,regex]])
//  This function moves options between select boxes. Works best with
//  multi-select boxes to create the common Windows control effect.
//  Passes all selected values from the first object to the second
//  object and re-sorts each box.
//  If a third argument of 'false' is passed, then the lists are not
//  sorted after the move.
//  If a fourth string argument is passed, this will function as a
//  Regular Expression to match against the TEXT or the options. If 
//  the text of an option matches the pattern, it will NOT be moved.
//  It will be treated as an unmoveable option.
//  You can also put this into the <SELECT> object as follows:
//    onDblClick="moveSelectedOptions(this,this.form.target)
//  This way, when the user double-clicks on a value in one box, it
//  will be transferred to the other (in browsers that support the 
//  onDblClick() event handler).
// -------------------------------------------------------------------
function moveSelectedOptions( psFromML, psToML ) 
{

	var loFromML = document.getElementById(psFromML)
	var loToML = document.getElementById(psToML)

	if ( (loFromML) && (loToML) )
	{
		// Move them over
		for (var liLoop=0; liLoop<loFromML.options.length; liLoop++) 
		{
			var loSelectedOption = loFromML.options[liLoop];
			if (loSelectedOption.selected) 
			{
				loToML.options[loToML.options.length] = new Option( loSelectedOption.text, loSelectedOption.value, false, false);
			}
		}

		// Delete them from original
		removeSelectedOptions(loFromML);

		if ((arguments.length<3) || (arguments[2]==true)) 
		{
			sortSelect(loFromML);
			sortSelect(loToML);
		}

		loFromML.selectedIndex = -1;
		loToML.selectedIndex = -1;
	}
}


// -------------------------------------------------------------------
// -------------------------------------------------------------------
function moveAllOptions( psFromML, psToML ) 
{

	var loFromML = document.getElementById(psFromML)
	var loToML = document.getElementById(psToML)
	
	if ( (loFromML) && (loToML) )
	{
		// Move them over
		for (var liLoop=0; liLoop<loFromML.options.length; liLoop++) 
		{
			var loSelectedOption = loFromML.options[liLoop];
			loToML.options[loToML.options.length] = new Option( loSelectedOption.text, loSelectedOption.value, false, false);
		}

		// Delete them from original
		removeAllOptions(loFromML);

		loFromML.selectedIndex = -1;
		loToML.selectedIndex = -1;
	}
}

// -------------------------------------------------------------------
// removeSelectedOptions(select_object)
//  Remove all selected options from a list
// -------------------------------------------------------------------
function removeSelectedOptions(loDelML) 
{ 
	// Delete them from original
	for (var liLoop=(loDelML.options.length-1); liLoop>=0; liLoop--) 
	{
		var loOptionDel = loDelML.options[liLoop];
		if (loOptionDel.selected) 
		{
			loDelML.options[liLoop] = null;
		}
	}
}	

function removeAllOptions(loDelML) 
{ 
	// Delete them from original
	for (var liLoop=(loDelML.options.length-1); liLoop>=0; liLoop--) 
	{
		loDelML.options[liLoop] = null;
	}
}	

// -------------------------------------------------------------------
// -------------------------------------------------------------------
function selectBoxOptions(psMultiSelect) 
{

	var loML = document.getElementById(psMultiSelect)
	if (loML)
	{
		if (loML.tagName=='SELECT')
		{
			for( var liLoop=0; liLoop<loML.options.length; liLoop++)
			{
				loML.options[liLoop].selected = true;
			}
			
			return true
		}
	
	}	


	return false;
} 
