     div {className:k}, [
       (div {className:"attr"}, [
         (React.createElement Member, iden)
-        (div {
-          id:"audi"
-          className:"audi valid-#{@state.valid}"
-          contentEditable:true
-          onKeyDown: @_audiKeyDown
-          onBlur:@_setAudi
-          }, audi.join(" "))
+        (React.createElement Audience, {audi,valid:@state.valid, onBlur:@_setAudi})
         (div {className:"time"}, @getTime())        
       ])
       (div {
           id:"writing"
           contentEditable:true
-          onFocus: @_focus
-          onBlur: @_blur
-          onInput: @_input
-          onPaste: @_input
-          onKeyDown: @_writingKeyDown
-          onKeyUp: @_writingKeyUp
-          onFocus: @cursorAtEnd
+          onPaste: @onInput
+          @onInput, @onFocus, @onBlur, @onKeyDown, @onKeyUp
         }, "")
-      div {id:"length"}, "0/62"
+       (div {id:"length",className:("valid-false" if @state.lengthy)}, "#{@state.length}/62")
       ]

    s.ludi = _.without s.ludi, window.util.mainStationPath window.urb.user
    s

  getInitialState: -> @stateFromStore()

  typing: (state) ->
    if @state.typing[@state.station] isnt state
      StationActions.setTyping @state.station,state

  _blur: -> 
    @$writing.text @$writing.text()
    MessageActions.setTyping false
    @typing false

  _focus: -> 
    MessageActions.setTyping true
    @typing true

  addCC: (audi) ->
    listening = @state.config[window.util.mainStation(window.urb.user)].sources

           window.urb.util.isURL @$writing.text() )
        @sendMessage()
      return false
    @onInput()
    @set()

  onInput: (e) ->
    text   = @$writing.text()
    length = text.length
    # geturl = new RegExp [
