/* YUI 3.9.1 (build 5852) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */
if (typeof _yuitest_coverage == "undefined"){
    _yuitest_coverage = {};
    _yuitest_coverline = function(src, line){
        var coverage = _yuitest_coverage[src];
        if (!coverage.lines[line]){
            coverage.calledLines++;
        }
        coverage.lines[line]++;
    };
    _yuitest_coverfunc = function(src, name, line){
        var coverage = _yuitest_coverage[src],
            funcId = name + ":" + line;
        if (!coverage.functions[funcId]){
            coverage.calledFunctions++;
        }
        coverage.functions[funcId]++;
    };
}
_yuitest_coverage["build/uploader-queue/uploader-queue.js"] = {
    lines: {},
    functions: {},
    coveredLines: 0,
    calledLines: 0,
    coveredFunctions: 0,
    calledFunctions: 0,
    path: "build/uploader-queue/uploader-queue.js",
    code: []
};
_yuitest_coverage["build/uploader-queue/uploader-queue.js"].code=["YUI.add('uploader-queue', function (Y, NAME) {","","/**","* The class manages a queue of files that should be uploaded to the server.","* It initializes the required number of uploads, tracks them as they progress,","* and automatically advances to the next upload when a preceding one has completed.","* @module uploader-queue","*/","","","","/**","* This class manages a queue of files to be uploaded to the server.","* @class Uploader.Queue","* @extends Base","* @constructor","*/","var UploaderQueue = function() {","    this.queuedFiles = [];","    this.uploadRetries = {};","    this.numberOfUploads = 0;","    this.currentUploadedByteValues = {};","    this.currentFiles = {};","    this.totalBytesUploaded = 0;","    this.totalBytes = 0;","","    UploaderQueue.superclass.constructor.apply(this, arguments);","};","","","Y.extend(UploaderQueue, Y.Base, {","","    /**","    * Stored value of the current queue state","    * @property _currentState","    * @type {String}","    * @protected","    * @default UploaderQueue.STOPPED","    */","    _currentState: UploaderQueue.STOPPED,","","    /**","    * Construction logic executed during UploaderQueue instantiation.","    *","    * @method initializer","    * @protected","    */","    initializer : function () {},","","    /**","    * Handles and retransmits upload start event.","    *","    * @method _uploadStartHandler","    * @param event The event dispatched during the upload process.","    * @private","    */","    _uploadStartHandler : function (event) {","        var updatedEvent = event;","        updatedEvent.file = event.target;","        updatedEvent.originEvent = event;","","        this.fire(\"uploadstart\", updatedEvent);","    },","","    /**","    * Handles and retransmits upload error event.","    *","    * @method _uploadErrorHandler","    * @param event The event dispatched during the upload process.","    * @private","    */","    _uploadErrorHandler : function (event) {","        var errorAction = this.get(\"errorAction\"),","            updatedEvent = event,","            fileid,","            retries;","","        updatedEvent.file = event.target;","        updatedEvent.originEvent = event;","","        this.numberOfUploads-=1;","        delete this.currentFiles[event.target.get(\"id\")];","        this._detachFileEvents(event.target);","","        event.target.cancelUpload();","","        if (errorAction === UploaderQueue.STOP) {","            this.pauseUpload();","        }","","        else if (errorAction === UploaderQueue.RESTART_ASAP) {","            fileid = event.target.get(\"id\");","            retries = this.uploadRetries[fileid] || 0;","","            if (retries < this.get(\"retryCount\")) {","                this.uploadRetries[fileid] = retries + 1;","                this.addToQueueTop(event.target);","            }","            this._startNextFile();","        }","        else if (errorAction === UploaderQueue.RESTART_AFTER) {","            fileid = event.target.get(\"id\");","            retries = this.uploadRetries[fileid] || 0;","","            if (retries < this.get(\"retryCount\")) {","                this.uploadRetries[fileid] = retries + 1;","                this.addToQueueBottom(event.target);","            }","            this._startNextFile();","        }","","        this.fire(\"uploaderror\", updatedEvent);","    },","","    /**","    * Launches the upload of the next file in the queue.","    *","    * @method _startNextFile","    * @private","    */","    _startNextFile : function () {","        if (this.queuedFiles.length > 0) {","            var currentFile = this.queuedFiles.shift(),","                fileId = currentFile.get(\"id\"),","                parameters = this.get(\"perFileParameters\"),","                fileParameters = parameters.hasOwnProperty(fileId) ? parameters[fileId] : parameters;","","            this.currentUploadedByteValues[fileId] = 0;","","            currentFile.on(\"uploadstart\", this._uploadStartHandler, this);","            currentFile.on(\"uploadprogress\", this._uploadProgressHandler, this);","            currentFile.on(\"uploadcomplete\", this._uploadCompleteHandler, this);","            currentFile.on(\"uploaderror\", this._uploadErrorHandler, this);","            currentFile.on(\"uploadcancel\", this._uploadCancelHandler, this);","","            currentFile.set(\"xhrHeaders\", this.get(\"uploadHeaders\"));","            currentFile.set(\"xhrWithCredentials\", this.get(\"withCredentials\"));","","            currentFile.startUpload(this.get(\"uploadURL\"), fileParameters, this.get(\"fileFieldName\"));","","            this._registerUpload(currentFile);","        }","    },","","    /**","    * Register a new upload process.","    *","    * @method _registerUpload","    * @private","    */","    _registerUpload : function (file) {","        this.numberOfUploads += 1;","        this.currentFiles[file.get(\"id\")] = file;","    },","","    /**","    * Unregisters a new upload process.","    *","    * @method _unregisterUpload","    * @private","    */","    _unregisterUpload : function (file) {","        if (this.numberOfUploads > 0) {","            this.numberOfUploads -= 1;","        }","","        delete this.currentFiles[file.get(\"id\")];","        delete this.uploadRetries[file.get(\"id\")];","","        this._detachFileEvents(file);","    },","","    _detachFileEvents : function (file) {","        file.detach(\"uploadstart\", this._uploadStartHandler);","        file.detach(\"uploadprogress\", this._uploadProgressHandler);","        file.detach(\"uploadcomplete\", this._uploadCompleteHandler);","        file.detach(\"uploaderror\", this._uploadErrorHandler);","        file.detach(\"uploadcancel\", this._uploadCancelHandler);","    },","","    /**","    * Handles and retransmits upload complete event.","    *","    * @method _uploadCompleteHandler","    * @param event The event dispatched during the upload process.","    * @private","    */","    _uploadCompleteHandler : function (event) {","","        this._unregisterUpload(event.target);","","        this.totalBytesUploaded += event.target.get(\"size\");","        delete this.currentUploadedByteValues[event.target.get(\"id\")];","","","        if (this.queuedFiles.length > 0 && this._currentState === UploaderQueue.UPLOADING) {","            this._startNextFile();","        }","","        var updatedEvent = event,","            uploadedTotal = this.totalBytesUploaded,","            percentLoaded = Math.min(100, Math.round(10000*uploadedTotal/this.totalBytes) / 100);","","        updatedEvent.file = event.target;","        updatedEvent.originEvent = event;","","        Y.each(this.currentUploadedByteValues, function (value) {","            uploadedTotal += value;","        });","","        this.fire(\"totaluploadprogress\", {","            bytesLoaded: uploadedTotal,","            bytesTotal: this.totalBytes,","            percentLoaded: percentLoaded","        });","","        this.fire(\"uploadcomplete\", updatedEvent);","","        if (this.queuedFiles.length === 0 && this.numberOfUploads <= 0) {","            this.fire(\"alluploadscomplete\");","            this._currentState = UploaderQueue.STOPPED;","        }","    },","","    /**","    * Handles and retransmits upload cancel event.","    *","    * @method _uploadCancelHandler","    * @param event The event dispatched during the upload process.","    * @private","    */","    _uploadCancelHandler : function (event) {","","        var updatedEvent = event;","        updatedEvent.originEvent = event;","        updatedEvent.file = event.target;","","        this.fire(\"uploadcacel\", updatedEvent);","    },","","","","    /**","    * Handles and retransmits upload progress event.","    *","    * @method _uploadProgressHandler","    * @param event The event dispatched during the upload process.","    * @private","    */","    _uploadProgressHandler : function (event) {","","        this.currentUploadedByteValues[event.target.get(\"id\")] = event.bytesLoaded;","","        var updatedEvent = event,","            uploadedTotal = this.totalBytesUploaded,","            percentLoaded = Math.min(100, Math.round(10000*uploadedTotal/this.totalBytes) / 100);","","        updatedEvent.originEvent = event;","        updatedEvent.file = event.target;","","        this.fire(\"uploadprogress\", updatedEvent);","","        Y.each(this.currentUploadedByteValues, function (value) {","            uploadedTotal += value;","        });","","        this.fire(\"totaluploadprogress\", {","            bytesLoaded: uploadedTotal,","            bytesTotal: this.totalBytes,","            percentLoaded: percentLoaded","        });","    },","","    /**","    * Starts uploading the queued up file list.","    *","    * @method startUpload","    */","    startUpload: function() {","        this.queuedFiles = this.get(\"fileList\").slice(0);","        this.numberOfUploads = 0;","        this.currentUploadedByteValues = {};","        this.currentFiles = {};","        this.totalBytesUploaded = 0;","","        this._currentState = UploaderQueue.UPLOADING;","","        while (this.numberOfUploads < this.get(\"simUploads\") && this.queuedFiles.length > 0) {","            this._startNextFile();","        }","    },","","    /**","    * Pauses the upload process. The ongoing file uploads","    * will complete after this method is called, but no","    * new ones will be launched.","    *","    * @method pauseUpload","    */","    pauseUpload: function () {","        this._currentState = UploaderQueue.STOPPED;","    },","","    /**","    * Restarts a paused upload process.","    *","    * @method restartUpload","    */","    restartUpload: function () {","        this._currentState = UploaderQueue.UPLOADING;","        while (this.numberOfUploads < this.get(\"simUploads\")) {","             this._startNextFile();","        }","    },","","    /**","    * If a particular file is stuck in an ongoing upload without","    * any progress events, this method allows to force its reupload","    * by cancelling its upload and immediately relaunching it.","    *","    * @method forceReupload","    * @param file {Y.File} The file to force reupload on.","    */","    forceReupload : function (file) {","        var id = file.get(\"id\");","        if (this.currentFiles.hasOwnProperty(id)) {","            file.cancelUpload();","            this._unregisterUpload(file);","            this.addToQueueTop(file);","            this._startNextFile();","        }","    },","","    /**","    * Add a new file to the top of the queue (the upload will be","    * launched as soon as the current number of uploading files","    * drops below the maximum permissible value).","    *","    * @method addToQueueTop","    * @param file {Y.File} The file to add to the top of the queue.","    */","    addToQueueTop: function (file) {","            this.queuedFiles.unshift(file);","    },","","    /**","    * Add a new file to the bottom of the queue (the upload will be","    * launched after all the other queued files are uploaded.)","    *","    * @method addToQueueBottom","    * @param file {Y.File} The file to add to the bottom of the queue.","    */","    addToQueueBottom: function (file) {","            this.queuedFiles.push(file);","    },","","    /**","    * Cancels a specific file's upload. If no argument is passed,","    * all ongoing uploads are cancelled and the upload process is","    * stopped.","    *","    * @method cancelUpload","    * @param file {Y.File} An optional parameter - the file whose upload","    * should be cancelled.","    */","    cancelUpload: function (file) {","        var id,","            i,","            fid;","","        if (file) {","            id = file.get(\"id\");","","            if (this.currentFiles[id]) {","                this.currentFiles[id].cancelUpload();","                this._unregisterUpload(this.currentFiles[id]);","                if (this._currentState === UploaderQueue.UPLOADING) {","                    this._startNextFile();","                }","            }","            else {","                for (i = 0, len = this.queuedFiles.length; i < len; i++) {","                    if (this.queuedFiles[i].get(\"id\") === id) {","                        this.queuedFiles.splice(i, 1);","                        break;","                    }","                }","            }","        }","        else {","            for (fid in this.currentFiles) {","                this.currentFiles[fid].cancelUpload();","                this._unregisterUpload(this.currentFiles[fid]);","            }","","            this.currentUploadedByteValues = {};","            this.currentFiles = {};","            this.totalBytesUploaded = 0;","            this.fire(\"alluploadscancelled\");","            this._currentState = UploaderQueue.STOPPED;","        }","    }","}, {","    /**","    * Static constant for the value of the `errorAction` attribute:","    * prescribes the queue to continue uploading files in case of","    * an error.","    * @property CONTINUE","    * @readOnly","    * @type {String}","    * @static","    */","    CONTINUE: \"continue\",","","    /**","    * Static constant for the value of the `errorAction` attribute:","    * prescribes the queue to stop uploading files in case of","    * an error.","    * @property STOP","    * @readOnly","    * @type {String}","    * @static","    */","    STOP: \"stop\",","","    /**","    * Static constant for the value of the `errorAction` attribute:","    * prescribes the queue to restart a file upload immediately in case of","    * an error.","    * @property RESTART_ASAP","    * @readOnly","    * @type {String}","    * @static","    */","    RESTART_ASAP: \"restartasap\",","","    /**","    * Static constant for the value of the `errorAction` attribute:","    * prescribes the queue to restart an errored out file upload after","    * other files have finished uploading.","    * @property RESTART_AFTER","    * @readOnly","    * @type {String}","    * @static","    */","    RESTART_AFTER: \"restartafter\",","","    /**","    * Static constant for the value of the `_currentState` property:","    * implies that the queue is currently not uploading files.","    * @property STOPPED","    * @readOnly","    * @type {String}","    * @static","    */","    STOPPED: \"stopped\",","","    /**","    * Static constant for the value of the `_currentState` property:","    * implies that the queue is currently uploading files.","    * @property UPLOADING","    * @readOnly","    * @type {String}","    * @static","    */","    UPLOADING: \"uploading\",","","    /**","    * The identity of the class.","    *","    * @property NAME","    * @type String","    * @default 'uploaderqueue'","    * @readOnly","    * @protected","    * @static","    */","    NAME: 'uploaderqueue',","","    /**","    * Static property used to define the default attribute configuration of","    * the class.","    *","    * @property ATTRS","    * @type {Object}","    * @protected","    * @static","    */","    ATTRS: {","","        /**","        * Maximum number of simultaneous uploads; must be in the","        * range between 1 and 5. The value of `2` is default. It","        * is recommended that this value does not exceed 3.","        * @attribute simUploads","        * @type Number","        * @default 2","        */","         simUploads: {","                 value: 2,","                 validator: function (val) {","                         return (val >= 1 && val <= 5);","                 }","         },","","        /**","        * The action to take in case of error. The valid values for this attribute are:","        * `Y.Uploader.Queue.CONTINUE` (the upload process should continue on other files,","        * ignoring the error), `Y.Uploader.Queue.STOP` (the upload process","        * should stop completely), `Y.Uploader.Queue.RESTART_ASAP` (the upload","        * should restart immediately on the errored out file and continue as planned), or","        * Y.Uploader.Queue.RESTART_AFTER (the upload of the errored out file should restart","        * after all other files have uploaded)","        * @attribute errorAction","        * @type String","        * @default Y.Uploader.Queue.CONTINUE","        */","        errorAction: {","            value: \"continue\",","                validator: function (val) {","                return (","                    val === UploaderQueue.CONTINUE ||","                    val === UploaderQueue.STOP ||","                    val === UploaderQueue.RESTART_ASAP ||","                    val === UploaderQueue.RESTART_AFTER","                );","            }","        },","","        /**","        * The total number of bytes that has been uploaded.","        * @attribute bytesUploaded","        * @type Number","        */","        bytesUploaded: {","            readOnly: true,","            value: 0","        },","","        /**","        * The total number of bytes in the queue.","        * @attribute bytesTotal","        * @type Number","        */","        bytesTotal: {","            readOnly: true,","            value: 0","        },","","        /**","        * The queue file list. This file list should only be modified","        * before the upload has been started; modifying it after starting","        * the upload has no effect, and `addToQueueTop` or `addToQueueBottom` methods","        * should be used instead.","        * @attribute fileList","        * @type Array","        */","        fileList: {","            value: [],","            lazyAdd: false,","            setter: function (val) {","                var newValue = val;","                Y.Array.each(newValue, function (value) {","                    this.totalBytes += value.get(\"size\");","                }, this);","","                return val;","            }","        },","","        /**","        * A String specifying what should be the POST field name for the file","        * content in the upload request.","        *","        * @attribute fileFieldName","        * @type {String}","        * @default Filedata","        */","        fileFieldName: {","            value: \"Filedata\"","        },","","        /**","        * The URL to POST the file upload requests to.","        *","        * @attribute uploadURL","        * @type {String}","        * @default \"\"","        */","        uploadURL: {","            value: \"\"","        },","","        /**","        * Additional HTTP headers that should be included","        * in the upload request. Due to Flash Player security","        * restrictions, this attribute is only honored in the","        * HTML5 Uploader.","        *","        * @attribute uploadHeaders","        * @type {Object}","        * @default {}","        */","        uploadHeaders: {","            value: {}","        },","","        /**","        * A Boolean that specifies whether the file should be","        * uploaded with the appropriate user credentials for the","        * domain. Due to Flash Player security restrictions, this","        * attribute is only honored in the HTML5 Uploader.","        *","        * @attribute withCredentials","        * @type {Boolean}","        * @default true","        */","        withCredentials: {","            value: true","        },","","","        /**","        * An object, keyed by `fileId`, containing sets of key-value pairs","        * that should be passed as POST variables along with each corresponding","        * file.","        *","        * @attribute perFileParameters","        * @type {Object}","        * @default {}","        */","        perFileParameters: {","            value: {}","        },","","        /**","        * The number of times to try re-uploading a file that failed to upload before","        * cancelling its upload.","        *","        * @attribute retryCount","        * @type {Number}","        * @default 3","        */","        retryCount: {","            value: 3","        }","","    }","});","","","Y.namespace('Uploader');","Y.Uploader.Queue = UploaderQueue;","","","}, '3.9.1', {\"requires\": [\"base\"]});"];
_yuitest_coverage["build/uploader-queue/uploader-queue.js"].lines = {"1":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"27":0,"31":0,"58":0,"59":0,"60":0,"62":0,"73":0,"78":0,"79":0,"81":0,"82":0,"83":0,"85":0,"87":0,"88":0,"91":0,"92":0,"93":0,"95":0,"96":0,"97":0,"99":0,"101":0,"102":0,"103":0,"105":0,"106":0,"107":0,"109":0,"112":0,"122":0,"123":0,"128":0,"130":0,"131":0,"132":0,"133":0,"134":0,"136":0,"137":0,"139":0,"141":0,"152":0,"153":0,"163":0,"164":0,"167":0,"168":0,"170":0,"174":0,"175":0,"176":0,"177":0,"178":0,"190":0,"192":0,"193":0,"196":0,"197":0,"200":0,"204":0,"205":0,"207":0,"208":0,"211":0,"217":0,"219":0,"220":0,"221":0,"234":0,"235":0,"236":0,"238":0,"252":0,"254":0,"258":0,"259":0,"261":0,"263":0,"264":0,"267":0,"280":0,"281":0,"282":0,"283":0,"284":0,"286":0,"288":0,"289":0,"301":0,"310":0,"311":0,"312":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"343":0,"354":0,"367":0,"371":0,"372":0,"374":0,"375":0,"376":0,"377":0,"378":0,"382":0,"383":0,"384":0,"385":0,"391":0,"392":0,"393":0,"396":0,"397":0,"398":0,"399":0,"400":0,"502":0,"521":0,"562":0,"563":0,"564":0,"567":0,"652":0,"653":0};
_yuitest_coverage["build/uploader-queue/uploader-queue.js"].functions = {"UploaderQueue:18":0,"_uploadStartHandler:57":0,"_uploadErrorHandler:72":0,"_startNextFile:121":0,"_registerUpload:151":0,"_unregisterUpload:162":0,"_detachFileEvents:173":0,"(anonymous 2):207":0,"_uploadCompleteHandler:188":0,"_uploadCancelHandler:232":0,"(anonymous 3):263":0,"_uploadProgressHandler:250":0,"startUpload:279":0,"pauseUpload:300":0,"restartUpload:309":0,"forceReupload:324":0,"addToQueueTop:342":0,"addToQueueBottom:353":0,"cancelUpload:366":0,"validator:501":0,"validator:520":0,"(anonymous 4):563":0,"setter:561":0,"(anonymous 1):1":0};
_yuitest_coverage["build/uploader-queue/uploader-queue.js"].coveredLines = 138;
_yuitest_coverage["build/uploader-queue/uploader-queue.js"].coveredFunctions = 24;
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 1);
YUI.add('uploader-queue', function (Y, NAME) {

/**
* The class manages a queue of files that should be uploaded to the server.
* It initializes the required number of uploads, tracks them as they progress,
* and automatically advances to the next upload when a preceding one has completed.
* @module uploader-queue
*/



/**
* This class manages a queue of files to be uploaded to the server.
* @class Uploader.Queue
* @extends Base
* @constructor
*/
_yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "(anonymous 1)", 1);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 18);
var UploaderQueue = function() {
    _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "UploaderQueue", 18);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 19);
