function cancelQueue(scope) {
 var queue = Effect.Queues.get(scope);
 queue.each(function(effect) { effect.cancel(); });
}

var mainWidths = new Array();
var subWidths = new Array();
var subHeights = new Array();
var speed = 0.17;
var transit = Effect.Transitions.quart;
var element, mainitem, submenu, dims, dim1, dim2, oqueue, cqueue, qid, oWidth, oHeight, moWidth;
document.observe('dom:loaded', function() {
 $$('div.mainitem_container').each(function(mcontainer) {
  mainitem = mcontainer.down('.mainitem_hover');
  submenu = mcontainer.down('.submenu_container');

  dims = mainitem.getDimensions();
  mainWidths['item' + mcontainer.id] = dims.width;
  mainitem.hide();

  if (!Object.isUndefined(submenu)) {
   dims = submenu.getDimensions();
   subWidths['item' + mcontainer.id] = dims.width;
   subHeights['item' + mcontainer.id] = dims.height;
   submenu.hide();
  }

  mcontainer.observe('mouseenter', function(event) {
   element = Event.element(event);
   if (!element.hasClassName('mainitem_container')) element = element.up('.mainitem_container');
   mainitem = element.down('.mainitem_hover');
   submenu = element.down('.submenu_container');
   qid = element.id;
   oqueue = 'open' + qid;
   cqueue = 'close' + qid;

   cancelQueue(cqueue);
   dim1 = mainitem.getDimensions();
   if (!Object.isUndefined(submenu)) dim2 = submenu.getDimensions();
   moWidth = mainWidths['item' + qid];
   oWidth = subWidths['item' + qid];
   oHeight = subHeights['item' + qid];
//alert(moWidth);
   if (!mainitem.visible() || dim1.width != moWidth) new Effect.BlindRight(mainitem, {
    duration: speed,
    transition: transit,
    restoreAfterFinish: false,
    scaleMode: { originalHeight: 36, originalWidth: moWidth },
    queue: { position: 'end', scope: oqueue }
   });

   if (!Object.isUndefined(submenu) && (!submenu.visible() || dim2.height != oHeight)) new Effect.BlindDown(submenu, {
    duration: speed,
    transition: transit,
    restoreAfterFinish: false,
    scaleMode: { originalHeight: oHeight, originalWidth: oWidth },
    queue: { position: 'end', scope: oqueue }
   });
  });

  mcontainer.observe('mouseleave', function(event) {
   element = Event.element(event);
   if (!element.hasClassName('mainitem_container')) element = element.up('.mainitem_container');
   mainitem = element.down('.mainitem_hover');
   submenu = element.down('.submenu_container');
   qid = element.id;
   oqueue = 'open' + qid;
   cqueue = 'close' + qid;

   cancelQueue(oqueue);

   if (!Object.isUndefined(submenu) && submenu.visible()) new Effect.BlindUp(submenu, {
    duration: speed,
    transition: transit,
    queue: { position: 'end', scope: cqueue }
   });

   if (mainitem.visible()) new Effect.BlindLeft(mainitem, {
    duration: speed,
    transition: transit,
    queue: { position: 'end', scope: cqueue }
   });
  });
 });
});