var allChoices = null;
var count = 0;
var add = null;

var oForm = null;
var oSelect;
var oOptions;
var oSearch;

//////////////////////////////
// SET UP YOUR oForm OBJECTS //
//////////////////////////////
function setUp() {
	oForm = document.getElementById("myForm");
	oSelect = oForm.choices;
	oOptions = oSelect.options;
	oSearch = oForm.keywords;
	cacheAndSetUpObjects();
	return oForm;
}

///////////////////////////////////////////////////
// CACHING OBJECTS FOR FASTER INSERTS AND REMOVE //
///////////////////////////////////////////////////
function cacheAndSetUpObjects() {
	if (navigator.appName.indexOf("Netscape") >= 0)
		add = addNN;
	else
		add = addIE;
	count = oSelect.length;
	allChoices = new Array(count);
	for (i=0; i<count; i++)
		allChoices[i] = new Array(oOptions[i], i);
}

/////////////////////////
// MATCH IGNORING CASE //
/////////////////////////
function matchIgnoreCase(optionObj, sValue) {
	return (optionObj.text.toLowerCase().indexOf(sValue) >= 0);
}


///////////////////////////////////
// oSearch WITHIN CURRENT RESULTS //
///////////////////////////////////
function searchCurrent() {
	if( oForm == null )
	        setUp();
	var sValue  = oSearch.value.toLowerCase();
	for (i=0; i<oOptions.length; i++)
		if( !matchIgnoreCase(oOptions[i],sValue) )
		{
			oSelect.remove(i);
			i--;
		}
}

///////////////////////////////
// oSearch WITHIN ALL RESULTS //
///////////////////////////////
function searchAll() {
	if( oForm == null )
	        setUp();
var j = 0;
var sValue  = oSearch.value.toLowerCase();
for (i=0; i<count; i++)
	{
	if (matchIgnoreCase(allChoices[i][0], sValue))
		{
		if (oOptions[j] != allChoices[i][0])
			{
			add(oSelect, allChoices[i][0], j);
			}
		j++;
		}
	else
		{
		if (oOptions[j] == allChoices[i][0])
			{
			oSelect.remove(j);
			}
		}
	}
}


////////////////////
// LIST ALL ITEMS //
////////////////////
function viewAll() {
	if( oForm )
		for (i=0; i<count; i++)
		{
			if (oOptions[i] != allChoices[i][0])
				add(oSelect, allChoices[i][0], i);
		}
}



/////////////////////////////////////////////
// ADD OPTION OBJECT FOR INTERNET EXPLORER //
/////////////////////////////////////////////
function addIE(oSelectObj, optionObj, index) {
oSelectObj.add(optionObj, index);
}



//////////////////////////////////////////////
// ADD OPTION OBJECT FOR NETSCAPE NAVIGATOR //
//////////////////////////////////////////////
function addNN(oSelectObj, optionObj, index) {
oSelectObj.add(optionObj, oOptions[index]);
}



// End -->


