root = this

window.addEvent 'domready', ->
  root.accountDialog = new MooDialog {destroyOnHide: false}
  root.accountDialog.setContent $ 'account_box'

  new TinyTab $$('#toptabs li a'), $$('#tabs-body > span')

  $$('ul.nav').each (nav) ->
    new MooDropMenu nav, {
      onOpen: (el) -> el.fade 'in'
      onClose: (el) -> el.fade 'out'
      onInitialize: (el) -> el.fade('hide').set 'tween', {duration:500}
    }

  new SettingsUI()


class SettingsUI
  constructor: ->
    @menu = $$ "#general-menu li"
    @menu.append $$ "#plugin-menu li"

    @name = $ "tabsback"
    @general = $ "general_form_content"
    @plugin = $ "plugin_form_content"

    el.addEvent 'click', @menuClick.bind(this) for el in @menu

    $("general|submit").addEvent "click", @configSubmit.bind(this)
    $("plugin|submit").addEvent "click", @configSubmit.bind(this)

    $("account_add").addEvent "click", (e) ->
      root.accountDialog.open()
      e.stop()

    $("account_reset").addEvent "click", (e) ->
      root.accountDialog.close()

    $("account_add_button").addEvent "click", @addAccount.bind(this)
    $("account_submit").addEvent "click", @submitAccounts.bind(this)


  menuClick: (e) ->
    [category, section] = e.target.get("id").split("|")
    name = e.target.get "text"


    target = if category is "general" then @general else @plugin
    target.dissolve()

    new Request({
      "method" : "get"
      "url" : "/json/load_config/#{category}/#{section}"
      'onSuccess': (data) =>
        target.set "html", data
        target.reveal()
        this.name.set "text", name
    }).send()


  configSubmit: (e) ->
    category = e.target.get("id").split("|")[0]
    form = $("#{category}_form")

    form.set "send", {
      'method': "post"
      'url': "/json/save_config/#{category}"
      "onSuccess" : ->
        root.notify.alert '{{ _("Settings saved.")}}', {
              'className': 'success'
            }
      'onFailure': ->
        root.notify.alert '{{ _("Error occured.")}}', {
              'className': 'error'
            }
    }
    form.send()
    e.stop()

  addAccount: (e) ->
    form = $ "add_account_form"
    form.set "send", {
      'method': "post"
      "onSuccess" : -> window.location.reload()
      'onFailure': ->
        root.notify.alert '{{_("Error occured.")}}', {
          'className': 'error'
          }
      }

    form.send()
    e.stop()

  submitAccounts: (e) ->
    form = $ "account_form"
    form.set "send", {
       'method': "post",
       "onSuccess" : -> window.location.reload()
       'onFailure': ->
         root.notify.alert('{{ _("Error occured.") }}', {
               'className': 'error'
             })
       }

    form.send()
    e.stop()