/*
* WebUIValidation.js
*
* Authors:
* Chris Toshok (toshok@ximian.com)
*
* (c) 2005-2009 Novell, Inc. (http://www.novell.com)
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
function WebFormValidation_Initialize(webForm) {
webForm.have_validation_summaries = false;
webForm.HaveRegexp = function ()
{
if (window.RegExp)
return true;
return false;
}
webForm.ValidatorOnLoad = function ()
{
if (typeof (webForm.Page_ValidationSummaries) != 'undefined' && webForm.Page_ValidationSummaries != null) {
webForm.have_validation_summaries = true;
}
if (typeof (webForm.Page_Validators) != 'undefined' || webForm.Page_Validators != null) {
for (var v = 0; v < webForm.Page_Validators.length; v++) {
var vo = webForm.Page_Validators [v];
if (typeof(vo.isvalid) == "string" && vo.isvalid == "False")
vo._isvalid = false;
else
vo._isvalid = true;
if (typeof(vo.enabled) == "string" && vo.enabled == "False")
vo._enabled = false;
else
vo._enabled = true;
if (typeof(vo.evaluationfunction) == "string")
vo.evaluationfunction = webForm [vo.evaluationfunction];
}
}
webForm.Page_ValidationActive = true;
}
webForm.validation_result = true;
webForm.ValidationSummaryOnSubmit = function (group)
{
/* handle validation summaries here */
if (webForm.validation_result == false && webForm.have_validation_summaries) {
for (var vi = 0; vi < webForm.Page_ValidationSummaries.length; vi++) {
var vs = webForm.Page_ValidationSummaries[vi];
if(webForm.IsValidationGroupMatch(vs, group)) {
var header = "";
if(typeof(vs.headertext)=="string")
header = vs.headertext;
if (vs.showsummary != "False") {
if (typeof(vs.displaymode) != "string")
vs.displaymode = "BulletList";
var html = "";
if (vs.displaymode == "List") {
list_pre = "";
list_post = "";
item_pre = "";
item_post = "
";
}
else if (vs.displaymode == "SingleParagraph") {
list_pre = "";
list_post = "
";
item_pre = "";
item_post = " ";
}
else {
list_pre = "
";
item_pre = "\n";
item_post = "";
}
html += header;
html += list_pre;
for (var v = 0; v < webForm.Page_Validators.length; v++) {
var vo = webForm.Page_Validators [v];
if (!vo._isvalid) {
var text = vo.errormessage;
if (text != null && text != "") {
html += item_pre + text + item_post;
}
}
}
html += list_post;
vs.innerHTML = html;
vs.style.display = "block";
}
if (vs.showmessagebox == "True") {
var v_contents = "";
for (var v = 0; v < webForm.Page_Validators.length; v++) {
var vo = webForm.Page_Validators [v];
if (!vo._isvalid) {
var text = vo.errormessage;
if (text != null && text != "") {
v_contents += "-" + text + "\n";
}
}
}
var alert_header = header;
if (alert_header != "")
alert_header += "\n";
summary_contents = alert_header + v_contents;
alert (summary_contents);
}
}
}
}
}
webForm.ValidatorCommonOnSubmit = function ()
{
var rv = webForm.validation_result;
webForm.validation_result = true;
return rv;
}
webForm.ValidatorGetValue = function (controlname)
{
var el = webForm.GetElement (controlname);
if (el == null)
return null;
/* if the element has a 'value' attribute, return it */
if (typeof (el.value) != 'undefined' && el.value != null) {
return el.value;
}
/* if it's a select, loop over the options looking for the
* selected one. */
if (typeof (el.selectedIndex) != 'undefined') {
return el.options[el.selectedIndex].value;
}
return webForm.ValidatorGetValueRecursive(el);
}
webForm.ValidatorGetValueRecursive = function (el)
{
if (typeof(el.value) == "string") {
if (el.type != "radio" || el.checked == true) return el.value;
}
for (var i = 0; i 0);
var beginGroupSize, subsequentGroupSize;
var groupSizeNum = parseInt(validator.groupsize, 10);
if (!isNaN(groupSizeNum) && groupSizeNum > 0) {
beginGroupSize = "{1," + groupSizeNum + "}";
subsequentGroupSize = "{" + groupSizeNum + "}";
}
else {
beginGroupSize = subsequentGroupSize = "+";
}
var exp = new RegExp("^\\s*([-\\+])?((\\d" + beginGroupSize + "(\\" + validator.groupchar + "\\d" + subsequentGroupSize + ")+)|\\d*)"
+ (hasDigits ? "\\" + validator.decimalchar + "?(\\d{0," + validator.digits + "})" : "")
+ "\\s*$");
var m = s.match(exp);
if (m == null)
return null;
if (m[2].length == 0 && hasDigits && m[5].length == 0)
return null;
var cleanInput = (m[1] != null ? m[1] : "") + m[2].replace(new RegExp("(\\" + validator.groupchar + ")", "g"), "") + ((hasDigits && m[5].length > 0) ? "." + m[5] : "");
var num = parseFloat(cleanInput);
return (isNaN(num) ? null : num);
}
webForm.GetFullYear = function (year, maxYear)
{
var twoDigitMaxYear = maxYear % 100;
var centure = maxYear - twoDigitMaxYear;
return ((year > twoDigitMaxYear) ? (centure - 100 + year) : (centure + year));
}
/*******************/
/* validators */
webForm.CompareValidatorEvaluateIsValid = function (validator)
{
var Operator = validator.operator.toLowerCase();
var ControlToValidate = validator.controltovalidate;
var DataType = validator.type;
var ctrl_value = webForm.ValidatorGetValue (ControlToValidate);
if (webForm.ValidatorTrim (ctrl_value) == "") {
webForm.ValidatorSucceeded (validator);
return true;
}
var left = webForm.Convert (ctrl_value, DataType, validator);
if (left == null) {
webForm.ValidatorFailed (validator);
return false;
}
if (Operator == "datatypecheck") {
webForm.ValidatorSucceeded (validator);
return true;
}
var compare = "";
if (typeof(validator.controltocompare) == "string" && document.getElementById(validator.controltocompare))
compare = webForm.ValidatorGetValue(validator.controltocompare);
else if (typeof(validator.valuetocompare) == "string")
compare = validator.valuetocompare;
var right = compare != null ? webForm.Convert (compare, DataType, validator) : null;
if (right == null) {
webForm.ValidatorSucceeded (validator);
return true;
}
var result = false;
if (Operator == "equal") {
result = (left == right);
}
else if (Operator == "notequal") {
result = (left != right);
}
else if (Operator == "lessthan") {
result = (left < right);
}
else if (Operator == "lessthanequal") {
result = (left <= right);
}
else if (Operator == "greaterthan") {
result = (left > right);
}
else if (Operator == "greaterthanequal") {
result = (left >= right);
}
if (result == false) {
webForm.ValidatorFailed (validator);
return false;
}
else {
webForm.ValidatorSucceeded (validator);
return true;
}
}
webForm.RangeValidatorEvaluateIsValid = function (validator)
{
var ControlToValidate = validator.controltovalidate;
var DataType = validator.type;
var ctrl_value = webForm.ValidatorTrim (webForm.ValidatorGetValue (ControlToValidate));
if (ctrl_value == "") {
webForm.ValidatorSucceeded (validator);
return true;
}
var MinimumValue = webForm.Convert (validator.minimumvalue, DataType, validator);
var MaximumValue = webForm.Convert (validator.maximumvalue, DataType, validator);
var val = webForm.Convert (ctrl_value, DataType, validator);
if (val == null || val < MinimumValue || val > MaximumValue) {
webForm.ValidatorFailed (validator);
return false;
}
else {
webForm.ValidatorSucceeded (validator);
return true;
}
}
webForm.RegularExpressionValidatorEvaluateIsValid = function (validator)
{
var ValidationExpression = validator.validationexpression;
var ControlToValidate = validator.controltovalidate;
var ctrl_value = webForm.ValidatorTrim (webForm.ValidatorGetValue (ControlToValidate));
if (ctrl_value == "") {
webForm.ValidatorSucceeded (validator);
return true;
}
if (!webForm.HaveRegexp ())
return false;
var r = new RegExp (ValidationExpression);
match = r.exec (ctrl_value);
if (match == null || match[0] != ctrl_value) {
webForm.ValidatorFailed (validator);
return false;
}
else {
webForm.ValidatorSucceeded (validator);
return true;
}
}
webForm.RequiredFieldValidatorEvaluateIsValid = function (validator)
{
var InitialValue = validator.initialvalue;
var ControlToValidate = validator.controltovalidate;
var ctrl_value = webForm.ValidatorTrim (webForm.ValidatorGetValue (ControlToValidate));
if (ctrl_value == webForm.ValidatorTrim (InitialValue)) {
webForm.ValidatorFailed (validator);
return false;
}
else {
webForm.ValidatorSucceeded (validator);
return true;
}
}
webForm.CustomValidatorEvaluateIsValid = function (validator)
{
var ControlToValidate = validator.controltovalidate;
var evaluationfunc = validator.clientvalidationfunction;
var ctrl_value;
if (ControlToValidate) {
ctrl_value = webForm.ValidatorTrim (webForm.ValidatorGetValue (ControlToValidate));
if ((ctrl_value.length == 0) && ((typeof(validator.validateemptytext) != "string") || (validator.validateemptytext != "true"))) {
webForm.ValidatorSucceeded (validator);
return true;
}
} else
ctrl_value = "";
var result = true;
if (evaluationfunc && evaluationfunc != "") {
args = {Value:ctrl_value, IsValid:true};
eval (evaluationfunc + "(validator, args)");
result = args.IsValid;
}
if (result) {
webForm.ValidatorSucceeded (validator);
return true;
}
else {
webForm.ValidatorFailed (validator);
return false;
}
}
/*********************/
/* utility functions */
webForm.Convert = function (s, ty, validator)
{
var cvt = this ["To" + ty];
if (typeof (cvt) == 'function')
return cvt.call (this, s, validator);
else
return null;
}
webForm.ValidatorUpdateDisplay = function (v, valid)
{
var display = v.display;
/* for validators that aren't displayed, do nothing */
if (display == "None") {
return;
}
v.style.visibility = (valid ? "hidden" : "visible");
if (display == "Dynamic") {
v.style.display = (valid ? "none" : "inline");
}
}
webForm.ValidatorFailed = function (v)
{
webForm.ValidatorUpdateDisplay (v, false);
}
webForm.ValidatorSucceeded = function (v)
{
webForm.ValidatorUpdateDisplay (v, true);
}
webForm.GetElement = function (id)
{
var x = document.getElementById ? document.getElementById (id) :
((document.all) ? document.all [id] : null);
return x;
}
}