	$(function() 
	{
		$('#svgbasics').svg();

		init();

		$('body').mousedown(function(e) 
		{
  		//alert('Handler for .mouseup() called.');
  		mouseX=e.pageX/30;
  		mouseY=e.pageY/30;
  		//alert(mouseX+' '+mouseY);
  		var anorange = getBodyAtMouse();
  		//alert('o'+anorange);
  		if (anorange!=null)
  		{
  			var force=new b2Vec2(0,-1450);
  			anorange.ApplyImpulse(force,new b2Vec2(mouseX,mouseY));
			//anorange.ApplyImpulse(force,anorange.GetWorldCenter());
		}
						
		});

		
		
	
	});
	
	



      	var world;
      	var xp=75;
     	var oneorange;
     	var oranges=[];
     	var rightwall;
		var logobox;
    	var curw=1000;
     	var mouseX;
  		var mouseY;
  		var start = (new Date).getTime();
  		var frames=0;
	
     	var b2Vec2,b2BodyDef,b2Body,b2FixtureDef,b2Fixture,b2World,b2MassData,b2PolygonShape,b2CircleShape,b2DebugDraw;
        var b2Transform;
        var b2AABB;
            
     	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);
            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;
    	}
            
      	function init() 
		{
         	b2Vec2 = Box2D.Common.Math.b2Vec2
         	,	b2BodyDef = Box2D.Dynamics.b2BodyDef
         	,	b2Body = Box2D.Dynamics.b2Body
         	,	b2FixtureDef = Box2D.Dynamics.b2FixtureDef
         	,	b2Fixture = Box2D.Dynamics.b2Fixture
         	,	b2World = Box2D.Dynamics.b2World
         	,	b2MassData = Box2D.Collision.Shapes.b2MassData
         	,	b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape
         	,	b2CircleShape = Box2D.Collision.Shapes.b2CircleShape
         	,	b2DebugDraw = Box2D.Dynamics.b2DebugDraw 
           	,       b2Transform=Box2D.Common.Math.b2Transform
           	,       b2AABB = Box2D.Collision.b2AABB;
         
         	world = new b2World(new b2Vec2(0, 10), false);
         
         	var fixDef = new b2FixtureDef;
         	fixDef.density = 1.0;
         	fixDef.friction = 0.1;
         	fixDef.restitution = 0.5;
         
         	var bodyDef = new b2BodyDef;
         	
         	var w=$(window).width();
         	if (w<1000) {w=1000;}
         
         	//create ground
         	bodyDef.type = b2Body.b2_staticBody;
         	bodyDef.position.x = 10;
         	bodyDef.position.y = 0.5+(1000/30);
         	fixDef.shape = new b2PolygonShape;
         	fixDef.shape.SetAsBox(100, 0.5);
         	world.CreateBody(bodyDef).CreateFixture(fixDef);
         
        	bodyDef.position.x = -0.5;
         	bodyDef.position.y = 20;
         	fixDef.shape = new b2PolygonShape;
         	fixDef.shape.SetAsBox(0.5,100);
         	world.CreateBody(bodyDef).CreateFixture(fixDef);
         
         	bodyDef.type = b2Body.b2_kinematicBody;
        	bodyDef.position.x = 50.5+(w/30);
         	bodyDef.position.y = 20;
         	fixDef.shape = new b2PolygonShape;
         	fixDef.shape.SetAsBox(50.5,100);
         	rightwall=world.CreateBody(bodyDef);
        	rightwall.CreateFixture(fixDef);

		
         
        	fixDef.friction = 0.5;
         
         	//create some oranges
         	
         	bodyDef.type = b2Body.b2_dynamicBody;
         	for(var i = 0; i < 7; ++i) 
			{
            		fixDef.shape = new b2CircleShape(5.0);
            
            		bodyDef.position.x = (Math.random() * 2)+((w)/2/30);
            		bodyDef.position.y = -10-(i*20)+Math.random() * 2;
            		bodyDef.angle = Math.random() * Math.PI * 2;
           		var newoneorange=world.CreateBody(bodyDef);
           		newoneorange.CreateFixture(fixDef);
           		oranges.push(newoneorange);
         	}
         
         	//setup debug draw
        	/* 
		var debugDraw = new b2DebugDraw();
		debugDraw.SetSprite(document.getElementById("canvas").getContext("2d"));
		debugDraw.SetDrawScale(30.0);
		debugDraw.SetFillAlpha(0.0);
		debugDraw.SetLineThickness(50.0);
		debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
		world.SetDebugDraw(debugDraw);
		*/
         
         	window.setInterval(update, 1000 / 30);
      	};
      
      	function update() 
		{
         	world.Step(
               	1 / 30   //frame-rate
            	,  10       //velocity iterations
            	,  10       //position iterations
         );
         //world.DrawDebugData();
         world.ClearForces();
         
        var w=$(window).width();
        if (w>curw)
        {
       		curw=w;
       		var position;
		position = new b2Vec2(50.5+(curw/30),20);
		var transformer;
		var angle = rightwall.GetTransform().R;
		transformer = new b2Transform(position,angle);
		rightwall.SetTransform(transformer);
	}
         
         
         var svgstuff=$('#svgbasics').svg('get');
         $('#svgbasics').hide();
         svgstuff.clear();
         for(var i = 0; i < oranges.length; ++i) 
         {
          	var ang=oranges[i].GetAngle();
          	var rads=ang*180/Math.PI;
          	var g=svgstuff.group({transform: "translate("+(oranges[i].GetTransform().position.x*30)+" "+(oranges[i].GetTransform().position.y*30)+") rotate("+rads+")"}); 
         	svgstuff.circle(g,0, 0, 150-(16/2), {fill: 'white', stroke: 'orange', 'stroke-width': 16});
		var stargroup=svgstuff.group(g,{transform: "rotate(0) translate(70 70)"}); 
         	
         	var sl=30;
         	var y=0;
         	var offset=9;
         	svgstuff.polygon(stargroup,[[sl/-2, y-offset], [sl/2, y-offset], [0, ((sl/2)*1.732)-offset], [sl/-2, y-offset]], {fill: "green", stroke: "none", strokeWidth: 1}); 
         	
         	var y=0;
         	var offset=offset*-1;
         	svgstuff.polygon(stargroup,[[sl/-2, y-offset], [sl/2, y-offset], [0, ((sl/-2)*1.732)-offset], [sl/-2, y-offset]], {fill: "green", stroke: "none", strokeWidth: 1}); 
         	
         }
	$('#svgbasics').show();
		
	/* fps */
	var diff = (new Date).getTime() - start;
	frames++;
	var fps=Math.round(frames/(diff/1000));
	//$('#fps').html(''+fps);
      };
   

