var xmlGdaDOM = getXMLParser();
var xmlHttp = getHTTP();
var lastError;
var gTkt = "none";
var gTkt2 = "none";

////////////////////////////////////////////////////////////////////////////////////////////////
// Mozilla compatible section
function getXMLParser()
{
	var xmlDoc;
	if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	}
	else if (document.implementation && document.implementation.createDocument)
	{
		xmlDoc = document.implementation.createDocument("", "", null); // namespace, root, null
 	}
	return xmlDoc;
}

function getHTTP()
{
    var obj;
    try{ //to get the mozilla httprequest object
        obj = new XMLHttpRequest();
		obj.overrideMimeType('text/xml');
    }catch(e){
        try{ //to get MS HTTP request object
            obj=new ActiveXObject("Msxml2.XMLHTTP.4.0");
        }catch(e){
            try{ //to get MS HTTP request object
                obj=new ActiveXObject("Msxml2.XMLHTTP");
            }catch(e){
                try{// to get the old MS HTTP request object
            		obj = new ActiveXObject("Microsoft.XMLHTTP"); 
                }catch(e){
                    throw new mod.Exception("Unable to get an HTTP request object.");
                }
            }    
        }
    }
    return obj;
}

// Create the loadXML method and xml getter for Mozilla
if (window.DOMParser &&
	window.XMLSerializer &&
	window.Node && Node.prototype && Node.prototype.__defineGetter__)
{
	// XMLDocument did not extend the Document interface in some versions
	// of Mozilla. Extend both!
	//XMLDocument.prototype.loadXML = 
	Document.prototype.loadXML = function (s)
	{
		
		// parse the string to a new doc	
		var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
		
		// remove all initial children
		while (this.hasChildNodes())
			this.removeChild(this.lastChild);
			
		// insert and import nodes
		for (var i = 0; i < doc2.childNodes.length; i++) {
			this.appendChild(this.importNode(doc2.childNodes[i], true));
		}
	};
	
	
	// xml getter : This serializes the DOM tree to an XML String. Usage: var sXml = oNode.xml
	// XMLDocument did not extend the Document interface in some versions
	// of Mozilla. Extend both!

	Document.prototype.__defineGetter__("xml", function () {
		return (new XMLSerializer()).serializeToString(this);
	});

	Document.prototype.__defineGetter__("text", function () {
		return this.firstChild.nodeValue;
	});

	// Extend the Document with selectNodes and selectSingleNodes for Mozilla. 
	XMLDocument.prototype.selectNodes = function(cXPathString, xNode)
	{
		if( !xNode ) { xNode = this; } 

		var oNSResolver = this.createNSResolver(this.documentElement)
		var aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
		var aResult = [];
		for( var i = 0; i < aItems.snapshotLength; i++)
		{
			aResult[i] =  aItems.snapshotItem(i);
		}
		
		return aResult;
	}
	XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode)
	{
		if( !xNode ) { xNode = this; } 

		var xItems = this.selectNodes(cXPathString, xNode);
		if( xItems.length > 0 )
		{
			return xItems[0];
		}
		else
		{
			return null;
		}
	}

	Element.prototype.selectNodes = function(cXPathString)
	{
		if(this.ownerDocument.selectNodes)
		{
			return this.ownerDocument.selectNodes(cXPathString, this);
		}
		else{throw "For XML Elements Only";}
	}

	Element.prototype.selectSingleNode = function(cXPathString)
	{
		if(this.ownerDocument.selectSingleNode)
		{
			return this.ownerDocument.selectSingleNode(cXPathString, this);
		}
		else{throw "For XML Elements Only";}
	}

	Element.prototype.__defineGetter__("text", function () {
		try {
			return this.firstChild.nodeValue;
		}
		catch(e){
			return this.textContent;	
		}
	});

	//Robin 2008/04/16
	Element.prototype.__defineGetter__("xml", function () {
		return (new XMLSerializer()).serializeToString(this);
	});

	Element.prototype.__defineSetter__("text", function (value) {
		//this.nodeValue = value;
		this.textContent = value;
	});
}
//////////////////////////////////////////////////////////////////////////////

function GDAList(clientID, listID, bDebug, nChannel, strTkt)
{
//Property
// int 1, bit 4, datetime 5, float 8, ntext 11, nvarchar 12
// link 30, migo_image 31, audio_video 32, autocoded
if (nChannel == null || nChannel == 1)
{
	this.strXMLUrl = strXMLUrl;
	if (strTkt == null) this.tkt = gTkt;
	else this.tkt = strTkt;
	this.nChannel = 1;
}
else if (nChannel == 2)
{
	this.strXMLUrl = strXMLUrl2;
	if (strTkt == null) this.tkt = gTkt2;
	else this.tkt = strTkt;
	this.nChannel = 2;
}

this.clientID = clientID;
this.listID = listID;
this.strSort = "";
this.sGroup = "";
this.sHaving = "";
this.startIndex = 0;
this.recordCount = 20;
this.strFields = "*";
this.elementID2 = "";
this.bInTable = true;
this.bRegen = false;
this.sRel = "-1";
this.lastError = "";
//this.ticket = ticket;
if (bDebug == null)
    this.bDebug = false;
else
    this.bDebug = bDebug;


//Method
this.deleteItem = gdaDeleteItem;
this.deleteRows = gdaDeleteRows;
this.getCount = gdaGetCount;
this.loadData = gdaLoadData;
this.getData = gdaGetData;
this.getData1 = gdaGetData1;
this.updateData = gdaUpdateData;
this.updateDataPK = gdaUpdateDataPK;
this.updateTrustData = gdaUpdateTrustData;
this.aggDataTo = gdaAggDataTo;
this.buildRule = gdaBuildRule;
this.getSimpleRule = gdaGetSimpleRule;
this.getRules = gdaGetRuleInfo;
this.setRule = gdaSetRule;
this.init = gdaGetSchema;
this.initFromFile = gdaGetSchemaFromFile;
this.getSchema = gdaGetSchema;
this.distinct = gdaGetDistinct;
this.render = gdaRender;
this.render2 = gdaRender2;
this.refresh = gdaRefresh;
this.renderOnce = gdaRenderOnce;
this.exec = gdaFunc;
this.getAllFields = GetAllFields;
this.getListInfo = gdaGetListInfo;
this.joinRule = gdaJoinRule;
this.appendRule = gdaAppendRule;
this.saveRule = gdaSaveRule;
this.updateRule = gdaUpdateRule;
this.delRule = gdaDelRule;
this.cloneRules = gdaCloneRules;
this.setLayout = gdaSetLayout;
this.getLayout = gdaGetLayout;
this.xmlHttpSend = gdaSend;

//----------------------
//060915 cher add
//schema
this.getEmailFieldID = gdaGetEmailFieldID;
this.getNameFieldID = gdaGetNameFieldID;
this.getPasswordFieldID = gdaGetPasswordFieldID;

//query
this.newRuleAll = gdaNewRuleAll;

//list
this.createViewList = gdaCreateViewList;
this.deleteList = gdaDeleteList;
this.clearList = gdaClearList;

//I/O
this.updateListItem = gdaUpdateListItem;
this.getPKXml = gdaGetPKXml;
//----------------------
//Embedded Object, Collection
//this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
this.xmlHttp = getHTTP();
//this.xmlHttp.overrideMimeType('text/xml');


this.aRules = new Array();
this.aRuleList = new Array();
this.schema = new Object();
this.rows = new Array();
this.lookup = new GDALookup();
this.rep = new Array();
//this.init();
}

function gdaSend(strXML)
{
    //this.xmlHttp.open('POST',this.strXMLUrl,false);
	this.xmlHttp.setRequestHeader('Content-Type', 'text/xml');
	this.xmlHttp.setRequestHeader('Accept', '*/*');
	this.xmlHttp.setRequestHeader('Referer',document.URL);
    this.xmlHttp.send(strXML);	
}


function GetAllFields()
{
	var strF = "";
	for (var i=0;i<this.schema.fields.length;i++)
	{
		if (i == this.schema.fields.length -1)
			strF += this.schema.fields[i].fieldID;
		else
			strF += this.schema.fields[i].fieldID + ",";
	}
	return strF;
}
function OneRule(leftop, listid, field, op, value, rightop)
{
    this.leftop = leftop;
    this.listid = listid;
    this.field = field;
    this.op = op;
    this.value = value;
    this.rightop = rightop;
		this.set = SetOneRule;
}

function SetOneRule(leftop, listid, field, op, value, rightop)
{
    this.leftop = leftop;
    this.listid = listid;
    this.field = field;
    this.op = op;
    this.value = value;
    this.rightop = rightop;
}


function gdaParseRuleFunction(strFun)
{
//Function_Namw(p1=v1,p2=v2) - funvalue
	if (strFun.indexOf("Function_") == -1) return strFun;
	var leftP = strFun.indexOf("(");
	var fName = strFun.slice(strFun.indexOf("Function_")+9,leftP);
	var para = strFun.slice(leftP+1, strFun.indexOf(")"));
	var tmp = strFun.slice(strFun.indexOf(")")+1)
	var op = "", val="";
	var oPara = para.split(",");
	var index;
	index = tmp.indexOf("-");
	if (index != -1){
			op = "-";
			val = tmp.slice(index+1);
	}
	index = tmp.indexOf("+");
	if (index != -1){
			op = "+";
			val = tmp.slice(index+1);
	}
	//var strResult = "<value/><valuefunction><funname><![CDATA[Function_"+fName+"]]></funname>";
	var strResult = "<valuefunction><funname><![CDATA[Function_"+fName+"]]></funname>";
	if (op != "") strResult += "<funoperator><![CDATA["+op+"]]></funoperator>";
	if (val != "") strResult += "<funvalue><![CDATA["+val+"]]></funvalue>";
	strResult += "<param>";
	if (oPara.length >= 1){
		for (var i=0;i<oPara.length;i++){
			if (oPara[i].length != 0){
				var p = oPara[i].split("=")[0];
				var v = oPara[i].split("=")[1];
				strResult += "<" + p + "><![CDATA[" + v + "]]></"+p+">";	
			}	
		}
	}
	strResult += "</param></valuefunction>";
	return strResult;
}

function gdaBuildRule()
{
    var strTmp;
    var strQuery = "<ruledetaillist>";
    for (var i=0; i<this.aRules.length;i++){  
		try{   
			if (this.aRules[i].value.indexOf("Function_") != -1){
	    	strTmp = 
            "<ruledetail><leftop>"+this.aRules[i].leftop+"</leftop><listid>"+this.aRules[i].listid+"</listid>"+
            "<fieldid>"+this.aRules[i].field+"</fieldid><operator><![CDATA["+this.aRules[i].op+"]]></operator>"+ gdaParseRuleFunction(this.aRules[i].value)+
            "<rightop>"+this.aRules[i].rightop+"</rightop></ruledetail>";
			}
			else{
	    	strTmp = 
            "<ruledetail><leftop>"+this.aRules[i].leftop+"</leftop><listid>"+this.aRules[i].listid+"</listid>"+
            "<fieldid>"+this.aRules[i].field+"</fieldid><operator><![CDATA["+this.aRules[i].op+"]]></operator><value><![CDATA["+this.aRules[i].value+"]]></value>"+
            "<rightop>"+this.aRules[i].rightop+"</rightop></ruledetail>";
			}
		}
		catch(e){
	    	strTmp = 
            "<ruledetail><leftop>"+this.aRules[i].leftop+"</leftop><listid>"+this.aRules[i].listid+"</listid>"+
            "<fieldid>"+this.aRules[i].field+"</fieldid><operator><![CDATA["+this.aRules[i].op+"]]></operator><value><![CDATA["+this.aRules[i].value+"]]></value>"+
            "<rightop>"+this.aRules[i].rightop+"</rightop></ruledetail>";
		}
      strQuery += strTmp;
    }

    strQuery += "</ruledetaillist>"; 
	if (this.aRules.length == 0) return "null";
  	else return strQuery;
 
}

