var TabStrip_OnTabActivateMethods = {};

function TabStrip_RegisterOnTabActivate(strControlName, method)
{
  var arrMethods = TabStrip_OnTabActivateMethods[strControlName] || [];
  arrMethods.push(method);
  if (arrMethods.length==1)
    TabStrip_OnTabActivateMethods[strControlName]=arrMethods;
}

function TabStrip_OnTabActivate(strControlName, strTabName)
{
  var arrMethods = TabStrip_OnTabActivateMethods[strControlName];
  if (arrMethods) {
    for (var methodIdx in arrMethods) {
      try {
        var method = arrMethods[methodIdx];
        if (typeof(method)=='string')
          eval(method + "(\"" + strControlName + "\", \"" + strTabName + "\")");
        else
          method(strControlName, strTabName);
      }
      catch (e) {}
    }
  }
}

//It's need to fix Mozilla bug.
var previousIndexScrollPos = 0;
var previousSearchScrollPos = 0;
var previousFocusedRow = null;

function TabStrip_ToggleTab(strControlName, strTabName)
{
  if (!strControlName)
    throw "Argument null exception: 'strControlName'";
  if (!strTabName)
    throw "Argument null exception: 'strTabName'";

//It's need to fix Mozilla bug.
  if (isNetscape) {
    try {
      var indexFrame = top.GetIndexFrame();
      if (indexFrame!=null) {
        var doc = util.GetContentDocument(indexFrame);
        var div = doc.getElementById("divIndex");
        if (div.scrollTop != 0)
          previousIndexScrollPos = div.scrollTop;
      }
      var searchFrame = top.GetSearchFrame();
      if (searchFrame!=null) {
        doc = util.GetContentDocument();
        div = doc.getElementById("divSearchResults");
        if (div.scrollTop != 0)
          previousSearchScrollPos = div.scrollTop;
      }
    }
    catch(e) {}
  }
  

  var objActiveTabNameHolder = GetElementByName(strControlName);
  if (!objActiveTabNameHolder)
    throw "Can't find active tab name container";
  var objTab = document.getElementById(strTabName);
  if (!objTab)
    throw "Can't find specified tab.";
  objTab = objTab.firstChild;
  var strActiveTabName = objActiveTabNameHolder.value;
  if (strTabName==strActiveTabName) {
    if (objTab.className=="InactiveTab") {
      objTab.className="ActiveTab";
      TabStrip_OnTabActivate(strControlName, strTabName);
    }
  }
  else {
    if (strActiveTabName) {
      var objActiveTab = document.getElementById(strActiveTabName);
      if (objActiveTab) {
        objActiveTab = objActiveTab.firstChild;
        if (objActiveTab)
          objActiveTab.className="InactiveTab";
      }
    }
    objTab.className="ActiveTab";
    TabStrip_OnTabActivate(strControlName, strTabName);
    objActiveTabNameHolder.value = strTabName;
  }
  
//It's need to fix Mozilla bug.
  try {
    var indexFrame = top.GetIndexFrame();
    if (indexFrame!=null) {
      var doc = util.GetContentDocument(indexFrame);
      var div = doc.getElementById("divIndex");
      var rowToScroll = doc.body.getAttribute("rowToScroll");
      rowToScroll = doc.getElementById(rowToScroll); 
      if (rowToScroll != null && rowToScroll.offsetTop) {
          previousIndexScrollPos = rowToScroll.offsetTop + rowToScroll.parentNode.offsetTop;
          div.scrollTop = previousIndexScrollPos;
          doc.body.setAttribute("rowToScroll", null);
      }
      if (isNetscape) {
        if(div.scrollTop==0)
          div.scrollTop = previousIndexScrollPos;
      }
      var indexTable = doc.getElementById("indexTable");
      var firstRow = indexTable.rows[1];
      if (firstRow != null) {
        var diff = (div.scrollTop - firstRow.offsetTop);
        if (diff < firstRow.scrollHeight) {
          firstVisibleIndex = 1;
        } 
        else {
          var firstVisibleIndex = Math.floor(diff/firstRow.scrollHeight);
          diff = indexTable.rows[firstVisibleIndex].offsetTop - div.scrollTop;
          firstVisibleIndex -= Math.floor((diff*diff)/(Math.abs(diff)*firstRow.scrollHeight));
        }
        var nobrTag = indexTable.rows[firstVisibleIndex].cells[0].firstChild;
        var ancorTag = nobrTag.firstChild;
        if (ancorTag.tagName!="A")
          ancorTag = ancorTag.nextSibling;
        ancorTag.focus();
      }
    } 
    if (isNetscape) {
      var searchFrame = top.GetSearchFrame();
      if (searchFrame!=null) {
        doc = util.GetContentDocument();
        div = doc.getElementById("divSearchResults");
        if(div.scrollTop==0)
          div.scrollTop = previousSearchScrollPos;
      }
    }
  }
  catch(e) {}

}

function TabStrip_Activate(strControlName)
{
  var objActiveTabNameHolder = GetElementByName(strControlName);
  if (objActiveTabNameHolder) {
    var strActiveTab = objActiveTabNameHolder.value;
    if (strActiveTab)
      TabStrip_ToggleTab(strControlName, strActiveTab);
  }
}

function GetElementByName(strControlName)
{
  var arrElements = document.getElementsByName(strControlName);
  if (arrElements && arrElements.length>0)
    return arrElements[0];
  return null;
}
