/**
 * @author nando
 */

/**
 * @requires OpenLayers/Map.js
 * @requires OpenLayers/Layer/WMS.js
 * @requires OpenLayers/Layer/WMS/Untiled.js
 */

Ext.namespace('mapfish.widgets');

mapfish.widgets.SOSLayerTree = function(config) {
    Ext.apply(this, config);
    mapfish.widgets.SOSLayerTree.superclass.constructor.call(this);
}

Ext.extend(mapfish.widgets.SOSLayerTree, Ext.tree.TreePanel, {
    
    rootVisible: false,
    animate: true,
    autoScroll: true,
    map_layers: {},
    map_legend: {},

    _extractOLModel: function(){
        var layersArray = this.map.layers.slice();
        var layers = [];
        var l, leg;
        
        layers.push({text: 'Atlas Remanescentes 2008',
                     expanded: true,
                     children: [{text: 'Mata', 
                                 icon: '/site_media/images/legenda/rema_mata.gif',
                                 cls: 'leg-node'},
                                {text: 'Mangue', 
                                 icon: '/site_media/images/legenda/rema_mangue.gif',
                                 cls: 'leg-node'},
                                {text: 'Restinga', 
                                 icon: '/site_media/images/legenda/rema_restinga.gif',
                                 cls: 'leg-node'},
                                {text: 'Área Urbana',
                                 icon: '/site_media/images/legenda/rema_area_urbana.gif',
                                 cls: 'leg-node'},
                                {text: 'Nuvem', 
                                 icon: '/site_media/images/legenda/rema_nuvem.gif',
                                 cls: 'leg-node'}
                                 ]});
        layers.push({text: 'Mapa da Lei 11.428/06',
                     expanded: true,
                     children: [{text: 'Domínio da Mata Atlântica', 
                                 icon: '/site_media/images/legenda/dma.gif',
                                 cls: 'leg-node'}
                                 ]});        
        
        for (var i = 0; i < layersArray.length; i++) {
            l = layersArray[i];
            if (!l.isBaseLayer){
                this.map_layers[l.name] = l;
                leg = [];
                if (this.map_legend[l.name]){
                    for (var j=0; j<this.map_legend[l.name].length; j++){
                        leg.push({text: this.map_legend[l.name][j]['text'],
                                  icon: this.map_legend[l.name][j]['icon'],
                                  cls: "leg-node"
                                  });                
                    }
                    
                }
                layers.push({text: l.name, 
                             checked: l.getVisibility(),
                             expanded: l.getVisibility(),
                             cls: '',
                             layerName: l.name,
                             children: leg
                             });                            
            }
        }
        
        return layers;
    },

    initComponent: function(){
        mapfish.widgets.SOSLayerTree.superclass.initComponent.call(this);
        
        this.addListener("checkchange", function (node, checked) {
           // alert(node.attributes.layerName + ' => '+ checked);
           this.map_layers[node.attributes.layerName].setVisibility(checked);
           if (checked)
               node.expand();
           else
               node.collapse();
        }, this);
                
        if (!this.model) {
            this._automaticModel = true;
            this.model = this._extractOLModel();
        }
        
        function buildTree(attributes) {
            var node = new Ext.tree.TreeNode(attributes);

            var cs = attributes.children;
            node.leaf = !cs;
            if (!cs)
                return node;

            for (var i = 0; i < cs.length; i++) {
                // XXX This index is sometimes undefined on IE for unknown reason
                if (!cs[i]) {
                    continue;
                }

                node.appendChild(buildTree(cs[i]));
            }
            return node;
        }        
        
        var root = {
            text: 'Root',
            draggable: false, // disable root node dragging
            id: 'source',
            children: this.model,
            leaf: false
        };
        
        var rootNode = buildTree(root);

        this.setRootNode(rootNode);
        
    },
        
    // private
    onRender: function(container, position) {
        if (!this.el) {
            this.el = document.createElement('div');
        }

        mapfish.widgets.SOSLayerTree.superclass.onRender.apply(this, arguments);
    }        
    
});

Ext.reg('soslayertree', mapfish.widgets.SOSLayerTree);