//==============================================================================
// Javascript Library (c) Virtooz 2006-2008
//
// LIBRARY: uButtons.js
//
// DESCRIPTION
// Support functions for buttons.
// 
// Image naming conventions for buttons:
// button_n.gif = normal state (active)
// button_o.gif = over state
// button_d.gif = disabled state
//
// Image naming conventions for radiobuttons:
// radiobutton_n.gif = normal state
// radiobutton_o.gif = over state
// radiobutton_c.gif = checked state
//==============================================================================

//------------------------------------------------------------------------------
// getButtonSrc
//
// Get the main part of a button source. fi: a button with source 
// 'main_dialog_button_o.gif' will be returned as 'main_dialog_button_'
//------------------------------------------------------------------------------

function getButtonSrc(btn) {
  var src = new String(btn.src);
  var pos = src.lastIndexOf(".");
  return src.substring(0, pos-1);
}

//------------------------------------------------------------------------------
// getButtonExt
//
// Get the extension part of a button source. fi: a button with source 
// 'main_dialog_button_o.gif' will be returned as '.gif'
//------------------------------------------------------------------------------

function getButtonExt(btn) {
  var src = new String(btn.src);
  var pos = src.lastIndexOf(".");
  return src.substring(pos, src.length);  
}

//------------------------------------------------------------------------------
// getRadioButtonPrefixGroup
//
// Extract the radiobutton prefix and group index from the radiobutton name.
// fi: 'radio_6_2' -> 'radio_6'
//------------------------------------------------------------------------------

function getRadioButtonPrefixGroup(btn) {
  var src = new String(btn.name);
  var pos = src.lastIndexOf("_");
  return src.substring(0, pos);
}

//------------------------------------------------------------------------------
// getRadioButtonPrefix
//
// Extract the radiobutton prefix from the radiobutton name.
// fi: 'radio_6_2' -> 'radio'
//------------------------------------------------------------------------------

function getRadioButtonPrefix(btn) {
  var src = getRadioButtonPrefixGroup(new String(btn.name));
  var pos = src.lastIndexOf("_");
  return src.substring(0, pos);
}

//------------------------------------------------------------------------------
// getRadioButtonGroup
//
// Extract the radiobuttons group index from the name of a radio button
// fi: radiobutton_5_7 => 5
//------------------------------------------------------------------------------

function getRadioButtonGroup(btn) {
  var src = new String(btn.name);
  var pos = src.lastIndexOf("_");
  var src2 = src.substring(0, pos);
  var pos2 = src2.lastIndexOf("_");
  return parseInt(src2.substring(pos2+1, 100));  
}

//------------------------------------------------------------------------------
// doButtonOver
//
// Set button in over state
//------------------------------------------------------------------------------

function doButtonOver(btn) {
  if (btn.className=='enabled') {
      btn.src = getButtonSrc(btn) + 'o' + getButtonExt(btn);
  }
}

//------------------------------------------------------------------------------
// doButtonNormal
//
// Set button in normal state
//------------------------------------------------------------------------------

function doButtonNormal(btn) {
  if (btn.className=='enabled') {
      btn.src = getButtonSrc(btn) + 'n' + getButtonExt(btn);
  }
}

//------------------------------------------------------------------------------
// doButtonDisabled
//
// Set button to disabled state
//------------------------------------------------------------------------------

function doButtonDisabled(btn) {
  btn.className = 'disabled';
  btn.src = getButtonSrc(btn) + 'd' + getButtonExt(btn);
}

//------------------------------------------------------------------------------
// enableButton
//
// Enable or disable a button
//------------------------------------------------------------------------------

function enableButton(btn, flag) {
  if (flag) {
    btn.className = 'enabled';
    doButtonNormal(btn);
  }
  else {
    doButtonDisabled(btn);
  }
}

//------------------------------------------------------------------------------
// doRadioOver
//------------------------------------------------------------------------------

function doRadioOver(btn) {
  if (btn.className=='radio_unchecked') {
      btn.src = getButtonSrc(btn) + 'o' + getButtonExt(btn);
  }
}

//------------------------------------------------------------------------------
// doRadioNormal
//------------------------------------------------------------------------------

function doRadioNormal(btn) {
  if (btn.className=='radio_unchecked') {
    btn.src = getButtonSrc(btn) + 'n' + getButtonExt(btn);
  }
}

//------------------------------------------------------------------------------
// doRadioChecked
//------------------------------------------------------------------------------

function doRadioChecked(btn) {
  btn.className = 'radio_checked';
  btn.src = getButtonSrc(btn) + 'c' + getButtonExt(btn);
}

//------------------------------------------------------------------------------
// doRadioUnchecked
//------------------------------------------------------------------------------

function doRadioUnchecked(btn) {
  btn.className = 'radio_unchecked';
  btn.src = getButtonSrc(btn) + 'n' + getButtonExt(btn);
}

//------------------------------------------------------------------------------
// isChecked
//------------------------------------------------------------------------------

function isChecked(btn) {
  if (btn.className=='radio_checked') {
    return true;
  }
  else {
    return false;
  }
}

