  var running = false;
  var keepRunning = false;
  var effect;
  var element = '';

  function effect_config(s,elt)
  {
    effect = s;
    element = elt;
    keepRunning = true;
  }

  function appearQuickly()
  {
   // Effect.Appear(element, {delay: 1, duration: .1, afterFinish:effectDone});
  }
  
  function effectDone() {
	   

	  running = false;
	}

  function effectStart()
  {
    if (!running)
    {
      running = true;
      switch (effect)
              {
        case 'Fade':
          Effect.Fade(element, {delay: .1, duration: 3, afterFinish: appearQuickly });
          break;

        case 'Appear':
          Effect.Fade(element, {delay: .1, duration: .1, afterFinish: function()
          {
            Effect.Appear(element, {delay: 1, duration: 3, afterFinish:effectDone});
          }});
          break;


        case 'Grow':
          Effect.Shrink(element, {delay: .1, duration: .1, afterFinish: function()
          {
            Effect.Grow(element, {delay: 1, duration: 2, afterFinish:effectDone});
          }});
          break;

        case 'Puff':
          Effect.Puff(element, {delay: .1, duration: 2, afterFinish: appearQuickly});
          break;

        case 'BlindUp':
          Effect.BlindUp(element, {delay: .1, duration: 2, afterFinish: appearQuickly});
          break;

        case 'DropOut':
          Effect.DropOut(element, {delay: .1, duration: 2, afterFinish: appearQuickly});
          break;

        case 'SlideDown':
          Effect.SlideDown(element, {delay: .1, duration: 1, afterFinish: effectDone});
          break;

        case 'SlideUp':
          Effect.SlideUp(element, {delay: .1, duration: 1, afterFinish: effectDone});
          break;

        case 'SwitchOff':
          Effect.SwitchOff(element, {delay: .1, duration: 2, afterFinish: appearQuickly});
          break;

        case 'Squish':
          Effect.Squish(element, {delay: .1, duration: 2, afterFinish: appearQuickly});
          break;

        case 'Fold':
          Effect.Fold(element, {delay: .1, duration: 2, afterFinish: appearQuickly});
          break;

        case 'Shrink':
          Effect.Shrink(element, {delay: .2, duration: 2, afterFinish: function()
          {
            Effect.Grow(element, {delay: 1, duration: .2, afterFinish:effectDone});
          }});
          break;

        case 'BlindDown':
          Effect.BlindDown(element, {delay: .1, duration: 3, afterFinish: appearQuickly});
          break;

        case 'Shake':
          Effect.Shake(element, {delay: .1, duration: 3, afterFinish: function()
          {
            running = false;
            if (keepRunning)
            {
              effectStart();
            }
          }});
          break;

        case 'Pulsate':
          Effect.Pulsate(element, {delay: .1, duration: 2, afterFinish: effectDone});
          break;

        case 'Highlight-#fff-#f00':
          new Effect.Highlight(element, {delay: .1, duration: 3, startColor:'#fff', endColor:'#f00', afterFinish: effectDone});
          break;

        case 'Highlight-#00f-#0f0':
          new Effect.Highlight(element, {delay: .1, duration: 3, startColor:'#00f', endColor:'#0f0', afterFinish: effectDone});
          break;

        default:
          alert('Unknown case: ' + effect);
      }
    }
  }
  
  function effectStop()
  {
    keepRunning = false;
  }
  
  var last_elt;
  var lock_anim = false;
  function open_menu(elt)
  {
  	if (lock_anim)
  		return false;
  	if (document.getElementById(elt).style.display == "none")
  	{
  		if (last_elt && last_elt != elt)
  			close_menu(last_elt);
  		lock_anim = true;
  		Effect.BlindDown(elt, {delay: .1, duration: .2, afterFinish: function () {lock_anim = false} });
  		last_elt = elt;
  	}
  }
  
  
  function close_menu(elt)
  {
  	if (document.getElementById(elt).style.display == "")
  		Effect.BlindUp(elt, {delay: .1, duration: 0.2});
  }

