/**
 * Holds a plain key-value javascript object and monitorizes changes over it.
 */
module.exports = new Class({
	Properties: {
		/**
		 * The internal object with the params, this is the lot internal object
		 * and should be used for read-only purposes.
		 */
		params: { 
			type: Object
		}
		/**
		 * Shortcut for params property.
		 */
		,$: { 
			type: Object
		 }
	 }
 
	 /**
	  * Gets a value from the lot.
	  *
	  * @param {string} field The field name
	  * @return {*} The field value
	  */
	 ,get(field) {
		 return this.params[field];
	 }
 
	 /**
	  * Sets a value on the lot.
	  *
	  * @param {string} field The field name
	  * @param {*} value The new field value
	  */
	 ,set(field, value) {
		 var params = {};
		 params[field] = value;
		 this.assign(params);
	 }
 
	 /**
	  * Returns an array with the lot keys.
	  * 
	  * @return {Array} The lot keys
	  */
	 ,keys() {}
 
	 /**
	  * Emits the 'change' signal on the lot.
	  * 
	  * @param {Object} changes The changed params and its values
	  */
	 ,changed(changes) {
		 this.emit('change', changes);
	 }
 
	 /**
	  * Copies all values from another lot.
	  *
	  * @param {Object} object The source object
	  */
	 ,assign() {}
 
	 /**
	  * Copies all values from another lot.
	  *
	  * @param {LotIface} lot The source lot
	  */
	 ,assignLot(lot) {
		 this.assign(lot.$);
	 }
 
	 /**
	  * Resets all values.
	  */
	 ,reset() {
		 this.params = {};
	 }
 });