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