// Generated by CoffeeScript 1.3.3 (function() {

var $, COLOR_SCHEMES, CONN_HEADERS, bindings, color_scheme_index, connection_row, connection_rows, cycle_colors, f, key, kp, list, list_item, maybe_name, message, val;

$ = jQuery;

CONN_HEADERS = "<tr>\n  <th>Input</th>\n  <th>Chan</th>\n  <th>Output</th>\n  <th>Chan</th>\n  <th>Prog</th>\n  <th>Zone</th>\n  <th>Xpose</th>\n  <th>Filter</th>\n</tr>";

COLOR_SCHEMES = ['default', 'green', 'amber', 'blue'];

color_scheme_index = 0;

list_item = function(val, highlighted_value) {
  var classes;
  classes = val === highlighted_value ? "selected reverse-" + COLOR_SCHEMES[color_scheme_index] : '';
  return "<li class=\"" + classes + "\">" + val + "</li>";
};

list = function(id, vals, highlighted_value) {
  var lis, val;
  lis = (function() {
    var _i, _len, _results;
    _results = [];
    for (_i = 0, _len = vals.length; _i < _len; _i++) {
      val = vals[_i];
      _results.push(list_item(val, highlighted_value));
    }
    return _results;
  })();
  return $('#' + id).html(lis.join("\n"));
};

connection_row = function(conn) {
  var key, vals;
  vals = (function() {
    var _i, _len, _ref, _results;
    _ref = ['input', 'input_chan', 'output', 'output_chan', 'pc', 'zone', 'xpose', 'filter'];
    _results = [];
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      key = _ref[_i];
      _results.push(conn[key]);
    }
    return _results;
  })();
  return "<tr><td>" + (vals.join('</td><td>')) + "</td></tr>";
};

connection_rows = function(connections) {
  var conn, rows;
  rows = (function() {
    var _i, _len, _results;
    _results = [];
    for (_i = 0, _len = connections.length; _i < _len; _i++) {
      conn = connections[_i];
      _results.push(connection_row(conn));
    }
    return _results;
  })();
  $('#patch').html(CONN_HEADERS + "\n" + rows.join("\n"));
  return set_colors();
};

maybe_name = function(data, key) {
  if (data[key]) {
    return data[key]['name'];
  } else {
    return '';
  }
};

message = function(str) {
  return $('#message').html(str);
};

kp = function(action) {
  return $.getJSON(action, function(data) {
    list('song-lists', data['lists'], data['list']);
    list('songs', data['songs'], maybe_name(data, 'song'));
    list('triggers', data['triggers']);
    if (data['song'] != null) {
      list('song', data['song']['patches'], maybe_name(data, 'patch'));
      if (data['patch'] != null) {
        connection_rows(data['patch']['connections']);
      }
    }
    if (data['message'] != null) {
      return message(data['message']);
    }
  });
};

remove_colors = function() {
  if (color_scheme_index >= 0) {
    var base_class;
    base_class = COLOR_SCHEMES[color_scheme_index];
    $('body').removeClass(base_class);
    $('.selected, th, td#appname').removeClass("reverse-" + base_class);
    $('tr, td, th').removeClass("" + base_class + "-border");
  }
};

set_colors = function() {
  var base_class;
  base_class = COLOR_SCHEMES[color_scheme_index];
  $('body').addClass(base_class);
  $('.selected, th, td#appname').addClass("reverse-" + base_class);
  return $('tr, td, th').addClass("" + base_class + "-border");
};

cycle_colors = function() {
  remove_colors();
  color_scheme_index = (color_scheme_index + 1) % COLOR_SCHEMES.length;
  return set_colors();
};

bindings = {
  'j': 'next_patch',
  'down': 'next_patch',
  'k': 'prev_patch',
  'up': 'prev_patch',
  'n': 'next_song',
  'left': 'next_song',
  'p': 'prev_song',
  'right': 'prev_song',
  'esc': 'panic'
};

f = function(key, val) {
  return $(document).bind('keydown', key, function() {
    return kp(val);
  });
};

for (key in bindings) {
  val = bindings[key];
  f(key, val);
}

$(document).bind('keydown', 'c', function() {
  return cycle_colors();
});

kp('status');

}).call(this);