var html_error;
var LatLngLocation;

/*$RCSfile: validateByte.js,v $ $Rev: 330243 $ $Date: 2005-11-02 12:26:02 +0000 (Wed, 02 Nov 2005) $ */
/**
* 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();

	oByte = eval('new ' + retrieveFormName(form) + '_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 (!isDecimalDigits(value)) {
					bValid = false;
					if (i == 0) {
						focusField = field;
					}
					fields[i++] = oByte[x][1];

				} else {

					var iValue = parseInt(value, 10);
					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();
	  html_error += fields.join('\n');
	}
	return bValid;
}


 /*$RCSfile: validateDate.js,v $ $Rev: 239517 $ $Date: 2005-08-24 04:48:03 +0100 (Wed, 24 Aug 2005) $ */
/**
* 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();

 oDate = eval('new ' + retrieveFormName(form) +  '_DateValidations()');

 for (x in oDate) {
	  var field = form[oDate[x][0]];
	  var value = field.value;
	  var isStrict = true;
	  var datePattern = oDate[x][2]("datePatternStrict");
	  // try loose pattern
	  if (datePattern == null) {
		  datePattern = oDate[x][2]("datePattern");
		  isStrict = false;
	  }    
	  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 = isStrict 
						? new RegExp("^(\\d{2})(\\d{2})(\\d{4})$") 
						: new RegExp("^(\\d{1,2})(\\d{1,2})(\\d{4})$");
				} else if (iDelim1 == orderDay) {
					dateRegexp = isStrict 
						? new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$")
						: new RegExp("^(\\d{1,2})(\\d{1,2})[" + delim2 + "](\\d{4})$");
				} else if (iDelim2 == orderYear) {
					dateRegexp = isStrict
						? new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$")
						: new RegExp("^(\\d{1,2})[" + delim1 + "](\\d{1,2})(\\d{4})$");
				} else {
					dateRegexp = isStrict
						? new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$")
						: new RegExp("^(\\d{1,2})[" + delim1 + "](\\d{1,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 = isStrict 
						? new RegExp("^(\\d{2})(\\d{2})(\\d{4})$")
						: new RegExp("^(\\d{1,2})(\\d{1,2})(\\d{4})$");
				} else if (iDelim1 == orderMonth) {
					dateRegexp = isStrict
						? new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$")
						: new RegExp("^(\\d{1,2})(\\d{1,2})[" + delim2 + "](\\d{4})$");
				} else if (iDelim2 == orderYear) {
					dateRegexp = isStrict
						? new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$")
						: new RegExp("^(\\d{1,2})[" + delim1 + "](\\d{1,2})(\\d{4})$");
				} else {
					dateRegexp = isStrict
						? new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$")
						: new RegExp("^(\\d{1,2})[" + delim1 + "](\\d{1,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 = isStrict
						? new RegExp("^(\\d{4})(\\d{2})(\\d{2})$")
						: new RegExp("^(\\d{4})(\\d{1,2})(\\d{1,2})$");
				} else if (iDelim1 == orderMonth) {
					dateRegexp = isStrict
						? new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$")
						: new RegExp("^(\\d{4})(\\d{1,2})[" + delim2 + "](\\d{1,2})$");
				} else if (iDelim2 == orderDay) {
					dateRegexp = isStrict
						? new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$")
						: new RegExp("^(\\d{4})[" + delim1 + "](\\d{1,2})(\\d{1,2})$");
				} else {
					dateRegexp = isStrict
						? new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$")
						: new RegExp("^(\\d{4})[" + delim1 + "](\\d{1,2})[" + delim2 + "](\\d{1,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();
	 html_error += 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;
}


/*$RCSfile: validateCreditCard.js,v $ $Rev: 232626 $ $Date: 2005-08-14 18:45:34 +0100 (Sun, 14 Aug 2005) $ */
/**
* 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();
 
	oCreditCard = eval('new ' + retrieveFormName(form) +  '_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();
		html_error += 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;
}


/*$RCSfile: validateFloat.js,v $ $Rev: 232633 $ $Date: 2005-08-14 20:54:13 +0100 (Sun, 14 Aug 2005) $ */
/**
* 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();
 
	oFloat = eval('new ' + retrieveFormName(form) +  '_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) || tempArray.length > 2) {
					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();
	  html_error += fields.join('\n');
	}
	return bValid;
}


/*$RCSfile: validateMinLength.js,v $ $Rev: 232626 $ $Date: 2005-08-14 18:45:34 +0100 (Sun, 14 Aug 2005) $ */
/**
* 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();

	oMinLength = eval('new ' + retrieveFormName(form) +  '_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();
	  html_error += fields.join('\n');
	}
	return isValid;
}


/*$RCSfile: validateFloatRange.js,v $ $Rev: 232626 $ $Date: 2005-08-14 18:45:34 +0100 (Sun, 14 Aug 2005) $ */
/**
* 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();
	
	oRange = eval('new ' + retrieveFormName(form) +  '_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();
		html_error += fields.join('\n');
	}
	return isValid;
}


/*$RCSfile: validateUtilities.js,v $ $Rev: 330243 $ $Date: 2005-11-02 12:26:02 +0000 (Wed, 02 Nov 2005) $ */

