Banner =
  init: ->
    $.asap (-> d.body), ->
      $.asap (-> $ 'hr'), Banner.ready

  ready: ->
    banner = $ ".boardBanner"
    {children} = banner

    i = 0
    while child = children[i++]
      if i is 1
        child.title = "Click to change"
        $.on child, 'click', Banner.cb.toggle

        continue

      if Conf['Custom Board Titles']
        Banner.custom(child).title = "Ctrl+click to edit board #{if i is 3
          'sub'
        else
          ''}title"
        child.spellcheck = false

    return

  cb:
    toggle: do ->
      types =
        jpg: 227
        png: 270
        gif: 253

      ->
        type = Object.keys(types)[Math.floor 3 * Math.random()]
        num = Math.floor types[type] * Math.random()
        $('img', @parentNode).src = "//s.4cdn.org/image/title/#{num}.#{type}"
      
    click: (e) ->
      if e.ctrlKey
        @contentEditable = true
        @focus()

    keydown: (e) ->
      e.stopPropagation()
      return @blur() if !e.shiftKey and e.keyCode is 13

    focus: ->
      @textContent = @innerHTML

      string = "#{g.BOARD}.#{@className}"
      string2 = "#{string}.orig"

      items = {title: @innerHTML}
      items[string] = ''
      items[string2] = false

      $.get items, (items) ->
        unless items[string2] and items.title is items[string]
          $.set string2, items.title

      return

    blur: ->
      @innerHTML = @textContent
      @contentEditable = false
      $.set "#{g.BOARD}.#{@className}", @textContent

  custom: (child) ->
    cachedTest = child.innerHTML
    string = "#{g.BOARD}.#{child.className}"

    $.on child, 'click keydown focus blur', (e) -> Banner.cb[e.type].apply @, [e]

    $.get string, cachedTest, (item) ->
      return unless title = item[string]
      return child.innerHTML = title if Conf['Persistent Custom Board Titles']

      string2 = "#{string}.orig"

      $.get string2, cachedTest, (itemb) ->
       if cachedTest is itemb[string2]
          child.innerHTML = title
        else
          $.set string, cachedTest
          $.set string2, cachedTest

    child
