// Двухуровневое меню
// (C) 2001 А.А.Дуванов
// --------------------


// Конструктор
// ----------------------------
function cmenuRU(
                 name,       // имя экземпляра
                 widthpic,   // ширина картинок меню
                 heightpic,  // высота картинок меню
                 defmenu     // определение меню
                )
{

  this.name        = name;
  this.widthpic    = widthpic;
  this.heightpic   = heightpic;
  this.defmenu     = defmenu;

  this.bgcolor          = "#EEE5DB";
  this.borderLeftColor  = "white";
  this.borderRightColor = "gray";

  this.show             = _showcmenuRU; // прорисовка меню
  this.click0           = _click0;      // обработка клика на верхнем уровне
  this.click1           = _click1;      // обработка клика на нижнем уровне
  this.clearm           = _clearm;      // сброс всех подменю
  this.moveout0         = _moveout0;    // курсор сошел с меню
  this.moveout1         = _moveout1;    // курсор сошел с блока подменю
  this.switchi          = _switchi;     // переключения позиций меню

  this.emptysrc         = "../pic/empty.gif"; // путь к пустой картинки
  this.d                = 0; // расстояние между картинками уровня 0
  this.h                = 0; // расстояние между картинками уровня 1
  this.h0               = 10; // отступ для меню нижнего уровня
  this.padding          = 10; // отступ от краев меню уровня 0

  this.isvisible        = new Array(); // открыто ли подменю на i-ой позиции

  for(var i=0; i<this.defmenu.length;i++) this.isvisible[i] = false;

}


// Переключения позиций меню
// ---------------------------------------------
function _switchi(n)
{
  var item=-1;
  for(var i=0; i<this.defmenu.length;i++)
    if(this.isvisible[i]) { item = i; break; }
  if(item == -1 || item == n) return;
  if(this.defmenu[n][2] != 0) this.click0(n);
}

// Сброс видимости всех подменю
// ---------------------------------------------
function _clearm()
{
  for(var i=0; i<this.defmenu.length;i++)
  {
    if (this.defmenu[i][2] != 0)
    {
      this.isvisible[i] = false;
      eval("document.all['div"+this.name+i+"'].style.visibility='hidden'");
      for(var j=0; j<this.defmenu[i][3].length;j++)
        eval("document.all['"+this.name+i+j+"'].style.visibility='hidden'");
    }
  }
}

// Курсор сошел с блока подменю
// ----------------------------
function _moveout0()
{
  if (event.toElement != null)
  {
    var t = event.toElement.id;
    if (t.indexOf("div") == -1 && eval("t.indexOf('"+this.name+"')") == -1)
      this.clearm();
  }
}

// Курсор сошел с блока подменю
// ----------------------------
function _moveout1(n)
{
  if (event.toElement != null)
  {
    var t = event.toElement.id;
    if ( eval("t.indexOf('"+this.name+n+"')") == -1)
      this.clearm();
  }
  else this.clearm();
}

// Обработка клика на верхнем уровне в позиции n
// ---------------------------------------------
function _click0(n)
{
  var t = this.isvisible[n];
  this.clearm();
  if (this.defmenu[n][2] == 0) eval(this.defmenu[n][3]);
  else
  {
    var v = t ? "'hidden'":"'visible'";
    this.isvisible[n]=!t;
    eval("document.all['div"+this.name+n+"'].style.visibility="+v);
    for(var j=0; j<this.defmenu[n][3].length;j++)
      eval("document.all['"+this.name+n+j+"'].style.visibility="+v);
  }
}

// Обработка клика на нижнем уровне в позиции n1 верхнего уровня n0
// ---------------------------------------------
function _click1(n0, n1)
{
  eval(this.defmenu[n0][3][n1][2]);
}


// Вывод меню
// ----------

