//--------------------------------------------------------------
function Menu( myname ){
  
  this.instname = myname;
  this.nummenu = 0;
  this.lstboxid = new Array();
  this.lstmenu = new Array();
  this.lstmenusel = new Array();
  this.lstmenuid = new Array();
  this.submenulst = new Array();
  this.selected = -1;
  this.timer = new Timer( "timer", this );
  this.offset = new Array();
  
  this.addMainmenu = addMainmenu;
  this.setMenupos = setMenupos;
  this.addSubmenuitem = addSubmenuitem;
  this.createSubmenu = createSubmenu;
  this.changeSubmenupos = changeSubmenupos;
  this.preloadImg = preloadImg;
  this.changeImg = changeImg;
  this.restoreImg = restoreImg;
  this.resetImg = resetImg;
  this.move = move;
  
  var imgobj = new Array();
  var clearind = 0;
  
  function offsetMenupos( x, y ){
    this.xoffset = x;
    this.yoffset = y;
    return this;
  }
  
  function addMainmenu( box, name, image1, image2, submenuid, xsubmenupos, ysubmenupos, xsubmenu, ysubmenu ){
    this.lstboxid[this.nummenu] = box;
    this.lstmenuid[this.nummenu] = name;
    this.lstmenu[this.nummenu] = image1;
    this.lstmenusel[this.nummenu] = image2;
    this.submenulst[this.nummenu] = 
      new Submenu( submenuid, 'submenulst[' + this.nummenu + ']', this, this.instname, this.nummenu, xsubmenupos, ysubmenupos, xsubmenu, ysubmenu, this.timer );
    this.nummenu++;
  }
  
  function setMenupos( index, x, y ){
    //alert("test !!! document.getElementById(this.lstboxid[index]) " + document.getElementById(this.lstboxid[index]));
    document.getElementById(this.lstboxid[index]).style.left = x;
    document.getElementById(this.lstboxid[index]).style.top = y;
    document.getElementById(this.lstboxid[index]).style.visibility = "visible";
    this.offset[index] = new offsetMenupos( (this.submenulst[index].xitempos - x), (this.submenulst[index].yitempos - y) );
  }
  
  function addSubmenuitem( id, name, image1, image2, addr, target ){
    this.submenulst[id].addSubmenu( name, image1, image2, addr, target );
  }
  
  function createSubmenu(){
    for( var i=0; i<this.nummenu; i++ ){
       this.submenulst[i].create();
    }
  }
  
  function changeSubmenupos( index, xmovemenupos, ymovemenupos ){
  }
  
  function preloadImg(){
    for( var i=0; i<this.nummenu; i++ ){
       imgobj[i] = new Image();
       imgobj[i].src = this.lstmenu[i];
       imgobj[i].src = this.lstmenusel[i];
       this.submenulst[i].preloadImg();
    }
  }
  
  function changeImg( n ){
    //this.timer.timerEnd();
    this.timer.timerEnd();
    var img = this.lstmenusel[n];
    eval("document." + this.lstmenuid[n] + ".src='" + img + "'");
    if( this.selected != -1 && this.selected != n ){
       this.submenulst[this.selected].hide();
       eval("document." + this.lstmenuid[this.selected] + ".src='" + this.lstmenu[this.selected] + "'");
       document.getElementById(this.lstmenuid[this.selected]).style.filter = 'alpha(opacity=90)';
    }
    document.getElementById(this.lstmenuid[n]).style.filter = 'alpha(opacity=100)';
    //else{
    //   this.timer.timerEnd();
    //}
    this.selected = n;
    if( document.getElementById(this.submenulst[n].menuid).style.visibility != "visible" ){
       //alert("this.submenulst[n].menuid=" + this.submenulst[n].menuid);
       //alert(document.getElementById(this.submenulst[n].menuid));
       this.submenulst[n].show();
    }
  }
  
  function restoreImg( n ){
    var obj = document.getElementById(this.submenulst[n].menuid);
    if( !obj || obj.style.visibility != "visible" ){
       var img = this.lstmenu[n];
       eval("document." + this.lstmenuid[n] + ".src='" + img + "'");
       document.getElementById(this.lstmenuid[n]).style.filter = 'alpha(opacity=90)';
    }
    else{
       this.timer.timerStart( this.submenulst[n].menuid );
       clearind = n;
    }
  }
  
  function resetImg(){
    for( var i=0; i<this.nummenu; i++ ){
       var img = this.lstmenu[i];
       eval("document." + this.lstmenuid[i] + ".src='" + img + "'");
    }
    document.getElementById(this.lstmenuid[clearind]).style.filter = 'alpha(opacity=90)';
  }
  
  function move( url ){
    location.href = url;
  }
  
  return this;
}

