# List of colour literals COLOURS = 'white red yellow green cyan blue magenta'.split ' '

# Populates the list of bank accounts in the sidebar window.populate_accounts = (id) ->

$el = $(id)
for account in accounts
  a = $('<a role="button" class="btn btn-default active" />')
  a.text account.name
  a.append '<br/>'
  a.append $('<span class="small">').text(account.number)
  a.data id: account.id
  $el.append a

# AJAX layer post = (page, data) -> $.ajax

url: "q/#{page}"
method: 'post'
contentType: 'application/json; charset=UTF-8'
dataType: page.match(/[^.]+$/)[0]
data: JSON.stringify data

# Method to query the database querying = false query_again = false query = ->

# Handle interrupts
if querying
  query_again = true
  return
querying = true
query_again = false

# Clear content
$('#content').html 'One moment...'

# Submit data
req = post 'search.html',
  order: $('#order').val()
  date_start: $('#date-start').val()
  date_end: $('#date-end').val()
  search: $('#text').val()
  type: $('#type .active').data 'type'
  accounts: $('#account-buttons .active').map(-> $(@).data 'id').toArray()
  colours: $('#colour .active').map(-> @className.match(/colour-(\w+)/)[1]).toArray()

# On success
req.done (result) -> $('#content').html result

# On fail
req.fail -> alert 'Query failed'

# Clean up
req.always ->
  querying = false
  query() if query_again

# Pad querying out a bit query = _.debounce(query, 300)

# Method to change a transaction's colour setColour = (transactionId, colour) -> post 'colour.json',

id: transactionId
colour: colour

$ ->

# Set the date range to last financial year
months = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split ' '
range = end: new Date
range.end.setDate 1
range.end.setMonth range.end.getMonth() - 1 until range.end.getMonth() is 6
range.start = new Date(range.end)
range.start.setFullYear range.start.getFullYear() - 1
range.end.setDate range.end.getDate() - 1

$("#date-#{k}").val "#{i.getDate()} #{months[i.getMonth()]} #{i.getFullYear()}" for k, i of range

# Set up the date picker
$('.input-daterange').datepicker
  format: "d M yyyy"
  startView: 2
  todayBtn: 'linked'
  autoclose: true
.on 'changeDate', query

# Order
$('#order').on 'change', query

# Dates
$('date-range').on 'change', 'input', query

# Search
$('#text').on 'change keyup', query

# Colours
$('#colour').on 'click', 'a', query

# Account buttons
$accountButtons = $('#account-buttons a')
$accountButtons.on 'click', query

# Account select all/none buttons
$('#account-button-bulk').on 'click', 'a', (e) ->
  set = $(e.currentTarget).data('set')
  $accountButtons.toggleClass 'active', set is 'on'
  query()

# Radio button behaviour for transaction types
$typeButtons = $('#type a')
$('#type').on 'click', 'a', (e) ->
  return if $(e.currentTarget).hasClass 'active'
  $typeButtons.each -> $(this).toggleClass 'active', this is e.currentTarget
  query()

# Handler for blurring colour pickers
$picker = null
$('body').on 'click', (e) ->
  target = e.currentTarget
  closePicker() unless $picker and (target is $picker[0] or $picker.find(target)[0])

# Method to remove colour picker
closePicker = ->
  $picker.remove() if $picker
  $picker = null

# Handlers for clicks on colour pickers
$('#content').on 'click', 'td.colour a.picker', (e) ->
  e.stopPropagation()
  closePicker()
  $tr = $(e.currentTarget).parents('tr').first()
  $td = $tr.find('td.colour')
  $picker = $('<ul class="colours">')
  $picker.append $('<li>').addClass("colour-#{i}").append('<a href="javascript:">') for i in COLOURS
  $picker.appendTo $td
  $picker.on 'click', 'a', (e) ->
    $li = $(e.currentTarget).parents('li').first()
    colour = $li[0].className.match(/colour-(\w+)/)[1]
    op = setColour $tr.data('id'), colour
    op.fail -> alert 'Something went wrong. Try reloading?'
    op.done -> $tr[0].className = $tr[0].className.replace /colour-\w+/, "colour-#{colour}"
    closePicker()

# Do an initial query
query()