| 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"); | |
| } | |