Ext.tree.RadlexTreeLoader = Ext.extend(Ext.tree.TreeLoader, {
    processResponse : function(response, node, callback, scope){
        var json = response.responseText;
        try {
            var o = response.responseData || Ext.decode(json);
            node.beginUpdate();
			if(o.length>0 && Ext.value(o[0].CHILDCOUNT,'0').valueOf() > 0){
				for(var i=0; i<o[0].SUBCLASS.length; i++){
					var n = this.createNode(o[0].SUBCLASS[i]);
					if(n){
						node.appendChild(n);
					}
				}
			}
            node.endUpdate();
            this.runCallback(callback, scope || node, [node]);
        }catch(e){
            this.handleFailure(response);
        }
    },
	

    createNode : function(attr){
        if(this.baseAttrs){
            Ext.applyIf(attr, this.baseAttrs);
        }
        if(this.applyLoader !== false){
            attr.loader = this;
        }
		if(Ext.isString(attr.uiProvider)){
           attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider);
        }

		// Added an interceptor function (below) to rename the correct attributes.
		attr = this.processAttributes(attr);
	   
        return(attr.leaf ?
                        new Ext.tree.TreeNode(attr) :
                        new Ext.tree.AsyncTreeNode(attr));
    },


	processAttributes : function(attr){
		var temp = attr;
		attr = {};
		attr.iconCls = 'radlex-tree-node';
		attr.text = Ext.util.Format.capitalize(temp.LABEL);
		attr.leaf = (temp.CHILDCOUNT && temp.CHILDCOUNT.valueOf() > 0 ? false:true);
		attr.radlexID = temp.ID;
		attr.id = temp.ID;
		
		return attr;
    }
});
Ext.reg('radlextreeloader', Ext.tree.RadlexTreeLoader);
