docs: function( e ) {
        var self = this, // stored this
            invalidFields = [];
        // Make invalidFields accessible
        this.getInvalidFields = function(){
          return invalidFields;
        }
        for ( var i = 0, _lengthFields = FIELDS.length; i < _lengthFields; i++ ) {
          // if field is disabled, do not check
          if ( FIELDS[ i ].disabled ) continue;
          var el = FIELDS[ i ], //current field
            errors = '', //current field's errors
            val = trim ( $( el ).val() ), //current field's value
            methods = el.getAttribute('data-validetta').split(','), //current field's control methods
            state; // Validation state
          // Create tmp
          this.tmp = {};
          // store el and val variables in tmp
          this.tmp = { el : el, val : val, parent : this.parents( el ) };
          // Start to check fields
          // Validator : Fields Control Object
          for ( var j = 0, _lengthMethods = methods.length; j < _lengthMethods; j++ ) {
            // Check Rule
            var rule = methods[ j ].match( RRULE ),
              method;
            // Does it have rule?
            if( rule !== null ) {
              // Does it have any argument ?
              if( typeof rule[2] !== 'undefined' ) this.tmp.arg = rule[2];
              // Set method name
              method = rule[1];
            } else { method = methods[ j ]; }
            // prevent empty validation if method is not required
            if ( val === '' && method !== 'required' && method !== 'equalTo' ) continue;
            // Is there a methot in Validator ?
            if( Validator.hasOwnProperty( method ) ) {
              // Validator returns error message if method invalid
              state = Validator[ method ]( self.tmp, self );
              if ( typeof state !== 'undefined' && state !== true ) {
                var _dataMsg = el.getAttribute( 'data-vd-message-' + method );
                if ( _dataMsg !== null ) state = _dataMsg;
                errors += state +'<br/>';
              }
            }
          }
          // Check the errors
          if( errors !== '' ) {
            invalidFields.push({
              field: el,
              errors: errors
            });
            // if parent element has valid class, remove and add error class
            this.addErrorClass( this.tmp.parent );
            // open error window
            this.window.open.call( this , el, errors );
          // Check remote validation
          } else if ( typeof this.tmp.remote !== 'undefined' ) {
            this.checkRemote( el, e );
          } else { // Nice, there are no error
            if( typeof state !== 'undefined' ) this.addValidClass( this.tmp.parent );
            else $( this.tmp.parent ).removeClass( this.options.errorClass +' '+ this.options.validClass );
            state = undefined; // Reset state variable
          }
        }
      }