	
	function openChooser(rsItem, rsVal) {

		var lsURL = "cat_sales_chooser.asp?rsItem=" + rsItem + "&rsValue=" + rsVal;
		window.open(lsURL, "chooserwin", "width=300,height=300,scrollbars=no,resize=no", true);
	
	}

	
	function saveChosens(rsItem, rsVal) {
	
		var loWin = window.opener;
		//loWin.focus();
		loWin.document.frmMain["SALE_" + rsItem].value = rsVal;
		var loBase = loWin.document.frmMain["cboSALE_" + rsItem];
		loBase.options.length = 0;

		var loNew = document.frmMain["cboSALE_" + rsItem];
		var liLen = loNew.options.length;
		for (var j=0; j < liLen; j++) {
			loBase.options.length++;
			loBase.options[j].value = loNew.options[j].value;
			loBase.options[j].text = loNew.options[j].text;
		}
		
		window.close();
	}
	
	
	function addPixThmItem(roFrm) {
	
		var roTgt = roFrm["cboasPIXThmAlt"];
		var roList = roFrm["asPIXThmAlt"];
		var liW = roFrm["asPIXThmAlt_W"].value;
		var liH = roFrm["asPIXThmAlt_H"].value;
		
		if (liW == "" || isNaN(1 * liW)) return;
		if (liH == "" || isNaN(1 * liH)) return;
		
		//'---BUILD THE NEW OPTION
		lsValue = liW + "x" + liH;
		lsText = lsValue;
		
		addListItem(lsValue, lsText, roTgt, roList)
	}
	
	
	function addRegFeesItem(roFrm) {
		
		//'---DEFINE DOCUMENT OBJECTS
		var loSrc1 = roFrm["FEE_DESC"];
		var loSrc2 = roFrm["FEE_AMOUNT"];
		var loSrc3 = roFrm["FEE_ALLOW_QTY"];
		var roTgt = roFrm["cboRG_FEES"];
		var roList = roFrm["RG_FEES"];
				
		//'---BUILD THE VALUE AND TEXT FOR THE NEW OPTION
		var lsValue = loSrc1.value + "^" + loSrc2.value + "^" + Number(loSrc3.checked);
		var lsText = loSrc1.value + " ($" + loSrc2.value;
		if (loSrc3.checked) lsText += " each";
		lsText += ")";
		if (loSrc1.value == "") {
			alert("You must enter a Description for the fee");
			return;
		} else if (loSrc2.value=="") {
			alert("You must enter a fee amount");
			return;
		}
		
		addListItem(lsValue, lsText, roTgt, roList)
	}
	
	function addSaleItem(rsItem, roFrm) {
		
		//'---DEFINE DOCUMENT OBJECTS
		var loSrc1 = roFrm["SALE_" + rsItem + "_INCLUDE"];
		var loSrc2 = roFrm[rsItem];
		var roTgt = roFrm["cboSALE_" + rsItem];
		var roList = roFrm["SALE_" + rsItem];
		
		//'---BUILD THE VALUE AND TEXT FOR THE NEW OPTION
		var lsValue = loSrc2.value;
		var lsText = loSrc2.options[loSrc2.selectedIndex].text;
		if (loSrc1.value == "X") {
			lsValue = loSrc1.value + loSrc2.value;
			lsText = "NOT " + lsText;
		}
		
		addListItem(lsValue, lsText, roTgt, roList)
		
	}
	
	

	function addModItem(riMod, roForm) {
	
		var roTgt = roForm["cboMOD" + riMod];
		var roList = roForm["MOD" + riMod];
		var liAmt = roForm["MOD" + riMod + "_AMOUNT"].value;
		liAmt = liAmt.replace(",", "");
		if (liAmt == "" || isNaN(1 * liAmt)) liAmt = 0;
		var liEffect = roForm["MOD" + riMod + "_EFFECT"].value;
		
		//'---BUILD THE NEW OPTION
		var lsValue = roForm["MOD" + riMod + "_OPTION"].value;
		var lsText = lsValue;
		if (liEffect == -1) {
			lsValue = lsValue + " - $" + liAmt;
			lsText = lsValue;
			lsText = lsText.replace(" - $-", " - subtract $");
			lsText = lsText.replace(" - $0", " - no change");
			lsText = lsText.replace(" - $", " - add $");
		} else if (liEffect == 1) {
			lsValue = lsValue + " - $" + liAmt;
			lsText = lsValue.replace(" - $0", " - free");
		}
		

		addListItem(lsValue, lsText, roTgt, roList)
	
	}

	function addFiltersItem(roForm) {
	
		var roTgt = roForm["cboFILTERS"];
		var roList = roForm["FILTERS"];
		var liAmt = roForm["FILTERS_VALUE"].value;
		
		//'---BUILD THE NEW OPTION
		var lsValue = roForm["FILTERS_FIELD"].value;
		if (liAmt != "") lsValue = lsValue + "=" + liAmt;
		var lsText = lsValue;
		

		addListItemDlm(lsValue, lsText, roTgt, roList, "&")
	
	}

	function addOrderByItem(roForm) {
	
		var roTgt = roForm["cboORDERBY"];
		var roList = roForm["ORDERBY"];
		var liAmt = roForm["ORDERBY_SORT"].value;
		
		//'---BUILD THE NEW OPTION
		var lsValue = roForm["ORDERBY_FIELD"].value;
		if (liAmt != "") lsValue = lsValue + " " + liAmt;
		var lsText = lsValue;
		

		addListItem(lsValue, lsText, roTgt, roList)
	
	}


	
	function addListItem(rsValue, rsText, roTgt, roList) {
	
		//'---SET DEFAULTS
		var lsDelim = ",";
		var liLen = roTgt.options.length;
		
		//'---BUILD THE NEW OPTION
		var optNew = new Option();
		optNew.value = rsValue;
		optNew.text = rsText;
		
		//'---verify that the chosen option doesn't already appear in the list
		var lbExists = 0;
		for (var j=0; j < liLen; j++) {
			if (roTgt.options[j].value == optNew.value) lbExists = 1;
		}

		
		if (lbExists == 0 || liLen == 0) {
			//'---ADD TO THE LIST
			roTgt.options[liLen] = optNew;
			//'---ADD TO THE ACTUAL LIST VALUE FIELD
			if(roList.value.length > 0) roList.value = roList.value + lsDelim;
			roList.value = roList.value + optNew.value;
		}		
	
	}
	
	
	function removeListItem(roTgt, roList) {
	
		var lsDelim = ",";

		if (roTgt.options.length == 0) return;
		var liLen = roTgt.options.length;
		var liIndex = roTgt.options.selectedIndex;
		
		
		//'---REMOVE FROM LISTBOX
		if(liLen == 1) liIndex = 0;
		if (liIndex >= 0) roTgt.options[liIndex] = null;
		
		//'---REMOVE FROM HIDDEN FIELD
		var lavA = new Array();
		lavA = roList.value.split(",");
				
		lavA = removeRow(lavA, liIndex);

		roList.value = "";
		roList.value = roList.value.concat(lavA);
	}
	
	
	function removeRow(ravA, riIndex){
		riIndex = eval(riIndex);
		if (riIndex > 0) {
			var lavTest1 = ravA.slice(0,riIndex);
		} else {
			var lavTest1 = new Array();
		}
		var lavTest2 = ravA.slice(riIndex+1, ravA.length);
		ravA = lavTest1.concat(lavTest2);
		
		return ravA;
	}
	

	function addListItemDlm(rsValue, rsText, roTgt, roList, rsDlm) {
	
		//'---SET DEFAULTS
		var lsDelim = rsDlm;
		var liLen = roTgt.options.length;
		
		//'---BUILD THE NEW OPTION
		var optNew = new Option();
		optNew.value = rsValue;
		optNew.text = rsText;
		
		//'---verify that the chosen option doesn't already appear in the list
		var lbExists = 0;
		for (var j=0; j < liLen; j++) {
			if (roTgt.options[j].value == optNew.value) lbExists = 1;
		}
		
		if (lbExists == 0 || liLen == 0) {
			//'---ADD TO THE LIST
			roTgt.options[liLen] = optNew;
			//'---ADD TO THE ACTUAL LIST VALUE FIELD
			if(roList.value.length > 0) roList.value = roList.value + lsDelim;
			roList.value = roList.value + optNew.value;
		}		
	
	}
	
	
	function removeListItemDlm(roTgt, roList, rsDlm) {
	
		var lsDelim = rsDlm;

		if (roTgt.options.length == 0) return;
		var liLen = roTgt.options.length;
		var liIndex = roTgt.options.selectedIndex;
		
		
		//'---REMOVE FROM LISTBOX
		if(liLen == 1) liIndex = 0;
		if (liIndex >= 0) roTgt.options[liIndex] = null;
		
		//'---REMOVE FROM HIDDEN FIELD
		var lavA = new Array();
		lavA = roList.value.split(",");
				
		lavA = removeRow(lavA, liIndex);

		roList.value = "";
		roList.value = roList.value.concat(lavA);
	}
	
	
	function addMultiEditItem(rsFieldName, roFrm) {
	// Assumes an xml blob as the main value
	// Assumes each option value is an xml blob
		var roTgt = roFrm["cbo" + rsFieldName];
		var roList = roFrm[rsFieldName];
		
		//'---BUILD THE NEW OPTION
		var lsValue = "";
		var lsText = "";


		for (var ictr=1; ictr <= roFrm[rsFieldName + ":fieldcount"].value; ictr++) {
			if (ictr>>1) {
				lsText += " :: ";
			}
			lsValue += "<Field";
			lsValue += " Prompt=\"" + roFrm[rsFieldName + ":prompt" + ictr].value.replace(/\"/g, "&#34;") + "\"";
			lsValue += " Value=\"" + roFrm[rsFieldName + ":" + ictr].value.replace(/\"/g, "&#34;") + "\"";
			lsValue += "/>";
			lsText += roFrm[rsFieldName + ":" + ictr].value;
		}
		
		lsValue = "<Record Id=\"\">" + lsValue + "</Record>"
		
		addListItemMultiEdit(lsValue, lsText, roTgt, roList);
	}
	
	
	function addListItemMultiEdit(rsValue, rsText, roTgt, roList) {
	// Assumes an xml blob as the main value
	// Assumes each option value is an xml blob
	
		//'---SET DEFAULTS
		var liLen = roTgt.options.length;
		
		//'---BUILD THE NEW OPTION
		var optNew = new Option();
		optNew.value = rsValue;
		optNew.text = rsText;
		
		//'---verify that the chosen option doesn't already appear in the list
		var lbExists = 0;
		for (var j=0; j < liLen; j++) {
			if (roTgt.options[j].value == optNew.value) lbExists = 1;
		}

		
		if (lbExists == 0 || liLen == 0) {
			//'---ADD TO THE LIST
			roTgt.options[liLen] = optNew;
			//'---ADD TO THE ACTUAL LIST VALUE FIELD
			roList.value = roList.value.replace(/<\/?MultiEdit>/g, "");
			roList.value = "<MultiEdit>" + roList.value + optNew.value + "</MultiEdit>";
		}		
	
	}


	function removeListItemMultiEdit(roTgt, roList) {
	// Assumes an xml blob as the main value
	// Assumes each option value is an xml blob

		if (roTgt.options.length == 0) return;
		var liLen = roTgt.options.length;
		var liIndex = roTgt.options.selectedIndex;
		var lsTag = roTgt.options[liIndex].value;
		
		//'---REMOVE FROM LISTBOX
		if(liLen == 1) liIndex = 0;
		if (liIndex >= 0) roTgt.options[liIndex] = null;
		
		//'---REMOVE FROM HIDDEN FIELD
		roList.value = roList.value.replace(lsTag, "");
	}

