﻿/* XMLHTTP Wrapper starts here. */

var colQTLXML = new Array();
var intQTLXMLCollectionCounter = 0;

var gloconstAJAXReturnOK = "---*QTL_AJAXRESPONSE_OK*---";
var gloconstAJAXReturnERROR = "---*QTL_AJAXRESPONSE_ERROR*---";
var gloconstAJAXReturnSplit = "---*QTL_AJAX_SPLITTER*---";

function QTLXMLEngine() {
	var intCounter = 0
	
	for (intCounter = 0; intCounter < colQTLXML.length; intCounter++) {
		if (colQTLXML[intCounter] != null) {
			//debugger;
			var strCall = "colQTLXML[" + intCounter + "].CallServiceInternal();"
			setTimeout(strCall, 1);
		}
	}
	
	setTimeout(QTLXMLEngine, 100);
}

setTimeout(QTLXMLEngine, 100);

function QTLXMLHTTP() {
	this.arrServices = new Array();
	this.arrReqHolder = new Array();
	this.objQTLReq;

	this.constDataSet = 1;
	this.constArray = 2;
	this.constValue = 3;
	this.constClass = 4;
	this.constAJAXReturnOK = gloconstAJAXReturnOK;
	this.constAJAXReturnERROR = gloconstAJAXReturnERROR;
	this.constAJAXReturnSplit = gloconstAJAXReturnSplit;
	this.constSTATUSGetData = 1;
	this.constSTATUSParseData = 2;
	this.constSTATUSDone = 3;
	this.flgMoz = false;
	this.strQTLIdleImageSrc = "";
	this.strQTLBusyImageSrc = "";
	this.imgQTLStatus = null;
	this.gloXMLExternal = null;
	
	this.flgQTLReqBusy = 0
	this.intReqCounter = 0;  // Next Array Index To Use (Rolls over at 1000).
	this.intCurrentReq = 0;  // Current Array Index Being Processed.
	this.intNextEntryID = 0; // Holds The Next Services Entry ID To Apply To A New Registered Web Service.
	this.ReturnValue = null; // Holds The Return Value Of Calls.  Done this way so that setTimeout() can 
													 // be called to call the callback making the function non-blocking.
													 
	if (window.XMLHttpRequest) {
		this.objQTLReq = new XMLHttpRequest();
		if (window.netscape != null) {
			this.flgMoz = true;
		}	
	} 
	else if (window.ActiveXObject) {
		this.objQTLReq = new ActiveXObject("Microsoft.XMLHTTP");
	}

	for (this.intReqCounter = 0; this.intReqCounter <= 1000; this.intReqCounter++) {
		this.arrReqHolder[this.intReqCounter] = null;
	}

	this.intReqCounter = 0;
	
	colQTLXML[intQTLXMLCollectionCounter] = this;
	//setInterval(eval("colQTLXML[" + intQTLXMLCollectionCounter + "].CallServiceInternal()"), 10);	
	//setInterval(colQTLXML[intQTLXMLCollectionCounter], 10);
	this.id = intQTLXMLCollectionCounter;
	intQTLXMLCollectionCounter += 1;
}

QTLXMLHTTP.prototype.RegisterService = function(strServiceName) {
	this.intNextEntryID = this.arrServices.length;
	this.arrServices[this.intNextEntryID] = strServiceName;
	return this.intNextEntryID;
}

QTLXMLHTTP.prototype.IsQTLXMLBusy = function () {
	var intTestReqCounter = 0;
	
	for (intTestReqCounter = 0; intTestReqCounter <= 1000; intTestReqCounter++) {
		if ((this.arrReqHolder[intTestReqCounter] != null) || (this.flgQTLReqBusy == 1)) {
			return true;
		}
	}
	return false;
}

