Extjs Grid MultiGrouping

HTML

<link rel="stylesheet" href="http://docs.sencha.com/extjs/4.1.3/extjs-build/resources/css/ext-all.css">
<script src="http://docs.sencha.com/extjs/4.1.3/extjs-build/ext-all-dev.js"></script>
`

JavaScript

Ext.define('Ext.data.StoreEx', {
    extend: 'Ext.data.Store',
    
    getGroups: function(requestGroupString) {
        var me = this;
        var records = this.data.items,
            length = records.length,
            groups = [],
            pointers = {},
            record,
            groupStr,
            group,
            i;
        
        var len = 0;
        var fields = [];
        
        
        this.groupers.each(function(item){
            fields.push(item.property);
            len++;
        });
        
        var arr_val = new Array(len);
        
        var val, iter, new_per, grp_td;
        iter = groups;
        for (i = 0; i < length; i++) {
        
            record = records[i];            
            
            new_per = false;
            grp_td = "";
            for(var j=0; j<len; j++){
                val = record.get(fields[j]);
                if (val != arr_val[j] || new_per){
                    
                    iter.push({
                        name: val,
                        children: [],
                        last_grp: (j==len-1), // uses getGroupRows
                        grp_spn: me.col_len - j, // uses in getFeatureTpl. Suppose better approach can be found out
                        grp_td: grp_td // uses in getFeatureTpl. Suppose better approach can be found out
                    });
                    arr_val[j] = val;
                    new_per = true;
                    iter = iter[iter.length-1].children;
                }
                else {
                    iter = iter[iter.length-1].children;    
                }
                grp_td = grp_td + "<td></td>";
            }
            iter.push(record);    

            iter = groups;            
        }

        return groups;
    }
});

Ext.define('Ext.grid.feature.GroupingEx', {
    extend: 'Ext.grid.feature.Grouping',
    alias: 'feature.groupingex',
    
    getGroupRows: function(group, records, preppedRecords,...