




function MouseDrag(world)
{
	
	 var b2Vec2 			= Box2D.Common.Math.b2Vec2;
	 var b2AABB 			= Box2D.Collision.b2AABB;
	 var b2BodyDef 			= Box2D.Dynamics.b2BodyDef;
	 var b2Body 			= Box2D.Dynamics.b2Body;
	 var b2FixtureDef 		= Box2D.Dynamics.b2FixtureDef;
	 var b2Fixture 			= Box2D.Dynamics.b2Fixture;
	 var b2World 			= Box2D.Dynamics.b2World;
	 var b2MassData 		= Box2D.Collision.Shapes.b2MassData;
	 var b2PolygonShape 	= Box2D.Collision.Shapes.b2PolygonShape;
	 var b2CircleShape 		= Box2D.Collision.Shapes.b2CircleShape;
	 var b2DebugDraw 		= Box2D.Dynamics.b2DebugDraw;
	 var b2MouseJointDef 	=  Box2D.Dynamics.Joints.b2MouseJointDef;
	
	
	
	
	  var mouseX, mouseY, mousePVec, isMouseDown, selectedBody, mouseJoint; 
		 
		 document.addEventListener("mousedown", function(e) {
            isMouseDown = true;
            handleMouseMove(e);
            document.addEventListener("mousemove", handleMouseMove, true);
         }, true);
         
         document.addEventListener("mouseup", function() {
            document.removeEventListener("mousemove", handleMouseMove, true);
            isMouseDown = false;
           /* mouseX = undefined;
            mouseY = undefined;*/
         }, true);
         
         function handleMouseMove(e) {
			 
			 if(selectedBody)
			 {
				var us = selectedBody.GetUserData();
				
				if(us)
				{
					us.ustunde = false;
				}
				
			 }
			 
			 
            mouseX = (e.clientX - 0) / 30;
            mouseY = (e.clientY - 0) / 30;
         };
		 
		 
		 
		 function getBodyAtMouse() {
            mousePVec = new b2Vec2(mouseX, mouseY);
            var aabb = new b2AABB();
            aabb.lowerBound.Set(mouseX - 0.001, mouseY - 0.001);
            aabb.upperBound.Set(mouseX + 0.001, mouseY + 0.001);
            
            // Query the world for overlapping shapes.

            selectedBody = null;
            world.QueryAABB(getBodyCB, aabb);
            return selectedBody;
         }
		 
		 function getBodyCB(fixture) {
            if(fixture.GetBody().GetType() != b2Body.b2_staticBody) {
               if(fixture.GetShape().TestPoint(fixture.GetBody().GetTransform(), mousePVec)) {
                  selectedBody = fixture.GetBody();
                  return false;
               }
            }
            return true;
         }
	
	
	
	this.render = function ()
	{
		if(isMouseDown && (!mouseJoint)) {
               var body = getBodyAtMouse();
               if(body) {
				   
                  var md = new b2MouseJointDef();
                  md.bodyA = world.GetGroundBody();
                  md.bodyB = body;
                  md.target.Set(mouseX, mouseY);
                  md.collideConnected = true;
                  md.maxForce = 300.0 * body.GetMass();
                  mouseJoint = world.CreateJoint(md);
				   if(body.GetUserData().mouseover)
				   {
						body.GetUserData().ustunde = true;   
					}
                  body.SetAwake(true);
               }
            }
            
            if(mouseJoint) {
               if(isMouseDown) {
                  mouseJoint.SetTarget(new b2Vec2(mouseX, mouseY));
               } else {
				   
				   var bdy = getBodyAtMouse();
				   if(bdy && bdy.GetUserData().ustunde)
				   {
					   bdy.GetUserData().mouseover();
					}
					
					 mouseX = undefined;
            		mouseY = undefined
				  
				   
				   
				   	selectedBody = undefined;
                  	world.DestroyJoint(mouseJoint);
                  	mouseJoint = null;
               }
            }
	}
	
	
	
	
	
}
