1 |
|
---|
2 | function CheckboxMenu(id, data, persistkeys, globals)
|
---|
3 | {
|
---|
4 | this.id = id;
|
---|
5 | this.menuCheckboxIds = new Array();
|
---|
6 | this.data = data;
|
---|
7 | this.count = 0;
|
---|
8 |
|
---|
9 | var element = document.getElementById(id);
|
---|
10 | var checkboxNodes = element.getElementsByTagName("input");
|
---|
11 |
|
---|
12 | for(var checkboxCount=0; checkboxCount < checkboxNodes.length; checkboxCount++)
|
---|
13 | {
|
---|
14 | var checkboxId = checkboxNodes[checkboxCount].getAttribute('id');
|
---|
15 | var checkboxData = checkboxNodes[checkboxCount].getAttribute('data');
|
---|
16 | var dataSplits = checkboxData.split(',');
|
---|
17 | var defaultValue = checkboxNodes[checkboxCount].getAttribute('value');
|
---|
18 | if (checkboxData != null && checkboxData.indexOf("persist") != -1)
|
---|
19 | persistkeys.push(checkboxId);
|
---|
20 |
|
---|
21 | this.menuCheckboxIds[dataSplits[0]] = checkboxId;
|
---|
22 |
|
---|
23 | // try to get the value for this checkbox id from globals
|
---|
24 | var persistedValue = (globals == null) ? null : globals.VariableExists(checkboxId) ? globals.VariableValue(checkboxId) : null;
|
---|
25 | var currentValue = (persistedValue != null) ? persistedValue : (defaultValue == null) ? "on" : defaultValue;
|
---|
26 |
|
---|
27 | // set the checkbox's check state
|
---|
28 | this.SetCheckState(checkboxId, currentValue);
|
---|
29 |
|
---|
30 | this.count++;
|
---|
31 | }
|
---|
32 | }
|
---|
33 |
|
---|
34 | CheckboxMenu.prototype.SetCheckState=function(id, value)
|
---|
35 | {
|
---|
36 | var checkbox = document.getElementById(id);
|
---|
37 | if(checkbox != null)
|
---|
38 | {
|
---|
39 | checkbox.checked = (value == "on") ? true : false;
|
---|
40 | }
|
---|
41 |
|
---|
42 | // set the value for the checkbox id in the data array
|
---|
43 | this.data[id] = value;
|
---|
44 | }
|
---|
45 |
|
---|
46 | CheckboxMenu.prototype.GetCheckState=function(id)
|
---|
47 | {
|
---|
48 | var checkbox = document.getElementById(id);
|
---|
49 | if(checkbox != null)
|
---|
50 | return checkbox.checked;
|
---|
51 | return false;
|
---|
52 | }
|
---|
53 |
|
---|
54 | CheckboxMenu.prototype.ToggleCheckState=function(id)
|
---|
55 | {
|
---|
56 | // at least one checkbox must always be checked
|
---|
57 | var checkedCount = this.GetCheckedCount();
|
---|
58 |
|
---|
59 | if(this.data[id] == "on" && checkedCount > 1)
|
---|
60 | this.SetCheckState(id, "off");
|
---|
61 | else
|
---|
62 | this.SetCheckState(id, "on");
|
---|
63 | }
|
---|
64 |
|
---|
65 | // returns the checkbox id associated with a key
|
---|
66 | CheckboxMenu.prototype.GetCheckboxId=function(key)
|
---|
67 | {
|
---|
68 | return this.menuCheckboxIds[key];
|
---|
69 | }
|
---|
70 |
|
---|
71 | // returns the array of checkbox ids
|
---|
72 | CheckboxMenu.prototype.GetCheckboxIds=function()
|
---|
73 | {
|
---|
74 | return this.menuCheckboxIds;
|
---|
75 | }
|
---|
76 |
|
---|
77 | // returns the @data attribute of the checkbox element
|
---|
78 | CheckboxMenu.prototype.GetCheckboxData=function(checkboxId)
|
---|
79 | {
|
---|
80 | var checkbox = document.getElementById(checkboxId);
|
---|
81 | if (checkbox == null) return "";
|
---|
82 | return checkbox.getAttribute('data');
|
---|
83 | }
|
---|
84 |
|
---|
85 | CheckboxMenu.prototype.GetDropdownLabelId=function()
|
---|
86 | {
|
---|
87 | var checkboxCount = this.count;
|
---|
88 | var checkedCount = this.GetCheckedCount();
|
---|
89 | var idPrefix = this.id;
|
---|
90 |
|
---|
91 | // if all boxes checked, use showall label
|
---|
92 | if (checkedCount == checkboxCount)
|
---|
93 | return idPrefix.concat("AllLabel");
|
---|
94 |
|
---|
95 | // if only one is checked, use label appropriate for that one checkbox
|
---|
96 | if (checkedCount == 1)
|
---|
97 | {
|
---|
98 | for(var key in this.menuCheckboxIds)
|
---|
99 | {
|
---|
100 | if (this.data[this.menuCheckboxIds[key]] == "on")
|
---|
101 | {
|
---|
102 | return idPrefix.concat(key,'Label');
|
---|
103 | }
|
---|
104 | }
|
---|
105 | }
|
---|
106 |
|
---|
107 | // if multiple or zero checked, use multiple label
|
---|
108 | return idPrefix.concat("MultipleLabel");
|
---|
109 | }
|
---|
110 |
|
---|
111 | CheckboxMenu.prototype.GetCheckedCount=function()
|
---|
112 | {
|
---|
113 | var count = 0;
|
---|
114 | for(var key in this.menuCheckboxIds)
|
---|
115 | {
|
---|
116 | if (this.data[this.menuCheckboxIds[key]] == "on")
|
---|
117 | count++;
|
---|
118 | }
|
---|
119 | return (count);
|
---|
120 | }
|
---|
121 |
|
---|
122 | // returns an array containing the ids of the checkboxes that are checked
|
---|
123 | CheckboxMenu.prototype.GetCheckedIds=function()
|
---|
124 | {
|
---|
125 | var idArray = new Array();
|
---|
126 | for(var key in this.menuCheckboxIds)
|
---|
127 | {
|
---|
128 | if (this.data[this.menuCheckboxIds[key]] == "on")
|
---|
129 | idArray.push(this.menuCheckboxIds[key]);
|
---|
130 | }
|
---|
131 | return idArray;
|
---|
132 | }
|
---|
133 |
|
---|
134 | CheckboxMenu.prototype.GetGroupCheckedCount=function(checkboxGroup)
|
---|
135 | {
|
---|
136 | var count = 0;
|
---|
137 | for(var i = 0; i < checkboxGroup.length; i++)
|
---|
138 | {
|
---|
139 | if (this.data[checkboxGroup[i]] == "on")
|
---|
140 | count++;
|
---|
141 | }
|
---|
142 | return (count);
|
---|
143 | }
|
---|
144 |
|
---|
145 | CheckboxMenu.prototype.ToggleGroupCheckState=function(id, checkboxGroup)
|
---|
146 | {
|
---|
147 | // at least one checkbox must always be checked
|
---|
148 | var checkedCount = this.GetGroupCheckedCount(checkboxGroup);
|
---|
149 |
|
---|
150 | // if the group has multiple checkboxes, one must always be checked; so toggle to "off" only if more than one currently checked
|
---|
151 | // if the group has only one checkbox, it's okay to toggle it on/off
|
---|
152 | if(this.data[id] == "on" && (checkedCount > 1 || checkboxGroup.length == 1))
|
---|
153 | this.SetCheckState(id, "off");
|
---|
154 | else
|
---|
155 | this.SetCheckState(id, "on");
|
---|
156 | }
|
---|
157 |
|
---|