﻿
//GET
//Non-Asynchronous getXML
function getXML(sURL) {
	var xmlHTTP = getXmlHTTP();

	if (sURL.indexOf("?") == -1) sURL += "?";
	xmlHTTP.open("GET", sURL + "&t=" + new Date().toLocaleString(), false);

	xmlHTTP.send(null);

	var sResponse = xmlHTTP.responseText;
	if (xmlHTTP.status != 200) {
		sResponse = "ERROR";
		addAlert(sResponse + " " + xmlHTTP.status);
	}
	if (sResponse.match("!ERROR!") == "!ERROR!") {
		addAlert(sResponse);
	}
	if (gDebugMode) alert(sResponse);
	return sResponse;
}
function fillXML(sURL) {
	var sXML = getXML(sURL);
	if (sXML == "") { return null; }
	return getXMLDocFromString(sXML);
}

//Asynchronous getXML
var asyncCallBack = null;
function getXML_async(sURL, callBack) {
	var xmlHTTP = getXmlHTTP();
	if (!sURL.contains("?")) sURL += "?";
	xmlHTTP.open("GET", sURL + "&t=" + new Date().toLocaleString(), true);
	xmlHTTP.onreadystatechange = function() {
		if (xmlHTTP.readyState == 4) {
			var sResponse = xmlHTTP.responseText;
			if (xmlHTTP.status != 200) { 
				sResponse = "ERROR"; 
				addAlert(sResponse + " " + xmlHTTP.status);
			}
			if (sResponse.match("!ERROR!") == "!ERROR!") {
				addAlert(sResponse.replace("!ERROR!", ""), window.location.href);
			}
			if (gDebugMode) alert(sResponse);
			if (callBack) callBack(sResponse);
		}
	}
	xmlHTTP.send(null);
}
function fillXML_async(sURL, callBack) {
	asyncCallBack = callBack;
	getXML_async(sURL, fillXML_async2);
}
function fillXML_async2(response) {
	var sXML = response;
	if (sXML == "") { return null; }
	asyncCallBack(getXMLDocFromString(sXML));
}



//POST
//Non-Asynchronous postXML
function postXML(sURL, sXML) { 
	if (gDebugMode) alert(sXML);
	var xmlHTTP = getXmlHTTP();
	xmlHTTP.open("POST", sURL, false);
	xmlHTTP.send(sXML);
	var sResponse = xmlHTTP.responseText;
	if (gDebugMode) {alert(sResponse)};
	if (sResponse.contains("SUCCESS")) {
		if (sResponse.length > 7) return sResponse.substring(7);
	}
	else {
		addAlert(sResponse, window.location.href, 0, true);
	}
	if (xmlHTTP.status != 200) { 
		sResponse = "error";
		addAlert(sResponse);
	}
	return sResponse;
}

//Asynchronous postXML
function postXML_async(sURL, sXML, callBack) { 
	if (gDebugMode) alert(sXML);
	var xmlHTTP = getXmlHTTP();
	xmlHTTP.open("POST", sURL, true);
	xmlHTTP.onreadystatechange = function() {
		if (xmlHTTP.readyState == 4) {
			var sResponse = xmlHTTP.responseText;
			if (gDebugMode) { alert(xmlHTTP.responseText) };
			if (sResponse.match("SUCCESS") == "SUCCESS") {
				if (sResponse.length > 7) {
					if (callBack) callBack(sResponse.substring(7));
				}
			}
			else {
				addAlert(sResponse);
			}
			if (xmlHTTP.status != 200) addAlert(xmlHTTP.responseText);
			if (callBack) callBack(sResponse);
		}
	}
	xmlHTTP.send(sXML);
}


//Functions
function getXmlHTTP() {
	var xmlHTTP = null;
	if (window.XMLHttpRequest) {
		xmlHTTP = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return xmlHTTP;
}


function getXMLData(objXML, rowNumber, columnName) {
	try {
	  if (window.ActiveXObject)
	    var tableName = objXML.getElementsByTagName("XMLData")(0).childNodes(0).nodeName;
	  else
	    var tableName = "Data";
		try {
			return cbSelectNodes("//XMLData/" + tableName + "/" + columnName, objXML).item(rowNumber).text.replace("*es*", "");
		}
		catch(e) {
			return cbSelectNodes("//XMLData/" + tableName + "/" + columnName, objXML)[rowNumber].firstChild.nodeValue.replace("*es*", "");
		}
	}
	catch(err) {
		if (err.description == "Object required" || err.description == null)
			addAlert("Data Not Found - " + columnName);
		else
			addAlert(err.description, false);
	}
}


function getXMLDocFromString(sXML) {
	if (!window.ActiveXObject) {
		xmlData = document.implementation.createDocument("", "", null);
		var parserSoftXML = new DOMParser();
		xmlData = parserSoftXML.parseFromString(sXML, "text/xml");
	}
	else {
		var xmlData = new ActiveXObject("Microsoft.XMLDOM");
		xmlData.loadXML(sXML);
	}
	return xmlData;
}

function cbSelectNodes(xPath, objXML) {
	if (window.ActiveXObject)
		return objXML.selectNodes(xPath);
	else
		return XPath.selectNodes(xPath, objXML);
}

function runCommand(command, values) {
	if (command.toLowerCase().contains("runxml")) {
		var url = gAppPath + "/ajax/command.aspx?command=" + command;
		return postXML(url, values);
	}
	else {
		var url = gAppPath + "/ajax/command.aspx?command=" + command + "&" + values;
		return getXML(url);
	}

}

function getRecords_async(table, callback, recordID, fields, where, orderBy, tableName) {
	var url = gAppPath + "/ajax/getxml.aspx?";
	url += "&table=" + table;
	if (fields) url += "&fields=" + fields;
	if (recordID) url += "&id=" + recordID;
	if (orderBy) url += "&orderby=" + orderBy;
	if (where) url += "&where=" + where;
	fillXML_async(url, callback);
}

function getRowCount(objXML) {
	if (!objXML.getElementsByTagName("XMLData")(0).childNodes(0)) return 0;
	var tableName = objXML.getElementsByTagName("XMLData")(0).childNodes(0).nodeName;
	return cbSelectNodes("//XMLData/" + tableName + "/ID", objXML).length;
}

//Convenience
function runXMLUpdate(xml) { runCommand("runxmlupdate", xml); }
function runXMLDelete(xml) { runCommand("runxmldelete", xml); }
function runXMLInsert(xml) { return runCommand("runxmlinsert", xml); }

//Backwards Compatibility
function GetXML(sURL) { return getXML(sURL); }
function FillXML(sURL) { return fillXML(sURL); }
function PostXML(sURL, sXML) { return postXML(sURL, sXML); }
