var selected_components = new Array();
var updating = false;
var request = null;

// Handles clicks on components.
function toggle_component(c_id) {
  // Ignore clicks when an update is in progress.
  if (updating) return;
  
  // Get the clicked component. Ignore clicks if it's disabled.
  element = $('p' + String(c_id));
  if (! element.hasClassName('enabled')) return;

  if (element.hasClassName('not_selected'))
  {
    // Select the component.
    element.removeClassName('not_selected').addClassName('selected');
    selected_components.push(c_id);
  }
  else
  {
    // Deselect the component.
    element.removeClassName('selected').addClassName('not_selected');
    selected_components = selected_components.without(c_id);
  }
  
  // Update results.
  update_kanji();
}

// Updates the enabled setting on all components.
function set_enabled_parts(c_ids) {
  // Swap 'enabled' and 'disabled' class names for components listed in c_ids.
  elements = $('parts_field').getElementsByClassName('part');
  for (var i = 0; i < elements.length; i++) {
    e_id = Number(elements[i].id.substr(1));
    if (c_ids.indexOf(e_id) == -1)
      elements[i].removeClassName('enabled').addClassName('disabled');
    else
      elements[i].removeClassName('disabled').addClassName('enabled');
  }
}

// Deselects and enables all components.
function reset_parts() {
  // Don't reset if an update is in progress.
  if (updating) return;
  
  // Replace all 'disabled' classes with 'enabled', and 'selected' with
  // 'not_selected'.
  elements = $('parts_field').getElementsByClassName('part');
  for (var i = 0; i < elements.length; i++) {
    elements[i].removeClassName('disabled').addClassName('enabled');
    elements[i].removeClassName('selected').addClassName('not_selected');
  }
  
  // Clear out the selected components.
  selected_components = new Array();
}

// Cancels the current request.
function cancel_request() {
  if (updating)
  {
    request.transport.abort();
    updating = false;
  }
}
