admin_module 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/Gemfile +2 -0
- data/README.md +7 -0
- data/admin_module.gemspec +3 -1
- data/{bin → exe}/admin_module +0 -0
- data/lib/admin_module.rb +9 -0
- data/lib/admin_module/command/config.rb +20 -0
- data/lib/admin_module/command/gdl.rb +15 -0
- data/lib/admin_module/guideline.rb +8 -0
- data/lib/admin_module/page_factory.rb +43 -2
- data/lib/admin_module/pages.rb +38 -81
- data/lib/admin_module/pages/guideline_page.rb +54 -1
- data/lib/admin_module/pages/guideline_page_400.rb +87 -0
- data/lib/admin_module/pages/guideline_version_page.rb +9 -5
- data/lib/admin_module/pages/guidelines_page.rb +40 -34
- data/lib/admin_module/pages/guidelines_page_400.rb +65 -0
- data/lib/admin_module/pages/guidelines_version_all_page.rb +79 -72
- data/lib/admin_module/pages/guidelines_version_all_page_400.rb +122 -0
- data/lib/admin_module/pages/login_page.rb +2 -2
- data/lib/admin_module/pages/login_page_400.rb +73 -0
- data/lib/admin_module/version.rb +1 -1
- data/spec/data/config/no_ams_version.admin_module +11 -0
- data/spec/data/html/guideline-400.html +2713 -0
- data/spec/data/html/guideline-400_files/BindChildren.js +852 -0
- data/spec/data/html/guideline-400_files/CVlogo.jpg +0 -0
- data/spec/data/html/guideline-400_files/Guideline.js +301 -0
- data/spec/data/html/guideline-400_files/OptimalOutcome.png +0 -0
- data/spec/data/html/guideline-400_files/WebResource(1).axd +561 -0
- data/spec/data/html/guideline-400_files/WebResource.axd +548 -0
- data/spec/data/html/guideline-400_files/styles.css +444 -0
- data/spec/data/html/guideline-400_files/styles2.css +115 -0
- data/spec/data/html/guideline-400_files/tab.css +50 -0
- data/spec/data/html/guideline-400_files/tabpane.js +297 -0
- data/spec/data/html/guideline.html +1809 -0
- data/spec/data/html/guideline_files/BindChildren.js +799 -0
- data/spec/data/html/guideline_files/Guideline.js +300 -0
- data/spec/data/html/guideline_files/LeftMenu.html +0 -0
- data/spec/data/html/guideline_files/MainFrame.html +18 -0
- data/spec/data/html/guideline_files/ScriptResource.axd +3725 -0
- data/spec/data/html/guideline_files/Stylesheet.css +1545 -0
- data/spec/data/html/guideline_files/WebResource(1).axd +0 -0
- data/spec/data/html/guideline_files/WebResource(2).axd +566 -0
- data/spec/data/html/guideline_files/WebResource(3).axd +219 -0
- data/spec/data/html/guideline_files/WebResource.axd +696 -0
- data/spec/data/html/guideline_files/framebar.html +0 -0
- data/spec/data/html/guideline_files/guideline.html +0 -0
- data/spec/data/html/guideline_files/home.png +0 -0
- data/spec/data/html/guideline_files/jquery-ui.css +578 -0
- data/spec/data/html/guideline_files/jquery.js +7 -0
- data/spec/data/html/guideline_files/slidebar.gif +29 -0
- data/spec/data/html/guideline_files/tab.css +49 -0
- data/spec/data/html/guideline_files/tabpane.js +297 -0
- data/spec/data/html/guidelines-400.html +368 -0
- data/spec/data/html/guidelines-400_files/CVlogo.jpg +0 -0
- data/spec/data/html/guidelines-400_files/EditListSearchHelper.js +141 -0
- data/spec/data/html/guidelines-400_files/OptimalOutcome.png +0 -0
- data/spec/data/html/guidelines-400_files/WebResource(1).axd +561 -0
- data/spec/data/html/guidelines-400_files/WebResource.axd +548 -0
- data/spec/data/html/guidelines-400_files/menu.css +29 -0
- data/spec/data/html/guidelines-400_files/menu.js +48 -0
- data/spec/data/html/guidelines-400_files/shadow.gif +0 -0
- data/spec/data/html/guidelines-400_files/styles.css +444 -0
- data/spec/data/html/guidelines-400_files/styles2.css +115 -0
- data/spec/data/html/guidelines.html +217 -0
- data/spec/data/html/guidelines_files/EditListSearchHelper.js +123 -0
- data/spec/data/html/guidelines_files/ScriptResource.axd +3725 -0
- data/spec/data/html/guidelines_files/Stylesheet.css +1545 -0
- data/spec/data/html/guidelines_files/jquery-ui.css +578 -0
- data/spec/data/html/login.aspx.html +293 -0
- data/spec/data/html/login.aspx_files/ScriptResource.axd +3332 -0
- data/spec/data/html/login.aspx_files/Stylesheet.css +1545 -0
- data/spec/data/html/login.aspx_files/jquery-ui.css +578 -0
- data/spec/data/html/login.aspx_files/jquery.js +7 -0
- data/spec/data/html/login400.aspx.html +191 -0
- data/spec/data/html/login400.aspx_files/WebResource(1).axd +561 -0
- data/spec/data/html/login400.aspx_files/WebResource.axd +548 -0
- data/spec/data/html/login400.aspx_files/styles.css +444 -0
- data/spec/data/html/version_all_guidelines-400.html +702 -0
- data/spec/data/html/version_all_guidelines-400_files/CVlogo.jpg +0 -0
- data/spec/data/html/version_all_guidelines-400_files/Calendar.js +521 -0
- data/spec/data/html/version_all_guidelines-400_files/OptimalOutcome.png +0 -0
- data/spec/data/html/version_all_guidelines-400_files/TwoSelects.js +300 -0
- data/spec/data/html/version_all_guidelines-400_files/menu.css +29 -0
- data/spec/data/html/version_all_guidelines-400_files/menu.js +48 -0
- data/spec/data/html/version_all_guidelines-400_files/shadow.gif +0 -0
- data/spec/data/html/version_all_guidelines-400_files/styles(1).css +134 -0
- data/spec/data/html/version_all_guidelines-400_files/styles.css +444 -0
- data/spec/data/html/version_all_guidelines-400_files/styles2.css +115 -0
- data/spec/data/html/version_all_guidelines.html +560 -0
- data/spec/data/html/version_all_guidelines_files/Calendar.js +521 -0
- data/spec/data/html/version_all_guidelines_files/ScriptResource.axd +3725 -0
- data/spec/data/html/version_all_guidelines_files/Stylesheet.css +1545 -0
- data/spec/data/html/version_all_guidelines_files/TwoSelects.js +304 -0
- data/spec/data/html/version_all_guidelines_files/jquery-ui.css +578 -0
- data/spec/lib/admin_module/command/config_spec.rb +27 -0
- data/spec/lib/admin_module/command/gdl_spec.rb +31 -0
- data/spec/lib/admin_module/configuration_spec.rb +47 -0
- data/spec/lib/admin_module/guideline_spec.rb +26 -0
- data/spec/lib/admin_module/page_factory_spec.rb +72 -0
- data/spec/lib/admin_module/pages/guideline_page_400_spec.rb +51 -0
- data/spec/lib/admin_module/pages/guideline_page_spec.rb +50 -0
- data/spec/lib/admin_module/pages/guidelines_page_400_spec.rb +92 -0
- data/spec/lib/admin_module/pages/guidelines_page_spec.rb +91 -0
- data/spec/lib/admin_module/pages/guidelines_version_all_page_400_spec.rb +102 -0
- data/spec/lib/admin_module/pages/guidelines_version_all_page_spec.rb +105 -0
- data/spec/lib/admin_module/pages/login_page_400_spec.rb +42 -0
- data/spec/lib/admin_module/pages/login_page_spec.rb +33 -0
- data/spec/support/html_spec.rb +26 -0
- data/spec/support/mocks.rb +23 -0
- metadata +191 -5
|
@@ -0,0 +1,852 @@
|
|
|
1
|
+
/*---------------------------------------------------------
|
|
2
|
+
BindChildren.js
|
|
3
|
+
This script is used to dynamically show/hide
|
|
4
|
+
elements based on the value of other elements.
|
|
5
|
+
|
|
6
|
+
--- Usage ---
|
|
7
|
+
Include this script on the page containing the controls.
|
|
8
|
+
In page onload event, use the following functions:
|
|
9
|
+
|
|
10
|
+
bindToList(parentID, childID, values, [behavior])
|
|
11
|
+
bindToCheck(parentID, childID, checked, [behavior])
|
|
12
|
+
bindToImage(parentID, childID, showSrc, hideSrc, [behavior])
|
|
13
|
+
bindValueGroup(groupName, childID, groupIDs)
|
|
14
|
+
setFocus(controlID)
|
|
15
|
+
|
|
16
|
+
parentID: string containing the ID of the element that
|
|
17
|
+
will be the source of change events
|
|
18
|
+
childID: string containing the ID of the element that
|
|
19
|
+
will be affected by the change events
|
|
20
|
+
values: single value or array of values of the source
|
|
21
|
+
element that will trigger a change event
|
|
22
|
+
behavior: (optional) defines what attribute of the child
|
|
23
|
+
element will be changed. one of the following:
|
|
24
|
+
- 'v': visibility (e.style.visibility = 'visible'/'hidden')
|
|
25
|
+
- 'e': enabled (e.disabled = false / true)
|
|
26
|
+
- 'd': display (e.style.display = 'inline'/'none');
|
|
27
|
+
- 'b': background color
|
|
28
|
+
- 'c': css class
|
|
29
|
+
- 's': style (as in, CSS string)
|
|
30
|
+
- 't': text value
|
|
31
|
+
- 'i': include (applies only to options of selects)
|
|
32
|
+
- 'k': checKed (applies only to checkboxes or radio buttons)
|
|
33
|
+
- 'f': focus
|
|
34
|
+
putting a '!' in front of the element reverses
|
|
35
|
+
behavior, e.g. '!d' will show the child if the value
|
|
36
|
+
is *not* selected. 'd' is default behavior.
|
|
37
|
+
checked: like value, but true or false, no array
|
|
38
|
+
showSrc: the path to the image to display initially
|
|
39
|
+
hideSrc: the path to the image to display when the image
|
|
40
|
+
is clicked. switches with showSrc
|
|
41
|
+
|
|
42
|
+
--- Hints ---
|
|
43
|
+
* No error will be thrown if the parent element is not found.
|
|
44
|
+
This enables a static onload script block even if the
|
|
45
|
+
controls themselves are rendered conditionaly on the server.
|
|
46
|
+
However, an error will occur if the child is missing.
|
|
47
|
+
* To bind multiple controls to a single element, simply call
|
|
48
|
+
the appropriate bind function multiple times.
|
|
49
|
+
* The difference between visible and display is that invisible
|
|
50
|
+
elements still occupy the same space, while un-displayed
|
|
51
|
+
elements will cause surrounding objects to shrink/expand
|
|
52
|
+
* If something is already defined for the target event (like
|
|
53
|
+
onchange or onclick) then the action will only occur once
|
|
54
|
+
|
|
55
|
+
-- Samples ---
|
|
56
|
+
// show span1 only when list1's value = '1';
|
|
57
|
+
bindToList('list1', 'span1', '1');
|
|
58
|
+
|
|
59
|
+
// show span1 only when list1's value = '1' or '3' or '5';
|
|
60
|
+
bindToList('list1', 'span1', Array('1', '3', '5'));
|
|
61
|
+
|
|
62
|
+
// enable tbl1 only when chk1 is checked
|
|
63
|
+
bindToCheck('chk1', 'tbl1', true, '!e');
|
|
64
|
+
|
|
65
|
+
// same as previous example, different approach
|
|
66
|
+
bindToCheck('chk1', 'tbl1', false, 'e');
|
|
67
|
+
---------------------------------------------------------*/
|
|
68
|
+
|
|
69
|
+
// Code executed every time -------------------------------
|
|
70
|
+
|
|
71
|
+
var boundChildren = new Array();
|
|
72
|
+
var boundGroups = new Array();
|
|
73
|
+
|
|
74
|
+
// functions to extend object functionality
|
|
75
|
+
function array_exists(val) {
|
|
76
|
+
var bFound = false;
|
|
77
|
+
for (var i = 0; i < this.length; i++) {
|
|
78
|
+
if (this[i] == val) {
|
|
79
|
+
bFound = true;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return bFound;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function array_add(val) {
|
|
87
|
+
this[this.length] = val;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
Array.prototype.exists = array_exists;
|
|
91
|
+
Array.prototype.add = array_add;
|
|
92
|
+
|
|
93
|
+
function string_exists(val) {
|
|
94
|
+
return (this == val);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function string_toNumber() {
|
|
98
|
+
return this.replace(/[^\d\.]/g, '') * 1;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
String.prototype.exists = string_exists;
|
|
102
|
+
String.prototype.toNumber = string_toNumber;
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
// functions begin here -----------------------------------
|
|
106
|
+
function changeElement(targetE, value, behavior) {
|
|
107
|
+
/* --------------------------------------------------------
|
|
108
|
+
Changes an attribute of the specified element
|
|
109
|
+
Gets called by the change/click events of bound elements
|
|
110
|
+
If value = true, then show or enable.
|
|
111
|
+
-------------------------------------------------------- */
|
|
112
|
+
var args;
|
|
113
|
+
if (targetE == null) {
|
|
114
|
+
alert('target missing! check setup code');
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (behavior == null) behavior = 'd'; // default
|
|
118
|
+
if (behavior.substr(0, 1) == '!') {
|
|
119
|
+
value = !value;
|
|
120
|
+
behavior = behavior.substr(1);
|
|
121
|
+
}
|
|
122
|
+
if (behavior.indexOf('|') > 0) args = behavior.split('|');
|
|
123
|
+
|
|
124
|
+
switch(behavior.substr(0, 1)) {
|
|
125
|
+
case 'v': // visible
|
|
126
|
+
targetE.style.visibility = (value ? 'visible' : 'hidden' );
|
|
127
|
+
enableValidators(targetE, value);
|
|
128
|
+
break;
|
|
129
|
+
case 'e': // enabled
|
|
130
|
+
enableElement(targetE, value);
|
|
131
|
+
enableValidators(targetE, value);
|
|
132
|
+
break;
|
|
133
|
+
case 'd' : // display
|
|
134
|
+
targetE.style.display = (value ? 'inline' : 'none');
|
|
135
|
+
enableValidators(targetE, value);
|
|
136
|
+
var jlblSal;
|
|
137
|
+
jlblSal = document.getElementById('lblSal')
|
|
138
|
+
if (jlblSal != null)
|
|
139
|
+
{
|
|
140
|
+
targetE = jlblSal;
|
|
141
|
+
targetE.style.display = (value ? 'inline' : 'none');
|
|
142
|
+
enableValidators(targetE, value);
|
|
143
|
+
}
|
|
144
|
+
var jtxtSal;
|
|
145
|
+
jtxtSal = document.getElementById('txtSal')
|
|
146
|
+
if (jtxtSal != null)
|
|
147
|
+
{
|
|
148
|
+
targetE = jtxtSal;
|
|
149
|
+
targetE.style.display = (value ? 'inline' : 'none');
|
|
150
|
+
enableValidators(targetE, value);
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
153
|
+
case 'b' : // background color
|
|
154
|
+
targetE.style.backgroundColor = (value ? args[1] : args[2]);
|
|
155
|
+
break;
|
|
156
|
+
case 'c' : // css class name
|
|
157
|
+
targetE.className = (value ? args[1] : args[2]);
|
|
158
|
+
break;
|
|
159
|
+
case 's' : // style
|
|
160
|
+
targetE.style.cssText = (value ? args[1] : args[2]);
|
|
161
|
+
break;
|
|
162
|
+
case 't' : // text value
|
|
163
|
+
var t = (value ? args[1] : args[2]);
|
|
164
|
+
if (typeof(t) != 'undefined' && t != 'IGNORE') targetE.value = t;
|
|
165
|
+
break;
|
|
166
|
+
case 'i': // include (for options of selects only)
|
|
167
|
+
moveOption(targetE, args[1], value);
|
|
168
|
+
break;
|
|
169
|
+
case 'k': // checKed (checkboxes and radio buttons only)
|
|
170
|
+
var x = (value ? args[1] : args[2]);
|
|
171
|
+
if (typeof(x) != 'undefined') {
|
|
172
|
+
switch (x.toLowerCase()) {
|
|
173
|
+
case 'on':
|
|
174
|
+
case 'check':
|
|
175
|
+
case 'true':
|
|
176
|
+
case '1':
|
|
177
|
+
targetE.checked = true;
|
|
178
|
+
break;
|
|
179
|
+
case 'off':
|
|
180
|
+
case 'uncheck':
|
|
181
|
+
case 'false':
|
|
182
|
+
case '0':
|
|
183
|
+
targetE.checked = false;
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
break;
|
|
188
|
+
case 'f': // focus, only if true
|
|
189
|
+
if (value == true) targetE.focus();
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function enableElement(parentE, value) {
|
|
195
|
+
// disables object and all child nodes of the specified object
|
|
196
|
+
parentE.disabled = !value;
|
|
197
|
+
if (parentE.hasChildNodes()) {
|
|
198
|
+
var inputs = parentE.getElementsByTagName('INPUT');
|
|
199
|
+
for (var i = 0; i < inputs.length; i++) {
|
|
200
|
+
inputs[i].onfocus = (value ? null : inputs[i].blur);
|
|
201
|
+
inputs[i].disabled = !value;
|
|
202
|
+
}
|
|
203
|
+
var selects = parentE.getElementsByTagName('SELECT');
|
|
204
|
+
for (var i = 0; i < selects.length; i++) {
|
|
205
|
+
selects[i].onfocus = (value ? null : selects[i].blur);
|
|
206
|
+
selects[i].disabled = !value;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function enableValidators(parentE, value) {
|
|
212
|
+
// enables/disables all validator controls (spans) in the parent control
|
|
213
|
+
if (parentE.tagName == 'SPAN') parentE.enabled = value;
|
|
214
|
+
if (parentE.hasChildNodes()) {
|
|
215
|
+
var spans = parentE.getElementsByTagName('SPAN');
|
|
216
|
+
for (var i = 0; i < spans.length; i++) {
|
|
217
|
+
spans[i].enabled = value;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function moveOption(selectE, value, isIncluded) {
|
|
223
|
+
// move an option to/from parent.options and .options2
|
|
224
|
+
var index = null;
|
|
225
|
+
|
|
226
|
+
// find index in current collection
|
|
227
|
+
for (var i = 0; i < selectE.options.length; i++) {
|
|
228
|
+
if (selectE.options[i].value == value) {
|
|
229
|
+
index = i;
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (isIncluded) {
|
|
234
|
+
// add to options
|
|
235
|
+
if (index == null && selectE.options2 != null) {
|
|
236
|
+
// find option text in hidden collection
|
|
237
|
+
if (selectE.options2[value] != null) {
|
|
238
|
+
var newOption = new Option(selectE.options2[value], value, false, false);
|
|
239
|
+
selectE.options[selectE.options.length] = newOption;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
} else {
|
|
243
|
+
// remove from options
|
|
244
|
+
if (index != null) {
|
|
245
|
+
if (selectE.options2 == null) selectE.options2 = new Array();
|
|
246
|
+
selectE.options2[value] = selectE.options[index].text;
|
|
247
|
+
selectE.options.remove(index);
|
|
248
|
+
} else {
|
|
249
|
+
// alert('could not find option!');
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function bindToList(parentID, childID, values, behavior) {
|
|
255
|
+
// bind the visiblity of a child control to a list control
|
|
256
|
+
boundChildren.add(bindToList.arguments);
|
|
257
|
+
parentE = document.getElementById(parentID);
|
|
258
|
+
if (parentE != null) {
|
|
259
|
+
// preserve prior event
|
|
260
|
+
attachEvent(parentE, boundList_OnChange, 'change');
|
|
261
|
+
if (behavior == 'i') parentE.options2 = new Array();
|
|
262
|
+
if (behavior != 't') boundList_OnChange(parentE);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
function bindToCheck(parentID, childID, checked, behavior) {
|
|
267
|
+
// bind the visiblity of a child control to a checkbox or radio control
|
|
268
|
+
boundChildren.add(bindToCheck.arguments);
|
|
269
|
+
parentE = document.getElementById(parentID);
|
|
270
|
+
if (parentE != null) {
|
|
271
|
+
attachEvent(parentE, boundCheck_OnClick, 'click');
|
|
272
|
+
boundCheck_OnClick(parentE);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
function bindToImage(parentID, childID, showSrc, hideSrc, behavior) {
|
|
277
|
+
// call this to bind the visiblity of a child control to an image that toggles
|
|
278
|
+
boundChildren.add(bindToImage.arguments);
|
|
279
|
+
parentE = document.getElementById(parentID);
|
|
280
|
+
if (parentE != null) {
|
|
281
|
+
parentE.style.cursor = 'hand';
|
|
282
|
+
attachEvent(parentE, boundImage_OnClick, 'click');
|
|
283
|
+
boundImage_OnClick(parentE);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
function bindValueGroup(groupName, childID, sourceIDs) {
|
|
288
|
+
// bind the sum of all the values in the group array to the value of a control
|
|
289
|
+
var childE = document.getElementById(childID);
|
|
290
|
+
var sourceEs = new Array();
|
|
291
|
+
for (var i = 0; i < sourceIDs.length; i++) {
|
|
292
|
+
sourceE = document.getElementById(sourceIDs[i]);
|
|
293
|
+
if (sourceE != null ) {
|
|
294
|
+
sourceEs.add(sourceE);
|
|
295
|
+
boundChildren.add(Array(sourceIDs[i], groupName));
|
|
296
|
+
attachEvent(sourceE, boundGroup_OnBlur, 'change');
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
boundGroups[groupName] = new Array(childE, sourceEs);
|
|
301
|
+
boundGroup_Refresh(groupName);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
function boundGroup_OnBlur(srcE) {
|
|
305
|
+
// change event of bound group members; find the group and update it
|
|
306
|
+
var item;
|
|
307
|
+
if (srcE == null) srcE = window.event.srcElement;
|
|
308
|
+
for (var i = 0; i < boundChildren.length; i++) {
|
|
309
|
+
item = boundChildren[i];
|
|
310
|
+
if (item != null) {
|
|
311
|
+
if (srcE.id == item[0]) {
|
|
312
|
+
boundGroup_Refresh(item[1]);
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
function boundGroup_Refresh(groupName) {
|
|
320
|
+
// update all items in a group
|
|
321
|
+
var group = boundGroups[groupName];
|
|
322
|
+
var childE = group[0];
|
|
323
|
+
var sourceEs = group[1];
|
|
324
|
+
var total = 0, val = 0;
|
|
325
|
+
|
|
326
|
+
for (var i = 0; i < sourceEs.length; i++) {
|
|
327
|
+
val = sourceEs[i].value.replace(/[^\d\.]/g, '') * 1;
|
|
328
|
+
total += val;
|
|
329
|
+
}
|
|
330
|
+
// format to currency. todo: detect if it is available or not...
|
|
331
|
+
var num = new NumberFormat(total);
|
|
332
|
+
num.setCurrency(true);
|
|
333
|
+
childE.innerText = num.toFormatted();
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function boundList_OnChange(srcE) {
|
|
337
|
+
// change event of bound list objects (select)
|
|
338
|
+
var item;
|
|
339
|
+
if (srcE == null) srcE = window.event.srcElement;
|
|
340
|
+
for (var i = 0; i < boundChildren.length; i++) {
|
|
341
|
+
item = boundChildren[i];
|
|
342
|
+
if (item != null) {
|
|
343
|
+
if (srcE.id == item[0]) {
|
|
344
|
+
childE = document.getElementById(item[1]);
|
|
345
|
+
//childE.style.display = (item[2].exists(srcE.value)) ? '' : 'none';
|
|
346
|
+
if (childE != null) {
|
|
347
|
+
changeElement(childE, item[2].exists(srcE.value), item[3]);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
function boundCheck_OnClick(srcE) {
|
|
355
|
+
// change event of bound check elements (input type=checkbox)
|
|
356
|
+
var item;
|
|
357
|
+
if (srcE == null) srcE = window.event.srcElement;
|
|
358
|
+
for (var i = 0; i < boundChildren.length; i++) {
|
|
359
|
+
item = boundChildren[i];
|
|
360
|
+
if (item != null) {
|
|
361
|
+
if (srcE.id == item[0]) {
|
|
362
|
+
childE = document.getElementById(item[1]);
|
|
363
|
+
//childE.style.display = (item[2] == srcE.checked) ? '' : 'none';
|
|
364
|
+
if (childE != null) {
|
|
365
|
+
changeElement(childE, item[2] == srcE.checked, item[3]);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
function boundImage_OnClick(srcE) {
|
|
373
|
+
// change event of bound image elements
|
|
374
|
+
var item, isReverse = false;
|
|
375
|
+
if (srcE == null) srcE = window.event.srcElement;
|
|
376
|
+
for (var i = 0; i < boundChildren.length; i++) {
|
|
377
|
+
item = boundChildren[i];
|
|
378
|
+
if (item != null) {
|
|
379
|
+
if (srcE.id == item[0]) {
|
|
380
|
+
var childE = document.getElementById(item[1]);
|
|
381
|
+
if (item[4] != null) isReverse = (item[4].substr(0, 1) == '!');
|
|
382
|
+
|
|
383
|
+
if (srcE.src == item[2]) {
|
|
384
|
+
srcE.title = 'Click to ' + (isReverse ? 'collapse' : 'expand');
|
|
385
|
+
srcE.src = item[3];
|
|
386
|
+
item[3] = srcE.src;
|
|
387
|
+
changeElement(childE, false, item[4]);
|
|
388
|
+
} else {
|
|
389
|
+
srcE.title = 'Click to ' + (isReverse ? 'expand' : 'collapse');
|
|
390
|
+
srcE.src = item[2];
|
|
391
|
+
item[2] = srcE.src;
|
|
392
|
+
changeElement(childE, true, item[4]);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// attach a new change event to an element, return the element
|
|
400
|
+
function attachEvent(element, newEvent, eventType) {
|
|
401
|
+
if (typeof(eventType) != 'string') eventType = 'change'; else eventType = eventType.toLowerCase();
|
|
402
|
+
if (typeof(element) == 'string') element = document.getElementById(element);
|
|
403
|
+
if (element == null) return;
|
|
404
|
+
if (typeof(element.events) != 'object') element.events = new Array();
|
|
405
|
+
|
|
406
|
+
// first time registering
|
|
407
|
+
if (typeof(element.events[eventType]) != 'object') {
|
|
408
|
+
element.events[eventType] = new Array();
|
|
409
|
+
if (typeof(element['on' + eventType]) == 'function') element.events[eventType][0] = element['on' + eventType];
|
|
410
|
+
element['on' + eventType] = doEvent;
|
|
411
|
+
}
|
|
412
|
+
var functions = element.events[eventType];
|
|
413
|
+
functions[functions.length] = newEvent;
|
|
414
|
+
|
|
415
|
+
return element;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// this event replaces everything in the 'onclick', 'onchange' etc. events
|
|
419
|
+
function doEvent(element, eventType) {
|
|
420
|
+
if (element == null) element = window.event.srcElement;
|
|
421
|
+
if (eventType == null) eventType = window.event.type;
|
|
422
|
+
|
|
423
|
+
if (typeof(element.events) == 'undefined') return;
|
|
424
|
+
var functions = element.events[eventType.toLowerCase()];
|
|
425
|
+
if (typeof(functions) != 'object') return;
|
|
426
|
+
|
|
427
|
+
for (var i = 0; i < functions.length; i++) {
|
|
428
|
+
var f = functions[i];
|
|
429
|
+
if (typeof(f) == 'function') {
|
|
430
|
+
f(element);
|
|
431
|
+
} else {
|
|
432
|
+
eval(f);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
function setFocus(controlID) {
|
|
438
|
+
// puts focus on the field specified, if possible
|
|
439
|
+
var e = document.getElementById(controlID);
|
|
440
|
+
if (e != null) {
|
|
441
|
+
if ((!e.disabled) && (e.visible)) e.focus();
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
function toggleSection(span, divID) {
|
|
446
|
+
// old function to use plus and minus to show and hide a div
|
|
447
|
+
var div = document.getElementById(divID);
|
|
448
|
+
if (span.innerText == '-') {
|
|
449
|
+
span.innerText = '+';
|
|
450
|
+
div.style.display = 'none';
|
|
451
|
+
} else {
|
|
452
|
+
span.innerText = '-';
|
|
453
|
+
div.style.display = '';
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
function fieldFormat(source, format, arg1, arg2) {
|
|
458
|
+
/* --------------------------------------------------------
|
|
459
|
+
Formats the contents of a field, usually attached to onblur
|
|
460
|
+
source: the element, usually 'this'
|
|
461
|
+
format: format specifier; n[umeric], t[elephone], c[urrency],
|
|
462
|
+
s[sn]
|
|
463
|
+
arg[x]: format-specific arguments, see below
|
|
464
|
+
ex. <input type="text" onblur="fieldFormat(this, 'n', 1);">
|
|
465
|
+
-------------------------------------------------------- */
|
|
466
|
+
if (source.value.length > 0) {
|
|
467
|
+
if (format == null) format = 'n';
|
|
468
|
+
var type = format.substr(0,1).toLowerCase();
|
|
469
|
+
switch(type) {
|
|
470
|
+
case 'c': // currency
|
|
471
|
+
var num = new NumberFormat(source.value);
|
|
472
|
+
num.setCurrency(false);
|
|
473
|
+
num.setPlaces(2);
|
|
474
|
+
source.value = num.toFormatted();
|
|
475
|
+
break;
|
|
476
|
+
case 'n': // general number; arg1 = places
|
|
477
|
+
var num = new NumberFormat(source.value);
|
|
478
|
+
num.setCurrency(false);
|
|
479
|
+
num.setPlaces((arg1 == null ? 2 : arg1));
|
|
480
|
+
source.value = num.toFormatted();
|
|
481
|
+
break;
|
|
482
|
+
case 't': // telephone
|
|
483
|
+
var num = source.value.replace(/[^\d]/g, '').substr(0, 10);
|
|
484
|
+
if (num.length > 0) {
|
|
485
|
+
source.value = '(' + num.substr(0,3) + ') ' + num.substr(3,3) + '-' + num.substr(6,4);
|
|
486
|
+
} else {
|
|
487
|
+
source.value = '';
|
|
488
|
+
}
|
|
489
|
+
break;
|
|
490
|
+
case 's': // ssn
|
|
491
|
+
var num = source.value.replace(/[^\d]/g, '').substr(0, 9);
|
|
492
|
+
if (num.length > 0) {
|
|
493
|
+
source.value = num.substr(0,3) + '-' + num.substr(3,2) + '-' + num.substr(5,4);
|
|
494
|
+
} else {
|
|
495
|
+
source.value = '';
|
|
496
|
+
}
|
|
497
|
+
break;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
if (source.onchange != null) source.onchange();
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
function fieldLimit(source, limit, max, limiter) {
|
|
505
|
+
/* --------------------------------------------------------
|
|
506
|
+
Limits the maxlength of a field based on a character, attach
|
|
507
|
+
to onkeyup.
|
|
508
|
+
source: the element, usually 'this'
|
|
509
|
+
limit: number of characters after limiter to allow
|
|
510
|
+
max: absolute max length
|
|
511
|
+
limiter: character to trigger limit, defaults to '.'
|
|
512
|
+
ex. <input type="text" onkeyup="fieldLimit(this, 3);">
|
|
513
|
+
-------------------------------------------------------- */
|
|
514
|
+
if (limiter == null) limiter = '.';
|
|
515
|
+
if (max == null) max = 999;
|
|
516
|
+
var pos = source.value.indexOf(limiter);
|
|
517
|
+
if (pos > -1 && caretPos(source) > pos) {
|
|
518
|
+
var len = (pos + limit + limiter.length);
|
|
519
|
+
source.maxLength = len;
|
|
520
|
+
if (source.value.length > len) source.value = source.value.substr(0, len);
|
|
521
|
+
} else {
|
|
522
|
+
source.maxLength = max - limit;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
function caretPos(textEl) {
|
|
527
|
+
// returns the position of the caret within a text box
|
|
528
|
+
var i=textEl.value.length+1;
|
|
529
|
+
if (textEl.createTextRange) {
|
|
530
|
+
theCaret = document.selection.createRange().duplicate();
|
|
531
|
+
while (theCaret.parentElement()==textEl && theCaret.move("character",1)==1) --i;
|
|
532
|
+
return i-1;
|
|
533
|
+
}
|
|
534
|
+
else return -1;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
function blurPhone(e) {
|
|
538
|
+
// backwards-compatible
|
|
539
|
+
fieldFormat(e, 'telephone');
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
// mredkj.com
|
|
543
|
+
function NumberFormat(num)
|
|
544
|
+
{
|
|
545
|
+
this.COMMA = ',';
|
|
546
|
+
this.PERIOD = '.';
|
|
547
|
+
this.DASH = '-';
|
|
548
|
+
this.LEFT_PAREN = '(';
|
|
549
|
+
this.RIGHT_PAREN = ')';
|
|
550
|
+
this.LEFT_OUTSIDE = 0;
|
|
551
|
+
this.LEFT_INSIDE = 1;
|
|
552
|
+
this.RIGHT_INSIDE = 2;
|
|
553
|
+
this.RIGHT_OUTSIDE = 3;
|
|
554
|
+
this.LEFT_DASH = 0;
|
|
555
|
+
this.RIGHT_DASH = 1;
|
|
556
|
+
this.PARENTHESIS = 2;
|
|
557
|
+
this.num;
|
|
558
|
+
this.numOriginal;
|
|
559
|
+
this.hasSeparators = false;
|
|
560
|
+
this.separatorValue;
|
|
561
|
+
this.inputDecimalValue;
|
|
562
|
+
this.decimalValue;
|
|
563
|
+
this.negativeFormat;
|
|
564
|
+
this.negativeRed;
|
|
565
|
+
this.hasCurrency;
|
|
566
|
+
this.currencyPosition;
|
|
567
|
+
this.currencyValue;
|
|
568
|
+
this.places;
|
|
569
|
+
this.setNumber = setNumberNF;
|
|
570
|
+
this.toUnformatted = toUnformattedNF;
|
|
571
|
+
this.setInputDecimal = setInputDecimalNF;
|
|
572
|
+
this.setSeparators = setSeparatorsNF;
|
|
573
|
+
this.setCommas = setCommasNF;
|
|
574
|
+
this.setNegativeFormat = setNegativeFormatNF;
|
|
575
|
+
this.setNegativeRed = setNegativeRedNF;
|
|
576
|
+
this.setCurrency = setCurrencyNF;
|
|
577
|
+
this.setCurrencyPrefix = setCurrencyPrefixNF;
|
|
578
|
+
this.setCurrencyValue = setCurrencyValueNF;
|
|
579
|
+
this.setCurrencyPosition = setCurrencyPositionNF;
|
|
580
|
+
this.setPlaces = setPlacesNF;
|
|
581
|
+
this.toFormatted = toFormattedNF;
|
|
582
|
+
this.toPercentage = toPercentageNF;
|
|
583
|
+
this.getOriginal = getOriginalNF;
|
|
584
|
+
this.getRounded = getRoundedNF;
|
|
585
|
+
this.preserveZeros = preserveZerosNF;
|
|
586
|
+
this.justNumber = justNumberNF;
|
|
587
|
+
this.setInputDecimal(this.PERIOD);
|
|
588
|
+
this.setNumber(num);
|
|
589
|
+
this.setCommas(true);
|
|
590
|
+
this.setNegativeFormat(this.LEFT_DASH);
|
|
591
|
+
this.setNegativeRed(false);
|
|
592
|
+
this.setCurrency(true);
|
|
593
|
+
this.setCurrencyPrefix('$');
|
|
594
|
+
this.setPlaces(2);
|
|
595
|
+
}
|
|
596
|
+
function setInputDecimalNF(val)
|
|
597
|
+
{
|
|
598
|
+
this.inputDecimalValue = val;
|
|
599
|
+
}
|
|
600
|
+
function setNumberNF(num)
|
|
601
|
+
{
|
|
602
|
+
this.numOriginal = num;
|
|
603
|
+
this.num = this.justNumber(num);
|
|
604
|
+
}
|
|
605
|
+
function toUnformattedNF()
|
|
606
|
+
{
|
|
607
|
+
return (this.num);
|
|
608
|
+
}
|
|
609
|
+
function getOriginalNF()
|
|
610
|
+
{
|
|
611
|
+
return (this.numOriginal);
|
|
612
|
+
}
|
|
613
|
+
function setNegativeFormatNF(format)
|
|
614
|
+
{
|
|
615
|
+
this.negativeFormat = format;
|
|
616
|
+
}
|
|
617
|
+
function setNegativeRedNF(isRed)
|
|
618
|
+
{
|
|
619
|
+
this.negativeRed = isRed;
|
|
620
|
+
}
|
|
621
|
+
function setSeparatorsNF(isC, separator, decimal)
|
|
622
|
+
{
|
|
623
|
+
this.hasSeparators = isC;
|
|
624
|
+
if (separator == null) separator = this.COMMA;
|
|
625
|
+
if (decimal == null) decimal = this.PERIOD;
|
|
626
|
+
if (separator == decimal)
|
|
627
|
+
{
|
|
628
|
+
this.decimalValue = (decimal == this.PERIOD) ? this.COMMA : this.PERIOD;
|
|
629
|
+
}
|
|
630
|
+
else
|
|
631
|
+
{
|
|
632
|
+
this.decimalValue = decimal;
|
|
633
|
+
}
|
|
634
|
+
this.separatorValue = separator;
|
|
635
|
+
}
|
|
636
|
+
function setCommasNF(isC)
|
|
637
|
+
{
|
|
638
|
+
this.setSeparators(isC, this.COMMA, this.PERIOD);
|
|
639
|
+
}
|
|
640
|
+
function setCurrencyNF(isC)
|
|
641
|
+
{
|
|
642
|
+
this.hasCurrency = isC;
|
|
643
|
+
}
|
|
644
|
+
function setCurrencyValueNF(val)
|
|
645
|
+
{
|
|
646
|
+
this.currencyValue = val;
|
|
647
|
+
}
|
|
648
|
+
function setCurrencyPrefixNF(cp)
|
|
649
|
+
{
|
|
650
|
+
this.setCurrencyValue(cp);
|
|
651
|
+
this.setCurrencyPosition(this.LEFT_OUTSIDE);
|
|
652
|
+
}
|
|
653
|
+
function setCurrencyPositionNF(cp)
|
|
654
|
+
{
|
|
655
|
+
this.currencyPosition = cp
|
|
656
|
+
}
|
|
657
|
+
function setPlacesNF(p)
|
|
658
|
+
{
|
|
659
|
+
this.places = p;
|
|
660
|
+
}
|
|
661
|
+
function toFormattedNF()
|
|
662
|
+
{
|
|
663
|
+
var pos;
|
|
664
|
+
var nNum = this.num;
|
|
665
|
+
var nStr;
|
|
666
|
+
var splitString = new Array(2);
|
|
667
|
+
nNum = this.getRounded(nNum);
|
|
668
|
+
nStr = this.preserveZeros(Math.abs(nNum));
|
|
669
|
+
if (nStr.indexOf(this.PERIOD) == -1)
|
|
670
|
+
{
|
|
671
|
+
splitString[0] = nStr;
|
|
672
|
+
splitString[1] = '';
|
|
673
|
+
}
|
|
674
|
+
else
|
|
675
|
+
{
|
|
676
|
+
splitString = nStr.split(this.PERIOD, 2);
|
|
677
|
+
}
|
|
678
|
+
if (this.hasSeparators)
|
|
679
|
+
{
|
|
680
|
+
pos = splitString[0].length;
|
|
681
|
+
while (pos > 0)
|
|
682
|
+
{
|
|
683
|
+
pos -= 3;
|
|
684
|
+
if (pos <= 0) break;
|
|
685
|
+
splitString[0] = splitString[0].substring(0,pos)
|
|
686
|
+
+ this.separatorValue
|
|
687
|
+
+ splitString[0].substring(pos, splitString[0].length);
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
if (splitString[1].length > 0)
|
|
691
|
+
{
|
|
692
|
+
nStr = splitString[0] + this.decimalValue + splitString[1];
|
|
693
|
+
}
|
|
694
|
+
else
|
|
695
|
+
{
|
|
696
|
+
nStr = splitString[0];
|
|
697
|
+
}
|
|
698
|
+
var c0 = '';
|
|
699
|
+
var n0 = '';
|
|
700
|
+
var c1 = '';
|
|
701
|
+
var n1 = '';
|
|
702
|
+
var n2 = '';
|
|
703
|
+
var c2 = '';
|
|
704
|
+
var n3 = '';
|
|
705
|
+
var c3 = '';
|
|
706
|
+
var negSignL = (this.negativeFormat == this.PARENTHESIS) ? this.LEFT_PAREN : this.DASH;
|
|
707
|
+
var negSignR = (this.negativeFormat == this.PARENTHESIS) ? this.RIGHT_PAREN : this.DASH;
|
|
708
|
+
if (this.currencyPosition == this.LEFT_OUTSIDE)
|
|
709
|
+
{
|
|
710
|
+
if (nNum < 0)
|
|
711
|
+
{
|
|
712
|
+
if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n1 = negSignL;
|
|
713
|
+
if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n2 = negSignR;
|
|
714
|
+
}
|
|
715
|
+
if (this.hasCurrency) c0 = this.currencyValue;
|
|
716
|
+
}
|
|
717
|
+
else if (this.currencyPosition == this.LEFT_INSIDE)
|
|
718
|
+
{
|
|
719
|
+
if (nNum < 0)
|
|
720
|
+
{
|
|
721
|
+
if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n0 = negSignL;
|
|
722
|
+
if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n3 = negSignR;
|
|
723
|
+
}
|
|
724
|
+
if (this.hasCurrency) c1 = this.currencyValue;
|
|
725
|
+
}
|
|
726
|
+
else if (this.currencyPosition == this.RIGHT_INSIDE)
|
|
727
|
+
{
|
|
728
|
+
if (nNum < 0)
|
|
729
|
+
{
|
|
730
|
+
if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n0 = negSignL;
|
|
731
|
+
if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n3 = negSignR;
|
|
732
|
+
}
|
|
733
|
+
if (this.hasCurrency) c2 = this.currencyValue;
|
|
734
|
+
}
|
|
735
|
+
else if (this.currencyPosition == this.RIGHT_OUTSIDE)
|
|
736
|
+
{
|
|
737
|
+
if (nNum < 0)
|
|
738
|
+
{
|
|
739
|
+
if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n1 = negSignL;
|
|
740
|
+
if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n2 = negSignR;
|
|
741
|
+
}
|
|
742
|
+
if (this.hasCurrency) c3 = this.currencyValue;
|
|
743
|
+
}
|
|
744
|
+
nStr = c0 + n0 + c1 + n1 + nStr + n2 + c2 + n3 + c3;
|
|
745
|
+
if (this.negativeRed && nNum < 0)
|
|
746
|
+
{
|
|
747
|
+
nStr = '<font color="red">' + nStr + '</font>';
|
|
748
|
+
}
|
|
749
|
+
return (nStr);
|
|
750
|
+
}
|
|
751
|
+
function toPercentageNF()
|
|
752
|
+
{
|
|
753
|
+
nNum = this.num * 100;
|
|
754
|
+
nNum = this.getRounded(nNum);
|
|
755
|
+
return nNum + '%';
|
|
756
|
+
}
|
|
757
|
+
function getRoundedNF(val)
|
|
758
|
+
{
|
|
759
|
+
var factor;
|
|
760
|
+
var i;
|
|
761
|
+
factor = 1;
|
|
762
|
+
for (i=0; i<this.places; i++)
|
|
763
|
+
{ factor *= 10; }
|
|
764
|
+
val *= factor;
|
|
765
|
+
val = Math.round(val);
|
|
766
|
+
val /= factor;
|
|
767
|
+
return (val);
|
|
768
|
+
}
|
|
769
|
+
function preserveZerosNF(val)
|
|
770
|
+
{
|
|
771
|
+
var i;
|
|
772
|
+
val = val + '';
|
|
773
|
+
if (this.places <= 0) return val;
|
|
774
|
+
var decimalPos = val.indexOf('.');
|
|
775
|
+
if (decimalPos == -1)
|
|
776
|
+
{
|
|
777
|
+
val += '.';
|
|
778
|
+
for (i=0; i<this.places; i++)
|
|
779
|
+
{
|
|
780
|
+
val += '0';
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
else
|
|
784
|
+
{
|
|
785
|
+
var actualDecimals = (val.length - 1) - decimalPos;
|
|
786
|
+
var difference = this.places - actualDecimals;
|
|
787
|
+
for (i=0; i<difference; i++)
|
|
788
|
+
{
|
|
789
|
+
val += '0';
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
return val;
|
|
793
|
+
}
|
|
794
|
+
function justNumberNF(val)
|
|
795
|
+
{
|
|
796
|
+
val = (val==null) ? 0 : val;
|
|
797
|
+
var newVal = val + "";
|
|
798
|
+
var isPercentage = false;
|
|
799
|
+
var isFormattedNeg = false;
|
|
800
|
+
if (newVal.indexOf('%') != -1)
|
|
801
|
+
{
|
|
802
|
+
newVal = newVal.replace(/\%/g, '');
|
|
803
|
+
isPercentage = true;
|
|
804
|
+
}
|
|
805
|
+
if (newVal.indexOf(this.DASH) != -1
|
|
806
|
+
|| (newVal.indexOf(this.LEFT_PAREN) != -1 && newVal.indexOf(this.RIGHT_PAREN) != -1))
|
|
807
|
+
{
|
|
808
|
+
newVal = newVal.replace(/[\-\(\)]/g, '');
|
|
809
|
+
isFormattedNeg = true;
|
|
810
|
+
}
|
|
811
|
+
if (this.inputDecimalValue != this.PERIOD)
|
|
812
|
+
{
|
|
813
|
+
newVal = newVal.replace(/\./g, '');
|
|
814
|
+
}
|
|
815
|
+
var itrDecimal;
|
|
816
|
+
var tempVal = '';
|
|
817
|
+
var foundDecimal = false;
|
|
818
|
+
for (itrDecimal=0; itrDecimal<newVal.length; itrDecimal++)
|
|
819
|
+
{
|
|
820
|
+
if (newVal.charAt(itrDecimal) == this.inputDecimalValue)
|
|
821
|
+
{
|
|
822
|
+
if (foundDecimal)
|
|
823
|
+
{
|
|
824
|
+
}
|
|
825
|
+
else
|
|
826
|
+
{
|
|
827
|
+
tempVal = tempVal + this.PERIOD;
|
|
828
|
+
foundDecimal = true;
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
else
|
|
832
|
+
{
|
|
833
|
+
tempVal = tempVal + newVal.charAt(itrDecimal);
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
newVal = tempVal;
|
|
837
|
+
if (isFormattedNeg) newVal = '-' + newVal;
|
|
838
|
+
if (isNaN(newVal))
|
|
839
|
+
{
|
|
840
|
+
newVal = parseFloat(newVal.replace(/[^\d\.\-]/g, ''));
|
|
841
|
+
newVal = (isNaN(newVal) ? 0 : newVal);
|
|
842
|
+
}
|
|
843
|
+
else if (!isFinite(newVal))
|
|
844
|
+
{
|
|
845
|
+
newVal = 0;
|
|
846
|
+
}
|
|
847
|
+
if (isPercentage)
|
|
848
|
+
{
|
|
849
|
+
newVal = newVal / 100;
|
|
850
|
+
}
|
|
851
|
+
return newVal;
|
|
852
|
+
}
|