5 * Chris Toshok (toshok@ximian.com)
\r
7 * (c) 2005 Novell, Inc. (http://www.novell.com)
\r
9 * Permission is hereby granted, free of charge, to any person obtaining
\r
10 * a copy of this software and associated documentation files (the
\r
11 * "Software"), to deal in the Software without restriction, including
\r
12 * without limitation the rights to use, copy, modify, merge, publish,
\r
13 * distribute, sublicense, and/or sell copies of the Software, and to
\r
14 * permit persons to whom the Software is furnished to do so, subject to
\r
15 * the following conditions:
\r
17 * The above copyright notice and this permission notice shall be
\r
18 * included in all copies or substantial portions of the Software.
\r
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
\r
21 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
\r
22 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
\r
23 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
\r
24 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
\r
25 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
\r
26 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\r
29 var have_validation_summaries = false;
\r
31 function ValidatorOnLoad ()
\r
33 if (typeof (Page_ValidationSummaries) != 'undefined' && Page_ValidationSummaries != null) {
\r
34 have_validation_summaries = true;
\r
35 for (var v in Page_ValidationSummaries) {
\r
36 var vs = Page_ValidationSummaries [v];
\r
37 if (vs.getAttribute ("validationgroup") == null)
\r
38 vs.setAttribute ("validationgroup", "");
\r
42 for (var v in Page_Validators) {
\r
43 var vo = Page_Validators [v];
\r
44 var funcname = vo.getAttribute ("evaluationfunction");
\r
46 func = this[funcname];
\r
48 vo["evaluationfunction"] = func;
\r
50 if (vo.getAttribute ("isvalid") == null)
\r
51 vo.setAttribute ("isvalid", "true");
\r
53 if (vo.getAttribute ("enabled") == null)
\r
54 vo.setAttribute ("enabled", "true");
\r
56 if (vo.getAttribute ("validationgroup") == null)
\r
57 vo.setAttribute ("validationgroup", "");
\r
59 func = vo ["evaluationfunction"];
\r
62 Page_ValidationActive = true;
\r
65 var validation_result = true;
\r
67 function ValidationSummaryOnSubmit (group)
\r
69 /* handle validation summaries here */
\r
70 if (validation_result == false && have_validation_summaries) {
\r
72 for (var vi in Page_ValidationSummaries) {
\r
73 var vs = Page_ValidationSummaries[vi];
\r
75 if(IsValidationGroupMatch(vs, group)) {
\r
77 var header = vs.getAttribute ("headertext");
\r
81 attr = vs.getAttribute ("showsummary");
\r
82 if (attr == null || attr.toLowerCase() == "true") {
\r
83 var displaymode = vs.getAttribute ("displaymode");
\r
84 if (displaymode == null) displaymode = "Bulleted";
\r
88 if (displaymode == "List") {
\r
94 else if (displaymode == "SingleParagraph") {
\r
102 list_post = "</ul>";
\r
103 item_pre = "\n<li>";
\r
104 item_post = "</li>";
\r
109 for (var v in Page_Validators) {
\r
110 var vo = Page_Validators [v];
\r
112 if (vo.getAttribute ("isvalid").toLowerCase() == "false") {
\r
113 var text = ValidatorGetErrorMessage (vo);
\r
114 if (text != null && text != "") {
\r
115 html += item_pre + text + item_post;
\r
121 vs.innerHTML = html;
\r
122 vs.style.display = "block";
\r
125 attr = vs.getAttribute ("showmessagebox");
\r
126 if (attr != null && attr.toLowerCase() == "true") {
\r
127 var v_contents = "";
\r
129 for (var v in Page_Validators) {
\r
130 var vo = Page_Validators [v];
\r
132 if (vo.getAttribute ("isvalid").toLowerCase() == "false") {
\r
133 var text = ValidatorGetErrorMessage (vo);
\r
134 if (text != null && text != "") {
\r
135 v_contents += "-" + text + "\n";
\r
140 var alert_header = header;
\r
141 if (alert_header != "")
\r
142 alert_header += "\n";
\r
143 summary_contents = alert_header + v_contents;
\r
144 alert (summary_contents);
\r
151 function ValidatorCommonOnSubmit ()
\r
153 rv = validation_result;
\r
154 validation_result = true;
\r
158 function ValidatorGetValue (controlname)
\r
160 var el = GetElement (controlname);
\r
162 /* if the element has a 'value' attribute, return it */
\r
163 if (typeof (el.value) != 'undefined' && el.value != null) {
\r
167 /* if it's a select, loop over the options looking for the
\r
169 if (typeof (el.selectedIndex) != 'undefined') {
\r
170 return el.options[el.selectedIndex].value;
\r
174 function ValidatorTrim (s)
\r
176 s = s.replace (/^\s+/g, "");
\r
177 s = s.replace (/\s+$/g, "");
\r
182 function Page_ClientValidate(group)
\r
184 validation_result = true;
\r
186 /* clear out the existing text from all our summaries */
\r
187 if (have_validation_summaries) {
\r
188 for (var vi in Page_ValidationSummaries) {
\r
189 var vs = Page_ValidationSummaries[vi];
\r
190 vs.style.display = "none";
\r
195 for (var v in Page_Validators) {
\r
196 var vo = Page_Validators [v];
\r
197 var evalfunc = vo["evaluationfunction"];
\r
198 var result = false;
\r
200 if (vo.getAttribute ("enabled").toLowerCase() == "false" || !IsValidationGroupMatch(vo, group)) {
\r
202 ValidatorSucceeded (vo);
\r
205 result = evalfunc (vo);
\r
209 validation_result = false;
\r
211 vo.setAttribute("isvalid", result ? "true" : "false");
\r
213 ValidationSummaryOnSubmit(group);
\r
214 return validation_result;
\r
217 function IsValidationGroupMatch(vo, group) {
\r
218 var valGroup = vo.getAttribute ("validationgroup");
\r
219 if ((typeof(group) == "undefined") || (group == null)) {
\r
220 return (valGroup == "");
\r
222 return (valGroup == group);
\r
225 /*******************/
\r
226 /* type converters */
\r
228 function ToInteger (s)
\r
230 if ((v = parseInt(s, 10)) != s - 0)
\r
236 function ToString (s)
\r
241 function ToDouble (s)
\r
243 if ((v = parseFloat(s)) != s - 0)
\r
249 function ToDate (s)
\r
255 function ToCurrency (s)
\r
261 /*******************/
\r
264 function CompareValidatorEvaluateIsValid (validator)
\r
266 var ControlToCompare = validator.getAttribute ("controltocompare");
\r
267 var ValueToCompare = validator.getAttribute ("valuetocompare");
\r
268 var Operator = validator.getAttribute ("operator").toLowerCase();
\r
269 var ControlToValidate = validator.getAttribute ("controltovalidate");
\r
270 var DataType = validator.getAttribute ("datatype");
\r
272 var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));
\r
273 var compare = (ControlToCompare != null && ControlToCompare != "") ? ValidatorTrim (ValidatorGetValue (ControlToCompare)) : ValueToCompare;
\r
275 var left = Convert (ctrl_value, DataType);
\r
276 if (left == null) {
\r
277 ValidatorFailed (validator);
\r
281 var right = Convert (compare, DataType);
\r
282 if (right == null) {
\r
283 ValidatorSucceeded (validator);
\r
287 var result = false;
\r
289 if (Operator == "equal") {
\r
290 result = (left == right);
\r
292 else if (Operator == "notequal") {
\r
293 result = (left != right);
\r
295 else if (Operator == "lessthan") {
\r
296 result = (left < right);
\r
298 else if (Operator == "lessthanequal") {
\r
299 result = (left <= right);
\r
301 else if (Operator == "greaterthan") {
\r
302 result = (left > right);
\r
304 else if (Operator == "greaterthanequal") {
\r
305 result = (left >= right);
\r
308 if (result == false) {
\r
309 ValidatorFailed (validator);
\r
313 ValidatorSucceeded (validator);
\r
318 function RangeValidatorEvaluateIsValid (validator)
\r
320 var MinimumValue = parseInt (validator.getAttribute ("minimumvalue"));
\r
321 var MaximumValue = parseInt (validator.getAttribute ("maximumvalue"));
\r
322 var ControlToValidate = validator.getAttribute ("controltovalidate");
\r
323 var DataType = validator.getAttribute ("datatype");
\r
325 var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));
\r
327 if (ctrl_value == "") {
\r
328 ValidatorSucceeded (validator);
\r
332 var val = Convert (ctrl_value, DataType);
\r
333 if (val == null || val < MinimumValue || val > MaximumValue) {
\r
334 ValidatorFailed (validator);
\r
338 ValidatorSucceeded (validator);
\r
343 function RegularExpressionValidatorEvaluateIsValid (validator)
\r
345 var ValidationExpression = validator.getAttribute ("validationexpression");
\r
346 var ControlToValidate = validator.getAttribute ("controltovalidate");
\r
348 var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));
\r
350 if (ctrl_value == "") {
\r
351 ValidatorSucceeded (validator);
\r
355 var r = new RegExp (ValidationExpression);
\r
356 match = r.exec (ctrl_value);
\r
357 if (match == null || match[0] == "") {
\r
358 ValidatorFailed (validator);
\r
362 ValidatorSucceeded (validator);
\r
367 function RequiredFieldValidatorEvaluateIsValid (validator)
\r
369 var InitialValue = validator.getAttribute ("initialvalue");
\r
370 var ControlToValidate = validator.getAttribute ("controltovalidate");
\r
372 var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));
\r
374 if (ctrl_value == ValidatorTrim (InitialValue)) {
\r
375 ValidatorFailed (validator);
\r
379 ValidatorSucceeded (validator);
\r
384 function CustomValidatorEvaluateIsValid (validator)
\r
386 var InitialValue = validator.getAttribute ("initialvalue");
\r
387 var ControlToValidate = validator.getAttribute ("controltovalidate");
\r
389 if (!ControlToValidate) {
\r
390 ValidatorSucceeded (validator);
\r
394 var evaluationfunc = validator.getAttribute ("clientvalidationfunction");
\r
396 var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));
\r
400 if (evaluationfunc && evaluationfunc != "") {
\r
401 args = {Value:ctrl_value, IsValid:false};
\r
402 eval (evaluationfunc + "(validator, args)");
\r
403 result = args.IsValid;
\r
407 ValidatorSucceeded (validator);
\r
411 ValidatorFailed (validator);
\r
416 /*********************/
\r
417 /* utility functions */
\r
419 function Convert (s, ty)
\r
421 var cvt = this ["To" + ty];
\r
422 if (typeof (cvt) == 'function')
\r
428 function ValidatorUpdateDisplay (v, valid)
\r
430 var display = v.getAttribute ("display");
\r
432 /* for validators that aren't displayed, do nothing */
\r
433 if (display == "None") {
\r
437 v.style.visibility = (valid ? "hidden" : "visible");
\r
438 if (display == "Dynamic") {
\r
439 v.style.display = (valid ? "none" : "inline");
\r
443 function ValidatorGetErrorMessage (v)
\r
445 var text = v.getAttribute ("errormessage");
\r
446 if (text == null || text == "")
\r
447 text = v.getAttribute ("text");
\r
453 function ValidatorGetText (v)
\r
455 var text = v.getAttribute ("text");
\r
456 if (text == null || text == "")
\r
457 text = v.getAttribute ("errormessage");
\r
463 function ValidatorFailed (v)
\r
465 var text = ValidatorGetText (v);
\r
466 v.innerHTML = text;
\r
468 ValidatorUpdateDisplay (v, false);
\r
471 function ValidatorSucceeded (v)
\r
475 ValidatorUpdateDisplay (v, true);
\r
478 function GetElement(id)
\r
480 var x = document.getElementById ? document.getElementById (id) :
\r
481 ((document.all) ? document.all [id] : null);
\r