text: /* globals plupload, pluploadL10n, error */
  window.wp = window.wp || {};
  
  ( function ( wp ) {
  	var VideoPress = {
  		originalOptions: {},
  
  		/**
  		 * This is the standard uploader response handler.
  		 */
  		handleStandardResponse: function ( response, file ) {
  			if ( ! _.isObject( response ) || _.isUndefined( response.success ) ) {
  				return error( pluploadL10n.default_error, null, file );
  			} else if ( ! response.success ) {
  				return error( response.data && response.data.message, response.data, file );
  			}
  
  			return response;
  		},
  
  		/**
  		 * Handle response from the WPCOM Rest API.
  		 */
  		handleRestApiResponse: function ( response, file ) {
  			if ( response.media.length !== 1 ) {
  				return error( pluploadL10n.default_error, null, file );
  			}
  
  			var media = response.media[ 0 ],
  				mimeParts = media.mime_type.split( '/' ),
  				data = {
  					alt: '',
  					author: media.author_ID || 0,
  					authorName: '',
  					caption: '',
  					compat: { item: '', meta: '' },
  					date: media.date || '',
  					dateFormatted: media.date || '',
  					description: media.description || '',
  					editLink: '',
  					filename: media.file || '',
  					filesizeHumanReadable: '',
  					filesizeInBytes: '',
  					height: media.height,
  					icon: media.icon || '',
  					id: media.ID || '',
  					link: media.URL || '',
  					menuOrder: 0,
  					meta: false,
  					mime: media.mime_type || '',
  					modified: 0,
  					name: '',
  					nonces: { update: '', delete: '', edit: '' },
  					orientation: '',
  					sizes: undefined,
  					status: '',
  					subtype: mimeParts[ 1 ] || '',
  					title: media.title || '',
  					type: mimeParts[ 0 ] || '',
  					uploadedTo: 1,
  					uploadedToLink: '',
  					uploadedToTitle: '',
  					url: media.URL || '',
  					width: media.width,
  					success: '',
  					videopress: {
  						guid: media.videopress_guid || null,
  						processing_done: media.videopress_processing_done || false,
  					},
  				};
  
  			response.data = data;
  
  			return response;
  		},
  
  		/**
  		 * Make sure that all of the original variables have been reset, so the uploader
  		 * doesn't try to go to VideoPress again next time.
  		 *
  		 * @param up
  		 */
  		resetToOriginalOptions: function ( up ) {
  			if ( typeof VideoPress.originalOptions.url !== 'undefined' ) {
  				up.setOption( 'url', VideoPress.originalOptions.url );
  				delete VideoPress.originalOptions.url;
  			}
  
  			if ( typeof VideoPress.originalOptions.multipart_params !== 'undefined' ) {
  				up.setOption( 'multipart_params', VideoPress.originalOptions.multipart_params );
  				delete VideoPress.originalOptions.multipart_params;
  			}
  
  			if ( typeof VideoPress.originalOptions.file_data_name !== 'undefined' ) {
  				up.setOption( 'file_data_name', VideoPress.originalOptions.file_data_name );
  				delete VideoPress.originalOptions.file_data_name;
  			}
  		},
  	};
  
  	if ( typeof wp.Uploader !== 'undefined' ) {
  		var media = wp.media;
  
  		/**
  		 * A plupload code specifically for videopress failures.
  		 *
  		 * @type {string}
  		 */
  		plupload.VIDEOPRESS_TOKEN_FAILURE = 'VP_TOKEN_FAILURE';
  
  		/**
  		 * Adds a filter that checks all files to see if they are videopress files and if they are
  		 * it will download extra metadata for them.
  		 */
  		plupload.addFileFilter( 'videopress_check_uploads', function ( maxSize, file, cb ) {
  			var mimeParts = file.type.split( '/' );
  			var self = this;
  
  			if ( mimeParts[ 0 ] === 'video' ) {
  				media
  					.ajax( 'videopress-get-upload-token', { async: false, data: { filename: file.name } } )
  					.done( function ( response ) {
  						file.videopress = response;
  						cb( true );
  					} )
  					.fail( function ( response ) {
  						self.trigger( 'Error', {
  							code: plupload.VIDEOPRESS_TOKEN_FAILURE,
  							message: plupload.translate(
  								'Could not get the VideoPress token needed for uploading'
  							),
  							file: file,
  							response: response,
  						} );
  						cb( false );
  					} );
  			} else {
  				// Handles the normal max_file_size functionality.
  				var undef;
  
  				// Invalid file size
  				if ( file.size !== undef && maxSize && file.size > maxSize ) {
  					this.trigger( 'Error', {
  						code: plupload.FILE_SIZE_ERROR,
  						message: plupload.translate( 'File size error.' ),
  						file: file,
  					} );
  					cb( false );
  				} else {
  					cb( true );
  				}
  			}
  		} );
  	}
  
  	wp.VideoPress = VideoPress;
  } )( window.wp );
  