/* 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/file-html5/file-html5.js"] = {
    lines: {},
    functions: {},
    coveredLines: 0,
    calledLines: 0,
    coveredFunctions: 0,
    calledFunctions: 0,
    path: "build/file-html5/file-html5.js",
    code: []
};
_yuitest_coverage["build/file-html5/file-html5.js"].code=["YUI.add('file-html5', function (Y, NAME) {","","    /**","     * The FileHTML5 class provides a wrapper for a file pointer in an HTML5 The File wrapper ","     * also implements the mechanics for uploading a file and tracking its progress.","     * @module file-html5","     */     ","     ","    /**","     * The class provides a wrapper for a file pointer.","     * @class FileHTML5","     * @extends Base","     * @constructor","     * @param {Object} config Configuration object.","     */","    var Lang = Y.Lang,","        Bind = Y.bind,","        Win = Y.config.win;","","    var FileHTML5 = function(o) {","        ","        var file = null;","","        if (FileHTML5.isValidFile(o)) {","            file = o;","        }","        else if (FileHTML5.isValidFile(o.file)) {","            file = o.file;","        }","        else {","            file = false;","        }","","        FileHTML5.superclass.constructor.apply(this, arguments);      ","        ","        if (file && FileHTML5.canUpload()) {","           if (!this.get(\"file\")) {","               this._set(\"file\", file);","           }","","           if (!this.get(\"name\")) {","           this._set(\"name\", file.name || file.fileName);","           }","","           if (this.get(\"size\") != (file.size || file.fileSize)) {","           this._set(\"size\", file.size || file.fileSize);","           }","","           if (!this.get(\"type\")) {","           this._set(\"type\", file.type);","           }","","           if (file.hasOwnProperty(\"lastModifiedDate\") && !this.get(\"dateModified\")) {","               this._set(\"dateModified\", file.lastModifiedDate);","           }","        }","    };","","","    Y.extend(FileHTML5, Y.Base, {","","       /**","        * Construction logic executed during FileHTML5 instantiation.","        *","        * @method initializer","        * @protected","        */","        initializer : function (cfg) {","            if (!this.get(\"id\")) {","                this._set(\"id\", Y.guid(\"file\"));","            }","        },","","       /**","        * Handler of events dispatched by the XMLHTTPRequest.","        *","        * @method _uploadEventHandler","        * @param {Event} event The event object received from the XMLHTTPRequest.","        * @protected","        */      ","        _uploadEventHandler: function (event) {","            var xhr = this.get(\"xhr\");","","            switch (event.type) {","                case \"progress\":","                  /**","                   * Signals that progress has been made on the upload of this file. ","                   *","                   * @event uploadprogress","                   * @param event {Event} The event object for the `uploadprogress` with the","                   *                      following payload:","                   *  <dl>","                   *      <dt>originEvent</dt>","                   *          <dd>The original event fired by the XMLHttpRequest instance.</dd>","                   *      <dt>bytesLoaded</dt>","                   *          <dd>The number of bytes of the file that has been uploaded.</dd>","                   *      <dt>bytesTotal</dt>","                   *          <dd>The total number of bytes in the file (the file size)</dd>","                   *      <dt>percentLoaded</dt>","                   *          <dd>The fraction of the file that has been uploaded, out of 100.</dd>","                   *  </dl>","                   */","                   this.fire(\"uploadprogress\", {originEvent: event,","                                               bytesLoaded: event.loaded, ","                                               bytesTotal: this.get(\"size\"), ","                                               percentLoaded: Math.min(100, Math.round(10000*event.loaded/this.get(\"size\"))/100)","                                               });","                   this._set(\"bytesUploaded\", event.loaded);","                   break;","","                case \"load\":","                  /**","                   * Signals that this file's upload has completed and data has been received from the server.","                   *","                   * @event uploadcomplete","                   * @param event {Event} The event object for the `uploadcomplete` with the","                   *                      following payload:","                   *  <dl>","                   *      <dt>originEvent</dt>","                   *          <dd>The original event fired by the XMLHttpRequest instance.</dd>","                   *      <dt>data</dt>","                   *          <dd>The data returned by the server.</dd>","                   *  </dl>","                   */","","                   if (xhr.status >= 200 && xhr.status <= 299) {","                        this.fire(\"uploadcomplete\", {originEvent: event,","                                                     data: event.target.responseText});","                        var xhrupload = xhr.upload,","                            boundEventHandler = this.get(\"boundEventHandler\");","    ","                        xhrupload.removeEventListener (\"progress\", boundEventHandler);","                        xhrupload.removeEventListener (\"error\", boundEventHandler);","                        xhrupload.removeEventListener (\"abort\", boundEventHandler);","                        xhr.removeEventListener (\"load\", boundEventHandler); ","                        xhr.removeEventListener (\"error\", boundEventHandler);","                        xhr.removeEventListener (\"readystatechange\", boundEventHandler);","                        ","                        this._set(\"xhr\", null);","                   }","                   else {","                        this.fire(\"uploaderror\", {originEvent: event,","                                                  status: xhr.status,","                                                  statusText: xhr.statusText,","                                                  source: \"http\"});","                   }                   ","                   break;","","                case \"error\":","                  /**","                   * Signals that this file's upload has encountered an error. ","                   *","                   * @event uploaderror","                   * @param event {Event} The event object for the `uploaderror` with the","                   *                      following payload:","                   *  <dl>","                   *      <dt>originEvent</dt>","                   *          <dd>The original event fired by the XMLHttpRequest instance.</dd>","                   *      <dt>status</dt>","                   *          <dd>The status code reported by the XMLHttpRequest. If it's an HTTP error,","                                  then this corresponds to the HTTP status code received by the uploader.</dd>","                   *      <dt>statusText</dt>","                   *          <dd>The text of the error event reported by the XMLHttpRequest instance</dd>","                   *      <dt>source</dt>","                   *          <dd>Either \"http\" (if it's an HTTP error), or \"io\" (if it's a network transmission ","                   *              error.)</dd>","                   *","                   *  </dl>","                   */","                   this.fire(\"uploaderror\", {originEvent: event,","                                                  status: xhr.status,","                                                  statusText: xhr.statusText,","                                                  source: \"io\"});","                   break;","","                case \"abort\":","","                  /**","                   * Signals that this file's upload has been cancelled. ","                   *","                   * @event uploadcancel","                   * @param event {Event} The event object for the `uploadcancel` with the","                   *                      following payload:","                   *  <dl>","                   *      <dt>originEvent</dt>","                   *          <dd>The original event fired by the XMLHttpRequest instance.</dd>","                   *  </dl>","                   */","                   this.fire(\"uploadcancel\", {originEvent: event});","                   break;","","                case \"readystatechange\":","","                  /**","                   * Signals that XMLHttpRequest has fired a readystatechange event. ","                   *","                   * @event readystatechange","                   * @param event {Event} The event object for the `readystatechange` with the","                   *                      following payload:","                   *  <dl>","                   *      <dt>readyState</dt>","                   *          <dd>The readyState code reported by the XMLHttpRequest instance.</dd>","                   *      <dt>originEvent</dt>","                   *          <dd>The original event fired by the XMLHttpRequest instance.</dd>","                   *  </dl>","                   */","                   this.fire(\"readystatechange\", {readyState: event.target.readyState,","                                                  originEvent: event});","                   break;","            }","        },","","       /**","        * Starts the upload of a specific file.","        *","        * @method startUpload","        * @param url {String} The URL to upload the file to.","        * @param parameters {Object} (optional) A set of key-value pairs to send as variables along with the file upload HTTP request.","        * @param fileFieldName {String} (optional) The name of the POST variable that should contain the uploaded file ('Filedata' by default)","        */","        startUpload: function(url, parameters, fileFieldName) {","         ","            this._set(\"bytesUploaded\", 0);","            ","            this._set(\"xhr\", new XMLHttpRequest());","            this._set(\"boundEventHandler\", Bind(this._uploadEventHandler, this));","                         ","            var uploadData = new FormData(),","                fileField = fileFieldName || \"Filedata\",","                xhr = this.get(\"xhr\"),","                xhrupload = this.get(\"xhr\").upload,","                boundEventHandler = this.get(\"boundEventHandler\");","","            Y.each(parameters, function (value, key) {uploadData.append(key, value);});","            uploadData.append(fileField, this.get(\"file\"));","","","","","            xhr.addEventListener (\"loadstart\", boundEventHandler, false);","            xhrupload.addEventListener (\"progress\", boundEventHandler, false);","            xhr.addEventListener (\"load\", boundEventHandler, false);","            xhr.addEventListener (\"error\", boundEventHandler, false);","            xhrupload.addEventListener (\"error\", boundEventHandler, false);","            xhrupload.addEventListener (\"abort\", boundEventHandler, false);","            xhr.addEventListener (\"abort\", boundEventHandler, false);","            xhr.addEventListener (\"loadend\", boundEventHandler, false); ","            xhr.addEventListener (\"readystatechange\", boundEventHandler, false);","","            xhr.open(\"POST\", url, true);","","            xhr.withCredentials = this.get(\"xhrWithCredentials\");","","            Y.each(this.get(\"xhrHeaders\"), function (value, key) {","                 xhr.setRequestHeader(key, value);","            });","","            xhr.send(uploadData);","      ","            /**","             * Signals that this file's upload has started. ","             *","             * @event uploadstart","             * @param event {Event} The event object for the `uploadstart` with the","             *                      following payload:","             *  <dl>","             *      <dt>xhr</dt>","             *          <dd>The XMLHttpRequest instance handling the file upload.</dd>","             *  </dl>","             */","             this.fire(\"uploadstart\", {xhr: xhr});","","        },","","       /**","        * Cancels the upload of a specific file, if currently in progress.","        *","        * @method cancelUpload","        */    ","        cancelUpload: function () {","            this.get('xhr').abort();","        }","","","    }, {","","       /**","        * The identity of the class.","        *","        * @property NAME","        * @type String","        * @default 'file'","        * @readOnly","        * @protected","        * @static","        */","        NAME: 'file',","","       /**","        * The type of transport.","        *","        * @property TYPE","        * @type String","        * @default 'html5'","        * @readOnly","        * @protected","        * @static","        */","        TYPE: 'html5',","","       /**","        * Static property used to define the default attribute configuration of","        * the File.","        *","        * @property ATTRS","        * @type {Object}","        * @protected","        * @static","        */","        ATTRS: {","","       /**","        * A String containing the unique id of the file wrapped by the FileFlash instance.","        * The id is supplied by the Flash player uploader.","        *","        * @attribute id","        * @type {String}","        * @initOnly","        */","        id: {","            writeOnce: \"initOnly\",","            value: null","        },","","       /**","        * The size of the file wrapped by FileHTML5. This value is supplied by the instance of File().","        *","        * @attribute size","        * @type {Number}","        * @initOnly","        */","        size: {","            writeOnce: \"initOnly\",","            value: 0","        },","","       /**","        * The name of the file wrapped by FileHTML5. This value is supplied by the instance of File().","        *","        * @attribute name","        * @type {String}","        * @initOnly","        */","        name: {","            writeOnce: \"initOnly\",","            value: null","        },","","       /**","        * The date that the file wrapped by FileHTML5 was created on. This value is supplied by the instance of File().","        *","        * @attribute dateCreated","        * @type {Date}","        * @initOnly","        * @default null","        */","        dateCreated: {","            writeOnce: \"initOnly\",","            value: null","        },","","       /**","        * The date that the file wrapped by FileHTML5 was last modified on. This value is supplied by the instance of File().","        *","        * @attribute dateModified","        * @type {Date}","        * @initOnly","        */","        dateModified: {","            writeOnce: \"initOnly\",","            value: null","        },","","       /**","        * The number of bytes of the file that has been uploaded to the server. This value is","        * non-zero only while a file is being uploaded.","        *","        * @attribute bytesUploaded","        * @type {Date}","        * @readOnly","        */","        bytesUploaded: {","            readOnly: true,","            value: 0","        },","","       /**","        * The type of the file wrapped by FileHTML. This value is provided by the instance of File()","        *","        * @attribute type","        * @type {String}","        * @initOnly","        */","        type: {","            writeOnce: \"initOnly\",","            value: null","        },","","       /**","        * The pointer to the instance of File() wrapped by FileHTML5.","        *","        * @attribute file","        * @type {File}","        * @initOnly","        */","        file: {","            writeOnce: \"initOnly\",","            value: null","        },","","       /**","        * The pointer to the instance of XMLHttpRequest used by FileHTML5 to upload the file.","        *","        * @attribute xhr","        * @type {XMLHttpRequest}","        * @initOnly","        */","        xhr: {","            readOnly: true,","            value: null","        },","","       /**","        * The dictionary of headers that should be set on the XMLHttpRequest object before","        * sending it.","        *","        * @attribute xhrHeaders","        * @type {Object}","        * @initOnly","        */","        xhrHeaders: {","            value: {}","        },","","       /**","        * A Boolean indicating whether the XMLHttpRequest should be sent with user credentials.","        * This does not affect same-site requests. ","        *","        * @attribute xhrWithCredentials","        * @type {Boolean}","        * @initOnly","        */","        xhrWithCredentials: {","            value: true","        },","","       /**","        * The bound event handler used to handle events from XMLHttpRequest.","        *","        * @attribute boundEventHandler","        * @type {Function}","        * @initOnly","        */","        boundEventHandler: {","            readOnly: true,","            value: null","        }","        },","","       /**","        * Checks whether a specific native file instance is valid","        *","        * @method isValidFile","        * @param file {File} A native File() instance.","        * @static","        */","        isValidFile: function (file) {","            return (Win && Win.File && file instanceof File);","        },","","       /**","        * Checks whether the browser has a native upload capability","        * via XMLHttpRequest Level 2.","        *","        * @method canUpload","        * @static","        */","        canUpload: function () {","            return (Win && Win.FormData && Win.XMLHttpRequest);","        }","    });","","    Y.FileHTML5 = FileHTML5;","","}, '3.9.1', {\"requires\": [\"base\"]});"];
_yuitest_coverage["build/file-html5/file-html5.js"].lines = {"1":0,"16":0,"20":0,"22":0,"24":0,"25":0,"27":0,"28":0,"31":0,"34":0,"36":0,"37":0,"38":0,"41":0,"42":0,"45":0,"46":0,"49":0,"50":0,"53":0,"54":0,"60":0,"69":0,"70":0,"82":0,"84":0,"103":0,"108":0,"109":0,"126":0,"127":0,"129":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"139":0,"142":0,"147":0,"170":0,"174":0,"189":0,"190":0,"207":0,"209":0,"223":0,"225":0,"226":0,"228":0,"234":0,"235":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"250":0,"252":0,"254":0,"255":0,"258":0,"271":0,"281":0,"478":0,"489":0,"493":0};
_yuitest_coverage["build/file-html5/file-html5.js"].functions = {"FileHTML5:20":0,"initializer:68":0,"_uploadEventHandler:81":0,"(anonymous 2):234":0,"(anonymous 3):254":0,"startUpload:221":0,"cancelUpload:280":0,"isValidFile:477":0,"canUpload:488":0,"(anonymous 1):1":0};
_yuitest_coverage["build/file-html5/file-html5.js"].coveredLines = 72;
_yuitest_coverage["build/file-html5/file-html5.js"].coveredFunctions = 10;
_yuitest_coverline("build/file-html5/file-html5.js", 1);
YUI.add('file-html5', function (Y, NAME) {

    /**
     * The FileHTML5 class provides a wrapper for a file pointer in an HTML5 The File wrapper 
     * also implements the mechanics for uploading a file and tracking its progress.
     * @module file-html5
     */     
     
    /**
     * The class provides a wrapper for a file pointer.
     * @class FileHTML5
     * @extends Base
     * @constructor
     * @param {Object} config Configuration object.
     */
    _yuitest_coverfunc("build/file-html5/file-html5.js", "(anonymous 1)", 1);
_yuitest_coverline("build/file-html5/file-html5.js", 16);
var Lang = Y.Lang,
        Bind = Y.bind,
        Win = Y.config.win;

    _yuitest_coverline("build/file-html5/file-html5.js", 20);
var FileHTML5 = function(o) {
        
        _yuitest_coverfunc("build/file-html5/file-html5.js", "FileHTML5", 20);
_yuitest_coverline("build/file-html5/file-html5.js", 22);
var file = null;

        _yuitest_coverline("build/file-html5/file-html5.js", 24);
if (FileHTML5.isValidFile(o)) {
            _yuitest_coverline("build/file-html5/file-html5.js", 25);
file = o;
        }
        else {_yuitest_coverline("build/file-html5/file-html5.js", 27);
if (FileHTML5.isValidFile(o.file)) {
            _yuitest_coverline("build/file-html5/file-html5.js", 28);
file = o.file;
        }
        else {
            _yuitest_coverline("build/file-html5/file-html5.js", 31);
file = false;
        }}

        _yuitest_coverline("build/file-html5/file-html5.js", 34);
FileHTML5.superclass.constructor.apply(this, arguments);      
        
        _yuitest_coverline("build/file-html5/file-html5.js", 36);
if (file && FileHTML5.canUpload()) {
           _yuitest_coverline("build/file-html5/file-html5.js", 37);
if (!this.get("file")) {
               _yuitest_coverline("build/file-html5/file-html5.js", 38);
this._set("file", file);
           }

           _yuitest_coverline("build/file-html5/file-html5.js", 41);
if (!this.get("name")) {
           _yuitest_coverline("build/file-html5/file-html5.js", 42);
this._set("name", file.name || file.fileName);
           }

           _yuitest_coverline("build/file-html5/file-html5.js", 45);
if (this.get("size") != (file.size || file.fileSize)) {
           _yuitest_coverline("build/file-html5/file-html5.js", 46);
this._set("size", file.size || file.fileSize);
           }

           _yuitest_coverline("build/file-html5/file-html5.js", 49);
if (!this.get("type")) {
           _yuitest_coverline("build/file-html5/file-html5.js", 50);
this._set("type", file.type);
           }

           _yuitest_coverline("build/file-html5/file-html5.js", 53);
if (file.hasOwnProperty("lastModifiedDate") && !this.get("dateModified")) {
               _yuitest_coverline("build/file-html5/file-html5.js", 54);
this._set("dateModified", file.lastModifiedDate);
           }
        }
    };


    _yuitest_coverline("build/file-html5/file-html5.js", 60);
Y.extend(FileHTML5, Y.Base, {

       /**
        * Construction logic executed during FileHTML5 instantiation.
        *
        * @method initializer
        * @protected
        */
        initializer : function (cfg) {
            _yuitest_coverfunc("build/file-html5/file-html5.js", "initializer", 68);
_yuitest_coverline("build/file-html5/file-html5.js", 69);
if (!this.get("id")) {
                _yuitest_coverline("build/file-html5/file-html5.js", 70);
this._set("id", Y.guid("file"));
            }
        },

       /**
        * Handler of events dispatched by the XMLHTTPRequest.
        *
        * @method _uploadEventHandler
        * @param {Event} event The event object received from the XMLHTTPRequest.
        * @protected
        */      
        _uploadEventHandler: function (event) {
            _yuitest_coverfunc("build/file-html5/file-html5.js", "_uploadEventHandler", 81);
_yuitest_coverline("build/file-html5/file-html5.js", 82);
var xhr = this.get("xhr");

            _yuitest_coverline("build/file-html5/file-html5.js", 84);
switch (event.type) {
                case "progress":
                  /**
                   * Signals that progress has been made on the upload of this file. 
                   *
                   * @event uploadprogress
                   * @param event {Event} The event object for the `uploadprogress` with the
                   *                      following payload:
                   *  <dl>
                   *      <dt>originEvent</dt>
                   *          <dd>The original event fired by the XMLHttpRequest instance.</dd>
                   *      <dt>bytesLoaded</dt>
                   *          <dd>The number of bytes of the file that has been uploaded.</dd>
                   *      <dt>bytesTotal</dt>
                   *          <dd>The total number of bytes in the file (the file size)</dd>
                   *      <dt>percentLoaded</dt>
                   *          <dd>The fraction of the file that has been uploaded, out of 100.</dd>
                   *  </dl>
                   */
                   _yuitest_coverline("build/file-html5/file-html5.js", 103);
this.fire("uploadprogress", {originEvent: event,
                                               bytesLoaded: event.loaded, 
                                               bytesTotal: this.get("size"), 
                                               percentLoaded: Math.min(100, Math.round(10000*event.loaded/this.get("size"))/100)
                                               });
                   _yuitest_coverline("build/file-html5/file-html5.js", 108);
this._set("bytesUploaded", event.loaded);
                   _yuitest_coverline("build/file-html5/file-html5.js", 109);
break;

                case "load":
                  /**
                   * Signals that this file's upload has completed and data has been received from the server.
                   *
                   * @event uploadcomplete
                   * @param event {Event} The event object for the `uploadcomplete` with the
                   *                      following payload:
                   *  <dl>
                   *      <dt>originEvent</dt>
                   *          <dd>The original event fired by the XMLHttpRequest instance.</dd>
                   *      <dt>data</dt>
                   *          <dd>The data returned by the server.</dd>
                   *  </dl>
                   */

                   _yuitest_coverline("build/file-html5/file-html5.js", 126);
if (xhr.status >= 200 && xhr.status <= 299) {
                        _yuitest_coverline("build/file-html5/file-html5.js", 127);
this.fire("uploadcomplete", {originEvent: event,
                                                     data: event.target.responseText});
                        _yuitest_coverline("build/file-html5/file-html5.js", 129);
var xhrupload = xhr.upload,
                            boundEventHandler = this.get("boundEventHandler");
    
                        _yuitest_coverline("build/file-html5/file-html5.js", 132);
xhrupload.removeEventListener ("progress", boundEventHandler);
                        _yuitest_coverline("build/file-html5/file-html5.js", 133);
xhrupload.removeEventListener ("error", boundEventHandler);
                        _yuitest_coverline("build/file-html5/file-html5.js", 134);
xhrupload.removeEventListener ("abort", boundEventHandler);
                        _yuitest_coverline("build/file-html5/file-html5.js", 135);
xhr.removeEventListener ("load", boundEventHandler); 
                        _yuitest_coverline("build/file-html5/file-html5.js", 136);
xhr.removeEventListener ("error", boundEventHandler);
                        _yuitest_coverline("build/file-html5/file-html5.js", 137);
xhr.removeEventListener ("readystatechange", boundEventHandler);
                        
                        _yuitest_coverline("build/file-html5/file-html5.js", 139);
this._set("xhr", null);
                   }
                   else {
                        _yuitest_coverline("build/file-html5/file-html5.js", 142);
this.fire("uploaderror", {originEvent: event,
                                                  status: xhr.status,
                                                  statusText: xhr.statusText,
                                                  source: "http"});
                   }                   
                   _yuitest_coverline("build/file-html5/file-html5.js", 147);
break;

                case "error":
                  /**
                   * Signals that this file's upload has encountered an error. 
                   *
                   * @event uploaderror
                   * @param event {Event} The event object for the `uploaderror` with the
                   *                      following payload:
                   *  <dl>
                   *      <dt>originEvent</dt>
                   *          <dd>The original event fired by the XMLHttpRequest instance.</dd>
                   *      <dt>status</dt>
                   *          <dd>The status code reported by the XMLHttpRequest. If it's an HTTP error,
                                  then this corresponds to the HTTP status code received by the uploader.</dd>
                   *      <dt>statusText</dt>
                   *          <dd>The text of the error event reported by the XMLHttpRequest instance</dd>
                   *      <dt>source</dt>
                   *          <dd>Either "http" (if it's an HTTP error), or "io" (if it's a network transmission 
                   *              error.)</dd>
                   *
                   *  </dl>
                   */
                   _yuitest_coverline("build/file-html5/file-html5.js", 170);
this.fire("uploaderror", {originEvent: event,
                                                  status: xhr.status,
                                                  statusText: xhr.statusText,
                                                  source: "io"});
                   _yuitest_coverline("build/file-html5/file-html5.js", 174);
break;

                case "abort":

                  /**
                   * Signals that this file's upload has been cancelled. 
                   *
                   * @event uploadcancel
                   * @param event {Event} The event object for the `uploadcancel` with the
                   *                      following payload:
                   *  <dl>
                   *      <dt>originEvent</dt>
                   *          <dd>The original event fired by the XMLHttpRequest instance.</dd>
                   *  </dl>
                   */
                   _yuitest_coverline("build/file-html5/file-html5.js", 189);
this.fire("uploadcancel", {originEvent: event});
                   _yuitest_coverline("build/file-html5/file-html5.js", 190);
break;

                case "readystatechange":

                  /**
                   * Signals that XMLHttpRequest has fired a readystatechange event. 
                   *
                   * @event readystatechange
                   * @param event {Event} The event object for the `readystatechange` with the
                   *                      following payload:
                   *  <dl>
                   *      <dt>readyState</dt>
                   *          <dd>The readyState code reported by the XMLHttpRequest instance.</dd>
                   *      <dt>originEvent</dt>
                   *          <dd>The original event fired by the XMLHttpRequest instance.</dd>
                   *  </dl>
                   */
                   _yuitest_coverline("build/file-html5/file-html5.js", 207);
this.fire("readystatechange", {readyState: event.target.readyState,
                                                  originEvent: event});
                   _yuitest_coverline("build/file-html5/file-html5.js", 209);
break;
            }
        },

       /**
        * Starts the upload of a specific file.
        *
        * @method startUpload
        * @param url {String} The URL to upload the file to.
        * @param parameters {Object} (optional) A set of key-value pairs to send as variables along with the file upload HTTP request.
        * @param fileFieldName {String} (optional) The name of the POST variable that should contain the uploaded file ('Filedata' by default)
        */
        startUpload: function(url, parameters, fileFieldName) {
         
            _yuitest_coverfunc("build/file-html5/file-html5.js", "startUpload", 221);
_yuitest_coverline("build/file-html5/file-html5.js", 223);
this._set("bytesUploaded", 0);
            
            _yuitest_coverline("build/file-html5/file-html5.js", 225);
this._set("xhr", new XMLHttpRequest());
            _yuitest_coverline("build/file-html5/file-html5.js", 226);
this._set("boundEventHandler", Bind(this._uploadEventHandler, this));
                         
            _yuitest_coverline("build/file-html5/file-html5.js", 228);
var uploadData = new FormData(),
                fileField = fileFieldName || "Filedata",
                xhr = this.get("xhr"),
                xhrupload = this.get("xhr").upload,
                boundEventHandler = this.get("boundEventHandler");

            _yuitest_coverline("build/file-html5/file-html5.js", 234);
Y.each(parameters, function (value, key) {_yuitest_coverfunc("build/file-html5/file-html5.js", "(anonymous 2)", 234);
uploadData.append(key, value);});
            _yuitest_coverline("build/file-html5/file-html5.js", 235);
uploadData.append(fileField, this.get("file"));




            _yuitest_coverline("build/file-html5/file-html5.js", 240);
xhr.addEventListener ("loadstart", boundEventHandler, false);
            _yuitest_coverline("build/file-html5/file-html5.js", 241);
xhrupload.addEventListener ("progress", boundEventHandler, false);
            _yuitest_coverline("build/file-html5/file-html5.js", 242);
xhr.addEventListener ("load", boundEventHandler, false);
            _yuitest_coverline("build/file-html5/file-html5.js", 243);
xhr.addEventListener ("error", boundEventHandler, false);
            _yuitest_coverline("build/file-html5/file-html5.js", 244);
xhrupload.addEventListener ("error", boundEventHandler, false);
            _yuitest_coverline("build/file-html5/file-html5.js", 245);
xhrupload.addEventListener ("abort", boundEventHandler, false);
            _yuitest_coverline("build/file-html5/file-html5.js", 246);
xhr.addEventListener ("abort", boundEventHandler, false);
            _yuitest_coverline("build/file-html5/file-html5.js", 247);
xhr.addEventListener ("loadend", boundEventHandler, false); 
            _yuitest_coverline("build/file-html5/file-html5.js", 248);
xhr.addEventListener ("readystatechange", boundEventHandler, false);

            _yuitest_coverline("build/file-html5/file-html5.js", 250);
xhr.open("POST", url, true);

            _yuitest_coverline("build/file-html5/file-html5.js", 252);
xhr.withCredentials = this.get("xhrWithCredentials");

            _yuitest_coverline("build/file-html5/file-html5.js", 254);
Y.each(this.get("xhrHeaders"), function (value, key) {
                 _yuitest_coverfunc("build/file-html5/file-html5.js", "(anonymous 3)", 254);
_yuitest_coverline("build/file-html5/file-html5.js", 255);
xhr.setRequestHeader(key, value);
            });

            _yuitest_coverline("build/file-html5/file-html5.js", 258);
xhr.send(uploadData);
      
            /**
             * Signals that this file's upload has started. 
             *
             * @event uploadstart
             * @param event {Event} The event object for the `uploadstart` with the
             *                      following payload:
             *  <dl>
             *      <dt>xhr</dt>
             *          <dd>The XMLHttpRequest instance handling the file upload.</dd>
             *  </dl>
             */
             _yuitest_coverline("build/file-html5/file-html5.js", 271);
this.fire("uploadstart", {xhr: xhr});

        },

       /**
        * Cancels the upload of a specific file, if currently in progress.
        *
        * @method cancelUpload
        */    
        cancelUpload: function () {
            _yuitest_coverfunc("build/file-html5/file-html5.js", "cancelUpload", 280);
_yuitest_coverline("build/file-html5/file-html5.js", 281);
this.get('xhr').abort();
        }


    }, {

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

       /**
        * The type of transport.
        *
        * @property TYPE
        * @type String
        * @default 'html5'
        * @readOnly
        * @protected
        * @static
        */
        TYPE: 'html5',

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

       /**
        * A String containing the unique id of the file wrapped by the FileFlash instance.
        * The id is supplied by the Flash player uploader.
        *
        * @attribute id
        * @type {String}
        * @initOnly
        */
        id: {
            writeOnce: "initOnly",
            value: null
        },

       /**
        * The size of the file wrapped by FileHTML5. This value is supplied by the instance of File().
        *
        * @attribute size
        * @type {Number}
        * @initOnly
        */
        size: {
            writeOnce: "initOnly",
            value: 0
        },

       /**
        * The name of the file wrapped by FileHTML5. This value is supplied by the instance of File().
        *
        * @attribute name
        * @type {String}
        * @initOnly
        */
        name: {
            writeOnce: "initOnly",
            value: null
        },

       /**
        * The date that the file wrapped by FileHTML5 was created on. This value is supplied by the instance of File().
        *
        * @attribute dateCreated
        * @type {Date}
        * @initOnly
        * @default null
        */
        dateCreated: {
            writeOnce: "initOnly",
            value: null
        },

       /**
        * The date that the file wrapped by FileHTML5 was last modified on. This value is supplied by the instance of File().
        *
        * @attribute dateModified
        * @type {Date}
        * @initOnly
        */
        dateModified: {
            writeOnce: "initOnly",
            value: null
        },

       /**
        * The number of bytes of the file that has been uploaded to the server. This value is
        * non-zero only while a file is being uploaded.
        *
        * @attribute bytesUploaded
        * @type {Date}
        * @readOnly
        */
        bytesUploaded: {
            readOnly: true,
            value: 0
        },

       /**
        * The type of the file wrapped by FileHTML. This value is provided by the instance of File()
        *
        * @attribute type
        * @type {String}
        * @initOnly
        */
        type: {
            writeOnce: "initOnly",
            value: null
        },

       /**
        * The pointer to the instance of File() wrapped by FileHTML5.
        *
        * @attribute file
        * @type {File}
        * @initOnly
        */
        file: {
            writeOnce: "initOnly",
            value: null
        },

       /**
        * The pointer to the instance of XMLHttpRequest used by FileHTML5 to upload the file.
        *
        * @attribute xhr
        * @type {XMLHttpRequest}
        * @initOnly
        */
        xhr: {
            readOnly: true,
            value: null
        },

       /**
        * The dictionary of headers that should be set on the XMLHttpRequest object before
        * sending it.
        *
        * @attribute xhrHeaders
        * @type {Object}
        * @initOnly
        */
        xhrHeaders: {
            value: {}
        },

       /**
        * A Boolean indicating whether the XMLHttpRequest should be sent with user credentials.
        * This does not affect same-site requests. 
        *
        * @attribute xhrWithCredentials
        * @type {Boolean}
        * @initOnly
        */
        xhrWithCredentials: {
            value: true
        },

       /**
        * The bound event handler used to handle events from XMLHttpRequest.
        *
        * @attribute boundEventHandler
        * @type {Function}
        * @initOnly
        */
        boundEventHandler: {
            readOnly: true,
            value: null
        }
        },

       /**
        * Checks whether a specific native file instance is valid
        *
        * @method isValidFile
        * @param file {File} A native File() instance.
        * @static
        */
        isValidFile: function (file) {
            _yuitest_coverfunc("build/file-html5/file-html5.js", "isValidFile", 477);
_yuitest_coverline("build/file-html5/file-html5.js", 478);
return (Win && Win.File && file instanceof File);
        },

       /**
        * Checks whether the browser has a native upload capability
        * via XMLHttpRequest Level 2.
        *
        * @method canUpload
        * @static
        */
        canUpload: function () {
            _yuitest_coverfunc("build/file-html5/file-html5.js", "canUpload", 488);
_yuitest_coverline("build/file-html5/file-html5.js", 489);
return (Win && Win.FormData && Win.XMLHttpRequest);
        }
    });

    _yuitest_coverline("build/file-html5/file-html5.js", 493);
Y.FileHTML5 = FileHTML5;

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