                 if validate?
                     validateField.call @, value, validate
 
-            body.on 'keyup', ':input', self.trackLength
+            body.on 'keyup', ':input', ->
+                value = self.getValue.call @
+                validate = self.trackLength.call @, value
+                if validate.message?
+                    self.issueNotice.call @, validate, self.speed
+                else
+                    self.removeNotice.call @, validate.issuer, self.speed
 
             # validate empty fields
             

            else
                null

        issueNotice: (status, message, issuer, speed) ->
            that = $ @
            notices = $ "p.form-notice"
            notice = $ "p.form-#{status}-notice:contains(#{message})"
            noticesLength = notices.length
            console.log noticesLength
            
            if notice.length is 0
                notice = $ '<p></p>',
                    text: message,
                    class: "form-#{status}-notice form-notice"
                    'data-issuer': issuer
                
                notice.hide().insertAfter(that).slideDown speed

                # if that.css('float') isnt 'none'

                    # notice.css styles

        positionNotice: (notice) ->
            that.parent().css 'position', 'relative'
            elemLeft = parseInt that.position().left, 10
            elemTop = parseInt that.position().top, 10
            elemHeight = parseInt that.css('height'), 10

            if noticesLength is 0
                that.css 'margin-bottom': '40px'
                return styles =
                    'position': 'absolute'
                    'left': elemLeft + 'px'
                    'top': elemTop + elemHeight + 10 + 'px'
            else
                that.css 'margin-bottom': 40 + (15 * noticesLength) + 'px'
                lastNotice = notices.last()
                noticeTop = parseInt lastNotice.position().top, 10
                noticeHeight = parseInt lastNotice.css('height'), 10
                return styles =
                    'position': 'absolute'
                    'left': elemLeft + 'px'
                    'top': noticeTop + noticeHeight + 10 + 'px'

        removeNotice: (issuer, speed) ->
            notice = $ "p[data-issuer='#{issuer}']"

            if notice.length isnt 0
                notice.slideUp speed, ->

                if validate?
                    validateField.call @, value, validate

        trackLength: (value) ->
            that = $ @
            validate =
                status: 'length'
                message: null
                issuer: 'length-notice'
            if value?
                length = value.length
                validate.message = if length is 1 then "#{length} character" else "#{length} characters"
            validate

        getValue: ->
            value = $.trim $(@).val()
