function CheckboxMenu(id, data, persistkeys, globals) { this.id = id; this.menuCheckboxIds = new Array(); this.data = data; this.count = 0; var element = document.getElementById(id); var checkboxNodes = element.getElementsByTagName("input"); for(var checkboxCount=0; checkboxCount < checkboxNodes.length; checkboxCount++) { var checkboxId = checkboxNodes[checkboxCount].getAttribute('id'); var checkboxData = checkboxNodes[checkboxCount].getAttribute('data'); var dataSplits = checkboxData.split(','); var defaultValue = checkboxNodes[checkboxCount].getAttribute('value'); if (checkboxData != null && checkboxData.indexOf("persist") != -1) persistkeys.push(checkboxId); this.menuCheckboxIds[dataSplits[0]] = checkboxId; // try to get the value for this checkbox id from globals var persistedValue = (globals == null) ? null : globals.VariableExists(checkboxId) ? globals.VariableValue(checkboxId) : null; var currentValue = (persistedValue != null) ? persistedValue : (defaultValue == null) ? "on" : defaultValue; // set the checkbox's check state this.SetCheckState(checkboxId, currentValue); this.count++; } } CheckboxMenu.prototype.SetCheckState=function(id, value) { var checkbox = document.getElementById(id); if(checkbox != null) { checkbox.checked = (value == "on") ? true : false; } // set the value for the checkbox id in the data array this.data[id] = value; } CheckboxMenu.prototype.GetCheckState=function(id) { var checkbox = document.getElementById(id); if(checkbox != null) return checkbox.checked; return false; } CheckboxMenu.prototype.ToggleCheckState=function(id) { // at least one checkbox must always be checked var checkedCount = this.GetCheckedCount(); if(this.data[id] == "on" && checkedCount > 1) this.SetCheckState(id, "off"); else this.SetCheckState(id, "on"); } // returns the checkbox id associated with a key CheckboxMenu.prototype.GetCheckboxId=function(key) { return this.menuCheckboxIds[key]; } // returns the array of checkbox ids CheckboxMenu.prototype.GetCheckboxIds=function() { return this.menuCheckboxIds; } // returns the @data attribute of the checkbox element CheckboxMenu.prototype.GetCheckboxData=function(checkboxId) { var checkbox = document.getElementById(checkboxId); if (checkbox == null) return ""; return checkbox.getAttribute('data'); } CheckboxMenu.prototype.GetDropdownLabelId=function() { var checkboxCount = this.count; var checkedCount = this.GetCheckedCount(); var idPrefix = this.id; // if all boxes checked, use showall label if (checkedCount == checkboxCount) return idPrefix.concat("AllLabel"); // if only one is checked, use label appropriate for that one checkbox if (checkedCount == 1) { for(var key in this.menuCheckboxIds) { if (this.data[this.menuCheckboxIds[key]] == "on") { return idPrefix.concat(key,'Label'); } } } // if multiple or zero checked, use multiple label return idPrefix.concat("MultipleLabel"); } CheckboxMenu.prototype.GetCheckedCount=function() { var count = 0; for(var key in this.menuCheckboxIds) { if (this.data[this.menuCheckboxIds[key]] == "on") count++; } return (count); } // returns an array containing the ids of the checkboxes that are checked CheckboxMenu.prototype.GetCheckedIds=function() { var idArray = new Array(); for(var key in this.menuCheckboxIds) { if (this.data[this.menuCheckboxIds[key]] == "on") idArray.push(this.menuCheckboxIds[key]); } return idArray; } CheckboxMenu.prototype.GetGroupCheckedCount=function(checkboxGroup) { var count = 0; for(var i = 0; i < checkboxGroup.length; i++) { if (this.data[checkboxGroup[i]] == "on") count++; } return (count); } CheckboxMenu.prototype.ToggleGroupCheckState=function(id, checkboxGroup) { // at least one checkbox must always be checked var checkedCount = this.GetGroupCheckedCount(checkboxGroup); // if the group has multiple checkboxes, one must always be checked; so toggle to "off" only if more than one currently checked // if the group has only one checkbox, it's okay to toggle it on/off if(this.data[id] == "on" && (checkedCount > 1 || checkboxGroup.length == 1)) this.SetCheckState(id, "off"); else this.SetCheckState(id, "on"); }