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;
};