	/************************************************************************************
	*** START GLOBAL VARIABLES **********************************************************
	************************************************************************************/
	
	/* Browser Checks */
	var ns4 = document.layers;
	var op5 = (navigator.userAgent.indexOf("Opera 5")!=-1) ||(navigator.userAgent.indexOf("Opera/5")!=-1);
	var op6 = (navigator.userAgent.indexOf("Opera 6")!=-1) ||(navigator.userAgent.indexOf("Opera/6")!=-1);
	var agt = navigator.userAgent.toLowerCase();
	var mac = (agt.indexOf("mac")!=-1);
	var ie = (agt.indexOf("msie") != -1); 
	var mac_ie = mac && ie;

	var lightbox_pageScrollX;
	var lightbox_pageScrollY;
	var lightbox_bIsOpen;

	// XMLHttpRequest Object
	var http = createRequestObject();

	/************************************************************************************
	*** END GLOBAL VARIABLES ************************************************************
	************************************************************************************/	

	/************************************************************************************
	*** START LIGHTBOX SCRIPTS **********************************************************
	*************************************************************************************/

	function lightbox_OpenFind(windowTitle, windowText, sql_id, sql_version, sql_revision, cat_id, db_extra, filter, primary_key, order_by, columns, search_columns, fields, closeFunction, css, draw_styles, classic_style, querystring, popwidth, popheight, isMgrFront, blankload, selectpop, distinctq, prepopvalue) {
		if (document.documentElement && document.documentElement.scrollTop) {
			// IE6 +4.01
			lightbox_pageScrollY = document.documentElement.scrollTop;
			lightbox_pageScrollX = document.documentElement.scrollLeft;
		} else if (document.body) {
			// IE5 or DTD 3.2
			lightbox_pageScrollY = document.body.scrollTop;
			lightbox_pageScrollX = document.body.scrollLeft;
		}
		//lightbox_pageScrollX = document.body.scrollLeft;
		//lightbox_pageScrollY = document.body.scrollTop;
		lightbox_bIsOpen = true;

		document.getElementById('lightbox').style.width=popwidth + 'px';
		document.getElementById('lightbox').style.height=popheight + 'px';

		document.getElementById('lightbox_lostfocus').style.display = 'block';
		document.getElementById('lightbox').style.display = 'block';

		lightbox_Position();

		var mgrPrefix = '';

		if (isMgrFront==true){
			mgrPrefix = 'mgr_';
		}

		var bLoadBlank = 0;

		if (blankload==true){
			bLoadBlank = 1;
		}

		var bUseDistinct = 0;

		if (distinctq==true){
			bUseDistinct = 1;
		}

		document.getElementById('lightbox_search_results').innerHTML =
			'<iframe scrolling="yes" frameborder="0" width="100%" height="100%" marginheight="5" marginwidth="5" src="' + 
				'i_i_' + mgrPrefix + 'find_data_lightbox.asp' +
				'?sql_id=' + sql_id + 
				'&version='	+ sql_version +
				'&revision=' + sql_revision +
				'&cat_id=' + cat_id +
				'&extrafields=' + URLEncode(db_extra) +
				'&filter=' + filter +
				'&orderby=' + order_by +
				'&cols=' + columns +
				'&searchcols=' + search_columns +
				'&fields=' + fields +
				'&func=' + URLEncode(closeFunction) +
				'&css=' + URLEncode(css) +
				'&drawstyles=' + draw_styles +
				'&classicstyle=' + classic_style +
				'&primary=' + primary_key +
				'&loadblank=' + bLoadBlank +
				'&selectpop=' + URLEncode(selectpop) +
				'&usedistinct=' + bUseDistinct +
				'&prepop=' + URLEncode(prepopvalue) +
				querystring +
			'"></iframe>';
		document.getElementById('lightbox_search_section').style.display='none';
		document.getElementById('lightbox_header').innerHTML=windowTitle;
		document.getElementById('lightbox_desc').innerHTML=windowText;

		// Fix IE for DTD 4.0

		if (ie && document.documentElement && document.compatMode == 'CSS1Compat') {
			document.getElementById('lightbox_search_results_container').style.height = (document.getElementById('lightbox_search_results_container').offsetHeight - 1 - (document.getElementById("lightbox_header").offsetHeight + document.getElementById("lightbox_desc").offsetHeight + document.getElementById("lightbox_search_section").offsetHeight)) + 'px';
		}		

		document.getElementById('lightbox_lostfocus').style.visibility = 'visible';
		document.getElementById('lightbox').style.visibility = 'visible';

	}	
	
	function lightbox_LostFocus(){
		lightbox_bIsOpen = false;
		document.getElementById('lightbox_lostfocus').style.visibility='hidden';
		document.getElementById('lightbox').style.visibility='hidden';
		document.getElementById('lightbox_lostfocus').style.display='none';
		document.getElementById('lightbox').style.display='none';
	}

	function lightbox_setFindValue(values, fields, types, closeFunction) {
		lightbox_LostFocus();
		aFields = fields.split('~');
		aValues = values.split('~');
		aTypes = types.split('~');
		for (var i=0; i<aFields.length; i++){
			if (aFields[i] != '') {
				document.getElementById(aFields[i]).value = aValues[i];
			}
		}

		if (trim(closeFunction) != '') {
			window.setTimeout(closeFunction , 1);
		}
	}

	function lightbox_GetWindowHeight() {
		var windowHeight = 0;
		if (typeof(window.innerHeight) == 'number') {
			windowHeight = window.innerHeight;
		}
		else {
			if (document.documentElement && document.documentElement.clientHeight) {
				windowHeight = document.documentElement.clientHeight;
			}
			else {
				if (document.body && document.body.clientHeight) {
					windowHeight = document.body.clientHeight;
				}
			}
		}
		return windowHeight;
	}
	function lightbox_GetWindowWidth() {
		var windowWidth = 0;
		if (typeof(window.innerWidth) == 'number') {
			windowWidth = window.innerWidth;
		}
		else {
			if (document.documentElement && document.documentElement.clientWidth) {
				windowWidth = document.documentElement.clientWidth;
			}
			else {
				if (document.body && document.body.clientWidth) {
					windowWidth = document.body.clientWidth;
				}
			}
		}
		return windowWidth;
	}
	
	function lightbox_Position() {
		if (document.getElementById) {
			var windowHeight = lightbox_GetWindowHeight();
			var windowWidth = lightbox_GetWindowWidth();

			var contentElement = document.getElementById('lightbox');
			var contentHeight = contentElement.offsetHeight;
			var contentWidth = contentElement.offsetWidth;
			var scrollTop;
			var scrollLeft;
			if (document.documentElement && document.documentElement.scrollTop) {
				// IE6 +4.01
				scrollTop = document.documentElement.scrollTop;
				scrollLeft = document.documentElement.scrollLeft;
			} else if (document.body) {
				// IE5 or DTD 3.2
				scrollTop = document.body.scrollTop;
				scrollLeft = document.body.scrollLeft;
			}

			document.getElementById('lightbox').style.top = ((windowHeight / 2) - (contentHeight / 2)) + scrollTop + 'px';
			document.getElementById('lightbox').style.left = ((windowWidth / 2) - (contentWidth / 2)) + scrollLeft + 'px';
			document.getElementById('lightbox_lostfocus').style.width = windowWidth + 'px'
			document.getElementById('lightbox_lostfocus').style.height = windowHeight + 'px'
			
			// Why was this commented out? (Uncommented by Golus - Jan 5, 2008)
			document.getElementById('lightbox_lostfocus').style.top = scrollTop + 'px';
			document.getElementById('lightbox_lostfocus').style.left = scrollLeft + 'px';
			

		}
	}
	window.onload = function() {
		lightbox_Position();
	}
	window.onresize = function() {
		lightbox_Position();
	}

	window.onscroll = function() {
		if (lightbox_bIsOpen) {
			if (document.documentElement && document.documentElement.scrollTop) {
				// IE6 +4.01
				document.documentElement.scrollTop = lightbox_pageScrollY;
				document.documentElement.scrollLeft = lightbox_pageScrollX;
			} else if (document.body) {
				// IE5 or DTD 3.2
				document.body.scrollTop = lightbox_pageScrollY;
				document.body.scrollLeft = lightbox_pageScrollX;
			}
			
			lightbox_Position();
		} else {

		}

	}

	/************************************************************************************
	*** END LIGHTBOX SCRIPTS ************************************************************
	*************************************************************************************/
	
	/************************************************************************************
	*** START MULTI SELECT SCRIPTS ******************************************************
	*************************************************************************************/

	function AddMSBOptions(theSel, theText, theValue){
	  var newOpt = new Option(theText, theValue);
	  var selLength = document.getElementById(theSel).length;
	  document.getElementById(theSel).options[selLength] = newOpt;
	}

	function DeleteMSBOptions(theSel, theIndex){
	  var selLength = document.getElementById(theSel).length;
	  if(selLength>0)
	  {
		document.getElementById(theSel).options[theIndex] = null;
	  }
	}

	function MoveMSBOptions(theSelFrom, theSelTo, box, strSpacer, bUsePos){

	  var selLength = document.getElementById(theSelFrom).length;
	  var selectedText = new Array();
	  var selectedValues = new Array();
	  var selectedCount = 0;

	  var i;

	  // Find the selected Options in reverse order
	  // and delete them from the 'from' Select.
	  for(i=selLength-1; i>=0; i--)
	  {
		if(document.getElementById(theSelFrom).options[i].selected)
		{
		  selectedText[selectedCount] = document.getElementById(theSelFrom).options[i].text;
		  selectedValues[selectedCount] = document.getElementById(theSelFrom).options[i].value;
		  DeleteMSBOptions(theSelFrom, i);
		  selectedCount++;
		}
	  }

	  // Add the selected text/values in reverse order.
	  // This will add the Options to the 'to' Select
	  // in the same order as they were in the 'from' Select.
	  for(i=selectedCount-1; i>=0; i--)
	  {
		AddMSBOptions(theSelTo, selectedText[i], selectedValues[i]);
	  }
		MSBDuplicator(box, strSpacer, bUsePos);

	}


	function MSBSwap(option1, option2){
		var holdval;
		holdval				= option1.value;
		option1.value		= option2.value;
		option2.value		= holdval;
		holdval				= option1.text;
		option1.text		= option2.text;
		option2.text		= holdval;
		holdval				= option1.selected;
		option1.selected	= option2.selected;
		option2.selected	= holdval;
	}

	function MoveMSBItemUp(box, strSpacer, bUsePos)  {
		//find the index of the item selected
		var len = document.getElementById(box + '_visible').options.length;
		if(len==0) return false;
		if (document.getElementById(box + '_visible').options[0].selected) { return true; }
		for(var i=1; i<len; i++) {
			if (document.getElementById(box + '_visible').options[i].selected) {
				MSBSwap(document.getElementById(box + '_visible').options[i], document.getElementById(box + '_visible').options[i-1]);
			}
		}

		MSBDuplicator(box, strSpacer, bUsePos);
		return true;
	}

	function MoveMSBItemDown(box, strSpacer, bUsePos)  {
		//find the index of the item selected
		var len = document.getElementById(box + '_visible').options.length;
		if(len==0) return false;
		len -= 1;
		if (document.getElementById(box + '_visible').options[len].selected) { return true; }

		for(var i=len-1; i>=0; i--) {
			if (document.getElementById(box + '_visible').options[i].selected) {
				MSBSwap(document.getElementById(box + '_visible').options[i], document.getElementById(box + '_visible').options[i+1]);
			}
		}

		MSBDuplicator(box, strSpacer, bUsePos);
		return true;
	}

	function MSBDuplicator(field, strSpacer, bUsePos){
	  var len = document.getElementById(field + '_visible').length;

	  var i;
	  var strValue = "";
	  var bFirst = true;

	  for(i=0; i<len; i++) {
		if (!bFirst) {
		  strValue = strValue + strSpacer
		}
		bFirst = false;
		strValue = strValue + document.getElementById(field + '_visible').options[i].value;
		if (bUsePos=='True'){
			strValue = strValue + '|' + i;
		}
	  }
	  document.getElementById(field).value = strValue;
	}

	/************************************************************************************
	*** END MULTI SELECT SCRIPTS ********************************************************
	*************************************************************************************/


	/************************************************************************************
	*** START MULTI INPUT SCRIPTS *******************************************************
	*************************************************************************************/

		function MIBuildAnswer(vMI){
			var aMIFields = document.getElementById(vMI + '_fields').value.split('|');
			var strAString = document.getElementById(vMI + '_answer_string').value;
			var strDString = document.getElementById(vMI + '_display_string').value;
			var bUseXML = document.getElementById(vMI + '_use_xml').value;
			var strMIValID = document.getElementById(vMI + '_validation_key').value;
			var iEditMode = document.getElementById(vMI + '_edit_mode').value;

			var strFieldType = '';
			var strFieldValue = '';
			
			if (eval('formValidation' + strMIValID).check()){

				for (iF = 0; iF < aMIFields.length; iF++){
					strFieldType = '';
					strFieldValue = '';

					strFieldType = document.getElementById(vMI + '_' + aMIFields[iF] + '_type').value.toLowerCase();
					
					switch (strFieldType){
						case 'radio': case 'radioinline':
							strFieldValue = MIGetCheckedValue(vMI + '_' + aMIFields[iF], document.getElementById(vMI + '_form_name').value);
							MIResetCheckedValue(vMI + '_' + aMIFields[iF], document.getElementById(vMI + '_form_name').value);
							break;
						case 'checkbox':
							for (iCheck = 0; iCheck < document.getElementsByName(vMI + '_' + aMIFields[iF]).length; iCheck++){
								if (document.getElementById(vMI + '_' + aMIFields[iF] + '_' + iCheck).checked==true){
									document.getElementById(vMI + '_' + aMIFields[iF] + '_' + iCheck).checked==false;

									if (strFieldValue==''){
										strFieldValue = strFieldValue + document.getElementById(vMI + '_' + aMIFields[iF] + '_' + iCheck).value;
									} else {
										strFieldValue = strFieldValue + ', ' + document.getElementById(vMI + '_' + aMIFields[iF] + '_' + iCheck).value;
									}
								}
							}
							break;
						case 'select': case 'select-one':
							strFieldValue = document.getElementById(vMI + '_' + aMIFields[iF]).value;

							if (document.getElementById(vMI + '_' + aMIFields[iF]).options.length > 0){
								document.getElementById(vMI + '_' + aMIFields[iF]).options[0].selected = true;
							}
							break;
						default:
							strFieldValue = document.getElementById(vMI + '_' + aMIFields[iF]).value;
							document.getElementById(vMI + '_' + aMIFields[iF]).value = '';
							break;
					}

					if (bUseXML=='true'){
						strAString = strAString + '<' + aMIFields[iF] + '>' + strFieldValue + '</' + aMIFields[iF] + '>';
					} else {
						strAString = strAString.replace(new RegExp('<=' + aMIFields[iF] + '=>', 'g'), strFieldValue);
					}

					strDString = strDString.replace(new RegExp('<=' + aMIFields[iF] + '=>', 'g'), strFieldValue);
				}

				if (iEditMode=='1'){
					MIEditOption(vMI + '_visible', strAString, strDString);
					document.getElementById(vMI + '_edit_mode').value = '0';
					document.getElementById(vMI + '_visible').disabled = false;
					document.getElementById(vMI + '_edit_link').style.display = 'inline';
					document.getElementById(vMI + '_clone_link').style.display = 'inline';

					try{
						document.getElementById(vMI + '_move_up').style.display = 'inline';
						document.getElementById(vMI + '_move_down').style.display = 'inline';
					}
					catch (err){
					}

				} else {
					MIAddOpt(vMI + '_visible', strAString, strDString);
				}

				MIDuplicate(vMI)
			}
		}

		function MIAddOpt(vSelect, vOptionValue, vOptionDisp){
			oSelect = document.getElementById(vSelect)
			oSelect[oSelect.options.length] = new Option(vOptionDisp, vOptionValue);
		}

		function MIGetSelectedIndex(vSelectBox)  {
			//find the index of the item selected
			var iLen = vSelectBox.options.length;
			for(var iOpt = 0; iOpt < iLen; iOpt++) {
				if (vSelectBox.options[iOpt].selected) {
					return iOpt;
				}
			}
		}

		// Return value of checked element in a group of radio buttons
		function MIGetCheckedValue(vRadioName, vFormName) {
			var oForm;
			for (iForm = 0; iForm < document.forms.length; iForm++){
				if (document.forms[iForm].id==vFormName){
					oForm = document.forms[iForm]
				}
			}

			if (oForm!=undefined){
				var oRadioCheck = oForm.elements[vRadioName];
				if(!oRadioCheck) {
					return '';
				}

				var iRadioLength = oRadioCheck.length;
			
				if(iRadioLength == undefined){
					if(oRadioCheck.checked) {
						return oRadioCheck.value;
					} else {
						return '';
					}
				} else {
					for(var iCheck = 0; iCheck < iRadioLength; iCheck++) {
						if(oRadioCheck[iCheck].checked) {
							return oRadioCheck[iCheck].value;
						}
					}
				}
			}
		}

		// Check the first radio button in a group of radio buttons.
		function MIResetCheckedValue(vRadioName, vFormName) {
			var oForm;
			for (iForm = 0; iForm < document.forms.length; iForm++){
				if (document.forms[iForm].id==vFormName){
					oForm = document.forms[iForm]
				}
			}

			if (oForm!=undefined){
				var oRadioCheck = oForm.elements[vRadioName];
				if(!oRadioCheck) {
					return '';
				}

				var iRadioLength = oRadioCheck.length;
				if(iRadioLength == undefined){
					oRadioCheck.checked = true;
					return;
				}
				oRadioCheck[0].checked = true;
			}
		}


		// Check a radio button given a value
		function MISetCheckedValue(vRadioName, vFormName, vRadioValue) {
			var oForm;
			for (iForm = 0; iForm < document.forms.length; iForm++){
				if (document.forms[iForm].id==vFormName){
					oForm = document.forms[iForm]
				}
			}

			if (oForm!=undefined){
				var oRadioCheck = oForm.elements[vRadioName];
				if(!oRadioCheck) {
					return '';
				}

				var iRadioLength = oRadioCheck.length;
				if(iRadioLength == undefined) {
					if(oRadioCheck.checked) {
						return oRadioCheck.value;
					} else {
						return '';
					}
				} else {
					for(var iCheck = 0; iCheck < iRadioLength; iCheck++) {
						if(oRadioCheck[iCheck].value == vRadioValue) {
							oRadioCheck[iCheck].checked = true;
							return;
						}
					}
				}
			}
		}

		// Swap two option in a select box
		function MISwap(vOpt1, vOpt2){
			var strHoldVal;

			strHoldVal		= vOpt1.value;
			vOpt1.value		= vOpt2.value;
			vOpt2.value		= strHoldVal;

			strHoldVal		= vOpt1.text;
			vOpt1.text		= vOpt2.text;
			vOpt2.text		= strHoldVal;

			strHoldVal		= vOpt1.selected;
			vOpt1.selected	= vOpt2.selected;
			vOpt2.selected	= strHoldVal;
		}

		// Move option(s) up in select box
		function MIBumpUp(vField)  {
			//find the index of the item selected
			var iLen = document.getElementById(vField + '_visible').options.length;
			if(iLen==0) return false;
			if (document.getElementById(vField + '_visible').options[0].selected) { return true; }
			for(var iOpt = 1; iOpt < iLen; iOpt++) {
				if (document.getElementById(vField + '_visible').options[iOpt].selected) {
					MISwap(document.getElementById(vField + '_visible').options[iOpt], document.getElementById(vField + '_visible').options[iOpt-1]);
				}
			}
			MIDuplicate(vField);
			return true;
		}

		// Move option(s) down in select box
		function MIBumpDown(vField)  {
			//find the index of the item selected
			var iLen = document.getElementById(box + '_visible').options.length;
			if(iLen==0) return false;
			iLen -= 1;
			if (document.getElementById(vField + '_visible').options[iLen].selected) { return true; }

			for(var iOpt = iLen; iOpt >= 0; iOpt--) {
				if (document.getElementById(vField + '_visible').options[iOpt].selected) {
					MISwap(document.getElementById(vField + '_visible').options[iOpt], document.getElementById(vField + '_visible').options[iOpt+1]);
				}
			}
			MIDuplicate(vField);
			return true;
		}

		// Edit Option in Select
		function MIEdit(vMI){
			var strSelectedAnswer = '';

			var iOpt, iSel;

			iSel = 0;
			for(iOpt = 0; iOpt < document.getElementById(vMI + '_visible').options.length; iOpt++) {
				if (document.getElementById(vMI + '_visible').options[iOpt].selected) {
					strSelectedAnswer = document.getElementById(vMI + '_visible').options[iOpt].value;
					iSel++;
				}
			}

			if (iSel != 1) {
				if (iSel == 0) {
					alert(document.getElementById(vMI + '_please_select').value);
				} else {
					alert(document.getElementById(vMI + '_multiple_select').value);
				}
			} else {
				document.getElementById(vMI + '_edit_mode').value = '1';
				var strAString = document.getElementById(vMI + '_answer_string').value;
				var strDString = document.getElementById(vMI + '_display_string').value;
				var bUseXML = document.getElementById(vMI + '_use_xml').value;
				var strSpacer = document.getElementById(vMI + '_entry_delimeter').value;

				document.getElementById(vMI + '_visible').disabled = true;
				document.getElementById(vMI + '_edit_link').style.display = 'none';
				document.getElementById(vMI + '_clone_link').style.display = 'none';

				try{
					document.getElementById(vMI + '_move_up').style.display = 'none';
					document.getElementById(vMI + '_move_down').style.display = 'none';
				}
				catch (err){
				}

				if (bUseXML=='true'){
				} else {
					var aDelimeters = strAString.split(/<=[0-9a-z_-]*=>/gi);

					// Loop through delimeters
					if(aDelimeters.length != 0) {
						for (iDelim = 0; iDelim < aDelimeters.length; iDelim++) {

							// Break the answer string in half on the current delimeter and replace '<=' and '=>' with '' to pull out a field
							strKey = MIDivide(strAString, aDelimeters[iDelim])[0].replace(/<=|=>/gi,'');

							// Do the same for the currently selected answer
							strValue = MIDivide(strSelectedAnswer, aDelimeters[iDelim])[0];

							// set the value of the form field to the currect value from the selected answer
							if ((strKey!='')&&(strValue!='')) {
								if ((document.getElementById(vMI + '_' + strKey + '_type').value=='radio')||(document.getElementById(vMI + '_' + strKey + '_type').value=='radioinline')) {
									MISetCheckedValue(vMI + '_' + strKey, document.getElementById(vMI + '_form_name').value, strValue);
								} else {
									document.getElementById(vMI + '_' + strKey).value = strValue.replace(new RegExp(strSpacer, 'g'), '\n');
								}
							}
							strAString = MIDivide(strAString, aDelimeters[iDelim])[1];
							strSelectedAnswer = MIDivide(strSelectedAnswer, aDelimeters[iDelim])[1];
						}
					}
					strKey = strAString.replace(/<=|=>/gi,'');
					strValue = strSelectedAnswer;

					if ((strKey!='')&&(strValue!='')) {
						if ((document.getElementById(vMI + '_' + strKey + '_type').value=='radio')||(document.getElementById(vMI + '_' + strKey + '_type').value=='radioinline')) {
							MISetCheckedValue(vMI + '_' + strKey, document.getElementById(vMI + '_form_name').value, strValue);
						} else {
							document.getElementById(vMI + '_' + strKey).value = strValue.replace(new RegExp(strSpacer, 'g'), '\n');
						}
					}
				}

				MIDuplicate(vMI)
			}
		}

		function MIEditOption(vSel, vText, vValue){
			var iLen = document.getElementById(vSel).options.length;
			if(iLen==0) return;
			for(var iOpt = 0; iOpt < iLen; iOpt++) {
				if (document.getElementById(vSel).options[iOpt].selected) {
					document.getElementById(vSel).options[iOpt].value = vValue;
					document.getElementById(vSel).options[iOpt].text = vText;
					return;
				}
			}
		}

		// Clone Option in Select
		function MIClone(vMI){
			var iOpt, iSel;

			iSel = 0;
			for(iOpt = 0; iOpt < document.getElementById(vMI + '_visible').options.length; iOpt++) {
				if (document.getElementById(vMI + '_visible').options[iOpt].selected) {
					iSel++;
				}
			}

			if (iSel == 0) {
				alert(document.getElementById(vMI + '_please_select').value);
			} else {
				var iClone = 0;
				if (confirm('Are you sure you wish to clone the selected values?')){
					for (iClone = 0; iClone < document.getElementById(vMI + '_visible').options.length; iClone++) {
						if (document.getElementById(vMI + '_visible').options[iClone].selected) {
							MIAddOpt(vMI + '_visible', document.getElementById(vMI + '_visible').options[iClone].value, document.getElementById(vMI + '_visible').options[iClone].text);
						}
					}

					MIDuplicate(vMI)
				}
			}
		}

		// Delete Option from Select
		function MIRemoveSelectedAnswers(vMI){
			var iEditMode = document.getElementById(vMI + '_edit_mode').value;
			var aMIFields = document.getElementById(vMI + '_fields').value.split('|');

			if (iEditMode=='1'){
				document.getElementById(vMI + '_edit_mode').value = '0';
				document.getElementById(vMI + '_visible').disabled = false;
				document.getElementById(vMI + '_edit_link').style.display = 'inline';
				document.getElementById(vMI + '_clone_link').style.display = 'inline';

				try{
					document.getElementById(vMI + '_move_up').style.display = 'inline';
					document.getElementById(vMI + '_move_down').style.display = 'inline';
				}
				catch (err){
				}
				
				var strFieldType = '';

				for (iF = 0; iF < aMIFields.length; iF++){
					strFieldType = '';

					strFieldType = document.getElementById(vMI + '_' + aMIFields[iF] + '_type').value.toLowerCase();
					
					switch (strFieldType){
						case 'radio': case 'radioinline':
							MIResetCheckedValue(vMI + '_' + aMIFields[iF], document.getElementById(vMI + '_form_name').value);
							break;
						case 'checkbox':
							for (iCheck = 0; iCheck < document.getElementsByName(vMI + '_' + aMIFields[iF]).length; iCheck++){
								document.getElementById(vMI + '_' + aMIFields[iF]).options[iCheck].checked = false;
							}
							break;
						case 'select': case 'select-one':
							if (document.getElementById(vMI + '_' + aMIFields[iF]).options.length > 0){
								document.getElementById(vMI + '_' + aMIFields[iF]).options[0].selected = true;
							}
							break;
						default:
							document.getElementById(vMI + '_' + aMIFields[iF]).value = '';
							break;
					}
				}
			} else {
				var iRemove = 0;
				if (confirm('Are you sure you wish to remove the selected values?')){
					for (iRemove = document.getElementById(vMI + '_visible').options.length - 1; iRemove >= 0 ; iRemove--) {
						if (document.getElementById(vMI + '_visible').options[iRemove].selected) {
							MIDeleteOption(vMI + '_visible', iRemove);
						}
					}
					MIDuplicate(vMI)
				}
			}
		}

		function MIDeleteOption(vSel, vIndex){
			var selLength = document.getElementById(vSel).length;
			if(selLength > 0) {
				document.getElementById(vSel).options[vIndex] = null;
			}
		}

		function MIDivide(vString, vDivider) {
			var strReplace = genID();
			vString = vString.replace(vDivider, strReplace);
			return Array(vString.split(strReplace)[0], vString.split(strReplace)[1]);
		}

		// Copy the values from a select box to its corrosponding hidden field
		function MIDuplicate(vMI){
			var strSpacer = document.getElementById(vMI + '_entry_delimeter').value;
			var strJSFunc = document.getElementById(vMI + '_javascript_func').value;
			var iLen = document.getElementById(vMI + '_visible').length;
			var bUseXML = document.getElementById(vMI + '_use_xml').value;

			var iOpt;
			var strValue = "";
			var bFirst = true;

			if (bUseXML=='true'){
				strValue = '<?xml version="1.0" encoding="utf-8"?><' + strSpacer + ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">';
			}

			for(iOpt = 0; iOpt < iLen; iOpt++) {
				if ((!bFirst)&&(bUseXML!='true')) {
					strValue = strValue + strSpacer
				}

				bFirst = false;
				strValue = strValue + document.getElementById(vMI + '_visible').options[iOpt].value;
			}

			if (bUseXML=='true'){
				strValue = strValue + '</' + strSpacer + '>';
			}

			document.getElementById(vMI).value = strValue;

			if (strJSFunc!=''){
				window.setTimeout(strJSFunc, 1);
			}
		}

	/************************************************************************************
	*** END MULTI INPUT SCRIPTS *********************************************************
	************************************************************************************/

	/************************************************************************************
	*** START MULTI SELECT SCRIPTS ******************************************************
	*************************************************************************************/



	/************************************************************************************
	*** START RESIZE FUNCTIONS **********************************************************
	************************************************************************************/

	var objMouseX = 0;
	var objMouseY = 0;
	var mouseX = 0;
	var mouseY = 0;
	var tempX = 0;
	var tempY = 0;
	var sizeX = 0;
	var sizeY = 0;
	var resizeDirection = '';
	var currentObj = '';
	var initialSizes = new Array();
	var firstResize = new Array();

	function addResizer(id, dir) {
		if (dir == '' || dir == undefined)
			dir = 'se';

		var table = document.createElement('table');
		table.cellPadding = 0;
		table.cellSpacing = 0;
		
		var tbody = document.createElement("tbody");
		table.appendChild(tbody)

		var tr = document.createElement("tr");
		tbody.appendChild(tr);

		var container = document.createElement("td");
		container.id = id + '-container';
		tr.appendChild(container);

		if (dir == 'e' || dir == 'se') {		
			var td = document.createElement("td");
			td.className = "resize-e";
			td.id = id + '-resize-e';
			td.innerHTML = '<div style="width:6px; height: 6px; font-size: 1px;">&nbsp;</div>'
			tr.appendChild(td);
		}

		if (dir == 's' || dir == 'se') {	
			tr = document.createElement("tr");
			tbody.appendChild(tr);

			td = document.createElement("td");
			td.className = "resize-s";
			td.id = id + '-resize-s';
			td.innerHTML = '<div style="width:6px; height: 6px; font-size: 1px;">&nbsp;</div>'
			tr.appendChild(td);

			if (dir == 'se') {
				td = document.createElement("td");
				td.className = "resize-se";
				td.id = id + '-resize-se';
				td.innerHTML = '<div style="width:6px; height: 6px; font-size: 1px;">&nbsp;</div>'
				tr.appendChild(td);
			}
		}

		resizeSurround(document.getElementById(id), table, container);

		document.body.onmousemove = function(e) { resizeObject(e) };
		document.body.onmouseup = resizeRelease;
		try {document.getElementById(id + '-resize-e').onmousedown = function(e) { grabResize(id, 'e', e) } } catch(err) {};
		try {document.getElementById(id + '-resize-s').onmousedown = function(e) { grabResize(id, 's', e) } } catch(err) {};
		try {document.getElementById(id + '-resize-se').onmousedown = function(e) { grabResize(id, 'se', e) } } catch(err) {};

		firstResize[id] = true;
	}

	function resizeSurround(oldElement, newElement, container){
		var tempElement = oldElement
		oldElement.parentNode.replaceChild(newElement, oldElement);
		container.appendChild(tempElement);
	}


	function resizeRelease() {
		currentObj = '';
		resizeDirection = '';
		tempX = 0;
		tempY = 0;
		sizeX = 0;
		sizeY = 0;
	}

	function resizeObject(e) {
		getMouseXY(e);

		if (resizeDirection == 'e' || resizeDirection == 'se') {
			if (sizeX + (mouseX - tempX) >= initialSizes[currentObj.id][0])
				currentObj.style.width = (sizeX + (mouseX - tempX)) + 'px';
			else
				currentObj.style.width = initialSizes[currentObj.id][0]
			clearSelection();
		}

		if (resizeDirection == 's' || resizeDirection == 'se') {
				if (isNaN(parseInt(currentObj.rows))) {
					if (sizeY + (mouseY - tempY) / 13 < 1)
						currentObj.size = 1;
					else
						currentObj.size = (sizeY + (mouseY - tempY) / 13);
				}
				else
					if (sizeY + (mouseY - tempY) >= initialSizes[currentObj.id][1])
						currentObj.style.height = (sizeY + (mouseY - tempY)) + 'px';
					else
						currentObj.style.height = initialSizes[currentObj.id][1]

			clearSelection();
		}
	}

	function grabResize(objectId, resizeDir, e) {
		currentObj = document.getElementById(objectId);
		if (firstResize[objectId]) {
			initialSizes[objectId] = [findSize(currentObj)[0], findSize(currentObj)[1]];
		}
		firstResize[objectId] = false;

		resizeDirection = resizeDir;
		tempX = getMouseXY(e)[0];
		tempY = getMouseXY(e)[1];
		sizeX = findSize(currentObj)[0];
		sizeY = findSize(currentObj)[1];
		clearSelection();
	}

	function getMouseXY(e) {
		if (e == undefined) e = window.events

		if (ie) { // grab the x-y pos.s if browser is IE
			mouseX = event.clientX + document.body.scrollLeft
			mouseY = event.clientY + document.body.scrollTop
		} else {  // grab the x-y pos.s if browser is NS
			mouseX = e.pageX
			mouseY = e.pageY
		}  
		// catch possible negative values in NS4
		if (mouseX < 0){mouseX = 0}
		if (mouseY < 0){mouseY = 0}  

		return [mouseX, mouseY];
	}


	function findPos(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return [curleft,curtop];
	}

	function findSize(obj) {
		var width;
		var height;

		if (op5) { 
			width  = obj.style.pixelWidth;
			if (isNaN(parseInt(obj.rows)))
				height = parseInt(obj.size);
			else				height = obj.style.pixelHeight;
		} else {
			width  = obj.offsetWidth;
			if (isNaN(parseInt(obj.rows)))
				height = parseInt(obj.size);
			else
				height = obj.offsetHeight;		
		}
		return [width, height];
	}


	function clearSelection() {
		if (document.selection)
			document.selection.empty();
		else if (window.getSelection)
			window.getSelection().removeAllRanges();
	}

	/************************************************************************************
	*** END RESIZE FUNCTIONS ************************************************************
	************************************************************************************/


	/************************************************************************************
	*** START DISPLAY ACTIVATOR FUNCTIONS ***********************************************
	************************************************************************************/

	function DisplayActivator(vName) {
		this.FormName = vName

		var aGroups = new Array();

		this.Add = Add;
		this.ShowHide = ShowHide;

		function Add(vGroup) {
			vGroup.SetFormName(this.FormName);
			aGroups[aGroups.length] = vGroup;
		}

		function ShowHide() {
			for (var iGroup = 0; iGroup < aGroups.length; iGroup++) {
				aGroups[iGroup].Test();
			}
		}
	}

	function DisplayGroup() {
		this.FormName = '';

		var aElements = new Array();
		var aConditions = new Array();

		this.SetFormName = SetFormName;
		this.AddId = AddId;
		this.AddCondition = AddCondition;
		this.Test = Test;

		function SetFormName(vName) {
			this.FormName = vName;
		}

		function AddId(vID) {
			aElements[aElements.length] = vID;
		}

		function AddCondition(vName, vType) {
			var aArgs = AddCondition.arguments;
			var aValues = new Array();
			for (var iArgs = 2; iArgs < aArgs.length; iArgs++) {
				aValues[aValues.length] = aArgs[iArgs];
			}
			aConditions[aConditions.length] = [vName, vType, aValues];
		}

		function Test() {
			var bShow = true
			var strValue;
			var strName;
			var strType;
			
			try {
				for (var iTest = 0; iTest < aConditions.length; iTest++) {
					strName = aConditions[iTest][0];
					strType = aConditions[iTest][1];
					if ((strType=='radio')||(strType=='checkbox')||(strType=='flagfield')) {
						strValue = getDispCheckedValue(strName, this.FormName);
					} else {
						strValue = document.getElementById(strName).value;
					}
		
					if (strValue == undefined) {
						strValue = '';
					}
		
					var bPassed = false;
					for (var iCondition = 0; iCondition < aConditions[iTest][2].length; iCondition++) {
						if (strValue == aConditions[iTest][2][iCondition]) {
							bPassed = true;
						}
					}
		
					if (!bPassed) {
						bShow = false;
					}
				}
		
				for (iElement = 0; iElement < aElements.length; iElement++) {
					if (bShow) {
						document.getElementById(aElements[iElement]).style.display = "block";
					} else {
						document.getElementById(aElements[iElement]).style.display = "none";
					}
				}
			}
			catch (err) {
				//alert(err.message);
			}
		}
	}

	function getDispCheckedValue(vRadioName, vFormName) {
		var oForm;
		for (iForm = 0; iForm < document.forms.length; iForm++){
			if (document.forms[iForm].id==vFormName){
				oForm = document.forms[iForm]
			}
		}
		if (oForm!=undefined){
			var oRadioCheck = oForm.elements[vRadioName];
			if(!oRadioCheck) {
				return '';
			}

			var iRadioLength = oRadioCheck.length;
		
			if(iRadioLength == undefined){
				if(oRadioCheck.checked) {
					return oRadioCheck.value;
				} else {
					return '';
				}
			} else {
				for(var iCheck = 0; iCheck < iRadioLength; iCheck++) {
					if(oRadioCheck[iCheck].checked) {
						return oRadioCheck[iCheck].value;
					}
				}
			}
		}
	}

	/************************************************************************************
	*** END DISPLAY ACTIVATOR FUNCTIONS *************************************************
	************************************************************************************/

	/************************************************************************************
	*** START XML/AJAX FUNCTIONS ********************************************************
	************************************************************************************/

	function createXMLDoc(XMLFile) {
		// code for IE
		if (window.ActiveXObject){
			xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.loadXML(XMLFile);
		// code for Mozilla, Firefox, Opera, etc.
		} else if (document.implementation && document.implementation.createDocument){
			var parser = new DOMParser();
			var xmlDoc = parser.parseFromString(XMLFile, "text/xml");
		} else {
			alert('Your browser cannot handle this script.');
		}

		return(xmlDoc);
	}

	function loadXMLDoc(XMLFile) {
		// code for IE
		if (window.ActiveXObject){
			xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async="false";
			xmlDoc.load(XMLFile);
		// code for Mozilla, Firefox, Opera, etc.
		} else if (document.implementation && document.implementation.createDocument){
			var xmlDoc = document.implementation.createDocument("","",null);
			xmlDoc.async="false";
			xmlDoc.load(XMLFile);
		} else {
			alert('Your browser cannot load "' + XMLFile + '"'); 
		}

		return(xmlDoc);
	}

	function serializeXML(XMLObj){
		var strXML = '';

		// code for IE
		if (window.ActiveXObject){
			strXML = XMLObj.xml;
		// code for Mozilla, Firefox, Opera, etc.
		} else if (document.implementation && document.implementation.createDocument){
			//xmlDoc = document.implementation.createDocument("", "", null);
			strXML = (new XMLSerializer()).serializeToString(XMLObj);
		} else {
			alert('Your browser cannot serialize this script.');
		}

		return(strXML);
	}

	function getNodeValue(xmlDoc, tagName, index) {
		if (xmlDoc.getElementsByTagName(tagName)[index].childNodes[0] != null)
			return xmlDoc.getElementsByTagName(tagName)[index].childNodes[0].nodeValue;
		else
			return '';
	}


	// XMLHttpRequest Object
	var xmlHttp;
	var xmlDoc;

	// Create an XMLHttpRequest object
	function GetXmlHttpObject() {
		var xmlHttp = null;
		try {
			// Firefox, Opera 8.0+, Safari
			xmlHttp = new XMLHttpRequest();
		} catch (e) {
			// Internet Explorer
			try {
				xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		return xmlHttp;
	}

	function MakeAJAXRequest(fncHandleData, strPage, bAsync, aShow, aHide, bDisable, errorMsg, xmlDoc, vID, bDebug) {
		//ResizeLoadingBG();
		xmlHttp = GetXmlHttpObject();
		if (xmlHttp==null){
			alert ("Your browser does not support AJAX.");
			return;
		}

		if (bDisable == null){
			bDisable = false;
		}

		var i;

		try{
			if (aShow != null){
				for (i = 0; i < aShow.length; i++){
					if (bDisable==true){
						document.getElementById(aHide[i]).disabled = false;
					} else {
						document.getElementById(aShow[i]).style.display = 'block';
					}
				}
			}		
		}
		catch (err){
			//alert(err.message);
		}

		try{
			if (aHide != null){
				for (i = 0; i < aHide.length; i++){
					if (bDisable==true){
						document.getElementById(aHide[i]).disabled = true;
					} else {
						document.getElementById(aHide[i]).style.display = 'none';
					}
				}
			}
		}
		catch (err){
			//alert(err.message);
		}


		if (((getQueryVariable('action')=='showpostfield')||(getQueryVariable('showpostfield')=='1'))&&(bDebug)){
			window.open(strPage + '&r_id=' + genID());
		}

		xmlHttp.open('get', strPage + '&r_id=' + genID(), bAsync);
		xmlHttp.onreadystatechange = function() { HandleData(fncHandleData, errorMsg, vID) };
		if (xmlDoc == undefined){
			xmlDoc = null;
		}
		xmlHttp.send(xmlDoc);
	}

	function HandleData(fncHandleData, errorMsg, vID) {
		if (errorMsg == undefined || errorMsg == "") errorMsg = "An error has occured."
		if(xmlHttp.readyState == 4) { //Finished loading the response
			//var xmlDoc = xmlHttp.responseXML.documentElement;
			//alert(xmlHttp.responseText);
			xmlDoc = createXMLDoc(xmlHttp.responseText);

			if (xmlDoc == null)	{
				alert(errorMsg);
				HideLoading()
			} else {
				fncHandleData(xmlDoc, vID);
			}

		}
	}


	/************************************************************************************
	*** END XML/AJAX FUNCTIONS **********************************************************
	************************************************************************************/


	/************************************************************************************
	*** START SEARCH STRING FUNCTIONS ***************************************************
	************************************************************************************/

	var aSSBCals = new Array();

	function AddSSBFilter(vSSB, vValues) {

		if (document.getElementById(vSSB + '_filter_count').value=='0'){
			document.getElementById(vSSB + '_table').deleteRow(1);
		}

		document.getElementById(vSSB + '_filter_count').value = parseInt(document.getElementById(vSSB + '_filter_count').value) + 1;
		document.getElementById(vSSB + '_max_filter_count').value = parseInt(document.getElementById(vSSB + '_max_filter_count').value) + 1;

		var iAdminMode = document.getElementById(vSSB + '_admin_mode').value;
		var iUseZip = document.getElementById(vSSB + '_use_zip').value;
		var sDefaultFilter = document.getElementById(vSSB + '_default_filter').value;
		var oSSBTable = document.getElementById(vSSB + '_table');
		var iLastRow = oSSBTable.rows.length;
		var iRow = document.getElementById(vSSB + '_max_filter_count').value;
		var oFilter = oSSBTable.insertRow(iLastRow);
		var sRowBuilder = '';

		var sLColor1 = 'cccccc';
		var sRColor1 = 'cccccc';
		var sLColor2 = 'cccccc';
		var sRColor2 = 'cccccc';
		var sLVal1 = '0';
		var sRVal1 = '0';
		var sLVal2 = '0';
		var sRVal2 = '0';
		var sJoinType = '|and|';
		var sSearchField = '';
		var sNumCheck = '';
		var sDateCheck = '';
		var sNotCheck = '';

		if (isArray(vValues)){
			// Key
			//
			// 0 = Left Parenthesis 1 (true/false)
			// 1 = Left Parenthesis 2 (true/false)
			// 2 = Join Type (|and|/|or|)
			// 3 = Search Command
			// 4 = Search Field
			// 5 = Numeric (true/false)
			// 6 = Date (true/false)
			// 7 = Value 1
			// 8 = Value 2
			// 9 = Value 3
			// 10 = Date Type 1 (1/2/3)
			// 11 = Date Type 2 (1/2/3)
			// 12 = Right Parenthesis 2 (true/false)
			// 13 = Right Parenthesis 1 (true/false)
			// 13 = Not (true/false)

			if (vValues[0]){
				sLColor1 = '000000';
				sLVal1 = '1';
			} else {
				sLColor1 = 'cccccc';
				sLVal1 = '0';
			}

			if (vValues[1]){
				sLColor2 = '000000';
				sLVal2 = '1';
			} else {
				sLColor2 = 'cccccc';
				sLVal2 = '0';
			}

			sJoinType = vValues[2];
			sDefaultFilter = vValues[3];
			sSearchField = vValues[4];

			if (vValues[5]){
				sNumCheck = ' checked';
			}

			if (vValues[6]){
				sDateCheck = ' checked';
			}

			if (vValues[12]){
				sRColor2 = '000000';
				sRVal2 = '1';
			} else {
				sRColor2 = 'cccccc';
				sRVal2 = '0';
			}

			if (vValues[13]){
				sRColor1 = '000000';
				sRVal1 = '1';
			} else {
				sRColor1 = 'cccccc';
				sRVal1 = '0';
			}

			if (vValues[14]){
				sNotCheck = ' checked';
			}


		}

		// Opening Parenthesis cell
		var oCell0 = oFilter.insertCell(0);
		oCell0.align = 'center';

		sRowBuilder = '<a href="javascript:SSBToggleParenthesis(\'' + vSSB + '\', \'left\', \'' + iRow + '\', \'1\');void(0);" style="text-decoration: none; font-weight: bold; color: #' + sLColor1 + ';" id="' + vSSB + '_left_parenth_' + iRow + '_1">(&nbsp;</a>'
		sRowBuilder = sRowBuilder + '<input type="hidden" name="' + vSSB + '_left_parenth_status_' + iRow + '_1" id="' + vSSB + '_left_parenth_status_' + iRow + '_1" value="' + sLVal1 + '" />'
		sRowBuilder = sRowBuilder + '<a href="javascript:SSBToggleParenthesis(\'' + vSSB + '\', \'left\', \'' + iRow + '\', \'2\');void(0);" style="text-decoration: none; font-weight: bold; color: #' + sLColor2 + ';" id="' + vSSB + '_left_parenth_' + iRow + '_2">(&nbsp;</a>'
		sRowBuilder = sRowBuilder + '<input type="hidden" name="' + vSSB + '_left_parenth_status_' + iRow + '_2" id="' + vSSB + '_left_parenth_status_' + iRow + '_2" value="' + sLVal2 + '" />'

		oCell0.innerHTML = sRowBuilder;

		// Field/Command cell
		var oCell1 = oFilter.insertCell(1);

		if (iLastRow!=1){
			sRowBuilder = '<select name="' + vSSB + '_connector_' + iRow + '" id="' + vSSB + '_connector_' + iRow + '" onchange="BuildSSBValue(\'' + vSSB + '\');"><option value="|and|">And</option><option value="|or|"' + CheckSSBSelected(sJoinType, '|or|') + '>Or</option></select>'
		} else {
			sRowBuilder = '';
		}

		if (iAdminMode=='1'){
			sRowBuilder = sRowBuilder + '<select name="' + vSSB + '_searchcommand_' + iRow + '" id="' + vSSB + '_searchcommand_' + iRow + '" onchange="ChangeSSBValueFields(\'' + vSSB + '\', \'' + iRow + '\');">' + BuildSSBCommandList(sDefaultFilter, iAdminMode, iUseZip) + '</select>';
		} else {
			sRowBuilder = sRowBuilder + '<input type="text" name="' + vSSB + '_searchfield_' + iRow + '" id="' + vSSB + '_searchfield_' + iRow + '" onchange="BuildSSBValue(\'' + vSSB + '\');" value="' + sSearchField + '" />';
		}

		oCell1.innerHTML = sRowBuilder;

		// Not cell
		var oCell2 = oFilter.insertCell(2);
		oCell2.align = 'center';
		oCell2.innerHTML = '<input type="checkbox" name="' + vSSB + '_not_' + iRow + '" id="' + vSSB + '_not_' + iRow + '" value="not" onclick="BuildSSBValue(\'' + vSSB + '\');"' + sNotCheck + ' />';

		// Command/Field cell
		var oCell3 = oFilter.insertCell(3);

		if (iAdminMode=='1'){
			sRowBuilder ='<input type="text" name="' + vSSB + '_searchfield_' + iRow + '" id="' + vSSB + '_searchfield_' + iRow + '" onchange="BuildSSBValue(\'' + vSSB + '\');" value="' + sSearchField + '" />';
		} else {
			sRowBuilder = '<select name="' + vSSB + '_searchcommand_' + iRow + '" id="' + vSSB + '_searchcommand_' + iRow + '" onchange="ChangeSSBValueFields(\'' + vSSB + '\', \'' + iRow + '\');">' + BuildSSBCommandList(sDefaultFilter, iAdminMode, iUseZip) + '</select>';
		}
		oCell3.innerHTML = sRowBuilder;

		// Numeric cell
		var oCell4 = oFilter.insertCell(4);
		oCell4.align = 'center';
		oCell4.innerHTML = '<div id="' + vSSB + '_numeric_col_' + iRow + '"><input type="checkbox" name="' + vSSB + '_numeric_' + iRow + '" id="' + vSSB + '_numeric_' + iRow + '" value="@" onclick="SSBUseNumeric(\'' + vSSB + '\', \'' + iRow + '\');"' + sNumCheck + ' /></div>'

		// Date cell
		var oCell5 = oFilter.insertCell(5);
		oCell5.align = 'center';
		oCell5.innerHTML = '<div id="' + vSSB + '_date_col_' + iRow + '"><input type="checkbox" name="' + vSSB + '_date_' + iRow + '" id="' + vSSB + '_date_' + iRow + '" value="date" onclick="ShowSSBDates(\'' + vSSB + '\', \'' + iRow + '\');"' + sDateCheck + ' /></div>'

		// Values cell
		var oCell6 = oFilter.insertCell(6);
		oCell6.innerHTML = '<div id="' + vSSB + '_value_container_' + iRow + '"></div>';

		ChangeSSBValueFields(vSSB, iRow, vValues);
		SSBUseNumeric(vSSB, iRow);
		ShowSSBDates(vSSB, iRow);

		// Closing Parenthesis cell
		var oCell7 = oFilter.insertCell(7);
		oCell7.align = 'center';

		sRowBuilder = '<a href="javascript:SSBToggleParenthesis(\'' + vSSB + '\', \'right\', \'' + iRow + '\', \'2\');void(0);" style="text-decoration: none; font-weight: bold; color: #' + sRColor2 + ';" id="' + vSSB + '_right_parenth_' + iRow + '_2">&nbsp;)</a>'
		sRowBuilder = sRowBuilder + '<input type="hidden" name="' + vSSB + '_right_parenth_status_' + iRow + '_2" id="' + vSSB + '_right_parenth_status_' + iRow + '_2" value="' + sRVal2 + '" />'
		sRowBuilder = sRowBuilder + '<a href="javascript:SSBToggleParenthesis(\'' + vSSB + '\', \'right\', \'' + iRow + '\', \'1\');void(0);" style="text-decoration: none; font-weight: bold; color: #' + sRColor1 + ';" id="' + vSSB + '_right_parenth_' + iRow + '_1">&nbsp;)</a>'
		sRowBuilder = sRowBuilder + '<input type="hidden" name="' + vSSB + '_right_parenth_status_' + iRow + '_1" id="' + vSSB + '_right_parenth_status_' + iRow + '_1" value="' + sRVal1 + '" />'

		oCell7.innerHTML = sRowBuilder;

		// Delete cell
		var oCell8 = oFilter.insertCell(8);
		oCell8.align = 'center';
		oCell8.innerHTML = '<a href="javascript:void(0);" onclick="RemoveSSBFilter(\'' + vSSB + '\', this, ' + iLastRow + ');"><img src="common_images/icon_delete.gif" alt="Remove Filter" text="Remove Filter" vspace="3" border="0" /></a>';

		BuildSSBValue(vSSB);
	}

	function AddSSBFirstRow(vSSB){
		var oSSBTable = document.getElementById(vSSB + '_table');
		var iLastRow = oSSBTable.rows.length;
		var oRow = oSSBTable.insertRow(iLastRow);

		var oCell0 = oRow.insertCell(0);
		oCell0.colSpan = 9;
		oCell0.innerHTML = document.getElementById(vSSB + '_start_tip').value;

	}

	function RemoveSSBFilter(vSSB, vRow, vRowNum){
		var oSSBTable = document.getElementById(vSSB + '_table');
		var iLastRow = oSSBTable.rows.length;

		if (confirm('Are you sure you wish to remove this filter?')){
			if (iLastRow > 1){
				document.getElementById(vSSB + '_filter_count').value = parseInt(document.getElementById(vSSB + '_filter_count').value) - 1;
				oSSBTable.deleteRow(vRow.parentNode.parentNode.rowIndex);
			}

			BuildSSBValue(vSSB);
		}

		if (oSSBTable.rows.length=='1'){
			AddSSBFirstRow(vSSB);
		}

	}

	function BuildSSBValue(vSSB){
		var iMaxFilterCount = parseInt(document.getElementById(vSSB + '_max_filter_count').value);
		var strSS = '';
		var strParenth = '';
		var iLeftParenth = 0;
		var iRightParenth = 0;
		var strNumeric = '';

		for (var iFilter = 1; iFilter <= iMaxFilterCount; iFilter++){
			try{
				try{
					if (document.getElementById(vSSB + '_numeric_' + iFilter).checked==true){
						strNumeric = '@'
					} else {
						strNumeric = ''
					}

				}
				catch (err){
					strNumeric = ''
				}

				if (iFilter > 1){
					strSS = strSS + document.getElementById(vSSB + '_connector_' + iFilter).value;
				}

				if (document.getElementById(vSSB + '_left_parenth_status_' + iFilter + '_1').value=='1'){
					strSS = strSS + '(';
					strParenth = strParenth + '(';
					iLeftParenth++;
				}

				if (document.getElementById(vSSB + '_left_parenth_status_' + iFilter + '_2').value=='1'){
					strSS = strSS + '(';
					strParenth = strParenth + '(';
					iLeftParenth++;
				}

				strSS = strSS + document.getElementById(vSSB + '_searchcommand_' + iFilter).value;

				if (document.getElementById(vSSB + '_not_' + iFilter).checked==true){
					strSS = strSS + 'not';
				}

				strSS = strSS + '~' + document.getElementById(vSSB + '_searchfield_' + iFilter).value;

				switch (document.getElementById(vSSB + '_searchcommand_' + iFilter).value){
					case 'searchleft': case 'searchright':
						try{
							strSS = strSS + '~' + strNumeric + document.getElementById(vSSB + '_value_' + iFilter).value;
							strSS = strSS + '~' + strNumeric + document.getElementById(vSSB + '_value_' + iFilter + '_2').value;
						}
						catch (err){
							//alert('Left/Right - ' + err.message);
						}

						break;

					case 'searchbetween':
						try{
							if (document.getElementById(vSSB + '_date_type_' + iFilter + '_2').checked==true){
								strSS = strSS + '~<<now>>';
							} else if (document.getElementById(vSSB + '_date_type_' + iFilter + '_3').checked==true){
								strSS = strSS + '~<<dateadd:' + document.getElementById(vSSB + '_rel_date_interval_' + iFilter).value + ':' + document.getElementById(vSSB + '_rel_date_direction_' + iFilter).value + document.getElementById(vSSB + '_rel_date_qty_' + iFilter).value + '>>';
							} else {
								strSS = strSS + '~' + strNumeric + document.getElementById(vSSB + '_value_' + iFilter).value;
							}

							if (document.getElementById(vSSB + '_date_type_' + iFilter + '_2a').checked==true){
								strSS = strSS + '~<<now>>';
							} else if (document.getElementById(vSSB + '_date_type_' + iFilter + '_3a').checked==true){
								strSS = strSS + '~<<dateadd:' + document.getElementById(vSSB + '_rel_date_interval_' + iFilter + 'a').value + ':' + document.getElementById(vSSB + '_rel_date_direction_' + iFilter + 'a').value + document.getElementById(vSSB + '_rel_date_qty_' + iFilter + 'a').value + '>>';
							} else {
								strSS = strSS + '~' + strNumeric + document.getElementById(vSSB + '_value_' + iFilter + '_2').value;
							}
						}
						catch (err){
							//alert('Between - ' + err.message);
						}

						break;
					case 'searchgreaterthan': case 'searchgreaterthanequal': case 'searchlessthan': case 'searchlessthanequal': case 'searchexact': case 'searchlike':
						try{
							if (document.getElementById(vSSB + '_date_type_' + iFilter + '_2').checked==true){
								strSS = strSS + '~<<now>>';
							} else if (document.getElementById(vSSB + '_date_type_' + iFilter + '_3').checked==true){
								strSS = strSS + '~<<dateadd:' + document.getElementById(vSSB + '_rel_date_interval_' + iFilter).value + ':' + document.getElementById(vSSB + '_rel_date_direction_' + iFilter).value + document.getElementById(vSSB + '_rel_date_qty_' + iFilter).value + '>>';
							} else {
								strSS = strSS + '~' + strNumeric + document.getElementById(vSSB + '_value_' + iFilter).value;
							}
						}
						catch (err){
							//alert('Exact/Less/Greater - ' + err.message);
						}

						break;
					case 'isnumeric': case 'isdate': case 'isnull':
						break;
					case 'searchzipcodeprox':
						try{
							strSS = strSS + '~' + document.getElementById(vSSB + '_value_' + iFilter).value;
							strSS = strSS + '~' + document.getElementById(vSSB + '_value_' + iFilter + '_2').value;
							if (document.getElementById(vSSB + '_value_' + iFilter + '_3').checked==true){
								strSS = strSS + '~1';
							} else {
								strSS = strSS + '~0';
							}
						}
						catch (err){
							//alert('ZIP - ' + err.message);
						}

						break;
					default:
						try{
							strSS = strSS + '~' + strNumeric + document.getElementById(vSSB + '_value_' + iFilter).value;
						}
						catch (err){
							//alert('Default - ' + err.message);
						}
				}


				if (document.getElementById(vSSB + '_right_parenth_status_' + iFilter + '_1').value=='1'){
					strSS = strSS + ')';
					strParenth = strParenth + ')';
					iRightParenth++;
				}

				if (document.getElementById(vSSB + '_right_parenth_status_' + iFilter + '_2').value=='1'){
					strSS = strSS + ')';
					strParenth = strParenth + ')';
					iRightParenth++;
				}

			}
			catch (err){
				//alert(err.message);
			}
		}

		document.getElementById(vSSB).value = strSS;
		document.getElementById(vSSB + '_left_parenth_on').value = iLeftParenth;
		document.getElementById(vSSB + '_right_parenth_on').value = iRightParenth;
		document.getElementById(vSSB + '_parenth_string').value = strParenth;

	}

	function SSBToggleParenthesis(vSSB, vSide, vRow, vPos){
		var oPLink = document.getElementById(vSSB + '_' + vSide + '_parenth_' + vRow + '_' + vPos);
		var oPStatus = document.getElementById(vSSB + '_' + vSide + '_parenth_status_' + vRow + '_' + vPos);

		if (oPStatus.value=='0'){
			oPLink.style.color = '#000000';
			oPStatus.value = '1';
		} else {
			oPLink.style.color = '#cccccc';
			oPStatus.value = '0';
		}

		BuildSSBValue(vSSB);
	}

	function BuildSSBCommandList(vDefault, vAdminMode, vUseZip){
		var sCommandList = '';

		if (vAdminMode=='1'){
			sCommandList = sCommandList + '<option value="isdate"' + CheckSSBSelected(vDefault, 'isdate') + '>isdate</option>'
			sCommandList = sCommandList + '<option value="isnull"' + CheckSSBSelected(vDefault, 'isnull') + '>isnull</option>'
			sCommandList = sCommandList + '<option value="isnumeric"' + CheckSSBSelected(vDefault, 'isnumeric') + '>isnumeric</option>'
			sCommandList = sCommandList + '<option value="searchbetween"' + CheckSSBSelected(vDefault, 'searchbetween') + '>searchbetween</option>'
			sCommandList = sCommandList + '<option value="searchexact"' + CheckSSBSelected(vDefault, 'searchexact') + '>searchexact</option>'
			sCommandList = sCommandList + '<option value="searchflagoff"' + CheckSSBSelected(vDefault, 'searchflagoff') + '>searchflagoff</option>'
			sCommandList = sCommandList + '<option value="searchflagon"' + CheckSSBSelected(vDefault, 'searchflagon') + '>searchflagon</option>'
			sCommandList = sCommandList + '<option value="searchgreaterthan"' + CheckSSBSelected(vDefault, 'searchgreaterthan') + '>searchgreaterthan</option>'
			sCommandList = sCommandList + '<option value="searchgreaterthanequal"' + CheckSSBSelected(vDefault, 'searchgreaterthanequal') + '>searchgreaterthanequal</option>'
			sCommandList = sCommandList + '<option value="searchleft"' + CheckSSBSelected(vDefault, 'searchleft') + '>searchleft</option>'
			sCommandList = sCommandList + '<option value="searchlessthan"' + CheckSSBSelected(vDefault, 'searchlessthan') + '>searchlessthan</option>'
			sCommandList = sCommandList + '<option value="searchlessthanequal"' + CheckSSBSelected(vDefault, 'searchlessthanequal') + '>searchlessthanequal</option>'
			sCommandList = sCommandList + '<option value="searchlike"' + CheckSSBSelected(vDefault, 'searchlike') + '>searchlike</option>'
			sCommandList = sCommandList + '<option value="searchright"' + CheckSSBSelected(vDefault, 'searchright') + '>searchright</option>'
			sCommandList = sCommandList + '<option value="searchzipcodeprox"' + CheckSSBSelected(vDefault, 'searchzipcodeprox') + '>searchzipcodeprox</option>'
		} else {
			sCommandList = sCommandList + '<option value="searchbetween"' + CheckSSBSelected(vDefault, 'searchbetween') + '>Between</option>'
			sCommandList = sCommandList + '<option value="isdate"' + CheckSSBSelected(vDefault, 'isdate') + '>Date</option>'
			sCommandList = sCommandList + '<option value="searchexact"' + CheckSSBSelected(vDefault, 'searchexact') + '>Exact</option>'
			sCommandList = sCommandList + '<option value="searchflagoff"' + CheckSSBSelected(vDefault, 'searchflagoff') + '>Flag Off</option>'
			sCommandList = sCommandList + '<option value="searchflagon"' + CheckSSBSelected(vDefault, 'searchflagon') + '>Flag On</option>'
			sCommandList = sCommandList + '<option value="searchgreaterthan"' + CheckSSBSelected(vDefault, 'searchgreaterthan') + '>Greater Than</option>'
			sCommandList = sCommandList + '<option value="searchgreaterthanequal"' + CheckSSBSelected(vDefault, 'searchgreaterthanequal') + '>Greater Than Equal</option>'
			sCommandList = sCommandList + '<option value="searchleft"' + CheckSSBSelected(vDefault, 'searchleft') + '>Left</option>'
			sCommandList = sCommandList + '<option value="searchlessthan"' + CheckSSBSelected(vDefault, 'searchlessthan') + '>Less Than</option>'
			sCommandList = sCommandList + '<option value="searchlessthanequal"' + CheckSSBSelected(vDefault, 'searchlessthanequal') + '>Less Than Equal</option>'
			sCommandList = sCommandList + '<option value="searchlike"' + CheckSSBSelected(vDefault, 'searchlike') + '>Like</option>'
			sCommandList = sCommandList + '<option value="isnull"' + CheckSSBSelected(vDefault, 'isnull') + '>Null</option>'
			sCommandList = sCommandList + '<option value="isnumeric"' + CheckSSBSelected(vDefault, 'isnumeric') + '>Numeric</option>'
			sCommandList = sCommandList + '<option value="searchright"' + CheckSSBSelected(vDefault, 'searchright') + '>Right</option>'

			if (vUseZip=='1'){
				sCommandList = sCommandList + '<option value="searchzipcodeprox"' + CheckSSBSelected(vDefault, 'searchzipcodeprox') + '>ZIP Code Proximity</option>'
			}

		}

		return sCommandList;
	}

	function CheckSSBSelected(vDefault, vCurrent){
		if (vDefault==vCurrent){
			return ' selected';
		} else {
			return '';
		}
	}

	function ChangeSSBValueFields(vSSB, vRow, vValues){
		var sVal1 = '';
		var sVal2 = '';
		var sVal3 = '';
		var iDateType1 = 1;
		var iDateType2 = 1;
		var sNumCheck = '';
		var sDateCheck = '';
		var aDateParts1;
		var aDateParts2;
		var iDateQty1 = '';
		var iDateQty2 = '';
		var sTime1 = 'days';
		var sTime2 = 'days';
		var sWhen1 = '-';
		var sWhen2 = '-';

		if (isArray(vValues)){
			// Key
			//
			// 5 = Numeric (true/false)
			// 6 = Date (true/false)
			// 7 = Value 1
			// 8 = Value 2
			// 9 = Value 3
			// 10 = Date Type 1 (1/2/3)
			// 11 = Date Type 2 (1/2/3)

			if (vValues[5]){
				sNumCheck = ' checked';
			}

			if (vValues[6]){
				sDateCheck = ' checked';
			}

			sVal1 = vValues[7];
			sVal2 = vValues[8];

			if (vValues[9]=='1'){
				sVal3 = ' checked';
			}

			iDateType1 = vValues[10];
			switch (iDateType1){
				case 2:
					sVal1 = '';
					break;
				case 3:
					aDateParts1 = sVal1.split(':');
					sVal1 = '';
					iDateQty1 = aDateParts1[2].replace('-', '');
					iDateQty1 = iDateQty1.replace(/>>/, '');
					sTime1 = aDateParts1[1];
					
					if (left(aDateParts1[2], 1)=='-'){
						sWhen1 = '-';
					} else {
						sWhen1 = '';
					}

					break;
			}

			iDateType2 = vValues[11];
			switch (iDateType2){
				case 2:
					sVal2 = '';
					break;
				case 3:
					aDateParts2 = sVal2.split(':');
					sVal2 = '';
					iDateQty2 = aDateParts2[2].replace('-', '');
					iDateQty2 = iDateQty2.replace(/>>/, '');
					sTime2 = aDateParts2[1];
					
					if (left(aDateParts2[2], 1)=='-'){
						sWhen2 = '-';
					} else {
						sWhen2 = '';
					}
					break;
			}
		}

		switch (document.getElementById(vSSB + '_searchcommand_' + vRow).value){
			case 'searchleft': case 'searchright':
				document.getElementById(vSSB + '_value_container_' + vRow).innerHTML = 'Quantity&nbsp;of&nbsp;Characters:&nbsp;<input type="text" name="' + vSSB + '_value_' + vRow + '" id="' + vSSB + '_value_' + vRow + '" value="' + sVal1 + '" onchange="BuildSSBValue(\'' + vSSB + '\');" size="5" onkeypress="return NumbersOnly(this, event);" /><br/>Value:&nbsp;<input type="text" name="' + vSSB + '_value_' + vRow + '_2" id="' + vSSB + '_value_' + vRow + '_2" value="' + sVal2 + '" onchange="BuildSSBValue(\'' + vSSB + '\');" />';

				document.getElementById(vSSB + '_date_col_' + vRow).innerHTML = '&nbsp;';
				document.getElementById(vSSB + '_numeric_col_' + vRow).innerHTML = '<input type="checkbox" name="' + vSSB + '_numeric_' + vRow + '" id="' + vSSB + '_numeric_' + vRow + '" value="@" onclick="SSBUseNumeric(\'' + vSSB + '\', \'' + vRow + '\');"' + sNumCheck + ' />';

				break;

			case 'searchbetween':

				aSSBCals[vRow] = [new CalendarPopup("super_cal_popup"), new CalendarPopup("super_cal_popup")];
				aSSBCals[vRow][0].showYearNavigation();
				aSSBCals[vRow][1].showYearNavigation();

				var strSBtwn = '';

				strSBtwn = '<table cellspacing="0" cellpadding="0" border="0" width="100%"><tr><td>';

				strSBtwn = strSBtwn + '<span style="display: none;" id="' + vSSB + '_date_radio_' + vRow + '_1"><input type="radio" name="' + vSSB + '_date_type_' + vRow + '" id="' + vSSB + '_date_type_' + vRow + '_1" value="1" onclick="BuildSSBValue(\'' + vSSB + '\');"';
				
				if (iDateType1=='1'){
					strSBtwn = strSBtwn + ' checked';
				}

				strSBtwn = strSBtwn + ' /></span>';

				strSBtwn = strSBtwn + '<input type="text" name="' + vSSB + '_value_' + vRow + '" id="' + vSSB + '_value_' + vRow + '" value="' + sVal1 + '" onchange="BuildSSBValue(\'' + vSSB + '\');" />';

				strSBtwn = strSBtwn + '&nbsp;<span style="display: none;" id="' + vSSB + '_date_container_' + vRow + '_1"><a href="javascript:void(0);" onClick="aSSBCals[' + vRow + '][0].select(document.getElementById(\'' + vSSB + '_value_' + vRow + '\'),\'' + vSSB + '_anchor' + vRow + '\',\'MM/dd/yyyy\'); return false; BuildSSBValue(\'' + vSSB + '\');" name="' + vSSB + '_anchor' + vRow + '" id="' + vSSB + '_anchor' + vRow + '" onblur="BuildSSBValue(\'' + vSSB + '\');"><img src="common_images/supercal.jpg" alt="" title="" border="0" align="absmiddle" /></a></span>';

				strSBtwn = strSBtwn + '<div id="' + vSSB + '_date_radio_' + vRow + '_2" style="display: none;"><input type="radio" name="' + vSSB + '_date_type_' + vRow + '" id="' + vSSB + '_date_type_' + vRow + '_2" value="2" onclick="BuildSSBValue(\'' + vSSB + '\');"';

				if (iDateType1=='2'){
					strSBtwn = strSBtwn + ' checked';
				}

				strSBtwn = strSBtwn + ' /><label for="' + vSSB + '_date_type_' + vRow + '_2">Now</label></div>';

				strSBtwn = strSBtwn + '<div id="' + vSSB + '_date_radio_' + vRow + '_3" style="display: none;"><input type="radio" name="' + vSSB + '_date_type_' + vRow + '" id="' + vSSB + '_date_type_' + vRow + '_3" value="3" onclick="BuildSSBValue(\'' + vSSB + '\');"';

				if (iDateType1=='3'){
					strSBtwn = strSBtwn + ' checked';
				}	
				
				strSBtwn = strSBtwn + ' /><input type="text" name="' + vSSB + '_rel_date_qty_' + vRow + '" id="' + vSSB + '_rel_date_qty_' + vRow + '" size="3" maxlength="3" onkeypress="return NumbersOnly(this, event);" onclick="document.getElementById(\'' + vSSB + '_date_type_' + vRow + '_3\').checked=true;" onchange="BuildSSBValue(\'' + vSSB + '\');" value="' + iDateQty1 + '" />&nbsp;<select name="' + vSSB + '_rel_date_interval_' + vRow + '" id="' + vSSB + '_rel_date_interval_' + vRow + '" onchange="BuildSSBValue(\'' + vSSB + '\');" onclick="document.getElementById(\'' + vSSB + '_date_type_' + vRow + '_3\').checked=true;"><option value="min"' + CheckSSBSelected(sTime1, 'min') + '>Minute(s)</option><option value="hours"' + CheckSSBSelected(sTime1, 'hours') + '>Hour(s)</option><option value="days"' + CheckSSBSelected(sTime1, 'days') + '>Day(s)</option><option value="weeks"' + CheckSSBSelected(sTime1, 'weeks') + '>Week(s)</option><option value="months"' + CheckSSBSelected(sTime1, 'months') + '>Month(s)</option><option value="quarters"' + CheckSSBSelected(sTime1, 'quarters') + '>Quarter(s)</option><option value="year"' + CheckSSBSelected(sTime1, 'year') + '>Year(s)</option></select>&nbsp;<select name="' + vSSB + '_rel_date_direction_' + vRow + '" id="' + vSSB + '_rel_date_direction_' + vRow + '" onchange="BuildSSBValue(\'' + vSSB + '\');" onclick="document.getElementById(\'' + vSSB + '_date_type_' + vRow + '_3\').checked=true;"><option value="-"' + CheckSSBSelected(sWhen1, '-') + '>In Past</option><option value=""' + CheckSSBSelected(sWhen1, '') + '>In Future</option></select></div>';

				strSBtwn = strSBtwn + '</td><td align="center">to</td><td>';
				
				strSBtwn = strSBtwn + '<span style="display: none;" id="' + vSSB + '_date_radio_' + vRow + '_1a"><input type="radio" name="' + vSSB + '_date_type_' + vRow + 'a" id="' + vSSB + '_date_type_' + vRow + '_1a" value="1" onclick="BuildSSBValue(\'' + vSSB + '\');"';
				
				if (iDateType2=='1'){
					strSBtwn = strSBtwn + ' checked';
				}

				strSBtwn = strSBtwn + ' /></span>';

				strSBtwn = strSBtwn + '<input type="text" name="' + vSSB + '_value_' + vRow + '_2" id="' + vSSB + '_value_' + vRow + '_2" value="' + sVal2 + '" onchange="BuildSSBValue(\'' + vSSB + '\');" onclick="document.getElementById(\'' + vSSB + '_date_type_' + vRow + '_1a\').checked=true;" />';

				strSBtwn = strSBtwn + '&nbsp;<span style="display: none;" id="' + vSSB + '_date_container_' + vRow + '_2"><a href="javascript:void(0);" onClick="aSSBCals[' + vRow + '][1].select(document.getElementById(\'' + vSSB + '_value_' + vRow + '_2\'),\'' + vSSB + '_anchor2' + vRow + '\',\'MM/dd/yyyy\'); return false; BuildSSBValue(\'' + vSSB + '\');" name="' + vSSB + '_anchor2' + vRow + '" id="' + vSSB + '_anchor2' + vRow + '" onblur="BuildSSBValue(\'' + vSSB + '\');"><img src="common_images/supercal.jpg" alt="" title="" border="0" align="absmiddle" /></a></span>';

				strSBtwn = strSBtwn + '<div id="' + vSSB + '_date_radio_' + vRow + '_2a" style="display: none;"><input type="radio" name="' + vSSB + '_date_type_' + vRow + 'a" id="' + vSSB + '_date_type_' + vRow + '_2a" value="2" onclick="BuildSSBValue(\'' + vSSB + '\');"';
				
				if (iDateType2=='2'){
					strSBtwn = strSBtwn + ' checked';
				}

				strSBtwn = strSBtwn + ' /><label for="' + vSSB + '_date_type_' + vRow + '_2a">Now</label></div>';
				
				strSBtwn = strSBtwn + '<div id="' + vSSB + '_date_radio_' + vRow + '_3a" style="display: none;"><input type="radio" name="' + vSSB + '_date_type_' + vRow + 'a" id="' + vSSB + '_date_type_' + vRow + '_3a" value="3" onclick="BuildSSBValue(\'' + vSSB + '\');"';
				
				if (iDateType2=='3'){
					strSBtwn = strSBtwn + ' checked';
				}

				strSBtwn = strSBtwn + ' /><input type="text" name="' + vSSB + '_rel_date_qty_' + vRow + '" id="' + vSSB + '_rel_date_qty_' + vRow + '" size="3" maxlength="3" onkeypress="return NumbersOnly(this, event);" onclick="document.getElementById(\'' + vSSB + '_date_type_' + vRow + '_3a\').checked=true;" onchange="BuildSSBValue(\'' + vSSB + '\');" value="' + iDateQty2 + '" />&nbsp;<select name="' + vSSB + '_rel_date_interval_' + vRow + '" id="' + vSSB + '_rel_date_interval_' + vRow + '" onchange="BuildSSBValue(\'' + vSSB + '\');" onclick="document.getElementById(\'' + vSSB + '_date_type_' + vRow + '_3a\').checked=true;"><option value="min"' + CheckSSBSelected(sTime2, 'min') + '>Minute(s)</option><option value="hours"' + CheckSSBSelected(sTime2, 'hours') + '>Hour(s)</option><option value="days"' + CheckSSBSelected(sTime2, 'days') + '>Day(s)</option><option value="weeks"' + CheckSSBSelected(sTime2, 'weeks') + '>Week(s)</option><option value="months"' + CheckSSBSelected(sTime2, 'months') + '>Month(s)</option><option value="quarters"' + CheckSSBSelected(sTime2, 'quarters') + '>Quarter(s)</option><option value="year"' + CheckSSBSelected(sTime2, 'year') + '>Year(s)</option></select>&nbsp;<select name="' + vSSB + '_rel_date_direction_' + vRow + '" id="' + vSSB + '_rel_date_direction_' + vRow + '" onchange="BuildSSBValue(\'' + vSSB + '\');" onclick="document.getElementById(\'' + vSSB + '_date_type_' + vRow + '_3a\').checked=true;"><option value="-"' + CheckSSBSelected(sWhen2, '-') + '>In Past</option><option value=""' + CheckSSBSelected(sWhen2, '-') + '>In Future</option></select></div>';

				strSBtwn = strSBtwn + '</td></tr></table>';


				document.getElementById(vSSB + '_value_container_' + vRow).innerHTML = strSBtwn;
				document.getElementById(vSSB + '_date_col_' + vRow).innerHTML = '<input type="checkbox" name="' + vSSB + '_dateshow_' + vRow + '" id="' + vSSB + '_dateshow_' + vRow + '" value="date" onclick="ShowSSBDates(\'' + vSSB + '\', \'' + vRow + '\');"' + sDateCheck + ' />';
				document.getElementById(vSSB + '_numeric_col_' + vRow).innerHTML = '<input type="checkbox" name="' + vSSB + '_numeric_' + vRow + '" id="' + vSSB + '_numeric_' + vRow + '" value="@" onclick="SSBUseNumeric(\'' + vSSB + '\', \'' + vRow + '\');"' + sNumCheck + ' />';

				break;

			case 'isnumeric': case 'isdate': case 'isnull':
				document.getElementById(vSSB + '_value_container_' + vRow).innerHTML = '&nbsp;';
				document.getElementById(vSSB + '_date_col_' + vRow).innerHTML = '&nbsp;';
				document.getElementById(vSSB + '_numeric_col_' + vRow).innerHTML = '&nbsp;';

				break;

			case 'searchflagoff': case 'searchflagon':
				document.getElementById(vSSB + '_value_container_' + vRow).innerHTML = 'Bit&nbsp;Position:&nbsp;<input type="text" name="' + vSSB + '_value_' + vRow + '" id="' + vSSB + 'value_' + vRow + '" value="' + sVal1 + '" size="5" maxlength="5" onkeypress="return NumbersOnly(this, event);" onchange="BuildSSBValue(\'' + vSSB + '\');" />';
				document.getElementById(vSSB + '_date_col_' + vRow).innerHTML = '&nbsp;';
				document.getElementById(vSSB + '_numeric_col_' + vRow).innerHTML = '&nbsp;';

				break;

			case 'searchgreaterthan': case 'searchgreaterthanequal': case 'searchlessthan': case 'searchlessthanequal': case 'searchexact': case 'searchlike':
				aSSBCals[vRow] = [new CalendarPopup("super_cal_popup")];
				aSSBCals[vRow][0].showYearNavigation();

				var strSBtwn = '';

				strSBtwn = '<span style="display: none;" id="' + vSSB + '_date_radio_' + vRow + '_1"><input type="radio" name="' + vSSB + '_date_type_' + vRow + '" id="' + vSSB + '_date_type_' + vRow + '_1" value="1" onclick="BuildSSBValue(\'' + vSSB + '\');"';
				
				if (iDateType1=='1'){
					strSBtwn = strSBtwn + ' checked';
				}

				strSBtwn = strSBtwn + ' /></span>';
				
				strSBtwn = strSBtwn + '<input type="text" name="' + vSSB + '_value_' + vRow + '" id="' + vSSB + '_value_' + vRow + '" value="' + sVal1 + '" onblur="BuildSSBValue(\'' + vSSB + '\');" />'

				strSBtwn = strSBtwn + '&nbsp;<span style="display: none;" id="' + vSSB + '_date_container_' + vRow + '_1"><a href="javascript:void(0);" onClick="aSSBCals[' + vRow + '][0].select(document.getElementById(\'' + vSSB + '_value_' + vRow + '\'),\'' + vSSB + '_anchor' + vRow + '\',\'MM/dd/yyyy\'); return false; BuildSSBValue(\'' + vSSB + '\');" name="' + vSSB + '_anchor' + vRow + '" id="' + vSSB + '_anchor' + vRow + '" onblur="BuildSSBValue(\'' + vSSB + '\');"><img src="common_images/supercal.jpg" alt="" title="" border="0" align="absmiddle" /></a></span>';

				strSBtwn = strSBtwn + '<div id="' + vSSB + '_date_radio_' + vRow + '_2" style="display: none;"><input type="radio" name="' + vSSB + '_date_type_' + vRow + '" id="' + vSSB + '_date_type_' + vRow + '_2" value="2" onclick="BuildSSBValue(\'' + vSSB + '\');"';
				
				if (iDateType1=='2'){
					strSBtwn = strSBtwn + ' checked';
				}

				strSBtwn = strSBtwn + ' /><label for="' + vSSB + '_date_type_' + vRow + '_2">Now</label></div>';
				
				strSBtwn = strSBtwn + '<div id="' + vSSB + '_date_radio_' + vRow + '_3" style="display: none;"><input type="radio" name="' + vSSB + '_date_type_' + vRow + '" id="' + vSSB + '_date_type_' + vRow + '_3" value="3" onclick="BuildSSBValue(\'' + vSSB + '\');"';
				
				if (iDateType1=='3'){
					strSBtwn = strSBtwn + ' checked';
				}

				strSBtwn = strSBtwn + ' /><input type="text" name="' + vSSB + '_rel_date_qty_' + vRow + '" id="' + vSSB + '_rel_date_qty_' + vRow + '" size="3" maxlength="3" onkeypress="return NumbersOnly(this, event);" onclick="document.getElementById(\'' + vSSB + '_date_type_' + vRow + '_3\').checked=true;" onchange="BuildSSBValue(\'' + vSSB + '\');" value="' + iDateQty1 + '" />&nbsp;<select name="' + vSSB + '_rel_date_interval_' + vRow + '" id="' + vSSB + '_rel_date_interval_' + vRow + '" onchange="BuildSSBValue(\'' + vSSB + '\');" onclick="document.getElementById(\'' + vSSB + '_date_type_' + vRow + '_3\').checked=true;"><option value="min"' + CheckSSBSelected(sTime1, 'min') + '>Minute(s)</option><option value="hours"' + CheckSSBSelected(sTime1, 'hours') + '>Hour(s)</option><option value="days"' + CheckSSBSelected(sTime1, 'days') + '>Day(s)</option><option value="weeks"' + CheckSSBSelected(sTime1, 'weeks') + '>Week(s)</option><option value="months"' + CheckSSBSelected(sTime1, 'months') + '>Month(s)</option><option value="quarters"' + CheckSSBSelected(sTime1, 'quarters') + '>Quarter(s)</option><option value="year"' + CheckSSBSelected(sTime1, 'year') + '>Year(s)</option></select>&nbsp;<select name="' + vSSB + '_rel_date_direction_' + vRow + '" id="' + vSSB + '_rel_date_direction_' + vRow + '" onchange="BuildSSBValue(\'' + vSSB + '\');" onclick="document.getElementById(\'' + vSSB + '_date_type_' + vRow + '_3\').checked=true;"><option value="-"' + CheckSSBSelected(sWhen1, '-') + '>In Past</option><option value=""' + CheckSSBSelected(sWhen1, '') + '>In Future</option></select></div>';

				document.getElementById(vSSB + '_value_container_' + vRow).innerHTML = strSBtwn;
				document.getElementById(vSSB + '_date_col_' + vRow).innerHTML = '<input type="checkbox" name="' + vSSB + '_dateshow_' + vRow + '" id="' + vSSB + '_dateshow_' + vRow + '" value="date" onclick="ShowSSBDates(\'' + vSSB + '\', \'' + vRow + '\');"' + sDateCheck + ' />';
				document.getElementById(vSSB + '_numeric_col_' + vRow).innerHTML = '<input type="checkbox" name="' + vSSB + '_numeric_' + vRow + '" id="' + vSSB + '_numeric_' + vRow + '" value="@" onclick="SSBUseNumeric(\'' + vSSB + '\', \'' + vRow + '\');"' + sNumCheck + ' />';

				break;

			case 'searchzipcodeprox':
				document.getElementById(vSSB + '_value_container_' + vRow).innerHTML = 'ZIP&nbsp;Code:&nbsp;<input type="text" name="' + vSSB + '_value_' + vRow + '" id="' + vSSB + '_value_' + vRow + '" value="' + sVal1 + '" size="5" maxlength="5" onkeypress="return NumbersOnly(this, event);" onchange="BuildSSBValue(\'' + vSSB + '\');" /><br/>Proximity&nbsp;in&nbsp;Miles:&nbsp;<input type="text" name="' + vSSB + '_value_' + vRow + '_2" id="' + vSSB + '_value_' + vRow + '_2" value="' + sVal2 + '" size="5" onkeypress="return NumbersOnly(this, event);" onchange="BuildSSBValue(\'' + vSSB + '\');" /><br/><input type="checkbox" name="' + vSSB + '_value_' + vRow + '_3" id="' + vSSB + '_value_' + vRow + '_3" value="1" onclick="BuildSSBValue(\'' + vSSB + '\');"' + sVal3 + ' /><label for="' + vSSB + '_value_' + vRow + '_3">Show Distance</label>';
				document.getElementById(vSSB + '_date_col_' + vRow).innerHTML = '&nbsp;';
				document.getElementById(vSSB + '_numeric_col_' + vRow).innerHTML = '&nbsp;';

				break;

			default:
				document.getElementById(vSSB + '_value_container_' + vRow).innerHTML = '<input type="text" name="' + vSSB + '_value_' + vRow + '" id="' + vSSB + '_value_' + vRow + '" value="' + sVal1 + '" onchange="BuildSSBValue(\'' + vSSB + '\');" />';
				document.getElementById(vSSB + '_date_col_' + vRow).innerHTML = '&nbsp;';
				document.getElementById(vSSB + '_numeric_col_' + vRow).innerHTML = '<input type="checkbox" name="' + vSSB + '_numeric_' + vRow + '" id="' + vSSB + '_numeric_' + vRow + '" value="@" onclick="SSBUseNumeric(\'' + vSSB + '\', \'' + vRow + '\');"' + sNumCheck + ' />';

		}

		BuildSSBValue(vSSB);

	}

	function SSBUseNumeric(vSSB, vRow){
		try{
			if (document.getElementById(vSSB + '_numeric_' + vRow).checked==true){
				if (isNaN(document.getElementById(vSSB + '_value_' + vRow).value)){
					document.getElementById(vSSB + '_value_' + vRow).value = '';
				}

				if (document.getElementById(vSSB + '_searchcommand_' + vRow).value=='searchbetween'){
					if (isNaN(document.getElementById(vSSB + '_value_' + vRow + '_2').value)){
						document.getElementById(vSSB + '_value_' + vRow + '_2').value = '';
					}
				}

				document.getElementById(vSSB + '_dateshow_' + vRow).checked = false;
				ShowSSBDates(vSSB, vRow);
			} else {
				BuildSSBValue(vSSB);
			}
		}
		catch (err){
			//alert(err.message);
			BuildSSBValue(vSSB);
		}
	}

	function ShowSSBDates(vSSB, vRow){
		try{
			if (document.getElementById(vSSB + '_dateshow_' + vRow).checked==true){
				document.getElementById(vSSB + '_date_radio_' + vRow + '_1').style.display = 'inline';
				document.getElementById(vSSB + '_date_radio_' + vRow + '_2').style.display = 'block';
				document.getElementById(vSSB + '_date_radio_' + vRow + '_3').style.display = 'block';
				document.getElementById(vSSB + '_date_container_' + vRow + '_1').style.display = 'inline';
				document.getElementById(vSSB + '_numeric_' + vRow).checked = false;

				if (document.getElementById(vSSB + '_searchcommand_' + vRow).value=='searchbetween'){
					document.getElementById(vSSB + '_date_radio_' + vRow + '_1a').style.display = 'inline';
					document.getElementById(vSSB + '_date_radio_' + vRow + '_2a').style.display = 'block';
					document.getElementById(vSSB + '_date_radio_' + vRow + '_3a').style.display = 'block';
					document.getElementById(vSSB + '_date_container_' + vRow + '_2').style.display = 'inline';
				}

			} else {
				document.getElementById(vSSB + '_date_radio_' + vRow + '_1').style.display = 'none';
				document.getElementById(vSSB + '_date_radio_' + vRow + '_2').style.display = 'none';
				document.getElementById(vSSB + '_date_radio_' + vRow + '_3').style.display = 'none';
				document.getElementById(vSSB + '_date_container_' + vRow + '_1').style.display = 'none';
				document.getElementById(vSSB + '_date_type_' + vRow + '_1').checked = true;

				if (document.getElementById(vSSB + '_searchcommand_' + vRow).value=='searchbetween'){
					document.getElementById(vSSB + '_date_type_' + vRow + '_1a').checked = true;
					document.getElementById(vSSB + '_date_radio_' + vRow + '_1a').style.display = 'none';
					document.getElementById(vSSB + '_date_radio_' + vRow + '_2a').style.display = 'none';
					document.getElementById(vSSB + '_date_radio_' + vRow + '_3a').style.display = 'none';
					document.getElementById(vSSB + '_date_container_' + vRow + '_2').style.display = 'none';
				}

			}

		}
		catch (err){
			//alert(err.message);
		}

		BuildSSBValue(vSSB);
	}

	function SSBLoadInitial(vSSB){
		var aFilters = document.getElementById(vSSB + '_initial_value').value.split('|');
		var aFilterInfo = new Array();
		var strType = '';

		var bL1 = false;
		var bL2 = false;
		var bR1 = false;
		var bR2 = false;
		var bNot = false;
		var bDate = false;
		var iDateType1 = 1;
		var iDateType2 = 1;
		var bNum = false;
		var sVal1 = '';
		var sVal2 = '';
		var sVal3 = '';

		try{
			
			for (var iFilter = 0; iFilter < aFilters.length; iFilter++){

				bL1 = false;
				bL2 = false;
				bR1 = false;
				bR2 = false;
				bNot = false;
				bDate = false;
				iDateType1 = 1;
				iDateType2 = 1;
				bNum = false;
				sVal1 = '';
				sVal2 = '';
				sVal3 = '';

				if ((aFilters[iFilter]=='or')||(aFilters[iFilter]=='and')){
					switch (aFilters[iFilter]){
						case 'or':
							strType = '|or|';
							break;
						default :
							strType = '|and|';
					}

					iFilter++;
				} else {
					strType = '';
				}

				aFilterInfo = aFilters[iFilter].split('~');

				if (left(aFilterInfo[0], 2)=='(('){
					bL1 = true;
					bL2 = true;
				} else if (left(aFilterInfo[0], 1)=='('){
					bL1 = true;
				}
				
				aFilterInfo[0] = aFilterInfo[0].replace(/\(/g, '');

				if (right(aFilterInfo[0], 3)=='not'){
					bNot = true;
					aFilterInfo[0] = left(aFilterInfo[0], (aFilterInfo[0].length - 3));
				}

				if (right(aFilterInfo[1], 2)=='))'){
					bR1 = true;
					bR2 = true;
				} else if (right(aFilterInfo[1], 1)==')'){
					bR1 = true;
				}

				aFilterInfo[1] = aFilterInfo[1].replace(/\)/g, '');

				switch (aFilterInfo[0]){
					case 'searchzipcodeprox':
						sVal1 = aFilterInfo[2];
						sVal2 = aFilterInfo[3];

						if (right(aFilterInfo[4], 2)=='))'){
							bR1 = true;
							bR2 = true;
						} else if (right(aFilterInfo[4], 1)==')'){
							bR1 = true;
						}

						sVal3 = aFilterInfo[4].replace(/\)/g, '');

						break;
					case 'searchbetween':
						if (left(aFilterInfo[2], 1)=='@'){
							bNum = true;
						}

						if (isDate(aFilterInfo[2])){
							bDate = true;
						} else if (left(aFilterInfo[2], 7)=='<<now>>'){
							bDate = true;
							iDateType1 = 2;
						} else if (left(aFilterInfo[2], 9)=='<<dateadd'){
							bDate = true;
							iDateType1 = 3;
						}

						if (isDate(aFilterInfo[3])){
							bDate = true;
						} else if (left(aFilterInfo[3], 7)=='<<now>>'){
							bDate = true;
							iDateType2 = 2;
						} else if (left(aFilterInfo[3], 9)=='<<dateadd'){
							bDate = true;
							iDateType2 = 3;
						}

						sVal1 = aFilterInfo[2].replace(new RegExp('@', 'g'), '');
						aFilterInfo[3] = aFilterInfo[3].replace(new RegExp('@', 'g'), '');

						if (right(aFilterInfo[3], 2)=='))'){
							bR1 = true;
							bR2 = true;
						} else if (right(aFilterInfo[3], 1)==')'){
							bR1 = true;
						}

						sVal2 = aFilterInfo[3].replace(/\)/g, '');

						break;
					case 'isnumeric': case 'isdate': case 'isnull':
						break;
					default:
						if (left(aFilterInfo[2], 1)=='@'){
							bNum = true;
						}

						if (isDate(aFilterInfo[2])){
							bDate = true;
						} else if (left(aFilterInfo[2], 7)=='<<now>>'){
							bDate = true;
							iDateType1 = 2;
						} else if (left(aFilterInfo[2], 9)=='<<dateadd'){
							bDate = true;
							iDateType1 = 3;
						}

						aFilterInfo[2] = aFilterInfo[2].replace(new RegExp('@', 'g'), '');

						if (right(aFilterInfo[2], 2)=='))'){
							bR1 = true;
							bR2 = true;
						} else if (right(aFilterInfo[2], 1)==')'){
							bR1 = true;
						}

						sVal1 = aFilterInfo[2].replace(/\)/g, '');

				}

				AddSSBFilter(vSSB, Array(bL1, bL2, strType, aFilterInfo[0], aFilterInfo[1], bNum, bDate, sVal1, sVal2, sVal3, iDateType1, iDateType2, bR2, bR1, bNot));
			}

			if ((document.getElementById(vSSB + '_admin_mode')=='1')||(getQueryVariable('action')=='showpostfield')||(getQueryVariable('showpostfield')=='1')||(getQueryVariable('action')=='showdebug')||(getQueryVariable('showdebug')=='1')){
				if (document.getElementById(vSSB + '_initial_value').value==''){
					document.getElementById(vSSB + '_status').innerHTML = '';
					document.getElementById(vSSB + '_status').style.color = '#000000';
				} else if (document.getElementById(vSSB).value==document.getElementById(vSSB + '_initial_value').value){
					document.getElementById(vSSB + '_status').innerHTML = 'The search string has loaded correctly.';
					document.getElementById(vSSB + '_status').style.color = '#00C000';
				} else if ((document.getElementById(vSSB + '_initial_value').value.length - document.getElementById(vSSB).value.length) <= 100 ){
					document.getElementById(vSSB + '_status').innerHTML = 'There was a minor issue loading the search string.';
					document.getElementById(vSSB + '_status').style.color = '#C0C000';
				} else {
					document.getElementById(vSSB + '_status').innerHTML = 'There was major issues loading the search string.';
					document.getElementById(vSSB + '_status').style.color = '#C00000';
				}
			}
		}
		catch (err){
			//alert(err.message);
		}

	}

	/************************************************************************************
	*** END SEARCH STRING FUNCTIONS *****************************************************
	************************************************************************************/


	/************************************************************************************
	*** START GENERAL FUNCTIONS *********************************************************
	************************************************************************************/

	// Trim white space from beginning and end of string
	function trim(stringToTrim) {
		return stringToTrim.replace(/^\s+|\s+$/g,"");
	}

	// URL Encode a string
	function URLEncode(string) {
		// The Javascript escape and unescape functions do not correspond
		// with what browsers actually do...
		var SAFECHARS = "0123456789" +					// Numeric
						"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
						"abcdefghijklmnopqrstuvwxyz" +
						"-_.!~*'()";					// RFC2396 Mark characters
		var HEX = "0123456789ABCDEF";

		var plaintext = string
		var encoded = "";
		for (var i = 0; i < plaintext.length; i++ ) {
			var ch = plaintext.charAt(i);
			if (ch == " ") {
				encoded += "+";				// x-www-urlencoded, rather than %20
			} else if (SAFECHARS.indexOf(ch) != -1) {
				encoded += ch;
			} else {
				var charCode = ch.charCodeAt(0);
				// Unicode Character cannot be encoded using standard URL encoding. (URL encoding only supports 8-bit characters.) A space (+) will be substituted."
				if (charCode > 255) {
					encoded += "+";
				} else {
					encoded += "%";
					encoded += HEX.charAt((charCode >> 4) & 0xF);
					encoded += HEX.charAt(charCode & 0xF);
				}
			}
		} // for

		return encoded;
	};

	// Is an array?
	function isArray() {
		return arguments[0] instanceof Array;
	}

	// Is a regular expression?
	function isRegExp() {
		return arguments[0] instanceof RegExp;
	}
				
	// Is a string?
	function isString() {
		if (typeof arguments[0] == 'string')
			return true;
		if (typeof arguments[0] == 'object') { 
			var criterion = arguments[0].constructor.toString().match(/string/i); 
			return (criterion != null); 
		}
		return false;
	}


	// Divide a string in to two parts on a divider
	function divide(string, divider) {
		var strReplace = genID();
		string = string.replace(divider,strReplace);	
		return Array(string.split(strReplace)[0],string.split(strReplace)[1]);
	}

	// Create an XMLHttpRequest object
	function createRequestObject(){
		var request_o;
		var browser = navigator.appName;
		if(browser == "Microsoft Internet Explorer"){
			request_o = new ActiveXObject("Microsoft.XMLHTTP");
		}else{
			request_o = new XMLHttpRequest();
		}
		return request_o;
	}
	
	// Decimal to Hexadecimal
	function dec2hex(dec) {
		var hD="0123456789ABCDEF";
		var hex = hD.substr(dec&15,1);
		while (dec>15) {
			dec >>= 4;
			hhex = hD.substr(dec&15,1) + hex;
		}
		return hex;
	}

	// Hexadecimal to Decimal
	function hex2ddec(hex) {
		return parseInt(hex,16);
	} 

	// Generate 32 character hex ID
	function genID() {
		var id = "";
		var i;
		for (i = 0; i < 32; i++) {
			id = id + dec2hex(Math.round(16*Math.random()));
		}
		return id;
	}

	function left(str, n){
		if (n <= 0)
			return "";
		else if (n > String(str).length)
			return str;
		else
			return String(str).substring(0,n);
	}

	function right(str, n){
		if (n <= 0)
		   return "";
		else if (n > String(str).length)
		   return str;
		else {
		   var iLen = String(str).length;
		   return String(str).substring(iLen, iLen - n);
		}
	}

	function mid(str, start, len){
	// Make sure start and len are within proper bounds
		if (start < 0 || len < 0) return "";
		var iEnd, iLen = String(str).length;
		if (start + len > iLen)
			  iEnd = iLen;
		else
			  iEnd = start + len;
		return String(str).substring(start,iEnd);
	}

	function NumbersOnly(myfield, e){
		var key;
		var keychar;

		if (window.event)
		   key = window.event.keyCode;
		else if (e)
		   key = e.which;
		else
		   return true;
		keychar = String.fromCharCode(key);

		// control keys
		if ((key==null) || (key==0) || (key==8) || (key==9) || (key==27) )
		   return true;

		// no enters or spaces
		else if ((key==13) || (key==32))
			return false;

		// only one deicmal
		else if (keychar=='.' && myfield.value.indexOf('.')>-1)
			return false;

		// numbers
		else if ((("0123456789").indexOf(keychar) > -1))
		   return true;

		else
		   return false;
	}

	function getQueryVariable(vQSVar) {
		var strQuery = window.location.search.substring(1);
		var aVars = strQuery.split('&');
		for (var iVar = 0; iVar < aVars.length; iVar++) {
			var aQS = aVars[iVar].split('=');
			if (aQS[0]==vQSVar) {
				return aQS[1];
			}
		} 
	}

	function isDate(dateStr) {

		var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
		var matchArray = dateStr.match(datePat); // is the format ok?

		if (matchArray == null) {
			//alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
			return false;
		}

		month = matchArray[1]; // p@rse date into variables
		day = matchArray[3];
		year = matchArray[5];

		if (month < 1 || month > 12) { // check month range
			//alert("Month must be between 1 and 12.");
			return false;
		}

		if (day < 1 || day > 31) {
			//alert("Day must be between 1 and 31.");
			return false;
		}

		if ((month==4 || month==6 || month==9 || month==11) && day==31) {
			//alert("Month "+month+" doesn`t have 31 days!")
			return false;
		}

		if (month == 2) { // check for february 29th
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
			if (day > 29 || (day==29 && !isleap)) {
				//alert("February " + year + " doesn`t have " + day + " days!");
				return false;
			}
		}

		return true; // date is valid
	}

	/************************************************************************************
	*** END GENERAL FUNCTIONS *********************************************************
	*************************************************************************************/