this.queuedFiles = [];
    _yuitest_coverline("build/uploader-queue/uploader-queue.js", 20);
this.uploadRetries = {};
    _yuitest_coverline("build/uploader-queue/uploader-queue.js", 21);
this.numberOfUploads = 0;
    _yuitest_coverline("build/uploader-queue/uploader-queue.js", 22);
this.currentUploadedByteValues = {};
    _yuitest_coverline("build/uploader-queue/uploader-queue.js", 23);
this.currentFiles = {};
    _yuitest_coverline("build/uploader-queue/uploader-queue.js", 24);
this.totalBytesUploaded = 0;
    _yuitest_coverline("build/uploader-queue/uploader-queue.js", 25);
this.totalBytes = 0;

    _yuitest_coverline("build/uploader-queue/uploader-queue.js", 27);
UploaderQueue.superclass.constructor.apply(this, arguments);
};


_yuitest_coverline("build/uploader-queue/uploader-queue.js", 31);
Y.extend(UploaderQueue, Y.Base, {

    /**
    * Stored value of the current queue state
    * @property _currentState
    * @type {String}
    * @protected
    * @default UploaderQueue.STOPPED
    */
    _currentState: UploaderQueue.STOPPED,

    /**
    * Construction logic executed during UploaderQueue instantiation.
    *
    * @method initializer
    * @protected
    */
    initializer : function () {},

    /**
    * Handles and retransmits upload start event.
    *
    * @method _uploadStartHandler
    * @param event The event dispatched during the upload process.
    * @private
    */
    _uploadStartHandler : function (event) {
        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "_uploadStartHandler", 57);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 58);
var updatedEvent = event;
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 59);
updatedEvent.file = event.target;
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 60);
updatedEvent.originEvent = event;

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 62);
this.fire("uploadstart", updatedEvent);
    },

    /**
    * Handles and retransmits upload error event.
    *
    * @method _uploadErrorHandler
    * @param event The event dispatched during the upload process.
    * @private
    */
    _uploadErrorHandler : function (event) {
        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "_uploadErrorHandler", 72);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 73);