function gdaGetSimpleRule()
{
    var strTmp;
    var strQuery = "";
    for (var i=0; i<this.aRules.length;i++){  
		try{   
			if (this.aRules[i].value.indexOf("Function_") != -1){
	    	strTmp = 
            (i+1)+" : "+this.aRules[i].leftop+
            " "+this.aRules[i].listid+"."+this.aRules[i].field+" "+this.aRules[i].op+ " "+this.aRules[i].value+
            " "+this.aRules[i].rightop+" ";
			}
			else{
	    	strTmp = 
            (i+1)+" : "+this.aRules[i].leftop+
            " "+this.aRules[i].listid+"."+this.aRules[i].field+" "+this.aRules[i].op+" "+ this.aRules[i].value+
            " "+this.aRules[i].rightop+" ";
			}
		}
		catch(e){
	    	strTmp = 
            (i+1)+" : "+this.aRules[i].leftop+
            " "+this.aRules[i].listid+"."+this.aRules[i].field+" "+this.aRules[i].op+" "+ this.aRules[i].value+
            " "+this.aRules[i].rightop+" ";
		}
      strQuery += strTmp + " , ";
    }

	if (this.aRules.length == 0) return "null";
  	else return strQuery;
 
}

function gdaJoinRule(ruleXml, op)
{
	if (this.aRules.length == 0)
		this.setRule(ruleXml);
	else{
		if (ruleXml == 1) return;
		var index = this.aRules.length;
		//this.aRules[0].leftop = "(" + this.aRules[0].leftop;
		//this.aRules[index-1].rightop = this.aRules[index-1].rightop + ")";
		this.setRule(ruleXml,true,op);
		//this.aRules[index].leftop = "(" + this.aRules[index].leftop;
		//this.aRules[this.aRules.length-1].rightop = this.aRules[this.aRules.length-1].rightop + ")";
	}
}

function gdaAppendRule(lop,lid,field,op,val,rop, bReset, bAuto)
{

	if (bAuto == undefined) bAuto = true;
	if (bReset == "" || bReset == undefined) bReset = false;
	if (bReset == true)
		this.aRules.length = 0;
	var index = this.aRules.length;
	if (index > 1 && bReset == false && bAuto==true){
		this.aRules[0].leftop = "(" + this.aRules[0].leftop;
		this.aRules[index-1].rightop = this.aRules[index-1].rightop + ")";
	}
	this.aRules[index] = new OneRule(lop,lid,field,op,val,rop);
}

function gdaSetRule(strXML, bAppend, theOp)
{
	if (this.aRules.length> 0){
		var index = this.aRules.length;
		this.aRules[0].leftop = "(" + this.aRules[0].leftop;
		this.aRules[index-1].rightop = this.aRules[index-1].rightop + ")";
	}
	else {bAppend = false;theOp = "";}
	if (!isNaN(strXML)) { // srcFilter is ruleID
		var ruleID = strXML;
		var aRules = this.getRules();
		for (var i=0;i<aRules.length;i++){
			if (ruleID == aRules[i].id){
				strXML = aRules[i].ruleXML;
				break;
			}
		}	
	}
//alert("before set:"+strXML);
   	var xmlDOM = getXMLParser();
	if (!bAppend) this.aRules.length = 0;
	if (strXML == null) return;
	var index = this.aRules.length;
	if (index == 0) bAppend = false;
  	xmlDOM.loadXML(strXML);
    var oNodes = xmlDOM.selectNodes("/ruledetaillist/ruledetail"); 
	if (oNodes.length > 0 && !bAppend) this.aRules.length = 0;
	var lop, lid, fid, op, val = "", rop, valf;
	var oFunNode, oParaNode;
	for (var i=0;i<oNodes.length;i++)
	{
		lop = oNodes[i].selectSingleNode("leftop").text;
		lid = oNodes[i].selectSingleNode("listid").text;
		fid = oNodes[i].selectSingleNode("fieldid").text;
		op = oNodes[i].selectSingleNode("operator").text;
		try{
			val = oNodes[i].selectSingleNode("value").text;
		}catch(e){
			val = "";
		}
		if (val == "" || val == null){
			var fname,fop, fval;
			try {
				oFuncNode = oNodes[i].selectSingleNode("valuefunction");
				oParaNode = oFuncNode.selectSingleNode("param");
				fname = oFuncNode.selectSingleNode("funname");
				if (fname != null){
					val = fname.text + "(";
					
					for (var j=0;j<oParaNode.childNodes.length;j++){
						val += oParaNode.childNodes[j].nodeName + "=";
						val += oParaNode.childNodes[j].text +",";
					}
					if (j != 0) val = val.slice(0,val.length-1);
					val += ")";
					fop = oFuncNode.selectSingleNode("funoperator");
					if (fop != null) val += fop.text;
					fval = oFuncNode.selectSingleNode("funvalue");
					if (fval != null) val += fval.text;
				}
			}
			catch(e) {;}
		}
		rop = oNodes[i].selectSingleNode("rightop").text;
		if (!bAppend || this.aRules.length==0)
			this.aRules[i] = new OneRule(lop,lid,fid,op,val,rop);  
		else if (bAppend)
		{
			if (i==0 && oNodes.length == 1)
				this.aRules[parseInt(i+index)] = new OneRule(theOp+"("+lop,lid,fid,op,val,rop+")"); 
			else if (i == 0)
				this.aRules[parseInt(i+index)] = new OneRule(theOp+"("+lop,lid,fid,op,val,rop); 
			else if (i == parseInt(oNodes.length-1))
				this.aRules[parseInt(i+index)] = new OneRule(lop,lid,fid,op,val,rop+")"); 
			else
				this.aRules[parseInt(i+index)] = new OneRule(lop,lid,fid,op,val,rop); 
		}
	}	
//alert("after set:"+this.aRules.length);	 	
}

function gdaSaveRule(ruleName, strRelation)
{
	var strRule = "<ruleinfolist><rule><rulename><![CDATA["+ruleName+"]]></rulename><description><![CDATA["+ruleName+"]]></description><rulerelation><![CDATA[]]></rulerelation>"+this.buildRule()+"</rule></ruleinfolist>";
    var strXML = sr(this.clientID,this.listID,strRule,strRelation,this.tkt);
    if (this.bDebug) alert(strXML);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);
    if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
    xmlGdaDOM.loadXML(this.xmlHttp.responseXML.xml);
    var oNode = xmlGdaDOM.selectSingleNode("/root/result");    
    
    var nRule = parseInt(oNode.text);
	return nRule;
}

function gdaUpdateRule(ruleName, ruleID, strRelation)
{
	var strRule = "<ruleinfolist><rule><ruleid>"+ruleID+"</ruleid><rulename><![CDATA["+ruleName+"]]></rulename><description><![CDATA["+ruleName+"]]></description><rulerelation><![CDATA[]]></rulerelation>"+this.buildRule()+"</rule></ruleinfolist>";
    var strXML = er(this.clientID,this.listID,strRule,strRelation,this.tkt);
    if (this.bDebug) alert(strXML);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);
    if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
}

function gdaDelRule(ruleID)
{
    var strXML = dr(this.clientID,this.listID,ruleID,this.tkt);
    if (this.bDebug) alert(strXML);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);
    if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
}

function gdaCloneRules(nSrcListID,strRules)
{
    var strXML = cloner(this.clientID,this.listID,nSrcListID,strRules,this.tkt);
    if (this.bDebug) alert(strXML);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);
    if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
}

function gdaGetRuleInfo()
{
    var strXML = gri(this.clientID,this.listID,this.tkt);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);
    if (this.bDebug) alert(this.xmlHttp.responseText);
	this.aRuleList.length = 0;
   	var xmlDOM;
  	xmlDOM = this.xmlHttp.responseXML;
    var oNodes = xmlDOM.selectNodes("/ruleinfolist/rule");
	for (var i=0;i<oNodes.length;i++)
	{
		var id = oNodes[i].selectSingleNode("ruleid").text;
		var name = oNodes[i].selectSingleNode("rulename").text;
		var attr = "";//oNodes[i].selectSingleNode("attribute").text;
		var ruleXML;
		var ruleRelation;
		try{ ruleRelation = oNodes[i].selectSingleNode("rulerelation").xml;}
		catch(e){ruleRelation = "";}		
		try{ ruleXML = oNodes[i].selectSingleNode("ruledetaillist").xml;}
		catch(e){ruleXML = "";}
		this.aRuleList[i] = new gdaRuleInfo(id,name,attr,ruleXML, ruleRelation);
	}
	return this.aRuleList;
	//return(this.xmlHttp.responseXML.xml);
}

function gdaGetListInfo(cat,listID,strFields,strSort,bSys)
{
    var strXML = gli(this.clientID,cat,listID,"listid,listname,description,attribute,category,usertablename","listid",false,this.tkt);
    if (this.bDebug) alert(this.strXMLUrl+" " + strXML);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);
    if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
	if (this.xmlHttp.responseXML.xml.indexOf("Ticket") != -1)
	{
		var rtcd = myConfirm("Session timeout! Refresh current page?");
		RefreshTicket(this.clientID);
		if (rtcd) window.open(document.URL,"_self","",true);
	}
	var aLists = new Array();
   	var xmlDOM = getXMLParser();
  	xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
    var oNodes = xmlDOM.selectNodes("/listinfolist/listinfo");  
	for (var i=0;i<oNodes.length;i++)
	{
		var id = oNodes[i].selectSingleNode("listid").text;
		var name = oNodes[i].selectSingleNode("listname").text;
		var desc = oNodes[i].selectSingleNode("description").text;
		var attr = oNodes[i].selectSingleNode("attribute").text;
		var cat = oNodes[i].selectSingleNode("category").text;
		var tblname = oNodes[i].selectSingleNode("usertablename").text;
		aLists[i] = new gdaListInfo(id,name,desc,attr,cat,tblname);
	}
	return aLists;
	//return(this.xmlHttp.responseXML.xml);
}

function gdaListInfo(lid,name,desc,attr,category,tblname)
{
	this.id = lid;
	this.name = name;
	this.desc = desc;
	this.attr = attr;
	this.category = category;
	this.tableName = tblname;
}

function gdaRuleInfo(rid,name,attr,ruleXML, ruleRelation)
{
	this.id = rid;
	this.name = name;
	this.attr = attr;
	this.ruleXML = ruleXML;
	this.ruleRelation = ruleRelation;
}


