docs: function HAL_Resource(obj, uri) {
  	var self = this;
  	
  	if(!(self instanceof HAL_Resource)) {
  		return new HAL_Resource(obj, uri);
  	}
  	
  	if(obj instanceof HAL_Resource) {
  		self._data = do_clone_obj(obj._data);
  	} else if(obj instanceof Array) {
  		throw new TypeError("Arrays are not supported!");
  	} else if(typeof obj === 'object') {
  		self._data = do_clone_obj(obj);
  	} else {
  		console.warn('Warning! HAL.Resource(obj, uri) called with obj of type ' + typeof obj + ' -- using empty object instead.');
  		self._data = {};
  	}
  	
  	if(typeof self._data._links !== 'object') {
  		self._data._links = {};
  	}
  	
  	if(typeof self._data._embedded !== 'object') {
  		self._data._embedded = {};
  	}
  	
  	if(uri !== undefined) {
  		self._data._links.self = new HAL_Link("self", uri);
  	}
  	
  	if(self._data._links.self === undefined) {
  		throw new TypeError("HAL.Resource must have link relation to self!");
  	}
  	
  	self._helpers = {
  		'linkRelExists': Object.prototype.hasOwnProperty.bind(self._data._links),
  		'embeddedRelExists': Object.prototype.hasOwnProperty.bind(self._data._embedded)
  	};
  }