var srcelement=null;
var timer=null;
var contextbody=null;
var currentitem=null;

function contextmenuclick(contextbody) {    
    
  event.cancelBubble = true;  
  contextbody.releaseCapture();   
  if (event.srcElement!=null) {
    var element=event.srcElement;    
    while (element!=null && element.command==null) {
      element=element.parentElement;      
    }
    if (element!=null) {
      if (element.command!=null && element.submenu == null) {
        if (element.cmdname==null) {
          var param=contextbody.cellxy;
          if (element.param!=null) {
            param=element.param;
          }
          contextcommand(element.command,param,element.target);
        } else if (element.cell!=null) {        
          contextmenucommand(element.command,element.cell,element.target,element.cmdtarget)
        } else {          
          contextmenucommand(element.command,contextbody.cellxy,element.target,element.cmdtarget)
        }               
      }      
    }
    
  }
  return false;
}

function contextmenuhover() {
  var element=srcelement;
  while (element!=null && element!=document.body && !(element.className=="menuitem" || element.className=="menuitemhot") && element.parentElement!=element) {
    element=element.parentElement;
  }  
  
  if (element==null || (element.className!="menuitem" && element.className!="menuitemhot")) {
    element = null;   
  }
  var menubody=null;
  if (element!=null) {
    menubody = element;
    while (menubody!=null && menubody!=document.body && menubody.className!="contextmenubody" && menubody.parentElement!=menubody) {
      menubody=menubody.parentElement;
    }
    if (menubody==null || menubody.className!="contextmenubody") {
      menubody=null;
    }
  }  
  
  if ( currentitem!=null && currentitem!=element && currentitem.submenu==null) {    
    
    currentitem.className="menuitem";
    currentitem.style.backgroundColor="";       
    
    currentitem.menubody.menuitem=null;
    currentitem=null;    
  } 
  
  if (menubody!=null) {  
    if (menubody.menuitem!=null && menubody.menuitem!=element ) {          
      var itemsubmenu=menubody.submenu;
      while (itemsubmenu!=null) {
        if (itemsubmenu.menuitem!=null) {
          itemsubmenu.menuitem.className="menuitem";
          itemsubmenu.menuitem.style.backgroundColor="";                 
          itemsubmenu.menuitem=null;
        }
        itemsubmenu.style.display="none";
        if (itemsubmenu.submenu!=null) {
          itemsubmenu=itemsubmenu.submenu;
        } else {
          itemsubmenu=null;
        }
      }
      
      menubody.menuitem.className="menuitem";
      menubody.menuitem.style.backgroundColor="";       
    
      menubody.menuitem=null;
    }
  
    if (element!=null && element.className=="menuitem" && menubody.menuitem!=element) {
      menubody.menuitem=element;

      element.className="menuitemhot";    
      element.menubody=menubody;
      currentitem=element;      
      
      if (element.issubmenu!=null) {
        var submenu=element.submenu;
        if (submenu==null) {
          submenu=element.lastChild.lastChild.cloneNode(true);
        }        
        element.submenu=submenu;     
        menubody.submenu=submenu;
        document.body.appendChild(submenu);

        submenu.style.display="block";
        var pos=calcpos(element);
        
        
        
        if (submenu.offsetWidth+pos[0]+element.offsetWidth+1>document.body.clientWidth) {
        
          submenu.style.pixelLeft=pos[0]-submenu.offsetWidth;
        } else {
          submenu.style.pixelLeft=pos[0]+element.offsetWidth;
        }
        if (submenu.offsetHeight+pos[1]>document.body.clientHeight) {          
          submenu.style.pixelTop=document.body.clientHeight-submenu.offsetHeight;
        } else {
          submenu.style.pixelTop=pos[1];
        }        
      }
    } 
  }
}


function releasecapture(menubody) {
  contextmenu.style.display='none';
  
  srcelement=null;
  contextmenuhover();
  if (menubody.submenu!=null) {          
    var itemsubmenu=menubody.submenu;
    while (itemsubmenu!=null) {
      itemsubmenu.style.display="none";
      if (itemsubmenu.submenu!=null) {
        itemsubmenu=itemsubmenu.submenu;
      } else {
        itemsubmenu=null;
      }
    }
  }
  if (document.body.printobj!=null) {            
    document.body.printobj.showViewer();
  }
}

function contextmenu_mousemove(eventcontextbody) {
  if (timer!=null) {
    window.clearTimeout(timer);
    timer=null;
  }
  srcelement=event.srcElement;
  contextbody=eventcontextbody;
  timer=window.setTimeout(contextmenuhover,15);
}  
