adjustFormula=function(formula){
                                return xui.replace(formula, [
                                    // protect all
                                    [/\/\*[^*]*\*+([^\/][^*]*\*+)*\//,'$0'],
                                    [/\/\/[^\n]*/,'$0'],
                                    [/\/(\\[\/\\]|[^*\/])(\\.|[^\/\n\\])*\/[gim]*/,'$0'],
                                    [/"(\\.|[^"\\])*"/,'$0'],
                                    [/'(\\.|[^'\\])*'/,'$0'],
                                    [/[\w]+\(/,'$0'],
                                    // replace cells
                                    [/\b([A-Z]+[\d]+)\b/,function(a){
                                        return map[a[0]] || (exists[a[0]] ? a[0] : ("'"+a[0]+"'"));
                                    }]
                                ]);
                            }
save children first
                            var pool=prf.getSubNode("POOL").get(0),arr=[];
                            xui.arr.each(prf.children,function(v){
                                if(v[0] && v[0].rendered){
                                    pool.appendChild(v[0].getRootNode());
                                    arr.push(v);
                                }
                            });
                            //keep children, prevent to be destroyed
                            if(arr.length){
                                prf._pool_children = arr;
                            }

                            // reset memory map
                            prf.children=[];
                        }
                    },
                    afterInit:function(){
                        prf._$tableInited=1;
                    },
                    afterRender:function(isForced){
                        var table=this;
                        //console.log('afterRender');
                        xui.tryF(prf.$onrender,[],prf);

                        //  onLayoutChanged(prf);

                        // Set id for important nodes, for getting profile from dom id
                        var node = prf.getSubNode("BOX");
                        node = node.first(); node.id(prf.key + "-MASTER:" + prf.serialId + ":");
                        node = node.first(); node.id(prf.key + "-HOLDER:" + prf.serialId + ":");
                        node = node.first(); node.id(prf.key + "-HIDER:" + prf.serialId + ":");
                        node = node.first(); node.id(prf.key + "-SPREADER:" + prf.serialId + ":");
                        if(prf.properties.height=="auto"){
                            prf.getSubNodes("BOX").height('auto');
                        }
                        if(prf._$tableInited){
                            var map = prf.$cellIdChangedMap, exists=prf.ItemIdMapSubSerialId;

                            //*** adjut formula
                            var adjustFormula=function(formula){
                                return xui.replace(formula, [
                                    // protect all
                                    [/\/\*[^*]*\*+([^\/][^*]*\*+)*\//,'$0'],
                                    [/\/\/[^\n]