Class.create2("AvalonRPC", {
            constants   : { "APPLICATION_ERROR" : -32500, "SYSTEM_ERROR" : -32400, "TRANSPORT_ERROR" : -32300},
            variables   : {},
            methods     : {
                          _doCall: function (service, method, param_names, params, async, callback) {
                               var param_hash = {};
                               for (var i = 0; i < param_names.length; i++) {
                                   param_hash[param_names[i]] = params[i];
                               }

                               var request = new Ajax.Request(
                                    "/diamond-wines/rpc/AvalonRPC",
                                    {
                                       asynchronous: async,
                                       onSuccess: callback,
                                       methodName: method,
                                       methodParams: [param_hash]
                                    }
                               );

                               if (!async) {
                                   return request.getRequestResult();
                               }
                          }
                    , test: function(param) {
                            return this._doCall(
                                    "AvalonRPC",
                                    "test",
                                    ["param"],
                                    arguments,
                                    false
                                );
                    }, test_async: function(param) {
                            var args = $A(arguments);
                            var callback = args.shift();
                            return this._doCall(
                                    "AvalonRPC",
                                    "test",
                                    ["param"],
                                    args,
                                    true,
                                    callback
                                );
                    }, remoteRender: function(block, p) {
                            return this._doCall(
                                    "AvalonRPC",
                                    "remoteRender",
                                    ["block", "p"],
                                    arguments,
                                    false
                                );
                    }, remoteRender_async: function(block, p) {
                            var args = $A(arguments);
                            var callback = args.shift();
                            return this._doCall(
                                    "AvalonRPC",
                                    "remoteRender",
                                    ["block", "p"],
                                    args,
                                    true,
                                    callback
                                );
                    }, checkCookie: function() {
                            return this._doCall(
                                    "AvalonRPC",
                                    "checkCookie",
                                    [""],
                                    arguments,
                                    false
                                );
                    }, checkCookie_async: function() {
                            var args = $A(arguments);
                            var callback = args.shift();
                            return this._doCall(
                                    "AvalonRPC",
                                    "checkCookie",
                                    [""],
                                    args,
                                    true,
                                    callback
                                );
                    }, getServerConfig: function() {
                            return this._doCall(
                                    "AvalonRPC",
                                    "getServerConfig",
                                    [""],
                                    arguments,
                                    false
                                );
                    }, getServerConfig_async: function() {
                            var args = $A(arguments);
                            var callback = args.shift();
                            return this._doCall(
                                    "AvalonRPC",
                                    "getServerConfig",
                                    [""],
                                    args,
                                    true,
                                    callback
                                );
                    }, terminateSession: function() {
                            return this._doCall(
                                    "AvalonRPC",
                                    "terminateSession",
                                    [""],
                                    arguments,
                                    false
                                );
                    }, terminateSession_async: function() {
                            var args = $A(arguments);
                            var callback = args.shift();
                            return this._doCall(
                                    "AvalonRPC",
                                    "terminateSession",
                                    [""],
                                    args,
                                    true,
                                    callback
                                );
                    }, __construct: function() {}}
        });
        if (typeof RPC  == 'undefined') RPC = {};
        RPC.AvalonRPC = new AvalonRPC();