//--------------------------------------------------------------
function Submenu( id, myname, pobject, pname, indexmenu, xposition, yposition, xsize, ysize, comtimer ){
  
  this.instname = myname;
  this.nummenu = 0;
  this.menuid = id;
  this.pobj = pobject;
  this.parentname = pname;
  this.parentindex = indexmenu;
  this.lstmenuid = new Array();
  this.lstmenuimgid = new Array();
  this.lstmenu = new Array();
  this.lstmenusel = new Array();
  this.linkaddr = new Array();
  this.target = new Array();
  this.deftarget = "_self";
  this.xitempos = xposition;
  this.yitempos = yposition;
  this.xitemsize = xsize;
  this.yitemsize = ysize;
  this.decoration = new Decosubmenu();
  this.decperitem = new Decosubmenu();
  this.timer = comtimer;
  this.g_opacity;
  this.g_timerid;
  
  this.addSubmenu = addSubmenu;
  //this.setDecoration = setDecoration;
  this.create = create;
  this.preloadImg = preloadImg;
  this.show = show;
  this.hide = hide;  
  this.changeAlpha = changeAlpha;
  
  var imgobj = new Array();
  
  function addSubmenu( name, image1, image2, addr, linktarget ){
    this.lstmenuid[this.nummenu] = name;
    this.lstmenuimgid[this.nummenu] = name + 'img';
    this.lstmenu[this.nummenu] = image1;
    this.lstmenusel[this.nummenu] = image2;
    this.linkaddr[this.nummenu] = addr;
    //if( linktarget != undefined || linktarget != "" ){
    if( linktarget != "" ){
       this.target[this.nummenu] = linktarget;
    }else{
       this.target[this.nummenu] = this.deftarget;
    }
    
    this.nummenu++;
  }
  
  function create(){
    this.decoration.height = this.yitemsize * this.nummenu + 'px';
    this.decoration.width = this.xitemsize + 'px';
    var timername = this.parentname + '.' + this.instname + '.' + this.timer.instname;
    var content = '<div id="' + this.menuid + 
                  '" style="position:absolute;z-index:3;left:' + this.xitempos + 'px;top:' + this.yitempos + 'px;visibility:hidden;' +
                  this.decoration.getAllstyle() + '" ' +
                  'onmouseover="' + timername + '.timerEnd();" onmouseout="' + timername + '.timerStart(\'' + this.menuid + '\');">\n';
    for( var i=0; i<this.nummenu; i++ ){
       toppos = this.yitemsize * i;
       img = this.lstmenusel[i];
       imgcxt = "document." + this.lstmenuimgid[i] + ".src='" + img + "'";
       imgorg = this.lstmenu[i];
       imgorgcxt = "document." + this.lstmenuimgid[i] + ".src='" + imgorg + "'";
       //content += '<a href="' + this.linkaddr[i] + '" target="' + this.target[i] + '" id="' + this.lstmenuid[i] + 
       //           '" style="position:absolute;z-index:3;left:0px;top:' + toppos + 'px;visibility:hidden;' +
       //           this.decperitem.getAllstyle() + '" ' +
       //           'onmouseover="' + imgcxt + ';" onmouseout="' + imgorgcxt + ';">\n';
       content += '<a href="' + "javascript:makeAdresswithparam('"+ this.linkaddr[i] + "')" +'" target="' + this.target[i] + '" id="' + this.lstmenuid[i] + 
                  '" style="position:absolute;z-index:3;left:0px;top:' + toppos + 'px;visibility:hidden;' +
                  this.decperitem.getAllstyle() + '" ' +
                  'onmouseover="' + imgcxt + ';" onmouseout="' + imgorgcxt + ';">\n';
       content += '<img name="' + this.lstmenuimgid[i] + '" src="' + this.lstmenu[i] + '" border="0">';
       content += '</a>\n';
    }
    content += '</div>\n';
    //alert(content);
    document.writeln( content );
  }
  
  function preloadImg(){
    for( var i=0; i<this.nummenu; i++ ){
       imgobj[i] = new Image();
       imgobj[i].src = this.lstmenu[i];
       imgobj[i].src = this.lstmenusel[i];
    }
  }
  
  function show(){
    var obj = document.getElementById( this.menuid );
    if( obj ){
       
       document.getElementById( this.menuid ).style.left = this.xitempos;
       document.getElementById( this.menuid ).style.top = this.yitempos;
       //alert("document.getElementById( this.menuid ) = " + document.getElementById( this.menuid ));
       //alert("document.getElementById( this.menuid ).style.top = " + document.getElementById( this.menuid ).style.top);
       obj.style.visibility = "visible";
       for( var i=0; i<this.nummenu; i++ ){
          document.getElementById(this.lstmenuid[i]).style.visibility = "visible";
          //alert(i);
          //alert(document.getElementById(this.lstmenuid[i]).style.visibility);
       }
       this.g_opacity = 1;
       this.changeAlpha( this );
    }
  }
  
  function hide(){
    var obj = document.getElementById( this.menuid );
    if( obj ){
       obj.style.visibility = "hidden";
       for( var i=0; i<this.nummenu; i++ ){
          document.getElementById(this.lstmenuid[i]).style.visibility = "hidden";
       }
    }
  }
  
  function changeImg( n ){
    img = this.lstmenusel[n];
    eval("document." + this.lstmenuimgid[n] + ".src='" + img + "'");
  }

  function changeAlpha( instsubmenu ){
    if( this.g_opacity > 80 ){
       clearTimeout( this.g_timerid );
       //g_opacity = 1;
       return;
    }
    else{
       var i = 0;
       for( ; i<instsubmenu.nummenu; i++ ){
          document.getElementById(instsubmenu.lstmenuid[i]).style.filter = 'alpha(opacity=' + this.g_opacity +')';
       }
       this.g_opacity += 1;
       var me = instsubmenu.parentname + '.' + instsubmenu.instname;
       //var func = 'changeAlpha(' + instsubmenu.parentname + '.' + instsubmenu.instname + ')';
       var func = me + '.changeAlpha(' + me + ')';
       this.g_timerid = setTimeout( func, 1 );
    }
  }
  
  return this;
}

