/************************
Global Variables
************************/
var FieldArray = new Array();
FieldArray['sql'] = new Array();
FieldArray['xml'] = new Array();
FieldArray['xp'] = new Array();


var g_redField = new Array();
var g_CusTbl = ""
var is_staticsql;
var guid="";
var g_isDataEntry = ''
/************************
Multilingual Functions
************************/
function refreshLabels(objWin, locale)
{
	if (!objWin || !objWin.g_label_xml || objWin.g_label_xml.selectNodes("/d/lng[@key='" + locale + "']").length == 0) return;

	window.status = "Refreshing labels...";
	var lblNodes = objWin.g_label_xml.selectNodes("/d/lng[@key='" + locale + "']/lbl");

	for (var i = 0; i < lblNodes.length; i++)
	{
		lblkey = lblNodes[i].getAttribute("key");
		objCtrl = objWin.document.all("span_" + lblkey);
		if (objCtrl)
		{
			if (objCtrl.length)
			{
				for (var j = 0; j < objCtrl.length; j++)
				{
					if (objCtrl[j].tagName && objCtrl[j].tagName.toLowerCase() == "img") 
						objCtrl[j].src = lblNodes[i].getAttribute("val");
					else
					{
						objCtrl[j].innerHTML = lblNodes[i].getAttribute("val");
						if (objCtrl[j].tagName && objCtrl[j].tagName.toLowerCase() == "option") 
							objCtrl[j].parentNode.outerHTML += "";
					}
				}
			}
			else
			{
				if (objCtrl.tagName && objCtrl.tagName.toLowerCase() == "img") 
					objCtrl.src = lblNodes[i].getAttribute("val");
				else
				{
					objCtrl.innerHTML = lblNodes[i].getAttribute("val");
					if (objCtrl.tagName && objCtrl.tagName.toLowerCase() == "option") 
						objCtrl.parentNode.outerHTML += "";
				}
			}
		}
	}

	window.status = "Done";
}

/************************
XML Functions
************************/
var g_delimitor1 = String.fromCharCode(1);
var g_delimitor2 = String.fromCharCode(2);