function gdaSetLayout(xmlGdaExt)
{
   	var xmlDOM = getXMLParser();
	var fieldID;
	if (xmlGdaExt != null)
	{
	  	xmlDOM.loadXML(xmlGdaExt);
	    var oNodes = xmlDOM.selectNodes("/schemalist/schema");
	    for (var i=0;i<oNodes.length;i++)
	    {
    	 	fieldID = oNodes[i].selectSingleNode("fieldid").text;
			oField = this.schema.item(fieldID);
			oField.alias = oNodes[i].selectSingleNode("alias").text;
			oField.left = oNodes[i].selectSingleNode("left").text;
			oField.top = oNodes[i].selectSingleNode("top").text;
			oField.width = oNodes[i].selectSingleNode("width").text;
			oField.height = oNodes[i].selectSingleNode("height").text;
			oField.hotkey = oNodes[i].selectSingleNode("hotkey").text;
			oField.mode = oNodes[i].selectSingleNode("mode").text;
			oField.span = oNodes[i].selectSingleNode("span").text;
			oField.showOPV = oNodes[i].selectSingleNode("showOPV").text;
			oField.size = oNodes[i].selectSingleNode("size").text;
			oField.check = oNodes[i].selectSingleNode("check").text;
			oField.bHidden = oNodes[i].selectSingleNode("bHidden").text;
			oField.disabled = oNodes[i].selectSingleNode("disabled").text;
			oField.asImg = oNodes[i].selectSingleNode("asImg").text;
			oField.useSelect = oNodes[i].selectSingleNode("useSelect").text;
			oField.order = oNodes[i].selectSingleNode("order").text;
			oField.checkFunc = oNodes[i].selectSingleNode("checkFunc").text;
	    }
	}
}

function gdaGetLayout()
{
	var strXML = "<schemalist>";
	var theFields = new Array();
	theFields = this.getAllFields().split(",");
    for (var i=0;i<theFields.length;i++)
    {
		var oField = this.schema.item(theFields[i]);
		if (oField == null) continue;
		strXML += "<schema>";
		strXML += "<fieldid><![CDATA[" + oField.fieldID + "]]></fieldid>";
		strXML += "<alias><![CDATA[" + oField.alias + "]]></alias>";
		strXML += "<left>"+oField.left + "</left>";
		strXML += "<top>"+oField.top + "</top>";
		strXML += "<width>"+oField.width + "</width>";
		strXML += "<height>"+oField.height + "</height>";
		strXML += "<hotkey>"+oField.hotkey + "</hotkey>";
		strXML += "<mode>"+oField.mode + "</mode>";
		strXML += "<span>"+oField.span + "</span>";
		strXML += "<showOPV>"+oField.showOPV + "</showOPV>";
		strXML += "<size>"+oField.size + "</size>";
		strXML += "<check><![CDATA[" + oField.check + "]]></check>";
		strXML += "<bHidden>"+oField.bHidden + "</bHidden>";
		strXML += "<disabled>"+oField.disabled + "</disabled>";
		strXML += "<asImg>"+oField.asImg + "</asImg>";
		strXML += "<useSelect>"+oField.useSelect + "</useSelect>";
		strXML += "<order>"+oField.order + "</order>";
		strXML += "<checkFunc><![CDATA[" + oField.checkFunc + "]]></checkFunc>";
		strXML += "</schema>";
	}
	strXML += "</schemalist>";
	return strXML;
}


function gdaGetSchemaFromFile(strXML)
{
    if (this.bDebug) alert(strXML);
   	var xmlDOM = getXMLParser();
  	xmlDOM.loadXML(strXML);
    if (this.bDebug) alert(xmlDOM.xml);
    this.schema = new GDASchema(xmlDOM.xml);
}


function gdaGetSchema(bSys)
{

    //var strXML = CheckHost();

    var strXML;
	if (bSys == true) strXML = gfis(this.clientID,this.listID,this.tkt);
	else strXML = gfi(this.clientID,this.listID,this.tkt);
    if (this.bDebug) alert(this.strXMLUrl + ":"+ strXML);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);
    if (this.bDebug) alert(this.xmlHttp.responseText);
    this.schema = new GDASchema(this.xmlHttp.responseXML.xml);
	if (this.xmlHttp.responseXML.xml.indexOf("Ticket") != -1)
	{
		var rtcd = myConfirm("Session timeout! Refresh current page?");
		RefreshTicket(this.clientID);
		if (rtcd) window.open(document.URL,"_self","",true);
	}
}


function gdaGetCount(ruleID)
{
	var strQuery;
	var strXML;
	if (ruleID == null)
	{
  		strQuery = this.buildRule();
		if (strQuery == "null") strQuery = "";
		strXML = gcnt(this.clientID,this.listID,strQuery,false,"300",this.tkt, this.sGroup, this.sHaving);    
	}
	else 
	{
 		strXML = gcntr(this.clientID,this.listID,ruleID,false,"300",this.tkt);   
	}
    try
    {
		if (this.bDebug) alert(strXML);
	    this.xmlHttp.open('POST',this.strXMLUrl,false);
        this.xmlHttpSend(strXML);
       	var xmlDOM = getXMLParser();
		if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
      	xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
        var oNode = xmlDOM.selectSingleNode("/root/result");    
        
        return parseInt(oNode.text);
    }
    catch(e)
    {
        return 0;
    }
}

function gdaLoadData(strXML)
{
    try
    {
        if (this.bDebug) alert(strXML);
       	var xmlDOM = getXMLParser();
        if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
      	xmlDOM.loadXML(strXML);
        var oNodes = xmlDOM.selectNodes("/rowlist/row");  
        this.rows.length = 0;  
        for (i=0;i<oNodes.length;i++)
        {
            this.rows[i] = new gdaRow(oNodes[i]);
        }
		this.startIndex = startIndex;
        return true;
    }
    catch(e)
    {
		alert("XML Format Error!");
        return false;
    }
}

function gdaGetData(startIndex,recordCount,rowIndex)
{
    var strQuery = this.buildRule();
    if (this.bDebug) alert("RuleXML = "+strQuery);
	if (strQuery == "null") strQuery="";
    var strXML = drq(this.clientID,this.listID,strQuery,this.strFields,false,this.strSort,startIndex,recordCount,this.sRel,"300",this.sGroup,this.sHaving,this.tkt);   
    try
    {
        if (this.bDebug) alert(strXML);
	    this.xmlHttp.open('POST',this.strXMLUrl,false);
        this.xmlHttpSend(strXML);
        if (this.bDebug){
			if (this.xmlHttp.responseXML.xml != "") alert("XML:"+this.xmlHttp.responseXML.xml);
			else alert("Text:"+this.xmlHttp.responseText);
		}
       	var xmlDOM = getXMLParser();
		if (this.xmlHttp.responseXML.xml == "")
      		xmlDOM.loadXML(this.xmlHttp.responseText);
		else 
      		xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
      	//xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
        var oNodes = xmlDOM.selectNodes("/rowlist/row");  
		var offset;
		if (rowIndex == null) offset = 0;
		else offset = rowIndex;
        this.rows.length = offset; 
        for (i=0;i<oNodes.length;i++)
        {
            this.rows[i+offset] = new gdaRow(oNodes[i]);
        }
		this.startIndex = startIndex;
        return true;
    }
    catch(e)
    {
		if (this.xmlHttp.responseXML.xml.indexOf("Ticket") != -1)
		{
			var rtcd = myConfirm("Session timeout! Refresh current page?");
			RefreshTicket(this.clientID);
			if (rtcd) window.open(document.URL,"_self","",true);
		}
        return false;
    }
}

function gdaGetData1(startIndex,recordCount,ruleID,rowIndex)
{
    var strXML = srq(this.clientID,this.listID,ruleID,this.strFields,false,this.strSort,startIndex,recordCount,"300",this.sGroup,this.sHaving,this.tkt);   
    try
    {
        if (this.bDebug) alert(strXML);
	    this.xmlHttp.open('POST',this.strXMLUrl,false);
        this.xmlHttpSend(strXML);
       	var xmlDOM = getXMLParser();
        if (this.bDebug){
			if (this.xmlHttp.responseXML.xml != "") alert(this.xmlHttp.responseXML.xml);
			else alert(this.xmlHttp.responseText);
		}
		if (this.xmlHttp.responseXML.xml == "")
      		xmlDOM.loadXML(this.xmlHttp.responseText);
		else 
      		xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
      	//xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
        var oNodes = xmlDOM.selectNodes("/rowlist/row");  
		var offset;
		if (rowIndex == null) offset = 0;
		else offset = rowIndex;
        this.rows.length = offset; 
        for (i=0;i<oNodes.length;i++)
        {
            this.rows[i+offset] = new gdaRow(oNodes[i]);
        }
		this.startIndex = startIndex;
        return true;
    }
    catch(e)
    {
		if (this.xmlHttp.responseXML.xml.indexOf("Ticket") != -1)
		{
			var rtcd = myConfirm("Session timeout! Refresh current page?");
			RefreshTicket(this.clientID);
			if (rtcd) window.open(document.URL,"_self","",true);
		}
        return false;
    }
}

function gdaUpdateData(strXMLListItem,mode,bOuter)
{
    var strXML = upd(this.clientID,this.listID,strXMLListItem,mode,"180",this.tkt, bOuter);  
    try
    {
        if (this.bDebug) alert(strXML);
        this.xmlHttp.open("POST",this.strXMLUrl,false);
        this.xmlHttpSend(strXML);
        if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
       	var xmlDOM = getXMLParser();
      	xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
        var oNode = xmlDOM.selectSingleNode("/listitem/result");
        if (oNode.text == 0) return true;
        else {this.lastError=this.xmlHttp.responseXML.xml;return false;}
    }
    catch(e)
    {
		this.lastError=this.xmlHttp.responseXML.xml;
		if (this.xmlHttp.responseXML.xml.indexOf("Ticket") != -1)
		{
			var rtcd = myConfirm("Session timeout! Refresh current page?");
			RefreshTicket(this.clientID);
			if (rtcd) window.open(document.URL,"_self","",true);
		}
        return false;
    }
}

function gdaUpdateDataPK(strXMLListItem,strPKs,bOuter)
{
    var strXML = updpk(this.clientID,this.listID,strXMLListItem,strPKs,this.tkt, bOuter);  
    try
    {
        if (this.bDebug) alert(strXML);
        this.xmlHttp.open("POST",this.strXMLUrl,false);
        this.xmlHttpSend(strXML);
        if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
       	var xmlDOM = getXMLParser();
      	xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
        var oNode = xmlDOM.selectSingleNode("/root/result");
        if (oNode.text == 0) return true;
        else {this.lastError=this.xmlHttp.responseXML.xml;return false;}
    }
    catch(e)
    {
		this.lastError=this.xmlHttp.responseXML.xml;
		if (this.xmlHttp.responseXML.xml.indexOf("Ticket") != -1)
		{
			var rtcd = myConfirm("Session timeout! Refresh current page?");
			RefreshTicket(this.clientID);
			if (rtcd) window.open(document.URL,"_self","",true);
		}
        return false;
    }
}

function gdaUpdateTrustData(strXMLListItem,mode,bOuter)
{
    var strXML = updt(this.clientID,this.listID,strXMLListItem,mode,"180",this.tkt, bOuter);  
    try
    {
        if (this.bDebug) alert(strXML);
        this.xmlHttp.open("POST",this.strXMLUrl,false);
        this.xmlHttpSend(strXML);
        if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
       	var xmlDOM = getXMLParser();
      	xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
        var oNode = xmlDOM.selectSingleNode("/listitem/result");
        if (oNode.text == 0) return true;
        else {this.lastError=this.xmlHttp.responseXML.xml;return false;}
    }
    catch(e)
    {
		this.lastError=this.xmlHttp.responseXML.xml;
		if (this.xmlHttp.responseXML.xml.indexOf("Ticket") != -1)
		{
			var rtcd = myConfirm("Session timeout! Refresh current page?");
			RefreshTicket(this.clientID);
			if (rtcd) window.open(document.URL,"_self","",true);
		}
        return false;
    }
}