QTLXMLHTTP.prototype.CallServiceInternal = function() {
	if (this.flgMoz == true) {
		//Use only to test for Firefox & Netscape locally.  Disable for production!	
		netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
	}
	try {
		if ((this.arrReqHolder[this.intCurrentReq] != null) && (this.flgQTLReqBusy == 0)) {
			this.DoStatusCallback(this.constSTATUSGetData);	
			if (this.imgQTLStatus != null) {
				this.imgQTLStatus.src = this.strQTLBusyImageSrc;
			}
			var strURL = "";
			this.flgQTLReqBusy = 1;
		
			if (this.arrReqHolder[this.intCurrentReq][0] < 0) {
				strURL = this.arrReqHolder[this.intCurrentReq][1];
			}		
			else if (this.arrServices[this.arrReqHolder[this.intCurrentReq][0]].indexOf(".asmx") != -1) {
				strURL = this.arrServices[this.arrReqHolder[this.intCurrentReq][0]] + "/" + this.arrReqHolder[this.intCurrentReq][1];
			}
			else {
				strURL = this.arrServices[this.arrReqHolder[this.intCurrentReq][0]];
			}
			
			this.objQTLReq.open("POST", strURL, true);
			this.objQTLReq.setRequestHeader("Content-Type",  "application/x-www-form-urlencoded");
			var objMe = this;
			//this.objQTLReq.onreadystatechange = function() {colQTLXML[].CheckResponse();};
			this.objQTLReq.onreadystatechange = function() {objMe.CheckResponse();}

			if (this.arrReqHolder[this.intCurrentReq][0] < 0) {
				this.objQTLReq.send("QTLAJAXDIRECTCALL=1" + this.arrReqHolder[this.intCurrentReq][3]);		
			}					
			else if (this.arrServices[this.arrReqHolder[this.intCurrentReq][0]].indexOf(".asmx") != -1) {			
				this.objQTLReq.send(this.arrReqHolder[this.intCurrentReq][3]);
			}
			else {
				if ((this.arrReqHolder[this.intCurrentReq][1] != null) && (this.arrReqHolder[this.intCurrentReq][0] > -1)) {
					this.objQTLReq.send("QTLAJAXFUNC=" + this.arrReqHolder[this.intCurrentReq][1] + this.arrReqHolder[this.intCurrentReq][3]);
				}
				else {
					this.objQTLReq.send(this.arrReqHolder[this.intCurrentReq][3]);
				}
			}
		}
	}
	catch (ex) {
		this.ReturnValue = this.BuildReturnValue();
		this.ReturnValue.IsError = true;
		this.ReturnValue.ErrorTitle = "Error Calling Web Service In: CallServiceInternal()";
		this.ReturnValue.ErrorMessage = ex.message;
		
		var objMe = this.arrReqHolder[this.intCurrentReq][2];
		var objReturn = this.ReturnValue;
		var intEndPos = this.arrReqHolder[this.intCurrentReq][2].lastIndexOf(")");
		var strCall = "";
		if (intEndPos == -1) {
			strCall = objMe + "(colQTLXML[" + this.id +"].ReturnValue)";			
		}
		else {
			strCall = objMe + ", colQTLXML[" + this.id +"].ReturnValue)";
		}
		var strCall = objMe + "(colQTLXML[" + this.id +"].ReturnValue)";
		
		setTimeout(strCall, 1);
		this.ReleaseCurrentRequest();
	}
}

QTLXMLHTTP.prototype.DoStatusCallback = function(intStatus, intCurrentIter, intLastIter) {
	if (this.arrReqHolder[this.intCurrentReq] != null) {
		if (this.arrReqHolder[this.intCurrentReq][4] != null) {
			var arrCB = new Array();

			if (intStatus == this.constSTATUSGetData) {
				arrCB[0] = intStatus;
				arrCB[1] = null;
				arrCB[2] = null;
			}
			else if (intStatus == this.constSTATUSParseData) {
				arrCB[0] = intStatus;
				arrCB[1] = intCurrentIter;
				arrCB[2] = intLastIter;
			}
			else if (intStatus == this.constSTATUSDone) {
				arrCB[0] = intStatus;
				arrCB[1] = null;
				arrCB[2] = null;
			}			
			
			var strCall = this.arrReqHolder[this.intCurrentReq][4] + "(arrCB)";
			
			eval(strCall);
		}
	}
}

