it has nothing to do with the cross product. why haven't you tried implementing it word by word as i posted above? it's always slightly modified (which makes it not working). you have to be more careful.
vBall = vec_scale(vBall, a);
i'm not scaling vBall but the normal, this line is wrong. also your normal seems to be pointing in the wrong direction (or it is correct and your coordinate system is different. i just thought i should mention it).
joey