/***************************************************************************************
**
**  File Name: ss_buttonsEx.js
**
**  Summary: Standalone SmartAccess Button creation General Functions for FairPoint
**           Verizon Email Settings Update web flow
**
**  Description: This javascript contains general purpose functions for
**               creating an owner drawn button.
**               Supports : Regular text Buttons and Image Buttons
**               currently ids have been restricted to only Smart Access
**               buttons.
**
**  Copyright SupportSoft Inc. 2006, All rights reserved.
***************************************************************************************/

/***************************************************************************************
** prefix used in creation of unique ids for various divs in owner drawn buttons
***************************************************************************************/
var BTTN_PREFIX         = "ss_btn_";
var BTTN_LEFT           = "ss_bnl_";
var BTTN_TILE           = "ss_bnt_";
var BTTN_TEXT           = "ss_btt_";
var BTTN_RIGHT          = "ss_bnr_";
var BTTN_LEFTOVER       = "ss_blo_";
var BTTN_TILEOVER       = "ss_bto_";
var BTTN_RIGHTOVER      = "ss_bro_";
var BTTN_IMAGE          = "ss_bni_";
var BTTN_ANCHOR         = "ss_bna_";
var BTTN_CLASS          = "cls";

/***************************************************************************************
** constants for different possible button ui styles
***************************************************************************************/
var BTTN_UI_STYLE_HOME      = "ui_style_home";
var BTTN_UI_STYLE_BACK      = "ui_style_back";
var BTTN_UI_STYLE_NEXT      = "ui_style_next";
var BTTN_UI_STYLE_RETEST    = "ui_style_retest";
var BTTN_UI_STYLE_FINISH    = "ui_style_finish";
var BTTN_UI_STYLE_NORMAL    = "ui_style_normal";


/***************************************************************************************
** Predefined arrays to store buttons created at shell level and page level
***************************************************************************************/
var g_btn_arShellButtons  = new Array();  // array of buttons at shell level
var g_btn_arPageButtons   = new Array();  // array of buttons at each page level

/***************************************************************************************
** Predefined buttons in Shell Button Bar. Button API explicitly subscribes to events
** generated for these buttons. For all other user defined buttons, user needs to
** explicitly subscribe to events.
***************************************************************************************/
var BTTN_BAR_BACK    = "bb_back";
var BTTN_BAR_NEXT    = "bb_next";
var BTTN_BAR_FINISH  = "bb_finish";
var BTTN_BAR_RETEST  = "bb_retest";
var BTTN_BAR_HOME    = "bb_home";

// button styles to use
var IMAGE_DIR  = "../skins/images/";
var BTTN_STYLE = "single";

// For button order on page
var BTTN_TAB_INDEX = 1;

// More globals objects that get used in ssCButton
var buttonMap  = new Object();

/***************************************************************************************
** GENERAL PURPOSE CODE to test for Browser incompatibilities
***************************************************************************************/
var isW3C   = (top.document.getElementById) ? true : false;
function getElement(elemID) {
  var elmReturn = null;
  if (isW3C) {
    elmReturn = top.document.getElementById(elemID);
    if(!elmReturn) elmReturn = document.getElementById(elemID);
  }
  else if ( top.document.all && top.document.all.length) {
    elmReturn = top.document.all[elemID]
  }
  else {
    elmReturn = null;
  }
  return elmReturn;
}
function getEvent(evt) {
  return (evt) ? evt : ((window.event) ? event : null);
}

/**************************************************************************************/