QTLXMLHTTP.prototype.CallService = function() {
	var strURL = "";
	var strArgs = "";
	var intCount = 0;
	var intNewReqCounter = 0;
	
	if (arguments[0] == null) {
		throw {message:"Must Specify A Service ID!"};
	}
	if ((arguments[1] == null) && (this.arrServices[arguments[0]].indexOf(".asmx") != -1)){
		throw {message:"Must Specify A Function Name!"};
	}
	if (arguments[2] == null) {
		throw {message:"Must Specify A Callback Function Name!"};
	}

	try {
		intCount = arguments.length;
		if ((arguments[0] > -1) && (this.arrServices[arguments[0]].indexOf(".asmx") != -1)) {		
			for (var intCounter = 3; intCounter < intCount; intCounter+=2) {
				var strPreArg = new String(arguments[intCounter + 1]);
				//strArgs += (arguments[intCounter] + "=" + arguments[intCounter + 1]);
				strArgs += (arguments[intCounter] + "=" + escape(strPreArg));
				//strArgs += (arguments[intCounter] + "=" + strPreArg.ReplaceAll("&", "&amp;"));				
				if ((intCounter + 2) < intCount) {
					strArgs += "&";
				}
			}
		}
		else {
			for (var intCounter = 3; intCounter < intCount; intCounter+=2) {
				if (intCounter == 3) {
					if (arguments[1] != null) {
						strArgs += "&";
					}
				}
				else {
					strArgs += "&";				
				}
				var strPreArg = new String(arguments[intCounter + 1]);
				//strArgs += (arguments[intCounter] + "=" + arguments[intCounter + 1]);
				strArgs += (arguments[intCounter] + "=" + escape(strPreArg));
				//strArgs += (arguments[intCounter] + "=" + strPreArg.ReplaceAll("&", "&amp;"));				
			}
		}	
	}
	catch (ex) {
		alert("Error Adding Arguments To Service!" + "\n\n" + ex.message);
	}
	
	intNewReqCounter = this.intReqCounter;
	
	if (this.intReqCounter == 1000) {
		this.intReqCounter = 0;
	}
	else {
		++this.intReqCounter;
	}

	var arrTemp = new Array();
	var arrCB = new Array();
	arrCB = arguments[2].split(this.constAJAXReturnSplit);
	arrTemp[0] = arguments[0];
	arrTemp[1] = arguments[1];
	//Add Status Callback If Included.
	if (arrCB.length == 1) {
		arrTemp[2] = arguments[2];
		arrTemp[4] = null;
	}
	else {
		arrTemp[2] = arrCB[0];
		arrTemp[4] = arrCB[1];
	}
	arrTemp[3] = strArgs;
	this.arrReqHolder[intNewReqCounter] = arrTemp;		
}

QTLXMLHTTP.prototype.CheckResponse = function() {
	if (this.flgMoz == true) {
		//Use only to test for Firefox & Netscape locally.  Disable for production!
		netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
	}
	if (this.objQTLReq.readyState == 4) {
		if (this.objQTLReq.status == 200) {
			var strCall = "colQTLXML[" + this.id + "].BuildResponseObject();"
			setTimeout(strCall, 1);		
    }
  	else {
			this.ReturnValue = this.BuildReturnValue();
			this.ReturnValue.IsError = true;
			this.ReturnValue.ErrorNumber = this.objQTLReq.status;
			this.ReturnValue.ErrorTitle = this.objQTLReq.statusText + " In: CheckResponse()";
			this.ReturnValue.ErrorMessage = this.objQTLReq.responseText;
			
			var objMe = this.arrReqHolder[this.intCurrentReq][2];
			var objReturn = this.ReturnValue;
			var intEndPos = this.arrReqHolder[this.intCurrentReq][2].lastIndexOf(")");
			var strCall = "";

			if (intEndPos == -1) {
				strCall = objMe + "(colQTLXML[" + this.id +"].ReturnValue)";			
			}
			else {
				strCall = objMe.substring(0, intEndPos) + ", colQTLXML[" + this.id +"].ReturnValue)";
			}
			//var strCall = objMe + "(colQTLXML[" + this.id +"].ReturnValue)";
			
			setTimeout(strCall, 1);
			this.ReleaseCurrentRequest();
  	}
	}
}

QTLXMLHTTP.prototype.BuildReturnValue = function() {
	var objReturnValue = new Object();
	objReturnValue.IsEmpty = false;
	objReturnValue.IsError = false;
	objReturnValue.ErrorNumber = 0;
	objReturnValue.ErrorTitle = "";
	objReturnValue.ErrorMessage = "";
	objReturnValue.Value = null;
	return objReturnValue;	
}