function packXML(XMLStr)
{
	var TheStr = XMLStr;
	TheStr = TheStr.replace(/<\?xml version=\'1.0\' encoding=\'ISO-8859-1\'\?><d>/ig, "");
	TheStr = TheStr.replace(/<\/d>/ig, "");
	TheStr = TheStr.replace(new RegExp("'/><v f='", "ig"), g_delimitor1);
	TheStr = TheStr.replace(new RegExp("' a='", "ig"), g_delimitor2);
	return TheStr;
}

function unpackXML(TheStr)
{
	var XMLStr = TheStr;

	XMLStr = XMLStr.replace(new RegExp(g_delimitor1, "ig"), "'/><v f='");
	XMLStr = XMLStr.replace(new RegExp(g_delimitor2, "ig"), "' a='");
	XMLStr = "<?xml version='1.0' encoding='ISO-8859-1'?><d>" + XMLStr + "</d>";
	return XMLStr;
}

function df_loadXML(xObj, xmlname)
{
	window.status = "Loading " + (xmlname.indexOf("<") == -1 ? xmlname : "XML") + "...";
	xObj.async = false;
	xObj.validateOnParse = true;
	if (xmlname.indexOf("<") == -1)
	{
		if (xmlname.indexOf(".xmp") == -1) xObj.load(xmlname);
		else
		{
			var objHTTP = new ActiveXObject("MSXML2.XMLHTTP");
			objHTTP.Open("GET", "http://" + parent.location.host + window.top.frames.title.g_app_path + xmlname, false);
			objHTTP.Send();
			var XMLStr = objHTTP.responseText;
			var TheStr = unpackXML(XMLStr);
			xObj.loadXML(TheStr);
		}
		/*
		window.top.frames.title.g_dbg_xmlname += "\n" + xmlname + ": " + xObj.xml.length + " bytes";
		window.top.frames.title.g_dbg_xmlnum++;
		window.top.frames.title.g_dbg_xmlsize += xObj.xml.length;
		*/
	}
	else xObj.loadXML(xmlname);
	if (xObj.parseError.errorCode != 0) 
	{
		var errmsg = "";
		if (xmlname.indexOf("<") == -1) errmsg += "file: " + xmlname + ", ";
		errmsg += "line:" + xObj.parseError.line 
		+ ", linepos:" + xObj.parseError.linepos 
		+ ", reason:" + xObj.parseError.reason
		+ ", srcText:" + xObj.parseError.srcText.substr(xObj.parseError.linepos - 100, 200)
		+ ", srcCharCode:" + xObj.parseError.srcText.charCodeAt(xObj.parseError.linepos - 1);
		alert(errmsg);
		xObj = null;
	}
	window.status = "Done";
}

function df_transform(xmlObj, xslObj)
{
	window.status = "Transforming XML...";
	var res = xmlObj.transformNode(xslObj);
	window.status = "Done";
	return res;
}

function mergeXML(xmlSource, xmlTarget, nodeSource, nodeTarget, removeFlag, beforeNode)
{
	window.status = "Merging XML...";
	if (removeFlag && xmlSource.selectNodes(nodeTarget))
		xmlSource.selectNodes(nodeTarget).removeAll();
	if (xmlTarget)
	{
		var theNodeSources = xmlSource.selectNodes(nodeSource);
		for (var jIndex = 0; jIndex < theNodeSources.length; jIndex++)
		{
			var theNodeSource = theNodeSources[jIndex];
		
			var theNodeTarget = xmlTarget.selectNodes(nodeTarget);
			for (var iIndex = 0;iIndex<theNodeTarget.length;iIndex++)
			{
				var xmlNode = theNodeTarget.item(iIndex).cloneNode(true);
				var theInsertBeforeNode = theNodeSource.childNodes.item(0);
				if (beforeNode != null && beforeNode != "" && theNodeSource.selectSingleNode(beforeNode))
				{
					theInsertBeforeNode = theNodeSource.selectSingleNode(beforeNode);
					theNodeSource.insertBefore(xmlNode, theInsertBeforeNode);
				}
				else theNodeSource.appendChild(xmlNode);
			}
		}
	}
	window.status = "Done";
}

/************************
Validation Functions
************************/

function invalidForDataEntry(fk,value,thisType){
	if (document.all("ident"+fk))document.all("ident"+fk).value=thisType.value
	if (document.all("HasRequireFieldValue"+fk) != null) 
	{
		if (value!='') {  //has input some values
			if (invalidInputValue(fk,value,thisType)) {
				document.all("HasRequireFieldValue"+fk).value = "false"
				return true
			}
			document.all("HasRequireFieldValue"+fk).value = "true"
			return false
		}else
		{
			if (thisType.type != "select-one" && thisType.type != "checkbox" && thisType.type != "radio" && thisType.type != "multiple")
				document.all(thisType.id).style.backgroudcolor = 'red';
			document.all("HasRequireFieldValue"+fk).value = "false"
			return true
		}
	}
	else if (value==''){
		return false
	}else if (invalidInputValue(fk,value,thisType)) {
		return true
	}
	return false
}

function invalidForSearch(fk,value,thisType,bothInput){
	if (document.all('require') || document.all('ide')) return false
	if (value==""){ // for search Field validation
		if (bothInput==null || bothInput=='') 
		{
			deleteFields(fk)
			return true
		}	
	}
	else if (value!='')
	{
		if (invalidInputValue(fk,value,thisType)) return true
	}else
	{
		g_redField[fk] = 'false'
		return false 
	}	
}

function invalidInputValue(fk,value,thisType)
{	
	//CUSTOM for Offering Price	
	if (thisType.id=='id_328_tp_7')
	{		
	  	var ptr = '^[0-9]{0,9}$';
	  	var str = value.replace(',','');
	   
	  	var re = new RegExp(ptr, 'ig');        
	  	if(!re.test(str))
	  	{
	  		alert('Wrong Input for field Offering Price\nEx: 250,600 (Input must be a whole number)');	
	  		document.all(thisType.id).style.background = 'red';
			document.all(thisType.id).focus();
			return true
		}
		else document.all(thisType.id).style.background = '';		
	}
	//******************************
	
	if (!document.all("ExpArray"+fk)) return false
	var chk = document.all("ExpArray"+fk).value
	if ((chk != null && chk!="") && value.match(chk)==null)
	{	   
		if (thisType.type != "select-one" && thisType.type != "checkbox" && thisType.type != "radio" && thisType.type != "multiple")
	   	{
			document.all(thisType.id).style.background = 'red';
			document.all(thisType.id).focus();
		}
	   	g_redField[fk] = 'true'
	   	alert("Wrong input")	   
	   	return true
	}
	else
	{ 
		document.all(thisType.id).style.background = '';
		g_redField[fk] = 'false'
	}
	return false
}

function hasEmptyRequireField(){
    var notPass = false
    var s = document.all("require")
    if (s.length==null){
		if (s.value == "false")
				return notPass = true
	}			
    else {
		for (i=0;i<s.length;i++)
		{
			if (s[i].value == "false")
				return notPass = true
		}	
	}	
	return notPass
}
function hasRedField()
{
	var _hasRedField = false
	for (i in g_redField)
	{
		
		if (g_redField[i] == "true")
		{
			return _hasRedField = true
		}	
	}	
	
	return _hasRedField
}
/************************
Common Functions
************************/
function getToday()
{
	var d = new Date();
	return d.getMonth() + 1 + "/" + d.getDate() + "/" + d.getFullYear();
}

function parseLongDayFormat(val)
{
	switch(parseInt(val)){
		case 1: case 21:
		 return val + "st";
		case 2: case 22:
		 return val + "nd";
		case 1: case 23:
		 return val + "rd";
		default:
			return val + "th";
	}
}

function parseLongMonthFormat(val)
{
	switch(parseInt(val)){
		case 1: return "January"
		case 2: return "February"
		case 3: return "March"
		case 4: return "Apirl"
		case 5: return "May"
		case 6: return "June"
		case 7: return "July"
		case 8: return "August"
		case 9: return "September"
		case 10: return "October"
		case 11: return "November"
		case 12: return "December"

	}
}

function resetArrayValues(fk)
{
	if (fk!=null && fk!='')
	{
		FieldArray['sql'][fk+'sql'] = ""
		FieldArray['xml'][fk+'xml'] = ""
		FieldArray['xp'][fk+'xp'] = ""
	}
	else{
		FieldArray['sql'] = new Array();
		FieldArray['xml'] = new Array();
		FieldArray['xp'] = new Array();
		resetTree()
	}
}

function resetTree()
{
	var tNodes = g_my_xml.selectNodes("/d/col[@meta='0']")
	for (var x=0;x<tNodes.length;x++)
	{
		var colkey = tNodes[x].getAttribute("key")
		var s = document.all("tree_"+colkey)
		if (s==null)  return
		for (var i=0;i<s.length;i++)
		{
			if (s[i].disabled)
				s[i].disabled = false
		}	
	}	
}
function IsValidFileName(InputStr)
{
	return (InputStr.indexOf('\'') == -1 && InputStr.indexOf('&') == -1
		 && InputStr.indexOf('\\') == -1 && InputStr.indexOf('/') == -1 && InputStr.indexOf(':') == -1
		 && InputStr.indexOf('*') == -1 && InputStr.indexOf('?') == -1 && InputStr.indexOf('"') == -1
		 && InputStr.indexOf('<') == -1 && InputStr.indexOf('>') == -1 && InputStr.indexOf('|') == -1);
}
function HTMLEncode(InputStr)
{
	var retStr = InputStr;
	retStr = retStr.replace(/&/ig,"&amp;");
	retStr = retStr.replace(/</ig,"&#60;");
	retStr = retStr.replace(/>/ig,"&#62;");
	retStr = retStr.replace(/'/ig,"&#39;");
	retStr = retStr.replace(/"/ig,"&#34;");
	retStr = retStr.replace(/\r\n/ig,"&lt;br/&gt;"); 
	return retStr;
}
function HTMLRemoveScripts(InputStr)
{
	var retStr = InputStr;
	retStr = retStr.replace(/onmouseover=\"/gi, "onmouseover=\"//");
	retStr = retStr.replace(/onmouseover=/gi, "onmouseover=//");
	retStr = retStr.replace(/onmouseout=\"/gi, "onmouseout=\"//");
	retStr = retStr.replace(/onmouseout=/gi, "onmouseout=//");
	retStr = retStr.replace(/onclick=\"/gi, "onclick=\"//");
	retStr = retStr.replace(/onclick=/gi, "onclick=//");
	retStr = retStr.replace(/onblur=\"/gi, "onclick=\"//");
	retStr = retStr.replace(/onblur=/gi, "onclick=//");
	return retStr;
}
function splitText(InputStr, Delimitor)
{
	var tmp = "";
	var ss = InputStr.split(Delimitor);
	for (i = 0; i < ss.length; i++)
		if (false && isNaN(ss[i])) return "";
		else
		{
			if (tmp != "") tmp += ",";
			if (ss.length == 1) tmp += "'%" + ss[i] + "%'"
			else tmp += "'" + ss[i] + "'"
		}
	return tmp;
}

function Expand(id,pl) {
		state = document.all(id).style.display;
		if (state == ""){
			document.all(id).style.display = "none"
			pl.innerText="+";
		 }
		else{
			document.all(id).style.display = "";
			pl.innerText="-";
		}
}
function formatDate(dts, delim, dateOrder){
	if (delim == "s") delim = " ";
	var y=dts.substring(0,4)
	var m=dts.substring(4,6)
	var d=dts.substring(6,8)
	var newDay = ""
	if (dateOrder=="mdy")
		newDay = m+delim+d+delim+y
	else if (dateOrder=="dmy")
		newDay =d +delim+m+delim+y
	else
		newDay = y+delim+m+delim+d
	return newDay
}

function setValue (thisType){
	a = thisType.id.split("_")
	this.fk = a[1]
	this.tp = a[3]
	this.ide = a[5]
	this.myvalue = a[7]
	return this
}

function normalizeDate(s)
{
	var Svalue = s
	var tmp_date = Svalue.split("/");
	if (tmp_date[0].length == 1) tmp_date[0] = "0" + tmp_date[0];
	if (tmp_date[1].length == 1) tmp_date[1] = "0" + tmp_date[1];
	Svalue = tmp_date[2] + tmp_date[0] + tmp_date[1];
	return Svalue
}

function replaceString(Svalue,action){
   if(action=='dateString')
	{
		if (Svalue!=''){
			Svalue = normalizeDate(Svalue)
		}
	}else if (action=='dateStringReverse')
	{
		if (Svalue!=''){
			Svalue = formatDate(Svalue,"/","mdy")
		}
	}
	else {
		Svalue = HTMLEncode(Svalue);
	}
	
			return Svalue
}

function setCusTbl()
{
	if (g_stype!='')
		g_CusTbl = "data" + g_rtype+"_"+g_stype;
	else
		g_CusTbl = "data" + g_rtype;
}

function ChangeBack(thisType)
{ 
	id = thisType.id
	if (id != null && document.all(thisType.id).className == "valid_err") 	
		document.all(thisType.id).className = "valid_ok"
}


function deleteFields(fk){
	FieldArray['sql'][fk+'sql'] = ""
	FieldArray['xml'][fk+'xml'] = ""
	FieldArray['xp'][fk+'xp'] = ""
}

function getEnmName(enm,itm){
		return g_my_xml.selectSingleNode("/d//enm[@key='"+enm+"' and @itm='"+itm+"']").getAttribute("nam")
}
/************************
Search Functions
************************/

function initCollectionParentArray()
{
	if (g_my_xml.selectNodes("/d/col[@rt='"+g_rtype+"' and @tp='t']").length == 0) return;
	var parentNodes = g_my_xml.selectNodes("/d/col/spt[@lf='0']")
	for (var i=0;i<parentNodes.length;i++)
	{
		parentArray[parentNodes[i].getAttribute("key")] = "',"+parentNodes[i].getAttribute("cld")+",'"
	}
}

function processCollectionElement(thisType)
{
	var ck = thisType.name.split("_")[1]
	tempSQL = ""
	tempSXml = ""
	tempXp = ""
	var s = document.all(thisType.name)
	var chklist = ","+thisType.title+","
	
	if (document.all("require")==null && document.all("ide")==null)
	{
		if (thisType.title.indexOf(",")!=-1 || 
			g_my_xml.selectSingleNode("/d/col[@key='"+ck+"']/spt[@key='"+thisType.value+"']").getAttribute("lf")=='0')
		{
			var a = thisType.title.split(",")
			for (var k=0;k<a.length;k++)
			{
				document.all("TreeItem_"+a[k]).disabled = (thisType.checked)?true:false
				document.all("TreeItem_"+a[k]).checked = thisType.checked
			}	
		}
	}
	if (s.length)
	{
		for (i=0;i<s.length;i++){
			if (s[i].checked && !s[i].disabled)
			{
				if (tempSQL!=""){
					tempSQL+=","
					tempSXml+=","
					tempXp+=" or "
				}
				tempSQL += s[i].title		
				tempSXml+= s[i].value
				tempXp += s[i].value
			}
		}
	}
	else
	{
		tempSQL = thisType.title
		tempSXml = thisType.value
		tempXp = thisType.value
	}

	if (tempSQL==""){
		deleteFields(ck+"Tree")
		return
	}


	generateQuery(tempSQL+"|"+tempSXml+"|"+tempXp,ck,"t")
	

}

function getNUL(fieldkey,s,NUL,fldName)
{
	var st = s
	if (NUL == "" || NUL==null) return st
	
	var fld;
	if (is_staticsql) fld = g_CusTbl+".["+fldName+"]"
	else fld = "f"+fieldkey
	
	switch (NUL.toLowerCase())
	{
		case 'null':
			st = "("+st+" or "+fld+" is null)"
			break;
		case 'empty':
			st = "("+st+" or "+fld+" = '')"
			break;
		default:
			st = "("+st+" or "+fld+" = '"+NUL+"')"
			break;
	}		
	return st
}

function processComboElement(thisType){
	var myObj = setValue(thisType)
	var value=""
	with (myObj) {
		var enm = myObj.ide
		switch (thisType.type){
			case "select-multiple":
				for(var i=0;i<thisType.length;i++){
					if (thisType.options[i].selected) {
						if (value!="")value += ","
						value += thisType.options[i].value;
					}
				}	
				break
			case "checkbox":
				var s = document.all(thisType.name)
				if (s.length==null)
				{
					value += s.value
				}else{
					for(var i=0;i<s.length;i++){
						if (s[i].checked==true){
							if (value!="")value+=","
							value += s[i].value
						}
					}
				}	
				break;
			case "radio":
				value = thisType.value
				break
			case "select-one":
				value = thisType.options[thisType.selectedIndex].value
				break	
			default:
				break
		}
		if (invalidForSearch(fk,value,thisType)) return
		if (invalidForDataEntry(fk,value,thisType)) return
		//alert(thisType.value)
		generateQuery(value,fk,tp)

		
	}
	
}

function processTextInputElement(thisType){// just for the text box
	var myObj = setValue(thisType)
	with (myObj) {
		var Svalue = replaceString(thisType.value)
		if (invalidForSearch(fk,Svalue,thisType)) return
		if (invalidForDataEntry(fk,Svalue,thisType)) return
		generateQuery(Svalue,fk,tp)
	}
}


function processDateElement(thisType)
{
	myObj = setValue(thisType)
	with (myObj) {
		var leftObj = document.all("id_"+fk+"_tp_"+tp+"_ide_@1")
		var rightObj = document.all("id_"+fk+"_tp_"+tp+"_ide_@2")
		var bothInput = (rightObj!=null && leftObj!=null) ? true : false
		if (invalidForSearch(fk,thisType.value,thisType,bothInput)) return
		if (invalidForDataEntry(fk,thisType.value,thisType)) return

		var leftValue = (leftObj) ? replaceString(leftObj.value,'dateString') : ""
		var rightValue = (rightObj) ? replaceString(rightObj.value,'dateString') : ""
		var Svalue =  leftValue+","+rightValue 
		if (leftValue=="" && rightValue=="") {
			deleteFields(fk)
			return
		}else
			generateQuery(Svalue,fk,tp)
	}		
}

function processNumberElement(thisType) //number input
{  
	myObj = setValue(thisType)
	with (myObj) {
		var leftObj = document.all("id_"+fk+"_tp_"+tp+"_ide_@1")
		var rightObj = document.all("id_"+fk+"_tp_"+tp+"_ide_@2")
		var bothInput = (rightObj!=null && leftObj!=null) ? true : false
		if (thisType.type == "text"){
			if (invalidForSearch(fk,thisType.value,thisType,bothInput)) return
			if (invalidForDataEntry(fk,thisType.value,thisType)) return
		}	
		var leftValue = (leftObj) ? leftObj.value : ""
		if (thisType.type == "radio") leftValue = thisType.value
		var rightValue = (rightObj) ? rightObj.value : ""
		var Svalue =  leftValue+","+rightValue 
		
		if ((document.all('require')==null && document.all('ide')==null) && leftValue=="" && rightValue=="") {
			deleteFields(fk)
			return
		}
		
		generateQuery(Svalue,fk,tp)
	}	
}

function processRowCount()
{
	RowCountForm.SQLQuery.value = getAllSQLs();
	RowCountForm.submit();
}

function processSearch()
{
	popup_querying();
	getSearchOrder();
	SearchForm.SQLQuery.value = getAllSQLs();
	SearchForm.XMLQuery.value = getAllXMLs();
//	alert(SearchForm.SQLQuery.value)
//	alert(SearchForm.XMLQuery.value)
	SearchForm.submit();
}
function loadData(form)
{
	loadDataForCollection()
	loadDataForfields()
	loadSortOrderForSearch()
}

function loadDataForCollection()
{
	if (g_my_xml.selectNodes("/d/col[@rt='"+g_rtype+"' and @tp='t']").length == 0) return;
	var ck
	var cNodes = g_my_xml.selectNodes("/d/r[@rt='"+g_rtype+"']/c")
	if (cNodes){
		var tmpVal = ""
		var sptArray
		
		for (var i=0;i<cNodes.length;i++)
		{
			ck = cNodes[i].getAttribute("k")
			var theObj = document.all("tree_"+ck)
			sptArray = cNodes[i].getAttribute("spt").split(",") 
			for (var k=0;k<sptArray.length;k++){
				if (parentArray.length !=0){
					for (var a in parentArray)
					{
						if (parentArray[a].indexOf(","+sptArray[k]+",")!=-1)
						{
							if (document.all("div"+ck+"val"+a) && document.all("div"+ck+"val"+a).style.display=="none") document.all("span"+ck+"val"+a).onclick()
						}else{
							if (document.all("div"+ck+"val"+sptArray[k]) && document.all("div"+ck+"val"+sptArray[k]).style.display=="none") document.all("span"+ck+"val"+sptArray[k]).onclick()
						}
					}	
				}				
				var Obj = setRadioAndCheckBox(theObj,sptArray[k])
				Obj.onclick()
			}	
		}

	}	
}
function loadDataForfields(xpath,div,rLevelName)
{
	var tp
	var fk
	var val
	if (div =='' || div==null) var domObj = document
	else domObj = eval(div)
	if(rLevelName!='' && rLevelName!=null) var tNodes = g_my_xml.selectNodes(rLevelName+"/v")
	else if (xpath =='' || xpath==null) var tNodes = g_my_xml.selectNodes("/d/r[@rt='"+g_rtype+"']/v")
	else var tNodes = g_my_xml.selectNodes(xpath+"/d/r[@rt='"+g_rtype+"']/v")
//	alert(rLevelName)
	for (var i=0;i<tNodes.length;i++)
	{
		fk = tNodes[i].getAttribute("f")
		tp = g_my_xml.selectSingleNode("/d/fld[@key='"+fk+"']").getAttribute("tp")
		enm = g_my_xml.selectSingleNode("/d/fld[@key='"+fk+"']").getAttribute("enm")
		val=(tNodes[i].getAttribute("k")) ? tNodes[i].getAttribute("k") : tNodes[i].getAttribute("a")
		
		if (val!="" && val!=null) {
			switch (tp){
				case '7'://Text
				case '8'://Label
				case '10'://File
				case '11'://Notes
					var theObj = domObj.all("id_"+fk+"_tp_"+tp)
					if (!theObj) break;
					theObj.value=val
					theObj.onblur()
					break;
				case '9'://date
					var leftObj = domObj.all("id_"+fk+"_tp_"+tp+"_ide_@1")
					var rightObj = domObj.all("id_"+fk+"_tp_"+tp+"_ide_@2")
					if (!leftObj && !rightObj) break;
					var leftVal = replaceString(val.split(",")[0],'dateStringReverse')
					var rightVal = (rightObj!=null) ? replaceString(val.split(",")[1],'dateStringReverse') : ""
					leftObj.value=leftVal
					leftObj.onblur()
					if (rightObj!=null){
						rightObj.value=rightVal
						rightObj.onblur()
					}	
					break;
				case '4'://Integer
				case '5'://Float1
				case '6'://Float2
				case '12'://Year
					var leftVal = val.split(",")[0]
					var rightVal = val.split(",")[1]
					var leftObj = domObj.all("id_"+fk+"_tp_"+tp+"_ide_@1")
					var rightObj = domObj.all("id_"+fk+"_tp_"+tp+"_ide_@2")
					if (!leftObj && !rightObj) break;
												
					if (leftObj!=null && rightObj!=null){//both case
					
						if (leftObj.type=="text")
						{ 
							leftObj.value=leftVal  //both input text box
							leftObj.onblur()
							rightObj.value=rightVal
							rightObj.onblur()
							//alert("select")
						}else if (leftObj.type=="select-one") //both select box
						{ 
							setSelectIndex(leftObj,leftVal)
							leftObj.onchange()  
							setSelectIndex(rightObj,rightVal)
							rightObj.onchange()
						}
					}
					else if ((leftObj==null && rightObj!=null) || (leftObj!=null && rightObj==null)){
						var theObj = (leftObj) ? leftObj : rightObj
						if (theObj.type=="select-one") //only one select box
						{
							var theVal = (leftVal!='') ? leftVal+',' : ','+rightVal
							setSelectIndex(theObj,theVal)
							theObj.onchange()
						}else if (theObj.type=="text")
						{
							var theVal = (leftVal!='') ? leftVal : rightVal
							theObj.value=theVal
							theObj.onblur()
							//alert("select"+	theVal)
						}else  // theObj.type="radio"
						{
							var theVal = (leftVal!='') ? leftVal+',' : ','+rightVal
							var Obj = setRadioAndCheckBox(theObj,theVal)
							Obj.onclick()
						}
					}
					break;
				case '2':
				case '3':
					
					var theObj = domObj.all("id_"+fk+"_tp_"+tp+"_enm_"+enm)
					if (!theObj) break;
					
					if (theObj.type=="select-multiple" || theObj.type=="select-one")
					{
						setSelectIndex(theObj,val)
						theObj.onchange()
					}else{
						var Obj = setRadioAndCheckBox(theObj,val)
						Obj.onclick()
					}
					break;	
			}
		}	
	}
}
function loadSortOrderForSearch()
{
	var sort_node = g_my_xml.selectNodes("/d/r/sort")
	if (sort_node.length==0) return
	var order
	var id
	for (var i=0;i<sort_node.length;i++)
	{
		order = sort_node[i].getAttribute("order")
		id = sort_node[i].getAttribute("id")

		var od =document.all('searchOd'+i)
		var sortFKs = document.all("searchFk"+i)

		for(var idx=0;idx<od.options.length;idx++)
		{
			if (order==od.options[idx].value) od.selectedIndex = idx
		}
		for (var idx=0;idx<sortFKs.options.length;idx++)
		{
			if (sortFKs.options[idx].id==id) sortFKs.selectedIndex = idx
		}
	}
}


function setRadioAndCheckBox(obj,val)
{
	var val2 = ","+val+","
	var retObj;
	if (obj.length != null){
		for (var i=0;i<obj.length;i++)
		{
			if (val2.indexOf(","+obj[i].value+",")!=-1 || 
				(obj[i].title!='' && (val2.indexOf(","+obj[i].title+",")!=-1 || val2.indexOf(", "+obj[i].title+",")!=-1))) 
			{
				obj[i].checked = true
				retObj = obj[i]
				if (obj[i].type=='radio') break;
			}	
		}
	}else
	{
		obj.checked = true
		retObj = obj
	}
	//alert(retObj);
	return retObj
}

function setSelectIndex(obj,val)
{
	var val2 = ","+val+","
	for (var i=0;i<obj.options.length;i++)
	{
		if (val2.indexOf(","+obj.options[i].value+",")!=-1 || 
			(obj.options[i].title!='' && (val2.indexOf(","+obj.options[i].title+",")!=-1  || val2.indexOf(", "+obj.options[i].title+",")!=-1)))
		{
			obj.options[i].selected = true
		}
		
	}
}

/************************
generateQuery Functions
************************/
function getColumnWiseSQL()
{
	var colName = ""
	var colValue = ""
	var updateStr = ""
	var ideName = g_my_xml.selectSingleNode("/d/fld[@rt='"+g_rtype+"' and @ide='1']").getAttribute("nam")
	var modtimeCol = g_my_xml.selectSingleNode("/d/param").getAttribute("modtime_col")
	for (var i in FieldArray['sql'])
	{
		if (FieldArray['sql'][i]!=''){
			if (g_rec_key=='')
			{
				if (colName!="") colName += ","
					colName += FieldArray['sql'][i].split("&&")[0]
				if (colValue!="") colValue += ","
					colValue += FieldArray['sql'][i].split("&&")[1]
			}else
			{
				if (updateStr !='') updateStr += ","
				updateStr += FieldArray['sql'][i].split("&&")[0] + " = " + FieldArray['sql'][i].split("&&")[1]
			}
		}
	}
	if (g_rec_key=='')
		stemp="insert into "+g_CusTbl+" (["+modtimeCol + "]," + colName+") values(getDate(),"+colValue+")"
	else{
		stemp=(updateStr!='') ? "update "+g_CusTbl+ " set [" + modtimeCol + "]=getDate(), " + updateStr + " where ["+ideName+"] = '"+getAllIdes()+"'" : ""
	}
	//alert(stemp)

	return stemp
}
function getArrayValues(ctrl)
{
	var sql_exp = "";
	if (window.g_bool_exp && ctrl=='sql') sql_exp = g_bool_exp;
	var stemp = ""
	var delimilator = ""
	var hasFieldValue = false
	delimilator =  ((document.all("require") || document.all("ide")) || window.g_propkey) ? "\n" : " and "	

	for (var i in FieldArray[ctrl])
	{
		if (sql_exp != "")	var fk =parseInt(i)
		if (FieldArray[ctrl][i]!=""){ //has value
			
			if (sql_exp.indexOf("["+fk+"]") != -1 && ctrl=='sql') // match the sql_exp
			{
				var re = new RegExp("(1=1|1=0)\\["+fk+"]", "ig");
				sql_exp = sql_exp.replace(re, FieldArray[ctrl][i]);
				hasFieldValue = true
			}
			else 
			{
				if (stemp != "" && ctrl!='xml') stemp += delimilator
				stemp += FieldArray[ctrl][i]
			}
		}else //doesn't have value
		{ 
			if (sql_exp != "")
			{
				var re = new RegExp("\\["+fk+"]", "ig");
				sql_exp = sql_exp.replace(re, "");
			}
		}
	}	
	
	if (sql_exp != "") {
		var re = new RegExp("\\[(\\d)+]", "ig");
		sql_exp = sql_exp.replace(re, "")
		if (hasFieldValue)
		{	
			var re = new RegExp("1=0 or 1=1", "ig");
			sql_exp = sql_exp.replace(re, "1=1")
			re = new RegExp("or 1=1", "ig");
			sql_exp = sql_exp.replace(re, "")
		}
	}	
	
//	alert(sql_exp)
	if (stemp !='' && sql_exp!='') stemp = sql_exp +" and "+ stemp
	else if (stemp =='') stemp = sql_exp 
	
	return stemp
}

function getAllXMLs(){
	var stemp=getArrayValues('xml')
	if (stemp=="") return "";
	if (window.g_propkey && document.all.ClientEditDiv==null)
		XMLquery = "<d><pros>"+g_propkey+"</pros><r rt='"+g_rtype+"' k='{00000000-0000-0000-0000-000000000000}'>"
	else
	{
		XMLquery = "<d><r ";
		if (guid != "") XMLquery += "k='" + guid + "' ";
		XMLquery += "rt='" + g_rtype + "'>";
	}

	if (g_my_xml.selectNodes("/d/col[@rt='1' and @meta='1']").length == 1)
		XMLquery += "<c k='" + g_my_xml.selectSingleNode("/d/col[@rt='1' and @meta='1']").getAttribute("key")
			+ "' spt='" + g_stype + "'/>";
	XMLquery += stemp;
	XMLquery += "</r></d>"
	return XMLquery
}

function getAllXps(){
	var XPQuery = ""
	XPQuery+=getArrayValues('xp')
	return XPQuery
}

function getAllSQLs()
{
	var stringQ = ""
	var orderStr = ""
	var stemp = ""
	//get the sql
	if (document.all("require") || document.all("ide")) //dataentry only
	{
		if (parent.is_staticsql || is_staticsql)
		{
			stringQ = getArrayValues('sql')
		}
		else{
			var identy = getAllIdes()
			if (g_my_xml.selectNodes("/d/r").length == 0){
				if (identy == "") identy = "@Name";
				stringQ += "INSERT INTO fRecords(RecordKEY, UserKEY, Name, RecordTypeKEY) values(@RecordKEY, @UserKEY,'"+identy + "', "+g_rtype+")\n"
			}
			else
			{
				if (identy != "") 	
				{
					stringQ += "UPDATE fRecords SET Name = '"+identy+"', WhenModified = GetDate() WHERE RecordKEY = @RecordKEY\n"
				}
			}
			stemp = "\ndelete from dataxml where RecordKEY = '" + guid + "'"
			stemp += "\nexec UpdateDataXmlBySQL 'select ''" + guid + "'''"
			stringQ += getArrayValues('sql') + stemp
		}	
	}else //search only
	{
		var stemp = getArrayValues('sql')
		if (is_staticsql){
			var id_fld_name = g_my_xml.selectSingleNode("/d//fld[@rt='" + g_rtype + "' and @ide='1']").getAttribute("nam");
			stringQ += "select fRecords.RecordKEY from " + g_CusTbl + ", fRecords where " + g_CusTbl + ".[" + id_fld_name + "] = fRecords.Name and RecordTypeKEY = " + g_rtype + "";
			if (stemp!='')	stringQ+=" and " + stemp
			if (g_orderCause!="") stringQ+= " "+g_orderCause
		}
		else{
			stringQ = "select iValues.RecordKEY from iValues"+g_fromCause+" where iValues.RecordKEY in (select RecordKEY from fRecords where RecordTypeKEY = " + g_rtype + ")";
			if (stemp!='')	stringQ+=" and " + stemp
			if (g_orderCause!="")
			{
				var tmps = stringQ.substring(("select iValues.RecordKEY from iValues"+g_fromCause).length,stringQ.length)
				if (g_selectCause != "") //for enm > 0
				{
					stringQ = "select iValues.RecordKEY from iValues"+g_fromCause+","
					stringQ +=" " + g_selectCause + " "+tmps+" "+g_whereCause
				}
				else //for enm ==0 and tp < 0
				{
					stringQ +=" "+g_whereCause
				}
				stringQ+=" "+g_orderCause
			}
		}
		
	}
	
	return stringQ
}

function generateQuery(Svalue,fk,tp){
	Svalue=getCleanString(Svalue);
	var bol = (tp == 3) ? "and" : "or";
	var NUL;
	
	if ((document.all("require") && document.all("require").length!=0) || (document.all("ide") && document.all("ide").length!=0)) {generateDataEntryQuery(Svalue,fk,tp);return}
	if (tp!='t'){
		var fldNode = g_my_xml.selectSingleNode("/d/fld[@key='"+fk+"']")
		var fldName	 = fldNode.getAttribute("nam")
		if (fldNode.getAttribute("bol")) bol = fldNode.getAttribute("bol");
		if (fldNode.getAttribute("nul")) NUL = fldNode.getAttribute("nul");
	}else
	{
		var colName = g_my_xml.selectSingleNode("/d/col[@key='"+fk+"']").getAttribute("nam")
	}	
	
	switch(tp){
		case '7'://Text
		case '8'://Label
		case '10'://File
		case '11'://Notes
			var lkeNode = g_my_xml.selectSingleNode("/d/lke[@k='"+fk+"']")
			var filter = (lkeNode!=null) ? lkeNode.getAttribute("filter") :  "contains"
			if (Svalue.indexOf(",")!=-1) 
			{
				var cSQL = g_CusTbl+".["+fldName+"] in ("+splitText(Svalue, ",")+") "
				var SQL ="f"+fk+" in (" + splitText(Svalue, ",") + ") ";
			}
			else 
			{
				var cSQL = g_CusTbl+".["+fldName+"] like '%"+Svalue+"%' ";
				if (filter=="contains")
					var SQL ="f"+fk+" like '%"+Svalue+"%' ";
				else if (filter=="starts-with")	
					var SQL = "f"+fk+" like '"+Svalue+"%' "
			}

			FieldArray['sql'][fk+'sql'] = (!is_staticsql) ? getNUL(fk,SQL,NUL,fldName) : getNUL(fk,cSQL,NUL,fldName)
			FieldArray['xml'][fk+'xml'] = "<v f='"+fk+"' a='"+Svalue+"'/>"
			FieldArray['xp'][fk+'xp'] = "v[@f='" + fk + "' and "+filter+"(translate(@a, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), translate('" + Svalue + "', 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'))]"
			break;
		case '4'://Integer
		case '5'://Float1
		case '6'://Float2
		case '12'://Year
		case '9': //date
			var leftVal = Svalue.split(",")[0]
			var rightVal = Svalue.split(",")[1]
			generateQueryForDateAndNumber(leftVal,rightVal,fk,tp,NUL,fldName)
			break;	
		case '3'://checkbox enumeration
		case '2'://selection enumeration
			var enm = fldNode.getAttribute("enm")
			var tempVal=""
			if (is_staticsql){
				var a = Svalue.split(",")
				var Xpath = "@k='"+a[0]+"'"
				for (var i=1;i<a.length;i++){
					tempVal = " " + bol + " @k='"+a[i]+"'"
					Xpath = Xpath + tempVal
				}		
			}else
			{
				var Xpath = ""
				var a = Svalue.split(",")
				for (var i=0;i<a.length;i++){
					if (Xpath!='') Xpath+=", "
					Xpath += getEnmName(enm,a[i])
				}	
				Xpath = "contains(@a,'"+Xpath+"')"
			}
			FieldArray['sql'][fk+'sql'] =(!is_staticsql) ? "f"+fk+" in (" + Svalue +")" : getCustomSQL(bol,enm,fk,Svalue,fldName)
			FieldArray['xp'][fk+'xp'] = "v[@f='"+fk+"' and (" + Xpath + ")]"  
			FieldArray['xml'][fk+'xml'] = "<v f='"+fk+"' k='"+Svalue+"'/>"
			
			break;
		case 't':
			var s = Svalue.split("|")
			var SQL = s[0]
			var XML = s[1]
			var Xp = s[2]
			var xpath=""
			var a = Xp.split("or")
			for (var i=0;i<a.length;i++){
				if (xpath!="")xpath += " or "
				xpath += "@c='"+a[i]+"'"
			}		

			FieldArray['sql'][fk+"Treesql"] = (!is_staticsql) ? "iValues.RecordKEY in (select RecordKEY from fRecordSpecs where CollectionLabelKEY in ("+ SQL+"))" : getCustomTreeSQL(SQL,fk,colName);
			FieldArray['xml'][fk+"Treexml"] =  "<c k='"+fk+"' spt='"+XML+"'/>"
			FieldArray['xp'][fk+"Treexp"]= "[(" + xpath + ")]"
			
//			alert(FieldArray['xml'][fk+"xmlTree"])
//			alert(FieldArray['xp'][fk+"xpTree"])

		default:
			break;	
	}
}

function getCustomSQL(bol,enm,fk,theValue,fldName){
if (!is_staticsql) return
	var enmName = ""
	var itm = theValue.split(",")
	if (enm > 0 ){	
		for (var i=0;i<itm.length;i++)
		{
			if (enmName!="") enmName+=","
			enmName += "'" + getEnmName(enm,itm[i]) + "'"
		}
		return g_CusTbl+".["+fldName+"] in (" + enmName +")"
	}
	else{
		var tmpVal = ""
		for (var i=0;i<itm.length;i++)
		{
			if (bol == "") bol = "and";
			if (tmpVal!='') tmpVal += " " + bol + " "
			enmName = getEnmName(enm,itm[i])
			tmpVal+= "charindex('"+enmName+"', "+g_CusTbl+".["+fldName+"]) <> 0"
		}
		return "(" + tmpVal + ")"
	}
}


function getCustomTreeSQL(SQL,ck,colName)
{
	var str=""
	var a = SQL.split(",")
	var isCollection = g_my_xml.selectSingleNode("/d/col[@key='"+ck+"' and @meta!='1']")		
	if (isCollection != null){
		for (var j=0;j<a.length;j++){
			if (str!="") str += ","
				str += "'"+isCollection.selectSingleNode("spt[@key='"+a[j]+"']").getAttribute("nam")+"'"
		}
		str = g_CusTbl+".["+colName+"] in ("+str+")"
	}	
	return str
}

function generateQueryForDateAndNumber(left,right,fk,tp,NUL,fldName){
	if (left==null) left=""
	if (right==null) right=""
	if (left=="" && right=="") {
		deleteFields(fk)
		return
	}
	
	FieldArray['sql'][fk+'sql'] = SQLQuery(left,right,fk,tp,NUL,fldName)
	FieldArray['xp'][fk+'xp'] = xPathQuery(left,right,fk,tp,NUL,fldName)
	FieldArray['xml'][fk+'xml'] = XmlQuery(left,right,fk,tp,NUL,fldName)
}

function XmlQuery(left,right,fk,tp,NUL,fldName)
{
	if (left != "" && right=="") 
		 return "<v f='"+fk+"' a='"+left+",'/>"  
	else if	(left == "" && right != "") 
		 return "<v f='"+fk+"' a=',"+right+"'/>" 
	else
		return "<v f='"+fk+"' a='"+left+","+right+"'/>"

}

function SQLQuery (left,right,fk,tp,NUL,fldName) {
	if (tp == 9)
	{
		tmp1 = (!is_staticsql) ?  "convert(datetime, f" : "convert(datetime, " ;
	}
	else
		tmp1 = (!is_staticsql) ?  "convert(float, f" : "convert(float, "
	if (left != "" && right=="") {
		if (tp==9)
			tmp1 += (!is_staticsql) ? fk + ') '+ " >= " + "'"+left+"'" : g_CusTbl+".["+fldName+"]) >= '" + left + "'"
		else
			tmp1 += (!is_staticsql) ? fk + ') '+ " >= " + left : g_CusTbl+".["+fldName+"]) >= " + left
	}	
	else if (left == "" && right != ""){
		if (tp==9)
			tmp1 += (!is_staticsql) ? fk + ') ' + " <= " + "'"+right+"'" : g_CusTbl+".["+fldName+"]) <= '" + right + "'"
		else
			tmp1 += (!is_staticsql) ? fk + ') ' + " <= " + right : g_CusTbl+".["+fldName+"]) <= " + right
	}	
	else if (left != "" && right != ""){
		if (tp==9)
			tmp1 += (!is_staticsql) ? fk + ') between ' +"'"+left+"'" + " and " + "'"+right+"'" : g_CusTbl+".["+fldName+"]) between '" + left + "' and '" + right + "'"
		else
			tmp1 += (!is_staticsql) ? fk + ') between ' +left + " and " + right : g_CusTbl+".["+fldName+"]) between " + left + " and " + right
	}	
	return (!is_staticsql) ? tmp1 : getNUL(fk,tmp1,NUL,fldName)
}

function xPathQuery (left,right,fk,tp) {

	if (tp == 9)
	{
		if (left != "" && right == "") 
			tmp1 = "v[@f='" + fk + "' and @a>='" + left + "']";
		else if (left == "" && right != "") 
			tmp1 = "v[@f='" + fk + "' and @a<='" + right + "']";
		else if (left != "" && right != "") 
			tmp1 = "v[@f='" + fk + "' and @a>='" + left + "' and @a<='" + right + "']"
		return tmp1
	}
	else {
		if (left != "" && right=="") 
	  		tmp1 ="v[@f='" + fk + "' and number(@a)>=" + left + "]"
		else if (left == "" && right != "")
	  		tmp1 = "v[@f='" + fk + "' and number(@a)<=" + right + "]"
		else if (left != "" && right != "")
	  		tmp1 ="v[@f='" + fk + "' and number(@a)>=" + left + " and number(@a)<=" + right + "]"

		return tmp1
	}
}

/************************
dataEntry Functions
************************/
function processClientEntry()
{
	guid = (g_my_xml.selectNodes("/d/r").length == 0) ? g_new_guid : g_my_xml.selectSingleNode("/d/r").getAttribute("k")
	//alert(guid)
	var sql = getAllSQLs()
	sql = sql.replace(/@recordkey/ig,"'"+guid+"'")
	if (hasEmptyRequireField()) return alert("Please fill out the require field")
	if (hasRedField()) return alert("Please correct the red field")
	sql = sql.replace(/@UserKEY/ig,g_userkey)
	DataEntryForm.SQLQuery.value = sql
	DataEntryForm.XMLQuery.value = getAllXMLs();
	//return alert(sql)

	//alert(DataEntryForm.SQLQuery.value);
	DataEntryForm.submit();
}

function processBuyerSubmitEntry()
{
	processClientEntry()
}

function processSellerSubmitEntry()
{
	processClientEntry()
}

function processUpdateAgent()
{
/*
	if (g_userkey == -1) //new user
	{
		g_redField['identy'] =  userIdExists(document.all("ide").value)
		if (g_redField['identy']=="true") alert("Please choose a different User ID")
		else DataEntryForm.SQLQuery.value = generateNewUserSQL();
	}
	else DataEntryForm.SQLQuery.value = generateUserPasswordSQL();
*/

	guid = (g_my_xml.selectNodes("/d/r").length == 0) ? g_new_guid : g_my_xml.selectSingleNode("/d/r").getAttribute("k")
	var sql = getAllSQLs()
	sql = sql.replace(/@recordkey/ig,"'"+guid+"'")
	if (hasEmptyRequireField()) return alert("Please fill out the require field")
	if (hasRedField()) return alert("Please correct the red field")
	DataEntryForm.SQLQuery.value += sql
	DataEntryForm.submit();
}

function processUpdateAgentConfig()
{
	if (window.top.frames.title.g_userkey != 0)
	{
		var rec_Num = ConfigForm.PageSize.value;

//		//*******var sql = "\ndelete from fConfigs where UserKEY = " + window.top.frames.title.g_userkey + " and ConfigKEY = 5 and ConfigValue = 1";
//		//*******sql += "\ninsert into fConfigs(UserKEY, ConfigKEY, ConfigValue, KeyName, KeyValue) values(" + window.top.frames.title.g_userkey + ", 5, 1, 'UserSetting', '<res_Num>" + rec_Num + "</res_Num>')";
		var sql = "\ndelete from fConfigs3 where UserKEY = " + window.top.frames.title.g_userkey + " and ConfigKEY = 5 and ConfigValue = 1";
		sql += "\ninsert into fConfigs3(UserKEY, ConfigKEY, ConfigValue, KeyName, KeyValue) values(" + window.top.frames.title.g_userkey + ", 5, 1, 'UserSetting', '<res_Num>" + rec_Num + "</res_Num>')";

		ConfigForm.SQLQuery.value = sql;
		//alert(sql);
		ConfigForm.submit();
	}
}

function processListingEntry()
{
	if (hasEmptyRequireField()) return alert("Please fill out the require field")
	if (hasRedField()) return alert("Please correct the red field")
	var sql = (is_staticsql ||  parent.is_staticsql) ? getColumnWiseSQL() :  getAllSQLs()
	DataEntryForm.SQLQuery.value = sql
	DataEntryForm.XMLQuery.value = getAllXMLs();
	
alert(sql);
//	DataEntryForm.submit(); 
	
}

function processAptEntry(action)
{
	if (action=='delete') {
		sql = "delete fagenda where AgendaKEY='"+g_AgendaKEY+"' and userkey = "+window.top.frames.title.g_userkey+"\n"
		aptForm.SQLQuery.value = sql
		aptForm.submit()
		return
	}
	if (hasEmptyRequireField()) return alert("Please fill out the require field")
	if (hasRedField()) return alert("Please correct the red field")
	var sql = ""
	var xml = getAllXMLs()
	xml = xml.replace(/,'\/>/ig,"'/>")
	var clientXML = "<client>" + document.all("cln_sel_apt").value + "</client>"
	var listXML = ""
	var listObj = document.all("lst_sel_apt")
	for(var i=0;i<listObj.length;i++){
		if (listObj.options[i].selected) {
			listXML += listObj.options[i].value
		}
	}
	listXML = "<listing>"+listXML+"</listing>"
	xml = xml.replace(/<\/r>/ig,listXML+clientXML+"</r>")
//	alert(xml)

	mergeCalendarXML(xml)
	xml =xml.replace(/'/ig,"''")
	sql = "delete fagenda where AgendaKEY='"+g_AgendaKEY+"' and userkey = "+window.top.frames.title.g_userkey+"\n"
	sql += "insert into fagenda (userkey,AgendaKEY,AgendaValue) select "+window.top.frames.title.g_userkey+",isNull(max(AgendaKEY),0)+1,'"+xml+"' from fagenda where userkey = "+window.top.frames.title.g_userkey
	aptForm.SQLQuery.value = sql
	aptForm.submit()
}

function processTskEntry(action)
{
	if (action=='delete') {
		sql = "delete fagenda where AgendaKEY='"+g_AgendaKEY+"' and userkey = "+window.top.frames.title.g_userkey+"\n"
		tskForm.SQLQuery.value = sql
		tskForm.submit()
		return
	}
	if (hasEmptyRequireField()) return alert("Please fill out the require field")
	if (hasRedField()) return alert("Please correct the red field")
	var xml = getAllXMLs()
	xml = xml.replace(/,'\/>/ig,"'/>")
	var clientXML = "<client>" + document.all("cln_sel_tsk").value + "</client>"
	var listXML = ""
	var listObj = document.all("lst_sel_tsk")
	for(var i=0;i<listObj.length;i++){
		if (listObj.options[i].selected) {
			listXML += listObj.options[i].value
		}
	}
	listXML = "<listing>"+listXML+"</listing>"
	xml = xml.replace(/<\/r>/ig,listXML+clientXML+"</r>")
	mergeCalendarXML(xml)
	xml =xml.replace(/'/ig,"''")
	sql = "delete fagenda where AgendaKEY='"+g_AgendaKEY+"' and userkey = "+window.top.frames.title.g_userkey+"\n"
	sql += "insert into fagenda (userkey,AgendaKEY,AgendaValue) select "+window.top.frames.title.g_userkey+",isNull(max(AgendaKEY),0)+1,'"+xml+"' from fagenda where userkey = "+window.top.frames.title.g_userkey
	tskForm.SQLQuery.value = sql
	tskForm.submit()
//	alert(sql)
}

function mergeCalendarXML(xml)
{
	var tmpXml = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
	df_loadXML(tmpXml, xml);
	mergeXML(window.top.frames.title.g_agd_xml,tmpXml,"/d/agd[@k='"+g_AgendaKEY+"']/d/r[@rt='"+g_rtype+"']","/d/r[@rt='"+g_rtype+"']",true);
	mergeXML(g_my_xml, window.top.frames.title.g_agd_xml, "/d", "/d/agd", true);
}

function deleteRecord(rec_key)
{
	//*******DataEntryForm.SQLQuery.value = "delete from fConfigs where KeyValue like '%<pros>" + rec_key + "</pros>%'\n";
	/*
	DataEntryForm.SQLQuery.value = "delete from fConfigs3 where KeyValue like '%" + rec_key + "</pros>%'\n";	
	DataEntryForm.SQLQuery.value += "delete from fValues where RecordKEY = '" + rec_key + "'\n";
	DataEntryForm.SQLQuery.value += "delete from iValues where RecordKEY = '" + rec_key + "'\n";
	DataEntryForm.SQLQuery.value += "delete from fRecordSpecs where RecordKEY = '" + rec_key + "'\n";
	DataEntryForm.SQLQuery.value += "delete from dataxml where RecordKEY = '" + rec_key + "'\n";
	DataEntryForm.SQLQuery.value += "delete from fRecords where RecordKEY = '" + rec_key + "'";
	*/
	DataEntryForm.SQLQuery.value = "update fConfigs3 set deleted = 1 where userkey = "+window.top.frames.title.g_userkey+" and KeyValue like '%" + rec_key + "</pros>%'\n";
	DataEntryForm.SQLQuery.value += "UPDATE fRecords set Deleted = 1 where RecordKEY = '" + rec_key + "'";	
	
	//alert(DataEntryForm.SQLQuery.value);
	//document.write(DataEntryForm.SQLQuery.value)
	DataEntryForm.submit();
}

function getAllIdes()
{
	var identy = ""
	
	//get the ide
	if (document.all("ide") !=null) {
		var iList = document.all("ide")
		if (iList.length == null)
			identy = document.all("ide").value	
		else {
			for(i=0;i<iList.length;i++){
				if (identy != "") identy += " "
				identy += iList[i].value
			}
		}
	}
	return HTMLEncode(identy)
}

/************************
generateDataEntryQuery Functions
************************/

function generateDataEntryQuery(Svalue,fk,tp)
{
	if (window.g_toGenerate && window.g_toGenerate == true){}
	else if (event==null || event.srcElement==null) return

	var fName = ""
	var ideName = ""
	if (parent.is_staticsql || is_staticsql) fName = g_my_xml.selectSingleNode("/d/fld[@key='"+fk+"']").getAttribute("nam")
	
	if (tp > 3 && tp < 7) Svalue = Svalue.replace(",","");
	
	switch(tp){
		case '7'://Text
		case '8'://Label
		case '10'://File
		case '11'://Notes
		case '4'://Integer
		case '5'://Float1
		case '6'://Float2
		case '12'://Year
		case '9': //date
		if (parent.is_staticsql || is_staticsql)
		{
			if (tp == '9' || tp == '4' || tp == '5' || tp == '6' || tp == '12') Svalue = Svalue.replace(",","")
			if (Svalue=='' && g_rec_key!='') 
			{
				Svalue='null'
			}
			else if(Svalue=='') {
				deleteFields(fk)
				return
			}
			FieldArray['sql'][fk+'sql'] = (Svalue=='null') ? "["+fName+"]&&"+Svalue : "["+fName+"]&&'"+Svalue+"'"
		}
		else
		{
			FieldArray['sql'][fk+'sql'] ="delete from fvalues where RecordKEY = @RecordKEY and  FieldKey = "+fk
			FieldArray['sql'][fk+'sql'] += "\n"+"INSERT INTO fValues(RecordKEY, FieldKEY, KeyValue, AuxiliaryValue) values(@RecordKEY, " + fk + ', 0, ' + "'"+Svalue+"')"
		}
		FieldArray['xml'][fk+'xml'] = "<v f='"+fk+"' a='"+Svalue+"'/>"
		break;	
		case '3'://checkbox enumeration
		case '2'://selection enumeration
			var a = Svalue.split(",")
			var total=0
			for (var i=0;i<a.length;i++)
			{
				total += parseInt(a[i])
			}
		if (parent.is_staticsql || is_staticsql)
		{
			if (Svalue=='' && g_rec_key!='') Svalue = 'null'
			else if(Svalue=='') {
				deleteFields(fk)
				return
			}else
			{
				var enmkey = g_my_xml.selectSingleNode("/d/fld[@key='"+fk+"']").getAttribute("enm")
				Svalue = returnAllEnmName(Svalue,enmkey)
			}
			FieldArray['sql'][fk+'sql'] = (Svalue=='null') ? "["+fName+"]&&"+Svalue : "["+fName+"]&&'"+Svalue+"'"
		}
		else
		{
			FieldArray['sql'][fk+'sql'] ="delete from fvalues where RecordKEY = @RecordKEY and  FieldKey = "+fk
			FieldArray['sql'][fk+'sql'] += "\n"+"INSERT INTO fValues(RecordKEY, FieldKEY, KeyValue, AuxiliaryValue) SELECT @RecordKEY, " + fk + ', ' + total + ', '+ "'@'"
		}
		FieldArray['xml'][fk+'xml'] = "<v f='"+fk+"' k='"+Svalue+"'/>"
		break;
		case 't':
			var s = Svalue.split("|")
			var cld = s[0]
			var sptKey = s[1]
			var ck = fk
			if (parent.is_staticsql || is_staticsql)
			{
				if (Svalue=='' && g_rec_key!='') Svalue = 'null'
				else if(Svalue=='') {
					deleteFields(fk)
					return
				}else
					Svalue = returnAllSptName(cld,ck)
				var colName = g_my_xml.selectSingleNode("/d/col[@meta!='1' and @key='"+ck+"']").getAttribute("nam")
				sqlS = (Svalue=='null') ? "["+fName+"]&&"+Svalue : "["+fName+"]&&'"+Svalue+"'"
			}
			else
			{
				sqlS+="DELETE from fRecordSpecs WHERE RecordKEY = @RecordKEY and CollectionLabelKEY = "+enmnodes.item(i).getAttribute("key")+"\n"
				sqlS+="INSERT INTO fRecordSpecs(RecordKEY, CollectionLabelKEY) SELECT @RecordKEY, "+ enmnodes.item(i).getAttribute("key")
			}
			FieldArray['sql'][fk+"sqlTree"] = sqlS
			FieldArray['xml'][fk+"xmlTree"] =  "<c k='"+fk+"' spt='"+sptKey+"'/>"
		break;
		default:
			break;	
	}
}


function returnAllEnmName(val,enmkey){
	var itm = val.split(",")
	var enmName = ""
	for (var i=0;i<itm.length;i++)
	{
		if (enmName!="") enmName+=","
		enmName += getEnmName(enmkey,itm[i])
	}
	return enmName
}



function returnAllSptName(val,ck){
	var itm = val.split(",")
	var sptName = ""
	for (var i=0;i<itm.length;i++)
	{
		if (sptName!="") sptName+=","
		sptName += g_my_xml.selectSingleNode("/d/col[@meta!='1' and @key='"+ck+"']/spt[@key='"+itm[i]+"']").getAttribute("nam")
	}
	return sptName

}

function getDateDiff(dt)
{	
	var t="";
	if (dt!="" && dt!=null){
		t = dt.substr(4,2) + '/' + dt.substr(6,2) + '/' + dt.substr(0,4);
	//	return dt
	}	
	d = Date.parse(t);
	d1 = Date.parse(new Date());
	var diff = (1000 * 60 * 60 * 24);
	return Math.round(Math.abs((d1-d) / diff));
}

function getTwoDateDiff(dt1,dt2)
{	
	var t1="";
	var t2="";
	if (dt1!="" && dt1!=null){
		t1 = dt1.substr(4,2) + '/' + dt1.substr(6,2) + '/' + dt1.substr(0,4);	
	}	
	if (dt2!="" && dt2!=null){
		t2 = dt2.substr(4,2) + '/' + dt2.substr(6,2) + '/' + dt2.substr(0,4);	
	}	
	d1 = Date.parse(t1);
	d2 = Date.parse(t2);
	var diff = (1000 * 60 * 60 * 24);
	return Math.round(Math.abs((d2-d1) / diff));
}

function getCleanString(TheString)
{
	var CleanString ='';
	for(nIndex=0; nIndex<TheString.length; nIndex++)
	{
		var theStr = TheString.charAt(nIndex);
		TheAsc = TheString.charCodeAt(nIndex);
		 if(TheAsc >= 32 && TheAsc <= 126 || TheAsc == 10 || TheAsc == 13 || TheAsc == 9) 
			CleanString += theStr;
	}
	return CleanString;
}