/**
* This is a place holder for common utilities used across the javascript validation
*
**/

/**
* Retreive the name of the form
* @param form The form validation is taking place on.
*/
function retrieveFormName(form) {

// Please refer to Bugs 31534, 35127, 35294 & 37315
// for the history of the following code

if (form.getAttributeNode) {
	 if (form.getAttributeNode("id") && form.getAttributeNode("id").value) {
		 return form.getAttributeNode("id").value;
	 } else {
		 return form.getAttributeNode("name").value;
	 }
} else if (form.getAttribute) {
	 if (form.getAttribute("id")) {
		 return form.getAttribute("id");
	 } else {
		 form.attributes["name"];
	 }
} else {
	 if (form.id) {
		 return form.id;
	 } else {
		 return form.name;
	 }
}

}

/**
 * Check a value only contains valid numeric digits
 * @param argvalue The value to check.
 */
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 a value only contains valid decimal digits
 * @param argvalue The value to check.
 */
function isDecimalDigits(argvalue) {
argvalue = argvalue.toString();
var validChars = "0123456789";

var startFrom = 0;
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;
}


/*$RCSfile: validateMaxLength.js,v $ $Rev: 232626 $ $Date: 2005-08-14 18:45:34 +0100 (Sun, 14 Aug 2005) $ */
/**
* 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();

	oMaxLength = eval('new ' + retrieveFormName(form) +  '_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();
	  html_error += fields.join('\n');
	}
	return isValid;
}


/*$RCSfile: validateRequired.js,v $ $Rev: 239522 $ $Date: 2005-08-24 05:11:06 +0100 (Wed, 24 Aug 2005) $ */
/**
*  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();

	oRequired = eval('new ' + retrieveFormName(form) +  '_required()');

	for (x in oRequired) {
		var field = form[oRequired[x][0]];

		if (field == null) {
			fields[i++] = oRequired[x][1];
			isValid=false;
		} else if ((field.type == 'hidden' ||
			field.type == 'text' ||
			field.type == 'textarea' ||
			field.type == 'file' ||
			field.type == 'radio' ||
			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 == 'radio' || field.type == 'checkbox') {
				if (field.checked) {
					value = field.value;
				}
			} else {
				value = field.value;
			}

			if (trim(value).length == 0) {

				if ((i == 0) && (field.type != 'hidden')) {
					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) {
	  /*
	  if (focusField != null) {
		  focusField.focus();
	  }
	  */     
	  html_error += fields.join('\n');
	}
	return isValid;
}

// Trim whitespace from left and right sides of s.
function trim(s) {
	return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}


/*$RCSfile: validateInteger.js,v $ $Rev: 330243 $ $Date: 2005-11-02 12:26:02 +0000 (Wed, 02 Nov 2005) $ */
/**
* 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();
 
	oInteger = eval('new ' + retrieveFormName(form) +  '_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 (!isDecimalDigits(value)) {
					bValid = false;
					if (i == 0) {
						focusField = field;
					}
					fields[i++] = oInteger[x][1];

				} else {
					var iValue = parseInt(value, 10);
					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();
	  html_error += fields.join('\n');
	}
	return bValid;
}


/*$RCSfile: validateIntRange.js,v $ $Rev: 330124 $ $Date: 2005-11-01 21:08:03 +0000 (Tue, 01 Nov 2005) $ */
/**
* 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();
 
	oRange = eval('new ' + retrieveFormName(form) +  '_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, 10);
				if (!(iValue >= iMin && iValue <= iMax)) {
					if (i == 0) {
						focusField = field;
					}
					fields[i++] = oRange[x][1];
					isValid = false;
				}
			}
		}
	}
	if (fields.length > 0) {
		//focusField.focus();
		html_error += fields.join('\n');
	}
	return isValid;
}


/*$RCSfile: validateShort.js,v $ $Rev: 330243 $ $Date: 2005-11-02 12:26:02 +0000 (Wed, 02 Nov 2005) $ */
/**
*  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();
 
	oShort = eval('new ' + retrieveFormName(form) +  '_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 (!isDecimalDigits(value)) {
					bValid = false;
					if (i == 0) {
						focusField = field;
					}
					fields[i++] = oShort[x][1];

				} else {

					var iValue = parseInt(value, 10);
					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();
	  html_error += fields.join('\n');
	}
	return bValid;
}


/*$RCSfile: validateEmail.js,v $ $Rev: 232626 $ $Date: 2005-08-14 18:45:34 +0100 (Sun, 14 Aug 2005) $ */
/**
* 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();

	oEmail = eval('new ' + retrieveFormName(form) +  '_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();
		html_error += fields.join('\n');
	}
	return bValid;
}

/**
 * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
 * http://javascript.internet.com
 */