QTLXMLHTTP.prototype.BuildResponseObject = function() {
  if (this.flgMoz == true) {
    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
  }
	this.ReturnValue = this.BuildReturnValue();
	var strXML = "";
	var intXMLResponseType = 0;
	var flgNotDone = false;
	var intNumberOfNodes = 0;
	var intNumberOfElements = 0;
	var intElementCounter = 0;
	var intNodeCounter = 0;
	var strNodeName = "";
	var objReturnValue = null;
	var strLastTableName = "";
	var flgRunParseExternal = false;
	
	try {
		if ((this.objQTLReq.responseXML == null) || (this.objQTLReq.responseXML.documentElement == null)) {
				var arrReturn = new Array();
				strXML = this.objQTLReq.responseText;
				if (strXML.indexOf(this.constAJAXReturnOK) != -1) {
					arrReturn = strXML.split(this.constAJAXReturnSplit);
					this.ReturnValue.Value = arrReturn;
				}
				else if (strXML.indexOf(this.constAJAXReturnERROR) != -1) {
					arrReturn = strXML.split(this.constAJAXReturnSplit);				
					this.ReturnValue.IsError = true;
					this.ReturnValue.ErrorTitle = "AJAX Error In - BuildResponseObject()";
					this.ReturnValue.ErrorMessage = arrReturn[1];					
				}
				else {		
					this.ReturnValue.Value = strXML;
				}
			return;
		}	
		strXML = this.objQTLReq.responseXML.documentElement;
		intXMLResponseType = 0;
		if ((strXML.nodeName == "DataSet") || (strXML.nodeName == "NewDataSet")) {
			intXMLResponseType = this.constDataSet;
		}
		else {
			strNodeName = strXML.nodeName;
			if (strNodeName.indexOf("ArrayOf") != -1) {
				intXMLResponseType = this.constArray;
			}
			else if (strXML.childNodes.length == 1) {
				intXMLResponseType = this.constValue;
			}
			else {
				intXMLResponseType = this.constClass;
			}
		}
		
		if (strXML.childNodes.length == 0) {
			throw {message:"QTL --- IS EMPTY!"};
		}
		switch (intXMLResponseType) {
			case this.constDataSet:
				if (this.flgMoz == false) {
					if (this.objQTLReq.responseXML.documentElement.childNodes[1].childNodes.length == 0) {
						throw {message:"QTL --- IS EMPTY!"};					
					}
					strXML = this.objQTLReq.responseXML.documentElement;
					strXML = strXML.childNodes[1].childNodes[0];
					intNumberOfNodes = strXML.childNodes.length;
				}
				else {
					strXML = this.objQTLReq.responseXML.documentElement;
					if (this.objQTLReq.responseXML.documentElement.childNodes[3].childNodes.length == 0) {
						throw {message:"QTL --- IS EMPTY!"};					
					}					
					strXML = strXML.childNodes[3].childNodes[1];
					flgNotDone = true;
					while(flgNotDone) {
						flgNotDone = false;
						for (intNumberOfElements = 0; intNumberOfElements < strXML.childNodes.length; intNumberOfElements++) {
							if (strXML.childNodes[intNumberOfElements].nodeType == 3) {
								strXML.removeChild(strXML.childNodes[intNumberOfElements]);
								flgNotDone = true;
								break;
							}
						}
					}
					intNumberOfNodes = strXML.childNodes.length;
					flgNotDone = true;
					while(flgNotDone) {
						for (var intCounter = 0; intCounter < intNumberOfNodes; intCounter++) {
							flgNotDone = false;
							for (intNumberOfElements = 0; intNumberOfElements < strXML.childNodes[intCounter].childNodes.length; intNumberOfElements++) {
								if (strXML.childNodes[intCounter].childNodes[intNumberOfElements].nodeType == 3) {
									strXML.childNodes[intCounter].removeChild(strXML.childNodes[intCounter].childNodes[intNumberOfElements]);
									flgNotDone = true;
									break;
								}
							}
						}
					}
				}
				if (strXML.childNodes.length == 0) {
					throw {message:"QTL --- IS EMPTY!"};
				}


				strLastTableName = strXML.childNodes[strXML.childNodes.length - 1].nodeName;
				this.ReturnValue.Value = new Array();
				objReturnValue = new Object();
				if (strXML.childNodes[0].nodeName == strLastTableName) {			
				   for (intElementCounter = 0; intElementCounter < strXML.childNodes[0].childNodes.length; intElementCounter++) {
					   if (strXML.childNodes[0].childNodes[intElementCounter].firstChild == null) {
						   eval("objReturnValue." + strXML.childNodes[0].childNodes[intElementCounter].nodeName + " = new String('');");								
					   }
					   else {
						   eval("objReturnValue." + strXML.childNodes[0].childNodes[intElementCounter].nodeName + " = new String(strXML.childNodes[0].childNodes[intElementCounter].firstChild.nodeValue);");
					   }
				   }		   
				   this.ReturnValue.Value[this.ReturnValue.Value.length] = objReturnValue;
				}
				this.gloXMLExternal = strXML;
				flgRunParseExternal = true;
				var strCall = "";
				strCall = "colQTLXML[" + this.id + "].RunDatasetParse('" + strLastTableName + "', " + "1" + ", " + intNumberOfNodes + ")";
				setTimeout(strCall, 1);
				break;
			case this.constArray:		
				if (this.flgMoz == false) {
					strXML = this.objQTLReq.responseXML.documentElement;
					intNumberOfNodes = strXML.childNodes.length;
				}
				else {
					strXML = this.objQTLReq.responseXML.documentElement;
					flgNotDone = true;
					while(flgNotDone) {
						flgNotDone = false;
						for (intNumberOfElements = 0; intNumberOfElements < strXML.childNodes.length; intNumberOfElements++) {
							if (strXML.childNodes[intNumberOfElements].nodeType == 3) {
								strXML.removeChild(strXML.childNodes[intNumberOfElements]);
								flgNotDone = true;
								break;
							}
						}
					}
					intNumberOfNodes = strXML.childNodes.length;
					flgNotDone = true;				
					while(flgNotDone) {								
						for (var intCounter = 0; intCounter < intNumberOfNodes; intCounter++) {
							flgNotDone = false;									
							for (intNumberOfElements = 0; intNumberOfElements < strXML.childNodes[intCounter].childNodes.length; intNumberOfElements++) {
								if ((strXML.childNodes[intCounter].childNodes[intNumberOfElements].nodeType == 3) && (strXML.childNodes[0].childNodes.length > 1) && (strXML.childNodes[intCounter].childNodes[intNumberOfElements].nodeName == "#text")) {								
									strXML.childNodes[intCounter].removeChild(strXML.childNodes[intCounter].childNodes[intNumberOfElements]);
									flgNotDone = true;
								}							
							}
						}
					}				
				}
				strNodeName = strXML.nodeName;
				if (strNodeName.indexOf("anyType") != -1) {
					intNumberOfNodes -= 1;
				}
				if (strXML.childNodes.length == 0) {
					throw {message:"QTL --- IS EMPTY!"};
				}
				this.ReturnValue.Value = new Array();
				objReturnValue = new Object();
				for (intElementCounter = 0; intElementCounter < strXML.childNodes[0].childNodes.length; intElementCounter++) {
					if (strXML.childNodes[0].childNodes[intElementCounter].childNodes.length != 0) {
						if (strXML.childNodes[0].childNodes[intElementCounter].firstChild == null) {
							eval("objReturnValue." + strXML.childNodes[0].childNodes[intElementCounter].nodeName + " = '';");								
						}
						else {
							eval("objReturnValue." + strXML.childNodes[0].childNodes[intElementCounter].nodeName + " = new String(strXML.childNodes[0].childNodes[intElementCounter].firstChild.nodeValue);");
						}
					}
					else {				
						if (strXML.childNodes[0].childNodes.length > 1) {
							eval("objReturnValue." + strXML.childNodes[0].childNodes[intElementCounter].nodeName + " = new String('');");
						}
						else {
							eval("objReturnValue.Value = new String(strXML.childNodes[0].childNodes[intElementCounter].nodeValue);");
						}
					}
				}			
				if (strXML.childNodes[0].childNodes.length != 0) {
					this.ReturnValue.Value[this.ReturnValue.Value.length] = objReturnValue;
				}
				this.gloXMLExternal = strXML;
				flgRunParseExternal = true;
				var strCall = "";
				strCall = "colQTLXML[" + this.id + "].RunArrayParse(1" + ", " + intNumberOfNodes + ")";
				setTimeout(strCall, 1);
				break;
			case this.constValue:
				strXML = this.objQTLReq.responseXML.documentElement;
				this.ReturnValue.Value = new String(strXML.childNodes[0].nodeValue);
				break;
			case this.constClass:
				if (this.flgMoz == true) {
					strXML = this.objQTLReq.responseXML.documentElement;					
					flgNotDone = true;
					while(flgNotDone) {
						flgNotDone = false;
						for (intNumberOfElements = 0; intNumberOfElements < strXML.childNodes.length; intNumberOfElements++) {
							if (strXML.childNodes[intNumberOfElements].nodeType == 3) {
								strXML.removeChild(strXML.childNodes[intNumberOfElements]);
								flgNotDone = true;
								break;
							}
						}
					}							
				}
				intNumberOfElements = strXML.childNodes.length;						
				var objReturnValue = new Object();
				for (intElementCounter = 0; intElementCounter < intNumberOfElements; intElementCounter++) {
					if (strXML.childNodes[intElementCounter].firstChild == null) {
						eval("objReturnValue." + strXML.childNodes[intElementCounter].nodeName + " = new String('');");								
					}
					else {
						eval("objReturnValue." + strXML.childNodes[intElementCounter].nodeName + " = new String(strXML.childNodes[intElementCounter].firstChild.nodeValue);");
					}
				}
				this.ReturnValue.Value = objReturnValue;							
				break;
		}
	}
	catch (ex) {
		if (ex.message != "QTL --- IS EMPTY!") {
			this.ReturnValue.IsError = true;
			this.ReturnValue.ErrorTitle = "Error Creating Web Service Return Value In - BuildResponseObject()";
			this.ReturnValue.ErrorMessage = ex.message;
		}
		else {
			this.ReturnValue.Value = null;
			this.ReturnValue.IsEmpty = true;
		}
	}
	finally {
		if (flgRunParseExternal == false) {
			var objMe = this.arrReqHolder[this.intCurrentReq][2];
			var objReturn = this.ReturnValue;
			var intEndPos = this.arrReqHolder[this.intCurrentReq][2].lastIndexOf(")");
			var strCall = "";
			if (intEndPos == -1) {
				strCall = objMe + "(colQTLXML[" + this.id +"].ReturnValue)";			
			}
			else {
				strCall = objMe.substring(0, intEndPos) + ", colQTLXML[" + this.id +"].ReturnValue)";
			}
			setTimeout(strCall, 1);
			this.ReleaseCurrentRequest();
		}
	}
}

