/********************************************************************************
 * dbedit.js
 * - Javascript code for dbedit.php
 *
 * $Id: dbedit.js,v 1.4 2004/11/02 20:29:25 Jakob Kruse Exp $
 ********************************************************************************/

var dbedit_editing = false;
var dbedit_activeid = null;

/**
 * Handle enter and escape
 */
function dbedit_keycheck(fieldnames) {
  if (dbedit_editing) {
    if (event.keyCode == 13) { // ENTER
      event.returnValue = false;
      dbedit_save_rec(fieldnames);
    } else if (event.keyCode == 27) { // ESC
      event.returnValue = false;
      dbedit_cancel_rec(fieldnames);
    }
  }
}

/**
 * Lock selection on the clicked row
 */
function dbedit_fix(obj, id) {
  if (dbedit_editing) return;
  if (dbedit_activeid == null) {
    // set fix
    dbedit_activeid = id;
    cells = obj.cells;
    for (i = 0; i < cells.length; i++) {
      cell = cells(i);
      cell.className = '';
      if (i == 0) cell.className += 'highlight-lock-first ';
      cell.className += 'highlight-lock';
      if (i == cells.length-1) cell.className += ' highlight-lock-last';
    }
    dbedit_btn_deactivate('btn_new');
    dbedit_btn_activate('btn_edit');
    dbedit_btn_activate('btn_delete');
    dbedit_btn_deactivate('btn_save');
    dbedit_btn_deactivate('btn_cancel');
  } else if (dbedit_activeid == id) {
    // release fix
    dbedit_activeid = null;
    cells = obj.cells;
    for (i = 0; i < cells.length; i++) {
      cell = cells(i);
      cell.className = '';
      if (i == 0) cell.className += 'highlight-on-first ';
      cell.className += 'highlight-on';
      if (i == cells.length-1) cell.className += ' highlight-on-last';
    }
    dbedit_btn_activate('btn_new');
    dbedit_btn_deactivate('btn_edit');
    dbedit_btn_deactivate('btn_delete');
    dbedit_btn_deactivate('btn_save');
    dbedit_btn_deactivate('btn_cancel');
  }
}

/**
 * Highlight current row
 */
function dbedit_highlight(obj, forced) {
  if (forced || dbedit_activeid == null) {
    cells = obj.cells;
    last = cells.length-1;

    cells(0).className = 'highlight-on-first highlight-on';
    for (i = 1; i < last; i++) {
      cells(i).className = 'highlight-on';
    }
    cells(last).className = 'highlight-on highlight-on-last';
  }
}

/**
 * Remove highlight from current row
 */
function dbedit_unhighlight(obj, forced) {
  if (forced || dbedit_activeid == null) {
    cells = obj.cells;
    last = cells.length-1;

    cells(0).className = 'highlight-off-first highlight-off';
    for (i = 1; i < last; i++) {
      cells(i).className = 'highlight-off';
    }
    cells(last).className = 'highlight-off highlight-off-last';
  }
}

/**
 * Highlight current cell
 */
function winbutton_on() {
  obj = event.srcElement;
  obj.style.border = '';
  obj.style.border = '1px outset';
}

/**
 * Remove highlight from current cell
 */
function winbutton_off() {
  obj = event.srcElement;
  obj.style.border = '1px solid silver';
}

/**
 * Simulate button press
 */
function winbutton_down() {
  obj = event.srcElement;
  obj.style.border = '1px inset';
}

/**
 * Simulate button release
 */
function winbutton_up() {
  obj = event.srcElement;
  obj.style.border = '1px outset';
}

/**
 * Setup a winbutton
 */
function dbedit_make_winbutton(id, action) {
  obj = document.getElementById(id);
  if (obj) {
    obj.className    = 'winbutton';
    obj.style.border = '1px solid silver';
    obj.onmouseover  = function a() { winbutton_on(); };
    obj.onmouseout   = function a() { winbutton_off(); };
    obj.onmousedown  = function a() { winbutton_down(); };
    obj.onmouseup    = function a() { winbutton_up(); };
    obj.onclick = action;
  }
}

/**
 * Button "new"
 *
 * @params:
 *   focus_id : the id of the span to take focus
 */
