/*
* selLib.js
*
* JavaScript Library for working with options in selection boxes
* Compatible with Internet Explorer and Netscape Navigator versions 4 or greater
*
* selClearMost(sel [, value1, value2, ... valueX])
*	removes all items from select list "sel" except for unique entries with values "value1-X".
*	If you require two or more options with the same value to be saved, you must enter the
*	argument for each option value in the list.
*
* selMoveSelected(selFrom, selTo[, blnSort])
*	moves selected options from selFrom to selTo.  Optional boolean - pass false to turn off sorting.
*  
* selRemoveSelected(sel)
*	removes selected options from sel.
*
* selAddSelected(selFrom, selTo[, blnUnique, blnSort])
*	adds selected options from selFrom to selTo, then deselects item in selFrom and selects it in selTo.
*	Optional boolean argument to disable duplicate verification.  If false, the item will be added with
*	no verification.  If true (default), the function will ensure that the same text and value pair
*	doesn't exist in selTo.  If it does, the function will alert the user that this cannot be done.
*	If multiple selections have been made, the non-duplicate items will be transferred.
*	Optional boolean - pass false to turn off sorting.
*
* selQuickSave(selSelect, selChange, arrStorage)
*	saves options from selChange to array arrStorage indexed at the selected index of selSelect
*
* selQuickChange(selSelect, selChange, arrStorage)
*	loads options into selChange from array arrStorage indexed at the selected index of selSelect
*
* selSort(sel)
*	simple sort of list ascending alphabetically.
*
* selUnSelect(sel[, value1, value2, ..., valueX])
*	deselects all entries in list sel by default.  If additional arguments are passed, the function will
*	deselect only the list entries whose values are specified in the list.
*
* selSelect(sel[, value1, value2, ..., valueX])
*	selects all entries in list sel by default.  If additional arguments are passed, the function will
*	select only the list entries whose values are specified in the list.
*
* selMoveInsideList(sel, direction)
*	moves items within the list sel direction 'up' or 'down'.  Function does not wrap items around
*	to other side of list, but it does support multiple selected items.
*
* selAddAnyItem(sel, text, value[, blnUniqueText, blnUniqueValue, blnSort, blnAlert])
*	adds text/value pair from argument list to sel.  Optional boolean arguments to disable
*	duplicate verification.  If both are false, the item will be added with no verification.
*	If blnUniqueText is true (default), the function will ensure that the same text
*	doesn't exist in sel.  If it does, the function will alert the user that this cannot be done.
*	If blnUniqueValue is true, the function will ensure that the same value doesn't exist in sel.
*	If both blnUnique's are true, the function will compare name/value pairs.
*	Optional boolean blnSort - pass false to turn off sorting.
*	Optional boolean blnAlert - false will turn off the alert message
*
* selFindItem(sel, strEncaser)
*	finds first selected item text enclosed in strEncaser start and terminator and returns it.
*
* 12/18/00 JH
*/

function selClearMost(sel) {
	var selOptions = new Array();
	if(arguments.length > 1) {
		for(var i=0; i<arguments.length-1; i++) {
			for(var j=0; j<sel.length; j++) {
				if(sel.options[j].value==arguments[i+1]) {
					selOptions[i] = new Option(sel.options[j].text, sel.options[j].value, false, false);
	}	}	}	}
	sel.length=0;
	if(selOptions.length>0) {
		for(var i=0; i<selOptions.length; i++) {
			sel.options[i] = selOptions[i];
			sel.options[i].selected=false;
	}	}
}

function selMoveSelected(selFrom, selTo) {
	var selOptions = new Array();
	var blnSort=true;
	if(arguments.length > 2){
		for(var i=0; i<arguments.length; i++){
			switch(i){
				case 2 :
					if(arguments[i]==false){blnSort=false;}
					break;
		}	}
	}
	for(var i=0; i<selFrom.length; i++) {
		if(selFrom.options[i].selected) {
			selTo.options[selTo.options.length]=new Option(selFrom.options[i].text, selFrom.options[i].value, false, false);
			selTo.options[selTo.options.length-1].selected=true;
		} else {
			selOptions[selOptions.length]=new Option(selFrom.options[i].text, selFrom.options[i].value, false, false);
	}	}
	if(blnSort){selSort(selTo);}
	selFrom.length=0;
	if(selOptions.length>0) {
		for(var i=0; i<selOptions.length; i++) {
			selFrom.options[selFrom.length] = selOptions[i];
			selFrom.options[selFrom.length-1].selected=false;
	}	}
}

