Show:
                            /**
                            Extends IO to implement Queue for synchronous
                            transaction processing.
                            @module io
                            @submodule io-queue
                            @for IO
                            **/
                            var io = Y.io._map['io:0'] || new Y.IO();
                            
                            Y.mix(Y.IO.prototype, {
                               /**
                                * Array of transactions queued for processing
                                *
                                * @property _q
                                * @private
                                * @static
                                * @type {Object}
                                */
                                _q: new Y.Queue(),
                                _qActiveId: null,
                                _qInit: false,
                            
                               /**
                                * Property to determine whether the queue is set to
                                * 1 (active) or 0 (inactive).  When inactive, transactions
                                * will be stored in the queue until the queue is set to active.
                                *
                                * @property _qState
                                * @private
                                * @static
                                * @type {Number}
                                */
                                _qState: 1,
                            
                               /**
                                * Method Process the first transaction from the
                                * queue in FIFO order.
                                *
                                * @method _qShift
                                * @private
                                * @static
                                */
                                _qShift: function() {
                                    var io = this,
                                        o = io._q.next();
                            
                                    io._qActiveId = o.id;
                                    io._qState = 0;
                                    io.send(o.uri, o.cfg, o.id);
                                },
                            
                               /**
                                * Method for queueing a transaction before the request is sent to the
                                * resource, to ensure sequential processing.
                                *
                                * @method queue
                                * @static
                                * @return {Object}
                                */
                                queue: function(uri, c) {
                                    var io = this,
                                        o = { uri: uri, cfg:c, id: this._id++ };
                            
                                    if(!io._qInit) {
                                        Y.on('io:complete', function(id, o) { io._qNext(id); }, io);
                                        io._qInit = true;
                                    }
                            
                                    io._q.add(o);
                                    if (io._qState === 1) {
                                        io._qShift();
                                    }
                            
                                    Y.log('Object queued.  Transaction id is' + o.id, 'info', 'io');
                                    return o;
                                },
                            
                                _qNext: function(id) {
                                    var io = this;
                                    io._qState = 1;
                                    if (io._qActiveId === id && io._q.size() > 0) {
                                        io._qShift();
                                    }
                                },
                            
                               /**
                                * Method for promoting a transaction to the top of the queue.
                                *
                                * @method promote
                                * @static
                                */
                                qPromote: function(o) {
                                    this._q.promote(o);
                                },
                            
                               /**
                                * Method for removing a specific, pending transaction from
                                * the queue.
                                *
                                * @method remove
                                * @private
                                * @static
                                */
                                qRemove: function(o) {
                                    this._q.remove(o);
                                },
                            
                               /**
                                * Method for cancel all pending transaction from
                                * the queue.
                                *
                                * @method empty
                                * @static
                                * @since 3.7.3
                                */
                                qEmpty: function() {
                                    this._q = new Y.Queue();
                                },
                            
                                qStart: function() {
                                    var io = this;
                                    io._qState = 1;
                            
                                    if (io._q.size() > 0) {
                                        io._qShift();
                                    }
                                    Y.log('Queue started.', 'info', 'io');
                                },
                            
                               /**
                                * Method for setting queue processing to inactive.
                                * Transaction requests to YUI.io.queue() will be stored in the queue, but
                                * not processed until the queue is reset to "active".
                                *
                                * @method _stop
                                * @private
                                * @static
                                */
                                qStop: function() {
                                    this._qState = 0;
                                    Y.log('Queue stopped.', 'info', 'io');
                                },
                            
                               /**
                                * Method to query the current size of the queue.
                                *
                                * @method _size
                                * @private
                                * @static
                                * @return {Number}
                                */
                                qSize: function() {
                                    return this._q.size();
                                }
                            
                            }, true);
                            
                            function _queue(u, c) {
                                return io.queue.apply(io, [u, c]);
                            }
                            
                            _queue.start = function () { io.qStart(); };
                            _queue.stop = function () { io.qStop(); };
                            _queue.promote = function (o) { io.qPromote(o); };
                            _queue.remove = function (o) { io.qRemove(o); };
                            _queue.size = function () { io.qSize(); };
                            _queue.empty = function () { io.qEmpty(); };
                            Y.io.queue = _queue;