function dbedit_new_rec(focus_id) {
  if (event.srcElement.isDisabled || dbedit_activeid != null) return;
  dbedit_activeid = 0;
  document.getElementById('dbedit_row0').style.display = 'block';
//  CenterContent();
  document.getElementById(focus_id).focus();
  dbedit_editing = true;
  winbutton_off();
  dbedit_btn_deactivate('btn_new');
  dbedit_btn_deactivate('btn_edit');
  dbedit_btn_deactivate('btn_delete');
  dbedit_btn_activate('btn_save');
  dbedit_btn_activate('btn_cancel');
}

/**
 * Button "edit"
 *
 * @params:
 *   fieldnames : array of field names used
 */
function dbedit_edit_rec(fieldnames) {
  if (event.srcElement.isDisabled || dbedit_activeid == null || dbedit_activeid == 0) return;
  dbedit_unhighlight(document.getElementById('dbedit_row' + dbedit_activeid), true);
  oForm = document.getElementById('dbedit-form');
  for (i = 0; i < fieldnames.length; i++) {
    obj = document.getElementById('dbedit_' + fieldnames[i] + '_' + dbedit_activeid);
    curval = obj.innerHTML;
    oForm.elements(fieldnames[i]).value = curval;
    classname = '';
    if (i == 0) classname += 'edit-first ';
    classname += 'edit';
    if (i == fieldnames.length-1) classname += ' edit-last';
    obj.parentElement.className = classname;
    obj.contentEditable = true;
    if (i == 0) obj.focus();
  }
  dbedit_editing = true;
  if (event.srcElement.className == 'winbutton') winbutton_off();
  dbedit_btn_deactivate('btn_new');
  dbedit_btn_deactivate('btn_edit');
  dbedit_btn_deactivate('btn_delete');
  dbedit_btn_activate('btn_save');
  dbedit_btn_activate('btn_cancel');
}

/**
 * Button "delete"
 */
function dbedit_delete_rec() {
  if (dbedit_activeid == null || dbedit_activeid == 0) return;
  oForm = document.getElementById('dbedit-form');
  oForm.op.value = 'delete';
  oForm.id.value = dbedit_activeid;
  oForm.submit();
}

/**
 * Button "save"
 *
 * @params:
 *   fieldnames : array of field names used
 */
function dbedit_save_rec(fieldnames) {
  if (dbedit_activeid == null) return;
  oForm = document.getElementById('dbedit-form');
  for (i = 0; i < fieldnames.length; i++) {
    obj = document.getElementById('dbedit_' + fieldnames[i] + '_' + dbedit_activeid);
    curval = obj.innerHTML;
    oForm.elements(fieldnames[i]).value = curval;
  }
  oForm.op.value = 'save';
  oForm.id.value = dbedit_activeid;
  oForm.submit();
}

/**
 * Button "cancel"
 *
 * @params:
 *   fieldnames : array of field names used
 */
function dbedit_cancel_rec(fieldnames) {
  if (dbedit_activeid == null) return;
  if (dbedit_activeid == 0) {
    document.getElementById('dbedit_row0').style.display = 'none';
//    CenterContent();
    //clear all fields: document.getElementById('artist-new').innerHTML = '';
  } else {
    oForm = document.getElementById('dbedit-form');
    for (i = 0; i < fieldnames.length; i++) {
      obj = document.getElementById('dbedit_' + fieldnames[i] + '_' + dbedit_activeid);
      obj.innerHTML = oForm.elements(fieldnames[i]).value;
      classname = '';
      if (i == 0) classname += 'highlight-off-first ';
      classname += 'highlight-off';
      if (i == fieldnames.length-1) classname += ' highlight-off-last';
      obj.parentElement.className = classname;
      obj.contentEditable = false;
    }
  }
  dbedit_editing = false;
  dbedit_activeid = null;
  winbutton_off();
  dbedit_btn_activate('btn_new');
  dbedit_btn_deactivate('btn_edit');
  dbedit_btn_deactivate('btn_delete');
  dbedit_btn_deactivate('btn_save');
  dbedit_btn_deactivate('btn_cancel');
}

/**
 * Activate a button
 */
function dbedit_btn_activate(id) {
  obj = document.getElementById(id);
  if (obj) {
    obj.disabled = false;
    //obj.className = 'winbutton'; //link
  }
}

/**
 * Deactivate a button
 */
function dbedit_btn_deactivate(id) {
  obj = document.getElementById(id);
  if (obj) {
    obj.disabled = true;
    //obj.className = 'winbutton'; //passive-link
  }
}