function gdaAggDataTo(nDstID,strDstFields)
{
	var strQuery = this.buildRule();
	if (strQuery == "null") strQuery = "";
    var strXML = infq(this.clientID,nDstID,this.listID,strQuery,1,"300",this.sRel,strDstFields,this.strFields,"",this.sGroup,this.sHaving,this.tkt);  
    try
    {
        if (this.bDebug) alert(strXML);
        this.xmlHttp.open("POST",this.strXMLUrl,false);
        this.xmlHttpSend(strXML);
        if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
       	var xmlDOM = getXMLParser();
      	xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
        var oNode = xmlDOM.selectSingleNode("/root/result");
        if (oNode.text == 0) return true;
        else return false;
    }
    catch(e)
    {
		this.lastError=this.xmlHttp.responseXML.xml;
		if (this.xmlHttp.responseXML.xml.indexOf("Ticket") != -1)
		{
			var rtcd = myConfirm("Session timeout! Refresh current page?");
			RefreshTicket(this.clientID);
			if (rtcd) window.open(document.URL,"_self","",true);
		}
        return false;
    }
}

function gdaDeleteRows(nStart, nEnd)
{
	var strPK;
	var strPKF = this.schema.getPK();
	var aPK = strPKF.split(",");

	if (nEnd == null) nEnd = nStart;
	for (var j=nStart;j<=nEnd;j++)
	{
		strPK  = "<pklist>";
		for (var i=0;i<aPK.length;i++)
		{
			strPK += "<pk><fieldid>"+aPK[i]+"</fieldid>";
			strPK += "<value>" + this.rows[j].item(aPK[i])+"</value></pk>";	
		}
		strPK += "</pklist>";
		this.deleteItem(strPK,true);	
	}
	return true;
}

function gdaDeleteItem(strPK,bOuter)
{
    var strXML = dli(this.clientID,this.listID,strPK,"180",this.tkt,bOuter);   
    try
    {
        if (this.bDebug) alert(strXML);
        this.xmlHttp.open("POST",this.strXMLUrl,false);
        this.xmlHttpSend(strXML);
        if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
       	var xmlDOM = getXMLParser();
      	xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
        var oNode = xmlDOM.selectSingleNode("/root/result");
        if (oNode.text == 0) return true;
        else return false;
    }
    catch(e)
    {
		if (this.xmlHttp.responseXML.xml.indexOf("Ticket") != -1)
		{
			var rtcd = myConfirm("Session timeout! Refresh current page?");
			RefreshTicket(this.clientID);
			if (rtcd) window.open(document.URL,"_self","",true);
		}
        return false;
    }
}

function RefreshTicket(clientID)
{
		var oPairs = new Array();
		oPairs[0] = new Pair(clientID+"_Ticket", "");
		wmx_SetSession(oPairs);
}

function IsImage()
{
    if (this.dataType == '31') return(true);
    else return(false);
}

function IsDateTime()
{
    if (this.dataType == '5') return(true);
    else return(false);
}

function gdaRow(oNodeIn)
{
    try
    {
        if (oNodeIn == null)
            this.oNode = xmlGdaDOM.createElement("row");
		else this.oNode = oNodeIn;
    }
    catch(e)
    {
    }
    //this.oNode = oNode;
    this.xml = this.oNode.xml;
    this.item = gdaGetField;
    this.addField = gdaAddField;  
	this.delField = gdaDelField;
    this.getXml = gdaGetXml; 
	this.getArray = gdaGetFieldsArray; 
	this.thePairs = new Array();
	this.checkNull = gdaCheckNull;
}

function Pair(key,value)
{
	this.key = key;
	this.value = value;
}

function getPairValue(key, oPairs)
{
	for (var i=0;i<oPairs.length;i++)
	{
			if (oPairs[i].key == name)
			{
				return (value);
			}
	}
	return "";
}
function gdaGetFieldsArray()
{
    var theArray = new Array();
    var oChilds = this.oNode.childNodes;
    for (var i=0;i<oChilds.length;i++)
    {
		theArray[i] = new Pair(oChilds.item(i).nodeName,oChilds.item(i).text);
    }
    return theArray;
}

function gdaGetXml()
{
    var theXml;
	var strData;
    var oChilds = this.oNode.childNodes;

    theXml = "<row>";

	var regH = /<!\[CDATA\[/g;
	var regT = /]]>/g;
    for (var i=0;i<oChilds.length;i++)
    {
		if (oChilds.item(i).nodeName.indexOf(".") != -1) continue;
		strData = oChilds.item(i).text;
		if (strData.indexOf("<![CDATA[") == -1)
        	theXml += "<"+ oChilds.item(i).nodeName+"><![CDATA[" + strData + "]]></"+oChilds.item(i).nodeName+">";
		else
		{
			strData = strData.replace(regH, "wmx![CDATA[");
			strData = strData.replace(regT, "]]xmw");
        	theXml += "<"+ oChilds.item(i).nodeName+"><![CDATA[" + strData + "]]></"+oChilds.item(i).nodeName+">";
		}
    }
    theXml += "</row>";
    this.xml = theXml;
    return theXml;
}

function gdaCheckNull(name)
{
    var val;
    try { val = this.oNode.selectSingleNode(name).text;}
    catch(e) {return true;}
	return false;
}

function gdaGetField(name)
{
    var val;
    var val1,val2;	
    try { 
		val = this.oNode.selectSingleNode(name).text;
		val1 = this.oNode.selectSingleNode(name).xml;
		val2 = "<"+name+">"+val+"</"+name+">";
		if (val1 != val2 && val1.length > val2.length &&(val1.length-val2.length)<=2) { //keep blank 
			val = val1.slice(val1.indexOf(">")+1,val1.lastIndexOf("<"));
		}	
	}
    catch(e) {val = "";}

	var regH = /wmx!\[CDATA\[/g;
	var regT = /]]xmw/g;
	val = val.replace(regH, "<![CDATA[");
	val = val.replace(regT, "]]>");		
    return (val);
}

function gdaAddField(name,value)
{
	var bNew = 1;

	if (this.thePairs[name] != undefined) bNew = 0;

	this.thePairs[name] = value;

	var oChild = this.oNode.selectSingleNode(name);

	if (oChild != null){
		oChild.text = value;
		return;
	}
    var newNode = xmlGdaDOM.createElement(name);
    newNode.text = value;   
    this.oNode.appendChild(newNode);
}

function gdaDelField(name)
{
	var index = 0;

	this.thePairs[name] = undefined;

	var oNode = this.oNode.selectSingleNode(name);
	if (oNode != null) this.oNode.removeChild(oNode);
}

//Schema DOM

function GDASchema(xmlInfo)
{
   	var xmlDOM = getXMLParser();
  	xmlDOM.loadXML(xmlInfo);
    var oNodes = xmlDOM.selectNodes("/schemalist/schema");
    this.fields = new Array();
    for (var i=0;i<oNodes.length;i++){
        this.fields[i] = new GDAFieldSchema(oNodes[i]);
    }
	//this.xml = xmlInfo;
	this.fieldsXml = xmlInfo.slice(xmlInfo.indexOf("<schemalist>")+12,xmlInfo.indexOf("</schemalist>"));
    this.item = gdaSchemaItem;
	this.getPK = gdaGetPK;
	this.addField = gdaAddNewField;
}


function gdaAddNewField(fID,name,type, len, bPK, bRel)
{
	var strXML;
	if (bPK == undefined) bPK = 0;
	if (bRel == undefined) bRel = 0;
	if (fID.indexOf("<") != -1) { //the data is XML
		strXML = fID;	
	}
	else {
		strXML = "<schema><fieldid><![CDATA["+fID+"]]></fieldid><displayname><![CDATA["+name+"]]></displayname>";
		strXML += "<ispk><![CDATA["+bPK+"]]></ispk><isrelationkey><![CDATA["+bRel+"]]></isrelationkey>";
		strXML += "<sequence><![CDATA["+parseInt(this.fields.length+1)+"]]></sequence>";
		strXML += "<classification><![CDATA[0]]></classification><multiselect><![CDATA[0]]></multiselect>";
		strXML += "<datatype><![CDATA["+type+"]]></datatype><datalength><![CDATA["+len+"]]></datalength>";
		strXML += "<attribute><![CDATA[1]]></attribute><optionxml></optionxml></schema>";
	}
   	var xmlDOM = getXMLParser();

	var bOK = xmlDOM.loadXML("<?xml version='1.0'?><schemalist>"+strXML+"</schemalist>");
	if (!bOK) return false;
	var oNode = xmlDOM.selectNodes("/schemalist/schema");

	var fieldID = oNode[0].selectSingleNode("fieldid").text;
	for (var i=0;i<this.fields.length;i++){
		if (fieldID == this.fields[i].fieldID) {return;}
	}
	this.fields[this.fields.length] = new GDAFieldSchema(oNode[0]);
	this.fieldsXml += strXML;
	//this.xml = "<?xml version='1.0'?><schemalist>"+this.fieldsXml+"</schemalist>";
}

function gdaSchemaItem(name)
{
    for (var i=0;i<this.fields.length;i++)
    {
        if (this.fields[i].fieldID == name) return(this.fields[i]);
    }
		return(null);
}

function gdaGetPK()
{
	var strPK = "";
    for (var i=0;i<this.fields.length;i++)
    {
        if (this.fields[i].isPK == 1) strPK += this.fields[i].fieldID + ",";
    }
	return(strPK.slice(0, strPK.length-1));
}

function GDAFieldSchema(xmlNode)
{
    this.fieldID = xmlNode.selectSingleNode("fieldid").text;
    this.displayName = xmlNode.selectSingleNode("displayname").text;
    this.isPK = xmlNode.selectSingleNode("ispk").text;
    this.isRelationKey = xmlNode.selectSingleNode("isrelationkey").text;
    this.classification = xmlNode.selectSingleNode("classification").text;
    this.multiSelect = xmlNode.selectSingleNode("multiselect").text;
    this.sequence  = xmlNode.selectSingleNode("sequence").text;
    this.dataType = xmlNode.selectSingleNode("datatype").text;
	if (this.dataType == 17) this.dataType = 5;
    this.dataLength = xmlNode.selectSingleNode("datalength").text;
    this.attribute = xmlNode.selectSingleNode("attribute").text;
    this.options = new Array();
    this.optdsp = GDAOptionValue;
	var sy1 = xmlNode.xml.indexOf("<syncinfo");

	if (sy1 != -1){
		var sy2 = xmlNode.xml.indexOf("</syncinfo>")+11;
		this.xml = xmlNode.xml.slice(0,sy1)+ xmlNode.xml.slice(sy2,xmlNode.xml.length);
	}
	else this.xml = xmlNode.xml;
    var xmlOptions = xmlNode.selectNodes("optionxml/optionlist/option");
    var cid,dsp,seq;
    for (var i=0;i<xmlOptions.length;i++)
    {
        cid = xmlOptions[i].selectSingleNode("codeid").text;
        dsp = xmlOptions[i].selectSingleNode("displayname").text;
        seq = xmlOptions[i].selectSingleNode("sequence").text;
        this.options[i] = new GDAOption(cid,dsp,seq);
    }
//display control
	this.check = "";
	this.bHidden = false;
	this.disabled = false;
	this.asImg = false;
	this.useSelect = false;
	this.order = this.sequence;

	this.alias = this.displayName;
	this.left = "";
	this.top = "";
	this.width = "";
	this.height = "";
	this.hotkey = this.sequence;
	this.mode = "H"; //Horizontal 
	this.span = "";
	this.showOPV = true;
	this.size = "20";

	this.checkFunc = "";

	this.dspFormat = ""; //default display all, F3E3 : show first 3 and last 3 char, f3e3:mark first 3 and last 3 char

//method
    this.isImage = IsImage;
    this.isDateTime = IsDateTime;
	this.addOption = gdaAddOption;	
}