//------------------------------------------------------------------------------
// checkRadioButton
//
// Check or uncheck a radiobutton
//------------------------------------------------------------------------------

function checkRadioButton(btn, flag) {
  if (flag) {
    doRadioChecked(btn);
  }
  else {
    doRadioUnchecked(btn);
  }
}

//------------------------------------------------------------------------------
// uncheckRadioGroup
//
// unckeck a radiobutton group by index
//------------------------------------------------------------------------------

function uncheckRadioGroup(btn) {
  var prefixGroup = getRadioButtonPrefixGroup(btn)
  for (var n=0; n<16; n++) {
    var btn = document.images[prefixGroup + '_' + n];
    if (btn) checkRadioButton(btn, false);
  }
}

//------------------------------------------------------------------------------
// checkRadio
//
// Check a radio buttons and uncheck all radiobuttons in the same group
//------------------------------------------------------------------------------

function checkRadio(btn) {
  uncheckRadioGroup(btn);
  checkRadioButton(btn, true);
}

//------------------------------------------------------------------------------
// checkRadio2
//
// Check or uncheck a radio button and uncheck all radiobuttons in the same group
//------------------------------------------------------------------------------

function checkRadio2(btn) {
  var checked = isChecked(btn)
  //uncheckRadioGroup(btn);
  checkRadioButton(btn, !checked);
}

//------------------------------------------------------------------------------
// radioGroupChecked
//
// Check if a radiogroup is checked
//------------------------------------------------------------------------------

function radioGroupChecked(prefix, groupindex) {
  var buttonFound = false
  var checked = false;
  for (var n=0; n<16; n++) {
    var btn = document.images[prefix + '_' + groupindex + '_' + n]
    if (btn) {
      buttonFound = true;
      if (btn.className=='radio_checked') {
        checked = true;
        continue;
      }
    }
  }
  if ((buttonFound) && (!checked)) return false;
  return true;
}

//------------------------------------------------------------------------------
// allRadioChecked
//
// Check if all radiobuttons groups on the screen are checked
//------------------------------------------------------------------------------

function allRadioChecked(prefix) {
  for (var m=0; m<32; m++) {
    var buttonFound = false
    var checked = false;
    for (var n=0; n<16; n++) {
      var btn = document.images[prefix + '_' + m + '_' + n]
      if (btn) {
        buttonFound = true;
        if (btn.className=='radio_checked') {
          checked = true;
          continue;
        }
      }
    }
    if ((buttonFound) && (!checked)) return false;
  }
  return true;
}

//------------------------------------------------------------------------------
// getRadioPattern
//
// Translate checked radiobuttons to answer pattern
//------------------------------------------------------------------------------

function getRadioPattern(radioPrefix) {
  var pattern = '';
  for (var m=0; m<32; m++) {
    for (var n=0; n<16; n++) {
      var btn = document.images[radioPrefix + '_' + m + '_' + n]
      if ((btn) && (btn.className=='radio_checked')) {
        pattern += n;
      }
    }
  }
  return pattern;
}

//------------------------------------------------------------------------------
// getRadioKVString
//
// Translate checked radiobuttons to Key-value string
//------------------------------------------------------------------------------

function getRadioKVString(radioPrefix) {
  var pattern = '';
  for (var m=0; m<32; m++) {
    for (var n=0; n<16; n++) {
      var btn = document.images[radioPrefix + '_' + m + '_' + n]
      if ((btn) && (btn.className=='radio_checked')) {
        pattern += m + '-' + n + ';';
      }
    }
  }
  return pattern;
}

//------------------------------------------------------------------------------
// setRadioPattern
//
// Set radio buttons states using a answer subpattern
//------------------------------------------------------------------------------

function setRadioPattern(radioPrefix, pattern) {
  var p = new String(pattern);
  for (var n=0; n<pattern.length; n++) {
    var radioIndex = p.substring(n, n+1);
    var btn = document.images[radioPrefix + '_' + n + '_' + radioIndex];
    if (btn) {
      checkRadio(btn);
    }
  }
}

//------------------------------------------------------------------------------
// enableYes()
//------------------------------------------------------------------------------

function enableYes() {
  enableButton(document.images['btnYes'], true);
}

//------------------------------------------------------------------------------
// disableYes()
//------------------------------------------------------------------------------

function disableYes() {
  enableButton(document.images['btnYes'], false);
}

//------------------------------------------------------------------------------
// enableLeft();
//------------------------------------------------------------------------------

function enableLeft() {
  enableButton(document.images['btnLeft'], true);
}

//------------------------------------------------------------------------------
// disableLeft();
//------------------------------------------------------------------------------

function disableLeft() {
  enableButton(document.images['btnLeft'], false);
}

//------------------------------------------------------------------------------
// enableRight();
//------------------------------------------------------------------------------

function enableRight() {
  enableButton(document.images['btnRight'], true);
}

//------------------------------------------------------------------------------
// disableRight();
//------------------------------------------------------------------------------

function disableRight() {
  enableButton(document.images['btnRight'], false);
}

