////////////////////////////////////////////////////////////
// Global declarations

var TWX_Menu_IdPfx = "twx_menu_";
var TWX_Menu_TypeHor = "twx_menu_type_hor";
var TWX_Menu_TypeVer = "twx_menu_type_ver";
var TWX_Menu_ActionAjax = "twx_menu_action_ajax";
var TWX_Menu_ActionScript = "twx_menu_action_script";

var TWX_AJAX_MenuArticle = "TWX_AJAXCommand_MenuArticle";
var TWX_AJAX_EditMenuArticle = "TWX_AJAXCommand_EditMenuArticle";

var TWX_GlobalMenuEnable = true;

var TWX_AllMenus = new Array();

////////////////////////////////////////////////////////////
// Main menu class

function TWX_CMenu(mm_menuobjectname, mm_type, mm_parent, mm_name, mm_desc, mm_link, mm_img, mm_simg)
{
   this.name  = mm_name;
   this.desc  = mm_desc;
   this.img   = mm_img; 
   this.simg  = mm_simg; 
   this.counter = 0;
   this.items = new Array();
   this.selected = "";
   this.menutype = mm_type;
   this.parent = mm_parent;
   this.menuobjname = mm_menuobjectname;
   this.menuaction = TWX_Menu_ActionAjax;
   this.link = mm_link;
   
   if(this.menuobjname == "" && this.parent)
   {
      obj = this.parent;
      while(obj)
      {
         if(obj.menuobjname != "")
         {
            this.menuobjname = obj.menuobjname;
            break;
         }  
         obj = obj.parent;
      }
   }
}

TWX_CMenu.prototype.SetAction = function(mm_action) 
{
    this.menuaction = mm_action;
}

TWX_CMenu.prototype.Set = function(mm_obj_name, mm_table_class, mm_class, mm_class_sel, mm_class_over, mm_class_space) 
{
   this.obj_name = mm_obj_name;
   this.class_name = mm_class;
   this.class_name_sel = mm_class_sel;
   this.class_name_over = mm_class_over;
   this.table_class = mm_table_class;
   this.class_space = mm_class_space;
}

TWX_CMenu.prototype.SetImagesSupport = function(mm_img_obj_name, mm_simg_obj_name, mm_parent_img, mm_folder_img, mm_http_img, mm_red_img)
{
   this.img_obj_name = mm_img_obj_name;
   this.simg_obj_name = mm_simg_obj_name;
   this.parent_img = mm_parent_img;
   this.folder_img = mm_folder_img;  
   this.http_img = mm_http_img;   
   this.red_img = mm_red_img;   
}

TWX_CMenu.prototype.SetImagesHide = function(mm_img_hide, mm_simg_hide)
{
   this.img_hide = mm_img_hide;
   this.simg_hide = mm_simg_hide;  
}

TWX_CMenu.prototype.SetSelectionObjects = function(mm_selection_info, mm_selection_body)
{
   this.selection_info = mm_selection_info;
   this.selection_body = mm_selection_body;
}

TWX_CMenu.prototype.SetCallBack = function(mm_function_name)
{
   this.function_name = mm_function_name;
}

