// Chris Lofback
// clofback@yahoo.com


// CONSTANTS

var WSPACE=' \t\n\r';
var MDAYS=new Object();MDAYS[1]=31;MDAYS[2]=29;MDAYS[3]=31;MDAYS[4]=30;MDAYS[5]=31;MDAYS[6]=30;MDAYS[7]=31;MDAYS[8] = 31;MDAYS[9]=30;MDAYS[10]=31;MDAYS[11]=30;MDAYS[12]=31;
var MNAMES=new Object();MNAMES[1]='JANUARY';MNAMES[2]='FEBRUARY';MNAMES[3]='MARCH';MNAMES[4]='APRIL';MNAMES[5]='MAY';MNAMES[6]='JUNE';MNAMES[7]='JULY';MNAMES[8]='AUGUST';MNAMES[9]='SEPTEMBER';MNAMES[10]='OCTOBER';MNAMES[11]='NOVEMBER';MNAMES[12]='DECEMBER';
var MSNAMES=new Object();MSNAMES[1]='JAN';MSNAMES[2]='FEB';MSNAMES[3]='MAR';MSNAMES[4]='APR';MSNAMES[5]='MAY';MSNAMES[6]='JUN';MSNAMES[7]='JUL';MSNAMES[8]='AUG';MSNAMES[9]='SEP';MSNAMES[10]='OCT';MSNAMES[11]='NOV';MSNAMES[12]='DEC';





// FIELD VALIDATION ROUTINES

function doFAR(o,s,b) {
	if ((s == null) || !s.length) s = 'Entry is invalid';
	if (b == null) b = false;
	if (s != '*') alert(s);
	if (b) {
		if (o.defaultValue) o.value = o.defaultValue;
		else o.value = '';
	}
	o.focus();
	return true;
}
function validateCreditCard(o,s,bR,bE) {
	var f = o.value;
	if (bE == null) bE = false;
	if (bE && isEmpty(f)) return true;
	f = stripWhitespace(f);
	if (!isAnyCard(f)) {
		doFAR(o,s,bR);
		return false;
	}
	return true;
}
function validateDate(o,s,d1,d2,bR,bE) {
	var f = o.value;
	if (bE == null) bE = false;
	if (bE && isEmpty(f)) return true;
	if (!isDateString(f)) {
			doFAR(o,s,bR);
			return false;
	}
	if ( (d1 == null) && (d2 == null) ) return true;
	f = parseDate(f);
	if ( (d1 != null) && isDateString(d1) ) d1 = parseDate(d1);
	if ( (d2 != null) && isDateString(d2) ) d2 = parseDate(d2);
	if ( ( !isWhitespace(d1) && (f.getTime() < d1.getTime()) ) || ( !isWhitespace(d2) && (f.getTime() > d2.getTime()) ) ) {
			doFAR(o,s,bR);
			return false;
	}
	return true;
}
function validateEmail(o,s,bR,bE) {
	var f = o.value;
	if (bE == null) bE = false;
	if (bE && isEmpty(f)) return true;
	if (!isEmail(f)) {
		doFAR(o,s,bR);
		return false;
	}
	return true;
}
function validateEntry(o,s,n1,n2,bR,bE) {
	var f = o.value, fLen = f.length;
	if (bE == null) bE = false;
	if (bE && isEmpty(f)) return true;
	if ( isWhitespace(f) || (isPosInt(n1) && (fLen < n1)) || (isPosInt(n2) && (fLen > n2)) ) {
		doFAR(o,s,bR);
		return false;
	}
	return true;
}
function validateInteger(o,s,n1,n2,bR,bE) {
	var f = o.value;
	if (bE == null) bE = false;
	if (bE && isEmpty(f)) return true;
	if ( !isSignedInt(f) || (isSignedInt(n1) && ((f-0) < (n1-0))) || (isSignedInt(n2) && ((f-0) > (n2-0))) ) {
		doFAR(o,s,bR);
		return false;
	}
	return true;
}
function validateNumber(o,s,n1,n2,bR,bE) {
	var f = o.value;
	if (bE == null) bE = false;
	if (bE && isEmpty(f)) return true;
	if ( !isSignedFloat(f) || (isSignedFloat(n1) && ((f-0) < (n1-0))) || (isSignedFloat(n2) && ((f-0) > (n2-0))) ) {
		doFAR(o,s,bR);
		return false;
	}
	return true;
}
function validateNumberGT(o,s,n1,bR,bE) {
	var f = o.value;
	if (bE == null) bE = false;
	if (bE && isEmpty(f)) return true;
	if ( !isSignedFloat(f) || (n1 == null) || ((f-0) <= (n1-0)) ) {
		doFAR(o,s,bR);
		return false;
	}
	return true;
}
function validateTime(o,s,d1,d2,bR,bE) {
	var f = o.value;
	if (bE == null) bE = false;
	if (bE && isEmpty(f)) return true;
	if (!isTimeString(f)) {
			doFAR(o,s,bR);
			return false;
	}
	if ( (d1 == null) && (d2 == null) ) return true;
	var f = parseTime(f);
	if ( (d1 != null) && isTimeString(d1) ) d1 = parseTime(d1);
	if ( (d2 != null) && isTimeString(d2) ) d2 = parseTime(d2);
	if ( ( !isWhitespace(d1) && (f.getTime() < d1.getTime()) ) || ( !isWhitespace(d2) && (f.getTime() > d2.getTime()) ) ) {
			doFAR(o,s,bR);
			return false;
	}
	return true;
}
function validateZIPCode(o,s,bR,bE) {
	var f = o.value;
	if (bE == null) bE = false;
	if (bE && isEmpty(f)) return true;
	var fLen = f.length;
	if ( (fLen != 5) && (fLen != 10) ) {
		doFAR(o,s,bR);
		return false;
	}
	f = stripCharsInBag(f,'-');
	if ( (f.length < (fLen-1)) || !isZIPCode(f) ) {
		doFAR(o,s,bR);
		return false;
	}
	return true;
}

