text: /*global ajaxurl, wc_product_export_params */
  ;(function ( $, window ) {
  	/**
  	 * productExportForm handles the export process.
  	 */
  	var productExportForm = function( $form ) {
  		this.$form = $form;
  		this.xhr   = false;
  
  		// Initial state.
  		this.$form.find('.woocommerce-exporter-progress').val( 0 );
  
  		// Methods.
  		this.processStep = this.processStep.bind( this );
  
  		// Events.
  		$form.on( 'submit', { productExportForm: this }, this.onSubmit );
  	};
  
  	/**
  	 * Handle export form submission.
  	 */
  	productExportForm.prototype.onSubmit = function( event ) {
  		event.preventDefault();
  
  		var currentDate    = new Date(),
  			day            = currentDate.getDate(),
  			month          = currentDate.getMonth() + 1,
  			year           = currentDate.getFullYear(),
  			timestamp      = currentDate.getTime(),
  			filename       = 'wc-product-export-' + day + '-' + month + '-' + year + '-' + timestamp + '.csv';
  
  		event.data.productExportForm.$form.addClass( 'woocommerce-exporter__exporting' );
  		event.data.productExportForm.$form.find('.woocommerce-exporter-progress').val( 0 );
  		event.data.productExportForm.$form.find('.woocommerce-exporter-button').prop( 'disabled', true );
  		event.data.productExportForm.processStep( 1, $( this ).serialize(), '', filename );
  	};
  
  	/**
  	 * Process the current export step.
  	 */
  	productExportForm.prototype.processStep = function( step, data, columns, filename ) {
  		var $this         = this,
  			selected_columns = $( '.woocommerce-exporter-columns' ).val(),
  			export_meta      = $( '#woocommerce-exporter-meta:checked' ).length ? 1: 0,
  			export_types     = $( '.woocommerce-exporter-types' ).val();
  
  		$.ajax( {
  			type: 'POST',
  			url: ajaxurl,
  			data: {
  				form             : data,
  				action           : 'woocommerce_do_ajax_product_export',
  				step             : step,
  				columns          : columns,
  				selected_columns : selected_columns,
  				export_meta      : export_meta,
  				export_types     : export_types,
  				filename         : filename,
  				security         : wc_product_export_params.export_nonce
  			},
  			dataType: 'json',
  			success: function( response ) {
  				if ( response.success ) {
  					if ( 'done' === response.data.step ) {
  						$this.$form.find('.woocommerce-exporter-progress').val( response.data.percentage );
  						window.location = response.data.url;
  						setTimeout( function() {
  							$this.$form.removeClass( 'woocommerce-exporter__exporting' );
  							$this.$form.find('.woocommerce-exporter-button').prop( 'disabled', false );
  						}, 2000 );
  					} else {
  						$this.$form.find('.woocommerce-exporter-progress').val( response.data.percentage );
  						$this.processStep( parseInt( response.data.step, 10 ), data, response.data.columns, filename );
  					}
  				}
  
  
  			}
  		} ).fail( function( response ) {
  			window.console.log( response );
  		} );
  	};
  
  	/**
  	 * Function to call productExportForm on jquery selector.
  	 */
  	$.fn.wc_product_export_form = function() {
  		new productExportForm( this );
  		return this;
  	};
  
  	$( '.woocommerce-exporter' ).wc_product_export_form();
  
  })( jQuery, window );
  