/**
 * Remote Procedure Call
 * @extends Ajax.Request
 *
 */
var RPC = Class.create(Ajax.Request);

RPC.prototype._initialize = RPC.prototype.initialize;
RPC.prototype.initialize = function(url, options)
{
	options = options || {};
	options._onSuccess = options.onSuccess;
	options._onFailure = options.onFailure;

	//default to GET
	if(!options.method) options.method = 'get';

	options.onSuccess = (function(transport, json) {
		unwait();
		var xml = transport.responseXML;
		var errorNode = xml.getElementsByTagName('errors')[0];
		if(errorNode)
		{
			var errors = xml.getElementsByTagName('error');
			for(var i = 0, il = errors.length; i < il; i++)
			{
				alert(getNodeValue(errors[i]));
			}
		}
    try {
			options._onSuccess(transport, json);
    } catch (e) {
      this.dispatchException(e);
    }
	}).bind(this);

	options.onFailure = (function(transport, json) {
		unwait();
		alert('Error ' + transport.status + ': ' + transport.statusText + ' '); //lang
    try {
			options._onFailure(transport, json);
    } catch (e) {
      this.dispatchException(e);
    }
	}).bind(this)

	wait();
	this._initialize(url, options);
}

RPC.prototype.abort = function()
{
	this.transport.onreadystatechange = function() {};
	this.transport.abort();
}