// Ease and Wizz 2.5.3 : inoutQuart : First two keyframes only
// Ian Haigh (http://aescripts.com/ease-and-wizz/)
// Last built: 2017-08-08T09:11:06+10:00

function easeandwizz_inoutQuart(t, b, c, d) {
	if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
	return -c/2 * ((t-=2)*t*t*t - 2) + b;
}

function easeAndWizz() {
	try {
		var key1 = key(1);
		var key2 = key(2);
	} catch(e) {
		return null;
	}

	// determine how many dimensions the keyframes need
	var dim = 1; // It's gotta have at least ONE dimension
	try {
		key(1)[1];
		dim = 2;
		key(1)[2];
		dim = 3;
	} catch(e) {}

	t = time - key1.time;
	d = key2.time - key1.time;

	sX = key1[0];
	eX = key2[0] - key1[0];

	if (dim >= 2) {
		sY = key1[1];
		eY = key2[1] - key1[1];

		if (dim >= 3) {
			sZ = key1[2];
			eZ = key2[2] - key1[2];
		}
	}

	if ((time < key1.time) || (time > key2.time)) {
		return value;
	} else {
		val1 = easeandwizz_inoutQuart(t, sX, eX, d);
		switch (dim) {
			case 1:
			     return val1;
			     break;
			case 2:
			     val2 = easeandwizz_inoutQuart(t, sY, eY, d);
			     return [val1, val2];
			     break;
			case 3:
			     val2 = easeandwizz_inoutQuart(t, sY, eY, d);
			     val3 = easeandwizz_inoutQuart(t, sZ, eZ, d);
			     return [val1, val2, val3];
			     break;
			default:
			     return null;
		}
	}
}

(easeAndWizz() || value);