TWX_CMenu.prototype.Update = function() 
{
  var html;
  var obj;

  if(this.menutype == TWX_Menu_TypeHor)
  {
      html = '<table class="' + this.table_class + '"><tr>';
         
      if(this.parent != null && this.obj_name == this.parent.obj_name) 
      {
         html += '<td class="' + this.class_name + '" onclick="' + this.menuobjname + '.OnSelect(\'' + this.parent.name + '\')" onmouseover="this.className=\'' + this.class_name_over + '\'" onmouseout="this.className=\'' + this.class_name + '\'">' + '<a><img src="' + this.parent_img + '"></a>' + '</td>';
         html += '<td class="' + this.class_space + '"></td>';
      }
      for(i = 0; i < this.items.length; i++)
      {   
          var img = "";
      
          if(this.selected && this.items[i].name == this.selected.name)
             //html += '<td class="' + this.class_name_sel + '" onclick="' + this.menuobjname + '.OnSelect(\'' + this.items[i].name + '\')" onmouseover="this.className=\'' + this.class_name_over + '\'" onmouseout="this.className=\'' + this.class_name_sel + '\'">' + this.items[i].desc + '</td>';
             html += '<td class="' + this.class_name_sel + '" onclick="' + this.menuobjname + '.OnSelect(\'' + this.items[i].name + '\')">';
          else   
             html += '<td class="' + this.class_name + '" onclick="' + this.menuobjname + '.OnSelect(\'' + this.items[i].name + '\')" onmouseover="this.className=\'' + this.class_name_over + '\'" onmouseout="this.className=\'' + this.class_name + '\'">';
             
          if(this.items[i].link && this.items[i].link != "")
          {            
              if(this.items[i].link.indexOf("http:") >= 0 && this.items[i].http_img && this.items[i].http_img != "")         
                 img = '<a><img src="' + this.items[i].http_img + '"></a>';                 
              else if(this.items[i].red_img && this.items[i].red_img != "")
                 img = '<a><img src="' + this.items[i].red_img + '"></a>';
              else
                 img = '';                 
          }
          else if(this.items[i].items && (this.items[i].items.length > 0) && (this.obj_name == this.items[i].obj_name) &&  (this.items[i].obj_name == this.items[i].items[0].obj_name))
             img = '<a><img src="' + this.items[i].folder_img + '"></a>';          
          else
             img = '';
             
          if(img == '')
             html += this.items[i].desc;
          else
             html += this.items[i].desc + '&nbsp;' + img;   
             
          html += '</td>';    
          html += '<td class="' + this.class_space + '"></td>';
      }
    
      html += '</tr></table>';
  }
  if(this.menutype == TWX_Menu_TypeVer)
  {
      html = '<table>';
    
      html += '<tr><td class="' + this.class_space + '"></td></tr>';
      html += '<tr><td class="' + this.class_space + '"></td></tr>';

      if(this.parent != null && this.obj_name == this.parent.obj_name && this.items.length > 0) 
      {
          html += '<tr><td class="' + this.class_name + '" style="text-align: center;" onclick="' + this.menuobjname + '.OnSelect(\'' + this.parent.name + '\')" onmouseover="this.className=\'' + this.class_name_over + '\'" onmouseout="this.className=\'' + this.class_name + '\'">' + '<a><img src="' + this.parent_img + '"></a>' + '</td></tr>';
          html += '<tr><td class="' + this.class_space + '"></td></tr>';          
      }
                   
                   
      if(this.items.length > 0)
      {
        for(i = 0; i < this.items.length; i++)
        {
            var img = "";
            
            html += '<tr>';
            if(this.selected && this.items[i].name == this.selected.name)
               html += '<td class="' + this.class_name_sel + '" onclick="' + this.menuobjname + '.OnSelect(\'' + this.items[i].name + '\')">';             
            else   
               html += '<td class="' + this.class_name + '" onclick="' + this.menuobjname + '.OnSelect(\'' + this.items[i].name + '\')" onmouseover="this.className=\'' + this.class_name_over + '\'" onmouseout="this.className=\'' + this.class_name + '\'">';
            
            if(this.items[i].link && this.items[i].link != "")
            {            
                if(this.items[i].link.indexOf("http:") >= 0 && this.items[i].http_img && this.items[i].http_img != "")         
                   img = '<img src="' + this.items[i].http_img + '">';                 
                else if(this.items[i].red_img && this.items[i].red_img != "")
                   img = '<img src="' + this.items[i].red_img + '">';
                else
                   img = '';                 
            }
            else if(this.items[i].items && (this.items[i].items.length > 0) && (this.obj_name == this.items[i].obj_name) &&  (this.items[i].obj_name == this.items[i].items[0].obj_name))
               img = '<img src="' + this.items[i].folder_img + '">';          
            else
               img = '';
            
            if(img == '')
               html += this.items[i].desc;
            else
               html += '<a style="vertical-align: middle;">' + this.items[i].desc + '&nbsp;</a><a style="vertical-align: middle;">' + img + '</a>';

            html += '</td></tr>'; 
            html += '<tr><td class="' + this.class_space + '"></td></tr>';          
        }
      }
    
      html += '</table>';
  }

   if(this.items.length > 0)
   {      
      obj = document.getElementById(this.obj_name);   
      obj.innerHTML = html;        
   }  
      
   
   if(this.parent && this.parent.selected && this.parent.selected.name == this.name)
   {
       if(this.img_obj_name && this.img && this.img != "")
       {
           obj = document.getElementById(this.img_obj_name);
           if(obj)
              obj.innerHTML = '<img src="' + this.img + '">';
       }
       
       if(this.simg_obj_name && this.simg && this.simg != "")
       {
           obj = document.getElementById(this.simg_obj_name);
           if(obj)
              obj.innerHTML = '<img src="' + this.simg + '">';
       }    
    }
}

TWX_CMenu.prototype.Show = function() 
{
   this.Update();
}

TWX_CMenu.prototype.Hide = function() 
{
   if(this.items.length > 0)
   {
      obj = document.getElementById(this.obj_name);   
      obj.innerHTML = ""; 
   }      
}

TWX_CMenu.prototype.AddItem = function(mm_name, mm_desc, mm_link, mm_img, mm_simg) 
{
    var i;
    for(i = 0; i < this.items.length; i++)
        if(this.items[i].name == mm_name)
           return; 

    this.items[this.counter] = new TWX_CMenu("", TWX_Menu_TypeVer, this, mm_name, mm_desc, mm_link, mm_img, mm_simg)
    if(this.counter == 0)
    {
    }
    this.counter++;
    
    return this.items[this.counter - 1];
}

TWX_CMenu.prototype.Find = function(mm_name, mm_recursive) 
{
    var i;
    for(i = 0; i < this.items.length; i++)
    {
        if(this.items[i].name == mm_name)
           return this.items[i]; 
        else if(mm_recursive == true)
        {
           var o = this.items[i].Find(mm_name, mm_recursive);
           if(o)
              return o;
        }           
    }
           
    return null;
}