function gdaAddOption(cid,dsp,seq)
{
    this.options[this.options.length] = new GDAOption(cid,dsp,seq);	
	var strOption = "<option><codeid><![CDATA["+cid+"]]></codeid>";
	strOption += "<displayname><![CDATA["+dsp+"]]></displayname>";
	strOption += "<sequence><![CDATA["+seq+"]]></sequence></option>";
	var nEnd = this.xml.indexOf("</optionlist>");
	if (nEnd == -1) this.xml += "<optionxml><optionlist>"+strOption+"</optionlist></optionxml>";
	else {
		var strH = this.xml.slice(0,nEnd);
		var strT = this.xml.slice(nEnd);
		this.xml = strH + strOption + strT;
	}
}

function GDAOptionValue(code)
{
	if (this.classification == "1"){
	    for (var i=0; i<this.options.length;i++)
	    {
	        if (code == this.options[i].codeID) return(this.options[i].displayName);
	    }
	}
	else return code;
    return "";
}


function GDAOption(codeID, displayName, sequence)
{
    this.codeID = codeID;
    this.displayName = displayName;
    this.sequence = sequence;
	this.bShow = true;
	//display control
	this.alias = this.displayName;
	this.order = sequence; 
	this.hotKey = sequence.toString();
}

function gdaGetDistinct(strFields)
{
    var aRows = new Array();
    var fields = strFields.split(",");
    var bExist;
    //aRows[aRows.length] = this.rows[0];
    for (var i=0;i<this.rows.length;i++)
    { 
        bExist = false;       
        for (var j=0;j<aRows.length;j++)
        {

            for (var k=0;k<fields.length;k++)
            {
                if (aRows[j].item(fields[k]) == this.rows[i].item(fields[k]))
                {
                        bExist = true;
                }  
								if (bExist) break;                 
            }
            if (bExist) break;
        }
        if (!bExist) 
        {
            aRows[aRows.length] = this.rows[i];  
        }
    }
    return aRows;
}


function gdaGetSubData(index)
{
    var aRows = new Array();
    var fields = this.strDistinct.split(",");
    var bExist;
    var aRows = new Array();
    var oRow = this.renderSet[index];
    for (var i=0;i<this.rows.length;i++)
    {        

        bExist = true;
        for (var j=0;j<fields.length;j++)
        {
            if (this.rows[i].item(fields[j]) != oRow.item(fields[j]))
            {
                    bExist = false;
            }                   
        }
        if (bExist) 
        {
            aRows[aRows.length] = this.rows[i];  
        }
    }
    return aRows;
}


////////////////////////////////////////////////////

function gdaGetFields(strRepeat, strExclude)
{
    //var re = /%wmx_field_(\w*)%/g;  
    var re = /%wmx_field_([A-Za-z0-9_.]*)%/g;
    var aFields = new Array();
    var aFields2 = new Array();
    aFields = strRepeat.match(re);
    aFields2 = strExclude.match(re);
    var strKeywords = "";
    var bInside = false;
    for (i=0;i<aFields.length;i++)
    {
        bInside = false;
        try
        {
            for (var j=0;j<aFields2.length;j++)
            {
                if (aFields[i] == aFields2[j])
                {
                    bInside = true;
                    break;
                }
            }
        }
        catch(e)
        {;}
        aFields[i] = aFields[i].substring(11,aFields[i].length-1);
        if (strKeywords.indexOf(aFields[i]+";") == -1 && !bInside) strKeywords += aFields[i]+";";
    }
    strKeywords = strKeywords.slice(0,strKeywords.length-1);
    var aKeywords = strKeywords.split(";");
    return aKeywords;  
}


function gdaRenderOnce(elementID,frameID,callBack)
{
    var strResult;
    if (elementID == "") strResult = document.body.innerHTML;
    else strResult = document.all(elementID).innerHTML;

    this.aKeywords = gdaGetFields(strResult, "");  

    var rep;
    var key;
    var bImage, bDate;
    for (var i=0;i<this.aKeywords.length;i++)
    {
        var re = new RegExp("%wmx_field_"+this.aKeywords[i]+"%","g");
        try
        {
            key = this.aKeywords[i];
            var col = key.split(".");
            var wf = col[col.length-1];
            if (wf.indexOf("wf_") != -1) 
            {
                key = key.substr(0,key.length-wf.length-1);
                rep = this.exec(wf,"",key,-1); 
            }
            else rep = key;            
        }
        catch(e) {rep=key; bImage=false;bDate=false;}
        if (rep == null) rep = "";
        strResult = strResult.replace(re,rep);  

    }
    if (elementID == "")
        document.body.innerHTML = strResult;   
    else
        document.all(elementID).innerHTML = strResult;    

    var aElements = new Array();
    for (var i=0;i<document.all.length;i++)
    {
        if (document.all(i).tagName == "SELECT" && document.all(i).id.indexOf("wmx_") != -1)
        {
            aElements[aElements.length] = document.all(i);
        }
    }
    if (aElements.length > 0) GenerateOptions(aElements,oGda);

    
    if (frameID != "")
    {
         top.document.all(idFrame).style.height = document.body.scrollHeight;           
    }
    if (callBack != "") setTimeout(callBack,0);
    
}

function gdaRefresh(elementID, strDistinct, nRepeat, frameID, callBack, elementID2, nRepeat2)
{
    this.bRegen = true;
    this.render(elementID, strDistinct, nRepeat, frameID, callBack, elementID2, nRepeat2);
    this.bRegen = false; 
}

function gdaRender(elementID, strDistinct, nRepeat, frameID, callBack, elementID2, nRepeat2, tableID)
{
    try 
    {
        document.all(elementID).style.display = "";
    }
    catch(e) {alert(e);}

    var strHead, strTail, strAll;
    if (this.bRegen == false)
    {
        this.strRepeat = "<"+document.all(elementID).tagName+">"+document.all(elementID).innerHTML+"</"+document.all(elementID).tagName+">";
	//this.strRepeat = document.all(elementID).innerHTML;
        if (tableID != "")
        {
            strAll = document.all(tableID).innerHTML;            
            var s = strAll.indexOf(this.strRepeat.slice(0,30));
            strHead = strAll.slice(0,s);
            var t = strAll.indexOf(this.strRepeat.slice(-50));
            strTail = strAll.slice(t+50);          
            this.strHead = strHead;
            this.strTail = strTail;
        }

    }
    this.elementID = elementID;
    this.strDistinct = strDistinct;
    this.getRepeat = gdaGetRepeat;
    if (this.strDistinct != "")
        this.renderSet = this.distinct(strDistinct);
    else
        this.renderSet = this.rows;
    if (elementID2 != "")
    {
        if (this.bRegen == false)
        {
            this.elementID2 = elementID2;
            this.nRepeat2 = nRepeat2;
            this.strRepeat2 = document.all(elementID2).innerHTML;
        }
        this.aKeywords = gdaGetFields(this.strRepeat, this.strRepeat2);
        this.aKeywords2 = gdaGetFields(this.strRepeat2, "");
        this.getRepeat2 = gdaGetRepeat2;
        this.getSubData = gdaGetSubData;
    }
    else 
        this.aKeywords = gdaGetFields(this.strRepeat, "");
    var strHTML = "";
    var strH, strT, strRT;
    switch(nRepeat)
    {
        case 1:
        default:
                strH = "";strT = "";strRT = "";
                break;
        case 2:
                strH = '<table width="100%" border="0" cellspacing="0" cellpadding="2"><tr>';
                strT = '</tr></table>';
                break;
        case 3:
                strH = '<table width="100%" border="0" cellspacing="0" cellpadding="3"><tr>';
                strT = '</tr></table>';
                break;
         
    }
    var strCell;
    for (var i=0;i<this.renderSet.length;i++)
    {
        switch(nRepeat)
        {
            case 1:
            default:
                    var strTmp = this.getRepeat(i); 
                    if (this.elementID2 != "")
                    {
                        strHTML += this.render2(i,strTmp);
                    }
                    else
                        strHTML += strTmp;
                    break;
            case 2:
                    var strTmp = this.getRepeat(i); 
                    if (this.elementID2 != "")
                    {
                        strCell = this.render2(i,strTmp);
                    }
                    else
                        strCell = strTmp;
                    strCell = "<td>" + strCell + "</td>";
                    if ((i%2) == 0) strCell = "</tr><tr>"+strCell;
                    strHTML += strCell;
                    break;
            case 3:
                    var strTmp = this.getRepeat(i); 
                    if (this.elementID2 != "")
                    {
                        strCell = this.render2(i,strTmp);
                    }
                    else
                        strCell = strTmp;
                    strCell = "<td>" + strCell + "</td>";
                    if ((i%3) == 0) strCell = "</tr><tr>"+strCell;
                    strHTML += strCell;
                    break;
             
        }
    } 
    if (tableID != "")
        document.all(tableID).innerHTML = this.strHead+strH + strHTML + strT+this.strTail;    
    else 
        document.all(elementID).innerHTML = strH + strHTML + strT;
    var aElements = new Array();
    for (var i=0;i<document.all.length;i++)
    {
        if (document.all(i).tagName == "SELECT" && document.all(i).id.indexOf("wmx_") != -1)
        {
            aElements[aElements.length] = document.all(i);
        }
    }
    if (aElements.length > 0) GenerateOptions(aElements,oGda);
    
    if (frameID != "")
    {
         top.document.all(idFrame).style.height = document.body.scrollHeight;           
    }
    if (callBack != "") setTimeout(callBack,0);
}


function GenerateOptions(aElements, oGda)
{
    for (var k=0;k<aElements.length;k++)
    {
        var key;
        var col = aElements[k].id.slice(4).split(".");
        if (col.length > 1) key = col[0];
        else key = aElements[k].id.slice(4);
        var oField = oGda.schema.item(key);
        if (oField.classification == 1)
        {
            for (var i=0;i<oField.options.length;i++)
            {
                var oOption = document.createElement("OPTION");
                aElements[k].options.add(oOption);  
                oOption.innerText = oField.options[i].displayName;
                oOption.value = oField.options[i].codeID;
                if (aElements[k].idx==oOption.value) oOption.selected = true;
            }
        }
        else if (col.length > 1)
        {
            var aRows, toName;
            for (var j=0;j<oGda.lookup.aFromName.length;j++)
            {
                if (oGda.lookup.aFromName[j] == col[0])
                {
                   aRows = oGda.lookup.aRows[j];
                   toName = oGda.lookup.aToName[j];                     
                }
            }
            for (var i=0;i<aRows.length;i++)
            {
                var oOption = document.createElement("OPTION");
                aElements[k].options.add(oOption);  
                oOption.innerText = aRows[i].item(col[1]);
                oOption.value = aRows[i].item(toName);
                if (aElements[k].idx==oOption.value) oOption.selected = true;
            }
        }
    }
}


