Ext.ns('Mk');
/**
 * Uniwersalny obiekt JsonStore na potrzeby madkomu ;)
 * 
 * @class Mk.DataStore
 * @extends Ext.data.JsonStore
 * 
 * @param {Object} config - konfiguracja indywidualna 
 */ 
Mk.DataStore = function(config){
	config = config || {};		
	config.listeners = config.listeners || {}

	Ext.applyIf(config.listeners,{
		
		/**
		 * Wykonuje się po załadowaniu store, zaznacza rekord
		 * 
		 * @param {Object} store
		 * @param {Object} records
		 * @param {Object} options
		 */
		load: function(store, records, options){					
			//zaznaczamy rekord na podstawie podanego id 
			if (Ext.isDefined(options.rowId) && parseInt(options.rowId) > 0 && Ext.isDefined(options.grid)) {
				var row = store.getById(options.rowId);
				options.grid.getSelectionModel().selectRecords([row]);
			}
		}
		
		
		/**
		 * Odpalana w przypadku błedu np błednego jsona dostarczonego z serwera
		 * 
		 * @param {Object} misc
		 * @param {Object} req
		 * @param {Object} resp
		 */
		,loadexception: function(misc,req,resp){														
			try {
				var textResponse = resp.responseText,
					resp = Ext.util.JSON.decode(textResponse);
					
				Mk.Exceptions.failure(resp,req);
			} catch(e){
				Mk.Exceptions.failure(resp,e);
			}						
		}
		

		/**
		 * Jeżeli podana jest metaData i posiadamy obiekt this.metaGrid to kolumny grida ulegną przekonfigurowaniu względem tego co zostało dostarczone z serwera
		 * tutaj nadawany jest uim tylko renderer 
		 * 
		 * @param {Object} store
		 * @param {Object} meta
		 */
		,metachange: function (store, meta) {	  
			if(Ext.isDefined(meta.fields)){
				Ext.each(meta.fields,function(item){
					//ustawienie f-cji służącej do wyrenderowania
					if (Ext.isDefined(item.renderer))
						item.renderer = eval(item.renderer);							
				},this);		                  					
			}
		}		
	});
	
	
	Mk.DataStore.superclass.constructor.call(this, 
		Ext.applyIf(config, {
			url				: Mk.Config.url
			,method			: Mk.Config.ajaxMethod		        
	        ,fields			: []
			,root			: Mk.Config.root
			,totalProperty	: Mk.Config.totalProperty 
	    })
	);
}

Ext.extend(Mk.DataStore,Ext.data.JsonStore,{
	
});


