HELP! Dynamic random grayscale easing

I’m dying here. I’m making an interactive image that’s grayscale. Whenever the _parent MC is clicked, the different elements of the image randomly shift in grayscale.

I have patchworked a thing together that works, but the code is so clunky that it basically kills the machine. I’ve tried several different color methods with varying success (can’t even get colorTransform to work).

Anyone have any suggestions on how to build a function or something else that can basically shift the color to a randomly generated “target” value over n number of frames?

Code snippet:

imageHolder.onRelease = function() {
grass_color = new Color(imageHolder.grass);
	oldColor = grass_color.getTransform();
//gets previous color value
	arby = oldColor.rb;
	gebe = arby;
	bebe = gebe;
//makes R, G and B channels the same for grayscale shift
	n = 30+Math.round(Math.random()*30);
//At 30 FPS somewhere between 1 and 2 seconds
	c = Math.round(Math.random()*100);
//generate random target color
	i = 0;
	changer = holder.createEmptyMovieClip("changer", 1);
	changer.onEnterFrame = function() {
		trace(oldColor.rb);
		if (i<n) {
			i++;
			oldColor.rb -= (arby-c)/n;
			oldColor.gb -= (gebe-c)/n;
			oldColor.bb -= (bebe-c)/n;
			grass_color.setTransform(oldColor);
		} else {
			removeMovieClip(this);
		}
	};
};

One of my big issues has been trying to create a function that can be applied to several different objects, or generate the objects for each mc. There are 5 color objects that color shift. This has been driving me nuts for days.

Any help greatly appreciated!