var oPrevSelection;

var arrMenuItems = new Array();

function addMenuItem(id, classNameSel, classNameNotSel, bHasSubMenu)
{
  arrMenuItems.push(new MenuItem(id, classNameSel, classNameNotSel, bHasSubMenu));
}

function MenuItem(id, classNameSel, classNameNotSel, bHasSubMenu)
{
  this.id = id;
  this.classNameSel = classNameSel;
  this.classNameNotSel = classNameNotSel;
  this.bHasSubMenu = bHasSubMenu;
//  this.onClickAction = onClickAction;
//  this.target = target;
}

function getMenuItem(id)
{
  for (var i = 0; i < arrMenuItems.length; i++)
  {
    if (arrMenuItems[i].id == id)
    {
      return arrMenuItems[i];
    }
  }
  return null;
}

function processMenu(sPrefixStr, nIteration, nSelArray)
{
  var nCtr = 0;
  var sId = "mitem_" + sPrefixStr + nCtr;
  var oMenu = document.getElementById(sId);
  var sSubMenuId, oSubMenu;
  var sSelectedMenuId = "mitem";
  var sSelectedSubMenuId = "smitem";

  if (nIteration < nSelArray.length - 1)
  {
    for (var i = 1; (i <= nIteration + 1 && i < nSelArray.length); i++)
    {
      sSelectedMenuId = sSelectedMenuId + "_" + nSelArray[i];
      sSelectedSubMenuId = sSelectedSubMenuId + "_" + nSelArray[i];
    }
  }
  
  
  while (oMenu != null)
  {
    // Chech for submenu
    sSubMenuId = "smitem_" + sPrefixStr + nCtr;
    oSubMenu = document.getElementById(sSubMenuId);
    if (oSubMenu != null)
    {
      if (oSubMenu.style.display != "none")  // if this row is not hidden process rows under it.
      {
        processMenu(sPrefixStr + nCtr + "_", nIteration + 1, nSelArray);
      }

      if (sSubMenuId != sSelectedSubMenuId)  // Check if is selected
      {
        // Hide this row
        oSubMenu.style.display = "none";
      }
    }
    if (sId != sSelectedMenuId)  // Check if should be selected
    {
      var menuItem = getMenuItem(sId);
      var classNameNotSel = menuItem.classNameNotSel;

      // unselect this row and carry on
      oMenu.className = classNameNotSel; //"left_menu_item_not_selected" // fix this later rowObj.className.replace(classNameSel, classNameNotSel);  
    }

    nCtr++;
    sId = "mitem_" + sPrefixStr + nCtr;
    oMenu = document.getElementById(sId);
  }
}

function processOnClickLink(onClickAction, target)
{
  if (target == "_self")
  {
    document.location = onClickAction;
  }

}

function on_left_menu_click(rowObj, bHasSubMenu, onClickAction, target)
{
  if (oPrevSelection == rowObj && !bHasSubMenu)
  {
    processOnClickLink(onClickAction, target);
    // user is just clicking on the menu item and there are not sub menus to collapse
    return;
  }

  var sVisiblity = "";
  var menuItem = getMenuItem(rowObj.id);
  var classNameSel = menuItem.classNameSel;
  var classNameNotSel = menuItem.classNameNotSel;


  processMenu("0_", 1, rowObj.id.split("_"));

  var nIndex = rowObj.className.indexOf(classNameSel);
  if (nIndex == -1)
  {
    rowObj.className = rowObj.className.replace(classNameNotSel, classNameSel);
  }
  if (bHasSubMenu)
  {
    //var rowIndex  = rowObj.rowIndex + 1;
    var bRow = document.getElementById(rowObj.id.replace("mitem", "smitem"));

    if (bRow != null)
    { 
      if (bRow.style.display == "")
      {
        bRow.style.display = "none";
      }
      else
        bRow.style.display = "";
    }
  }

  oPrevSelection = rowObj;
  processOnClickLink(onClickAction, target);
}
