Tine.Tinebase.data.MemoryBackend = function(config) {
    Tine.Tinebase.data.MemoryBackend.superclass.constructor.call(this);
    Ext.apply(this, config);
    
    this.toDay = new Date().clearTime();

    this.list = {
        1: Ext.util.JSON.encode({id: 1, dtstart: this.toDay.add(Date.HOUR, 8), dtend: this.toDay.add(Date.HOUR, 9), summary: 'Breakfirst with Tom'}),
        2: Ext.util.JSON.encode({id: 2, dtstart: this.toDay.add(Date.HOUR, 10), dtend: this.toDay.add(Date.HOUR, 12), summary: 'Important meeting'}),
        3: Ext.util.JSON.encode({id: 3, dtstart: this.toDay.add(Date.HOUR, 14), dtend: this.toDay.add(Date.HOUR, 16), summary: 'Childrens soccer game'}),
        4: Ext.util.JSON.encode({id: 4, dtstart: this.toDay.add(Date.HOUR, 15), dtend: this.toDay.add(Date.HOUR, 16).add(Date.MINUTE, 45), summary: 'Phone Conference with Jeffry'}),
        5: Ext.util.JSON.encode({id: 5, dtstart: this.toDay.add(Date.DAY, 1), dtend: this.toDay.add(Date.DAY, 3).add(Date.SECOND, -1), summary: 'Grandma - I Love you!', is_all_day_event: true}),
        6: Ext.util.JSON.encode({id: 6, dtstart: this.toDay.add(Date.DAY, 2), dtend: this.toDay.add(Date.DAY, 5).add(Date.SECOND, -1), summary: 'Music Festival', is_all_day_event: true}),
        7: Ext.util.JSON.encode({id: 7, dtstart: this.toDay.add(Date.DAY, 2).add(Date.HOUR, 16), dtend: this.toDay.add(Date.DAY, 2).add(Date.HOUR, 17), summary: 'Take Grandma to Airport'})
    };
    
    this.jsonReader = new Ext.data.JsonReader({
        id: this.idProperty,
        root: 'results',
        totalProperty: 'totalcount'
    }, this.recordClass);
};

Ext.extend(Tine.Tinebase.data.MemoryBackend, Tine.Tinebase.data.AbstractBackend, {

    /**
     * loads a single 'full featured' record
     * 
     * @param   {Ext.data.Record} record
     * @param   {Object} options
     * @return  {Number} Ext.Ajax transaction id
     * @success {Ext.data.Record}
     */
    loadRecord: function(record, options) {
        options.success.defer(1000, options.scope, record);
    },
    
    /**
     * searches all (lightweight) records matching filter
     * 
     * @param   {Object} filter
     * @param   {Object} paging
     * @param   {Object} options
     * @return  {Number} Ext.Ajax transaction id
     * @success {Object} root:[recrods], totalcount: number
     */
    searchRecords: function(filter, paging, options) {
        var records = [];
        
        //This is the original list
        for (var id in this.list) {
            //records.push(this.recordReader({responseText: this.list[id]}));
        }
        
        //alert("SEARCH RECORDS: "+EventList);
    
        for(var i=0; i<EventList.length; i++){
        	records.push(this.recordReader({responseText: EventList[i]}));
        	
        }
        
        this.toDay = new Date().clearTime();
		//alert(this.toDay.add(Date.DAY, 2).add(Date.HOUR, 16));
        
        
        options.success.defer(500, options.scope, [{records: records, success: 1, totalRecords: records.length}]);
    },
    
    /**
     * saves a single record
     * 
     * @param   {Ext.data.Record} record
     * @param   {Object} options
     * @return  {Number} Ext.Ajax transaction id
     * @success {Ext.data.Record}
     */
    saveRecord: function(record, options) {
        //this.list[record.data.id] = Ext.util.JSON.encode(record.data);        
        //options.success.defer(500, options.scope, [this.recordReader({responseText: this.list[record.data.id]})]);
    },
    
    /**
     * deletes multiple records identified by their ids
     * 
     * @param   {Array} records Array of records or ids
     * @param   {Object} options
     * @return  {Number} Ext.Ajax transaction id
     * @success 
     */
    deleteRecords: function(records, options) {
        options.success.defer(1000, options.scope);
    },
    
    /**
     * updates multiple records with the same data
     * 
     * @param   {Array} filter filter data
     * @param   {Object} updates
     * @return  {Number} Ext.Ajax transaction id
     * @success
     */
    updateRecords: function(filter, updates, options) {
        options.success.defer(1000, options.scope, []);
    },
    
    /**
     * reads a single 'fully featured' record from json data
     * 
     * NOTE: You might want to overwride this method if you have a more complex record
     * 
     * @param  XHR response
     * @return {Ext.data.Record}
     */
    recordReader: function(response) {
        var recordData = Ext.util.JSON.decode('{results: [' + response.responseText + ']}');
        //alert("RESPONSE: "+response.responseText);
        var data = this.jsonReader.readRecords(recordData);
        
        var record = data.records[0];
        var recordId = record.get(record.idProperty);
        
        record.id = recordId ? recordId : 0;
        
        return record;
    }
    
});

