/* This source has been formatted by an unregistered SourceFormatX */
/* If you want to remove this info, please register this shareware */
/* Please visit http://www.textrush.com to get more information    */

/* This source has been formatted by an unregistered SourceFormatX */
/* If you want to remove this info, please register this shareware */
/* Please visit http://www.textrush.com to get more information    */

/*
moo.fx, simple effects library built with prototype.js (http://prototype.conio.net).
by Valerio Proietti (http://mad4milk.net) MIT-style LICENSE.
for more info (http://moofx.mad4milk.net).
Sunday, March 05, 2006
v 1.2.3
 */

var fx = new Object();
//base
fx.Base = function(){}
;
fx.Base.prototype = 
{
  setOptions: function(options)
  {
    this.options = 
    {
      duration: 500, onComplete: '', transition: fx.sinoidal
    }
    Object.extend(this.options, options || {}
    );
  }
  , 

  step: function()
  {
    var time = (new Date).getTime();
    if (time >= this.options.duration + this.startTime)
    {
      this.now = this.to;
      clearInterval(this.timer);
      this.timer = null;
      if (this.options.onComplete)
        setTimeout(this.options.onComplete.bind(this), 10);
    }
    else
    {
      var Tpos = (time - this.startTime) / (this.options.duration);
      this.now = this.options.transition(Tpos) * (this.to - this.from) +
        this.from;
    }
    this.increase();
  }
  , 

  custom: function(from, to)
  {
    if (this.timer != null)
      return ;
    this.from = from;
    this.to = to;
    this.startTime = (new Date).getTime();
    this.timer = setInterval(this.step.bind(this), 13);
  }
  , 

  hide: function()
  {
    this.now = 0;
    this.increase();
  }
  , 

  clearTimer: function()
  {
    clearInterval(this.timer);
    this.timer = null;
  }
}

//stretchers
fx.Layout = Class.create();
fx.Layout.prototype = Object.extend(new fx.Base(), 
{
  initialize: function(el, options)
  {
    this.el = $(el); this.el.style.overflow = "hidden"; this.iniWidth =
      this.el.offsetWidth; this.iniHeight = this.el.offsetHeight;
      this.setOptions(options); 
  }
}

);

fx.Height = Class.create();
Object.extend(Object.extend(fx.Height.prototype, fx.Layout.prototype), 
{
  increase: function()
  {
    this.el.style.height = this.now + "px"; 
  }
  , 

  toggle: function()
  {
    if (this.el.offsetHeight > 0)this.custom(this.el.offsetHeight, 0); 
    else
    this.custom(0, this.el.scrollHeight); 
  }
}

  );

fx.Width = Class.create();
Object.extend(Object.extend(fx.Width.prototype, fx.Layout.prototype), 
{
  increase: function()
  {
    this.el.style.width = this.now + "px"; 
  }
  , 

  toggle: function()
  {
    if (this.el.offsetWidth > 0)this.custom(this.el.offsetWidth, 0); 
    else
    this.custom(0, this.iniWidth); 
  }
}

  );

//fader
fx.Opacity = Class.create();
fx.Opacity.prototype = Object.extend(new fx.Base(), 
{
  initialize: function(el, options)
  {
    this.el = $(el); this.now = 1; this.increase(); this.setOptions(options); 
  }
  , 

  increase: function()
  {
    if (this.now == 1 && ( / Firefox / .test(navigator.userAgent)))this.now =
      0.9999; this.setOpacity(this.now); 
  }
  , 

  setOpacity: function(opacity)
  {
    if (opacity == 0 && this.el.style.visibility != "hidden")
      this.el.style.visibility = "hidden"; 
    else if (this.el.style.visibility != "visible")this.el.style.visibility = 
      "visible"; if (window.ActiveXObject)this.el.style.filter = 
      "alpha(opacity=" + opacity * 100+")"; this.el.style.opacity = opacity; 
  }
  , 

  toggle: function()
  {
    if (this.now > 0)this.custom(1, 0); 
    else
    this.custom(0, 1); 
  }
}

  );

//transitions
fx.sinoidal = function(pos)
{
  return (( - Math.cos(pos * Math.PI) / 2) + 0.5);
  //this transition is from script.aculo.us
}

fx.linear = function(pos)
{
  return pos;
}

fx.cubic = function(pos)
{
  return Math.pow(pos, 3);
}

fx.circ = function(pos)
{
  return Math.sqrt(pos);
}

