var ULMenu = Class.create({
initialize: function(options) {
   this.options=options;

   // setup mouce events for menu
   this.options.reserved=document.getElementById(this.options.float_id);
   if(this.options.reserved != null) {
     document.getElementById(this.options.float_id).onmouseover=this.show.bindAsEventListener(this);
     document.getElementById(this.options.float_id).onmouseout=this.hide.bindAsEventListener(this);
     document.getElementById(this.options.id).onmouseout=this.hide.bindAsEventListener(this);
   }
   
   // 
   //if(this.options.position!="") {
   //   this.ftlObj=this.prepare_item();
   //   this.stayTopLeft();
   //}      
  },

ns: (navigator.appName.indexOf("Netscape") != -1),
ftlObj: "" ,


 /*****************************************************************
   prepare floater
 *****************************************************************/
prepare_item: function() {
   var d = document;
   var el=d.getElementById(this.options.float_id);
   if(d.layers)el.style=el;
   el.sP=function(x,y){this.style.left=x;this.style.top=y;};
   el.x = this.options.x_offset;
   if (this.options.position=="fromtop")
      el.y = this.options.y_offset;
   else{
      el.y = this.ns ? pageYOffset + innerHeight : document.body.scrollTop + document.body.clientHeight;
      el.y -= this.options.y_offset;
   }
   return el;
  },  // prepare_item
   
 /*****************************************************************
   floater support
 *****************************************************************/
stayTopLeft: function() {
   if (this.options.position=="fromtop"){
      var pY = this.ns ? pageYOffset : document.body.scrollTop;
      this.ftlObj.y += (pY + this.options.y_offset - this.ftlObj.y)/8;
   }
   else{
      var pY = this.ns ? pageYOffset + innerHeight : document.body.scrollTop + document.body.clientHeight;
      this.ftlObj.y += (pY - this.options.y_offset - this.ftlObj.y)/8;
   }
   this.ftlObj.sP(this.ftlObj.x, this.ftlObj.y);
// var l=this.stayTopLeft.bindAsEventListener(this);
   setTimeout(this.stayTopLeft.bindAsEventListener(this), this.options.timeout);
  },  // stayTopLeft
   
 /*****************************************************************
   showmenu
 *****************************************************************/
show: function(evt)  {
   this.prepareMenu(document.getElementById(this.options.id));
   this.setXY(document.getElementById(this.options.float_id),evt);
    frame=document.getElementById(this.options.id);
    frame.style.visibility="visible";

  },  // show

  /*****************************************************************
    hide menu
  *****************************************************************/
hide: function(evt)  {
   var frame;
   object=window.event;
   frame=document.getElementById(this.options.id);
      d=evt.toElement;
      try {
      if(!d) d=evt.relatedTarget;
      if(!d) d=evt.explicitOriginalTarget;
      while(d) {
      if(d==frame || d==this.options.reserved) return;
      d=d.parentNode; 
      }} catch (e) {;}
      frame.style.visibility = "hidden";
  }, // hide

getLeftTopX: function(Object) {
    X=Object.offsetLeft;
    if(Object.offsetParent)
        X+=this.getLeftTopX(Object.offsetParent);
    return X;
  },

getLeftTopY: function(Object) {
    Y=Object.offsetTop;
    if(Object.offsetParent)
        Y+=this.getLeftTopY(Object.offsetParent);
    return Y;
  },


  /*****************************************************************
    set layer orts
  *****************************************************************/
setXY: function(object,evt) {
   var frame;
   frame=document.getElementById(this.options.id);
   if(frame.style.visibility == "visible") return;
   this.options.reserved=object;
   // вычисляем координаты как по учебнику 
   var posx = 0;
   var posy = 0;
   var pl=0;

   posx=this.getLeftTopX(object); 
   posy=this.getLeftTopY(object);
   if(this.options.overflow_x!=0) 
        posx+=object.offsetWidth/this.options.overflow_x;
   if(this.options.overflow_y!=0) 
        posy+=object.offsetHeight/this.options.overflow_y;
   frame.style.left=posx+"px";
   frame.style.top=posy+"px";
  }, // setXY

  /*****************************************************************
    prepare Menu / preparing layer as menu
  *****************************************************************/
prepareMenu: function (node) {
/*   if (node.hasChildNodes()) {
      var children = node.childNodes;
       for (var i = 0; i < children.length; i++) {
         var child=children[i];
         if(child.nodeType==1) 
            this.prepareMenu(child);
         }
   } 
   if(node.nodeType==1 && node.className!="" && (node.className==this.options.lightON || node.className==this.options.lightOFF)) {
      node.setAttribute((document.all ? 'className' : 'class'), this.options.lightOFF);
      node.onmouseout=this.aOFF.bindAsEventListener(this);
      node.onmouseover=this.aON.bindAsEventListener(this);
   }*/
  }, // prepareMenu

  
  /*****************************************************************
    Highlight menu item
  *****************************************************************/
aON:function(evt) {
    d=evt.originalTarget;
     if(!d) d=evt.srcElement;
    d.className=this.options.lightON;
  }, // aON

  /*****************************************************************
    Turn off highlight of menu item
  *****************************************************************/
aOFF:function(evt) {
    d=evt.originalTarget;
     if(!d) d=evt.srcElement;
    d.className=this.options.lightOFF;
  } // aON
}// ULMenu
);
  
  function getStyleBySelector(className) {
     if (document.all) {
       for (var s = 0; s < document.styleSheets.length; s++)
         for (var r = 0; r < document.styleSheets[s].rules.length; r++) {
           if (document.styleSheets[s].rules[r].selectorText == className)
             return document.styleSheets[s].rules[r];
        }
     }
     else if (document.getElementById) {
       for (var s = 0; s < document.styleSheets.length; s++)
         for (var r = 0; r < document.styleSheets[s].cssRules.length; r++)
           if (document.styleSheets[s].cssRules[r].selectorText == className)
             return document.styleSheets[s].cssRules[r];
     }
     alert(className+' style is undefined or spelled wrong');
     return null;
  }
  