// ====================================================================== //
//                              XRPC Class                                //
// ====================================================================== //
__XRPC_UsageCounter = 0;
function XRPC(opURL)
{
	if (!opURL) { var opURL = ''; }

	this.url = opURL;
	this.lastRequest = '';	
	this.__isIE = ((document.all) && (document.getElementById));
	
	this.clearParams();
}
XRPC.prototype.clearParams = function() { this.__parmArray = new Array(); }
XRPC.prototype.param = function(pName, pValue) { this.__parmArray[pName] = pValue; }
XRPC.prototype.exec = function(handler)
{
	if (!handler) { return alert('You must call XRPC.execute with a receiving function name as the handler'); }
	
	var temp = new Array();
	var ptr = 0;
	for(parm in this.__parmArray) 
		temp[ptr++] = parm + '=' + escape(this.__parmArray[parm]);

	var tempDate = new Date();
	var uid = tempDate.getTime() + '_' + __XRPC_UsageCounter++;
	this.lastRequest = this.url + '?uid=' + uid + '&h=' + handler + '&' + temp.join('&');
	
	var newNode = document.createElement('script');
	if (this.__isIE)
	{
		newNode.id = uid;
		newNode.src = this.lastRequest;
	} else {
		newNode.setAttribute('id', uid);
		newNode.setAttribute('src', this.lastRequest);
	}
	var target = document.getElementsByTagName('body');
	target[0].appendChild(newNode);
}


// ====================================================================== //
//                Simple debugging tool - dump an array                   //
// ====================================================================== //
// Usage:
// alert(dumpArray(anArray));
//
function dumpArray(arr, level) 
{
	var dumped_text = "";
	if (!level) { level = 0; }

	// The padding given at the beginning of the line.
	var level_padding = "";
	for (var j=0; j<level; j++) { level_padding += '   '; }

	if (typeof(arr) == 'object') 
	{ 
		// Array, Hashes & Objects
		for (var item in arr) 
		{
			var value = arr[item];
 
			if (typeof(value) == 'object') 
			{ 
				// If it is an array...
				dumped_text += level_padding + "['" + item + "']\n";
				dumped_text += dumpArray(value,level+1);
			} else {
				vSurround = (typeof(value) == 'string') ? "'" : '';
				nSurround = (item.match(/^[0-9]{1,10}$/)) ? '' : "'";
				dumped_text += level_padding + "[" + nSurround + item + nSurround + "] => " + vSurround + value + vSurround + "\n";
			}
		}
	} else { 
		// Stings, Chars & Numbers etc.
		dumped_text = "(" + typeof(arr) + ") " + arr + "\n";
	}
	
	return dumped_text;
}


