var fadeScope = 'aq_fade';

Effect.BigPuff = function(element) {
  element = $(element);
  var oldStyle = { 
    opacity: element.getInlineOpacity(), 
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 400, 
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
     Object.extend({ duration: 1.0, 
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element)
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || { })
   );
};

function shelfFadeIn(element, length)
{
	element = $(element);
	var queue = Effect.Queues.get(fadeScope);
	queue.each(function(effect) { effect.cancel(); });
	new Effect.Appear(element, {duration: length, queue: {scope: fadeScope}});
}

function shelfFadeOut(element, length)
{
	element = $(element);
	var queue = Effect.Queues.get(fadeScope);
	queue.each(function(effect) { effect.cancel(); });
	new Effect.Fade(element, {duration: length, queue: {scope: fadeScope}});
}

function revealFader()
{
	element1 = $('fader');
	element2 = $('shelfbutton');
	var queue = Effect.Queues.get('reveal');
	
	// show the fader area...
	$(element1).show();

	// ...puff up the button...
	new Effect.BigPuff(element2, {delay: 0.4, queue: {scope: 'reveal'}});
	
	// ...then fade out the fader area
	new Effect.Fade(element1, {duration: 0.4, delay: 0.8, queue: {scope: 'reveal'}});
	
	// ...lastly, make the button appear again
	new Effect.Appear(element2, {duration: 0, queue: {position: 'end', scope: 'reveal'}});
}