function validateRadio(o,s,bR,bU) {
// by Ricardo Parente
	var f = o.value;
	if (bR == null) bR = false;
	if (bU == null) bU = false;
	var x = false;
	for (var i=0; i<o.length; i++) {
		if (o[i].checked) x = true;
	}
	if (!x) {
		if (!bU) {
			doFAR(o[0],s);
		}
		return false;
	}
	return true;
}

function validateSelect(o,s,bR,bU) {
// by Ricardo Parente
	var f = o.value;
	if (bR == null) bR = false;
	if (bU == null) bU = false;
	if (!o.selectedIndex){
		if (!bU) {
			doFAR(o,s);
		}
		return false;
	}
	return true;
}

// TRANSFORM/CREATE FUNCTIONS (RETURN OBJECT OR STRING VALUE)

function createDate(nY,nM,nD) {
	if (nD == null) nD = 1;
	if (nM == null) nM = 1;
	if ( !isDate(nY,nM,nD) ) return '';
	return new Date(nY-0,nM-1,nD-0,0,0,0);
}
function createDateTime(nY,nM,nD,nH,nN,nS) {
	if (nS == null) nS = 0;
	if (nN == null) nN = 0;
	if (nH == null) nH = 0;
	if (nD == null) nD = 1;
	if (nM == null) nM = 1;
	if ( !isDate(nY,nM,nD) || !isTime(nH,nN,nS) ) return '';
	return new Date(nY-0,nM-1,nD-0,nH-0,nN-0,nS-0);
}
function createTime(nH,nN,nS) {
	if (nS == null) nS = 0;
	if (nN == null) nN = 0;
	if ( !isTime(nH,nN,nS) ) return '';
	var d = new Date();
	return new Date(getYear(d),d.getMonth(),d.getDate(),nH-0,nN-0,nS-0);
}
function dateAdd(s,n,d) {
	if (isDateString(d)) d = parseDate(d);
	n = n - 0;
	s = trim(s).toLowerCase();
	if (!isSignedInt(n) || (n > 100000) || (n < -100000)) return '';
	if ( (s == 'd') || (s == 'w') || (s == 'y') ) d = new Date(getYear(d),d.getMonth(),(d.getDate() + n),d.getHours(),d.getMinutes(),d.getSeconds());
	if (s == 'h') d = new Date(getYear(d),d.getMonth(),d.getDate(),(d.getHours() + n),d.getMinutes(),d.getSeconds());
	if (s == 'm') d = new Date(getYear(d),(d.getMonth() + n),d.getDate(),d.getHours(),d.getMinutes(),d.getSeconds());
	if (s == 'n') d = new Date(getYear(d),d.getMonth(),d.getDate(),d.getHours(),(d.getMinutes() + n),d.getSeconds());
	if (s == 'q') {
		var tD1 = d.getDate(), tD2 = d.getDate();
		if (tD2 > 28) tD2 = 1;
		d = new Date(getYear(d),(d.getMonth() + (n*3)),tD2,d.getHours(),d.getMinutes(),d.getSeconds());
		if (tD1 != tD2) {
			(d.getMonth() == 1) ? tD2 = daysInFebruary(getYear(d)) : tD2 = Math.min(tD1,MDAYS[d.getMonth()+1]);
			d = new Date(getYear(d),d.getMonth(),tD2,d.getHours(),d.getMinutes(),d.getSeconds());
		}
	}
	if (s == 's') d = new Date(getYear(d),d.getMonth(),d.getDate(),d.getHours(),d.getMinutes(),(d.getSeconds() + n));
	if (s == 'ww') d = new Date(getYear(d),d.getMonth(),(d.getDate() + (7*n)),d.getHours(),d.getMinutes(),d.getSeconds());
	if (s == 'yyyy') d = new Date((getYear(d) + n),d.getMonth(),d.getDate(),d.getHours(),d.getMinutes(),d.getSeconds());
	return d;
}
function dateCompare(d1,d2) {
	if (isDateString(d1)) d1 = parseDate(d1);
	if (isDateString(d2)) d2 = parseDate(d2);
	if (d1.getTime() < d2.getTime()) return -1;
	if (d1.getTime() > d2.getTime()) return 1;
	return 0;
}
function daysInFebruary(nY) {
	return (((nY % 4 == 0) && ((!(nY % 100 == 0)) || (nY % 400 == 0))) ? 29 : 28);
}
function find(s1,s2,n) {
	if ((s1 == null) || (s2 == null)) return 0;
	s1 = s1.toString();
	s2 = s2.toString();
	var s2Len = s2.length;
	if ((n == null) || (n < 1)) n = 0;
	else if (n > s2Len) n = s2Len-1;
	else --n;
	return s2.indexOf(s1,n) + 1;
}
function findNoCase(s1,s2,n) {
	return find(ToString(s1).toLowerCase(),ToString(s2).toLowerCase(),n);
}
function findOneOf(s1,s2,n) {
	if ((s1 == null) || (s2 == null)) return 0;
	s1 = s1.toString();
	s2 = s2.toString();
	var s2Len = s2.length;
	if ((n == null) || (n < 1)) n = 0;
	else if (n > s2Len) n = s2Len-1;
	else --n;
	for (var i = n; i < s2Len; i++) {
		if (isCharInBag(s2.charAt(i),s1)) return i+1;
	}
	return 0;
}
function getYear(d) {
	if (isDateString(d)) d = parseDate(d);
	var y = d.getYear();
	return (y < 1000) ? y + 1900 : y;
}
function lastMonthEnd() {
	return dateAdd('d',-1,monthStart());
}
function lastMonthStart() {
	var d = lastMonthEnd(), y = getYear(d), m = d.getMonth()+1;
	return createDate(y,m,1);
}
function left(s,n) {
	if (n == null) n = 1;
	var s2 = '';
	for (var i = 0; i < n; i++) s2 += s.charAt(i);
	return s2;
}
function lTrim(s) {
	while (isCharInBag(s.substring(0,1),WSPACE)) s = s.substring(1);
	return s;
}
function mid(s,n1,n2) {
	if (s == null) return '';
	var sLen = s.length;
	if (n1 == null) n1 = 1;
	if ( (n1 > sLen) || (n1 < 1) ) return '';
	--n1;
	if (n2 == null) n2 = 1;
	if (n2 < 1) return '';
	n2 = n1 + n2;
	return s.substring(n1,n2);
}
function monthEnd() {
	var d = new Date(), y = getYear(d), m = d.getMonth()+1, da = d.getDate();
	if (m == 2) da = daysInFebruary(y);
	else da = MDAYS[m];
	return createDate(y,m,da);
}
function monthStart() {
	var d = new Date();
	return createDate(getYear(d),d.getMonth()+1,1);
}
function nextMonthEnd() {
	var d = nextMonthStart(), y = getYear(d), m = d.getMonth()+1, da = d.getDate();
	if (m == 2) da = daysInFebruary(y);
	else da = MDAYS[m];
	return createDate(y,m,da);
}
function nextMonthStart() {
	return dateAdd('d',1,monthEnd());
}
function now() {
	var d = new Date();
	return createDateTime(getYear(d),d.getMonth()+1,d.getDate(),d.getHours(),d.getMinutes(),d.getSeconds());
}
function parseDate(s) {
	if (s == null) return '';
	var sLen = s.toString().length;
	if (sLen < 8) return '';
	var dCnt = 0, D = '', M = '', Y = '';
	if (isDashDate(s)) {
		for (var i = 0; i < sLen; i++) {
			if (s.charAt(i) == '-') ++dCnt;
			else if (dCnt == 0) M += s.charAt(i);
			else if (dCnt == 1) D += s.charAt(i);
			else if (dCnt == 2) Y += s.charAt(i);
		}
	} else if (isSlashDate(s)) {
		for (var i = 0; i < sLen; i++) {
			if (s.charAt(i) == '/') ++dCnt;
			else if (dCnt == 0) M += s.charAt(i);
			else if (dCnt == 1) D += s.charAt(i);
			else if (dCnt == 2) Y += s.charAt(i);
		}
	} else if (isShortDate(s)) {
		for (var i = 0; i < sLen; i++) {
			if (s.charAt(i) == ' ') ++dCnt;
			else if (dCnt == 0) D += s.charAt(i);
			else if (dCnt == 1) M += s.charAt(i);
			else if (dCnt == 2) Y += s.charAt(i);
		}
	} else if (isLongDate(s)) {
		for (var i = 0; i < sLen; i++) {
			if (s.charAt(i) == ' ') ++dCnt;
			else if (dCnt == 0) M += s.charAt(i);
			else if (dCnt == 1) D += s.charAt(i);
			else if (dCnt == 2) Y += s.charAt(i);
		}
		D = stripCharsInBag(D,',');
	} else return '';
	if (!isInt(M)) {
		for (var i = 1; i <= 12; i++) if ( (MNAMES[i] == M.toUpperCase()) || (MSNAMES[i] == M.toUpperCase()) ) {
			M = i;
			break;
		}
	}
	return createDate(Y-0,M-0,D-0);
}
function parseTime(s) {
	if (s == null) return '';
	var sLen = s.toString().length, dCnt = 0, H = '', N = '', S = '';
	if (is24HourTime(s)) {
		for (var i = 0; i < sLen; i++) {
			if (s.charAt(i) == ':') ++dCnt;
			else if (dCnt == 0) H += s.charAt(i);
			else if (dCnt == 1) N += s.charAt(i);
			else if (dCnt == 2) S += s.charAt(i);
		}
	} else if (isAMPMTime(s)) {
		alert(0);
		var ampm = right(s,2).toLowerCase();
		alert(1);
		var time = rTrim(left(s,sLen-2));
		if ( (ampm != 'am') && (ampm != 'pm') ) return false;
		for (var i = 0; i < time.length; i++) {
			if (s.charAt(i) == ':') ++dCnt;
			else if (dCnt == 0) H += s.charAt(i);
			else if (dCnt == 1) N += s.charAt(i);
			else if (dCnt == 2) S += s.charAt(i);
		}
		H = H - 0;
		if ( (ampm == 'pm') && (H < 12) ) H = H + 12;
		if ( (ampm == 'am') && (H == 12) ) H = 0;
	} else return '';
	if (dCnt == 0) {N = 0; S = 0;}
	if (dCnt == 1) S = 0;
	return createTime(H-0,N-0,S-0);
}
function right(s,n) {
	if (n == null) n = 1;
	var end = s.toString().length;
	return s.substring(end-n,end);
}
function rTrim(s) {
	while (isCharInBag(s.substring(s.length-1,s.length),WSPACE)) s = s.substring(0,s.length-1);
	return s;
}
function stripCR(s) {
	return stripCharsInBag(s,'\n\r');
}
function stripCharsInBag(s,bag) {
	var s2 = '';
	for (var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) s2 += c;
	}
	return s2;
}
function stripCharsNotInBag(s,bag) {
	var s2 = '';
	for (var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (bag.indexOf(c) != -1) s2 += c;
	}
	return s2;
}
function stripWhitespace(s) {
	return stripCharsInBag(s,WSPACE);
}
function today() {
	var d = new Date();
	return createDate(getYear(d),d.getMonth()+1,d.getDate());
}
function tomorrow() {
	var d = new Date();
	return createDate(getYear(d),d.getMonth()+1,d.getDate()+1);
}
function trim(s) {
	while (isCharInBag(s.substring(0,1),WSPACE)) s = s.substring(1);
	while (isCharInBag(s.substring(s.length-1,s.length),WSPACE)) s = s.substring(0,s.length-1);
	return s;
}
function yesterday() {
	var d = new Date();
	return createDate(getYear(d),d.getMonth()+1,d.getDate()-1);
}





