Class.create2("store", {
            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/store",
                                    {
                                       asynchronous: async,
                                       onSuccess: callback,
                                       methodName: method,
                                       methodParams: [param_hash]
                                    }
                               );

                               if (!async) {
                                   return request.getRequestResult();
                               }
                          }
                    , cartAddItem: function(item_id, item_count, comments, instructions) {
                            return this._doCall(
                                    "store",
                                    "cartAddItem",
                                    ["item_id", "item_count", "comments", "instructions"],
                                    arguments,
                                    false
                                );
                    }, cartAddItem_async: function(item_id, item_count, comments, instructions) {
                            var args = $A(arguments);
                            var callback = args.shift();
                            return this._doCall(
                                    "store",
                                    "cartAddItem",
                                    ["item_id", "item_count", "comments", "instructions"],
                                    args,
                                    true,
                                    callback
                                );
                    }, cartRemoveItem: function(item_id) {
                            return this._doCall(
                                    "store",
                                    "cartRemoveItem",
                                    ["item_id"],
                                    arguments,
                                    false
                                );
                    }, cartRemoveItem_async: function(item_id) {
                            var args = $A(arguments);
                            var callback = args.shift();
                            return this._doCall(
                                    "store",
                                    "cartRemoveItem",
                                    ["item_id"],
                                    args,
                                    true,
                                    callback
                                );
                    }, cartEmpty: function() {
                            return this._doCall(
                                    "store",
                                    "cartEmpty",
                                    [""],
                                    arguments,
                                    false
                                );
                    }, cartEmpty_async: function() {
                            var args = $A(arguments);
                            var callback = args.shift();
                            return this._doCall(
                                    "store",
                                    "cartEmpty",
                                    [""],
                                    args,
                                    true,
                                    callback
                                );
                    }, cartUpdateQuantities: function(quantities) {
                            return this._doCall(
                                    "store",
                                    "cartUpdateQuantities",
                                    ["quantities"],
                                    arguments,
                                    false
                                );
                    }, cartUpdateQuantities_async: function(quantities) {
                            var args = $A(arguments);
                            var callback = args.shift();
                            return this._doCall(
                                    "store",
                                    "cartUpdateQuantities",
                                    ["quantities"],
                                    args,
                                    true,
                                    callback
                                );
                    }, placeOrder: function(card_type, card_info, shipping_address, billing_address, instructions) {
                            return this._doCall(
                                    "store",
                                    "placeOrder",
                                    ["card_type", "card_info", "shipping_address", "billing_address", "instructions"],
                                    arguments,
                                    false
                                );
                    }, placeOrder_async: function(card_type, card_info, shipping_address, billing_address, instructions) {
                            var args = $A(arguments);
                            var callback = args.shift();
                            return this._doCall(
                                    "store",
                                    "placeOrder",
                                    ["card_type", "card_info", "shipping_address", "billing_address", "instructions"],
                                    args,
                                    true,
                                    callback
                                );
                    }, __construct: function() {}}
        });
        if (typeof RPC  == 'undefined') RPC = {};
        RPC.store = new store();
