/******************************************************************************
ajax.js
	Copyright (C) 2010 Atlantic Database Systems, Inc. All rights reserved.
	Define global items.
******************************************************************************/

/******************************************************************************
doServerRequest - Send an action request to the server.
	requestData - Object containg the request data
	respFunction - Function to process the response.
	auxInfo - Auxilary information to be returned to the response function.
******************************************************************************/

function doServerRequest (requestData, respFunction, auxInfo)
{
	if (!auxInfo)
		auxInfo = {};

	reqText = $.JSON.encode (requestData);

	setWaitCursor (true);

	ajaxReq = {type:			"POST",
				url:			"datareq.php",
				data:			reqText,
				success:		procServerResp,
				userSuccess:	respFunction,
				requestData:	requestData,
				auxInfo:		auxInfo};
	$.ajax (ajaxReq);
}

/******************************************************************************
procServerResp - Process an AJAX response.
					Check for time out
					Invoke user function.
******************************************************************************/

function procServerResp (response)
{
	setWaitCursor (false);

	// Get the result code.

	var	bOK = false;

	bOK = (response ["res"] == "ack");

	if (!bOK) {

		var	reqType = this.requestData ["reqType"];

		if ("errmsg" in response)
			response ["errmsg"] = "(" + reqType + ") " + response ["errmsg"];
		else
			response ["errmsg"] = "(" + reqType + ") ";
	}

	if ("resultTag" in response) {

		// Get the result tag(s).

		var	resultTags = makeArray ("resultTag", response);

		// Return query results as, possibly empty, array(s).

		for (var i = 0; i < resultTags.length; i++) {

			var	resultTag = resultTags [i];

			if (resultTag)
				response [resultTag] = makeArray (resultTag, response);
		}

	}

	// Invoke the user function.

	if (this.userSuccess) {

		// Invoke the response handler.

		response.auxInfo = this.auxInfo;

		var	userClass = this.auxInfo ["self"];

		if (userClass)
			this.userSuccess.call (userClass, bOK, response);
		else
			this.userSuccess (bOK, response);
	}
}

/******************************************************************************
logObject - Helper to display an object contents in the console.log
******************************************************************************/

function logObject (respObj, level)
{
	if (!level)
		level = "";

	for (var item in respObj) {
		console.log (level + item + " = '" + respObj [item] + "'");
		if (typeof (respObj [item]) == "object") {
			logObject (respObj [item], level + "  ");
		}
	}
}


