function getNewBezier(oldBezier, time)         
	{                
	    if(time === 0 || time === 1)
	    {
	        return oldBezier;
	    }

	    var cacheName = oldBezier.join('_').replace(/\./g, 'p') + '_' + time.toFixed(3);
	    if(cacheName in bezierEasingCache)
	    {
	        return bezierEasingCache[cacheName];
	    }        

	    var oldBezierFunc = bezier.apply(null, oldBezier);
	    var xInterval = 1 - time;
	    var startY = oldBezierFunc(time);
	    var sign = startY > 1? - 1 : 1;
	    var yInterval = (1 - startY) * sign;

	    var u = 0.33, v = 0.67;
	    var uu = u * xInterval + time;
	    var vv = v * xInterval + time;

	    var 
	        p0x = 0, p0y = 0,
	        p1x = u, p1y = (oldBezierFunc(uu) - startY) * sign / yInterval, 
	        p2x = v, p2y = (oldBezierFunc(vv) - startY) * sign / yInterval, 
	        p3x = 1, p3y = 1,
	        compU = 1 - u, compV = 1 -v, 
	        u2 = u * u, u3 = u * u * u, v2 = v * v, v3 = v * v * v,

	        a = 3 * compU * compU * u, b = 3 * compU * u2, 
	        c = 3 * compV * compV * v, d = 3 * compV * v2;       

	    var det = a*d - b*c;

	    /* it would not be needed, it's just to honor Murphy's Law */
	    if(det === 0) 
	    {
	        console.log('New Bezier FAIL: Det == 0'); 
	        return oldBezier;
	    }

	    var compU3 = compU * compU * compU, compV3 = compV * compV * compV;

	    var 
	        q1x = p1x - (compU3 * p0x + u3 * p3x),
	        q1y = p1y - (compU3 * p0y + u3 * p3y),	
	        q2x = p2x - (compV3 * p0x + v3 * p3x),
	        q2y = p2y - (compV3 * p0y + v3 * p3y);

	    var res = [
	        (d * q1x - b * q2x) / det,
	        (d * q1y - b * q2y) / det,

	        ((-c) * q1x + a * q2x) / det,
	        ((-c) * q1y + a * q2y) / det
	    ];

	    bezierEasingCache[cacheName] = res;
	    return res;
	}
Widely based on the great work by Vincent Tan
http://polymathprogrammer.com/2007/06/27/reverse-engineering-bezier-curves/

given a bezier curve and current time progress, it returns a new cubic bezier array equal to the remaining part of the curve

@param {Array} oldBezier - 4-length cubic bezier array
@param {Number} time -  current progress value, between 0 and 1 
@returns {Array}