function FormChecker() 
{
	this.debug = 0;

	// Check()
	// arguments => Variable - however first argument must be the error message that is displayed.
	// -------------------------------------------
	// Version History
	// -------------------------------------------
	//   8.3.01 - Created.
	// 18.10.01 - Added <select> check functionality.
	// 21.11.01 - Created FormLib class.

	this.Check = function() {
		var i;
		var exprErr = false;
		var strErrMsg = this.Check.arguments[0];
		for (i = 1; i <= this.Check.arguments.length - 1; i++) {
			var obj = this.Check.arguments[i];
			
			if (obj.options) {		
				if (this.IsBlank(obj.options[obj.options.selectedIndex].value)) {
					exprErr = true;
					obj.style.backgroundColor = '#B6D5FF';
				}
				else
				{
					obj.style.backgroundColor = '#FFFFFF';
				}
			}
			else {
				if (this.IsBlank(obj.value)) {
					exprErr = true;
					obj.style.backgroundColor = '#B6D5FF';
				}
				else
				{
					obj.style.backgroundColor = '#FFFFFF';
				}
			}

		}

		if (exprErr) {
			alert(strErrMsg);
			return false;
		}
		else {
			return true;
		}
	}

	// IsBlank()
	// arguments => (String [string])
	// -------------------------------------------
	// Version History
	// -------------------------------------------
	// 19.11.01 - Created

	this.IsBlank = function(str) {
		if (str.length<1) {
			return true;
		}
		else {
			return false;
		}
	}

	// IsNumeric()
	// arguments => (String [error message], Object [form element])
	// -------------------------------------------
	// Version History
	// -------------------------------------------
	// 12.3.01 - Created

	this.IsNumeric = function(strErrMsg, arg) {
		var i;
		var exprErr = false;
		var obj = arg.value;

		for (i=0;i<obj.length;i++){
			cmp = "0123456789."
			tst = obj.substring(i,i+1)
			if (cmp.indexOf(tst)<0){
				exprErr = true;
			}
		}
		if (exprErr) {
			alert(strErrMsg);
			return false;
		}
		else {
			return true;
		}
	}

	// FileType()
	// arguments => (String [error message], Object [form element], Array [extension(s) to be match])
	// -------------------------------------------
	// Version History
	// -------------------------------------------
	// 27.11.01 - Created

	this.FileType = function(strErrMsg, arg, ext) {
		var exprErr = true;
		var obj = arg.value;
		var aObj = obj.split(".");
		for (x=0; x<ext.length; x++) {
			if (aObj[aObj.length-1] == ext[x]) {
				exprErr = false;
				break;
			}
		}

		if (exprErr) {
			alert(strErrMsg);
			return false;
		}
		else {
			return true;
		}
	}

	// IsEmail()
	// arguments => (String [error message], Object [form element])
	// -------------------------------------------
	// Version History
	// -------------------------------------------
	//  13.3.01 - Created
	// 21.11.01 - Added regular expression check (only available in JavaScript 1.2+)
	// 26.5.04 - Added bgcolor mods

	this.IsEmail = function(strErrMsg, arg) {
		var exprErr = false;
		var obj = arg.value;
		
		if (obj.search)
		{
			if (obj.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) == -1) {
				exprErr = true;
			}
		}
		else {
			var strChars = "*|,\":<>[]{}`\';()&$#%";

			for (var i = 0; i < obj.length; i++) {
				if (strChars.indexOf(obj.charAt(i)) != -1) {
					exprErr = true;
				}
			}

			if ((obj.indexOf("@") != -1) && (obj.indexOf(".") != -1)) {
				exprErr = true;
			}
		}

		if (exprErr) {
			alert(strErrMsg);
			arg.style.backgroundColor = '#B6D5FF';
			return false;
		}
		else {
			arg.style.backgroundColor = '#FFFFFF';
			return true;
		}
	}

	// CheckLength()
	// arguments => (String [error message], Object [form element], Integer [length field should be], Integer [Set to 0 if field MUST be equal to the length argument, 1 if field can be greater than or equal to the length argument, or 2 if field can be less than or equal to the length argument.])
	// -------------------------------------------
	// Version History
	// -------------------------------------------
	// 6.8.01 - Created

	this.CheckLength = function(strErrMsg, arg, len, constraint) {
		var exprErr = false;

		obj = arg.value;
		if (constraint == 0) {
			if (obj.length != len) {
				exprErr = true;
			}
		}
		else if (constraint == 1) {
			if (obj.length < len) {
				exprErr = true;
			}
		}
		else if (constraint == 2) {
			if (obj.length > len) {
				exprErr = true;
			}
		}

		if (exprErr) {
			alert(strErrMsg);
			return false;
		}
		else {
			return true;
		}
	}

	this.Compare = function(strErrMsg, arg1, arg2) {
		var exprErr= false;

		obj1 = arg1.value;
		obj2 = arg2.value;

		if (obj1 != obj2) {
			exprErr = true; 
		}

		if (exprErr) {
			alert(strErrMsg);
			return false;
		}
		else {
			return true;
		}
	}

	// CatchException()
	// arguments => none
	// This will catch all errors on a page if debug is set to 1. Handy for testing.
	// -------------------------------------------
	// Version History
	// -------------------------------------------
	// 21.11.01 - Created

	this.CatchException = function(msg, url, line) {
		str  = "An error on this page was thrown and caught.\n";
		str += "Message: " + msg + "\n";
		str += "Line: " + line + "\n";
		str += "URL: " + url + "\n";

		alert(str);
		return false;
	}

	if (this.debug) {
		window.onerror = this.CatchException;
	}
}