  var zoomboxisshowing = new Array();
  var lastzoombox = 0;

  function showzoombox(cellnr) {
    if(cellnr > lastzoombox) {
      lastzoombox = cellnr;
    }
    if(zoomboxisshowing[cellnr] != 1) {
      zoomboxisshowing[cellnr] = 1;
      var queue = Effect.Queues.get('global');
      queue.each(function(e) { e.cancel() });
      var li = 0;
      while(li <= lastzoombox) {
        if((zoomboxisshowing[li] == 1) && (li != cellnr)) {
          zoomboxisshowing[li] = 0;
          //new Effect.Fade('zoombox' + li, {duration: 0.2, queue: 'end' });
          Element.setStyle('zoombox' + li, {display: 'none'});
          $('zoombox' + li).onmouseout = null;
        }
        li++;
      }
      $('zoombox' + cellnr).onmouseout = exitcurrentzoombox;
      new Effect.Appear('zoombox' + cellnr, {duration: 0.5, queue: 'end' });
    }
  }

  function hidezoombox(cellnr) {
    if(zoomboxisshowing[cellnr] == 1) {
      zoomboxisshowing[cellnr] = 0;
      var queue = Effect.Queues.get('global');
      queue.each(function(e) { e.cancel() });
      //new Effect.Fade('zoombox' + cellnr, {duration: 0.5, queue: 'end' });
      Element.setStyle('zoombox' + cellnr, {display: 'none'});
      $('zoombox' + cellnr).onmouseout = null;
    }
  }

  function hideallzoomboxes() {
    var li = 0;
    while(li <= lastzoombox) {
      if(zoomboxisshowing[li] == 1) {
        zoomboxisshowing[li] = 0;
        //new Effect.Fade('zoombox' + li, {duration: 0.5, queue: 'end' });
        Element.setStyle('zoombox' + li, {display: 'none'});
        $('zoombox' + li).onmouseout = null;
      }
      li++;
    }
  }

  function exitcurrentzoombox(e) {
    if (!e) var e = window.event;
    var tg = (window.event) ? e.srcElement : e.target;
    while (tg && tg.id.indexOf("zoombox") != 0 && tg.nodeName != 'BODY')
      tg = tg.parentNode;
    if (tg && tg.id.indexOf("zoombox") != 0) 
      return;
    var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
    while (reltg && reltg.id.indexOf("zoombox") != 0 && reltg.nodeName != 'BODY')
      reltg = reltg.parentNode;
    if (reltg && reltg.id.indexOf("zoombox") == 0) 
      return;
    var li = 0;
    while(li <= lastzoombox) {
      if(zoomboxisshowing[li] == 1) {
        zoomboxisshowing[li] = 0;
        //new Effect.Fade('zoombox' + li, {duration: 0.5, queue: 'end' });
        Element.setStyle('zoombox' + li, {display: 'none'});
        $('zoombox' + li).onmouseout = null;
      }
      li++;
    }
  }