function checkEmail(emailStr) {
	if (emailStr.length == 0) {
		return true;
	}
	// TLD checking turned off by default
	var checkTLD=0;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	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];
	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			return false;
		}
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			return false;
		}
	}
	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 atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			return false;
		}
	}
	if (checkTLD && domArr[domArr.length-1].length!=2 && 
		domArr[domArr.length-1].search(knownDomsPat)==-1) {
		return false;
	}
	if (len<2) {
		return false;
	}
	return true;
}


/*$RCSfile: validateMask.js,v $ $Rev: 232626 $ $Date: 2005-08-14 18:45:34 +0100 (Sun, 14 Aug 2005) $ */
/**
* 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();
 
	oMasked = eval('new ' + retrieveFormName(form) +  '_mask()');      
	for (x in oMasked) {
		var field = form[oMasked[x][0]];

		if ((field.type == 'hidden' ||
			field.type == 'text' ||
			field.type == 'textarea' ||
			field.type == 'password' ||
			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();
		html_error += fields.join('\n');
	}
	return isValid;
}

function matchPattern(value, mask) {
	return mask.exec(value);
}


function validateFileExtension(form) {
	var isValid = false;
	var focusField = null;
	var i = 0;
	var fields = new Array();
	

	var videovalidext = new Array('3g2', '3gp', '3gpp', 'amc', 'asf', 'asx', 'avi', 'divx', 'dv', 'gvi', 'm1v', 'm2p', 'm2t', 'm2v', 'm4v', 'mod', 'mov', 'mp4', 'mpeg', 'mpeg-1', 'mpeg-4', 'mpeg2', 'mpeg4', 'mpg', 'mpv', 'mqv', 'rm', 'rmvb', 'vob', 'vro', 'wmv');
	var validext = videovalidext;


	//depending on its datatype, valid extensions differ
	var filetype = document.getElementById("type_image");
/*
	if(filetype != null && filetype.checked){
		validext = new Array('jpg','gif','png');
	}
*/


	

	oFileExtension = eval('new ' + retrieveFormName(form) +  '_fileextension()');

	for (x in oFileExtension) {
		isValid =  false;
		var field = form[oFileExtension[x][0]];
		if(field == document.getElementById("theUserImageFile")){
			validext = new Array('jpg');	//アバター画像
		}else if(filetype != null && filetype.checked){
			validext = new Array('jpg','gif'); //画像UPLOAD

		}else{
			validext = videovalidext;  //通常動画ファイル
		}

		if (field != null && field.value != null && field.value.length > 0) {
			var strPath = field.value;
			var nDot = strPath.lastIndexOf(".");
			if (nDot > -1) {
				var strExtension = strPath.substring(nDot+1, strPath.length);
				for (e in validext) {
					if (strExtension.toLowerCase() == validext[e]) {
						isValid = true;
						break;
					}
				}
			}

			if (!isValid) {
				fields[i++] = oFileExtension[x][1];
			}
		}
	}

	if (fields.length > 0) {
	  html_error += fields.join('\n');
	}
//	return isValid;
	return (fields.length == 0);
}


function validateMapLocation(form) {
	var isValid = false;
	var focusField = null;
	var i = 0;
	var fields = new Array();

	oMapLocation = eval('new ' + retrieveFormName(form) +  '_maplocation()');

	for (x in oMapLocation) {
		var field = form[oMapLocation[x][0]];

		if (field.value != null && field.value.length > 0) {
			if (LatLngLocation == null) {
				fields[i++] = oMapLocation[x][1];
			}
		}
	}

	if (fields.length > 0) {
	  html_error += fields.join('\n');
	} else{
		isValid = true;
	}
	return isValid;
}


