var defaultEmptyOK = true;
var Whitespace = " \t\n\r";
function ValIsWhitespace (s)
{   
if (s==null||s.length==0) return true;
var regexp = /[- ]*select from list[- ]*/i ;
if (regexp.test(s)) return true ;
for (var i=0; i<s.length; i++) 
if (Whitespace.indexOf(s.charAt(i))<0) return false;
return true;
}
function ValCheckMandatoryFields(asFields)
{
var sErr = "";
for (var n=0; n<asFields.length; n+=2) {
var sName = asFields[n];
if (ValIsWhitespace(StdGetFieldValue(sName))) {
if (sErr!="") sErr += "\n";
sErr += asFields[n+1]; 
}
}
return sErr;
}
function ValIsLeapYear(nYear)
{
if (nYear%400==0) return true;
if (nYear%100==0) return false;
return (nYear%4==0);
}
var ValMonthData = new Object;
ValMonthData.jan = 31;
ValMonthData.january = 31;
ValMonthData.feb = 28;
ValMonthData.february = 28;
ValMonthData.mar = 31;
ValMonthData.march = 31;
ValMonthData.apr = 30;
ValMonthData.april = 30;
ValMonthData.may = 31;
ValMonthData.jun = 30;
ValMonthData.june = 30;
ValMonthData.jul = 31;
ValMonthData.july = 31;
ValMonthData.aug = 31;
ValMonthData.august = 31;
ValMonthData.sep = 30;
ValMonthData.sept = 30;
ValMonthData.september = 30;
ValMonthData.oct = 31;
ValMonthData.october = 31;
ValMonthData.nov = 30;
ValMonthData.november = 30;
ValMonthData.dec = 31;
ValMonthData.december = 31;
function ValDaysInMonth(sMonth, nYear)
{
var d = ValMonthData[sMonth.toLowerCase()];
if (d==null) return 0;
if (d==28&&ValIsLeapYear(nYear)) d++;
return d;
}
function ValIsD2M3Y4Date(sDate)
{
var a = sDate.match(/^[ ]*(\d{1,2})[ ]+([A-Za-z]+)[ ]+(\d{2}|\d{4})[ ]*$/i);
if (a==null) return false;
var nDay = parseInt(a[1],10);
var sMonth = a[2];
var nYear = parseInt(a[3],10);
if (nDay<1||nDay>ValDaysInMonth(sMonth, nYear)) return false;
return true
}
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}
function isInteger (s)
{   var i;
if (isEmpty(s)) 
if (isInteger.arguments.length == 1) return defaultEmptyOK;
else return (isInteger.arguments[1] == true);
var reInteger = /^\d+$/
return reInteger.test(s)
}
function ValCheckFloatFields(asFields)
{
var sErr = "";
for (var n=0; n<asFields.length; n+=2) {
var sName = asFields[n];
if (isFloat(StdGetFieldValue(sName), true) == false ) {
if (sErr!="") sErr += "\n";
sErr += asFields[n+1]; 
}
}
return sErr;
}
function ValCheckIntegerFields(asFields)
{
var sErr = "";
for (var n=0; n<asFields.length; n+=2) {
var sName = asFields[n];
if (isInteger(StdGetFieldValue(sName)) == false ) {
if (sErr!="") sErr += "\n";
sErr += asFields[n+1]; 
}
}
return sErr;
}
function ValCheckPercentageFields(asFields)
{
var sErr = "";
for (var n=0; n<asFields.length; n+=2) {
var sName = asFields[n];
if (isFloatInRange(StdGetFieldValue(sName), 0, 100, true) == false ) {
if (sErr!="") sErr += "\n";
sErr += asFields[n+1]; 
}
}
return sErr;
}
function isIntegerInRange (s, a, b)
{    
if (isEmpty(s)) 
if (isIntegerInRange.arguments.length == 3) return defaultEmptyOK;
else return (isIntegerInRange.arguments[3] == true);
if (!isInteger(s, false)) return false;
var num = parseInt (s);
return ((num >= a) && (num <= b));
}
function isFloat (s)
{ 
if (isEmpty(s)) 
if (isFloat.arguments.length == 1) return defaultEmptyOK;
else return (isFloat.arguments[1] == true);
var reFloat = /^(\+|-)?((\d+(\.\d*)?)|((\d*\.)?\d+))$/
return reFloat.test(s) ;
}
function isFloatInRange (s, a, b)
{       
if (isEmpty(s)) 
if (isFloatInRange.arguments.length == 3) return defaultEmptyOK;
else return (isFloatInRange.arguments[3] == true);
if (!isFloat(s, false)) return false;
return ((s>= a) && (s <= b));
}
var reAlphanumeric = /^[a-zA-Z0-9]+$/
function isAlphanumeric (s)
{   var i;
if (isEmpty(s)) 
if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
else return (isAlphanumeric.arguments[1] == true);
else {
return reAlphanumeric.test(s)
}
}
var reHex = /^[a-fA-F0-9]+$/
function isHex (s)
{   var i;
if (isEmpty(s)) 
if (isHex.arguments.length == 1) return defaultEmptyOK;
else return (isHex.arguments[1] == true);
else {
return reHex.test(s)
}
}
function isDate (year, month, day)
{   
if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;
var intYear = parseInt(year);
var intMonth = parseInt(month);
var intDay = parseInt(day);
if (intDay > daysInMonth[intMonth]) return false; 
if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
return true;
}

