var digits = "0123456789";
var lLetters = "abcdefghijklmnopqrstuvwxyz"
var uLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var alphanum = lLetters + uLetters + digits;
var whitespace = " \t\n\r ";

var ProvinceDelimiter = "|";
var Provinces = new Array();
Provinces["US"] = "AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|AE|AA|AE|AE|AP";
Provinces["CA"] = "AB|BC|MB|NB|NL|NT|NS|NU|ON|PE|QC|SK|YT";

function isEmpty(s) {
	return ((s == null) || (s.length == 0))
}

function isWhitespace(s) {
	var i;
	if (isEmpty(s)) return true;
		for (i = 0; i < s.length; i++)
		{   
			var c = s.charAt(i);
			if (whitespace.indexOf(c) == -1) return false;
		}
	return true;
}

function StripIn (s, bag) {
	var i;
	var returnString = "";
	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
}

function StripNotIn (s, bag) {
	var i;
	var returnString = "";
	for (i = 0; i < s.length; i++) {
		 var c = s.charAt(i);
		 if (bag.indexOf(c) != -1) returnString += c;
	}
	return returnString;
}

function isLetter (c) {
	return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}

function isDigit (c) {
	return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c) {
	return (isLetter(c) || isDigit(c))
}

function isInteger (s) {
	var i;
	if (isEmpty(s)) return false;
	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (!isDigit(c)) return false;
	}
	return true;
}

function AlphaNumeric(s) {
	var i;
	if (isEmpty(s)) return false;
	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (!isLetterorDigit(c)) return false;
	}
	return true;
}

function isLength(s, lMin, lMax) {
	if ((s.length >= lMin) && (s.length <= lMax)) return true;
	return false;
}

function isProvinceCode(sCode, sCountry) {
	if (Provinces[sCountry] != null) {
		if (!isLength(sCode, 2, 2)) return false;
		return ((Provinces[sCountry].indexOf(sCode.toUpperCase()) != -1) && (sCode.indexOf(ProvinceDelimiter) == -1));
	}
	return true;
}

function isZipCode(sZip, sCountry) {
	if (sCountry=="US") return isUSZipCode(sZip);
	if (sCountry=="CA") return isCAZipCode(sZip);
	return true
}

function isUSZipCode(sZip) {
	return (isInteger(sZip) && ((sZip.length==5) || (sZip.length==9)));
}

function isCAZipCode(sZip) {
	var re = new RegExp();
	re = /^[a-zA-z]\d[a-zA-z]( |-)?\d[a-zA-z]\d$/;
	return re.test(sZip);
}

function isEmail (s) {
	if (isEmpty(s)) return false;
	if (isWhitespace(s)) return false;
	var i = 1;
	var sLength = s.length;
	while ((i < sLength) && (s.charAt(i) != "@")) {i++}
	if ((i >= sLength) || (s.charAt(i) != "@")) return false;
	else i += 2;
	while ((i < sLength) && (s.charAt(i) != ".")) { i++ }
	if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
	else return true;
}

function isURL(s) {
	if (isWhitespace(s)) return false;
	return true;
}

function warnInvalid (theField, s) {
	theField.focus();
	theField.select();
	alert(s);
	return false;
}
