function Delegate()
{

}

Delegate.create=function(o,f)
{
  var a=new Array();
  var l=arguments.length;
  for(var i=2;i<l;i++)
  {
    a[i-2]=arguments[i];
  }
  return function()
  {
    var aP=[].concat(arguments,a);
    f.apply(o,aP);
  };
};

Tween=function(newelement,oldelement,property,oldsize,newsize,time)
{
  this.init(newelement,oldelement,property,oldsize,newsize,time);
};

var t=Tween.prototype;
t.newelement=new Object();
t.oldelement=new Object();
t.prop="";

t.func=function(t,b,c,d)
{
  return c*t/d+b;
};

t.begin=0;
t.change=0;
t.prevTime=0;
t.prevPos=0;
t.prevPosObj2=null;
t.looping=false;
t._duration=0;
t._time=0;
t._pos=0;
t._position=0;
t._startTime=0;
t._finish=0;
t.name="";
t.suffixe="";
t._listeners=new Array();

t.setTime=function(t)
{
  this.prevTime=this._time;
  if(t>this.getDuration())
  {
    if(this.looping)
    {
      this.rewind(t-this._duration);
      this.update();
      this.broadcastMessage("onMotionLooped",{target:this,type:"onMotionLooped"});
    }
    else
    {
      this._time=this._duration;
      this.update();
      this.stop();
      this.broadcastMessage("onMotionFinished",{target:this,type:"onMotionFinished"});
    }
  }
  else
  {
    if(t<0)
    {
      this.rewind();
      this.update();
    }
    else
    {
      this._time=t;
      this.update();
    }
  }
};

t.getTime=function()
{
  return this._time;
};

t.getDuration=function()
{
  return this._duration;
};

t.setPosition=function(p)
{
  this.prevPos=this._pos;
  if(this.prevPosObj2==null)
  {
    this.prevPosObj2=this.getFinish();
  }
  var a=this.suffixe!=""?this.suffixe:"";
  var p=Math.round(p);
  var _18=this.prevPos-p;
  var _19=this.prevPosObj2+_18;
  this.newelement[this.prop]=p+a;
  if(this.oldelement!=null)
  {
    this.oldelement[this.prop]=_19+a;
  }
  this._pos=p;
  this.prevPosObj2=_19;
  this.broadcastMessage("onMotionChanged",{target:this,type:"onMotionChanged"});
};

t.getPosition=function(t)
{
  if(t==undefined)
  {
    t=this._time;
  }
  return Tween.regularEaseOut(t,this.begin,this.change,this._duration);
};

t.setFinish=function(f)
{
  this.change=f-this.begin;
};

t.getFinish=function()
{
  return this.begin+this.change;
};

t.init=function(newelement,oldelement,property,oldsize,newsize,time)
{
  if(!arguments.length)
  {
    return;
  }
  this._listeners=new Array();
  this.addListener(this);
  this.suffixe='px';
  this.newelement=newelement;
  if(oldelement==null)
  {
    this.oldelement=null;
  }
  else
  {
    this.oldelement=oldelement;
  }
  this.prop=property;
  this.begin=oldsize;
  this._pos=oldsize;
  this._duration=time;
  this.setFinish(newsize);
};

t.start=function()
{
  this.rewind();
  this.startEnterFrame();
  this.broadcastMessage("onMotionStarted",{target:this,type:"onMotionStarted"});
};

t.rewind=function(t)
{
  this.stop();
  this._time=(t==undefined)?0:t;
  this.fixTime();
  this.update();
};

t.fforward=function()
{
  this._time=this._duration;
  this.fixTime();
  this.update();
};

t.update=function()
{
  this.setPosition(this.getPosition(this._time));
};

t.startEnterFrame=function()
{
  this.stopEnterFrame();
  this.isPlaying=true;
  this.onEnterFrame();
};

t.onEnterFrame=function()
{
  if(this.isPlaying)
  {
    this.nextFrame();
    setTimeout(Delegate.create(this,this.onEnterFrame),0);
  }
};

t.nextFrame=function()
{
  this.setTime((this.getTimer()-this._startTime)/1000);
};

t.stop=function()
{
  this.stopEnterFrame();
  this.broadcastMessage("onMotionStopped",{target:this,type:"onMotionStopped"});
};

t.stopEnterFrame=function()
{
  this.isPlaying=false;
};

t.continueTo=function(_25,_26)
{
  this.begin=this._pos;
  this.setFinish(_25);
  if(this._duration!=undefined)
  {
    this._duration=_26;
  }
  this.start();
};

t.resume=function()
{
  this.fixTime();
  this.startEnterFrame();
  this.broadcastMessage("onMotionResumed",{target:this,type:"onMotionResumed"});
};

t.yoyo=function()
{
  this.continueTo(this.begin,this._time);
};

t.addListener=function(o)
{
  this.removeListener(o);
  return this._listeners.push(o);
};

t.removeListener=function(o)
{
  var a=this._listeners;
  var i=a.length;
  while(i--)
  {
    if(a[i]==o)
    {
      a.splice(i,1);
      return true;
    }
  }
  return false;
};

t.broadcastMessage=function()
{
  var arr=new Array();
  for(var i=0;i<arguments.length;i++)
  {
    arr.push(arguments[i]);
  }
  var e=arr.shift();
  var a=this._listeners;
  var l=a.length;
  for(var i=0;i<l;i++)
  {
    if(a[i][e])
    {
      a[i][e].apply(a[i],arr);
    }
  }
};

t.fixTime=function()
{
  this._startTime=this.getTimer()-this._time*1000;
};

t.getTimer=function()
{
  return new Date().getTime()-this._time;
};

Tween.regularEaseOut=function(t,b,c,d)
{
  return -c*(t/=d)*(t-2)+b;
};