var errorAction = this.get("errorAction"),
            updatedEvent = event,
            fileid,
            retries;

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 78);
updatedEvent.file = event.target;
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 79);
updatedEvent.originEvent = event;

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 81);
this.numberOfUploads-=1;
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 82);
delete this.currentFiles[event.target.get("id")];
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 83);
this._detachFileEvents(event.target);

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 85);
event.target.cancelUpload();

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 87);
if (errorAction === UploaderQueue.STOP) {
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 88);
this.pauseUpload();
        }

        else {_yuitest_coverline("build/uploader-queue/uploader-queue.js", 91);
if (errorAction === UploaderQueue.RESTART_ASAP) {
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 92);
fileid = event.target.get("id");
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 93);
retries = this.uploadRetries[fileid] || 0;

            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 95);
if (retries < this.get("retryCount")) {
                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 96);
this.uploadRetries[fileid] = retries + 1;
                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 97);
this.addToQueueTop(event.target);
            }
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 99);
this._startNextFile();
        }
        else {_yuitest_coverline("build/uploader-queue/uploader-queue.js", 101);
if (errorAction === UploaderQueue.RESTART_AFTER) {
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 102);
fileid = event.target.get("id");
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 103);
retries = this.uploadRetries[fileid] || 0;

            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 105);
