var have_validation_summaries = false;
+function HaveRegexp ()
+{
+ if (window.RegExp)
+ return true;
+ return false;
+}
+
function ValidatorOnLoad ()
{
if (typeof (Page_ValidationSummaries) != 'undefined' && Page_ValidationSummaries != null)
have_validation_summaries = true;
- for (var v in Page_Validators) {
+ for (var v = 0; v < Page_Validators.length; v++) {
var vo = Page_Validators [v];
var funcname = vo.getAttribute ("evaluationfunction");
html += header;
html += list_pre;
- for (var v in Page_Validators) {
+ for (var v = 0; v < Page_Validators.length; v++) {
var vo = Page_Validators [v];
if (vo.getAttribute ("isvalid").toLowerCase() == "false") {
if (attr != null && attr.toLowerCase() == "true") {
var v_contents = "";
- for (var v in Page_Validators) {
+ for (var v = 0; v < Page_Validators.length; v++) {
var vo = Page_Validators [v];
if (vo.getAttribute ("isvalid").toLowerCase() == "false") {
}
}
- for (var v in Page_Validators) {
+ for (var v = 0; v < Page_Validators.length; v++) {
var vo = Page_Validators [v];
var evalfunc = vo["evaluationfunction"];
var result = false;
/*******************/
/* type converters */
-function ToInteger (s)
+function ToInteger (s, validator)
{
if ((v = parseInt(s, 10)) != s - 0)
return null;
return v;
}
-function ToString (s)
+function ToString (s, validator)
{
return s;
}
-function ToDouble (s)
+function ToDouble (s, validator)
{
if ((v = parseFloat(s)) != s - 0)
return null;
return v;
}
-function ToDate (s)
+function ToDate (s, validator)
{
- /* NYI */
- return null;
+ if (!HaveRegexp ())
+ return null;
+ var m, day, month, year;
+ var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/]|\\. ?)(\\d{1,2})\\4(\\d{1,2})\\s*$");
+ m = s.match(yearFirstExp);
+ if (m != null && (m[2].length == 4 || validator.dateorder == "ymd")) {
+ day = m[6];
+ month = m[5];
+ year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10), validator.cutoffyear)
+ }
+ else {
+ if (validator.dateorder == "ymd") return null;
+ var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-/]|\\. ?)(\\d{1,2})\\2((\\d{4})|(\\d{2}))\\s*$");
+ m = s.match(yearLastExp);
+ if (m == null) return null;
+ if (validator.dateorder == "mdy") {
+ day = m[3];
+ month = m[1];
+ }
+ else {
+ day = m[1];
+ month = m[3];
+ }
+ year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10), validator.cutoffyear)
+ }
+ month -= 1;
+ var date = new Date(year, month, day);
+ return (typeof(date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null;
}
function ToCurrency (s)
{
- /* NYI */
- return null;
+ if (!HaveRegexp ())
+ return null;
+
+ var hasDigits = (validator.digits > 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);
+}
+
+function GetFullYear(year, maxYear)
+{
+ var twoDigitMaxYear = maxYear % 100;
+ var centure = maxYear - twoDigitMaxYear;
+ return ((year > twoDigitMaxYear) ? (centure - 100 + year) : (centure + year));
}
/*******************/
/* validators */
+function CompareValidatorEvaluateIsValid (validator)
+{
+ var ControlToCompare = validator.getAttribute ("controltocompare");
+ var ValueToCompare = validator.getAttribute ("valuetocompare");
+ var Operator = validator.getAttribute ("operator").toLowerCase();
+ var ControlToValidate = validator.getAttribute ("controltovalidate");
+ var DataType = validator.getAttribute ("datatype");
+
+ var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));
+ var compare = (ControlToCompare != null && ControlToCompare != "") ? ValidatorTrim (ValidatorGetValue (ControlToCompare)) : ValueToCompare;
+
+ var left = Convert (ctrl_value, DataType, validator);
+ if (left == null) {
+ ValidatorFailed (validator);
+ return false;
+ }
+
+ var right = Convert (compare, DataType, validator);
+ if (right == null) {
+ 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) {
+ ValidatorFailed (validator);
+ return false;
+ }
+ else {
+ ValidatorSucceeded (validator);
+ return true;
+ }
+}
+
function RangeValidatorEvaluateIsValid (validator)
{
var MinimumValue = parseInt (validator.getAttribute ("minimumvalue"));
return true;
}
- var val = Convert (ctrl_value, DataType);
+ var val = Convert (ctrl_value, DataType, validator);
if (val == null || val < MinimumValue || val > MaximumValue) {
ValidatorFailed (validator);
return false;
return true;
}
+ if (!HaveRegexp ())
+ return false; // better fail than pass invalidated input to the
+ // backend
+
var r = new RegExp (ValidationExpression);
match = r.exec (ctrl_value);
- if (match == null || match[0] == "") {
+ if (match == null || match[0] != ctrl_value) {
ValidatorFailed (validator);
return false;
}
{
var InitialValue = validator.getAttribute ("initialvalue");
var ControlToValidate = validator.getAttribute ("controltovalidate");
+
+ if (!ControlToValidate) {
+ ValidatorSucceeded (validator);
+ return true;
+ }
+
var evaluationfunc = validator.getAttribute ("clientvalidationfunction");
var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));
/*********************/
/* utility functions */
-function Convert (s, ty)
+function Convert (s, ty, validator)
{
var cvt = this ["To" + ty];
if (typeof (cvt) == 'function')
- return cvt (s);
+ return cvt (s, validator);
else
return null;
}
{
v.innerHTML = "";
- ValidatorUpdateDisplay (v, false);
+ ValidatorUpdateDisplay (v, true);
}
function GetElement(id)