function validateRequiredValue(form) {
	var isValid = false;
	var focusField = null;
	var i = 0;
	var fields = new Array();

	oRequiredValue = eval('new ' + retrieveFormName(form) +  '_requiredvalue()');

	for (x in oRequiredValue) {
		var field = form[oRequiredValue[x][0]];

		if (field == null || field.value == null || field.value.length > 0 || field.value != oRequiredValue[x][3]) {
			fields[i++] = oRequiredValue[x][1];
		}
	}

	if (fields.length > 0) {
	  html_error += fields.join('\n');
	} else{
		isValid = true;
	}
	return isValid;
}


function validateRequiredChecked(form) {
	var isValid = false;
	var focusField = null;
	var i = 0;
	var fields = new Array();

	oRequiredChecked = eval('new ' + retrieveFormName(form) +  '_requiredchecked()');

	for (x in oRequiredChecked) {
		var field = form[oRequiredChecked[x][0]];

		if (field == null || !field[oRequiredChecked[x][3]].checked) {
			fields[i++] = oRequiredChecked[x][1];
		}
	}

	if (fields.length > 0) {
	  html_error += fields.join('\n');
	} else{
		isValid = true;
	}
	return isValid;
}


function validateDateElement(form) {
	var isValid = false;
	var focusField = null;
	var i = 0;
	var fields = new Array();

	oDateElement = eval('new ' + retrieveFormName(form) +  '_validatedateelement()');

	for (x in oDateElement) {
		var field1 = form[oDateElement[x][0]];
		var field2 = form[oDateElement[x][1]];
		var field3 = form[oDateElement[x][2]];

		if (field1 == null || field2 == null || field3 == null || field1.value == null || field2.value == null || field3.value == null || field1.value.length < 1 || field2.value.lengh < 1 || field3.value.length < 1 || !isValidDate(field3.value, field2.value, field1.value)) {
			fields[i++] = oDateElement[x][3];
		}
	}

	if (fields.length > 0) {
	  html_error += fields.join('\n');
	} else{
		isValid = true;
	}
	return isValid;
}

function validateUrl(form) {
	var isValid = false;
	var focusField = null;
	var i = 0;
	var fields = new Array();
	var tomatch1 = /http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{2,}/
	var tomatch2 = /https:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{2,}/

	oUrl = eval('new ' + retrieveFormName(form) + '_url()');

	for (x in oUrl) {
		var field = form[oUrl[x][0]];

		if (field.value != null && field.value.length > 0 && !tomatch1.test(field.value) && !tomatch2.test(field.value)) {
			fields[i++] = oUrl[x][1];
		}
	}
	if (fields.length > 0) {
	  html_error += fields.join('\n');
	} else{
		isValid = true;
	}
	return isValid;
}

function validateRakutenUrl(form) {
	var isValid = false;
	var focusField = null;
	var i = 0;
	var fields = new Array();
	var tomatch1 = /[A-Za-z0-9\.-]*\.rakuten\.co\.jp$/
	var tomatch2 = /[A-Za-z0-9\.-]*\.rakuten\.ne\.jp$/
	var tomatch3 = /rakuten\.co\.jp$/
	var tomatch4 = /rakuten\.ne\.jp$/
        
	oUrl = eval('new ' + retrieveFormName(form) + '_rakutenurl()');

	for (x in oUrl) {
		var field = form[oUrl[x][0]];

		if (field.value != null && field.value.length > 0 && !tomatch1.test(parseUri(field.value).host) && !tomatch2.test(parseUri(field.value).host) && !tomatch3.test(parseUri(field.value).host) && !tomatch4.test(parseUri(field.value).host)) {
			fields[i++] = oUrl[x][1];
		}
	}
	if (fields.length > 0) {
	  html_error += fields.join('\n');
	} else{
		isValid = true;
	}
	return isValid;
}


function validateRetype(form) {
	var isValid = false;
	var focusField = null;
	var i = 0;
	var fields = new Array();

	oRetype = eval('new ' + retrieveFormName(form) +  '_retype()');

	for (x in oRetype) {
		var field1 = form[oRetype[x][0]];
		var field2 = form[oRetype[x][1]];

		if (field1.value != field2.value) {
			fields[i++] = oRetype[x][2];
		}
	}

	if (fields.length > 0) {
	  html_error += fields.join('\n');
	} else{
		isValid = true;
	}
	return isValid;
}

