docs: function(){
  
              var self = this
                  ,gui = this.gui = new window.dat.GUI({ autoPlace: false })
                  ,op = this.options
                  ,getset
                  ,f
                  ;
  
              getset = {
                  get timestep(){
                      return self._world ? self._world.timestep() : 6;
                  }
                  ,set timestep( dt ){
                      if ( self._world ) {
                          self._world.timestep( dt );
                      }
                  }
                  ,get warp(){
                      return self._world ? self._world.warp() : 1;
                  }
                  ,set warp( w ){
                      if ( self._world ) {
                          self._world.warp( w );
                      }
                  }
                  ,get maxIPF(){
                      return self._world ? self._world.options.maxIPF : 16;
                  }
                  ,set maxIPF( m ){
                      if ( self._world ){
                          self._world.options({ maxIPF: m });
                      }
                  }
                  ,get sleepDisabled(){
                      return self._world ? self._world.options.sleepDisabled : false;
                  }
                  ,set sleepDisabled( t ){
                      if ( self._world ){
                          self._world.options.sleepDisabled = t;
                          if ( t ){
                              self._world.wakeUpAll();
                          }
                      }
                  }
                  ,get sleepTimeLimit(){
                      return self._world ? self._world.options.sleepTimeLimit : 500;
                  }
                  ,set sleepTimeLimit( t ){
                      if ( self._world ){
                          self._world.options.sleepTimeLimit = t;
                      }
                  }
                  ,get sleepSpeedLimit(){
                      return self._world ? self._world.options.sleepSpeedLimit : 0.005;
                  }
                  ,set sleepSpeedLimit( t ){
                      if ( self._world ){
                          self._world.options.sleepSpeedLimit = t;
                      }
                  }
                  ,get sleepVarianceLimit(){
                      return self._world ? self._world.options.sleepVarianceLimit : 0.2;
                  }
                  ,set sleepVarianceLimit( t ){
                      if ( self._world ){
                          self._world.options.sleepVarianceLimit = t;
                      }
                  }
                  ,get integrator(){
                      return self._world ? self._world.integrator().name : 'verlet';
                  }
                  ,set integrator( t ){
                      var intr;
                      if ( self._world ){
                          intr = self._world.integrator();
                          self._world.integrator( Physics.integrator(t, Physics.util.extend({}, intr, null)) );
                      }
                  }
              };
  
              function pauseWorld(){
                  if ( self._world ){
                      if ( self._world.isPaused() ){
                          self._world.unpause();
                      } else {
                          self._world.pause();
                      }
                  }
              }
  
              f = gui.addFolder( 'General' );
              f.add( getset, 'integrator', [ 'improved-euler', 'verlet', 'velocity-verlet' ]);
              f.add( getset, 'timestep', 1, 20).step( 1 );
              f.add( getset, 'maxIPF', 1, 100).step( 1 );
              f.add( getset, 'warp', 0.01, 2);
              f.add( getset, 'sleepDisabled');
              f.add( getset, 'sleepTimeLimit', 1, 10000).step( 10 );
              f.add( getset, 'sleepSpeedLimit', 0.001, 1);
              f.add( getset, 'sleepVarianceLimit', 0.01, 1);
              f.add( { pause: pauseWorld }, 'pause');
              f.open();
  
              f = gui.addFolder( 'Draw Options' );
              f.add( op, 'drawAABB' );
              f.add( op, 'drawRealPosition' );
              f.add( op, 'drawIntervals' );
              f.add( op, 'drawContacts' );
              f.add( op, 'drawSleepState' );
              f.add( op, 'drawBodyState' );
              f.open();
  
              f = gui.addFolder( 'Colors' );
              f.addColor( op, 'aabbColor' );
              f.addColor( op, 'realBodyStyle' );
              f.addColor( op, 'intervalMinColor' );
              f.addColor( op, 'intervalMaxColor' );
              f.addColor( op, 'mtvColor' );
              f.addColor( op, 'contactColor' );
  
              gui.domElement.style.zIndex = '100';
              gui.domElement.style.position = 'absolute';
              gui.domElement.style.top = '0';
              gui.domElement.style.left = '0';
              this.el.parentNode.appendChild( gui.domElement );
          }