Hello. I am trying to rotate this sphere and it is leaning more than just rotating, so after one click you might be upside down. How can I rewrite the rotation to be more strictly left/right up/down?

Here is my code:

package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;

import org.papervision3d.core.math.Matrix3D;
import org.papervision3d.core.math.Number3D;

import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;



public class Main extends Sprite
{
private static const FORWARD:Number3D = new Number3D(0, 0, 1);
private var scene:Scene3D;
private var viewport:Viewport3D;
private var camera:Camera3D;
private var renderEngine:BasicRenderEngine;
private var sphere:Sphere;
private var bitmapMaterial:BitmapFileMaterial;

private var previousMousePoint:Point = new Point();
private var isMouseDown:Boolean = false;


public function Main()
{
stage.frameRate = 40;
scene = new Scene3D();
camera = new Camera3D();



bitmapMaterial = new BitmapFileMaterial("images/pano.jpg")
bitmapMaterial.doubleSided = true;
sphere = new Sphere(bitmapMaterial, 200, 75, 75);
scene.addChild(sphere);

sphere.x=0;
sphere.y=0;
sphere.z=0;


viewport = new Viewport3D(800,600);
this.addChild(viewport);

camera.x = 0;
camera.y = 0;
camera.z = 0;


renderEngine = new BasicRenderEngine();
renderEngine.renderScene(scene,camera,viewport);
this.addEventListener(Event.ENTER_FRAME,render);

stage.addEventListener(MouseEvent.MOUSE_DOWN, stage_mouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, stage_mouseUpHandler);
}

private function stage_mouseDownHandler(event:MouseEvent):void
{
isMouseDown = true;
}

private function stage_mouseUpHandler(event:MouseEvent):void
{
isMouseDown = false;
}

private function render(e:Event):void
{
var currentMousePoint:Point = new Point(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);

if(isMouseDown)
{
var difference:Point = currentMousePoint.subtract(previousMousePoint);
var vector:Number3D = new Number3D(difference.x, difference.y, 0);

var rotationAxis:Number3D = Number3D.cross(vector, FORWARD);
rotationAxis.normalize();

var distance:Number = Point.distance(currentMousePoint, previousMousePoint);
var rotationMatrix:Matrix3D = Matrix3D.rotationMatrix(rotationAxis.x, -rotationAxis.y, rotationAxis.z, distance/250);

sphere.transform.calculateMultiply3x3(rotationMatr ix, sphere.transform);
}

previousMousePoint = currentMousePoint;
renderEngine.renderScene(scene,camera,viewport);
}
}
}