/*
 * Ext JS Library 2.0
 * Copyright(c) 2006-2007, Ext JS, LLC.
 * licensing@extjs.com
 *
 * http://extjs.com/license
 */
/*
 *  John Wilson (Daemach) daemach@gmail.com
 *  http://ideamill.synaptrixgroup.com
 *
 */
Ext.data.CFJsonReader = function(recordType, meta){
    this.meta = meta || {};
    this.recordType = Ext.data.Record.create(recordType);
};

Ext.extend(Ext.data.CFJsonReader, Ext.data.DataReader, {
    read: function(response){
        var json = response.responseText;
        var o = eval("(" + json + ")");
        if (!o) {
            throw {
                message: "CFJsonReader.read: Json object not found"
            };
        }
        if (o.metaData) {
            delete this.ef;
            this.meta = o.metaData;
            this.recordType = Ext.data.Record.create(o.metaData.fields);
            this.onMetaChange(this.meta, this.recordType, o);
        }
        return this.readRecords(o);
    },

    // private function a store will implement
    onMetaChange: function(meta, recordType, o){

    },
    readRecords: function(json){
        var aRecords = [];
        var cList = json.COLUMNS;
        var cData = json.DATA;
        var idField = this.meta.id;

        for (var i = 0; i < cData.length; i++) {
            var oRecord = {};

            for (var j = 0; j < cList.length; j++) {
                oRecord[cList[j]] = cData[i][j];
            }
            if (idField) {
                var id = cData[i][cList.indexOf(idField)];
                aRecords.push(new Ext.data.Record(oRecord, id));
            } else {
                aRecords.push(new Ext.data.Record(oRecord));
            }
        }
        return {
            success: true,
            records: aRecords
            //totalRecords: json.TOTALROWCOUNT
        };
    }
});

