/**
 * A state and data store.
 * @name ish.store
 * @namespace
 * @type {Object}
 */
$.store = {
	data: {},
	states: {},
	/**
	 * Flush the store of all data and state.
	 * @memberOf ish.store
	 * @return {$.store} Chainable.
	 */
	flush: function(){
		this.states = {};
		this.data = {};
		return this;
	},
	/**
	 * Create a data object in the store.
	 * @memberOf ish.store
	 * @param  {String}   name The name of the data object to create.
	 * @param  {Function} fn   The initialization function containing actions etc...
	 * @return {Object}        The created data object.
	 */
	createDataState: function(name, fn){
		var ref = this.data[name] = $.emitter();
		ref.actions = {};
		ref.store = null;
		ref.model = null; 
		fn.call(ref);
		return ref;
	},
	/**
	 * Create a state object in the store.
	 * @memberOf ish.store
	 * @param  {String}   name The name of the state object to create.
	 * @param  {Function} fn   The initialization function containing actions etc...
	 * @return {Object}        The created state object.
	 */
	createComState: function(name, fn){
		if(typeof name === 'string' ){
			if(!this.states[name]) {
				this.states[name] = [];
			}
			var ref = $.emitter();
			ref.actions = {};
			fn.call(ref);
			this.states[name].push(ref);
			return ref;
		} else {
			fn.call(name);
			return name;
		}
	}
};