TWX_CMenu.prototype.DeSelectChildren = function() 
{
    var i;
    this.selected = null; 
    for(i = 0; i < this.items.length; i++)
    { 
        this.items[i].selected = null; 
        this.items[i].DeSelectChildren();
        this.items[i].Hide(); 
    }
    this.Update();
}

TWX_CMenu.prototype.Enable = function(mm_enable) 
{
}


TWX_CMenu.prototype.Select = function(mm_nodeselect) 
{    
   if(this.parent)
   {
     this.parent.selected = this;
     this.parent.Select(true);
     this.parent.Update();
   }
   
   if(!mm_nodeselect)
      this.DeSelectChildren();

   this.Update();
}

TWX_CMenu.prototype.SelectionString = function() 
{    
    var selstr = "";
            
    if(this.parent)
    {
       selstr = this.parent.SelectionString();
       if(selstr != "")
          selstr += " / " + this.desc;
       else
          selstr = this.desc;
    }
    else
       selstr = this.desc;
            
    return selstr;
}

TWX_CMenu.prototype.SelectFirstChild = function() 
{
    var selitem = this.selected;
    while(selitem)
    {
       if(selitem.selected)
          selitem = selitem.selected;
       else
          break;    
    }

    if(selitem)
    {
       if(selitem.items && selitem.items.length > 0)
       {
          var i;
          for(i = 0; i < selitem.items.length; i++)
              if(!selitem.items[i].items || selitem.items[i].items.length == 0)
              {
                  if(!selitem.items[i].link || selitem.items[i].link == "")
                  {
                      if(!selitem.selected)                     
                          this.OnSelect(selitem.items[i].name);
                      return;
                  }
             }
       }      
    }    
}

TWX_CMenu.prototype.MapString = function(mainobj, tab) 
{    
    var i;
    var s = "";
    for(i = 0; i < this.items.length; i++)
    {
       if(tab == "")
          s += "<b>";
       s += tab + "<a href=\"javascript:" + mainobj + ".OnSelect(\'" + this.items[i].name + "\');\">" + this.items[i].desc + "</a><br>";
       if(tab == "")
          s += "</b>";

       s += this.items[i].MapString(mainobj, tab + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");       
    }
           
    if(this.items.length > 0)
       return s + "<br>";
    else
       return s;
}

////////////////////////////////////////////////////////////
// Main menu static

TWX_CMenu.prototype.OnSelect = function(mm_name, mm_edit, mm_article) 
{ 
  if(TWX_GlobalMenuEnable == false)
      return;

  if(mm_name == "0")
  {
     this.DeSelectChildren();
     return;
  }

  var selitem = this.Find(mm_name, true);
  
  if(!selitem)
  {
      if(mm_article)
      {
         TWX_AJAX_Process(this.selection_body, mm_edit ? TWX_AJAX_EditMenuArticle : TWX_AJAX_MenuArticle, mm_name, "", "");
         return;
      }
      else
      {
         if(this.items.length == 0)
            return;
         selitem = this.items[0];
         mm_name = this.items[0].name;
      }
  }
  
  if(selitem)
  {
     if(selitem.link && selitem.link != "")
     {
        if(selitem.link.indexOf("http:") >= 0)
        {
            window.open(selitem.link); //, 'mywindow', 'width=400, height=200, toolbar=yes, location=yes, directories=yes, status=yes, menubar=yes, scrollbars=yes, copyhistory=yes resizable=yes');
            return;
        }
        if((selitem.link.indexOf("javascript:") >= 0) || (selitem.link.indexOf("js:") >= 0))
        {
            eval(selitem.link.split(":")[1]);
            return;
        }
     
        mm_name = selitem.link;
        selitem = this.Find(selitem.link, true);        
        if(!selitem)
            return;         
     }

     var i;
     for(i = 0; i < TWX_AllMenus.length; i++)
         if(TWX_AllMenus[i].menuobjname != this.menuobjname)
            eval(TWX_AllMenus[i].menuobjname + ".OnSelect(\"0\")");
         
     selitem.Select();     
     
   if(selitem.items.length == 0)
   {
      if(selitem.parent.obj_name != selitem.obj_name)
      {
          obj = document.getElementById(selitem.obj_name);   
          obj.innerHTML = "";
      }        
   }          
     
     if(this.selection_info)
     {
        obj = document.getElementById(this.selection_info);
        if(obj)
        {
           obj.innerHTML = selitem.SelectionString();
           if(TWX_USER)
              obj.innerHTML += "  (" + TWX_USER + ")";
        } 
     }
     
     if(this.function_name)
     {
        callback = this.function_name + "(\"" + mm_name + "\", \"" + selitem.desc + "\", \"" + selitem.SelectionString() + "\")";
        if(eval(callback))
           return;        
     }     
     if(this.selection_body)
     {
        if(this.menuaction == TWX_Menu_ActionAjax)
        {
           if(TWX_AJAX_XMLHttp)
           {                 
              TWX_AJAX_Process(this.selection_body, mm_edit ? TWX_AJAX_EditMenuArticle : TWX_AJAX_MenuArticle, mm_name, "", ""); 
           }
        }
     }
  }
  else
  {
     this.DeSelectChildren();
  }
}

