//Global System Menu used for internal job.
var $Menu;

//-----------------------------------------------------------------------
// MENU OBJECT
//-----------------------------------------------------------------------
function Menu()
{
// Atributes
this.Items= new Array();
this.reference = new Array();
//Style Atributes
this.normalStyle=new Array();  //Style Class applied when item is created and/or unselected
this.selectedStyle=new Array();//Style applied when item is selected
this.ImageDir="";              //Image Directory.
this.initExpanded=false;       //true: Inicially Expanded.
// Methods
this.AddNode= mnuAddNode;
this.AddLeaf= mnuAddLeaf;
this.Draw= mnuInitDraw;
this.Run= mnuRun;
this.Action= mnuAction;
this.getLevel= mnugetlevel;
this.getItem= mnugetitem;
this.getDefaultNormalStyle = mnuDNS;
this.getDefaultSelectedStyle = mnuDSS;
this.setLevelStyle = mnuSLS;
}
//-----------------------------------------------------------------------
function mnuAddNode(P_Parent,P_Name,P_Text,P_imgExpanded,P_imgCollapsed)
{
   var intError=0;
   //Errors Control.
   if (P_imgExpanded == "") {
      alert("Error MNU001 - No Image Expanded Node");
      intError++;
   }
   if (P_imgCollapsed == "") {
      alert("Error MNU002 - No Image Collapsed Node");
      intError++;
   }
   if (intError == 0) {
      var intLevel= this.getLevel(P_Parent) + 1;      
      var nStyle=((this.normalStyle[intLevel])?this.normalStyle[intLevel]:this.getDefaultNormalStyle());
	  var sStyle=((this.selectedStyle[intLevel])?this.selectedStyle[intLevel]:this.getDefaultSelectedStyle());
      this.reference[P_Name.toLowerCase()] = this.Items.length;	  
      this.Items[this.Items.length]= new Node(P_Parent,P_Name,P_Text,nStyle, sStyle,P_imgExpanded,P_imgCollapsed,this.ImageDir,this.initExpanded,intLevel);
   }
}
//-----------------------------------------------------------------------
function mnuAddLeaf(P_Parent,P_Text,P_Link,P_Target,P_Status,P_Image)
{
   var intError=0;
   
   if (P_Image == "") {
      alert("Error MNU003 - No Image Leaf");
      intError++;
   }
   if (intError == 0) {
      var intLevel= this.getLevel(P_Parent) + 1;	  
      var nStyle=((this.normalStyle[intLevel])?this.normalStyle[intLevel]:this.getDefaultNormalStyle());
      var sStyle=((this.selectedStyle[intLevel])?this.selectedStyle[intLevel]:this.getDefaultSelectedStyle());
      var leafName = "leaf" + this.Items.length;
      this.reference[leafName] = this.Items.length;
      this.Items[this.Items.length]= new Leaf(P_Parent,leafName,P_Text,nStyle,sStyle,P_Link,P_Target,P_Status,P_Image,this.ImageDir,intLevel);
   }
}
//-----------------------------------------------------------------------
//Get the Default Normal Style
function mnuDNS(p_level) {
         return "defaultNodeStyle";
}
//-----------------------------------------------------------------------
//Get the Default Selected Style
function mnuDSS(p_level) {
         return "defaultNodeStyleHL";
}
//-----------------------------------------------------------------------
function mnuAction(P_Name) {
   var item = this.getItem(P_Name);   
   //Searching for the Node.
   if (item != undefined) {
      if (item.Type == "node"){
           //The Node was found!!.
           item.Action();
		   if (item.Expanded) item.fullDraw(this.Items);  
      }
   }
}
//-----------------------------------------------------------------------
function mnuInitDraw()
{
   document.writeln("<DIV id=\"root\"></DIV>");
   this.AddNode("null","root","#","#","#");
   this.getItem("root").fullDraw(this.Items);
}
//-----------------------------------------------------------------------
/*function mnuAction(P_obj,P_Expanded)
{
   var i;
   var nodeName = P_obj.Name.toLowerCase();

   document.getElementById(nodeName).innerHTML = "";
   document.getElementById("img" + nodeName).src = P_obj.getImage();
   if (P_Expanded) this.fullDraw(nodeName);

}
*///-----------------------------------------------------------------------
function mnuRun()
{
    $Menu= new Menu();
    $Menu.Index=this.Index;
    $Menu.normalStyle=this.normalStyle;
    $Menu.selectedStyle=this.selectedStyle;
    $Menu.ImageDir=this.ImageDir;
    $Menu.initExpanded=this.initExpanded;
    $Menu.reference = this.reference;
    $Menu.Items = this.Items;
    $Menu.Draw();
}
//-----------------------------------------------------------------------
function mnugetlevel(P_Name)
{
    var i=0;
    var rtn=0;
    var item = this.getItem(P_Name);
    if (item != undefined) { rtn=item.level; }
    return rtn;
}
//-----------------------------------------------------------------------
function mnugetitem(P_Name)
{
    var i=0;    
	var rtn = this.Items[this.reference[P_Name.toLowerCase()]];
    return rtn;
}
//-----------------------------------------------------------------------
//Set Level Style
function mnuSLS(P_Level,P_normalStyle,P_selectedStyle)
{
    if (P_Level > -1)
    {
    	if (P_normalStyle != "") { this.normalStyle[P_Level]=P_normalStyle; }
    	if (P_selectedStyle != "") { this.selectedStyle[P_Level]=P_selectedStyle; }
    }
}
//-----------------------------------------------------------------------
// NODE OBJECT
//-----------------------------------------------------------------------
function Node(P_Parent,P_Name,P_Text,P_nStyle,P_sStyle,P_imgExpanded,P_imgCollapsed,P_ImageDir,P_initExpanded,P_Level)
{
// Atributes
this.Parent=P_Parent.toLowerCase();
this.Name=P_Name.toLowerCase();
this.Text=P_Text;
this.ImageDir=P_ImageDir;        //Image Directory.
this.Type="node";
this.level=P_Level;
//Style Atributes
this.normalStyle=P_nStyle;       //Style class.
this.selectedStyle=P_sStyle;       //Style class.
this.imgExpanded=P_imgExpanded;
this.imgCollapsed=P_imgCollapsed;
this.Expanded=P_initExpanded;
// Methods
this.Action = nodeAction;
this.Draw= nodeDraw;
this.fullDraw= nodeFullDraw;
this.getImage= nodeImage;
}
//-----------------------------------------------------------------------
function nodeDraw(items)
{
   var Imagen = this.getImage();
   var html = "<li id=\"node" + this.Name + "\" class=\"" + this.normalStyle + "\" onClick=\"javasript:ActivateNode('" + this.Name + "');\" ";
   html += "onMouseOver=\"javascript:nodeOver('" + this.Name + "');\" ";
   html += "onMouseOut=\"javascript:nodeOut('" + this.Name + "');\">";
   html += "&nbsp;<img id=\"img" + this.Name + "\" src=\"" + Imagen + "\" align=\"absMiddle\">&nbsp;" + this.Text + "</li>";
   html += "<SPAN id=\"" + this.Name + "\"><UL>";
   if (this.Expanded) {
		for(var i in items) {
			if (this.Name == items[i].Parent) html += items[i].Draw(items);
		}		
   }
   html += "</UL></SPAN>";
   return html;
}
//-----------------------------------------------------------------------
function nodeFullDraw(items)
{   
   var html = "<UL>";
 
   for(var i in items) {   
        if (this.Name == items[i].Parent) html += items[i].Draw(items);
   }
   html += "</UL>"
   document.getElementById(this.Name).innerHTML = html;
}
//-----------------------------------------------------------------------
function nodeAction() {
  this.Expanded = !(this.Expanded);
  document.getElementById(this.Name).innerHTML = "";
  document.getElementById("img" + this.Name).src = this.getImage();    
}
//-----------------------------------------------------------------------
function nodeImage() {
	
	var Imagen = (this.Expanded)?this.imgExpanded:this.imgCollapsed;
	var ret = this.ImageDir + Imagen;
	return ret;
}
//-----------------------------------------------------------------------
// LEAF OBJECT
//-----------------------------------------------------------------------
function Leaf(P_Parent,P_Name,P_Text,P_nStyle,P_sStyle,P_Link,P_Target,P_Status,P_Image,P_ImageDir,P_Level)
{
//Atributes
this.Parent=P_Parent.toLowerCase();
this.Name=P_Name.toLowerCase();
this.Text=P_Text;
this.normalStyle=P_nStyle;    //Normal Style Class.
this.selectedStyle=P_sStyle;  //Selected Style Class.
this.level=P_Level;
this.Link=P_Link;
this.Target=P_Target;
this.Status=P_Status;
this.Image=P_Image;           //Child Image.
this.ImageDir=P_ImageDir;     //Image Directory.
this.type="leaf";
//Methods
this.Draw= leafDraw;
}
//-----------------------------------------------------------------------
function leafDraw(items)
{	
   var html = "<li id=\"" + this.Name + "\" class=\"" + this.normalStyle + "\" ";
       html += "onClick=\"window.open('" + this.Link + "','" + this.Target + "')\" ";
       html += "onMouseOver=\"javascript:leafOver('" + this.Name + "');\" ";
       html += "onMouseOut=\"javascript:leafOut('" + this.Name + "');\">";
       html += "&nbsp;<img src=\"" + this.ImageDir + this.Image + "\" align=\"absMiddle\">&nbsp;" + this.Text + "</li>";	   
   return html;
}
//-----------------------------------------------------------------------
//   GLOBAL FUNCTIONS
//-----------------------------------------------------------------------
var $StatusText="";

function nodeOver(P_name) {
      
   var item = $Menu.getItem(P_name);   
   var hitem = document.getElementById("node" + P_name);   
   hitem.className = item.selectedStyle;
}
//-----------------------------------------------------------------------
function nodeOut(P_name) {		
   var item = $Menu.getItem(P_name);
   var hitem = document.getElementById("node" + P_name);   
   hitem.className = item.normalStyle;
}
//-----------------------------------------------------------------------
function leafOver(P_name) {
      
   var item = $Menu.getItem(P_name);   
   var hitem = document.getElementById(P_name);   
   $StatusText=item.Status;
   leafStatusBar();   
   hitem.className = item.selectedStyle;
}
//-----------------------------------------------------------------------
function leafOut(P_name) {		
   var item = $Menu.getItem(P_name);
   var hitem = document.getElementById(P_name);   
   hitem.className = item.normalStyle;
}
//-----------------------------------------------------------------------
function leafStatusBar()
{
    if ($StatusText != "") {
		window.status = $StatusText;
        setTimeout("leafStatusBar()",15)
    }
}
//-----------------------------------------------------------------------
function ActivateNode(P_Name) { $Menu.Action(P_Name); }
//-----------------------------------------------------------------------