if (retries < this.get("retryCount")) {
                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 106);
this.uploadRetries[fileid] = retries + 1;
                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 107);
this.addToQueueBottom(event.target);
            }
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 109);
this._startNextFile();
        }}}

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 112);
this.fire("uploaderror", updatedEvent);
    },

    /**
    * Launches the upload of the next file in the queue.
    *
    * @method _startNextFile
    * @private
    */
    _startNextFile : function () {
        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "_startNextFile", 121);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 122);
if (this.queuedFiles.length > 0) {
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 123);
var currentFile = this.queuedFiles.shift(),
                fileId = currentFile.get("id"),
                parameters = this.get("perFileParameters"),
                fileParameters = parameters.hasOwnProperty(fileId) ? parameters[fileId] : parameters;

            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 128);
this.currentUploadedByteValues[fileId] = 0;

            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 130);
currentFile.on("uploadstart", this._uploadStartHandler, this);
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 131);
currentFile.on("uploadprogress", this._uploadProgressHandler, this);
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 132);
currentFile.on("uploadcomplete", this._uploadCompleteHandler, this);
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 133);
currentFile.on("uploaderror", this._uploadErrorHandler, this);
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 134);
currentFile.on("uploadcancel", this._uploadCancelHandler, this);

            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 136);
currentFile.set("xhrHeaders", this.get("uploadHeaders"));
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 137);
currentFile.set("xhrWithCredentials", this.get("withCredentials"));

            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 139);