function selRemoveSelected(sel) {
	var selOptions = new Array();
	for(var i=0; i<sel.length; i++) {
		if(!sel.options[i].selected) {
			selOptions[selOptions.length] = new Option(sel.options[i].text, sel.options[i].value, false, false);
	}	}
	sel.length=0;
	for(var i=0; i<selOptions.length; i++) {
		sel.options[sel.length]=selOptions[i];
		sel.options[i].selected=false;
	}
}

function selAddSelected(selFrom, selTo) {
	var blnUnique=true;
	var arrDup=new Array();
	var blnSort=true;
	if(arguments.length > 2){
		for(var i=0; i<arguments.length; i++){
			switch(i){
				case 2 :
					if(arguments[i]==false){blnUnique=false;}
					break;
				case 3 :
					if(arguments[i]==false){blnSort=false;}
					break;
		}	}
	}
	for(var i=0; i<selFrom.length; i++) {
		if(selFrom.options[i].selected) {
			var blnError=false;
			selFrom.options[i].selected=false;
			if(blnUnique){
				for(var j=0; j<selTo.length; j++){
					if(selTo.options[j].text==selFrom.options[i].text && selTo.options[j].value==selFrom.options[i].value){
						arrDup[arrDup.length]=selTo.options[j].text;
						blnError=true;
						break;
			}	}	}
			if(!blnError){
				selTo.options[selTo.options.length]=new Option(selFrom.options[i].text, selFrom.options[i].value, false, false);
				selTo.options[selTo.options.length-1].selected=true;
	}	}	}
	if(blnSort){selSort(selTo);}
	if(arrDup.length>0){
		var strError = "Because they were already in the destination list,\nthe following items were not transfered :\n\n";
		for(var i=0; i<arrDup.length; i++){
			strError += "\t" + arrDup[i];
			if(i<arrDup.length-1){strError+="\n";}
		}
		alert(strError);
	}
}

function selQuickSave(selSelect, selChange, arrStorage) {
	for (var i=0; i<selSelect.length; i++) {
		if(selSelect.options[i].selected) {break;}
	}
	arrStorage[i].length=0;
	for (var j=0; j<selChange.length; j++) {
		arrStorage[i][j]=new Option(selChange.options[j].text, selChange.options[j].value, false, false);
	}
}

function selQuickChange(selSelect, selChange, arrStorage) {
	for(var i=0; i<selSelect.length; i++) {
		if(selSelect.options[i].selected) {break;}
	}
	if(i<selSelect.length){
		selChange.length=0;
		for(var j=0; j<arrStorage[i].length; j++) {
			selChange.options[j]=new Option(arrStorage[i][j].text, arrStorage[i][j].value, false, false);
			selChange.options[j].selected=false;
	}	}
}

function selSort(sel){
	for(var i=0; i<sel.length-1; i++){
		for(var j=i+1; j<sel.length; j++){
			if(sel.options[j].text.charCodeAt(0) < sel.options[i].text.charCodeAt(0)){
				var optHold = new Option(sel.options[j].text, sel.options[j].value, false, false);
				var blnSel=sel.options[j].selected;
				sel.options[j].text = sel.options[i].text;
				sel.options[j].value = sel.options[i].value;
				sel.options[j].selected = sel.options[i].selected;
				sel.options[i].text = optHold.text;
				sel.options[i].value = optHold.value;
				sel.options[i].selected = blnSel;
	}	}	}
}

function selUnSelect(sel){
	if(arguments.length > 1) {
		for(var i=0; i<arguments.length-1; i++) {
			for(var j=0; j<sel.length; j++) {
				if(sel.options[j].value==arguments[i+1]) {
					sel.options[j].selected = false;
		}	}	}
	} else {
		for(var i=0; i<sel.length; i++){sel.options[i].selected=false;}
	}
}

function selSelect(sel){
	if(arguments.length > 1) {
		for(var i=0; i<arguments.length-1; i++) {
			for(var j=0; j<sel.length; j++) {
				if(sel.options[j].value==arguments[i+1]) {
					sel.options[j].selected = true;
		}	}	}
	} else {
		for(var i=0; i<sel.length; i++){sel.options[i].selected=true;}
	}
}