/***************************************************************************************
** Name:         SmartAccess Buttons Class
** Purpose:      Used to create all application and navigation buttons
** Parameter:    action : specify function to call onclick
**               text : button text will be localized and also used as button id
**               uiStyle : supports 4 types of segmented and single buttons
**
** Return:       value or null string
***************************************************************************************/
function ssCButton(action, text, uiStyle)
{
  
  if (arguments.length >= 2) {
  
    //properties supported by ssCButton class
    this.id       = text;
    // as we use single quotes internally for writing and all fn calls have to be in one line
    // make sure that we have parsed action to verify that
    var sAction   = action.replace(/\'/g, "\\'");
    sAction = sAction.condenseSpaces(true);
  
    var arResult = sAction.match(/function anonymous\(\)\s*\{(.*)\}/);
    if(arResult != null && arResult.length > 1) {
      this.action   = arResult[1];
    } else {
      this.action = sAction;
    }
    
    this.uiStyle     = (typeof(uiStyle) == 'undefined') ? BTTN_UI_STYLE_NORMAL : ((uiStyle == '') ? BTTN_UI_STYLE_NORMAL : uiStyle);
    this.bHide    = false;
    this.enabled  = true;
    this.state    = STATE_ENABLED;
    this.NextState = "";
  } else {
  
  
    alert("Cannot create a button by passing less that 2 arguments mainly action and caption");
    //g_Logger.Debug("ssCButton()", "Cannot create a button by passing less that 2 arguments mainly action and caption");
  }
  
  return this;
}

/***************************************************************************************
** METHODS SUPPORTED BY BUTTON CLASS
***************************************************************************************/
ssCButton.prototype.Instantiate = function bttnInstantiate()
{

  var strDisplay = "";
  if(BTTN_STYLE == "segmented") {
    strDisplay = this.CreateSegmentedBttn(this);
  } else {
    strDisplay = this.CreateSingleBttn(this);
  }
  //g_Logger.Debug("bttnInstantiate()", strDisplay, true);
  return strDisplay;
}

ssCButton.prototype.CreateSegmentedBttn = function bttnSegmented()
{
  var strDisplay = "";
  strDisplay += '<div id="';
  strDisplay += BTTN_PREFIX + this.id;
  strDisplay += '" class="clsButton" hidefocus="true" ';
  strDisplay += 'tabIndex="' + (BTTN_TAB_INDEX++) + '" nowrap ';
  strDisplay += 'onblur="this.className=\'clsButton\'" ';
  strDisplay += 'onfocus="this.className=\'clsButtonFocus\'" ';
  strDisplay += 'onmouseover="bttnOnMouseOver(this)" ';
  strDisplay += 'onmouseout="bttnOnMouseOut(this)" ';
  strDisplay += 'onkeypress="bttnCheckEnterKey(this)" ';
  strDisplay += 'onclick="bttnOnClick(this, \''+ this.action + '\')"';
  strDisplay += '>';
  //LEFT PART
  strDisplay += '<span id="' + BTTN_LEFT + this.id;
  strDisplay += '" class="clsButtonLeft clsButtonLeftNormal">';
  strDisplay += '<span id="' + BTTN_LEFTOVER + this.id;
  strDisplay += '" class="clsButtonLeft clsButtonLeftOver" ';
  strDisplay += ' style="visibility:hidden">';
  strDisplay += '<\/span>';
  strDisplay += '<\/span>';
  //MIDDLE PART
  strDisplay += '<span id="' + BTTN_TILE + this.id;
  strDisplay += '" class="clsButtonTile clsButtonTileNormal">';
  strDisplay += '<span id="' + BTTN_TILEOVER + this.id;
  strDisplay += '" class="clsButtonTile clsButtonTileOver" ';
  strDisplay += ' style="visibility:hidden">';
  strDisplay += '<span class="clsButtonHiddenText">' + this.id;
  strDisplay += '<\/span>';
  strDisplay += '<\/span>';
  strDisplay += '<span id="' + BTTN_TEXT + this.id;
  strDisplay += '" class="clsButtonText">' + this.id;
  strDisplay += '<\/span>';
  strDisplay += '<\/span>';
  //RIGHT PART
  strDisplay += createRightPortion(this);
  strDisplay += '</div>';
  return strDisplay;
}

/***************************************************************************************
** For e.g. a button with id=bb_home gets expanded as follows:
**  <div id="ss_btn_bb_home" class="clsSingleButton clsSingleButtonOver"
**          hidefocus="true" tabIndex="1">
**    <a id="ss_bna_bb_home" href="#"
**       onclick="bttnOnClick(this, 'ss_bn_DoClick(\'bb_home\');');" title="bb_home">
**      <img id="ss_bni_bb_home" src="../../../../sscommon/common/skins/fastnet/images/ssbn_blank.gif" alt="bb_home" />
**      <span id="ss_btt_bb_home" class="clsSingleButtonText">bb_home</span>
**    </a>
**  </div>
***************************************************************************************/
ssCButton.prototype.CreateSingleBttn = function bttnSingle()
{
  var strDisplay = "";
  var img = "";
  var cls = "";
  switch(this.uiStyle)
  {
    case BTTN_UI_STYLE_BACK:
       img = IMAGE_DIR + "ssbn_back.gif";
       cls = "clsSingleButton clsSingleButtonBackOver";
       break;
    case BTTN_UI_STYLE_NEXT:
       img = IMAGE_DIR + "ssbn_next.gif";
       cls = "clsSingleButton clsSingleButtonNextOver";
       break;
    case BTTN_UI_STYLE_FINISH:
       img = IMAGE_DIR + "ssbn_finish.gif";
       cls = "clsSingleButton clsSingleButtonFinishOver";
       break;
    case BTTN_UI_STYLE_RETEST:
       img = IMAGE_DIR + "ssbn_retest.gif";
       cls = "clsSingleButton clsSingleButtonRetestOver";
       break;
    case BTTN_UI_STYLE_HOME:
       img = IMAGE_DIR + "ssbn_home.gif";
       cls = "clsSingleButton clsSingleButtonHomeOver";
       break;
    case BTTN_UI_STYLE_NORMAL:
    default:
       img = IMAGE_DIR + "ssbn_blank.gif";
       cls = "clsSingleButton clsSingleButtonOver";
       break;
  }

  strDisplay += '<div id="' + BTTN_PREFIX + this.id;
  strDisplay += '" class="' + cls + '" hidefocus="true" ';
  strDisplay += 'tabIndex="' + (BTTN_TAB_INDEX++) + '">';
  strDisplay += '<a id="' + BTTN_ANCHOR + this.id + '" ';
  strDisplay += 'href="#" onclick="bttnOnClick(this, \''+ this.action + '\');" ';
  strDisplay += 'title="' + this.id + '">';
  //strDisplay += '<img id="' + BTTN_IMAGE + this.id + '" ';
  //strDisplay += 'src="' + img + '" alt="' + this.id + '" \/>';
  strDisplay += '<span id="' + BTTN_TEXT + this.id;
  //updated to accomodate the button text for Back and the rest of the buttons
  switch(this.uiStyle)
  {
    case BTTN_UI_STYLE_RETEST:
    case BTTN_UI_STYLE_FINISH:
       strDisplay += '" class="clsSingleFinishButtonText">' + this.id;
       break;
    case BTTN_UI_STYLE_BACK:
       strDisplay += '" class="clsSingleLeftButtonText">' + this.id;
       break;
    default:
  strDisplay += '" class="clsSingleButtonText">' + this.id;
       break;
  }
 // strDisplay += '" class="clsSingleButtonText">' + this.id;
  strDisplay += '<\/span><\/a>';
  strDisplay += '<\/div>';
  return strDisplay;
}

ssCButton.prototype.Enable = function bttnEnable(enabled)
{
  var elem = getElement(BTTN_PREFIX + this.id);
  if(elem == null) return;
  this.enabled = enabled;
  elem.disabled = !enabled;
  if (!this.enabled) {
    this.state = STATE_DISABLED;
    this.Hide(false);
    if(BTTN_STYLE == "segmented") {
      elem.all.item(BTTN_LEFT + this.id).className = "clsButtonLeft clsButtonLeftDim";
      elem.all.item(BTTN_TILE + this.id).className = "clsButtonTile clsButtonTileDim";
      switch(this.uiStyle) {
        case BTTN_UI_STYLE_BACK:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightBackDim";
          break;
        case BTTN_UI_STYLE_NEXT:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightNextDim";
          break;
        case BTTN_UI_STYLE_FINISH:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightCloseDim";
          break;
        case BTTN_UI_STYLE_RETEST:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightRetestDim";
          break;
        case BTTN_UI_STYLE_HOME:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightHomeDim";
          break;
        case BTTN_UI_STYLE_NORMAL:
        default:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightDim";
          break;
      }
    } else {
      // button is one Single style stop the hover motion and replace class
      elem.all.item(BTTN_ANCHOR + this.id).disabled = !enabled;
      switch(this.uiStyle) {
        case BTTN_UI_STYLE_BACK:
          elem.className = "clsSingleButton clsSingleButtonBackDim";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_back_dim.gif";
          break;
        case BTTN_UI_STYLE_NEXT:
          elem.className = "clsSingleButton clsSingleButtonNextDim";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_next_dim.gif";
          break;
        case BTTN_UI_STYLE_FINISH:
          elem.className = "clsSingleButton clsSingleButtonFinishDim";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_finish_dim.gif";
          break;
        case BTTN_UI_STYLE_RETEST:
          elem.className = "clsSingleButton clsSingleButtonRetestDim";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_retest_dim.gif";
          break;
        case BTTN_UI_STYLE_HOME:
          elem.className = "clsSingleButton clsSingleButtonHomeDim";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_home_dim.gif";
          break;
        case BTTN_UI_STYLE_NORMAL:
        default:
          elem.className = "clsSingleButton clsSingleButtonDim";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_blank_dim.gif";
          break;
      }
    }
  } else {  // Enable the button
    this.state = STATE_ENABLED;
    this.Hide(false);
    if(BTTN_STYLE == "segmented") {
      elem.all.item(BTTN_LEFT + this.id).className = "clsButtonLeft clsButtonLeftNormal";
      elem.all.item(BTTN_TILE + this.id).className = "clsButtonTile clsButtonTileNormal";
      switch(this.uiStyle) {
        case BTTN_UI_STYLE_BACK:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightBack";
          break;
        case BTTN_UI_STYLE_NEXT:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightNext";
          break;
        case BTTN_UI_STYLE_FINISH:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightClose";
          break;
        case BTTN_UI_STYLE_RETEST:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightRetest";
          break;
        case BTTN_UI_STYLE_HOME:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightHome";
          break;
        case BTTN_UI_STYLE_NORMAL:
        default:
          elem.all.item(BTTN_RIGHT + this.id).className = "clsButtonRight clsButtonRightNormal";
          break;
      }
    } else { //button is one Single style
      //start the hover motion and replace the images
      elem.all.item(BTTN_ANCHOR + this.id).disabled = !enabled;
      elem.all.item(BTTN_ANCHOR + this.id).visibility = 'visible';
      switch(this.uiStyle) {
        case BTTN_UI_STYLE_BACK:
          elem.className = "clsSingleButton clsSingleButtonBackOver";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_back.gif";
          break;
        case BTTN_UI_STYLE_NEXT:
          elem.className = "clsSingleButton clsSingleButtonNextOver";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_next.gif";
          break;
        case BTTN_UI_STYLE_FINISH:
          elem.className = "clsSingleButton clsSingleButtonFinishOver";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_finish.gif";
          break;
        case BTTN_UI_STYLE_RETEST:
          elem.className = "clsSingleButton clsSingleButtonRetestOver";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_retest.gif";
          break;
        case BTTN_UI_STYLE_HOME:
          elem.className = "clsSingleButton clsSingleButtonHomeOver";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_home.gif";
          break;
        case BTTN_UI_STYLE_NORMAL:
        default:
          elem.className = "clsSingleButton clsSingleButtonOver";
          //elem.all.item(BTTN_IMAGE + this.id).src = IMAGE_DIR + "ssbn_blank.gif";
          break;
      }
    }
  }
}

ssCButton.prototype.Hide = function bttnHide(bHide)
{
  var elem = getElement(BTTN_PREFIX + this.id);
  if(elem == null) return;
  if (typeof bHide == 'undefined') bHide = true;
  this.bHide = bHide;
  if (this.bHide) {
    this.state = STATE_HIDDEN;
    //alert(this.id);
    elem.style.visibility = "hidden";
    elem.style.display = "none";
  } else {
    elem.style.visibility = "visible";
    elem.style.display = "";
  }
}
/**************************************************************************************/

/***************************************************************************************
** BUTTON EVENT HANDLERS
***************************************************************************************/
function bttnOnClick(elemParent, action)
{
  if (!elemParent.disabled) {
    eval(action);
  }
}

function bttnOnMouseOut(elemParent)
{
  var elem, id, txt;
  if(!elemParent.disabled) {
    txt = elemParent.id.substring(8, elemParent.id.length);
    elemParent.all.item(BTTN_LEFTOVER + txt).style.visibility = "hidden";
    elemParent.all.item(BTTN_TILEOVER + txt).style.visibility = "hidden";
    elemParent.all.item(BTTN_RIGHTOVER + txt).style.visibility = "hidden";
  }
}

function bttnOnMouseOver(elemParent)
{
  var elem, id, txt;
  if(!elemParent.disabled) {
    txt = elemParent.id.substring(8, elemParent.id.length);
    elemParent.all.item(BTTN_LEFTOVER + txt).style.visibility = "visible";
    elemParent.all.item(BTTN_TILEOVER + txt).style.visibility = "visible";
    elemParent.all.item(BTTN_RIGHTOVER + txt).style.visibility = "visible";
  }
}

/**************************************************************************************/

/***************************************************************************************
**   NON MEMBER BUTTON API FUNCTIONS
***************************************************************************************/

//-------------------------------------------------------------------------------------
var g_bn_EventOnClickBusy = false;
function ss_bn_DoClick(BUTTON_EVENT)
{
  //g_Logger.Info("ss_bn_DoClick", BUTTON_EVENT);
  
  var bShellInBusyState = false==g_bn_EventOnClickBusy && 
                          ss_shi_BusyStateCheck("", "Shell Button Click Busy State Check");
  
  if ( ! bShellInBusyState ) {
    g_bn_EventOnClickBusy = true;
    ss_shi_BusyStart("", "ss_bn_DoClick Starting Busy For Shell Button Click");
    var Result = ss_evt_Send({name:BUTTON_EVENT});
    g_bn_EventOnClickBusy = false;
    if (Result != SENDMSG_RESULT_PROCESSED) {
      ss_shi_BusyEnd("", "Shell Button Click Busy End -- No Response From Handler Stack");
    }
  }
  if (typeof(event) != undefined)
    event.returnValue = false;  // cancel the href event
}

//-------------------------------------------------------------------------------------
// Iterate through the status bar buttons and disable  any buttons that are
// currently enabled.
function ss_bn_DisableEnableShellButtons()
{
  var oNavButtonBar = Id("ss_shl_ButtonBar");
  if (oNavButtonBar && oNavButtonBar.ButtonsDisabled != true) {
    for(var x=0, y=g_btn_arShellButtons.length; x<y; x++)  {

      g_btn_arShellButtons[x].disabler = false;
      if (g_btn_arShellButtons[x].state == STATE_ENABLED) {
        g_btn_arShellButtons[x].Enable(false);
        g_btn_arShellButtons[x].disabler = true;
      }

    }
    oNavButtonBar.ButtonsDisabled = true;
  }
}

//-------------------------------------------------------------------------------------
// Iterate through the shell button bar and enable any buttons that we disabled
// through the disabler loop.
// Also, toggle any buttons that have had their NextState queued.
function ss_bn_EnableDisableShellButtons()
{
  //g_Logger.Info("ss_bn_EnableDisableShellButtons");
  var oNavButtonBar = Id("ss_shl_ButtonBar");
  if (oNavButtonBar && oNavButtonBar.ButtonsDisabled == true) {
    oNavButtonBar.ButtonsDisabled = false;
    for(var x=0, y=g_btn_arShellButtons.length; x<y; x++)  {

      if (g_btn_arShellButtons[x].NextState !== "") {
        ss_bn_SetState(g_btn_arShellButtons[x], g_btn_arShellButtons[x].NextState);
      } else if (g_btn_arShellButtons[x].disabler == true) {
        g_btn_arShellButtons[x].Enable(true);
      }
    }
  }
}

//-------------------------------------------------------------------------------------
function ss_bn_GetShellButtonsState()
{
  //g_Logger.Info("ss_bn_GetShellButtonsState");
  var arStates = [];
  for(var x=0, y=g_btn_arShellButtons.length; x<y; x++)  {
    arStates.push(g_btn_arShellButtons[x].state);
  }
  return arStates;
}

//-------------------------------------------------------------------------------------
function ss_bn_SetShellButtonsState(arStates)
{
  //g_Logger.Info("ss_bn_SetShellButtonsState");
  for(var x=0, y=g_btn_arShellButtons.length; x<y; x++)  {
    //If shell has disabled buttons (between snapins/pages/etc) then set next state so
    //shell won't blindly re-enable button.  Still set current state to avoid "flicker"
    ss_bn_SetState(g_btn_arShellButtons[x], arStates[x]);
    if(g_btn_arShellButtons[x].disabler == true)
      g_btn_arShellButtons[x].NextState = arStates[x];
  }
  return true;
}

//-------------------------------------------------------------------------------------
function ss_bn_SetState(oButton, STATE)
{
  //g_Logger.Info("ss_bn_SetState");
  oButton.NextState = "";
  switch (STATE) {
    case STATE_ENABLED :
      oButton.Enable(true);
      break;

    case STATE_DISABLED :
      oButton.Enable(false);
      break;

    case STATE_HIDDEN :
      oButton.Hide(true);
      break;
  }
}

//-------------------------------------------------------------------------------------
function ss_bn_Enable()
{
  //g_Logger.Info("ss_bn_Enable");
  var oNavButtonBar = getElement("ss_shl_ButtonBar");

  var btn = null;
  for(var i=0, j=arguments.length; i<j; i++) {
    btn = arguments[i];
    for(var x=0, y=g_btn_arShellButtons.length; x<y; x++)  {
      if(g_btn_arShellButtons[x].id == btn) {
        // found button check
        if (oNavButtonBar && oNavButtonBar.ButtonsDisabled == true) {
          g_btn_arShellButtons[x].NextState = STATE_ENABLED;
        } else {
          g_btn_arShellButtons[x].Enable(true);
        }
        break;
      }
    }
  }
}

//-------------------------------------------------------------------------------------
function ss_bn_Enable_PageButtons()
{
  //g_Logger.Info("ss_bn_Enable_PageButtons");

  var btn = null;
  for(var i=0, j=arguments.length; i<j; i++) {
    btn = arguments[i];
    for(var x=0, y=g_btn_arPageButtons.length; x<y; x++)  {
      if(g_btn_arPageButtons[x].id == btn) {
        g_btn_arPageButtons[x].Enable(true);
      }
      break;
    }
  }
}

//-------------------------------------------------------------------------------------
function ss_bn_Disable()
{
  //g_Logger.Info("ss_bn_Disable");
  var oNavButtonBar = getElement("ss_shl_ButtonBar");

  var btn = null;
  for(var i=0, j=arguments.length; i<j; i++) {
    btn = arguments[i];
    for(var x=0, y=g_btn_arShellButtons.length; x<y; x++)  {
      if(g_btn_arShellButtons[x].id == btn) {
        // found button check
        if (oNavButtonBar && oNavButtonBar.ButtonsDisabled == true) {
          g_btn_arShellButtons[x].NextState = STATE_DISABLED;
        } else {
          g_btn_arShellButtons[x].Enable(false);
        }
        break;
      }
    }
  }
}

//-------------------------------------------------------------------------------------
function ss_bn_Disable_PageButtons()
{
  //g_Logger.Info("ss_bn_Disable_PageButtons");

  var btn = null;
  for(var i=0, j=arguments.length; i<j; i++) {
    btn = arguments[i];
    for(var x=0, y=g_btn_arPageButtons.length; x<y; x++)  {
      if(g_btn_arPageButtons[x].id == btn) {
        g_btn_arPageButtons[x].Enable(false);
      }
      break;
    }
  }
}

//-------------------------------------------------------------------------------------
function ss_bn_Hide()
{
  //g_Logger.Info("ss_bn_Hide");
  var oNavButtonBar = getElement("ss_shl_ButtonBar");
  var btn = null;
  for(var i=0, j=arguments.length; i<j; i++) {
    btn = arguments[i];
    for(var x=0, y=g_btn_arShellButtons.length; x<y; x++)  {
      if(g_btn_arShellButtons[x].id == btn) {
        // found button check
        if (oNavButtonBar && oNavButtonBar.ButtonsDisabled == true) {
          g_btn_arShellButtons[x].NextState = STATE_HIDDEN;
        } else {
          g_btn_arShellButtons[x].Hide(true);
        }
        break;
      }
    }
  }
}

//-------------------------------------------------------------------------------------
function ss_bn_Hide_PageButtons()
{
  //g_Logger.Info("ss_bn_Hide_PageButtons");

  var btn = null;
  for(var i=0, j=arguments.length; i<j; i++) {
    btn = arguments[i];
    for(var x=0, y=g_btn_arPageButtons.length; x<y; x++)  {
      if(g_btn_arPageButtons[x].id == btn) {
        g_btn_arPageButtons[x].Hide(true);
      }
      break;
    }
  }
}

