[metacat-cvs] metacat/lib/style/skins/default include_advancedsearch.jsp
Duane Costa
costa at ecoinformatics.org
Thu Nov 17 15:21:40 PST 2005
costa 05/11/17 15:21:40
Modified: lib/style/skins/default include_advancedsearch.jsp
Log:
Bug #2207. Metacat Advanced Search interface.
Improvements to Advanced Search form:
(1) Delete keywordSearch() function. Not used in advanced search form.
(2) Re-initialize hidden form values for geographic boundaries.
(3) Change table width to 100% so horizontal rules will span the full width.
(4) Comment out input field that allows user to restrict search to a particular LTER site. This is only useful within LTER.
(5) Add client-side input validation code. Not all of this JavaScript is really needed; some can eventually be removed.
Revision Changes Path
1.2 +1004 -12 metacat/lib/style/skins/default/include_advancedsearch.jsp
Index: include_advancedsearch.jsp
===================================================================
RCS file: /cvs/metacat/lib/style/skins/default/include_advancedsearch.jsp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- include_advancedsearch.jsp 16 Nov 2005 18:35:33 -0000 1.1
+++ include_advancedsearch.jsp 17 Nov 2005 23:21:40 -0000 1.2
@@ -8,8 +8,8 @@
* For Details: http://www.nceas.ucsb.edu/
*
* '$Author: costa $'
- * '$Date: 2005/11/16 18:35:33 $'
- * '$Revision: 1.1 $'
+ * '$Date: 2005/11/17 23:21:40 $'
+ * '$Revision: 1.2 $'
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -61,14 +61,6 @@
return canSearch;
}
- function keywordSearch(formObj, searchKeyword) {
- var searchString = trim(searchKeyword);
- if (searchString=="") searchString="%";
- formObj.anyfield.value=searchString;
- formObj.submit();
- return true;
- }
-
function submitRequest(form) {
var x_range = document.map.get_x_range();
var y_range = document.map.get_y_range();
@@ -81,7 +73,11 @@
var y_lo = y_range.substring(0, y_index);
var y_hi = y_range.substring(y_index + 1, y_length);
- // alert("xrange: " + x_range + " y_range: " + y_range);
+ // Re-initialize the hidden form values prior to submitting
+ document.advancedSearchForm.northBound.value = "";
+ document.advancedSearchForm.southBound.value = "";
+ document.advancedSearchForm.eastBound.value = "";
+ document.advancedSearchForm.westBound.value = "";
if ((x_range != "-180.0 180.0") && (y_range != "-90.0 90.0")) {
document.advancedSearchForm.northBound.value = y_hi;
@@ -122,7 +118,7 @@
action="advancedsearchforward.jsp"
onsubmit="return validateAdvancedSearchForm(this)"
target="_top">
- <table>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" >
<tr>
<td colspan="2"><hr/></td>
</tr>
@@ -347,6 +343,14 @@
<td> </td>
<td> </td>
</tr>
+
+<!--
+ Un-comment the following section to include an input box that allows the
+ user to restrict the search to a specific LTER site. Obviously, this is
+ probably useful only within LTER.
+-->
+
+<!--
<tr>
<td colspan="2"><hr/></td>
</tr>
@@ -398,6 +402,7 @@
<td> </td>
<td> </td>
</tr>
+-->
<tr>
<td colspan="2"><hr/></td>
</tr>
@@ -442,6 +447,993 @@
<input type="hidden" name="eastBound" value=""/>
<input type="hidden" name="westBound" value=""/>
</form>
+ <script type="text/javascript" language="Javascript1.1">
+
+ <!-- Begin JavaScript input validation checking code.
+
+ var bCancel = false;
+
+ function validateAdvancedSearchForm(form) {
+ if (bCancel)
+ return true;
+ else
+ var formValidationResult;
+ formValidationResult = validateFloat(form) && validateFloatRange(form);
+ return (formValidationResult == 1);
+ }
+
+ function advancedSearchForm_FloatValidations () {
+ this.a0 = new Array("westBound", "West Boundary must be a number.", new Function ("varName", "this.min='-180.0'; this.max='180.0'; return this[varName];"));
+ this.a1 = new Array("eastBound", "East Boundary must be a number.", new Function ("varName", "this.min='-180.0'; this.max='180.0'; return this[varName];"));
+ this.a2 = new Array("northBound", "North Boundary must be a number.", new Function ("varName", "this.min='-90.0'; this.max='90.0'; return this[varName];"));
+ this.a3 = new Array("southBound", "South Boundary must be a number.", new Function ("varName", "this.min='-90.0'; this.max='90.0'; return this[varName];"));
+ }
+
+ function advancedSearchForm_DateValidations () {
+ this.a0 = new Array("startDate", "Start Date must be a date (YYYY-MM-DD).", new Function ("varName", "this.datePattern='yyyy-MM-dd'; return this[varName];"));
+ this.a1 = new Array("endDate", "End Date must be a date (YYYY-MM-DD).", new Function ("varName", "this.datePattern='yyyy-MM-dd'; return this[varName];"));
+ }
+
+ function advancedSearchForm_floatRange () {
+ this.a0 = new Array("westBound", "West Boundary must be in the range -180.0 through 180.0.", new Function ("varName", "this.min='-180.0'; this.max='180.0'; return this[varName];"));
+ this.a1 = new Array("eastBound", "East Boundary must be in the range -180.0 through 180.0.", new Function ("varName", "this.min='-180.0'; this.max='180.0'; return this[varName];"));
+ this.a2 = new Array("northBound", "North Boundary must be in the range -90.0 through 90.0.", new Function ("varName", "this.min='-90.0'; this.max='90.0'; return this[varName];"));
+ this.a3 = new Array("southBound", "South Boundary must be in the range -90.0 through 90.0.", new Function ("varName", "this.min='-90.0'; this.max='90.0'; return this[varName];"));
+ }
+
+ /**
+ * Check to see if fields are in a valid float range.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * @param form The form validation is taking place on.
+ */
+ function validateFloatRange(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+ oRange = eval('new ' + formName.value + '_floatRange()');
+ for (x in oRange) {
+ var field = form[oRange[x][0]];
+
+ if ((field.type == 'hidden' ||
+ field.type == 'text' || field.type == 'textarea') &&
+ (field.value.length > 0) &&
+ field.disabled == false) {
+
+ var fMin = parseFloat(oRange[x][2]("min"));
+ var fMax = parseFloat(oRange[x][2]("max"));
+ var fValue = parseFloat(field.value);
+ if (!(fValue >= fMin && fValue <= fMax)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oRange[x][1];
+ isValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }
+
+
+ /**
+ * This is a place holder for common utilities used across the javascript validation
+ *
+ **/
+
+
+ /**
+ * Check to see if fields are a valid byte.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * @param form The form validation is taking place on.
+ */
+ function validateByte(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+ oByte = eval('new ' + formName.value + '_ByteValidations()');
+
+ for (x in oByte) {
+ var field = form[oByte[x][0]];
+
+ if ((field.type == 'hidden' ||
+ field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'select-one' ||
+ field.type == 'radio') &&
+ field.disabled == false) {
+
+ var value = '';
+ // get field's value
+ if (field.type == "select-one") {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ } else {
+ value = field.value;
+ }
+
+ if (value.length > 0) {
+ if (!isAllDigits(value)) {
+ bValid = false;
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oByte[x][1];
+
+ } else {
+
+ var iValue = parseInt(value);
+ if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oByte[x][1];
+ bValid = false;
+ }
+ }
+ }
+
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+
+ /**
+ * A field is considered valid if less than the specified maximum.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * <strong>Caution:</strong> Using <code>validateMaxLength</code> on a password field in a
+ * login page gives unnecessary information away to hackers. While it only slightly
+ * weakens security, we suggest using it only when modifying a password.</p>
+ * @param form The form validation is taking place on.
+ */
+ function validateMaxLength(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+ oMaxLength = eval('new ' + formName.value + '_maxlength()');
+ for (x in oMaxLength) {
+ var field = form[oMaxLength[x][0]];
+
+ if ((field.type == 'hidden' ||
+ field.type == 'text' ||
+ field.type == 'password' ||
+ field.type == 'textarea') &&
+ field.disabled == false) {
+
+ var iMax = parseInt(oMaxLength[x][2]("maxlength"));
+ if (field.value.length > iMax) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oMaxLength[x][1];
+ isValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }
+
+
+ /**
+ * Check to see if fields must contain a value.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * @param form The form validation is taking place on.
+ */
+
+ function validateRequired(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+ oRequired = eval('new ' + formName.value + '_required()');
+
+ for (x in oRequired) {
+ var field = form[oRequired[x][0]];
+
+ if ((field.type == 'hidden' ||
+ field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'file' ||
+ field.type == 'checkbox' ||
+ field.type == 'select-one' ||
+ field.type == 'password') &&
+ field.disabled == false) {
+
+ var value = '';
+ // get field's value
+ if (field.type == "select-one") {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ } else if (field.type == 'checkbox') {
+ if (field.checked) {
+ value = field.value;
+ }
+ } else {
+ value = field.value;
+ }
+
+ if (trim(value).length == 0) {
+
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oRequired[x][1];
+ isValid = false;
+ }
+ } else if (field.type == "select-multiple") {
+ var numOptions = field.options.length;
+ lastSelected=-1;
+ for(loop=numOptions-1;loop>=0;loop--) {
+ if(field.options[loop].selected) {
+ lastSelected = loop;
+ value = field.options[loop].value;
+ break;
+ }
+ }
+ if(lastSelected < 0 || trim(value).length == 0) {
+ if(i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oRequired[x][1];
+ isValid=false;
+ }
+ } else if ((field.length > 0) && (field[0].type == 'radio' || field[0].type == 'checkbox')) {
+ isChecked=-1;
+ for (loop=0;loop < field.length;loop++) {
+ if (field[loop].checked) {
+ isChecked=loop;
+ break; // only one needs to be checked
+ }
+ }
+ if (isChecked < 0) {
+ if (i == 0) {
+ focusField = field[0];
+ }
+ fields[i++] = oRequired[x][1];
+ isValid=false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }
+
+ // Trim whitespace from left and right sides of s.
+ function trim(s) {
+ return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
+ }
+
+
+ /**
+ * Check to see if fields are a valid integer.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * @param form The form validation is taking place on.
+ */
+ function validateInteger(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+ oInteger = eval('new ' + formName.value + '_IntegerValidations()');
+ for (x in oInteger) {
+ var field = form[oInteger[x][0]];
+
+ if ((field.type == 'hidden' ||
+ field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'select-one' ||
+ field.type == 'radio') &&
+ field.disabled == false) {
+
+ var value = '';
+ // get field's value
+ if (field.type == "select-one") {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ } else {
+ value = field.value;
+ }
+
+ if (value.length > 0) {
+
+ if (!isAllDigits(value)) {
+ bValid = false;
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oInteger[x][1];
+
+ } else {
+ var iValue = parseInt(value);
+ if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oInteger[x][1];
+ bValid = false;
+ }
+ }
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function isAllDigits(argvalue) {
+ argvalue = argvalue.toString();
+ var validChars = "0123456789";
+ var startFrom = 0;
+ if (argvalue.substring(0, 2) == "0x") {
+ validChars = "0123456789abcdefABCDEF";
+ startFrom = 2;
+ } else if (argvalue.charAt(0) == "0") {
+ validChars = "01234567";
+ startFrom = 1;
+ } else if (argvalue.charAt(0) == "-") {
+ startFrom = 1;
+ }
+
+ for (var n = startFrom; n < argvalue.length; n++) {
+ if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
+ }
+ return true;
+ }
+
+
+ /**
+ * Check to see if fields are a valid date.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * @param form The form validation is taking place on.
+ */
+ function validateDate(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+ oDate = eval('new ' + formName.value + '_DateValidations()');
+
+ for (x in oDate) {
+ var field = form[oDate[x][0]];
+ var value = field.value;
+ var datePattern = oDate[x][2]("datePatternStrict");
+ // try loose pattern
+ if (datePattern == null)
+ datePattern = oDate[x][2]("datePattern");
+ if ((field.type == 'hidden' ||
+ field.type == 'text' ||
+ field.type == 'textarea') &&
+ (value.length > 0) && (datePattern.length > 0) &&
+ field.disabled == false) {
+ var MONTH = "MM";
+ var DAY = "dd";
+ var YEAR = "yyyy";
+ var orderMonth = datePattern.indexOf(MONTH);
+ var orderDay = datePattern.indexOf(DAY);
+ var orderYear = datePattern.indexOf(YEAR);
+ if ((orderDay < orderYear && orderDay > orderMonth)) {
+ var iDelim1 = orderMonth + MONTH.length;
+ var iDelim2 = orderDay + DAY.length;
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+ if (iDelim1 == orderDay && iDelim2 == orderYear) {
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
+ } else if (iDelim1 == orderDay) {
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
+ } else if (iDelim2 == orderYear) {
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
+ } else {
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
+ }
+ var matched = dateRegexp.exec(value);
+ if(matched != null) {
+ if (!isValidDate(matched[2], matched[1], matched[3])) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
+ var iDelim1 = orderDay + DAY.length;
+ var iDelim2 = orderMonth + MONTH.length;
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+ if (iDelim1 == orderMonth && iDelim2 == orderYear) {
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
+ } else if (iDelim1 == orderMonth) {
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
+ } else if (iDelim2 == orderYear) {
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
+ } else {
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
+ }
+ var matched = dateRegexp.exec(value);
+ if(matched != null) {
+ if (!isValidDate(matched[1], matched[2], matched[3])) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
+ var iDelim1 = orderYear + YEAR.length;
+ var iDelim2 = orderMonth + MONTH.length;
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+ if (iDelim1 == orderMonth && iDelim2 == orderDay) {
+ dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
+ } else if (iDelim1 == orderMonth) {
+ dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
+ } else if (iDelim2 == orderDay) {
+ dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
+ } else {
+ dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
+ }
+ var matched = dateRegexp.exec(value);
+ if(matched != null) {
+ if (!isValidDate(matched[3], matched[2], matched[1])) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function isValidDate(day, month, year) {
+ if (month < 1 || month > 12) {
+ return false;
+ }
+ if (day < 1 || day > 31) {
+ return false;
+ }
+ if ((month == 4 || month == 6 || month == 9 || month == 11) &&
+ (day == 31)) {
+ return false;
+ }
+ if (month == 2) {
+ var leap = (year % 4 == 0 &&
+ (year % 100 != 0 || year % 400 == 0));
+ if (day>29 || (day == 29 && !leap)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+
+ /**
+ * Check to see if fields are a valid creditcard number based on Luhn checksum.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * @param form The form validation is taking place on.
+ */
+ function validateCreditCard(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+ oCreditCard = eval('new ' + formName.value + '_creditCard()');
+
+ for (x in oCreditCard) {
+ if ((form[oCreditCard[x][0]].type == 'text' ||
+ form[oCreditCard[x][0]].type == 'textarea') &&
+ (form[oCreditCard[x][0]].value.length > 0) &&
+ form[oCreditCard[x][0]].disabled == false) {
+ if (!luhnCheck(form[oCreditCard[x][0]].value)) {
+ if (i == 0) {
+ focusField = form[oCreditCard[x][0]];
+ }
+ fields[i++] = oCreditCard[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ /**
+ * Checks whether a given credit card number has a valid Luhn checksum.
+ * This allows you to spot most randomly made-up or garbled credit card numbers immediately.
+ * Reference: http://www.speech.cs.cmu.edu/~sburke/pub/luhn_lib.html
+ */
+ function luhnCheck(cardNumber) {
+ if (isLuhnNum(cardNumber)) {
+ var no_digit = cardNumber.length;
+ var oddoeven = no_digit & 1;
+ var sum = 0;
+ for (var count = 0; count < no_digit; count++) {
+ var digit = parseInt(cardNumber.charAt(count));
+ if (!((count & 1) ^ oddoeven)) {
+ digit *= 2;
+ if (digit > 9) digit -= 9;
+ };
+ sum += digit;
+ };
+ if (sum == 0) return false;
+ if (sum % 10 == 0) return true;
+ };
+ return false;
+ }
+
+ function isLuhnNum(argvalue) {
+ argvalue = argvalue.toString();
+ if (argvalue.length == 0) {
+ return false;
+ }
+ for (var n = 0; n < argvalue.length; n++) {
+ if ((argvalue.substring(n, n+1) < "0") ||
+ (argvalue.substring(n,n+1) > "9")) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+
+ /**
+ * Check to see if fields is in a valid integer range.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * @param form The form validation is taking place on.
+ */
+ function validateIntRange(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+ oRange = eval('new ' + formName.value + '_intRange()');
+ for (x in oRange) {
+ var field = form[oRange[x][0]];
+ if (field.disabled == false) {
+ var value = '';
+ if (field.type == 'hidden' ||
+ field.type == 'text' || field.type == 'textarea' ||
+ field.type == 'radio' ) {
+ value = field.value;
+ }
+ if (field.type == 'select-one') {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ }
+ if (value.length > 0) {
+ var iMin = parseInt(oRange[x][2]("min"));
+ var iMax = parseInt(oRange[x][2]("max"));
+ var iValue = parseInt(value);
+ if (!(iValue >= iMin && iValue <= iMax)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oRange[x][1];
+ isValid = false;
+ }
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }
+
+
+ /**
+ * Check to see if fields are a valid short.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * @param form The form validation is taking place on.
+ */
+ function validateShort(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+ oShort = eval('new ' + formName.value + '_ShortValidations()');
+
+ for (x in oShort) {
+ var field = form[oShort[x][0]];
+
+ if ((field.type == 'hidden' ||
+ field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'select-one' ||
+ field.type == 'radio') &&
+ field.disabled == false) {
+
+ var value = '';
+ // get field's value
+ if (field.type == "select-one") {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ } else {
+ value = field.value;
+ }
+
+ if (value.length > 0) {
+ if (!isAllDigits(value)) {
+ bValid = false;
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oShort[x][1];
+
+ } else {
+
+ var iValue = parseInt(value);
+ if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oShort[x][1];
+ bValid = false;
+ }
+ }
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+
+ /**
+ * Check to see if fields are a valid float.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * @param form The form validation is taking place on.
+ */
+ function validateFloat(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+ oFloat = eval('new ' + formName.value + '_FloatValidations()');
+ for (x in oFloat) {
+ var field = form[oFloat[x][0]];
+
+ if ((field.type == 'hidden' ||
+ field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'select-one' ||
+ field.type == 'radio') &&
+ field.disabled == false) {
+
+ var value = '';
+ // get field's value
+ if (field.type == "select-one") {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ } else {
+ value = field.value;
+ }
+
+ if (value.length > 0) {
+ // remove '.' before checking digits
+ var tempArray = value.split('.');
+ //Strip off leading '0'
+ var zeroIndex = 0;
+ var joinedString= tempArray.join('');
+ while (joinedString.charAt(zeroIndex) == '0') {
+ zeroIndex++;
+ }
+ var noZeroString = joinedString.substring(zeroIndex,joinedString.length);
+
+ if (!isAllDigits(noZeroString)) {
+ bValid = false;
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oFloat[x][1];
+
+ } else {
+ var iValue = parseFloat(value);
+ if (isNaN(iValue)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oFloat[x][1];
+ bValid = false;
+ }
+ }
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+
+ /**
+ * Check to see if fields are a valid email address.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * @param form The form validation is taking place on.
+ */
+ function validateEmail(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+
+ oEmail = eval('new ' + formName.value + '_email()');
+
+ for (x in oEmail) {
+ var field = form[oEmail[x][0]];
+ if ((field.type == 'hidden' ||
+ field.type == 'text' ||
+ field.type == 'textarea') &&
+ (field.value.length > 0) &&
+ field.disabled == false) {
+ if (!checkEmail(field.value)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oEmail[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ /**
+ * Reference: Sandeep V. Tamhankar (stamhankar at hotmail.com),
+ * http://javascript.internet.com
+ */
+ function checkEmail(emailStr) {
+ if (emailStr.length == 0) {
+ return true;
+ }
+ var emailPat=/^(.+)@(.+)$/;
+ var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
+ var validChars="\[^\\s" + specialChars + "\]";
+ var quotedUser="(\"[^\"]*\")";
+ var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
+ var atom=validChars + '+';
+ var word="(" + atom + "|" + quotedUser + ")";
+ var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
+ var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
+ var matchArray=emailStr.match(emailPat);
+ if (matchArray == null) {
+ return false;
+ }
+ var user=matchArray[1];
+ var domain=matchArray[2];
+ if (user.match(userPat) == null) {
+ return false;
+ }
+ var IPArray = domain.match(ipDomainPat);
+ if (IPArray != null) {
+ for (var i = 1; i <= 4; i++) {
+ if (IPArray[i] > 255) {
+ return false;
+ }
+ }
+ return true;
+ }
+ var domainArray=domain.match(domainPat);
+ if (domainArray == null) {
+ return false;
+ }
+ var atomPat=new RegExp(atom,"g");
+ var domArr=domain.match(atomPat);
+ var len=domArr.length;
+ if ((domArr[domArr.length-1].length < 2) ||
+ (domArr[domArr.length-1].length > 3)) {
+ return false;
+ }
+ if (len < 2) {
+ return false;
+ }
+ return true;
+ }
+
+
+ /**
+ * Check to see if fields are a valid using a regular expression.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * @param form The form validation is taking place on.
+ */
+ function validateMask(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+ oMasked = eval('new ' + formName.value + '_mask()');
+ for (x in oMasked) {
+ var field = form[oMasked[x][0]];
+
+ if ((field.type == 'hidden' ||
+ field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'file') &&
+ (field.value.length > 0) &&
+ field.disabled == false) {
+
+ if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oMasked[x][1];
+ isValid = false;
+ }
+ }
+ }
+
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }
+
+ function matchPattern(value, mask) {
+ return mask.exec(value);
+ }
+
+
+ /**
+ * A field is considered valid if greater than the specified minimum.
+ * Fields are not checked if they are disabled.
+ * <p>
+ * <strong>Caution:</strong> Using <code>validateMinLength</code> on a password field in a
+ * login page gives unnecessary information away to hackers. While it only slightly
+ * weakens security, we suggest using it only when modifying a password.</p>
+ * @param form The form validation is taking place on.
+ */
+ function validateMinLength(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ var formName = form.getAttributeNode("name");
+
+
+ oMinLength = eval('new ' + formName.value + '_minlength()');
+
+ for (x in oMinLength) {
+ var field = form[oMinLength[x][0]];
+
+ if ((field.type == 'hidden' ||
+ field.type == 'text' ||
+ field.type == 'password' ||
+ field.type == 'textarea') &&
+ field.disabled == false) {
+
+ var iMin = parseInt(oMinLength[x][2]("minlength"));
+ if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oMinLength[x][1];
+ isValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }
+
+ //End JavaScript input validation checking code. -->
+ </script>
</td>
</tr>
<tr>
More information about the Metacat-cvs
mailing list