JAME.Package('JAME.FX.Transition.Elastic');

JAME.FX.Transition.Elastic={

    //a: amplitude (optional), p: period (optional)
    In : function (t, b, c, d, a, p) {
        if (t==0) { return b; } 
        if ((t/=d)==1) { return b+c; }
        if (!p) { p=d*.3; }
        if (c==0 || a < Math.abs(c)) {  a=b+c; s=p/4; }
        else { a=Math.abs(c); s = p/(2*Math.PI) * Math.asin(c/a);}
         return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
    },
    Out : function (t, b, c, d, a, p) {
        if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
        if (c==0 || a < Math.abs(c)) { a=b+c; var s=p/4; }
        else {   a=Math.abs(c); var s = p/(2*Math.PI) * Math.asin (c/a);}
        return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
    },
    InOut : function (t, b, c, d, a, p) {
        if (t==0) return b;  
        if ((t/=d/2)==2) return b+c;  
        if (!p) p=d*(.3*1.5);
        if (c==0 || a < Math.abs(c)) { a=b+c; var s=p/4; }
        else {a=Math.abs(c);var s = p/(2*Math.PI) * Math.asin (c/a);}
        if (t < 1) {return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;}
        return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
    },
	Export : function() {
		JAME.Exporter(this,'E');
	}
}