currentFile.startUpload(this.get("uploadURL"), fileParameters, this.get("fileFieldName"));

            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 141);
this._registerUpload(currentFile);
        }
    },

    /**
    * Register a new upload process.
    *
    * @method _registerUpload
    * @private
    */
    _registerUpload : function (file) {
        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "_registerUpload", 151);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 152);
this.numberOfUploads += 1;
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 153);
this.currentFiles[file.get("id")] = file;
    },

    /**
    * Unregisters a new upload process.
    *
    * @method _unregisterUpload
    * @private
    */
    _unregisterUpload : function (file) {
        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "_unregisterUpload", 162);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 163);
if (this.numberOfUploads > 0) {
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 164);
this.numberOfUploads -= 1;
        }

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 167);
delete this.currentFiles[file.get("id")];
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 168);
delete this.uploadRetries[file.get("id")];

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 170);
this._detachFileEvents(file);
    },

    _detachFileEvents : function (file) {
        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "_detachFileEvents", 173);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 174);
file.detach("uploadstart", this._uploadStartHandler);
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 175);
file.detach("uploadprogress", this._uploadProgressHandler);
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 176);
file.detach("uploadcomplete", this._uploadCompleteHandler);
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 177);
file.detach("uploaderror", this._uploadErrorHandler);
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 178);
file.detach("uploadcancel", this._uploadCancelHandler);
    },

    /**
    * Handles and retransmits upload complete event.
    *
    * @method _uploadCompleteHandler
    * @param event The event dispatched during the upload process.
    * @private
    */
    _uploadCompleteHandler : function (event) {

        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "_uploadCompleteHandler", 188);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 190);
