text: jQuery( function ( $ ) {
  	'use strict';
  
  	var rules = {
  		invalidHandler: function () {
  			// Re-enable the submit ( publish/update ) button and hide the ajax indicator
  			$( '#publish' ).removeClass( 'button-primary-disabled' );
  			$( '#ajax-loading' ).attr( 'style', '' );
  			$form.siblings( '#message' ).remove();
  			$form.before( '<div id="message" class="notice notice-error is-dismissible"><p>' + rwmbValidate.summaryMessage + '</p></div>' );
  
  			// Custom event for showing error fields inside tabs/hidden divs. Use setTimeout() to run after error class is added to inputs.
  			setTimeout( function() {
  				$form.trigger( 'after_validate' );
  			}, 200 );
  		},
  		ignore: ':not([class|="rwmb"])',
  		errorPlacement: function( error, element ) {
  			error.appendTo( element.closest( '.rwmb-input' ) );
  		},
  		errorClass: 'rwmb-error',
  		errorElement: 'p'
  	};
  
  	// Edit post form.
  	var $form = $( '#post, .rwmb-form' );
  
  	// Edit user form.
  	if ( ! $form.length ) {
  		$form = $( '#your-profile' );
  	}
  
  	// Edit term form.
  	if ( ! $form.length ) {
  		$form = $( '#edittag' );
  	}
  
  	// Gather all validation rules.
  	$( '.rwmb-validation-rules' ).each( function () {
  		var subRules = $( this ).data( 'rules' );
  		$.extend( true, rules, subRules );
  
  		// Required field styling.
  		$.each( subRules.rules, function ( k, v ) {
  			if ( ! v['required'] ) {
  				return;
  			}
  			var $el = $( '[name="' + k + '"]' );
  			if ( ! $el.length ) {
  				return;
  			}
  			$el.closest( '.rwmb-input' ).siblings( '.rwmb-label' ).find( 'label' ).append( '<span class="rwmb-required">*</span>' );
  		} );
  	} );
  
  	// Execute.
  	$form.on( 'submit', function() {
  		// Update underlying textarea before submit validation.
  		if ( typeof tinyMCE !== 'undefined' ) {
  			tinyMCE.triggerSave();
  		}
  	} ).validate( rules );
  } );
  