QTLXMLHTTP.prototype.ReleaseCurrentRequest = function() {
  if (this.imgQTLStatus != null) {
		this.imgQTLStatus.src = this.strQTLIdleImageSrc;
  }
	this.arrReqHolder[this.intCurrentReq] = null;
	if (this.intCurrentReq == 1000) {
		this.intCurrentReq = 0;
	}
	else {
		++this.intCurrentReq;
	}
	this.flgQTLReqBusy = 0;
}

QTLXMLHTTP.prototype.RunDatasetParse = function(strLastTableName, intNodeCounter, intNumberOfNodes) {
	var strXML = this.gloXMLExternal;
	var objReturnValue = new Object();
	if (intNodeCounter < intNumberOfNodes) {
		if (strXML.childNodes[intNodeCounter].nodeName == strLastTableName) {				
		 this.objReturnValue = new Object();
		 for (intElementCounter = 0; intElementCounter < strXML.childNodes[intNodeCounter].childNodes.length; intElementCounter++) {
			 if (strXML.childNodes[intNodeCounter].childNodes[intElementCounter].firstChild == null) {
				 eval("objReturnValue." + strXML.childNodes[intNodeCounter].childNodes[intElementCounter].nodeName + " = '';");								
			 }
			 else {
				 eval("objReturnValue." + strXML.childNodes[intNodeCounter].childNodes[intElementCounter].nodeName + " = strXML.childNodes[intNodeCounter].childNodes[intElementCounter].firstChild.nodeValue;");
			 }
		 }
		 this.ReturnValue.Value[this.ReturnValue.Value.length] = objReturnValue;
		}
		intNodeCounter++;
		this.DoStatusCallback(this.constSTATUSParseData, intNodeCounter, intNumberOfNodes);	
		var strCall = "";
		strCall = "colQTLXML[" + this.id + "].RunDatasetParse('" + strLastTableName + "', " + intNodeCounter + ", " + intNumberOfNodes + ")";
		setTimeout(strCall, 1);		
	}
	else {
		this.DoStatusCallback(this.constSTATUSDone);	
		this.ReleaseExternalParse();
	}
}

