jQuery ->

$selected = []
$busy = []

refreshBusy = () ->
  dataRows = oTable._('tr')
  busy_ids = []
  dataRows.forEach (obj, index, array) ->
    if obj.busy
      busy_ids.push obj.id
  setBusy(busy_ids)

setBusy = (ids) ->
  ids.forEach (val, index, array) ->
   oTable.$("tr[id='#{val}']").addClass('busy')
   position = $busy.indexOf(val)
   unless ~position
     $busy.push val

ajaxSetBusy = (XMLHttpRequest, textStatus) ->
  console.log "Ajax Response"
  console.log XMLHttpRequest
  console.log textStatus
  setBusy(XMLHttpRequest) if textStatus is "success"
  return

ajaxRemoveSelected = (XMLHttpRequest, textStatus) ->
  console.log "Ajax Response"
  console.log XMLHttpRequest
  console.log textStatus
  refreshTable()

  return

ajaxSelectButtonInit = (nButton, oConfig) ->
  $(nButton).addClass "DTTT_disabled"
  $(nButton).addClass "disabled"
  return

selectAjaxSelectButton = (nButton, oConfig) ->
  if @fnGetSelected().length isnt 0
    $(nButton).removeClass "DTTT_disabled"
    $(nButton).removeClass "disabled"
  else
    $(nButton).addClass "DTTT_disabled"
    $(nButton).addClass "disabled"
  return

$(".container.inbox-email").on 'click', '#reload_mail', (evt) ->
  #$('#email_table').dataTable().fnReloadAjax();
  $.getJSON $("#reload_mail").data('url'), (data_a) ->
    $that = $(this)
    setTimeout (->
      $that.blur()
      return
    ), 400
    refreshTable()
  return

$(".container.inbox-email").on 'click', '#reset_mail', (evt) ->
  #$('#email_table').dataTable().fnReloadAjax();
  $.getJSON $("#reset_mail").data('url'), (data_a) ->
    $that = $(this)
    setTimeout (->
      $that.blur()
      return
    ), 400
    refreshTable()
  return

$(".container.inbox-email").on 'click', '#process_inbox', (evt) ->
  #$('#email_table').dataTable().fnReloadAjax();
  $.getJSON $("#process_inbox").data('url'), (data_a) ->
    $that = $(this)
    setTimeout (->
      $that.blur()
      return
    ), 400
    refreshTable()
  return

oTable = $("#email_table").dataTable
  sPaginationType: "bootstrap"
  bProcessing: true
  bFilter: true
  iDisplayLength: 25
  sAjaxSource: $('#email_table').data('url-headers')
  fnInitComplete: (oSettings, json) ->
    refreshBusy()
  aaSorting: [[ 3, "desc" ]]
  sDom: "<'row-fluid'<'span6'T><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>"
  oTableTools:
    sRowSelect: "multi",
    fnRowSelected: (nodes) ->
      position = $selected.indexOf(nodes[0].id)
      unless ~position
        $selected.push nodes[0].id
      return
    fnRowDeselected: (nodes) ->
      position = $selected.indexOf(nodes[0].id)
      if ~position
        $selected.splice(position, 1)
      return
    fnPreRowSelect: (e,nodes) ->
      position = $busy.indexOf(nodes[0].id)
      unless ~position
        return true
      return false

    aButtons: [
      "select_all",
      "select_none",
      {
        sExtends: "ajax"
        sButtonText: "Delete"
        fnSelect: selectAjaxSelectButton
        fnInit: ajaxSelectButtonInit
        fnAjaxComplete: ajaxRemoveSelected
        sAjaxUrl: $('#email_table').data('url-delete')
        mColumns: [0]
        bHeader: false
        sNewLine      : ","
        bSelectedOnly: true
      },
      {
        sExtends: "ajax"
        sButtonText: "Archive"
        fnSelect: selectAjaxSelectButton
        fnInit: ajaxSelectButtonInit
        fnAjaxComplete: ajaxRemoveSelected
        sAjaxUrl: $('#email_table').data('url-archive')
        bHeader: false
        mColumns: [0]
        bHeader: false
        sNewLine      : ","
        bSelectedOnly: true
      },
      {
        sExtends: "ajax"
        sButtonText: "Process"
        fnSelect: selectAjaxSelectButton
        fnInit: ajaxSelectButtonInit
        fnAjaxComplete: ajaxSetBusy
        sAjaxUrl: $('#email_table').data('url-process')
        mColumns: [0]
        bHeader: false
        sNewLine      : ","
        bSelectedOnly: true
      }
    ]

  aoColumns: [
    { "sTitle": "Id", "mData": "id", "bVisible": false, "bSearchable": false },#
    { "sTitle": "Busy", "mData": "busy", "bVisible": false, "bSearchable": false },
    { "sTitle": "Date", "mData": "date" },
    { "sTitle": "Subject", "mData": "subject" },
    { "sTitle": "Sender", "mData": "sender_email" },
    { "sTitle": "File", "mData": "attachment_name" },
    { "sTitle": "Size", "mData": "attachment_size" }]

oTT = TableTools.fnGetInstance( 'email_table' );

refreshSelectedRow = (element, index, array) ->
  oTT.fnSelect( $("tr[id='#{element}']")[0] );
  console.log $selected
  console.log "Reselecting " + element

  return
refreshSelectedRows = () ->

  $selected.forEach refreshSelectedRow
  refreshBusy()

refreshTable = ->
  $('#email_table').dataTable().fnReloadAjax(null,refreshSelectedRows,null)

$intervalID = setInterval( refreshTable, 30000);