    /*!
     * Ext JS Library 3.3.1
     * Copyright(c) 2006-2010 Sencha Inc.
     * licensing@sencha.com
     * http://www.sencha.com/license
     */
    /**
     * @class Ext.ux.tree.TreeGridNodeUI
     * @extends Ext.tree.TreeNodeUI
     */
    Ext.ux.tree.TreeGridNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
        isTreeGridNodeUI: true,

        renderElements : function(n, a, targetNode, bulkRender){
            var t = n.getOwnerTree(),
                cols = t.columns,
                c = cols[0],
                i, buf, len;

            this.indentMarkup = n.parentNode ? n.parentNode.ui.getChildIndent() : '';

            buf = [
                 '',
                    '',
                        '',
                            '', this.indentMarkup, "",
                            '',
                            '',
                            '',
                            '', (c.tpl ? c.tpl.apply(a) : a[c.dataIndex] || c.text), '',
                        ''
            ];

            for(i = 1, len = cols.length; i < len; i++){
                c = cols[i];
                buf.push(
                        '',
                            '',
                                (c.tpl ? c.tpl.apply(a) : a[c.dataIndex]),
                            '',
                        ''
                );
            }

            buf.push(
                '',
                ''
            );
            for(i = 0, len = cols.length; i');
            }
            buf.push('');

            if(bulkRender !== true && n.nextSibling && n.nextSibling.ui.getEl()){
                this.wrap = Ext.DomHelper.insertHtml("beforeBegin", n.nextSibling.ui.getEl(), buf.join(''));
            }else{
                this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf.join(''));
            }

            this.elNode = this.wrap.childNodes[0];
            this.ctNode = this.wrap.childNodes[1].firstChild.firstChild;
            var cs = this.elNode.firstChild.childNodes;
            this.indentNode = cs[0];
            this.ecNode = cs[1];
            this.iconNode = cs[2];
            this.anchor = cs[3];
            this.textNode = cs[3].firstChild;
        },

        // private
        animExpand : function(cb){
            this.ctNode.style.display = "";
            Ext.ux.tree.TreeGridNodeUI.superclass.animExpand.call(this, cb);
        }
    });

    Ext.ux.tree.TreeGridRootNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
        isTreeGridNodeUI: true,

        // private
        render : function(){
            if(!this.rendered){
                this.wrap = this.ctNode = this.node.ownerTree.innerCt.dom;
                this.node.expanded = true;
            }

            if(Ext.isWebKit) {
                // weird table-layout: fixed issue in webkit
                var ct = this.ctNode;
                ct.style.tableLayout = null;
                (function() {
                    ct.style.tableLayout = 'fixed';
                }).defer(1);
            }
        },

        destroy : function(){
            if(this.elNode){
                Ext.dd.Registry.unregister(this.elNode.id);
            }
            delete this.node;
        },

        collapse : Ext.emptyFn,
        expand : Ext.emptyFn
    });