N E O: I'm having a hard time following your code in general. It just doesn't read so clean to me. It might be your explanations.
Also, I'd like to show you a cool trick to make this line more stable and read better: http://www.grauw.nl/blog/entry/510
fade.prototype.init = function(data) {
this.color = 'color' in data?data['color']:CreateColor(255,255,255,255);
};
// becomes:
fade.prototype.init = function(data) {
// if data and data.color exist, use data.color; else use new color
this.color = (data && data.color) || CreateColor(255, 255, 255);
};
Your easing description is kind of bland, and it doesn't help to show that your linear ease really does nothing. Part of Penner's easing functions is so that they do the work for you.
// bad:
function linear(a) { return a * 1.0; }
var blah = linear(a-lot-of-math-here-which-does-nothing);
// good:
function linear(a, b, t) { return a + b * t; }
var blah = linear(start, end - start, time/total);
Edit: thanks to Jest below I've added parenthesis to clarify the new trick above.