
function ListSelectAll( a )
{
	ListClearFirst( a );

	for ( si = 0; si < a.options.length; si++ )
	{
		a.options[ si ].selected = true;
	}
}

function ListSortCompFunc( a, b )
{
	if ( a == null || b == null || a == b ) 
		return 0;

 	aa = a.text.toLowerCase();
	bb = b.text.toLowerCase();

	if ( aa > bb )
		return 1;

	return -1;
}

function ListSort( s )
{
	a = new Array();	

	for ( si = 0; si < s.options.length; si++ )
	{
		a[si] = new Option( s.options[si].text, s.options[si].value );
		if ( s.options[si].selected == true )
			a[si].selected = true;
	}

	a.sort( ListSortCompFunc );

	for ( si = 0; si < s.options.length; si++ )
		s.options[ si ] = a[ si ];
}

function ListClearAll( s )
{
	for ( si = s.options.length - 1; si >= 0; si-- )
	{
		s.options[ si ] = null;
	}
}

function ListClearFirst( s )
{
	if ( s.options.length > 0 )
		if ( s.options[ 0 ].text == '---------------------' )
			s.options[ 0 ] = null;		
}

function ListClear( s )
{
	if ( !s )
	{
		alert( "The ID of the list is missing." );
	}
	
	var element = document.getElementById( s );
	
	if ( !element )
	{
		alert( "I could not find the list with ID '" + s + "'." );
	}
	
	if ( element.options.length > 0 )
	{
		if ( element.options[ 0 ].text == '---------------------' )
		{
			element.options[ 0 ] = null;		
		}
	}
}

function ListAddOptionExplicit( f, s, v, k )
{
	f1 = document.forms[f];
	
	if ( f1 == null )
	{
		alert( "Bad form name." );
		return false;
	}
	
	s1 = f1.elements[s];
	if ( s1 == null )
	{
		alert( "Bad element name." );
		return false;
	}

	var o = new Option( v, k );
	s1.options[ s1.options.length ] = o;
}

function ListAddOptionsExplicit( f, s, v, k )
{
	f1 = document.forms[f];
	
	if ( f1 == null )
	{
		alert( "Bad form name." );
		return false;
	}
	
	s1 = f1.elements[s];
	if ( s1 == null )
	{
		alert( "Bad element name." );
		return false;
	}
	
	for ( si = 0; si < v.length; si++ )
	{
		var o = new Option( v[si], k[si] );
		s1.options[ s1.options.length ] = o;
	}
}


function ListAddOne( s1, s2, tosort )
{

	ListClearFirst( s1 );
	ListClearFirst( s2 );
	
	for ( si = 0; si < s1.options.length; si++ )
	{
		if ( s1.options[si].selected == true )
		{
			v = s1.options[ si ].value;
			t = s1.options[ si ].text;

			var opt = new Option( t, v );
			opt.selected = true;

			s2.options[ s2.options.length ] = opt;
		}	
	}
	
	for ( si = s1.options.length-1; si >= 0; si-- )
	{
		if ( s1.options[si].selected == true )
		{
			s1.options[ si ] = null;
		}	
	}

	if ( tosort != null )
	{
		ListSort( tosort );
	}
}

function ListAddAll( s1, s2, tosort )
{
	ListClearFirst( s1 );
	ListClearFirst( s2 );

	for ( si = 0; si < s1.options.length; si++ )
	{
		v = s1.options[ si ].value;
		t = s1.options[ si ].text;

		var opt = new Option( t, v );

		s2.options[ s2.options.length ] = opt;
	}
	
	for ( si = s1.options.length-1; si >= 0; si-- )
	{
		s1.options[ si ] = null;
	}

	if ( tosort != null )
		ListSort( s1 ) ;
}

function ListMoveUp( s1 )
{
	ListClearFirst( s1 );

	for ( si = 1; si < s1.options.length; si++ )
	{
		if ( s1.options[si].selected == true)
		{	
			if ( s1.options[si-1].selected != true )
			{
				v = s1.options[ si ].value;
				t = s1.options[ si ].text;
				var opt = new Option( t, v );
			
				v = s1.options[ si-1 ].value;
				t = s1.options[ si-1 ].text;
				var rep = new Option( t, v );

				s1.options[ si - 1 ] = opt;
				s1.options[ si ] = rep;
				
				s1.options[ si - 1 ].selected = true;
			}	
		}
	}
}

function ListMoveDown( s1 )
{
	ListClearFirst( s1 );

	for ( si = s1.options.length-2; si >= 0; si-- )
	{
		if ( s1.options[si].selected == true)
		{	
			if ( s1.options[si+1].selected != true )
			{
				v = s1.options[ si ].value;
				t = s1.options[ si ].text;
				var opt = new Option( t, v );
			
				v = s1.options[ si+1 ].value;
				t = s1.options[ si+1 ].text;
				var rep = new Option( t, v );

				s1.options[ si + 1 ] = opt;
				s1.options[ si ] = rep;
				
				s1.options[ si + 1 ].selected = true;
			}	
		}
	}
}

var nopopups = 0;

function RePopulateList( f, s, t, r, v )
{ 
	f1 = document.forms[f];
	
	if ( f1 == null )
	{
		alert( "Bad form name." );
		return false;
	}
	
	s1 = f1.elements[s];
	if ( s1 == null )
	{
		alert( "Bad element name." );
		return false;
	}
	
	if ( s1.options.length < 1 ) 
		return PopulateList( f, s, t, r, v );
		
	return true;
}

function PopulateList( f, s, t, r, v )
{ 
	f1 = document.forms[f];
	
	if ( f1 == null )
	{
		alert( "Bad form name." );
		return false;
	}
	
	s1 = f1.elements[s];
	if ( s1 == null )
	{
		alert( "Bad element name." );
		return false;
	}

	ListClearAll( s1 );
	
	nw = window.open( "http://glbt.unm.edu/alliance/getjsdata.php?f=" + f + 
		"&s=" + s + "&t=" + t + "&r=" + r + "&v= " + v, 
		"retdata",
		"height=1,width=1,directories=no,location=no,menubar=no," +
		"resizeable=no,scrollbars=no,status=no,toolbar=no,titlebar=no," +
		"dependent=yes" );
	
	if ( nw == null && nopopups == 0 )
	{
		alert( "If you have JavaScript popups blocked, please enable " +
			"them on this site for this feature to function." );
		nopopups = 1;	
			
		return false;
	}

	return true;
}