function selMoveInsideList(sel, direction){
	var optSave;
	switch(direction.substr(0,1)){
		case "u" :
			var k=0;
			var inc=1;
			break;
		case "d" :
			var k=sel.length-1;
			var inc=-1;
			break;
	}
	for(var i=0; i<sel.length; i++){
		if(sel.options[k].selected){
			var j=k-inc;
			if(j<0){j=0;}
			if(j>=sel.length){j=sel.length-1;}
			if(!sel.options[j].selected){
				optSave = new Option(sel.options[k].text, sel.options[k].value, false, false);
				optSave.selected=sel.options[k].selected;
				sel.options[k].text=sel.options[j].text;
				sel.options[k].value=sel.options[j].value;
				sel.options[k].selected=sel.options[j].selected;
				sel.options[j].text=optSave.text;
				sel.options[j].value=optSave.value;
				sel.options[j].selected=optSave.selected;
			}
			k+=inc;
		} else {k+=inc;}
	}
}

function selQuickSubmitForm(theForm, theAction, arrStorage){
	theForm.action=theAction;
	for(var i=0; i<arrStorage.length; i++){
		var theList="";
		for(var j=0; j<arrStorage[i].length; j++){
			if(arrStorage[i][j].value!="sizer"){
				if(theList.length>0){theList+=",";}
				theList+=arrStorage[i][j].value;
		}	}
		eval("theForm.category"+(i+1)+".value=theList\;");
	}
	if(eval("_CF_check"+theForm.name+"(theForm)")){
		theForm.submit();
	}
}

function selAddAnyItem(sel, text, value){
	var blnUniqueValue=false;
	var blnUniqueText=true;
	var blnAlert=true;
	var arrDup=new Array();
	var blnSort=true;
	if(arguments.length > 3){
		for(var i=0; i<arguments.length; i++){
			switch(i){
				case 3 :
					if(arguments[i]==false){blnUniqueText=false;}
					break;
				case 4 :
					if(arguments[i]==true){blnUniqueValue=true;}
					break;
				case 5 :
					if(arguments[i]==false){blnSort=false;}
					break;
				case 6 :
					if(arguments[i]==false){blnAlert=false;}
					break;
		}	}
	}
	var blnError=false;
	if(blnUniqueValue && !blnUniqueText){
		for(var j=0; j<sel.length; j++){
			if(sel.options[j].value==value){
				arrDup[arrDup.length]=sel.options[j].value;
				blnError=true;
				var txtUnique = "value was ";
				break;
	}	}	}
	if(blnUniqueText && !blnUniqueValue){
		for(var j=0; j<sel.length; j++){
			if(sel.options[j].text==text){
				arrDup[arrDup.length]=sel.options[j].text;
				blnError=true;
				var txtUnique = "text was ";
				break;
	}	}	}
	if(blnUniqueText && blnUniqueValue){
		for(var j=0; j<sel.length; j++){
			if(sel.options[j].text==text && sel.options[j].value==value){
				arrDup[arrDup.length]=sel.options[j].value + " , " + sel.options[j].text;
				blnError=true;
				var txtUnique = "value and text were ";
				break;
	}	}	}
	if(!blnError){
		sel.options[sel.options.length]=new Option(text, value, false, false);
		sel.options[sel.options.length-1].selected=false;
	}
	if(blnSort){selSort(sel);}
	if(arrDup.length>0){
		var strError = "Because the " + txtUnique + "already in the destination list,\nthe entry was not added :\n\n";
		for(var i=0; i<arrDup.length; i++){
			strError += "\t" + arrDup[i];
			if(i<arrDup.length-1){strError+="\n";}
		}
		if(blnAlert){alert(strError);}else{return false;}
	}
}

function selFindItem(text, strEncaser){
	strLeft=strEncaser.substr(0,strEncaser.length/2);
	strRight=strEncaser.substr(strEncaser.length/2, strEncaser.length/2);
	var re = new RegExp(strLeft+"(.*)"+strRight, "");
	var arrMatch = text.match(re);
	if(arrMatch!=null){return(arrMatch[1]);}else{return("");}
}

function selCheckForOne(sel){
	var multi=0;
	for(var i=0; i<sel.length; i++){if(sel.options[i].selected){multi+=1;selSelect=i;}}
	if(multi==0 || multi>1){return -1;}else return selSelect;
}	