Hi can you please help me, my balls get pushed away abrubtly when colliding sometimes,im keeping my velocities less than my ball radiuses so it can not be that, i have done loads of experimentation but with no joy. (cr=0.4; mass=1

please av a gander at my following code written in flash cs3 thankyou in advance.

for (var i1:uint=0;i1<CARTOTAL-1;i1++) {
for (var i2:uint=i1+1;i2<CARTOTAL;i2++) {

var dx:Number=cararray[i1].x-cararray[i2].x,
dy:Number=cararray[i1].y-cararray[i2].y,
d:Number=Math.sqrt(dx*dx+dy*dy),
r1:Number=19,
r2:Number=r1;

if (d<=(r1+r2)) {

// component of velocity in the direction (dx,dy)
var vp1:Number=cararray[i1].velx*dx/d+cararray[i1].vely*dy/d,
vp2:Number=cararray[i2].velx*dx/d+cararray[i2].vely*dy/d,
dt:Number=(r1+r2-d)/(vp1+vp2);

// move back
cararray[i1].x-=cararray[i1].velx*dt;
cararray[i1].y-=cararray[i1].vely*dt;
cararray[i2].x-=cararray[i2].velx*dt;
cararray[i2].y-=cararray[i2].vely*dt;

dx=cararray[i1].x-cararray[i2].x;
dy=cararray[i1].y-cararray[i2].y;
d=Math.sqrt(dx*dx+dy*dy);

// unit vector in the direction of the collision
var ax:Number=dx/d , ay:Number=dy/d;

// projection of the velocities
var va1:Number=( cararray[i1].velx*ax+cararray[i1].vely*ay),
vb1:Number=(-cararray[i1].velx*ay+cararray[i1].vely*ax),
va2:Number=( cararray[i2].velx*ax+cararray[i2].vely*ay),
vb2:Number=(-cararray[i2].velx*ay+cararray[i2].vely*ax);

// new velocities after collisions
var vap1:Number=va1+(1+cr)*(va2-va1)/(1+cararray[i1].mass/cararray[i2].mass),
vap2:Number=va2+(1+cr)*(va1-va2)/(1+cararray[i2].mass/cararray[i1].mass);

// undo the projections (new velocities after collision)
cararray[i1].velx=vap1*ax-vb1*ay;
cararray[i1].vely=vap1*ay+vb1*ax;
cararray[i2].velx=vap2*ax-vb2*ay;
cararray[i2].vely=vap2*ay+vb2*ax;

// move forward
cararray[i1].x+=cararray[i1].velx*dt;
cararray[i1].y+=cararray[i1].vely*dt;
cararray[i2].x+=cararray[i2].velx*dt;
cararray[i2].y+=cararray[i2].vely*dt;
}
}
}