function gdaFunc(funcName,val,key,index)
{
    switch(funcName)
    {
        case "wf_img":
                return (strGetMedia+val);
        case "wf_sdate":
                return(val.substr(0,10));
        case "wf_key":
                return("%wmx_field_"+key+"%");
        case "wf_st":
                return(val.substr(0,5));
        case "wf_sum":
                var sum = 0;
                if (this.schema.item(key).dataType != 1 && this.schema.item(key).dataType != 8) return 0;
                for (var i=0;i<this.rows.length;i++)
                {
                    val = this.rows[i].item(key);
                    sum += parseInt(val);
                }
                return sum;
        case "wf_avg":
                var sum = 0;
                if (this.schema.item(key).dataType != 1 && this.schema.item(key).dataType != 8) return 0;
                for (var i=0;i<this.rows.length;i++)
                {
                    val = this.rows[i].item(key);
                    sum += parseInt(val);
                }
                return sum/this.rows.length;
        case "wf_des":
                return(this.schema.item(key).displayName);
        case "wf_idx":
                return (index);
        case "wf_mod2":				
                return (index%2+1);
        case "wf_list":
                return(val+'" id="wmx_'+key);
        case "wf_opt":
				if (!this.schema.item(key).classification) return val;
                return(this.schema.item(key).optdsp(val));
		case "wf_rep":
						return (getPairValue(key, this.rep));
        default:
                return val;        
    }

}


function gdaSplit(strBlock, elementID)
{
    var pos = new Array();
    var strTmp = strBlock.toLowerCase();
    var i1 = strTmp.indexOf("<span id="+elementID);
    strTmp = strTmp.slice(i1);
    var i2 = strTmp.indexOf(">")+1;
    strTmp = strTmp.slice(i2);
    var i3 = strTmp.indexOf("</span>");
    pos[0] = i1;
    pos[1] = i1+i2;
    pos[2] = i1+i2+i3;
    pos[3] = i1+i2+i3+7;
    return pos;
}


function gdaRender2(index,strBlock)
{
    var pos = gdaSplit(strBlock,this.elementID2);

    this.renderSet2 = this.getSubData(index);


    var strHTML = "";
    var strH, strT,strRT;
    switch(this.nRepeat2)
    {
        case 1:
        default:
                strH = "";strT = "";
                break;
        case 2:
                strH = '<table width="100%" border="0" cellspacing="0" cellpadding="2"><tr>';
                strT = '</tr></table>';
                break;
        case 3:
                break;
         
    }

    var strCell;
    for (var i=0;i<this.renderSet2.length;i++)
    {
        switch(this.nRepeat2)
        {
            case 1:
            default:
                    strHTML += this.getRepeat2(i); 
                    break;
            case 2:
                    strCell = this.getRepeat2(i);
                    strCell = "<td>" + strCell + "</td>";
                    if ((i%2) == 0) strCell = "</tr><tr>"+strCell;
                    strHTML += strCell;
                    break;
            case 3:
                    break;
             
        }
    }  
    strHTML = strH + strHTML + strT;
    var strResult = strBlock.substring(0,pos[0])+strHTML+strBlock.slice(pos[3]);
    return (strResult);  
}


function gdaGetRepeat2(index)
{
    var strResult = this.strRepeat2;
    this.lookup.joinRow(this.renderSet2[index],this.aKeywords2);
    var rep;
    var key;
    var bImage, bDate;
    for (var i=0;i<this.aKeywords2.length;i++)
    {

        var re = new RegExp("%wmx_field_"+this.aKeywords2[i]+"%","g");
        try
        {
            key = this.aKeywords2[i];
            var col = key.split(".");
            var wf = col[col.length-1];
            if (wf.indexOf("wf_") != -1) 
            {
                key = key.substr(0,key.length-wf.length-1);
                rep = this.renderSet2[index].item(key);
                if (wf == "wf_idx") rep = index;
                else rep = this.exec(wf,rep,key,index); 
            }
            else rep = this.renderSet2[index].item(key);            
        }
        catch(e) {rep=key; bImage=false;bDate=false;}
        if (rep == null) rep = "";
        strResult = strResult.replace(re,rep);  

    }
    return(strResult);
}

function gdaGetRepeat(index)
{

    var strResult = this.strRepeat;
    this.lookup.joinRow(this.renderSet[index],this.aKeywords);
    var rep;
    var key;
    var bImage, bDate;
    for (var i=0;i<this.aKeywords.length;i++)
    {
        var re = new RegExp("%wmx_field_"+this.aKeywords[i]+"%","g");
        try
        {
            key = this.aKeywords[i];
            var col = key.split(".");
            var wf = col[col.length-1];
            if (wf.indexOf("wf_") != -1) 
            {
                key = key.substr(0,key.length-wf.length-1);									
                rep = this.renderSet[index].item(key);

                if (wf == "wf_idx") rep = index;
                else
								{
									if (col.length > 2) {}
									rep = this.exec(wf,rep,key,index); 
								}
            }
            else rep = this.renderSet[index].item(key);            
        }
        catch(e) {rep=key; bImage=false;bDate=false;}
        if (rep == null) rep = "";
        strResult = strResult.replace(re,rep);  
    }
    return(strResult);
}


function GDALookup()
{
    this.aRows = new Array();
    this.aToName = new Array();
    this.aFromName = new Array();
    this.aSchema = new Array();
    this.add = gdaAddForign;
    this.joinRow = gdaJoinRow;
    this.findValue = gdaFindValue;
}



function gdaAddForign(rows,toName,fromName, oSchema)
{
    this.aRows[this.aRows.length] = rows;
    this.aToName[this.aToName.length] = toName;
    this.aFromName[this.aFromName.length] = fromName; 
    this.aSchema[this.aSchema.length] = oSchema;
}


function gdaFindValue(id, indexValue,field)
{
    var key = this.aToName[id];

    var rows = this.aRows[id];

    for (var i=0;i<rows.length;i++)
    {
        if ((rows[i].item(key)) == indexValue)
        {
            return(rows[i].item(field));

        }
    }

    return "";
}