this._unregisterUpload(event.target);

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 192);
this.totalBytesUploaded += event.target.get("size");
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 193);
delete this.currentUploadedByteValues[event.target.get("id")];


        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 196);
if (this.queuedFiles.length > 0 && this._currentState === UploaderQueue.UPLOADING) {
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 197);
this._startNextFile();
        }

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 200);
var updatedEvent = event,
            uploadedTotal = this.totalBytesUploaded,
            percentLoaded = Math.min(100, Math.round(10000*uploadedTotal/this.totalBytes) / 100);

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 204);
updatedEvent.file = event.target;
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 205);
updatedEvent.originEvent = event;

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 207);
Y.each(this.currentUploadedByteValues, function (value) {
            _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "(anonymous 2)", 207);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 208);
uploadedTotal += value;
        });

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 211);
this.fire("totaluploadprogress", {
            bytesLoaded: uploadedTotal,
            bytesTotal: this.totalBytes,
            percentLoaded: percentLoaded
        });

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 217);
this.fire("uploadcomplete", updatedEvent);

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 219);
if (this.queuedFiles.length === 0 && this.numberOfUploads <= 0) {
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 220);
this.fire("alluploadscomplete");
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 221);
this._currentState = UploaderQueue.STOPPED;
        }
    },

    /**
    * Handles and retransmits upload cancel event.
    *
    * @method _uploadCancelHandler
    * @param event The event dispatched during the upload process.
    * @private
    */
    _uploadCancelHandler : function (event) {

        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "_uploadCancelHandler", 232);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 234);
var updatedEvent = event;
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 235);
updatedEvent.originEvent = event;
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 236);
updatedEvent.file = event.target;

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 238);
this.fire("uploadcacel", updatedEvent);
    },



    /**
    * Handles and retransmits upload progress event.
    *
    * @method _uploadProgressHandler
    * @param event The event dispatched during the upload process.
    * @private
    */
    _uploadProgressHandler : function (event) {

        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "_uploadProgressHandler", 250);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 252);
this.currentUploadedByteValues[event.target.get("id")] = event.bytesLoaded;

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 254);
var updatedEvent = event,
            uploadedTotal = this.totalBytesUploaded,
            percentLoaded = Math.min(100, Math.round(10000*uploadedTotal/this.totalBytes) / 100);

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 258);
updatedEvent.originEvent = event;
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 259);
updatedEvent.file = event.target;

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 261);
this.fire("uploadprogress", updatedEvent);

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 263);
Y.each(this.currentUploadedByteValues, function (value) {
            _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "(anonymous 3)", 263);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 264);
uploadedTotal += value;
        });

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 267);
this.fire("totaluploadprogress", {
            bytesLoaded: uploadedTotal,
            bytesTotal: this.totalBytes,
            percentLoaded: percentLoaded
        });
    },

    /**
    * Starts uploading the queued up file list.
    *
    * @method startUpload
    */
    startUpload: function() {
        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "startUpload", 279);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 280);
