// trivial patterns
var reWhitespace = /^\s+$/
var reLetter = /^[a-zA-Z]$/
var reAlphabetic = /^[a-zA-Z]+$/
var reAlphanumeric = /^[a-zA-Z0-9]+$/
var reDigit = /^\d/
var reLetterOrDigit = /^([a-zA-Z]|\d)$/

// standard patterns
var INT_PATTERN = /^\d+$/
var ZIP_PATTERN = /^\d{5}$|(^\d{5}-\d{4})$/
var FLOAT_PATTERN = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/
var EMAIL_PATTERN = /^.+\@.+\..+$/
var MM_DD_YYYY = /^\d{1,2}\/\d{1,2}\/\d{4}$/
var DATE_DELIM = /[\/.\\-]/


//constant
var MIN_YEAR = 1800;

// returns a boolean
function match(pattern, source, emptyOK) {
    if (emptyOK & source == "") return true;
    return pattern.test(source);
}

// returns an array of matches for "pattern"
function search(pattern, source) {
    return source.match(pattern);
}

function replace(pattern, source, subst) {
    return source.replace(pattern, subst);
}

function split(pattern, source) {
    source.split(pattern);
}

function isValidDate(sdate) {
	if (sdate == "") return true;
	if(!match(MM_DD_YYYY, sdate, true)) return false;

	var array = sdate.split(DATE_DELIM);
	var month = array[0] - 1;
	var day = array[1] - 0;
	var year = array[2] - 0;
	if (year < MIN_YEAR) return false;

	var date = new Date(year, month, day);
	return (date.getFullYear() == year && date.getMonth() == month && date.getDate() == day);
}

function isIntValue(source) {
    if (source == "") return true;
    return INT_PATTERN.test(source);
}

function isValidZip(source) {
	if (source == "") return true;
	return ZIP_PATTERN.test(source);
}

function isFloatValue(source) {
    if (source == "") return true;
    return FLOAT_PATTERN.test(source);
}

function isValidEMail(source) {
	if (source == "") return false;
    return EMAIL_PATTERN.test(source);
}