QTLXMLHTTP.prototype.ReleaseExternalParse = function() {
	var objMe = this.arrReqHolder[this.intCurrentReq][2];
	var objReturn = this.ReturnValue;
	var intEndPos = this.arrReqHolder[this.intCurrentReq][2].lastIndexOf(")");
	var strCall = "";
	if (intEndPos == -1) {
		strCall = objMe + "(colQTLXML[" + this.id +"].ReturnValue)";			
	}
	else {
		strCall = objMe.substring(0, intEndPos) + ", colQTLXML[" + this.id +"].ReturnValue)";
	}
	setTimeout(strCall, 1);
	this.ReleaseCurrentRequest();
}

QTLXMLHTTP.prototype.RunArrayParse = function(intNodeCounter, intNumberOfNodes) {
	var strXML = this.gloXMLExternal;
	var objReturnValue = new Object();
	if (intNodeCounter < intNumberOfNodes) {
		this.objReturnValue = new Object();
		for (intElementCounter = 0; intElementCounter < strXML.childNodes[intNodeCounter].childNodes.length; intElementCounter++) {
			if (strXML.childNodes[intNodeCounter].childNodes[intElementCounter].childNodes.length != 0) {
				if (strXML.childNodes[intNodeCounter].childNodes[intElementCounter].firstChild == null) {
					eval("objReturnValue." + strXML.childNodes[intNodeCounter].childNodes[intElementCounter].nodeName + " = '';");					
				}
				else {
					eval("objReturnValue." + strXML.childNodes[intNodeCounter].childNodes[intElementCounter].nodeName + " = strXML.childNodes[intNodeCounter].childNodes[intElementCounter].firstChild.nodeValue;");
				}
			}
			else {
				if (strXML.childNodes[intNodeCounter].childNodes.length > 1) {
					eval("objReturnValue." + strXML.childNodes[intNodeCounter].childNodes[intElementCounter].nodeName + " = '';");
				}
				else {
					eval("objReturnValue.Value = strXML.childNodes[intNodeCounter].childNodes[intElementCounter].nodeValue;");						
				}
			}
		}
		if (strXML.childNodes[intNodeCounter].childNodes.length != 0) {
			this.ReturnValue.Value[this.ReturnValue.Value.length] = objReturnValue;
		}
		intNodeCounter++;
		this.DoStatusCallback(this.constSTATUSParseData, intNodeCounter, intNumberOfNodes);
		var strCall = "";
		strCall = "colQTLXML[" + this.id + "].RunArrayParse(" + intNodeCounter + ", " + intNumberOfNodes + ")";
		setTimeout(strCall, 1);
	}
	else {
		this.DoStatusCallback(this.constSTATUSDone);	
		this.ReleaseExternalParse();
	}
}