this.queuedFiles = this.get("fileList").slice(0);
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 281);
this.numberOfUploads = 0;
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 282);
this.currentUploadedByteValues = {};
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 283);
this.currentFiles = {};
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 284);
this.totalBytesUploaded = 0;

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 286);
this._currentState = UploaderQueue.UPLOADING;

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 288);
while (this.numberOfUploads < this.get("simUploads") && this.queuedFiles.length > 0) {
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 289);
this._startNextFile();
        }
    },

    /**
    * Pauses the upload process. The ongoing file uploads
    * will complete after this method is called, but no
    * new ones will be launched.
    *
    * @method pauseUpload
    */
    pauseUpload: function () {
        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "pauseUpload", 300);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 301);
this._currentState = UploaderQueue.STOPPED;
    },

    /**
    * Restarts a paused upload process.
    *
    * @method restartUpload
    */
    restartUpload: function () {
        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "restartUpload", 309);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 310);
this._currentState = UploaderQueue.UPLOADING;
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 311);
while (this.numberOfUploads < this.get("simUploads")) {
             _yuitest_coverline("build/uploader-queue/uploader-queue.js", 312);
this._startNextFile();
        }
    },

    /**
    * If a particular file is stuck in an ongoing upload without
    * any progress events, this method allows to force its reupload
    * by cancelling its upload and immediately relaunching it.
    *
    * @method forceReupload
    * @param file {Y.File} The file to force reupload on.
    */
    forceReupload : function (file) {
        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "forceReupload", 324);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 325);
var id = file.get("id");
        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 326);
if (this.currentFiles.hasOwnProperty(id)) {
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 327);
file.cancelUpload();
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 328);
this._unregisterUpload(file);
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 329);
this.addToQueueTop(file);
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 330);
this._startNextFile();
        }
    },

    /**
    * Add a new file to the top of the queue (the upload will be
    * launched as soon as the current number of uploading files
    * drops below the maximum permissible value).
    *
    * @method addToQueueTop
    * @param file {Y.File} The file to add to the top of the queue.
    */
    addToQueueTop: function (file) {
            _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "addToQueueTop", 342);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 343);
this.queuedFiles.unshift(file);
    },

    /**
    * Add a new file to the bottom of the queue (the upload will be
    * launched after all the other queued files are uploaded.)
    *
    * @method addToQueueBottom
    * @param file {Y.File} The file to add to the bottom of the queue.
    */
    addToQueueBottom: function (file) {
            _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "addToQueueBottom", 353);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 354);
this.queuedFiles.push(file);
    },

    /**
    * Cancels a specific file's upload. If no argument is passed,
    * all ongoing uploads are cancelled and the upload process is
    * stopped.
    *
    * @method cancelUpload
    * @param file {Y.File} An optional parameter - the file whose upload
    * should be cancelled.
    */
    cancelUpload: function (file) {
        _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "cancelUpload", 366);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 367);
var id,
            i,
            fid;

        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 371);
if (file) {
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 372);
id = file.get("id");

            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 374);
if (this.currentFiles[id]) {
                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 375);
this.currentFiles[id].cancelUpload();
                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 376);
this._unregisterUpload(this.currentFiles[id]);
                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 377);
if (this._currentState === UploaderQueue.UPLOADING) {
                    _yuitest_coverline("build/uploader-queue/uploader-queue.js", 378);
this._startNextFile();
                }
            }
            else {
                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 382);
for (i = 0, len = this.queuedFiles.length; i < len; i++) {
                    _yuitest_coverline("build/uploader-queue/uploader-queue.js", 383);
if (this.queuedFiles[i].get("id") === id) {
                        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 384);
this.queuedFiles.splice(i, 1);
                        _yuitest_coverline("build/uploader-queue/uploader-queue.js", 385);
break;
                    }
                }
            }
        }
        else {
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 391);
for (fid in this.currentFiles) {
                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 392);
this.currentFiles[fid].cancelUpload();
                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 393);
this._unregisterUpload(this.currentFiles[fid]);
            }

            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 396);
this.currentUploadedByteValues = {};
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 397);
this.currentFiles = {};
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 398);
this.totalBytesUploaded = 0;
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 399);
this.fire("alluploadscancelled");
            _yuitest_coverline("build/uploader-queue/uploader-queue.js", 400);
