/**
 * Ajax Connectivity
 */

/**
 * Creates a new request object
 *
 * return object
 */
function createRequestObject()
{
	var requestObject;
	var browser    = navigator.appName;
	var userAgent  = navigator.userAgent;
	
	if (browser == 'Microsoft Internet Explorer' && browser.indexOf('Opera') == -1) {
		requestObject = new ActiveXObject('Microsoft.XMLHTTP');
	} else {
		requestObject = new XMLHttpRequest();
	}
	
	return requestObject;
}

// create connection
var ajaxConnections = new Array();

function createNewAjaxConnection()
{
var ajaxConnectionLength = parseInt(ajaxConnections.length) + 1;
var hello = new createRequestObject;
ajaxConnections.push(hello);
return ajaxConnections[parseInt(ajaxConnections.length)-1];
}

/** 
 * Sends a request to the remote page for processing
 *
 * param string  action      Action to take remotely
 * param array   parameters  Parameters to pass to the remote action
 * return void
 */
function sendRequest(action, parameters)
{
	var ajaxConnection = createNewAjaxConnection();
	var rpcUrl = '/lib/php/rpc.php?action=' + action;
	
	if (parameters.length > 0) {
		for (var i = 0; i < parameters.length; i++) {
			rpcUrl = rpcUrl + '&param' + i + '=' + parameters[i];
		}
	}
	
	ajaxConnection.open('post', rpcUrl);
	ajaxConnection.onreadystatechange = function () {
		handleResponse(ajaxConnection);
	}
	ajaxConnection.send(null);
}

/**
 * Handles the response returns from the remote page
 *
 * return object
 */
function handleResponse(ajaxConnection)
{
	var response, update, func, params;
	if (ajaxConnection.readyState == 4) {
		if (ajaxConnection.status == 200 || ajaxConnection.status == undefined) {

			response  = ajaxConnection.responseText;
			update    = new Array();
		
			if (response.indexOf('||') != '-1') {
				update  = response.split('||');
				func    = update.shift();
				params  = (update.length > 0) ? update.join("\', \'") : '';
				params  = "'" + params.replace(/'/ig, "\\'") + "'";
			
				eval(func + '(' + params + ');');
			}
		}
	}
}

/**
 * Displays an error message when something goes wrong
 *
 * param string  message  Error message to display
 * return void
 */
function displayError(message)
{
	alert(message);
}