function gdaJoinRow(row, aKeywords)
{
    var strTmp;
    var col,val;
    for (i=0;i<aKeywords.length;i++)
    {
        strTmp = aKeywords[i];
        col = strTmp.split(".");
        if (col.length >= 2)
        {
            if (col[1].indexOf("wf_") != -1) continue;
            for (j=0;j<this.aFromName.length;j++)
            {
                if (this.aFromName[j] == col[0])
                {
                    val = this.findValue(j,row.item(this.aFromName[j]),col[1]);  
										if (col.length > 2 && col[2] == "wf_opt1")
											val = this.aSchema[j].item(col[1]).optdsp(val);
                    row.addField(col[0]+"."+col[1],val);
                }
            }

        }
    } 
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////
function drq(cI,lI,sQ,sF,bB,sS,sI,rC,sR,nT,fG,sH,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='13'>" + "GetQueryDataXml" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + sQ +"</desc></para>";
    xml += "<para order='4'><desc>" + sF + "</desc></para>";
    xml += "<para order='5'><desc>" + bB + "</desc></para>";
    xml += "<para order='6'><desc>" + sS + "</desc></para>";
    xml += "<para order='7'><desc>" + sI + "</desc></para>";
    xml += "<para order='8'><desc>" + rC + "</desc></para>";
    xml += "<para order='9'><desc>" + sR + "</desc></para>";
    xml += "<para order='10'><desc>" + nT + "</desc></para>";
	if (fG != "") 
	xml += "<para order='11'><desc>" + fG + "</desc></para>";
	if (sH != "") 
	xml += "<para order='12'><desc><![CDATA[" + sH + "]]></desc></para>";
    xml += "</GDACall>";
    return xml;
}

function srq(cI,lI,rI,sF,bB,sS,sI,rC,nT,fG,sH,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='12'>" + "ApplyRuleXML" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + rI +"</desc></para>";
    xml += "<para order='4'><desc>" + sF + "</desc></para>";
    xml += "<para order='5'><desc>" + bB + "</desc></para>";
    xml += "<para order='6'><desc>" + sS + "</desc></para>";
    xml += "<para order='7'><desc>" + sI + "</desc></para>";
    xml += "<para order='8'><desc>" + rC + "</desc></para>";
    xml += "<para order='9'><desc>" + nT + "</desc></para>";
	if (fG != "") 
	xml += "<para order='10'><desc>" + fG + "</desc></para>";
	if (sH != "") 
	xml += "<para order='11'><desc>" + sH + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}


function infq(cli,did,sid,rule,att,tm,rel,df,sf,cst,gf,hv,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    if (tkt != null && tkt != "none")
	{
    	xml += "<function_name paraCount='12'>" + "InsertListItemFromQuery" + "</function_name>";
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
	}
	else xml += "<function_name paraCount='11'>" + "InsertListItemFromQuery" + "</function_name>";
    xml += "<para order='1'><desc>" + cli + "</desc></para>";
    xml += "<para order='2'><desc>" + did + "</desc></para>";
    xml += "<para order='3'><desc>" + sid + "</desc></para>";
    xml += "<para order='4'><desc>" + rule + "</desc></para>";
    xml += "<para order='5'><desc>" + att + "</desc></para>";
    xml += "<para order='6'><desc>" + tm + "</desc></para>";
    xml += "<para order='7'><desc>" + rel + "</desc></para>";
    xml += "<para order='8'><desc>" + df + "</desc></para>";
    xml += "<para order='9'><desc>" + sf + "</desc></para>";
    xml += "<para order='10'><desc>" + cst + "</desc></para>";
    xml += "<para order='11'><desc>" + gf + "</desc></para>";
    xml += "<para order='12'><desc>" + hv + "</desc></para>";

    xml += "</GDACall>";
    return xml;
}

function upd(cI,lI,strXMLListItem,nA,nT,tkt, bO)
{
    var xml = "";
    xml += "<GDACall>";
    if (tkt != null && tkt != "none")
		{
    	xml += "<function_name paraCount='5'>" + "InsertListItem" + "</function_name>";
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
		}
		else
    	xml += "<function_name paraCount='5'>" + "InsertListItem2" + "</function_name>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + strXMLListItem +"</desc></para>";
    xml += "<para order='4'><desc>" + nA + "</desc></para>";
    xml += "<para order='5'><desc>" + nT + "</desc></para>";
		if (bO != null)
		    xml += "<para order='6'><desc>" + bO + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function updpk(cI,lI,strXMLListItem,strPKs,tkt, bO)
{
    var xml = "";
    xml += "<GDACall>";
    if (tkt != null && tkt != "none")
		{
    	xml += "<function_name paraCount='5'>" + "UpdateListItem" + "</function_name>";
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
		}
		else
    	xml += "<function_name paraCount='5'>" + "InsertListItem2" + "</function_name>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + strXMLListItem +"</desc></para>";
    xml += "<para order='4'><desc>" + strPKs + "</desc></para>";
	if (bO != null)
		    xml += "<para order='5'><desc>" + bO + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function updt(cI,lI,strXMLListItem,nA,nT,tkt, bO)
{
    var xml = "";
    xml += "<GDACall>";
    if (tkt != null && tkt != "none"){
    	xml += "<function_name paraCount='5'>" + "InsertListItem_NoCheckValue" + "</function_name>";
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
	}
	else
    	xml += "<function_name paraCount='5'>" + "InsertListItem_NoCheckValue" + "</function_name>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + strXMLListItem +"</desc></para>";
    xml += "<para order='4'><desc>" + nA + "</desc></para>";
    xml += "<para order='5'><desc>" + nT + "</desc></para>";
	xml += "<para order='6'><desc>" + bO + "</desc></para>";
	xml += "<para order='7'><desc>" + null + "</desc></para>";
	xml += "<para order='8'><desc>" + true + "</desc></para>";
	xml += "<para order='9'><desc>" + null + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function gfi(cI,lI,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='2'>" + "GetFieldInfo" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function gfis(cI,lI,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='2'>" + "GetFieldInfoSys" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function gcnt(cI,lI,sQ,bB,nT,tkt,sG,sH)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='6'>" + "GetQueryDataCount" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + sQ +"</desc></para>";
    xml += "<para order='4'><desc>" + bB + "</desc></para>";
    xml += "<para order='5'><desc>" + "" + "</desc></para>";
    xml += "<para order='6'><desc>" + nT + "</desc></para>";
	if (sG != ""){
	    xml += "<para order='7'><desc>" + sG + "</desc></para>";
	    xml += "<para order='8'><desc>" + sH + "</desc></para>";
	}
    xml += "</GDACall>";
    return xml;
}

function gcntr(cI,lI,rI,bB,nT,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='6'>" + "ApplyRuleCount" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + rI +"</desc></para>";
    xml += "<para order='4'><desc>" + bB + "</desc></para>";
    xml += "<para order='5'><desc>" + "" + "</desc></para>";
    xml += "<para order='6'><desc>" + nT + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}


function gri(cI,lI,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='3'>" + "GetRuleInfo" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function sr(cI,lI,rD,relD,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='3'>" + "NewRule" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + rD + "</desc></para>";
    xml += "<para order='4'><desc>" + relD + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function er(cI,lI,rD,relD,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='3'>" + "EditRule" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + rD + "</desc></para>";
    xml += "<para order='4'><desc>" + relD + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function dr(cI,lI,rD,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='3'>" + "DeleteRule" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + rD + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function cloner(cI,lI,sI,rD,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='4'>" + "CloneRule" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + sI + "</desc></para>";
    xml += "<para order='3'><desc>" + rD + "</desc></para>";
    xml += "<para order='4'><desc>" + lI + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function gli(cI,cat,lI,sF,sS,bT,tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='6'>" + "GetListInfo" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + cat + "</desc></para>";
    xml += "<para order='3'><desc>" + lI + "</desc></para>";
    xml += "<para order='4'><desc>" + sF + "</desc></para>";
    xml += "<para order='5'><desc>" + sS + "</desc></para>";
    xml += "<para order='6'><desc>" + bT + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function dli(cI,lI,sPK,nT,tkt,bO)
{
    var xml = "";
    xml += "<GDACall>";
    if (tkt != null && tkt != "none")
		{
    	xml += "<function_name paraCount='5'>" + "DeleteListItem" + "</function_name>";
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
		}
		else
    	xml += "<function_name paraCount='5'>" + "DeleteListItem" + "</function_name>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + sPK +"</desc></para>";
    xml += "<para order='4'><desc>" + nT + "</desc></para>";
		if (bO != null)
		    xml += "<para order='5'><desc>" + bO + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function wmx_GetTicket(co,ac,pwd,cl,bDebug,nChannel)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='4'>" + "GetTicket" + "</function_name>";
    xml += "<para order='1'><desc>" + co + "</desc></para>";
    xml += "<para order='2'><desc>" + ac + "</desc></para>";
    xml += "<para order='3'><desc>" + pwd +"</desc></para>";
    xml += "<para order='4'><desc>" + cl + "</desc></para>";
    xml += "</GDACall>";
	if (nChannel == 2) xmlHttp.open("POST",strXMLUrl2,false);
    else xmlHttp.open("POST",strXMLUrl,false);
	xmlHttp.setRequestHeader('Content-Type', 'text/xml');
	xmlHttp.setRequestHeader('Accept', '*/*');
	xmlHttp.setRequestHeader('Referer',document.URL);
	if (bDebug) alert(nChannel+":"+xml);
    xmlHttp.send(xml);
	if (bDebug)
		alert(xmlHttp.responseXML.xml);
    xmlGdaDOM.loadXML(xmlHttp.responseXML.xml);
    var oNode = xmlGdaDOM.selectSingleNode("/root/result");  
	return oNode.text;
}

function wmx_SetSession(oPairs)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='9'>" + "SetSession" + "</function_name>";
		for (var i=0;i<oPairs.length;i++)
		{
    	xml += "<para order='"+oPairs[i].key+"'><desc>" + oPairs[i].value + "</desc></para>";
		}
    xml += "<para order='z2'><desc>" + "dummy" + "</desc></para>";
    xml += "<para order='z3'><desc>" + "dummy" + "</desc></para>";
    xml += "</GDACall>";
    xmlHttp.open("POST",strXMLUrl,false);
	xmlHttp.setRequestHeader('Content-Type', 'text/xml');
	xmlHttp.setRequestHeader('Accept', '*/*');
	xmlHttp.setRequestHeader('Referer',document.URL);
    xmlHttp.send(xml);
    return(xmlHttp.responseXML.xml);
}

function wmx_GetSession(key)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='3'>" + "getsession" + "</function_name>";
    xml += "<para order='1'><desc>" + key + "</desc></para>";
    xml += "<para order='2'><desc>" + "dummy" + "</desc></para>";
    xml += "<para order='3'><desc>" + "dummy" + "</desc></para>";
    xml += "</GDACall>";
    xmlHttp.open("POST",strXMLUrl,false);
	xmlHttp.setRequestHeader('Content-Type', 'text/xml');
	xmlHttp.setRequestHeader('Accept', '*/*');
	xmlHttp.setRequestHeader('Referer',document.URL);
    xmlHttp.send(xml);
	xmlGdaDOM.loadXML(xmlHttp.responseXML.xml);
	var val = xmlGdaDOM.selectSingleNode("rowlist/row").text;
	if (val == null) val = "";
    return(val);
}

function wmx_GetDatetimeTicks()
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='1'>" + "GetDatetimeTicks" + "</function_name>";
    xml += "<para order='1'><desc>" + "null" + "</desc></para>";
    xml += "<para order='2'><desc>" + "null" + "</desc></para>";
    xml += "<para order='3'><desc>" + "null" + "</desc></para>";
    xml += "</GDACall>";
    xmlHttp.open("POST",strXMLUrl,false);
	xmlHttp.setRequestHeader('Content-Type', 'text/xml');
	xmlHttp.setRequestHeader('Accept', '*/*');
	xmlHttp.setRequestHeader('Referer',document.URL);
    xmlHttp.send(xml);
    xmlGdaDOM.loadXML(xmlHttp.responseXML.xml);
    var oNode = xmlGdaDOM.selectSingleNode("/rowlist/row"); 

		var nBase = 0;
		var dayMili = 24 * 60 * 60 * 1000;
		//(((!(iYear % 4)) && (iYear % 100) ) || !(iYear % 400)) ? 29 : 28
		var nBase = (1969 - parseInt(1969/4)) * 365 * dayMili + parseInt(1969/4) * 366 * dayMili;
		nBase = nBase - 15 * dayMili + 8 * 60 * 60 * 1000;
		var nTicks = parseInt(oNode.text/10000) - nBase;
    return nTicks;
}

function wmx_CreateList(name,desc,profile,type,tkt, bDebug, bListOnly, nChannel,clientID, tblName)
{
    var xml = "";
	if (tblName == undefined) tblName = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='12'>" + "CreateList" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + "dummyclient" + "</desc></para>";
    xml += "<para order='2'><desc>" + "dummylistid" + "</desc></para>";
    xml += "<para order='3'><desc>" + name + "</desc></para>";
    xml += "<para order='4'><desc>" + desc + "</desc></para>";
    xml += "<para order='5'><desc>" + "1" + "</desc></para>";
    xml += "<para order='6'><desc>" + type + "</desc></para>";
    xml += "<para order='7'><desc>" + tblName + "</desc></para>";
    xml += "<para order='8'><desc>" + "" + "</desc></para>";
    xml += "<para order='9'><desc>" + "" + "</desc></para>";
    xml += "<para order='10'><desc>" + "" + "</desc></para>";
    xml += "<para order='11'><desc>" + "" + "</desc></para>";
    xml += "<para order='12'><desc>" + "" + "</desc></para>";
    xml += "<para order='13'><desc>" + "" + "</desc></para>";

    xml += "</GDACall>";
	if (bDebug)
		alert(xml);
	if (nChannel == null || nChannel == 1)
    	xmlHttp.open("POST",strXMLUrl,false);
	else
    	xmlHttp.open("POST",strXMLUrl2,false);
	xmlHttp.setRequestHeader('Content-Type', 'text/xml');
	xmlHttp.setRequestHeader('Accept', '*/*');
	xmlHttp.setRequestHeader('Referer',document.URL);
    xmlHttp.send(xml);
	if (bDebug)
		alert(xmlHttp.responseXML.xml);
    xmlGdaDOM.loadXML(xmlHttp.responseXML.xml);
    var oNode = xmlGdaDOM.selectSingleNode("/root/result");    
    
    var nList = parseInt(oNode.text);
	if (nList == -1) return -1;
	if (bListOnly) return nList;

	var strSchema="";
	xmlGdaDOM.async = false;
	var idx = profile.indexOf("<schemalist>");
	if ( idx >= 0)	
		xmlGdaDOM.loadXML(profile.substr(idx));
	else
		xmlGdaDOM.load(profile);
	strSchema = xmlGdaDOM.xml;
	if (bDebug) alert(strSchema);
	var nList = wmx_SetSchema(tkt, nList, strSchema,bDebug,nChannel);
    var strXML = nra(clientID, nList, "All", "All", tkt);
	if (bDebug) alert(strXML);
	if (nChannel == null || nChannel == 1)
    	xmlHttp.open("POST",strXMLUrl,false);
	else
    	xmlHttp.open("POST",strXMLUrl2,false);
	xmlHttp.setRequestHeader('Content-Type', 'text/xml');
	xmlHttp.setRequestHeader('Accept', '*/*');
	xmlHttp.setRequestHeader('Referer',document.URL);
    xmlHttp.send(strXML);


    if (bDebug) 
        alert(xmlHttp.responseXML.xml);
	return(nList);

}

function wmx_SetSchema(tkt,nList,strSchema,bDebug, nChannel)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='4'>" + "SetListSchema" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + "dummyclient" + "</desc></para>";
    xml += "<para order='2'><desc>" + nList + "</desc></para>";
    xml += "<para order='3'><desc>" + strSchema + "</desc></para>";
    xml += "</GDACall>";
	if (bDebug)
		alert(xml);
	if (nChannel == null || nChannel == 1)
    	xmlHttp.open("POST",strXMLUrl,false);
	else
    	xmlHttp.open("POST",strXMLUrl2,false);
	xmlHttp.setRequestHeader('Content-Type', 'text/xml');
	xmlHttp.setRequestHeader('Accept', '*/*');
	xmlHttp.setRequestHeader('Referer',document.URL);
    xmlHttp.send(xml);
    xmlGdaDOM.loadXML(xmlHttp.responseXML.xml);
    var oNode = xmlGdaDOM.selectSingleNode("/root/result");  
	if (bDebug)
		alert(xmlHttp.responseXML.xml);
	if (oNode.text == 0) return nList;
	else return -1;
}

function wmx_DecodePwd(tkt, pwd, bDebug, nChannel)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='2'>" + "DecodePassword" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + pwd + "</desc></para>";
    xml += "<para order='2'><desc>" + "Dummy" + "</desc></para>";
    xml += "<para order='3'><desc>" + "Dummy" + "</desc></para>";
    xml += "</GDACall>";
	if (bDebug)
		alert(xml);
	if (nChannel == null || nChannel == 1)
    	xmlHttp.open("POST",strXMLUrl,false);
	else
    	xmlHttp.open("POST",strXMLUrl2,false);
	xmlHttp.setRequestHeader('Content-Type', 'text/xml');
	xmlHttp.setRequestHeader('Accept', '*/*');
	xmlHttp.setRequestHeader('Referer',document.URL);
    xmlHttp.send(xml);
	if (bDebug)
		alert(xmlHttp.responseXML.xml);
    xmlGdaDOM.loadXML(xmlHttp.responseXML.xml);
    var oNode = xmlGdaDOM.selectSingleNode("/root/result");
	return oNode.text;
}

function CheckHost()
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='0'>" + "CheckHost" + "</function_name>";
    xml += "</GDACall>";
    return xml;
}

//060915 cher add
function gdaGetEmailFieldID()
{
    var strFieldID = "";
    var strXML = gef(this.clientID, this.listID, this.tkt);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);

    if (this.bDebug == true)
        alert(this.xmlHttp.responseText);

    var oXmlDoc = getXMLParser();
    oXmlDoc.loadXML(this.xmlHttp.responseXML.xml);
    var oXmlNode = oXmlDoc.selectSingleNode("//result");
    if (typeof(oXmlNode) != "undefined" && oXmlNode != null)
        strFieldID = oXmlNode.text;
    return (strFieldID);
}

function gdaGetNameFieldID()
{
    var strFieldID = "";
    var strXML = gnf(this.clientID, this.listID, this.tkt);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);

    if (this.bDebug == true)
        alert(this.xmlHttp.responseText);

    var oXmlDoc = getXMLParser();
    oXmlDoc.loadXML(this.xmlHttp.responseXML.xml);
    var oXmlNode = oXmlDoc.selectSingleNode("//result");
    if (typeof(oXmlNode) != "undefined" && oXmlNode != null)
        strFieldID = oXmlNode.text;
    return (strFieldID);
}