this._currentState = UploaderQueue.STOPPED;
        }
    }
}, {
    /**
    * Static constant for the value of the `errorAction` attribute:
    * prescribes the queue to continue uploading files in case of
    * an error.
    * @property CONTINUE
    * @readOnly
    * @type {String}
    * @static
    */
    CONTINUE: "continue",

    /**
    * Static constant for the value of the `errorAction` attribute:
    * prescribes the queue to stop uploading files in case of
    * an error.
    * @property STOP
    * @readOnly
    * @type {String}
    * @static
    */
    STOP: "stop",

    /**
    * Static constant for the value of the `errorAction` attribute:
    * prescribes the queue to restart a file upload immediately in case of
    * an error.
    * @property RESTART_ASAP
    * @readOnly
    * @type {String}
    * @static
    */
    RESTART_ASAP: "restartasap",

    /**
    * Static constant for the value of the `errorAction` attribute:
    * prescribes the queue to restart an errored out file upload after
    * other files have finished uploading.
    * @property RESTART_AFTER
    * @readOnly
    * @type {String}
    * @static
    */
    RESTART_AFTER: "restartafter",

    /**
    * Static constant for the value of the `_currentState` property:
    * implies that the queue is currently not uploading files.
    * @property STOPPED
    * @readOnly
    * @type {String}
    * @static
    */
    STOPPED: "stopped",

    /**
    * Static constant for the value of the `_currentState` property:
    * implies that the queue is currently uploading files.
    * @property UPLOADING
    * @readOnly
    * @type {String}
    * @static
    */
    UPLOADING: "uploading",

    /**
    * The identity of the class.
    *
    * @property NAME
    * @type String
    * @default 'uploaderqueue'
    * @readOnly
    * @protected
    * @static
    */
    NAME: 'uploaderqueue',

    /**
    * Static property used to define the default attribute configuration of
    * the class.
    *
    * @property ATTRS
    * @type {Object}
    * @protected
    * @static
    */
    ATTRS: {

        /**
        * Maximum number of simultaneous uploads; must be in the
        * range between 1 and 5. The value of `2` is default. It
        * is recommended that this value does not exceed 3.
        * @attribute simUploads
        * @type Number
        * @default 2
        */
         simUploads: {
                 value: 2,
                 validator: function (val) {
                         _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "validator", 501);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 502);
return (val >= 1 && val <= 5);
                 }
         },

        /**
        * The action to take in case of error. The valid values for this attribute are:
        * `Y.Uploader.Queue.CONTINUE` (the upload process should continue on other files,
        * ignoring the error), `Y.Uploader.Queue.STOP` (the upload process
        * should stop completely), `Y.Uploader.Queue.RESTART_ASAP` (the upload
        * should restart immediately on the errored out file and continue as planned), or
        * Y.Uploader.Queue.RESTART_AFTER (the upload of the errored out file should restart
        * after all other files have uploaded)
        * @attribute errorAction
        * @type String
        * @default Y.Uploader.Queue.CONTINUE
        */
        errorAction: {
            value: "continue",
                validator: function (val) {
                _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "validator", 520);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 521);
return (
                    val === UploaderQueue.CONTINUE ||
                    val === UploaderQueue.STOP ||
                    val === UploaderQueue.RESTART_ASAP ||
                    val === UploaderQueue.RESTART_AFTER
                );
            }
        },

        /**
        * The total number of bytes that has been uploaded.
        * @attribute bytesUploaded
        * @type Number
        */
        bytesUploaded: {
            readOnly: true,
            value: 0
        },

        /**
        * The total number of bytes in the queue.
        * @attribute bytesTotal
        * @type Number
        */
        bytesTotal: {
            readOnly: true,
            value: 0
        },

        /**
        * The queue file list. This file list should only be modified
        * before the upload has been started; modifying it after starting
        * the upload has no effect, and `addToQueueTop` or `addToQueueBottom` methods
        * should be used instead.
        * @attribute fileList
        * @type Array
        */
        fileList: {
            value: [],
            lazyAdd: false,
            setter: function (val) {
                _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "setter", 561);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 562);
var newValue = val;
                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 563);
Y.Array.each(newValue, function (value) {
                    _yuitest_coverfunc("build/uploader-queue/uploader-queue.js", "(anonymous 4)", 563);
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 564);
this.totalBytes += value.get("size");
                }, this);

                _yuitest_coverline("build/uploader-queue/uploader-queue.js", 567);
return val;
            }
        },

        /**
        * A String specifying what should be the POST field name for the file
        * content in the upload request.
        *
        * @attribute fileFieldName
        * @type {String}
        * @default Filedata
        */
        fileFieldName: {
            value: "Filedata"
        },

        /**
        * The URL to POST the file upload requests to.
        *
        * @attribute uploadURL
        * @type {String}
        * @default ""
        */
        uploadURL: {
            value: ""
        },

        /**
        * Additional HTTP headers that should be included
        * in the upload request. Due to Flash Player security
        * restrictions, this attribute is only honored in the
        * HTML5 Uploader.
        *
        * @attribute uploadHeaders
        * @type {Object}
        * @default {}
        */
        uploadHeaders: {
            value: {}
        },

        /**
        * A Boolean that specifies whether the file should be
        * uploaded with the appropriate user credentials for the
        * domain. Due to Flash Player security restrictions, this
        * attribute is only honored in the HTML5 Uploader.
        *
        * @attribute withCredentials
        * @type {Boolean}
        * @default true
        */
        withCredentials: {
            value: true
        },


        /**
        * An object, keyed by `fileId`, containing sets of key-value pairs
        * that should be passed as POST variables along with each corresponding
        * file.
        *
        * @attribute perFileParameters
        * @type {Object}
        * @default {}
        */
        perFileParameters: {
            value: {}
        },

        /**
        * The number of times to try re-uploading a file that failed to upload before
        * cancelling its upload.
        *
        * @attribute retryCount
        * @type {Number}
        * @default 3
        */
        retryCount: {
            value: 3
        }

    }
});


_yuitest_coverline("build/uploader-queue/uploader-queue.js", 652);
Y.namespace('Uploader');
_yuitest_coverline("build/uploader-queue/uploader-queue.js", 653);
Y.Uploader.Queue = UploaderQueue;


}, '3.9.1', {"requires": ["base"]});
