             else
                 requiredFieldId = _requiredWith
 
-            _evaluate = (value, requiredFieldId, fieldValue) ->
-                # if criteria is met then required field must be filled out
-                fieldId = _that.attr 'id'
-                requiredField = $ "##{requiredFieldId}"
-                requiredFieldValue = $.trim requiredField.val()
-
-                _checkValue = ->
-                    if not requiredFieldValue
-                        validate.status = 'danger'
-                        validate.message = "#{requiredFieldId} is required with #{fieldId}"
-                    else
-                        validate.message = null
-                        validate.status = 'success'
-                    validate
-
-                if not value
-                    console.log 'do nothing'
-                else if fieldValue? and (value is fieldValue)
-                    _checkValue()
-                else if value.length > 0 and (not fieldValue?)
-                    _checkValue()
-                
-                validate
-
-            _evaluate value, requiredFieldId, fieldValue
         else if _requireWith
-            validate =
-                status: null
-                message: null
-                issuer: 'requireWith'
 
             if _requireWith.search(':') isnt -1
                 _requireWith = _requireWith.split ':'


        body.on 'click', ':disabled', (e) -> e.preventDefault()

        body.on 'keyup', ':input.drm-valid-integer', ->
            value = self.getValue.call @
            validate = self.validateInteger value, patterns.integer
            if validate?
                validateField.call @, value, validate

        body.on 'keyup', ':input.drm-valid-number', ->
            value = self.getValue.call @
            validate = self.validateNumber value, patterns.number
            if validate?
                validateField.call @, value, validate

        body.on 'keyup', ':input.drm-valid-url', ->
            value = self.getValue.call @
            validate = self.validateURL value, patterns.url
            if validate?
                validateField.call @, value, validate

        body.on 'keyup', ':input.drm-valid-phone', ->
            value = self.getValue.call @
            validate = self.validatePhone value, patterns.phone
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-email', ->
            value = self.getValue.call @
            validate = self.validateEmail value, patterns.email
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-full-name', ->
            value = self.getValue.call @
            validate = self.validateFullName value, patterns.fullName
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-alpha', ->
            value = self.getValue.call @
            validate = self.validateAlpha value, patterns.alpha
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-alphanum', ->
            value = self.getValue.call @
            validate = self.validateAlphaNum value, patterns.alphaNum
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-alphadash', ->
            value = self.getValue.call @
            validate = self.validateAlphaNumDash value, patterns.alphaNumDash
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-alpha-num-underscore', ->
            value = self.getValue.call @
            validate = self.validateAlphaNumUnderscore value, patterns.alphaNumUnderscore
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-no-spaces', ->
            value = self.getValue.call @
            validate = self.validateNoSpaces value, patterns.noSpaces
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-no-tags', ->
            value = self.getValue.call @
            validate = self.validateNoTags value, patterns.noTags
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-credit-card', ->
            value = self.getValue.call @
            validate = self.validateCreditCard value, patterns.creditCard
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-cvv', ->
            value = self.getValue.call @
            validate = self.validateCvv value, patterns.cvv
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-zip', ->
            value = self.getValue.call @
            validate = self.validateZip value, patterns.zip
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-month-day-year', ->
            value = self.getValue.call @
            validate = self.validateMonthDayYear value, patterns.monthDayYear
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input.drm-valid-time', ->
            value = self.getValue.call @
            validate = self.validateTime value, patterns.time
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input[data-max-value]:not([data-min-value])', ->
            value = self.getValue.call @
            validate = self.validateMaxValue.call @, value
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input[data-min-value]:not([data-max-value])', ->
            value = self.getValue.call @
            validate = self.validateMinValue.call @, value
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input[data-max-length]:not([data-min-length])', ->
            value = self.getValue.call @
            validate = self.validateMaxLength.call @, value
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input[data-min-length]:not([data-max-length])', ->
            value = self.getValue.call @
            validate = self.validateMinLength.call @, value
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input[data-min-value][data-max-value]', ->
            value = self.getValue.call @
            validate = self.validateBetweenValue.call @, value
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input[data-min-length][data-max-length]', ->
            value = self.getValue.call @
            validate = self.validateBetweenLength.call @, value
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input[data-equal]', ->
            value = self.getValue.call @
            validate = self.validateEqual.call @, value
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input[data-not-equal]', ->
            value = self.getValue.call @
            validate = self.validateNotEqual.call @, value
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input[data-in-list]', ->
            value = self.getValue.call @
            validate = self.validateInList.call @, value
            if validate?
                validateField.call @, value, validate
        
        body.on 'keyup', ':input[data-not-list]', ->
            value = self.getValue.call @
            validate = self.validateNotList.call @, value
            if validate?
                validateField.call @, value, validate

        body.on 'keyup', ":input[type='text'], :input[type='url'], :input[type='email'], :input[type='password'], :input[type='tel'], textarea", ->
            value = self.getValue.call @
            validate = self.trackLength.call @, value
            if validate.message?

            else
                requireFieldId = _requireWith

        _evaluate = (value, requiredFieldId, fieldValue) ->
            # if criteria is met then required field must be filled out
            fieldId = _that.attr 'id'
            requiredField = $ "##{requiredFieldId}"
            requiredFieldValue = $.trim requiredField.val()

            _checkValue = ->
                if not requiredFieldValue
                    validate.status = 'danger'
                    validate.message = "#{requiredFieldId} is required with #{fieldId}"
                else
                    validate.message = null
                    validate.status = 'success'
                validate

            if not value
                console.log 'do nothing'
            else if fieldValue? and (value is fieldValue)
                _checkValue()
            else if value.length > 0 and (not fieldValue?)
                _checkValue()
            
            validate

        _evaluate value, requiredFieldId, fieldValue

            # _evaluate = (value, requireFieldId, fieldValue) ->
            #     # if criteria is met then required field must be filled out
            #     fieldId = _that.attr 'id'
            #     requireField = $ "##{requireFieldId}"
            #     requireFieldValue = $.trim requireField.val()

            #     _checkValue = ->
            #         if not value
            #             validate.status = 'danger'
            #             validate.message = "#{fieldId} is required with #{requireFieldId}"
            #         else
            #             validate.message = null
            #             validate.status = 'success'
            #         validate

            #     if not requireFieldValue
            #         console.log 'do nothing'
            #     else if fieldValue? and (requireFieldValue is fieldValue)
            #         _checkValue()
            #     else if requireFieldValue.length > 0 and (not fieldValue?)
            #         _checkValue()
                
            #     validate

            # _evaluate value, requireFieldId, fieldValue
            
    validateAllowedWith: (value) ->
        _that = $ @
        _allowedWith = _that.data 'allowed-with'
