var nmb=0;
var divs = null;
var spans = null;
var zindex=100;

//////////////////////////////
//Функции создания объектов //
//////////////////////////////
function SafeString(str){
//функция SafeString заменяет символы > и < строки str на &gt и &lt,
//чтобы браузер не интерпретировал их как часть тэгов
 r = str.replace(/>/ig, "&gt");
 r = r.replace(/</ig, "&lt");
 return r;
}
function MenuItem(title,anchor,alt){
  this.objname="item";
  this.owner=null;
  this.name=SafeString(title);
  this.idname="n"+(nmb++);
  this.a=anchor;
  this.alt=SafeString(alt);
}
function MenuBox(name, anchor, alt){
  this.objname="box";
  this.owner=null;
  this.name=SafeString(name);
  this.idname="n"+(nmb++);
  this.alt=SafeString(alt);
  this.a=anchor;
  this.count = 0;
  this.item = new Object;
  this.addItem = addMenuItem;
  this.getItem = getMenuItem;
}
function addMenuItem(item){
  item.owner=this;
  this.item[this.count++]=item;
}

function getMenuItem(name){
  for (var i=0; i<this.count; i++){
   p = this.item[i];
   if (p.idname==name) return p;
   if (p.objname == "box"){
      p2 = p.getItem(name);
      if (p2!=null) return p2;
  }}
return null;
}
function MenuBar(){
  this.objname="bar";
  this.owner=null;
  this.count = 0;
  this.name = "MMB";
  this.item = new Object;
  this.addMenu = addSubMenu;
  this.getSubMenu = getSubMenu;
  this.getMenuItem = getMenuItem;
}
function addSubMenu(menu){
  menu.owner=this;
  this.item[this.count++]=menu;
}

function getSubMenu(name){
 for (var i=0; i<this.count; i++){
  p = this.item[i];
  if (p.idname==name) return p;
  if (p.objname == "box"){
    p2 = p.getItem(name);
    if (p2!=null)
       if (p2.objname=="box") return p2;
  }}
return null;
}
//////////////////////////////////////////////////
//Функции создания меню (записи в html-документ //
//////////////////////////////////////////////////
function ConstructMenuBox(mb){
  if (mb.objname!="box"){alert("Error: mb.objname!=\"box\". It's "+
     mb.objname); return;}
  zindex++;
  if (mb.owner==null) alert("Warning! "+mb.name + " don't have the owner");
  var strsm="<DIV class=submenu id=submenu name="+
  mb.idname+" style='z-index:"+zindex+"; position:absolute; width:1000px; visibility:hidden;'>";
   for (var j=0; j<mb.count; j++){
    var p = mb.item[j];
    if (p.objname == "box") ConstructMenuBox(p);
    var ttl = p.idname;
    var label = p.name;
    var alt = p.alt;
    strsm+="<span class=nonact id=menupunkt name="+
       ttl+" title=\"" +alt+"\"> "+label+" </span><br>";
  }
  strsm += "</DIV>";
  document.writeln(strsm);
  zindex--;
}
function ConstructMenu(menu)
{
  str = "<DIV class=menu id=MainMenuBar style=position:absolute;>";
  for (var i=0; i<menu.count; i++){
   var m=menu.item[i];
   str+="<span class=menu title=\""+m.alt+"\" id=submenu name='"+m.idname+
   "'> "+m.name+" </span>";
   if ((i+1)<menu.count) str+="<span class=menudelim></span>";
   ConstructMenuBox(m);
 }
 str += "</DIV>";
 document.writeln(str);
 InitMenu(menu);
}
function InitMenu(menu)
{
  divs = window.document.all.tags("div");
  if (divs==null){alert("Collection \"DIV\" don't aviable");return;}
  //spans = document.all.tags("SPAN");
  //if (spans==null){alert("Collection \"SPAN\" don't aviable"); return;}
  for (var k=0; k<divs.length; k++){
    var m=null;
    var curdiv=null;
    if ((m=menu.getSubMenu(divs[k].name))==null) continue;
    else {
       curdiv=divs[k];
       maxw=0;
       for (var j=0; j<m.count; j++){
          var p = m.item[j];  
          //var curspan = null;
          //ttl=p.idname;
          //curspan=document.all(ttl);
          //for (var l=0; l<spans.length; l++)
          //  if (spans[l].name==ttl){curspan=spans[l]; break;}
          //if (curspan==null){alert("object:"+ttl+" = null"); continue;}
          w =p.name.length*7+5;
	  if (w>maxw) maxw=w;
       }
       for (var j=0;j<m.count;j++){
	  var p=m.item[j];
          var curspan=null;
	  ttl=p.idname;
          spans=curdiv.childNodes;
          if (spans==null) {alert("Spans is bad");return;}
          for (var l=0;l<spans.length;l++)
	    if (spans.item(l).name==ttl) {curspan=spans.item(l);break;}
	  if (curspan==null){continue;}
	  curspan.style.width=maxw;
	}
	curdiv.style.width=maxw;
    }}
}

