dist/validetta.js
function( el, e ) {
      var ajaxOptions = {},
        data = {},
        fieldName = el.name || el.id;

      if ( typeof this.remoteCache === 'undefined' ) this.remoteCache = {};

      data[ fieldName ] = this.tmp.val; // Set data
      // exends ajax options
      ajaxOptions = $.extend( true, {}, {
        data: data
      }, this.options.validators.remote[ this.tmp.remote ] || {} );

      // use $.param() function for generate specific cache key
      var cacheKey = $.param( ajaxOptions );

      // Check cache
      var cache = this.remoteCache[ cacheKey ];

      if ( typeof cache !== 'undefined' ) {
        switch( cache.state ) {
          case 'pending' : // pending means remote request not finished yet
            this.handler = 'pending'; // update handler and cache event type
            cache.event = e.type;
            break;
          case 'rejected' : // rejected means remote request could not be performed
            e.preventDefault(); // we have to break submit because of throw error
            throw new Error( cache.result.message );
          case 'resolved' : // resolved means remote request has done
            // Check to cache, if result is invalid, open an error window
            if ( cache.result.valid === false ) {
              this.addErrorClass( this.tmp.parent );
              this.window.open.call( this, el, cache.result.message );
            } else {
              this.addValidClass( this.tmp.parent );
            }
        }
      } else {
        // Abort if previous ajax request still running
        var _xhr = this.xhr[ fieldName ];
        if ( typeof _xhr !== 'undefined' && _xhr.state() === 'pending' ) _xhr.abort();
        // Start caching
        cache = this.remoteCache[ cacheKey ] = { state : 'pending', event : e.type };
        // make a remote request
        this.remoteRequest( ajaxOptions, cache, el, fieldName );
      }
    }
function( el, e ) {
      var ajaxOptions = {},
        data = {},
        fieldName = el.name || el.id;

      if ( typeof this.remoteCache === 'undefined' ) this.remoteCache = {};

      data[ fieldName ] = this.tmp.val; // Set data
      // exends ajax options
      ajaxOptions = $.extend( true, {}, {
        data: data
      }, this.options.validators.remote[ this.tmp.remote ] || {} );

      // use $.param() function for generate specific cache key
      var cacheKey = $.param( ajaxOptions );

      // Check cache
      var cache = this.remoteCache[ cacheKey ];

      if ( typeof cache !== 'undefined' ) {
        switch( cache.state ) {
          case 'pending' : // pending means remote request not finished yet
            this.handler = 'pending'; // update handler and cache event type
            cache.event = e.type;
            break;
          case 'rejected' : // rejected means remote request could not be performed
            e.preventDefault(); // we have to break submit because of throw error
            throw new Error( cache.result.message );
          case 'resolved' : // resolved means remote request has done
            // Check to cache, if result is invalid, open an error window
            if ( cache.result.valid === false ) {
              this.addErrorClass( this.tmp.parent );
              this.window.open.call( this, el, cache.result.message );
            } else {
              this.addValidClass( this.tmp.parent );
            }
        }
      } else {
        // Abort if previous ajax request still running
        var _xhr = this.xhr[ fieldName ];
        if ( typeof _xhr !== 'undefined' && _xhr.state() === 'pending' ) _xhr.abort();
        // Start caching
        cache = this.remoteCache[ cacheKey ] = { state : 'pending', event : e.type };
        // make a remote request
        this.remoteRequest( ajaxOptions, cache, el, fieldName );
      }
    }
function ( el , e ) { var ajaxOptions = { } , data = { } , fieldName = el . name || el . id ; if ( typeof this . remoteCache === 'undefined' ) this . remoteCache = { } ; data [ fieldName ] = this . tmp . val ; // Set data
 // exends ajax options
 ajaxOptions = $ . extend ( true , { } , { data : data } , this . options . validators . remote [ this . tmp . remote ] || { } ) ; // use $.param() function for generate specific cache key
 var cacheKey = $ . param ( ajaxOptions ) ; // Check cache
 var cache = this . remoteCache [ cacheKey ] ; if ( typeof cache !== 'undefined' ) { switch ( cache . state ) { case 'pending' : // pending means remote request not finished yet
 this . handler = 'pending' ; // update handler and cache event type
 cache . event = e . type ; break ; case 'rejected' : // rejected means remote request could not be performed
 e . preventDefault ( ) ; // we have to break submit because of throw error
 throw new Error ( cache . result . message ) ; case 'resolved' : // resolved means remote request has done
 // Check to cache, if result is invalid, open an error window
 if ( cache . result . valid === false ) { this . addErrorClass ( this . tmp . parent ) ; this . window . open . call ( this , el , cache . result . message ) ; } else { this . addValidClass ( this . tmp . parent ) ; } } } else { // Abort if previous ajax request still running
 var _xhr = this . xhr [ fieldName ] ; if ( typeof _xhr !== 'undefined' && _xhr . state ( ) === 'pending' ) _xhr . abort ( ) ; // Start caching
 cache = this . remoteCache [ cacheKey ] = { state : 'pending' , event : e . type } ; // make a remote request
 this . remoteRequest ( ajaxOptions , cache , el , fieldName ) ; } }
Checks remote validations

@param  {object} el current field
@param  {object} e event object
@throws {error} If previous remote request for same value has rejected
@return {void}
Checks remote validations