// EVALUATION FUNCTIONS (RETURN BOOLEAN VALUE)

function is24HourTime(s) {
	var sLen = s.toString().length;
	if ( isWhitespace(s) || (sLen == 0) || (sLen > 8) ) return false;
	var dCnt = 0, H = '', N = '', S = '';
	for (var i = 0; i < sLen; i++) {
		if (s.charAt(i) == ':') ++dCnt;
		else if (dCnt == 0) H += s.charAt(i);
		else if (dCnt == 1) N += s.charAt(i);
		else if (dCnt == 2) S += s.charAt(i);
	}
	if (dCnt == 0) {N = 0; S = 0;}
	if (dCnt == 1) S = 0;
	if ( (dCnt > 2) || !isInt(S) || !isInt(N) || !H.length || !isInt(H) ) return false;
	return isTime(H-0,N-0,S-0);
}
function isAMPMTime(s) {
	var sLen = s.toString().length;
	if ( (sLen < 3) || (sLen > 11) ) return false;
	var ampm = right(s,2).toLowerCase();
	var time = rTrim(left(s,sLen-2));
	if ( (ampm != 'am') && (ampm != 'pm') ) return false;
	var dCnt = 0, H = '', N = '', S = '';
	for (var i = 0; i < time.length; i++) {
		if (s.charAt(i) == ':') ++dCnt;
		else if (dCnt == 0) H += s.charAt(i);
		else if (dCnt == 1) N += s.charAt(i);
		else if (dCnt == 2) S += s.charAt(i);
	}
	if (dCnt == 0) {N = 0; S = 0;}
	if (dCnt == 1) S = 0;
	if ( (dCnt > 2) || !isInt(S) || !isInt(N) || !H.length || !isIntInRange(H-0,1,12) ) return false;
	H = H - 0;
	if ( (ampm == 'pm') && (H < 12) ) H = H + 12;
	if ( (ampm == 'am') && (H == 12) ) H = 0;
	return isTime(H,N-0,S-0);
}
function isAMEX(s) {
	s = s.toString();
	var dig2 = s.substring(1,2);
	if ( (s.length == 15) && (s.substring(0,1) == 3) && ((dig2 == 4) || (dig2 == 7)) ) return isCC(s);
	return false;
}
function isAnyCard(s) {
	if (!isCC(s)) return false;
	if ( !isMC(s) && !isVISA(s) && !isAMEX(s) && !isDC(s) && !isDISC(s) && !isER(s) && !isJCB(s) ) return false;
	return true;
}
function isCB(s) {
	return isDC(s);
}
function isCharInBag(c,bag) {
	for (var i = 0; i < bag.length; i++) if (bag.charAt(i) == c) return true;
	return false;
}
function isCC(s) {
	if (s == null) return false;
	var sLen = s.toString().length;
	if (sLen > 19) return false;
	var sum = 0, mul = 1, l = sLen, digit = '', tproduct = 0;
	for (var i = 0; i < l; i++) {
		digit = s.substring(l-i-1,l-i);
		tproduct = parseInt(digit,10)*mul;
		if (tproduct >= 10) sum += (tproduct % 10) + 1;
		else sum += tproduct;
		if (mul == 1) mul++;
		else mul--;
	}
	if ((sum % 10) == 0) return true;
	return false;
}
function isDashDate(s) {
	var sLen = s.toString().length, dCnt = 0, D = '', M = '', Y = '';
	if ( isWhitespace(s) || (sLen < 8) || (sLen > 10) ) return false;
	for (var i = 0; i < sLen; i++) {
		if (s.charAt(i) == '-') ++dCnt;
		else if (dCnt == 0) M += s.charAt(i);
		else if (dCnt == 1) D += s.charAt(i);
		else if (dCnt == 2) Y += s.charAt(i);
	}
	if ( (dCnt != 2) || !D.length || !isInt(D) || !isInt(M) || !isInt(Y) || !M.length || (Y.length < 4) || ((Y-0) < 1000) ) return false;
	return isDate(Y-0,M-0,D-0);
}
function isDate(nY,nM,nD) {
	if (! ( isYear(nY) && isMonth(nM) && isDay(nD) ) ) return false;
	nM = nM - 0;
	nD = nD - 0;
	if (nD > MDAYS[nM]) return false; 
	if ( (nM == 2) && (nD > daysInFebruary(nY-0)) ) return false;
	return true;
}
function isDateString(s) {
	return ( isDashDate(s) || isSlashDate(s) || isShortDate(s) || isLongDate(s) );
}
function isDay(s) {
	return isIntInRange(s,1,31);
}
function isDigit(c) {
	c = c.toString();
	return ( (c >= '0') && (c <= '9') );
}
function isDC(s) {
	s = s.toString();
	var dig2 = s.substring(1,2);
	if ( (s.length == 14) && (s.substring(0,1) == 3) && ((dig2 == 0) || (dig2 == 6) || (dig2 == 8)) ) return isCC(s);
	return false;
}
function isDISC(s) {
	s = s.toString();
	if ( (s.length == 16) && (s.substring(0,4) == '6011') ) return isCC(s);
	return false;
}
function isEmail(s) {
	var sLen = s.toString().length;
	if (sLen < 6) return false;
	var bad = '~`!#$%^&*()_+={[]}\'";:,<>/?\\|' + WSPACE;
	if ( (stripCharsInBag(s,bad) != s) || (stripCharsInBag(s,'@').length < sLen-1) ) return false;
	var i = 1;
	while ((i < sLen) && (s.charAt(i) != '@')) i++;
	if ((i >= sLen) || (s.charAt(i) != '@')) return false;
	else i += 2;
	while ((i < sLen) && (s.charAt(i) != '.')) i++;
	if ((i >= sLen-1) || (s.charAt(i) != '.')) return false;
	return true;
}
function isEmpty(s) {
	return ( (s == null) || (s.toString().length == 0) );
}
function isER(s) {
	s = s.toString();
	var dig4 = s.substring(0,4);
	if ( (s.length == 15) && ((dig4 == '2014') || (dig4 == '2149')) ) return isCC(s);
	return false;
}
function isFloat(s) {
	if (isEmpty(s)) return false;
	s = s.toString();
	var dec = false;
	if (s == '.') return false;
	for (var i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if ((c == '.') && !dec) dec = true;
		else if (!isDigit(c)) return false;
	}
	return true;
}
function isFloatInRange(s,a,b) {
	if ( isEmpty(s)|| isEmpty(a) || isEmpty(b) || !isFloat(s) ) return false;
	s = s - 0;
	return ((s >= (a-0)) && (s <= (b-0)));
}
function isHour(s) {
	return isIntInRange(s,0,23);
}
function isInt(s) {
	if (isEmpty(s)) return false;
	s = s.toString();
	for (var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (!isDigit(c)) return false;
	}
	return true;
}
function isIntInRange(s,a,b) {
	if ( isEmpty(s) || !isInt(s) ) return false;
	s = parseInt(s);
	return ( (s >= a) && (s <= b) );
}
function isJCB(s) {
	s = s.toString();
	var dig4 = s.substring(0,4);
	if ( (s.length == 16) && ((dig4 == '3088') || (dig4 == '3096') || (dig4 == '3112') || (dig4 == '3158') || (dig4 == '3337') || (dig4 == '3528')) ) return isCC(s);
	return false;
}
function isLetter(c) {
	c = c.toString();
	return ( ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) );
}
function isLongDate(s) {
	var sLen = s.toString().length, dCnt = 0, D = '', M = '', Y = '';
	if ( isWhitespace(s) || (sLen < 10) || (sLen > 18) ) return false;
	for (var i = 0; i < sLen; i++) {
		if (s.charAt(i) == ' ') ++dCnt;
		else if (dCnt == 0) M += s.charAt(i);
		else if (dCnt == 1) D += s.charAt(i);
		else if (dCnt == 2) Y += s.charAt(i);
	}
	if (stripCharsInBag(D,',').length < D.length-1) return false;
	D = stripCharsInBag(D,',');
	for (var i = 1; i <= 12; i++) if ((MNAMES[i] == M.toUpperCase()) || (MSNAMES[i] == M.toUpperCase())) {
		M = i;
		break;
	}
	if ( (dCnt != 2) || !isInt(D) || !isInt(M) || !isInt(Y) || !D.length || !isMonth(M) || (Y.length < 4) || ((Y-0) < 1000) ) return false;
	return isDate(Y-0,M-0,D-0);
}
function isMC(s) {
	s = s.toString();
	var dig2 = s.substring(1,2);
	if ( (s.length == 16) && (s.substring(0,1) == 5) && ((dig2 >= 1) && (dig2 <= 5)) ) return isCC(s);
	return false;
}
function isMinute(s) {
	return isIntInRange(s,0,59);
}
function isMonth(s) {
	return isIntInRange(s,1,12);
}
function isNegInt(s) {
	return (isSignedInt(s) && (parseInt(s) < 0));
}
function isNonNegInt(s) {
	return (isSignedInt(s) && (parseInt(s) >= 0));
}
function isNonPosInt(s) {
	return (isSignedInt(s) && (parseInt(s) <= 0));
}
function isPosInt(s) {
	return (isSignedInt(s) && (parseInt(s) > 0));
}
function isSecond(s) {
	return isIntInRange(s,0,59);
}
function isShortDate(s) {
	var sLen = s.toString().length, dCnt = 0, D = '', M = '', Y = '';
	if ( isWhitespace(s) || (sLen < 10) || (sLen > 17) ) return false;
	for (var i = 0; i < sLen; i++) {
		if (s.charAt(i) == ' ') ++dCnt;
		else if (dCnt == 0) D += s.charAt(i);
		else if (dCnt == 1) M += s.charAt(i);
		else if (dCnt == 2) Y += s.charAt(i);
	}
	for (var i = 1; i <= 12; i++) if ( (MNAMES[i] == M.toUpperCase()) || (MSNAMES[i] == M.toUpperCase()) ) {
		M = i;
		break;
	}
	if ( (dCnt != 2) || !isInt(D) || !isInt(M) || !isInt(Y) || !D.length || !isMonth(M) || (Y.length < 4) || ((Y-0) < 1000) ) return false;
	return isDate(Y-0,M-0,D-0);
}
function isSignedInt(s) {
	if (isEmpty(s)) return false;
	var loc = 0;
	s = s.toString();
	if ( (s.charAt(loc) == '-') || (s.charAt(loc) == '+') ) loc = 1;
	return (isInt(s.substring(loc, s.length)));
}
function isSignedFloat(s) {
	if (isEmpty(s)) return false;
	s = s.toString();
	var loc = 0;
	if ( (s.charAt(0) == '-') || (s.charAt(0) == '+') ) loc = 1;    
	return (isFloat(s.substring(loc,s.length)));
}
function isSlashDate(s) {
	var sLen = s.toString().length, dCnt = 0, D = '', M = '', Y = '';
	if ( isWhitespace(s) || (sLen < 8) || (sLen > 10) ) return false;
	for (var i = 0; i < sLen; i++) {
		if (s.charAt(i) == '/') ++dCnt;
		else if (dCnt == 0) M += s.charAt(i);
		else if (dCnt == 1) D += s.charAt(i);
		else if (dCnt == 2) Y += s.charAt(i);
	}
	if ( (dCnt != 2) || !D.length || !isInt(D) || !isInt(M) || !isInt(Y) || !M.length || (Y.length < 4) || ((Y-0) < 1000) ) return false;
	return isDate(Y-0,M-0,D-0);
}
function isTime(nH,nN,nS) {
	return ( isHour(nH) && isMinute(nN) && isSecond(nS) );
}
function isTimeString(s) {
	return ( is24HourTime(s) || isAMPMTime(s) );
}
function isVISA(s) {
	s = s.toString();
	var sLen = s.length;
	if ( ( (sLen == 16) || (sLen == 13) ) && (s.substring(0,1) == 4) ) return isCC(s);
	return false;
}
function isWhitespace(s) {
	if (isEmpty(s)) return true;
	s = s.toString();
	for (var i = 0; i < s.length; i++) {
		if (WSPACE.indexOf(s.charAt(i)) == -1) return false;
	}
	return true;
}
function isYear(s) {
	if (!isNonNegInt(s)) return false;
	var sLen = s.toString().length;
	return ((sLen == 2) || (sLen == 4));
}
function isZIPCode(s) {
	if (isEmpty(s)) return false;
	sLen = s.toString().length;
	return ( isInt(s) && ((sLen == 5) || (sLen == 9)) );
}

