// ===============================================================
// CBkort version 2.x, copyright Carl Bro GIS&IT, 2006
// ===============================================================
// $Archive: /Products/CBKort2/development/2.6/standard_upgrade_03/wwwroot/js/standard/themegroup.js $ 
// $Date: 9-01-12 21:22 $
// $Revision: 8 $ 
// $Author: Kpo $
// =============================================================== 

ThemeGroup = SpatialMap.Class({
    
    name: null,
    displayname: null,
    expanded: false,
    path: null,
    
    buttontype: 'checkbutton',
    selectable: false,
    
    parentObject: null,
    
    legendElement: null,
    
    elements: [],
    
    status: 0,
    
    htmlelement: null,
    
    initialize: function (options) {
        // Add properties from options to this.
        OpenLayers.Util.applyDefaults (this,options);
        
        // Attach this to all child elements
        for (var i=0;i<this.elements.length;i++) {
            this.elements[i].setParentObject (this);
        }
        //THEMESELECTOR
        this.expanded = (this.expanded == 'false' || this.expanded == false ? false : true);

        // Change the onclick event
        this.groupelement = $('lbl_'+this.name);
        if (this.groupelement) {
            this.groupelement.onclick = SpatialMap.Function.bind(this.groupClicked, this);
        }
        // Change the onclick event
        this.inputlement = $('groupcheckbox_'+this.name);
        if (this.inputlement) {
            this.inputlement.onclick = SpatialMap.Function.bind(this.buttonClicked, this);
        }
        
    },
    
    //THEMESELECTOR
    groupClicked: function (show) {
        show = (typeof show == 'boolean' ? show : null);
        this.expanded = !this.expanded;
        treeClick(this.groupelement,show);
        cbKort.log ('THEMEGROUP_CHANGED - ',this);
        cbKort.events.fireEvent ('THEMEGROUP_CHANGED',this);
    },

    //THEMESELECTOR
    buttonClicked: function () {
        var themestatus = (this.status != 2);
        if (themestatus) {
            this.groupClicked (themestatus);
        }
        for (var i=0;i<this.elements.length;i++) {
            if (this.elements[i].CLASS_NAME == 'Theme') {
                this.elements[i].setVisibility (themestatus);
            } else if (this.elements[i].CLASS_NAME == 'ThemeGroup') {
                // Handle multiple levels
            }
        }
    },
    
    //THEMESELECTOR
    setButton: function () {
    	if (this.selectable === true || this.selectable === 'true') {
	    	var visibleElements = 0; 
	        for (var i=0;i<this.elements.length;i++) {
	            if (this.elements[i].CLASS_NAME == 'Theme') {
	            	visibleElements += (this.elements[i].visible ? 1 : 0);
	            } else if (this.elements[i].CLASS_NAME == 'ThemeGroup') {
	                // Handle multiple levels
	            }
	        }
	        cbKort.log ('ThemeGroup.setButton () - ',this,visibleElements,this.elements.length);
	        var img = getElement('groupcheckbox_'+this.name);
	        if(img) {
	            if(visibleElements == 0) {
	                img.src = img.src.replace(/[du][in]___.*gif/,"___ch.gif");
	                img.src = img.src.replace(/___.*gif/,"un___ch.gif");
	                this.status = 0;
	            } else if(0 < visibleElements && visibleElements < this.elements.length) {
	                if(this.status == 2) {
	                	img.src = img.src.replace(/___.*gif/,"di___ch.gif");
	                } else {
	                	img.src = img.src.replace(/[du][in]___.*gif/,"di___ch.gif");
	                }
	                this.status = 1;
	            } else if(visibleElements == this.elements.length) {
	                img.src = img.src.replace(/[du][in]___.*gif/,"___ch.gif");
	                this.status = 2;
	            }
	        }
    	}
    },

    set: function () {
        
    },
    
    getExpanded: function () {
        var list = [];
        if (this.expanded) {
            list.push (this.name);
        }
        for (var i=0;i<this.elements.length;i++) {
            if (this.elements[i].CLASS_NAME == 'ThemeGroup') {
                list = list.concat (this.elements[i].getExpanded ());
            }
        }
        return list;
    },

    // Return a list of objects with information on how to configure SpatialMap.Map
    getMapThemes: function (themename) {
        var a = [];
        for (var i=0;i<this.elements.length;i++) {
            var result = null;
            if (this.elements[i].CLASS_NAME == 'Theme') {
                result = this.elements[i].getMapConfig ();
                if (themename && this.elements[i].name == themename) {
                    return [result];
                }
            } else if (this.elements[i].CLASS_NAME == 'ThemeGroup') {
                result = this.elements[i].getMapThemes (themename);
            }
            if (result != null) {
                a = a.concat (result);
            }
        }
        return a;
    },

    getTheme: function (name) {
        var returnvalue = null;
        for (var i=0;i<this.elements.length;i++) {
            if (this.elements[i].CLASS_NAME == 'Theme') {
                if (this.elements[i].name == name) {
                    returnvalue = this.elements[i];
                    break;
                }
            } else if (this.elements[i].CLASS_NAME == 'ThemeGroup') {
                returnvalue = this.elements[i].getTheme (name);
                if (returnvalue != null) {
                    break;
                }
            }
        }
        return returnvalue;
    },
    
    // Hide all the layers (if visible) when a theme in a radiobutton group is changed
    themeChanged: function (theme) {
        if (this.buttontype == 'radiobutton') {
            for (var i=0;i<this.elements.length;i++) {
                if (this.elements[i].CLASS_NAME == 'Theme') {
                    if (this.elements[i].visible && this.elements[i].name != theme.name) {
                        this.elements[i].setVisibility (false);
                    }
                }
            }
        }
    },
    
    //NEW THEMESELECTOR
    draw: function (element) {
        if (element && typeof element != 'object') {
            element = $(element);
        }
        this.htmlelement = element;
        var newelements = '<div style="font-weight:bold;" id="themeselectorgrouptitle_'+this.name+'">'+this.displayname+'</div><div id="themeselectorgroupelement_'+this.name+'">';
        for (var i=0;i<this.elements.length;i++) {
            newelements += '<div style"" id="themeselectorelement_' + this.elements[i].name + '"></div>';
        }
        newelements += '</div>';
        this.htmlelement.innerHTML = newelements;
        
        $('themeselectorgrouptitle_'+this.name).onclick = SpatialMap.Function.bind(this.toggle, this);
        
        for (var i=0;i<this.elements.length;i++) {
            this.elements[i].draw ('themeselectorelement_' + this.elements[i].name);
        }

        //To set the style
        this.expanded = !this.expanded;
        this.toggle ();
    },
    
    //NEW THEMESELECTOR
    toggle: function () {
        if (this.expanded) {
            $('themeselectorgrouptitle_'+this.name).style.fontStyle = 'italic';
            $('themeselectorgroupelement_'+this.name).style.display = 'none';
            this.expanded = false;
        } else {
            $('themeselectorgrouptitle_'+this.name).style.fontStyle = 'normal';
            $('themeselectorgroupelement_'+this.name).style.display = 'block';
            this.expanded = true;
        }
        cbKort.events.fireEvent ('THEMEGROUP_CHANGED',this);
    },
    
    // Change the state of all themes according to a list of themenames 
    setInitialThemeVisibility: function (themenamelist) {
        for (var i=0;i<this.elements.length;i++) {
            if (this.elements[i].CLASS_NAME == 'Theme') {
                this.elements[i].visible = false;
                for (var j=0;j<themenamelist.length;j++) {
                    if (this.elements[i].name == themenamelist[j]) {
                        cbKort.currentLayers.push (this.elements[i].name);
                        this.elements[i].visible = true;
                        themenamelist.splice(j,1);
                        j--;
                    }
                }
            } else if (this.elements[i].CLASS_NAME == 'ThemeGroup') {
                this.elements[i].setInitialThemeVisibility (themenamelist);
            }
        }
    },
    
    // class_ is either legend_themegroupelement or legend_themegroupselement (note the s)
    setLegend: function (element, class_) {
        var counter = 0;
        if (cbKort.legendVisible == true) {
            if (this.legendElement == null) {
                if (element && typeof element == 'string') {
                    element = getElement(element);
                }
                this.legendElement = element;
                var newelements = '';
                for (var i=0;i<this.elements.length;i++) {
                    newelements += '<div class="' + class_ + '" id="legendelement_' + this.elements[i].name + '"></div>';
                }
                this.legendElement.innerHTML = newelements;
            }
            for (var i=0;i<this.elements.length;i++) {
                counter += this.elements[i].setLegend ('legendelement_' + this.elements[i].name, 'legend_themegroupelement');
            }
            if (counter) {
                showBlock (this.legendElement);
            } else {
                hideBlock (this.legendElement);
            }
        }
        return counter;
    },

    setVisibility: function (themenamelist) {
        for (var i=0;i<this.elements.length;i++) {
            if (this.elements[i].CLASS_NAME == 'Theme') {
                var visible = false;
                for (var j=0;j<themenamelist.length;j++) {
                    if (this.elements[i].name == themenamelist[j]) {
                        visible = true;
                        themenamelist.splice(j,1);
                        j--;
                    }
                }
                if (this.elements[i].visible != visible) {
                    this.elements[i].setVisibility (visible);
                }
            } else if (this.elements[i].CLASS_NAME == 'ThemeGroup') {
                this.elements[i].setVisibility (themenamelist);
            }
        }
    },

    setMap: function () {
        for (var i=0;i<this.elements.length;i++) {
            this.elements[i].setMap ();
        }
    },
    
    getCopyRightText: function () {
        var a = [];
        for (var i=0;i<this.elements.length;i++) {
            var result = this.elements[i].getCopyRightText ();
            if (result != null) {
                a = a.concat(result);
            }
        }
        return a;
    },
    
    getMapLayersID: function () {
        var a = [];
        for (var i=0;i<this.elements.length;i++) {
            var result = this.elements[i].getMapLayersID ();
            if (result != null && result.length) {
                a = a.concat(result);
            }
        }
        return a;
    },
    
    redrawTheme: function (name) {
        for (var i=0;i<this.elements.length;i++) {
            if (this.elements[i].CLASS_NAME == 'Theme') {
                if (this.elements[i].name == name) {
                    this.elements[i].redraw ();
                    return true;
                }
            } else if (this.elements[i].CLASS_NAME == 'ThemeGroup') {
                var returnvalue = this.elements[i].redrawTheme (name);
                if (returnvalue) {
                    return true;
                }
            }
        }
        return false;
    },
    
    setParentObject: function (obj) {
        this.parentObject = obj;
    },
    
    CLASS_NAME: 'ThemeGroup'
});