function gdaGetPasswordFieldID()
{
    var oValueArray = new Array("", "0");
    var strXML = gpf(this.clientID, this.listID, this.tkt);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);

    if (this.bDebug == true)
        alert(this.xmlHttp.responseText);

    var oXmlDoc = getXMLParser();
    oXmlDoc.loadXML(this.xmlHttp.responseXML.xml);
    var oXmlNode = oXmlDoc.selectSingleNode("//fieldid");
    if (typeof(oXmlNode) != "undefined" && oXmlNode != null)
        oValueArray[0] = oXmlNode.text;
    oXmlNode = oXmlDoc.selectSingleNode("//isencode");
    if (typeof(oXmlNode) != "undefined" && oXmlNode != null)
        oValueArray[1] = oXmlNode.text;
        
    return (oValueArray);
}

function gdaNewRuleAll(strRuleName, strRuleDesc)
{
    var nRuleID = -1;
    var strXML = nra(this.clientID, this.listID, strRuleName, strRuleDesc, this.tkt);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);

    if (this.bDebug) 
        alert(this.xmlHttp.responseXML.xml);

    var oXmlDoc = getXMLParser();
    oXmlDoc.loadXML(this.xmlHttp.responseXML.xml);
    var oXmlNode = oXmlDoc.selectSingleNode("//result");
    if (typeof(oXmlNode) != "undefined" && oXmlNode != null)
        nRuleID = oXmlNode.text;
        
    return (nRuleID);
}

function gdaCreateViewList(strListName, strListDesc, nAttribute, nCategory, strViewDefXml, bSetSchema, strGroupIDs)
{
    var nListID = -1;
    var strXML = cvl(this.clientID, this.listID, strListName, strListDesc, nAttribute, nCategory, strViewDefXml, bSetSchema, strGroupIDs, this.tkt);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);

    if (this.bDebug) 
        alert(this.xmlHttp.responseXML.xml);
    var oXmlDoc = getXMLParser();
    oXmlDoc.loadXML(this.xmlHttp.responseXML.xml);
    var oXmlNode = oXmlDoc.selectSingleNode("//result");
    if (typeof(oXmlNode) != "undefined" && oXmlNode != null)
        nListID = oXmlNode.text;
        
    return (nListID);
}

function gef(cI, lI, tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='3'>" + "GetEmailFieldID" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function gnf(cI, lI, tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='3'>" + "GetNameFieldID" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function gpf(cI, lI, tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='3'>" + "GetPasswordFieldID" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function nra(cI, lI, rN, rD, tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='5'>" + "NewRuleAll" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + rN + "</desc></para>";
    xml += "<para order='4'><desc>" + rD + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function cvl(cI, lI, lN, lD, nA, nC, vX, bS, gI, tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='10'>" + "CreateViewList" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + lN + "</desc></para>";
    xml += "<para order='4'><desc>" + lD + "</desc></para>";
    xml += "<para order='5'><desc>" + nA + "</desc></para>";
    xml += "<para order='6'><desc>" + nC + "</desc></para>";
    xml += "<para order='7'><desc>" + vX + "</desc></para>";
    xml += "<para order='8'><desc>" + bS + "</desc></para>";
    xml += "<para order='9'><desc>" + gI + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function gdaUpdateListItem(strXMLListItem, strXmlPK, nRuleID, bOuter)
{
    var strXML = upl(this.clientID, this.listID, strXMLListItem, strXmlPK, nRuleID, this.tkt, bOuter);
    try
    {
        if (this.bDebug) alert(strXML);
        this.xmlHttp.open("POST",this.strXMLUrl,false);
        this.xmlHttpSend(strXML);
        if (this.bDebug) alert(this.xmlHttp.responseXML.xml);
       	var xmlDOM = getXMLParser();
        xmlDOM.loadXML(this.xmlHttp.responseXML.xml);
        var oXmlNode = xmlDOM.selectSingleNode("/root/result");
        if (oXmlNode != null && oXmlNode.text == "0")
            return (true);
        else 
            return (false);
    }
    catch(e)
    {
        if (this.xmlHttp.responseXML.xml.indexOf("Ticket") != -1)
	{
	    var rtcd = myConfirm("Session timeout! Refresh current page?");
	    RefreshTicket(this.clientID);
	    if (rtcd) window.open(document.URL,"_self","",true);
        }
        return false;
    }
}


function upl(cI, lI, strXMLListItem, strXmlPK, nRuleID, tkt, bO)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='4'>" + "UpdateListItem" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "<para order='3'><desc>" + strXMLListItem +"</desc></para>";
    if (nRuleID > 0)
        xml += "<para order='4'><desc>" + nRuleID +"</desc></para>";
    else
        xml += "<para order='4'><desc>" + strXmlPK +"</desc></para>";
    if (typeof(bO) != "undefined" && bO != null)
        xml += "<para order='5'><desc>" + bO + "</desc></para>";        
    xml += "</GDACall>";
    return xml;
}

function gdaGetPKXml(oFieldArray, oValueArray)
{
    var strXmlPK = "<pklist>";
    if (oFieldArray != null && oFieldArray.length > 0)
    {
        for (var i=0; i<oFieldArray.length; i++)
        {
            strXmlPK += "<pk>" +
                        "<fieldid>" + oFieldArray[i] + "</fieldid>" +
                        "<value>" + oValueArray[i] + "</value>" +
                        "</pk>";
        }
    }
    strXmlPK += "</pklist>";
    
    return (strXmlPK);
}


//061201 cher add
function gdaDeleteList()
{
    var strXML = gdl(this.clientID, this.listID, this.tkt);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);

    if (this.bDebug == true)
        alert(this.xmlHttp.responseText);

    var oXmlDoc = getXMLParser();
    oXmlDoc.loadXML(this.xmlHttp.responseXML.xml);
    var oXmlNode = oXmlDoc.selectSingleNode("/root/result");
    if (oXmlNode != null && oXmlNode.text == "0")
        return (true);
    else 
        return (false);
}

function gdl(cI, lI, tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='3'>" + "DeleteList" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function gdaClearList()
{
    var strXML = gcl(this.clientID, this.listID, this.tkt);
    this.xmlHttp.open('POST',this.strXMLUrl,false);
    this.xmlHttpSend(strXML);

    if (this.bDebug == true)
        alert(this.xmlHttp.responseText);

    var oXmlDoc = getXMLParser();
    oXmlDoc.loadXML(this.xmlHttp.responseXML.xml);
    var oXmlNode = oXmlDoc.selectSingleNode("/root/result");
    if (oXmlNode != null && oXmlNode.text == "0")
        return (true);
    else 
        return (false);
}

function gcl(cI, lI, tkt)
{
    var xml = "";
    xml += "<GDACall>";
    xml += "<function_name paraCount='3'>" + "ClearList" + "</function_name>";
    if (tkt != null && tkt != "none")
    	xml += "<para order='0'><desc>" + tkt + "</desc></para>";
    xml += "<para order='1'><desc>" + cI + "</desc></para>";
    xml += "<para order='2'><desc>" + lI + "</desc></para>";
    xml += "</GDACall>";
    return xml;
}

function wmx_CreateViewList(strListName, strListDesc, nAttribute, nCategory, strViewDefXml, bSetSchema, strGroupIDs,tkt,profile,bDebug)
{
    var nListID = -1;
    var strXML = cvl("","",strListName, strListDesc, nAttribute, nCategory, strViewDefXml, bSetSchema, strGroupIDs,tkt);
    xmlHttp.open('POST',strXMLUrl,false);
    xmlHttp.send(strXML);

    if (bDebug) 
        alert(xmlHttp.responseXML.xml);
    var oXmlDoc = getXMLParser();
    oXmlDoc.loadXML(xmlHttp.responseXML.xml);
    var oXmlNode = oXmlDoc.selectSingleNode("//result");
    if (typeof(oXmlNode) != "undefined" && oXmlNode != null)
        nListID = oXmlNode.text;

	var strSchema="";
	xmlGdaDOM.async = false;
	var idx = profile.indexOf("<schemalist>");
	if ( idx >= 0)	
		xmlGdaDOM.loadXML(profile.substr(idx));
	else
		xmlGdaDOM.load(profile);
	strSchema = xmlGdaDOM.xml;
	if (bDebug) alert(strSchema);
	var nListID = wmx_SetSchema(tkt, nListID, strSchema,bDebug,1);
//    var strXML = nra(clientID, nList, "All", "All", tkt);
//	if (bDebug) alert(strXML); 
    return (nListID);
}

function wmx_DeleteList(clientID, listID, tkt, bDebug)
{
    var strXML = gdl(clientID,listID, tkt);
    xmlHttp.open('POST',strXMLUrl,false);
    xmlHttp.send(strXML);

    if (bDebug == true)
        alert(xmlHttp.responseText);

    var oXmlDoc = getXMLParser();
    oXmlDoc.loadXML(xmlHttp.responseXML.xml);
    var oXmlNode = oXmlDoc.selectSingleNode("/root/result");
    if (oXmlNode != null && oXmlNode.text == "0")
        return (true);
    else 
        return (false);
}

var iCnt = 0;
function myConfirm(txt)
{
	if (iCnt > 15) return false;
	iCnt ++;
	return true;
}
