code: function (keys, obj) {
  			var i = 0, j, hash;
  
  			if (arguments.length == 1) {
  				obj = keys;
  				keys = HashMap.key(obj, keyHolder);
  			}
  
  			//search in all x buckets
  			for (i = keys.x1; i <= keys.x2; i++) {
  				//insert into all y buckets
  				for (j = keys.y1; j <= keys.y2; j++) {
  					hash = (i << 16)^j;
  
  					if (this.map[hash]) {
  						var cell = this.map[hash],
  						 m, n = cell.length;
  						//loop over objs in cell and delete
  						for (m = 0; m < n; m++)
  							if (cell[m] && cell[m][0] === obj[0])
  								cell.splice(m, 1);
  					}
  				}
  			}
  		}
docs: @
  #Crafty.map.remove
  @comp Crafty.map
  @sign public void Crafty.map.remove([Object keys, ]Object obj)
  @param keys - key region. If omitted, it will be derived from obj by `Crafty.HashMap.key`.
  @param obj - need more document.
  
  Remove an entity in a broad phase map.
  - The second form is only used in Crafty.HashMap to save time for computing keys again, where keys were computed previously from obj. End users should not call this form directly.
  
  @example
  ~~~
  Crafty.map.remove(e);
  ~~~