﻿elexiAjax.server = {};

elexiAjax.server.xmlUpdate = function() {
	elexiAjax.server.xmlCommand("XMLUpdate", arguments[0], arguments[1], arguments[2]);
}
elexiAjax.server.xmlInsert = function() {
	elexiAjax.server.xmlCommand("XMLInsert", arguments[0], arguments[1], arguments[2]);
}
elexiAjax.server.xmlCommand = function() {
	var type = arguments[0];
	var xml = arguments[1];
	var callback = arguments[2];

	var props = {};
	props.command = type;
	props.postData = xml;
	if (typeof arguments[2] == "string") {
		props.connectString = arguments[2];
		callback = arguments[3];
	}
	
	elexiAjax.server.interact(props, callback);
}

elexiAjax.server.interact = function() {
	var callback = arguments[1];
	var props = {};
	if (typeof arguments[0] == "string") {
		props.command = arguments[0];
		if (typeof arguments[1] == "string") {
			props.params = arguments[1];
			callback = arguments[2];
		}
	}
	else props = arguments[0];
	
	
	var ajaxDataType = "xml";
	var url = gAppPath + "/elexiajax/aspx/";
	var page = "getxml.aspx";
	var params = "";
	var postData = null;
	var ajaxType = "GET";

	if (props.blankRecord || props.recordID == 0) page = "blankrecord.aspx";
	if (props.command) {
		page = "command.aspx";
		params += addParam("command", props.command);
		if (props.postData) {
			postData = props.postData;
			ajaxType = "POST";
		}
		ajaxDataType = "html";
	}
	params += addParam("releaseid", gAppReleaseID);
	if (props.params) params += "&" + props.params;
	if (props.table) params += addParam("table", props.table);
	if (props.fields) params += addParam("fields", props.fields);
	if (props.recordID && props.recordID != 0) params += addParam("id", props.recordID);
	if (props.orderBy) params += addParam("orderBy", props.orderBy);
	if (props.where) params += addParam("where", props.where);
	if (props.tableName) params += addParam("tableName", props.tableName);
	if (props.topOne) params += addParam("topOne", 1);
	if (props.connectString) params += addParam("connectString", props.connectString);
	
	if (props.success) callback = props.success;

	if (props.debug) {
		var s = "";
		for (var i in props) {
			if (i != "success") s += i + ": " + props[i] + "<br>";
		}
		addAlert(s);
	}
	
	url += page + "?" + params;

	var allowCache = false;
	if (props.cache == true) allowCache = true;
	var doAsync = false;
	if (props.async == null) doAsync = true;
	else if (props.async) doAsync = props.async;
	
	if (!window.ajaxCount) ajaxCount = 0;
	window.ajaxCount += 1;
	if (typeof appStatus == "function") appStatus("Loading");
	
	if (props.debug) addAlert(url);
	return $.ajax({
		type: ajaxType,
		url: url,
		data: postData,
		processData: false,
		dataType: ajaxDataType,
		success: callback,
		error: function(XMLHttpRequest, textStatus, errorThrown) {
			addAlert(XMLHttpRequest.responseText);
		},
		cache: allowCache,
		async: doAsync,
		complete: function() {
			window.ajaxCount -= 1;
			if (window.ajaxCount == 0 && typeof appStatus == "function") appStatus("Loaded", true, { delay: 600 });
		}
	});

};