function LoadDirectQTLPage(objEngine, strPage, strDivID) {
	//window.location.href = strPage;   //Browser Refresh Functionality.
	objEngine.CallService(-1, strPage, "LoadDirectQTLPageCB('" + strDivID + "')");   //No Browser Refresh Functionality.
}

function LoadDirectQTLPageCB(strDivID, objRet) {
	if (objRet.IsEmpty == true) {
	}
	else if (objRet.IsError == true) {
		alert(objRet.ErrorTitle + "\n\n" + objRet.ErrorMessage);
	}
	else {
		var arrRet = new Array();
		arrRet = objRet.Value.split(gloconstAJAXReturnSplit);
		document.getElementById(strDivID).innerHTML = arrRet[0];
		var intCounter = 0;
		for (intCounter = 1; intCounter < arrRet.length; intCounter++) {
			if (arrRet[intCounter].indexOf("QTLFunctionBasePageMarker") == -1) {
				eval(arrRet[intCounter]);
			}
		}
		for (intCounter = 1; intCounter < arrRet.length; intCounter++) {
			if (arrRet[intCounter].indexOf("QTLFunctionBasePageMarker") != -1) {
				eval(arrRet[intCounter]);
			}
		}				
	}
}

GlobalQTLAJAXCB = function (objRet) {
	if (objRet.IsEmpty == true) {		
	}
	else if (objRet.IsError == true) {
		alert(objRet.ErrorTitle + "\n\n" + objRet.ErrorMessage);
	}			
	else {
	}	
}	

