//*************************************************************************
// Dynamic Menu Class Definition
//*************************************************************************

// Dynamic Menu Constructor
function DMenu()
{
  this.aMenu = new Array;
  if(document.layers)
  { DMenu.visible = 'show';
    DMenu.hidden = 'hide';
  }
  else
  { DMenu.visible = 'visible';
    DMenu.hidden = 'hidden';
  }
}

// DMenu:AddMenuItem
DMenu.prototype.AddMenuItem = function( pMenu )
{
  this.aMenu[this.aMenu.length] = pMenu;
}

// DMenu:ToggleMenu
DMenu.prototype.ToggleMenu = function( pMenuId ,OpenFrame)
{
  for ( x = 0; x < this.aMenu.length; x++)
  { if( this.aMenu[x].Type == "SubMenu" )
    { if( this.aMenu[x].Id == pMenuId )
      { if( this.aMenu[x].Visible == true )
        { this.aMenu[x].Visible = false;
        }
        else
        { this.aMenu[x].Visible = true;
          top.hovedramme.location = OpenFrame
        }
      }
      else
      { this.aMenu[x].Visible = false;
      }
    }
  }
  this.DrawMenu();
}

// DMenu:IsVisible
DMenu.prototype.IsVisible = function( pMenuId )
{
  var IsNowVisible;
  IsNowVisible = false;
  for ( x = 0; x < this.aMenu.length; x++)
  { if( this.aMenu[x].Id == pMenuId )
    { if( this.aMenu[x].Visible == true )
          { IsNowVisible = true;
      }
      else
      { IsNowVisible = false;
      }
    }
  }
  return IsNowVisible;
}

// DMenu:ShowMenu
DMenu.prototype.ShowMenu = function( pMenuId )
{
  for ( x = 0; x < this.aMenu.length; x++)
  { if( this.aMenu[x].Id == pMenuId )
    { this.aMenu[x].Visible = true;
    }
  }
}


// DMenu:HideMenu
DMenu.prototype.HideMenu = function( pMenuId )
{
  for ( x = 0; x < this.aMenu.length; x++)
  { if( this.aMenu[x].Id == pMenuId )
    { this.aMenu[x].Visible = false;
        }
  }
}


// DMenu:CloseAllMenues
DMenu.prototype.CloseAllMenues = function( )
{
  for ( x = 0; x < this.aMenu.length; x++)
  { if( this.aMenu[x].Type == "SubMenu" )
    { this.aMenu[x].Visible = false;
    }
  }
}


// DMenu:DrawMenu
DMenu.prototype.DrawMenu = function()
{
  var curheight = 25;
  for ( x = 0; x < this.aMenu.length; x++)
  { if( this.aMenu[x].Visible == true )
    { if (document.all || document.layers)
      { this.aMenu[x].domStyleObject.visibility = DMenu.visible;
        DMenu.SetItemTop(DMenu_GetStyleObject(this.aMenu[x].Id), curheight);
        curheight = curheight + this.GetHeight( this.aMenu[x].domMenuObject );
      }
            else
      { str = "visibility:visible; position:relative; display:block;";
        this.aMenu[x].domMenuObject.setAttribute("style",str);
      }
    }
    else
    { if (document.all || document.layers)
      { this.aMenu[x].domStyleObject.visibility = DMenu.hidden;
      }
      else
      { str = "visibility:visible; position:relative; display:none;"
        this.aMenu[x].domMenuObject.setAttribute("style",str);
      }
    }
  }
  document.height = curheight;
}


//
// Class Methods
//

// Get menu object based on name depending on DOM
function DMenu_GetMenuObject( pMenuId )
{
  var oMenu = new Object;
  
  if (document.layers)
  { if( typeof document.layers[ pMenuId ] != "object" )
    { oMenu = null;
    }
    else
    { oMenu = document.layers[ pMenuId ];
    }
  }
  else if (document.all)
  { if( document.all( pMenuId ) == null )
    { oMenu = null;
    }
    else
    { oMenu = document.all( pMenuId );
    }
  }
  else
  { oMenu = document.getElementById( pMenuId );
  }
  return oMenu;
}

