// Validation Functions
function IsEntered(element) {
	if (!element.value) {
		return false;
	}
	return true;
}

function RequireField(element, message) {
	if (!IsEntered(element)) {
		alert(message);
		element.focus();
		return false;
	}
	return true;
}

// Formatting Functions
function TrimField(element) {
	var objRegExp = /(^\s*)([^\b]*\S)(\s*$)/;
	if (objRegExp.test(element.value)) {
		element.value = element.value.replace (objRegExp, "$2");
	} else {
		element.value = "";
	}
}

function UpperCase(element) {
	element.value = element.value.toUpperCase();
}

function LowerCase(element) {
	element.value = element.value.toLowerCase();
}

function FormatState(element) {
	var objRegExp = /^[A-Za-z]{2}$/;
	if (objRegExp.test(element.value)) {
		UpperCase(element);
	} else if (element.value != '') {
		AlertAndSelect(element, "Please enter a valid two-letter state code\nbefore continuing (ex. ID).");
	}
}

function FormatZipCode(element) {
	var objRegExp = /^(\d{5})-?(\d{4})?$/;
	if (objRegExp.test(element.value) && element.value.length > 5) {
		element.value = element.value.replace(objRegExp, "$1-$2");
	} else if (!objRegExp.test(element.value) && element.value != '') {
		AlertAndSelect(element, "Please enter a valid zip code before\ncontinuing (ex. 83201).");
	}
}

function FormatPhone(element) {
	var objRegExpLocal = /^(\d{3}).?(\d{4})$/;
	var objRegExpLD = /^.?(\d{3}).{0,2}(\d{3}).?(\d{4})$/;
	if (objRegExpLocal.test(element.value)) {
		element.value = element.value.replace(objRegExpLocal, "(208) $1-$2");
	} else if (objRegExpLD.test(element.value)) {
		element.value = element.value.replace(objRegExpLD, "($1) $2-$3");
	} else if (element.value != '') {
		AlertAndSelect(element, "Please enter a valid phone number\nincluding the area code before\ncontinuing (ex. 208-232-1468).");
	}
}

function FormatEmail(element) {
	TrimField(element);
	var objRegExp = /^[a-zA-Z0-9\._\-]+@[a-zA-Z0-9\-]+(\.[a-zA-Z]{2,63})+$/;
	if (objRegExp.test(element.value)) {
		LowerCase(element);
	} else if (element.value != '') {
		AlertAndSelect(element, "Please enter a valid e-mail address before\ncontinuing (ex. username@aol.com).");
	}
}

function FormatDate(element) {
	var objRegExp = /^(\d{1,2})([-\/]|\. ?)(\d{1,2})\2((\d{4})|(\d{2}))$/;
	m = element.value.match(objRegExp)
	if (m != null) {
		day = m[3];
		month = m[1];
		year = (m[5].length == 4) ? m[5] : 20 + m[6]
		var date = new Date(year, month-1, day);
		element.value = formatDateTime(date, 'M/d/yyyy');
	} else if (element.value != '') {
		AlertAndSelect(element, "Please enter a valid date before\ncontinuing (ex. mm/dd/yyyy).");
	}
}

function LimitCharacters(element, numberOfCharacters) {
	element.value = element.value.substring(0, numberOfCharacters);
}

function AlertAndSelect(element, message) {
	alert(message);
	element.focus();
	element.select();
}

// Filter Functions
function FilterNonNumeric(element) {
	var result = new String();
	var numbers = "0123456789";
	var chars = element.value.split("");
	for (i = 0; i < chars.length; i++) {
		if (numbers.indexOf(chars[i]) != -1) result += chars[i];
	}
	if (element.value != result) element.value = result;
}