
	/************************************************************************************
	*** 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_OpenFieldFind(windowTitle, windowText, fields, closeFunction, popwidth, popheight, tablekey, aliasfield, tablelist, appendalias, useStagingDB, isMgrFront) {
		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 sStagingDB = '';

		if (useStagingDB==true){
			sStagingDB = '&db_type=staging';
		}

		document.getElementById('lightbox_search_results').innerHTML =
			'<iframe scrolling="yes" frameborder="0" width="100%" height="100%" marginheight="5" marginwidth="5" src="' + 
				'i_i_' + mgrPrefix + 'field_finder.asp' +
				'?fields=' + fields +
				'&func=' + URLEncode(closeFunction) +
				'&wdbst_key=' + tablekey +
				'&alias=' + URLEncode(aliasfield) +
				'&tables=' + tablelist +
				'&append_alias=' + appendalias +
				sStagingDB +
			'"></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_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, radiokey, prepopradio) {
		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) +
				'&radiokey=' + URLEncode(radiokey) +
				'&preselect=' + URLEncode(prepopradio) +
				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 ShowDebug(vQuestion, vTitle, vDesc){
		lightbox_bIsOpen = true;

		popwidth = 800;
		popheight = 600;

		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();

		document.getElementById('lightbox_search_results').innerHTML = document.getElementById(vQuestion).innerHTML;
		document.getElementById('lightbox_search_section').style.display = 'none';
		document.getElementById('lightbox_header').innerHTML = vTitle;
		document.getElementById('lightbox_desc').innerHTML = vDesc;

		// 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] != '') {
				switch (aTypes[i].toLower){
					case 'html':
						document.getElementById(aFields[i]).innerHTML = aValues[i];
						break;
					case 'image':
						document.getElementById(aFields[i]).src = aValues[i];
						break;
					default:
						document.getElementById(aFields[i]).value = aValues[i];
						break;
				}
				if (aTypes[i]=='html'){
					document.getElementById(aFields[i]).innerHTML = aValues[i];
				} else {
					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(vMSB, vText, vValue){
		var newOpt = new Option(vText, vValue);
		var iSelLength = document.getElementById(vMSB).length;
		document.getElementById(vMSB).options[iSelLength] = newOpt;
	}

	function DeleteMSBOptions(vMSB, vIndex){
		var iSelLength = document.getElementById(vMSB).length;
		if (iSelLength > 0){
			document.getElementById(vMSB).options[vIndex] = null;
		}
	}

	function MoveMSBOptions(vMSB, vType){
		var sFromBox = '';
		var sToBox = '';
		
		if (vType=='sel'){
			sFromBox = vMSB + '_avail';
			sToBox = vMSB + '_visible';
		} else {
			sToBox = vMSB + '_avail';
			sFromBox = vMSB + '_visible';
		}

		var iSelLength = document.getElementById(sFromBox).length;
		var aSelectedText = new Array();
		var aSelectedValues = new Array();
		var iSelectedCount = 0;

		var iOpt;

		// Find the selected Options in reverse order
		// and delete them from the 'from' Select.
		for (iOpt = iSelLength - 1; iOpt >= 0; iOpt--){
			if (document.getElementById(sFromBox).options[iOpt].selected){
				aSelectedText[iSelectedCount] = document.getElementById(sFromBox).options[iOpt].text;
				aSelectedValues[iSelectedCount] = document.getElementById(sFromBox).options[iOpt].value;
				DeleteMSBOptions(sFromBox, iOpt);
				iSelectedCount++;
			}
		}

		// 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 (iOpt = iSelectedCount - 1; iOpt >= 0; iOpt--){
			AddMSBOptions(sToBox, aSelectedText[iOpt], aSelectedValues[iOpt]);
		}

		MSBDuplicator(vMSB);
	}

	function MSBSwap(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;
	}

	function MoveMSBItemUp(vMSB){
		//find the index of the item selected
		var iLen = document.getElementById(vMSB + '_visible').options.length;
		if (iLen==0){
			return false;
		}

		if (document.getElementById(vMSB + '_visible').options[0].selected) {
			return true;
		}

		for (var iOpt = 1; iOpt < iLen; iOpt++) {
			if (document.getElementById(vMSB + '_visible').options[iOpt].selected) {
				MSBSwap(document.getElementById(vMSB + '_visible').options[iOpt], document.getElementById(vMSB + '_visible').options[iOpt-1]);
			}
		}

		MSBDuplicator(vMSB);
		return true;
	}

	function MoveMSBItemDown(vMSB){
		//find the index of the item selected
		var iLen = document.getElementById(vMSB + '_visible').options.length;
		if (iLen==0){
			return false;
		}

		iLen -= 1;

		if (document.getElementById(vMSB + '_visible').options[iLen].selected){
			return true;
		}

		for (var iOpt = iLen - 1; iOpt >= 0; iOpt--) {
			if (document.getElementById(vMSB + '_visible').options[iOpt].selected) {
				MSBSwap(document.getElementById(vMSB + '_visible').options[iOpt], document.getElementById(vMSB + '_visible').options[iOpt+1]);
			}
		}

		MSBDuplicator(vMSB);
		return true;
	}

	function MSBDuplicator(vMSB){
		var bFirst = true;
		var bUsePos = document.getElementById(vMSB + '_use_pos').value;

		var iLen = document.getElementById(vMSB + '_visible').length;
		var iOpt = 0;

		var strPosField = document.getElementById(vMSB + '_pos_field').value;
		var strSpacer = document.getElementById(vMSB + '_spacer').value;
		var strValue = '';

		for (iOpt = 0; iOpt < iLen; iOpt++) {
			if (!bFirst) {
				strValue = strValue + strSpacer
			}

			bFirst = false;
			strValue = strValue + document.getElementById(vMSB + '_visible').options[iOpt].value;

			if (bUsePos=='true'){
				strValue = strValue + '|' + strPosField + '=' + iOpt;
			}
		}

		document.getElementById(vMSB).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 bDistRecs = document.getElementById(vMI + '_distinct_recs').value;
			var strDist = document.getElementById(vMI + '_distinct_field').value;
			var oDistInput = document.getElementById(vMI + '_distinct_input');
			var strMIValID = document.getElementById(vMI + '_validation_key').value;
			var iEditMode = document.getElementById(vMI + '_edit_mode').value;
			var oSelect = document.getElementById(vMI + '_visible');

			var strFieldType = '';
			var strFieldValue = '';
			oDistInput.value = '1';

			if ((bDistRecs=='true')&&(strDist!='')){
				for (iOpts = 0; iOpts < oSelect.options.length; iOpts++){
					if (left(oSelect.options[iOpts].value, document.getElementById(vMI + '_' + strDist).value.length)==document.getElementById(vMI + '_' + strDist).value){
						if ((iEditMode=='1')&&(oSelect.options[iOpts].selected==true)){
							// Do nothing
						} else {
							oDistInput.value = '0';
						}
					}
				}
			}

			if (document.getElementById(vMI + '_limit_chars').value=='true'){
				MICalcChars(vMI);
			}

			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 (aMIFields[iF]==document.getElementById(vMI + '_field_to_limit').value){
						var iCurLen = parseInt(document.getElementById(vMI + '_chars_submitted').value);
						document.getElementById(vMI + '_chars_submitted').value = iCurLen + strFieldValue.length;
					}

					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', strDString, strAString);
					document.getElementById(vMI + '_edit_mode').value = '0';
					document.getElementById(vMI + '_visible').disabled = false;

					try{
						document.getElementById(vMI + '_edit_link').style.display = 'inline';
					}
					catch (err){
					}

					try{
						document.getElementById(vMI + '_clone_link').style.display = 'inline';
					}
					catch (err){
					}

					try{
						document.getElementById(vMI + '_add_image').src = document.getElementById(vMI + '_add_image_path').value;
						document.getElementById(vMI + '_add_image').title = 'Add';
					}
					catch (err){
					}

					try{
						document.getElementById(vMI + '_remove_image').src = document.getElementById(vMI + '_remove_image_path').value;
						document.getElementById(vMI + '_remove_image').title = 'Remove Selected';
					}
					catch (err){
					}

					try{
						document.getElementById(vMI + '_remove_all_link').style.display = 'inline';
					}
					catch (err){
					}

					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)
			}

			MICheckEntryLimit(vMI, false);
			//alert(document.getElementById(vMI + '_visible').options.length);
		}

		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(vField + '_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;

				try{
					document.getElementById(vMI + '_edit_link').style.display = 'none';
				}
				catch (err){
				}

				try{
					document.getElementById(vMI + '_clone_link').style.display = 'none';
				}
				catch (err){
				}

				try{
					document.getElementById(vMI + '_add_image').src = document.getElementById(vMI + '_save_image_path').value;
					document.getElementById(vMI + '_add_image').title = 'Save Changes';
					document.getElementById(vMI + '_add_link').href = 'javascript:MIBuildAnswer(\'' + vMI + '\');void(0);';
				}
				catch (err){
				}

				try{
					document.getElementById(vMI + '_remove_image').src = document.getElementById(vMI + '_cancel_image_path').value;
					document.getElementById(vMI + '_remove_image').title = 'Cancel Changes';
				}
				catch (err){
				}

				try{
					document.getElementById(vMI + '_remove_all_link').style.display = 'none';
				}
				catch (err){
				}

				try{
					document.getElementById(vMI + '_move_up').style.display = 'none';
					document.getElementById(vMI + '_move_down').style.display = 'none';
				}
				catch (err){
				}

				if (bUseXML=='true'){
					//I kinda need to write this still...
				} 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==document.getElementById(vMI + '_field_to_limit').value)&&(document.getElementById(vMI + '_limit_chars').value=='true')){
						var iCurLen = parseInt(document.getElementById(vMI + '_chars_submitted').value);
						document.getElementById(vMI + '_chars_submitted').value = iCurLen - strValue.length;
						MICalcChars(vMI);
					}

					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) {
							if (document.getElementById(vMI + '_limit_chars').value=='true'){
								var strSelectedAnswer = document.getElementById(vMI + '_visible').options[iClone].value;
								var strAString = document.getElementById(vMI + '_answer_string').value;
								var aDelimeters = strAString.split(/<=[0-9a-z_-]*=>/gi);
								var strKey = '';
								var strValue = '';

								// Loop through delimeters
								if(aDelimeters.length != 0) {
									for (var 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];

										strAString = MIDivide(strAString, aDelimeters[iDelim])[1];
										strSelectedAnswer = MIDivide(strSelectedAnswer, aDelimeters[iDelim])[1];
									}
								}
								strKey = strAString.replace(/<=|=>/gi,'');
								strValue = strSelectedAnswer;

								if ((strKey==document.getElementById(vMI + '_field_to_limit').value)){
									var iRemain = parseInt(document.getElementById(vMI + '_chars_remaining').value);
									if (strValue.length < iRemain){
										var iCurLen = parseInt(document.getElementById(vMI + '_chars_submitted').value);
										document.getElementById(vMI + '_chars_submitted').value = iCurLen + strValue.length;

										MIAddOpt(vMI + '_visible', document.getElementById(vMI + '_visible').options[iClone].value, document.getElementById(vMI + '_visible').options[iClone].text);

										MICalcChars(vMI);

									} else {
										alert('The cloning process has halted because there are not enough remaining characters to continue.');
										break;
									}
								}
							} else {
								MIAddOpt(vMI + '_visible', document.getElementById(vMI + '_visible').options[iClone].value, document.getElementById(vMI + '_visible').options[iClone].text);
							}
						}
					}

					MIDuplicate(vMI)
				}

				MICheckEntryLimit(vMI, false);
			}
		}

		// 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;

				try{
					document.getElementById(vMI + '_edit_link').style.display = 'inline';
				}
				catch (err){
				}

				try{
					document.getElementById(vMI + '_clone_link').style.display = 'inline';
				}
				catch (err){
				}

				try{
					document.getElementById(vMI + '_add_image').src = document.getElementById(vMI + '_add_image_path').value;
					document.getElementById(vMI + '_add_image').title = 'Add';
				}
				catch (err){
				}
				
				try{
					document.getElementById(vMI + '_remove_image').src = document.getElementById(vMI + '_remove_image_path').value;
					document.getElementById(vMI + '_remove_image').title = 'Remove Selected';
				}
				catch (err){
				}

				try{
					document.getElementById(vMI + '_remove_all_link').style.display = 'inline';
				}
				catch (err){
				}

				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) {

							if (document.getElementById(vMI + '_limit_chars').value=='true'){
								var strSelectedAnswer = document.getElementById(vMI + '_visible').options[iRemove].value;
								var strAString = document.getElementById(vMI + '_answer_string').value;
								var aDelimeters = strAString.split(/<=[0-9a-z_-]*=>/gi);
								var strKey = '';
								var strValue = '';

								// Loop through delimeters
								if(aDelimeters.length != 0) {
									for (var 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];

										strAString = MIDivide(strAString, aDelimeters[iDelim])[1];
										strSelectedAnswer = MIDivide(strSelectedAnswer, aDelimeters[iDelim])[1];
									}
								}
								strKey = strAString.replace(/<=|=>/gi,'');
								strValue = strSelectedAnswer;

								if (strKey==document.getElementById(vMI + '_field_to_limit').value){
									var iRemain = parseInt(document.getElementById(vMI + '_chars_remaining').value);
									var iCurLen = parseInt(document.getElementById(vMI + '_chars_submitted').value);
									document.getElementById(vMI + '_chars_submitted').value = iCurLen - strValue.length;

									MICalcChars(vMI);

								}
							}

							MIDeleteOption(vMI + '_visible', iRemove);
						}
					}

					MIDuplicate(vMI)
				}
			}

			MICheckEntryLimit(vMI, false);

			var strJSFunc = document.getElementById(vMI + '_javascript_func').value;

			if (strJSFunc!=''){
				window.setTimeout(strJSFunc, 1);
			}

		}

		function MIRemoveAllAnswers(vMI, vAlert){
			var bRemove = false;
			if (document.getElementById(vMI + '_visible').options.length > 0){
				if (vAlert==false){
					bRemove = true;
				} else {
					bRemove = confirm('Are you sure you wish to remove ALL entries?');
				}

				if (bRemove==true){
					document.getElementById(vMI).value = '';
					document.getElementById(vMI + '_visible').options.length = 0;
					MIDuplicate(vMI);
					MIResetCalc(vMI);
					MICheckEntryLimit(vMI, false);

					var strJSFunc = document.getElementById(vMI + '_javascript_func').value;

					if (strJSFunc!=''){
						window.setTimeout(strJSFunc, 1);
					}

				}
			}
		}

		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 corresponding 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 bUsePos = document.getElementById(vMI + '_use_pos').value;
			var strPos = document.getElementById(vMI + '_pos_field').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 ((bUsePos=='true')&&(bUseXML!='true')){
					strValue = strValue + '|' + strPos + '=' + iOpt;
				}
			}

			if (bUseXML=='true'){
				strValue = strValue + '</' + strSpacer + '>';
			} 

			document.getElementById(vMI).value = strValue;

			if (strJSFunc!=''){
				window.setTimeout(strJSFunc, 1);
			}
		}

		function MICharacterLimit(vMI){
			var strField = document.getElementById(vMI + '_field_to_limit').value;
			var strLabel = document.getElementById(vMI + '_limit_label');

			var iLimit = parseInt(document.getElementById(vMI + '_char_limit').value);
			var iSubmitted = parseInt(document.getElementById(vMI + '_chars_submitted').value);
			var iRemaining = parseInt(document.getElementById(vMI + '_chars_remaining').value);
			var iCurLen = document.getElementById(vMI + '_' + strField).value.length + 1;
			var iCalc = 0;

			if (iRemaining > 0){
				iCalc = (iLimit - iSubmitted) - iCurLen;

				strLabel.innerHTML = iCalc + ' of ' + iLimit + ' remaining.';
				document.getElementById(vMI + '_chars_remaining').value = iCalc;
				return true;
			} else {
				return false;
			}
		}

		function MICalcChars(vMI){
			var strField = document.getElementById(vMI + '_field_to_limit').value;
			var strLabel = document.getElementById(vMI + '_limit_label');

			var iLimit = parseInt(document.getElementById(vMI + '_char_limit').value);
			var iSubmitted = parseInt(document.getElementById(vMI + '_chars_submitted').value);
			var iCurLen = document.getElementById(vMI + '_' + strField).value.length;
			var iCalc = 0;

			iCalc = (iLimit - iSubmitted) - iCurLen;

			strLabel.innerHTML = iCalc + ' of ' + iLimit + ' remaining.';
			document.getElementById(vMI + '_chars_remaining').value = iCalc;
		}

		function MIResetCalc(vMI){
			var strField = document.getElementById(vMI + '_field_to_limit').value;
			var strLabel = document.getElementById(vMI + '_limit_label');
			var iLimit = parseInt(document.getElementById(vMI + '_char_limit').value);

			document.getElementById(vMI + '_chars_submitted').value = '0';
			document.getElementById(vMI + '_chars_remaining').value = iLimit;

			strLabel.innerHTML = iLimit + ' of ' + iLimit + ' remaining.';

		}

		function MICheckEntryLimit(vMI, vShowMsg){
			var iEntryLimit = document.getElementById(vMI + '_entry_limit').value;
			var iLimit = 0;

			if ((isNaN(iEntryLimit))||(iEntryLimit=='')){
				//Do nothing for now
			} else {
				iLimit = parseInt(iEntryLimit);
			}

			if ((iLimit<=document.getElementById(vMI + '_visible').options.length)&&(iLimit > 0)&&(document.getElementById(vMI + '_visible').options.length > 0)){
				try{
					document.getElementById(vMI + '_clone_link').href = 'javascript:MICheckEntryLimit(\'' + vMI + '\', true);void(0);';
				}
				catch (err){
					//alert(err.message);
				}

				document.getElementById(vMI + '_add_image').src = document.getElementById(vMI + '_add_disabled_image_path').value;
				document.getElementById(vMI + '_add_link').href = 'javascript:MICheckEntryLimit(\'' + vMI + '\', true);void(0);';

				if (vShowMsg){
					alert(document.getElementById(vMI + '_entry_limit_msg').value);
				}

				//return false;
			} else {
				try{
					document.getElementById(vMI + '_clone_link').href = 'javascript:MIClone(\'' + vMI + '\');void(0);';
				}
				catch (err){
					//alert(err.message);
				}

				document.getElementById(vMI + '_add_image').src = document.getElementById(vMI + '_add_image_path').value;
				document.getElementById(vMI + '_add_link').href = 'javascript:MIBuildAnswer(\'' + vMI + '\');void(0);';

				//return true;
			}
		}

	/************************************************************************************
	*** END MULTI INPUT 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) {
		try{
			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 (parseInt(sizeY + (mouseY - tempY) / 13) < initialSizes[currentObj.id][1]){
							currentObj.rows = initialSizes[currentObj.id][1];
						} else {
							currentObj.rows = parseInt(sizeY + (mouseY - tempY) / 13);
						}
					} else if (isNaN(parseInt(currentObj.size))!=true){
						if (parseInt((sizeY + (mouseY - tempY)) / 13) < initialSizes[currentObj.id][1]){
							currentObj.size = initialSizes[currentObj.id][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();
			}
		}
		catch (err){
			//alert(err.message);
		}

	}

	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 aHiders = new Array();
		var aConditions = new Array();

		this.SetFormName = SetFormName;
		this.AddId = AddId;
		this.HideId = HideId;
		this.AddCondition = AddCondition;
		this.Test = Test;

		function SetFormName(vName) {
			this.FormName = vName;
		}

		function AddId(vID) {
			aElements[aElements.length] = vID;
		}

		function HideId(vID) {
			aHiders[aHiders.length] = vID;
		}

		function AddCondition(vName, vType, vValues) {
			//var aArgs = AddCondition.arguments;
			var aArgs = vValues.split('~');

			var aValues = new Array();
			for (var iArgs = 0; iArgs < aArgs.length; iArgs++) {
				aValues[aValues.length] = aArgs[iArgs];
			}

			aConditions[aConditions.length] = [vName, vType, aValues];
		}

		function Test() {
			var bShow = true;
			var bMultilist = false;
			var bPassed = false;
			var strValue;
			var strName;
			var strType;
			for (var iTest = 0; iTest < aConditions.length; iTest++) {
				bMultilist = false;
				bShow = true;
				bPassed = false;

				try{

					strName = aConditions[iTest][0];
					strType = aConditions[iTest][1];
					if ((strType=='radio')||(strType=='flagfield')) {
						strValue = getDispCheckedValue(strName, this.FormName);
					} else if (strType=='checkbox'){
						bMultilist = true;
						strValue = getDispCheckedValue(strName, this.FormName);
					} else {
						strValue = document.getElementById(strName).value;
					}
		
					if (strValue == undefined) {
						strValue = '';
					}
		

					if (bMultilist==true){
						var aValues = strValue.split('|');

						for (var iCondition = 0; iCondition < aConditions[iTest][2].length; iCondition++) {
							for (var iVal = 0; iVal < aValues.length; iVal++){
								if (aValues[iVal] == aConditions[iTest][2][iCondition]) {
									bPassed = true;
								}
							}
						}						
					} else {
						for (var iCondition = 0; iCondition < aConditions[iTest][2].length; iCondition++) {
							if (strValue == aConditions[iTest][2][iCondition]) {
								bPassed = true;
							}
						}
					}
				}
				catch (err){
					//alert(err.message);
				}
			}

			if (!bPassed) {
				bShow = false;
			}					

			for (iElement = 0; iElement < aElements.length; iElement++) {
				try{
					if (bShow) {
						if ((document.getElementById(aElements[iElement]).tagName=='DIV')||(document.getElementById(aElements[iElement]).tagName=='P')){
							document.getElementById(aElements[iElement]).style.display = 'block';
						} else {
							document.getElementById(aElements[iElement]).style.display = 'inline';
						}
					} else {
						document.getElementById(aElements[iElement]).style.display = 'none';
					}					
				}
				catch (err){
					//alert(err.message + '\n\nShow ID: ' + aElements[iElement]);
				}

			}

			for (iHideMe = 0; iHideMe < aHiders.length; iHideMe++) {
				try{
					if (bShow) {
						document.getElementById(aHiders[iHideMe]).style.display = 'none';
					} else {
						if ((document.getElementById(aHiders[iHideMe]).tagName=='DIV')||(document.getElementById(aHiders[iHideMe]).tagName=='P')){
							document.getElementById(aHiders[iHideMe]).style.display = 'block';
						} else {
							document.getElementById(aHiders[iHideMe]).style.display = 'inline';
						}
					}					
				}
				catch (err){
					//alert(err.message + '\n\nHide ID: ' + aHiders[iHideMe]);
				}
			}

		}
	}

	function getDispCheckedValue(vRadioName, vFormName) {
		var oForm;
		var sCheckedVals = '';

		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) {
						if (sCheckedVals==''){
							sCheckedVals = oRadioCheck[iCheck].value;
						} else {
							sCheckedVals = sCheckedVals + '|' + oRadioCheck[iCheck].value;
						}
					}
				}

				return sCheckedVals;

			}
		}
	}

	/************************************************************************************
	*** 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, true) };
		if (xmlDoc == undefined){
			xmlDoc = null;
		}
		xmlHttp.send(xmlDoc);
	}


	function MakeAJASPRequest(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, false) };
		if (xmlDoc == undefined){
			xmlDoc = null;
		}
		xmlHttp.send(xmlDoc);
	}

	function HandleData(fncHandleData, errorMsg, vID, vReturnXML) {
		if (errorMsg == undefined || errorMsg == "") errorMsg = "An error has occured."
		if(xmlHttp.readyState == 4) { //Finished loading the response

			if (vReturnXML==true){
				xmlDoc = createXMLDoc(xmlHttp.responseText);
			} else {
				var strResponse = xmlHttp.responseText;
			}

			if (xmlDoc == null && vReturnXML==true)	{
				alert(errorMsg);
				HideLoading()
			} else {
				if (vReturnXML==true){
					fncHandleData(xmlDoc, vID);
				} else {
					fncHandleData(strResponse, vID);
				}
			}

		}
	}


	/************************************************************************************
	*** END XML/AJAX FUNCTIONS **********************************************************
	************************************************************************************/


	/************************************************************************************
	*** START CAPTCHA FUNCTIONS *********************************************************
	************************************************************************************/
	function fncValidateCaptcha(vID, vPageName){
		xmlHttp = GetXmlHttpObject();
		xmlHttp.open('get', vPageName + '?fb-pageaction=fb-ajaxcall&fb-ajaxaction=validate_captcha&f_key=' + getQueryVariable('f_key') + '&r_id=' + genID());
		xmlHttp.onreadystatechange = function (){ UpdateCaptchaCheck(vID) };
		xmlHttp.send(null);
	}

	function UpdateCaptchaCheck(vID){
		if(xmlHttp.readyState == 4) { //Finished loading the response
			var strResponse = xmlHttp.responseText;
			var strCheck = document.getElementById(vID).value;

			if (strResponse.length > 0){
				if (strResponse==strCheck){
					document.getElementById(vID + '_valid').value = '1';
				} else {
					document.getElementById(vID + '_valid').value = '0';
				}
			} else {
				document.getElementById(vID + '_valid').value = '0';
			}

		}
	}
	/************************************************************************************
	*** END CAPTCHA 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 + '" /> <a href="javascript:lightbox_OpenFieldFind(\'' + document.getElementById(vSSB + '_ff_title').value + '\',\'' + document.getElementById(vSSB + '_ff_ds').value + '\',\'nm;' + vSSB + '_searchfield_' + iRow + ';text\',\'' + URLEncode(document.getElementById(vSSB + '_on_close').value) + '\',' + document.getElementById(vSSB + '_popup_size').value + ',\'\',\'\',GetSSBFFTables(\'' + vSSB + '\'),' + document.getElementById(vSSB + '_append_alias').value + ', ' + document.getElementById(vSSB + '_use_staging').value + ', ' + document.getElementById(vSSB + '_is_mgr_front').value + ');"><img src="' + document.getElementById(vSSB + '_find_image').value + '" align="absmiddle" border="0" /></a>';
		}

		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 + '" /> <a href="javascript:lightbox_OpenFieldFind(\'' + document.getElementById(vSSB + '_ff_title').value + '\',\'' + document.getElementById(vSSB + '_ff_ds').value + '\',\'nm;' + vSSB + '_searchfield_' + iRow + ';text\',\'' + URLEncode(document.getElementById(vSSB + '_on_close').value) + '\',' + document.getElementById(vSSB + '_popup_size').value + ',\'\',\'\', GetSSBFFTables(\'' + vSSB + '\'),' + document.getElementById(vSSB + '_append_alias').value + ', ' + document.getElementById(vSSB + '_use_staging').value + ', ' + document.getElementById(vSSB + '_is_mgr_front').value + ');"><img src="' + document.getElementById(vSSB + '_find_image').value + '" align="absmiddle" border="0" /></a>';
		} 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 GetSSBFFTables(vSSB){
		return document.getElementById(vSSB + '_table_list').value;
	}

	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').value=='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 VALIDATION FUNCTIONS ******************************************************
	************************************************************************************/
	function validator(form, message, divClass, jumpOnError, jumpToTop, disableForm, disableWithLightbox, id) {
		this.form = form;
		this.addField = addField;
		this.addCondition = addCondition;
		this.check = check;
		this.clear = clear;
		this.jumpOnError = jumpOnError
		this.jumpToTop = jumpToTop
		this.disableForm = disableForm
		this.disableWithLightbox = disableWithLightbox

		var fields = new Array();
		var conditions = new Array();
		var numItems = 0;
		//var id = genID();

		// style="zoom:1" fixes a strange bug in IE causing divs to magically dissappear
		document.write("<a name=\"" + id + "\"></a><div class=\"" + divClass + "\" style=\"zoom:1; display:none\" id=\"validator" + id + "\">" + message + "</div>");

		function addField(name, type, required, message) {
			fields[numItems] = new validatorField(name, numItems, type, form, required, id);
			document.write("<a name=\"anchor" + id + numItems + "\"></a>");
			document.write("<div class=\"" + divClass + "\" style=\"zoom:1; display:none\" id=\"validate" + id + name + numItems + "\">" + message + "</div>");
			numItems++;
		}

		function addCondition(child, parent, parentType, condition) {
			if (!conditions[child])
				conditions[child] = new Array();
			conditions[child][conditions[child].length] = new validatorCondition(form, parent, parentType, condition);
		}

		function check() {
			var tdiv = document.getElementById('validator' + id);
			tdiv.style.display = 'none';

			var returnVal = true;
			var bCheck;

			var jumpTo = '';

			for (var i = 0; i < numItems; i++) {
				bCheck = true;
				if (conditions[fields[i].name] != undefined) {
					for (var j = 0; j < conditions[fields[i].name].length; j++) {
						if (!conditions[fields[i].name][j].test()) {
							bCheck = false;
						}
					}
				}
				if (bCheck) {
					if (!fields[i].validateField()) {
						returnVal = false;
						if (jumpTo == '') {
							jumpTo = 'anchor' + id + i;
						}
					}
				} else {
					fields[i].clearValidation();
				}
				if (jumpOnError) {
					if (jumpToTop) {
						scroll(0,0);
					} else if (jumpTo != '') {
						location.href = '#' + jumpTo;
					}
				}
			}

			if ((disableForm==true)&&(returnVal==true)){
				try{
					document.getElementById(form + '_submit').disabled = true;
				}
				catch (err){
					//alert(err.message);
				}
				
				try{
					document.getElementById(form + '_clear').disabled = true;
				}
				catch (err){
					//alert(err.message);
				}

				if (disableWithLightbox==true){
					DisableLB();
				}
			}

			return returnVal;
		}

		function clear() {
			var tdiv = document.getElementById('validator' + id);
			tdiv.style.display = 'none';
			for (var i = 0; i < numItems; i++) {
				fields[i].clearValidation();
			}
		}
	}

	function validatorCondition(form, name, type, condition) {
		this.form = form;
		this.name = name;
		this.type = type;
		this.condition = condition;

		this.test = test;

		var conditioner = '';

		function test() {
			try{
				var value;

				if (type == 'radio' || type == 'checkbox') {
					value = getCheckedValue(name);
					conditioner = condition;
				} else if (type == 'matchfield'){
					value = document.forms[form].elements[name].value;
					conditioner = document.forms[form].elements[condition].value;
				} else {
					value = document.forms[form].elements[name].value;
					conditioner = condition;
				}

				if (isRegExp(conditioner)) {
					if (conditioner.test(value)){
						return true;
					}
				} else if (isString(conditioner)) {
					if (value==conditioner){
						return true;
					}
				} else if (isArray(conditioner)) {
					for (var i = 0; i < conditioner.length; i++) {
						if (isRegExp(conditioner[i])) {
							if (conditioner[i].test(value)){
								return true;
							}
						} else if (isString(conditioner[i])) {
							if (value == conditioner[i]){
								return true;
							}
						}
					}
				}
			}
			catch (err){
				//alert(err.message);
			}
			return false;
		}
	}

	function validatorField(name, num, type, form, required, id) {
		this.name = name;
		this.num = num;
		this.type = type;
		this.form = form
		this.required = required;
		this.id = id;

		this.validateField = validateField;
		this.clearValidation = clearValidation;



		function validateField() {
			var regexpTypes = new Array();
			regexpTypes['regex']		= new RegExp(/^regex~/i);
			regexpTypes['regexnot']		= new RegExp(/^regexnot~/i);
			regexpTypes['matchfield']	= new RegExp(/^matchfield~/i);
			regexpTypes['matchfieldnot']= new RegExp(/^matchfieldnot~/i);
			regexpTypes['matchvalue']	= new RegExp(/^matchvalue~/i);
			regexpTypes['matchvaluenot']= new RegExp(/^matchvaluenot~/i);
			regexpTypes['matchleft']	= new RegExp(/^matchleft~/i);
			regexpTypes['matchleftnot']	= new RegExp(/^matchleftnot~/i);
			regexpTypes['matchright']	= new RegExp(/^matchright~/i);
			regexpTypes['matchrightnot']= new RegExp(/matchrightnot~/i);
			regexpTypes['matchlen']		= new RegExp(/matchlen~/i);
			regexpTypes['matchlennot']	= new RegExp(/matchlennot~/i);
			regexpTypes['radio']		= new RegExp(/^radio$/i);
			regexpTypes['checkbox']		= new RegExp(/^checkbox$/i);

			var regExpressions = new Array();
			regExpressions['phone']		= new RegExp(/^[1-9]\d{2}\-\d{3}\-\d{4}$/);
			regExpressions['zip']		= new RegExp(/(^\d{5}$)|(^\d{5}-\d{4}$)|(^[a-zA-Z]\d[a-zA-Z][- ]?\d[a-zA-Z]\d$)/);
			regExpressions['integer']	= new RegExp(/^-?\d+$/);
			regExpressions['decimal']	= new RegExp(/^-?\d*.?\d*$/);
			regExpressions['currency']	= new RegExp(/^-?\d*(.\d{0,2})?$/);
			regExpressions['date']		= new RegExp(/^(0[1-9]|1[012]|[1-9])[-/](0[1-9]|[12][0-9]|3[01]|[1-9])[-/](19|20)\d{2}$/);
			regExpressions['datetime']	= new RegExp(/^(0[1-9]|1[012]|[1-9])[-/](0[1-9]|[12][0-9]|3[01]|[1-9])[-/](19|20)?[0-9][0-9]( )([0-2])?[1-9]:([0-5][0-9])(:[0-5][0-9])?( (AM|PM))?$/);
			regExpressions['email']		= new RegExp(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/gi);
			regExpressions['social']	= new RegExp(/^\d{3}-\d{2}-\d{4}$/);
			regExpressions['url']		= new RegExp(/^http(s)?:\/\/.*/);

			var vdiv = document.getElementById('validate' + id + name + num);
			var tdiv = document.getElementById('validator' + id);
			var field = document.forms[form].elements[name];

			var value;
			if (regexpTypes['radio'].test(type) || regexpTypes['checkbox'].test(type)) {
				value = getCheckedValue(name);
			} else {
				value = field.value;
			}

			if (value == undefined)	value = "";

			var trimmedValue = trim(value);

			var returnVal = true;

			vdiv.style.display = 'none';

			if (isRegExp(type)) {
				if (trimmedValue != "") {
					var oRegEx = new RegExp(type);
					returnVal = !oRegEx.test(value);
				}
				else if (trimmedValue == "" && required) {
					returnVal = false;
				}

			} else if (trimmedValue != "" && regexpTypes['regex'].test(type)) {
				var matchReg = eval(trim(type.split('~')[1]));
				if (isRegExp(matchReg)) {
					var oRegEx = new RegExp(matchReg);
					returnVal = !oRegEx.test(value);
				} else {
					returnVal = false;
				}
			} else if (trimmedValue != "" && regexpTypes['regexnot'].test(type)) {
				var matchReg = eval(trim(type.split('~')[1]));
				if (isRegExp(matchReg)) {
					var oRegEx = new RegExp(matchReg);
					returnVal = oRegEx.test(value);
				} else {
					returnVal = false;
				}

			} else if (trimmedValue != "" && regexpTypes['matchfield'].test(type)) {
				var matchName = type.split('~')[1];
				if (value != document.forms[form].elements[matchName].value)
					returnVal = false;

			} else if (trimmedValue != "" && regexpTypes['matchfieldnot'].test(type)) {
				var matchName = type.split('~')[1];
				if (value == document.forms[form].elements[matchName].value)
					returnVal = false;

			} else if (trimmedValue != "" && regexpTypes['matchvalue'].test(type)) {
				var matchVal = type.split('~')[1];
				if (value == matchVal)
					returnVal = false;

			} else if (trimmedValue != "" && regexpTypes['matchvaluenot'].test(type)) {
				var matchVal = type.split('~')[1];
				if (value != matchVal)
					returnVal = false;

			} else if (trimmedValue != "" && regexpTypes['matchleft'].test(type)) {
				var matchVal = type.split('~')[1];
				if (left(value, matchVal.length).toLowerCase() == matchVal.toLowerCase()){
					returnVal = false;
				}

			} else if (trimmedValue != "" && regexpTypes['matchleftnot'].test(type)) {
				var matchVal = type.split('~')[1];
				if (left(value, matchVal.length).toLowerCase() != matchVal.toLowerCase()){
					returnVal = false;
				}

			} else if (trimmedValue != "" && regexpTypes['matchright'].test(type)) {
				var matchVal = type.split('~')[1];
				if (right(value, matchVal.length).toLowerCase() == matchVal.toLowerCase()){
					returnVal = false;
				}

			} else if (trimmedValue != "" && regexpTypes['matchrightnot'].test(type)) {
				var matchVal = type.split('~')[1];
				if (right(value, matchVal.length).toLowerCase() != matchVal.toLowerCase()){
					returnVal = false;
				}

			} else if (trimmedValue != "" && regexpTypes['matchlen'].test(type)) {
				var matchVal = type.split('~')[1];
				if (value.length == parseInt(matchVal)){
					returnVal = false;
				}

			} else if (trimmedValue != "" && regexpTypes['matchlennot'].test(type)) {
				var matchVal = type.split('~')[1];
				if (value.length != parseInt(matchVal)){
					returnVal = false;
				}

			} else {
				if (trimmedValue != "" && regExpressions[type] != undefined) {
					returnVal = regExpressions[type].test(value);
				} else if (trimmedValue == "" && required) {
					returnVal = false;
				}
			}

			if (!returnVal) {
				vdiv.style.display = 'block';
				tdiv.style.display = 'block';
			}
			return returnVal;
		}

		function clearValidation() {
			var vdiv = document.getElementById('validate' + id + name + num);
			vdiv.style.display = 'none';
		}
	}

	// Trim white space from beginning and end of string
	function trim(stringToTrim) {
		return stringToTrim.replace(/^\s+|\s+$/g,"");
	}

	function isArray() {
		return arguments[0] instanceof Array;
	}

	function isRegExp() {
		return arguments[0] instanceof RegExp;
	}

	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;
	}

	function getCheckedValue(radioName) {
		var radioObj = document.getElementById('form_builder').elements[radioName];
		if (!radioObj) {

			var radioObj = document.getElementById(radioName);
			if (!radioObj) {
				return "";
			}
		}

		var radioLength = radioObj.length;
		if (radioLength == undefined){
			if(radioObj.checked){
				return radioObj.value;
			} else {
				return "";
			}
		}

		for (var i = 0; i < radioLength; i++) {
			if (radioObj[i].checked) {
				return radioObj[i].value;
			}
		}
		return "";
	}
	/************************************************************************************
	*** END VALIDATION FUNCTIONS ********************************************************
	************************************************************************************/


	/************************************************************************************
	*** START DISABLE LIGHTBOX FUNCTIONS ************************************************
	************************************************************************************/
	function DisableLB(){
		var oLBG = document.getElementById('disableLBbg');
		var oLPic = document.getElementById('disableLBwin');

		var popwidth = 300;

		if (window.innerHeight && window.scrollMaxY) {
			oLBG.style.width = document.body.scrollWidth;
			oLBG.style.height = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			oLBG.style.width = document.body.scrollWidth;
			oLBG.style.height = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			oLBG.style.width = document.body.offsetWidth;
			oLBG.style.height = document.body.offsetHeight;
		}

		if (self.innerHeight) {	// all except Explorer
			oLPic.style.left = (self.innerWidth / 2) - (popwidth / 2);
			oLPic.style.top = self.pageYOffset + (self.innerHeight / 10);
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			oLPic.style.left = (document.documentElement.clientWidth / 2) - (popwidth / 2);
			oLPic.style.top = document.documentElement.scrollTop + (document.documentElement.clientHeight / 10);
		} else if (document.body) { // other Explorers
			oLPic.style.left = (document.body.clientWidth / 2) - (popwidth / 2);
			oLPic.style.top = document.body.scrollTop + (document.body.clientHeight / 10);
		}

		oLBG.style.display = 'block';
		oLPic.style.display = 'block';

	}

	function HideDisableLB(){
		document.getElementById('disableLBbg').style.display = 'none';
		document.getElementById('disableLBwin').style.display = 'none';
	}
	/************************************************************************************
	*** END DISABLE LIGHTBOX 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
		if (plaintext==undefined||plaintext==null){
			plaintext = '';
		}
		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 NumbersOnlyWithDecimal(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
	}

	function escapeHTML(str){
	   var div = document.createElement('div');
	   var text = document.createTextNode(str);
	   div.appendChild(text);
	   return div.innerHTML;
	}

	function fncLongDate(vDate){

		if(0==Date.parse(vDate)||isNaN(Date.parse(vDate))){
			return '"' + vDate + '" is not a valid date.';
		} else {
			try{
				var dMyDate = new Date(vDate);

				var sDay = dMyDate.getDay();
				var sMonth = dMyDate.getMonth();
				var sWeekday = dMyDate.getDate();
				var sYear = dMyDate.getYear();
				var sHours = dMyDate.getHours();
				var sMins = dMyDate.getMinutes();
				var sSecs = dMyDate.getSeconds();
				var sMornAfter = 'AM';

				if (sYear < 2000){
					sYear = sYear + 1900;
				}

				if (sHours >= 12) {
					if (sHours > 12){
						sHours = sHours - 12;
					}
					sMornAfter = 'PM';
				} else {
					if (sHours == 0){
						sHours = 12;
					}
					sMornAfter = 'AM';
				}

				if (sMins < 10){
					var sTempMin = sMins;
					sMins = '0' + sTempMin;
				}

				if (sSecs < 10){
					var sTempSec = sSecs;
					sSecs = '0' + sTempSec;
				}

				var aDays = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
				var aMonths = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

				var sLongDate = aDays[sDay] + ', ' + aMonths[sMonth] + ' ' + sWeekday + ', ' + sYear + ' ' + sHours + ':' + sMins + ':' + sSecs + ' ' + sMornAfter;

				return sLongDate;				
			}
			catch (err){
				//alert(err.message);
				return 'Error formatting date.';
			}
		}
	}

	/************************************************************************************
	*** END GENERAL FUNCTIONS *********************************************************
	*************************************************************************************/
