Ext.extend(Ext.data.PreloadStore, Exta.data.JsonStore, {
  indexKey: '',
  // domylny klucz indeksu
  loadDefer: Time.MINUTE,
  // okrelanie opnienia procesu adowania danych
  listeners: {
    load: function load(store, records, options)
    {
      var etag = this.reader.etag;
      var jsonData = this.reader.jsonData;
      var data =
      {
        etag: etag,
        date: new date(),
        data: jsonData
      };
      sessionStorage[store.indexKey] = Ext.encode(data);
    },
beforeload: function beforeLoad(store, options)
    {
      var data = sessionStorage[store.indexKey];
      if (data === undefined || options.force)
      {
        return true; // brak danych w buforze; adowanie z serwera 
      }
      var raw = Ext.decode(data);
      store.loadData(raw.data);
      // odroczenie ponownego adowania danych
      store.doConditionalLoad.defer(store.loadDefer, store, [raw.etag]);
      return false;
    }
  },
  doConditionalLoad: function doConditionalLoad(etag)
  {
    this.proxy.headers["If-None-Match"] = etag;
    this.load(
    {
      force: true
    });
  },
  forceLoad: function ()
  {
    // przekazanie fikcyjnego identyfikatora ETag w celu wymuszenia adowania
    this.doConditionalLoad('');
  }
});