gSearch =
{

  // look for tables and call process() for each one
  // additionally, set counter events for skills/keywords in personnel search
  init: function()
  {
    $('table.list').each(gSearch.process)
    $('#card_per_skill').change(gSearch.updateCounter);
    $('#card_per_attr').change(gSearch.updateCounter);
  },

  // execute all needed stuff for tables
  process: function(i)
  {
    // add select/deselect all checkbox
    var th = $('thead th:first', this);
    if (!th)
    {
      return;
    }
    var cb = $('<input type="checkbox">');
    cb.click(gSearch.toggleSelect);
    th.append(cb);
    // intercept adding and redirect it to ajax
    var aForms = $('form[action*="add2deck"]');
    aForms.each(gSearch.addTo);
  },

  // check/uncheck all checkboxes of a table
  toggleSelect: function()
  {
    var cbs = $('input', $(this).parents('table'));
    for (var i = 0; i < cbs.length; i ++)
    {
      cbs[i].checked = this.checked;
    }
  },

  // add selected cards to deck (or have, or want) via ajax
  addTo: function()
  {
    $(this).submit(function() {
      if ($('input:checked', this).length == 0)
      {
        return false;
      }
      var pdata = $('input[name="card[]"]', this).serializeArray();
      pdata.push({ name: 'addop', value: $('select[name="addop"]', this).val() });
      $.ajax({
        type: 'POST',
        url: this.action,
        data: pdata,
        success: gSearch.ok,
        error: gSearch.ko
      });
      return false;
    });
  },

  // update counter for select multiple
  updateCounter: function()
  {
    var cnt = $('option:selected', this).length;
    var cname = this.id == 'card_per_skill' ? '1' : '2';
    $('#card_per_cnt'  + cname).val(cnt);
  },

  // show message in case of success
  ok: function(results, status)
  {
    gSearch.alert(results);
  },

  // show message in case of failure
  ko: function()
  {
    gSearch.alert('Error!');
  },

    // show an alert message for user
  alert: function(text)
  {
    var div = $('#servmsg');
    if (div.length > 0)
    {
      div.text(text);
    }
    else
    {
      var div = $('<div id="servmsg">');
      div.text(text);
      var b = $('body')[0];
      $(b).append(div);
    }
  }

}

$(document).ready(function() { gSearch.init(); });