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));
}
/*******************/
var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));
var compare = (ControlToCompare != null && ControlToCompare != "") ? ValidatorTrim (ValidatorGetValue (ControlToCompare)) : ValueToCompare;
- var left = Convert (ctrl_value, DataType);
+ var left = Convert (ctrl_value, DataType, validator);
if (left == null) {
ValidatorFailed (validator);
return false;
}
- var right = Convert (compare, DataType);
+ var right = Convert (compare, DataType, validator);
if (right == null) {
ValidatorSucceeded (validator);
return true;
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;
}
/*********************/
/* 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;
}