function _showcmenuRU()
{
  var str = "<DIV  id=div0"+this.name+i+" onmouseout=\""+this.name+".moveout0()\"";
      str += " style=\"position:relative;border-style:solid;border-width:1px";
      str += ";padding:"+this.padding+"px";
      str += ";width:"+this.defmenu.length*(this.widthpic+this.d)+"px";
      str += ";height:"+parseInt(this.heightpic+2*this.h)+"px";
      str += ";background:"+this.bgcolor;
      str += ";border-color:"+this.borderRightColor+";\"><NOBR>";

  for(var i=0; i<this.defmenu.length;i++)
  {
    str += "<IMG style=\"position:relative;";
    if (this.defmenu[i][2] == 0) str += "cursor:hand;";
    str += "border-style:solid;border-width:1px;border-left-color:"+this.bgcolor;
    str += ";border-top-color:"+this.bgcolor;
    str += ";border-right-color:"+this.bgcolor;
    str += ";border-bottom-color:"+this.bgcolor+"\" ";
    str += " onmouseover=\""+this.name+".switchi("+i+"); this.style.borderLeftColor=this.style.borderTopColor='"+this.borderLeftColor;
    str += "';this.style.borderRightColor=this.style.borderBottomColor='"+this.borderRightColor+"'\"";
    str += " onmouseout=\"this.style.borderLeftColor=this.style.borderTopColor=this.style.borderRightColor=this.style.borderBottomColor='"+this.bgcolor;
    str += "';this.style.left=this.style.top='0px'"+"\"";
    str += " onmousedown=\"this.style.borderLeftColor=this.style.borderTopColor='"+this.borderRightColor;
    str += "';this.style.borderRightColor=this.style.borderBottomColor='"+this.borderLeftColor;
    str += "';this.style.left=this.style.top='1px'"+"\"";
    str += " onmouseup=\"this.style.borderLeftColor=this.style.borderTopColor=this.style.borderRightColor=this.style.borderBottomColor='"+this.bgcolor;
    str += "';this.style.left=this.style.top='0px'"+"\"";
    str += " onclick=\""+this.name+".click0("+i+")\" ";
    str += " id="+this.name+i;
    str += " src="+this.defmenu[i][0]+" width="+this.widthpic+" height="+this.heightpic;
    str += " alt=\""+this.defmenu[i][1]+"\" border=0 hspace=0 vspace=0>";
    str += "<IMG src="+this.emptysrc+" width="+this.d+" height=1 border=0 hspace=0 vspace=0 alt=''>";
    // if(i==0) alert(str);
  }
  str += "</NOBR>";

  for(var i=0; i<this.defmenu.length;i++)
  {
    if (this.defmenu[i][2] != 0)
    {
      str += "<DIV id=div"+this.name+i;
      str += " style=\"position:absolute;visibility:hidden;border-style:solid;border-width:1px;";
      str += ";padding:"+this.padding+"px";
      str += ";background:"+this.bgcolor;
      str += ";left:"+ parseInt(i*(this.widthpic+this.d+2)+this.padding+2)+"px";
      str += ";top:"+parseInt(this.heightpic+this.h0+this.padding+2) +"px";
      str += ";width:"+this.widthpic+"px";
      str += ";height:"+this.defmenu[i][3].length*(this.heightpic+this.h)+"px;\"";
      str += " onmouseout=\""+this.name+".moveout1("+i+")\">";
      //if(i==1) alert(str);
      for(var j=0; j<this.defmenu[i][3].length;j++)
      {
        str += "<IMG style=\"position:relative;visibility:hidden;";
        str += "cursor:hand;";
        str += "border-style:solid;border-width:1px;border-left-color:"+this.bgcolor;
        str += ";border-top-color:"+this.bgcolor;
        str += ";border-right-color:"+this.bgcolor;
        str += ";border-bottom-color:"+this.bgcolor+"\" ";
        str += " onmouseover=\"this.style.borderLeftColor=this.style.borderTopColor='"+this.borderLeftColor;
        str += "';this.style.borderRightColor=this.style.borderBottomColor='"+this.borderRightColor+"'\"";
        str += " onmouseout=\"this.style.borderLeftColor=this.style.borderTopColor=this.style.borderRightColor=this.style.borderBottomColor='"+this.bgcolor;
        str += "';this.style.left=this.style.top='0px'"+"\"";
        str += " onmousedown=\"this.style.borderLeftColor=this.style.borderTopColor='"+this.borderRightColor;
        str += "';this.style.borderRightColor=this.style.borderBottomColor='"+this.borderLeftColor;
        str += "';this.style.left=this.style.top='1px'"+"\"";
        str += " onmouseup=\"this.style.borderLeftColor=this.style.borderTopColor=this.style.borderRightColor=this.style.borderBottomColor='"+this.bgcolor;
        str += "';this.style.left=this.style.top='0px'"+"\"";
        str += " onclick=\""+this.name+".click1("+i+","+j+")\" ";
        str += " id="+this.name+i+j;
        str += " src="+this.defmenu[i][3][j][0]+" width="+this.widthpic+" height="+this.heightpic;
        str += " alt=\""+this.defmenu[i][3][j][1]+"\" border=0 hspace=0 vspace=0><BR>";
        str += "<IMG src="+this.emptysrc+" height="+this.h+" width=1 border=0 hspace=0 vspace=0 alt=''><BR>";

      }
      str += "</DIV>";
      // if(i==1) alert(str);
    }
  }
  str += "</DIV>";

 document.write(str);
}


/*

Пример задания определения меню
-------------------------------
var defmenu = new Array(

 new Array("./pic/pic1.gif", "Переход", 3,
           new Array(
                      new Array("./pic/pic11.gif", "Переход на 1", "alert('Переход 1')"),
                      new Array("./pic/pic12.gif", "Переход на 2", "alert('Переход 2')"),
                      new Array("./pic/pic13.gif", "Переход на 3", "alert('Переход 3')")
                    )
          ),

 new Array("./pic/pic2.gif", "Справка", 2,
       new Array(
                  new Array("./pic/pic21.gif", "Справка 1", "alert('Справка 1')"),
                  new Array("./pic/pic23.gif", "Справка 2", "alert('Справка 2')")
                )
          ),

 new Array("./pic/pic3.gif", "Авторы", 0,  // здесь нет подменю

           "alert('Об авторах')"

          )
                       );

*/