// Get style object based on name depending on DOM
function DMenu_GetStyleObject( pMenuId )
{
  var oMenu = new Object;
    if (document.layers)
  { if( typeof document.layers[ pMenuId ] != "object" )
    { oMenu = null;
    }
    else
    { oMenu = document.layers[ pMenuId ];
    }
  }
  else if (document.all)
  { if( document.all( pMenuId ) == null )
    { oMenu = null;
    }
    else
    { oMenu = document.all( pMenuId ).style;
    }
  }
  else
  { oMenu = document.getElementById( pMenuId );
  }
  return oMenu;
}

// Get image object based on name depending on DOM
function DMenu_GetImageObject(ImageName)
{
  var oImage = new Object;
  if (document.layers)
    { oImage = null;
    for( i = 0; i < document.layers.length; i++ )
    { for( j = 0; j < document.layers[i].document.images.length; j++ )
      { if( document.layers[i].document.images[j].name == ImageName )
        { oImage = document.layers[i].document.images[j];
        }
      }
    }
  }
  else if (document.all)
  { oImage = document.all(ImageName);
  }
  else
  { oImage = null;
  }
  return oImage;
}

// Get image object based on name depending on DOM
function DMenu_SetItemTop(oMenu, newTop)
{
  if (document.layers)
  { oMenu.top = newTop;
  }
  else if (document.all)
  { oMenu.pixelTop = newTop;
  }

  else
  { oMenu.top = newTop + "px";
  }
}

// Set Folder Icon Class Property
//Note: as class properties, all Dmenu instances will share the same icons.
//To support multiple menus with different icons, these should be changed
//to instance variables.
function DMenu_DefineFolderIcon(pGif)
{
  DMenu.imgfolder.src = pGif;
}

// Set Open Folder Icon Class Property
function DMenu_DefineOpenFolderIcon(pGif)
{
  DMenu.imgofolder.src = pGif;
}

// Set Closed Folder Icon Class Property
function DMenu_DefineClosedFolderIcon(pGif)
{
  DMenu.imgcfolder.src = pGif;
}

// Define functions as a class methods
DMenu.SetItemTop = DMenu_SetItemTop;
DMenu.GetMenuObject = DMenu_GetMenuObject;
DMenu.GetStyleObject = DMenu_GetStyleObject;

//**************************************************************************
// Menu Item
//**************************************************************************
// Menu Item Constructor
function MenuItem( pParent, pId, pIconId, pVisible )
{
  this.Type = "MenuItem";
  this.Id = pId;
  this.Visible = pVisible;
  this.Parent = pParent;
  this.domMenuObject = DMenu_GetMenuObject(pId);
  this.domStyleObject = DMenu_GetStyleObject(pId);
  if( this.domStyleObject == null )
  { alert("MenuItem: Missing or invalid MenuId: " + pId);
  }
  else
  { this.Parent.AddMenuItem( this );
  }
}

// Menu:GetId
MenuItem.prototype.GetId = function()
{
  return this.Id;
}

// Menu:GetHeight
DMenu.prototype.GetHeight = function( pMenuObject )
{
  var MenuHeight;
  if (document.layers)
  { MenuHeight = pMenuObject.clip.height;
  }
  else if (document.all)
  { MenuHeight = pMenuObject.offsetHeight;
  }
  else
  { MenuHeight = parseInt(pMenuObject.style.height);
  }
  return MenuHeight;
}

//**************************************************************************
// Sub Menu
//**************************************************************************
// Sub Menu Constructor
function SubMenu( pParent, pMenuItem, pId, pVisible )
{
  this.Type = "SubMenu";
  this.Id = pId;
    this.Visible = pVisible;
  this.Parent = pParent;
  this.MenuItem = pMenuItem;
  this.domMenuObject = DMenu_GetMenuObject(pId);
  this.domStyleObject = DMenu_GetStyleObject(pId);
  if( this.Parent == null )
  { alert("MenuItem: Missing or invalid Parent.");
  }
  else if( this.domStyleObject == null )
  { alert("SubMenu: Missing or invalid MenuSubName: " + pId);
  }
  else
  { this.Parent.AddMenuItem( this );
  }
}

//*************************************************************************
// End of Dynamic Menu Class Definition
//*************************************************************************


