  
  function frameHider(panel, finish) {
    this.panel = panel;
    this.opacity = 0;
    this.dir = 0;
    this.onFinish = null;
  }
  
  function showDescr(frame) {
    lastDir = frame.dir;
    frame.dir = step;
    if(lastDir != 0 )
      return;
    frame.panel.style['-moz-opacity']=frame.opacity/100;
    frame.panel.style.opacity=frame.opacity/100;
    frame.panel.style.filter='alpha(opacity='+frame.opacity+')';
    frame.panel.style.visibility='visible';
    setTimeout( function() { doShow(frame) }, speed);
  }
  
  function hideDescr(frame) {
    lastDir = frame.dir;
    frame.dir = -step;
    if(lastDir != 0 )
      return;
    setTimeout( function() { doShow(frame) }, speed);
  }
  
  function doShow(frame) {
    if(frame.opacity <= 100 && frame.opacity >=0)  {
      frame.panel.style['-moz-opacity']=frame.opacity/100;
      frame.panel.style.opacity=frame.opacity/100;
      frame.panel.style.filter='alpha(opacity='+frame.opacity+')';
      frame.opacity += frame.dir;
      setTimeout( function() { doShow(frame) }, speed);
      return;
    } 
    frame.dir = 0;
    if(frame.opacity > 100) {
      frame.opacity = 100;
    }
    if(frame.opacity < 0) {
      frame.opacity = 0;
      frame.panel.style.visibility='hidden';
    }
    if(frame.onFinish != null)
      frame.onFinish();
  }
  
  function getX(element) {
    pos=0;
    while(element) {
      pos += element.offsetLeft;
      element = element.offsetParent;
    }
    return pos;
  }
  function getY(element) {
    pos=0;
    while(element) {
      pos += element.offsetTop;
      element = element.offsetParent;
    }
    return pos;
  }

  function hideObj(obj) {
    hideDescr(obj);
    obj.panel.onmouseout=null;
    setTimeout(function(){
      obj.small.onmouseover=function() { showObj(obj, obj.isLeft); };
      }, 1000);
  }
  
  function showObj(obj, isLeft) {
    obj.small.onmouseover=null;
    x=getX(obj.small)+(isLeft ? 0 : obj.small.width-obj.panel.width);
    y=getY(obj.small); 
    obj.panel.onmouseout=function (){ hideObj(obj); };
    obj.panel.style.top=y+'px';
    obj.panel.style.left=x+'px';
    obj.isLeft=isLeft;
    showDescr(obj);
  }

  function hideBig() {
    hideObj(bigObj);
  }
  
  function showBig(isLeft) {
      showObj(bigObj,isLeft);
  }
