function Ball(px, py, diob)
{
	var ball = new Object();
	ball.ini=JsVector(px, py);
	ball.local=JsVector(px, py);
	
	ball.vel=JsVector(0, 0);
	ball.acel=JsVector(0, 0);
	ball.dispObj=diob;
	
	ball.gravity= function(gravObj, gravMass, mode, effectR)
	{
		var gravF = JsVectorSub( gravObj, this.local);// saber a direcção
			
		var dist= gravF.magnitude();
	
		if(dist<effectR)
		{
			dist=(dist<20 )?20:dist;
			
			var strength = GRA * gravMass;
			strength /= dist*dist;
			
			gravF.normalize();//so queremos a direcção que e tomada pois a intensidade e dada pela formula acima
			gravF.mult(strength);	
			gravF.mult(mode);
				
			this.applyForce(gravF);
		}
		else
		{
			return false;	
		}
	};
	
	ball.friction= function(f)
	{
		var friq = this.vel.get();

		if(friq.magnitude()>0.1)
		{
			friq.mult(-1);
			friq.normalize();
			friq.mult(f);
			this.applyForce(friq);
		}
		else
		{
			this.vel.mult(0);
		}
	};
	
	ball.backIni = function(backMass)
	{
		var gravF = JsVectorSub( this.ini, this.local);// saber a direcção	
		var dist= gravF.magnitude();
		
		
		if(dist<1 && this.vel.magnitude()<0.5)
		{
			this.local=this.ini.get();
			this.vel.mult(0);
		}
		else
		{	
			var strength = GRA * backMass; 
			strength=dist/strength;
			
			strength= Math.min(strength, 0.9);
			strength= Math.max(strength, fri+0.01);
			if(strength>0.9)
			{
				strength=0.9;
			}else if(strength<fri+0.01)
			{
				strength=fri+0.01;
			}

			gravF.normalize();
			gravF.mult(strength);	
	
			this.applyForce(gravF);	
		}
	};
	
	ball.applyForce= function(force) 
	{
		this.vel.x+=force.x;
		this.vel.y+=force.y;
    };

	ball.update= function()
	{
		this.vel.add(this.acel);
		this.local.add(this.vel);
		this.acel.mult(0);
	};

	ball.display= function()
	{
		ctx.drawImage(this.dispObj, this.local.x, this.local.y);
	};
	
	return ball;
}