//--------------------------------------------------------------
function Timer( myname, mainmenu ){
  
  this.timerid;
  this.submenuobj;
  this.instmenu = mainmenu;
  this.instname = myname;
  
  this.timerStart = timerStart;
  this.timerEnd = timerEnd;
  this.hideSubmenu = hideSubmenu;
  
  function timerStart( obj ){
    this.submenuobj = document.getElementById( obj );
    //var func = this.instname + ".hideSubmenu(" + this.instname + ".submenuobj)";
    var me = this.instmenu.instname  + "." + this.instname;
    var func = me + ".hideSubmenu(" + me + ".submenuobj)";
    //alert(func);
    this.timerid = setTimeout( func, 500 );
  }
  
  function timerEnd(){
    clearTimeout( this.timerid );
  }
  
  function hideSubmenu( obj ){
    obj.style.visibility = "hidden";
    for( var i=0; ; i++ ){
       node = obj.childNodes[i];
       if( node == undefined ){
          break;
       }
       if( node.style ){
          node.style.visibility = "hidden";
       }
       if( node == obj.lastChild ){
          break;
       }
    }
    this.instmenu.resetImg();
  }
  
  return this;
}
//--------------------------------------------------------------
function Decosubmenu(){

  this.borderstyle = "none";
  this.borderwidth = "0pt";
  this.bordercolor = "#000000";
  this.height = "auto";
  this.width = "auto";
  
  this.getAllstyle = getAllstyle;
  
  function getAllstyle(){
     var content = 'border-style:' + this.borderstyle + ';' +
                   'border-width:' + this.borderwidth + ';' +
                   'border-color:' + this.bordercolor + ';' +
                   'height:' + this.height + ';' +
                   'width:' + this.width + ';';
     return content;
  }
  
  return this;
}
