	var strError = '';
	function valInput(elem, datatype, maxSize, zeroLen, elemID, isHeader) {
	//
	//	Access			SQL Server	SQL Server Definition
	//
	//	Yes/No			BIT		(Integer: 0 or 1)
	//	Number (Byte)		TINYINT		(Positive Integer 0 -> 255)
	//	Number (Integer)		SMALLINT	(Signed Integer -32,768 -> 32,767)
	//	Number (Long Integer)	INT		(Signed Integer -(2^31) -> (2^31)-1)
	//	(no equivalent)		BIGINT		(Signed Integer -(2^63) -> (2^63)-1)
	//	Number (Single)		REAL		(Floating precision -1.79E + 308 -> 1.79E + 308)
	//	Number (Double)		FLOAT		(Floating precision -3.40E + 38 -> 3.40E + 38)
	//	Currency			MONEY		(4 decimal places, -(2^63)/10000 -> ((2^63)-1)/10000)
	//	Currency			SMALLMONEY	(4 decimal places, -214,748.3648 -> 214,748.3647)
	//	Decimal			DECIMAL		(Fixed precision -10^38 + 1 -> 10^38 - 1)
	//	Numeric			NUMERIC	(Fixed precision -10^38 + 1 -> 10^38 - 1)
	//	Date/Time			DATETIME	(Date+Time 1753-01-01 -> 9999-12-31, accuracy of 3.33 ms)
	//	Date/Time			SMALLDATETIME	(Date+Time 1900-01-01 -> 2079-06-06, accuracy of one minute)
	//	Text(n)			CHAR		(Fixed-length non-Unicode string to 8,000 characters)
	//	Text(n)			NCHAR		(Fixed-length Unicode string to 4,000 characters)
	//	Text(n)			VARCHAR	(Variable-length non-Unicode string to 8,000 characters)
	//	Text(n)			NVARCHAR	(Variable-length Unicode string to 4,000 characters)
	//	Memo			TEXT		(Variable-length non-Unicode string to 2,147,483,647 characters)
	//	Memo			NTEXT		(Variable-length Unicode string to 1,073,741,823 characters)

		var ascTB = unescape('%09');
		if (elem.value==ascTB) elem.value = '';
		if ((elem.style.color=='#66cc99') || (elem.style.color=='#cc99ff') || (elem.style.color=='rgb(102, 204, 153)')) {
			elem.value = elem.defaultValue;
			return true;
		}
		window.status = ''
		if (datatype.toUpperCase()=='TINYINT') {
		//TINYINT
			isInteger(elem, '0', '255', zeroLen, elemID, isHeader);
		}
		if (datatype.toUpperCase()=='SMALLINT') {
		//SMALLINT
			isInteger(elem, '-32768', '32767', zeroLen, elemID, isHeader);
		}
		else if (datatype.toUpperCase()=='INT') {
		//INT
			isInteger(elem, '-2147483648', '2147483647', zeroLen, elemID, isHeader);
		}
		else if ((datatype.toUpperCase()=='DECIMAL') || (datatype.toUpperCase()=='NUMERIC') || (datatype.toUpperCase()=='MONEY') || (datatype.toUpperCase()=='SMALLMONEY') || (datatype.toUpperCase()=='REAL') || (datatype.toUpperCase()=='FLOAT')) {
		//DECIMAL, NUMERIC, MONEY, SMALLMONEY, REAL, FLOAT
			isFloat(elem, zeroLen, elemID, isHeader);
		}
		else if ((datatype.toUpperCase()=='DATETIME') || (datatype.toUpperCase()=='SMALLDATETIME')) {
		//DATETIME, SMALLDATETIME
			isDate(elem, zeroLen, elemID, isHeader);
		}
		else if (datatype.toUpperCase()=='BIT') {
		//BIT
			isBln(elem, zeroLen, elemID, isHeader);
		}
		else if (datatype.toUpperCase()=='BIGINT') {
		//BIGINT
			isInteger(elem, '20', '', zeroLen, elemID, isHeader);
		}
		else if (datatype.toUpperCase()=='CHAR') {
		//CHAR
			isVChar(elem, maxSize, zeroLen, elemID, isHeader);
		}
		else if (datatype.toUpperCase()=='NCHAR') {
		//NCHAR
			isVChar(elem, maxSize, zeroLen, elemID, isHeader);
		}
		else if (datatype.toUpperCase()=='VARCHAR') {
		//VARCHAR
			isVChar(elem, maxSize, zeroLen, elemID, isHeader);
		}
		else if (datatype.toUpperCase()=='NVARCHAR') {
		//NVARCHAR
			isVChar(elem, maxSize, zeroLen, elemID, isHeader);
		}
		else if (datatype.toUpperCase()=='TEXT') {
		//TEXT
			isVChar(elem, maxSize, zeroLen, elemID, isHeader);
		}
		else if (datatype.toUpperCase()=='NTEXT') {
		//NTEXT
			isVChar(elem, maxSize, zeroLen, elemID, isHeader);
		}
	}

	function isInteger(elem, minVal, maxVal, allowNull, elemID, isHeader) {
		//Remove begin spaces, end spaces, nbsp, comas, dollar sign, convert accounting negative to negative sign
		var inputStr = elem.value + '';

		inputStr = inputStr.toString().replace(/,/g,'').replace(/^\s+|\s+$/g, '').replace(/^\xa0*(\b.*\b|)\xa0*$/,'$1').replace('$','');
		if (inputStr.charAt(0)=='(' && inputStr.charAt(inputStr.length-1)==')') {
			inputStr = inputStr.replace('(','-').replace(')','');
		}
		if ((elem.value.toUpperCase()!='NULL') && (inputStr.length!=0)) {
			for (var i = 0; i<inputStr.length; i++) {
				if (i==0 && inputStr.charAt(i)=='-' && inputStr.length>1) { 
					continue;
		   		}
				if (inputStr.charAt(i)<'0' || inputStr.charAt(i)>'9') {
					hiLightError(elem, false, 'Requires Integer', elemID, isHeader);
					return false;
				}
		    	}
			if (minVal!='20') {
			//allow all numbers for adBigInt
				if (minVal!='21') {
				//allow any number above 0 for adUnsignedBigInt
					if ((elem.value>parseInt(maxVal)) || (elem.value<parseInt(minVal))) {
						var thisMsg = 'Requires Integer Between ' + minVal + ' and ' + maxVal;
						hiLightError(elem, false, thisMsg, elemID, isHeader);
						return false;
					}
				}
			}
		} else {
			if (allowNull!='yes') { 
				var thisMsg = 'Null Value Not Allowed';
				hiLightError(elem, false, thisMsg, elemID, isHeader);
				return false;
			} else {
				if (elem.style.backgroundColor!='transparent') hiLightError(elem, true, '', elemID, isHeader);
				return true;
			}
		}
		if (elem.style.backgroundColor!='transparent') hiLightError(elem, true, '', elemID, isHeader);
		elem.value = inputStr;
		return true;
	}

	function isFloat(elem, allowNull, elemID, isHeader) {
		//Remove begin spaces, end spaces, nbsp, comas, dollar sign, convert accounting negative to negative sign
		var inputStr = elem.value + '';
		var intDcmCnt = 0;
		inputStr = inputStr.toString().replace(/,/g,'').replace(/^\s+|\s+$/g, '').replace(/^\xa0*(\b.*\b|)\xa0*$/,'$1').replace('$','');
		if (inputStr.charAt(0)=='(' && inputStr.charAt(inputStr.length-1)==')') {
			inputStr = inputStr.replace('(','-').replace(')','');
		}
		if ((elem.value.toUpperCase()!='NULL') && (inputStr.length!=0)) {
			for (var i = 0; i<inputStr.length; i++) {
				if (i==0 && inputStr.charAt(i)=='-' && inputStr.length>1) { 
					continue;
		   		}
				if (inputStr.charAt(i)=='.') {
					intDcmCnt += 1;
					if (intDcmCnt>1) {
						hiLightError(elem, false, 'Multiple Decimal Points', elemID, isHeader);
						return false;
					}
					continue;
		   		}
				if (inputStr.charAt(i)<'0' || inputStr.charAt(i)>'9') {
					hiLightError(elem, false, 'Requires a Number', elemID, isHeader);
					return false;
				}
		    	}
		} else {
			if (allowNull!='yes') { 
				var thisMsg = 'Null Value Not Allowed';
				hiLightError(elem, false, thisMsg, elemID, isHeader);
				return false;
			} else {
				if (elem.style.backgroundColor!='transparent') hiLightError(elem, true, '', elemID, isHeader);
				return true;
			}
		}
		if (elem.style.backgroundColor!='transparent') hiLightError(elem, true, '', elemID, isHeader);
		elem.value = inputStr;
		return true;
	}

	function isDate(elem, allowNull, elemID, isHeader) {
	//valid Date
		var dtPat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2,4})$/;
		var inputStr = elem.value.toString().replace(/^\s+|\s+$/g, '');
		if ((elem.value.toUpperCase()!='NULL') && (inputStr.length!=0)) {
			var matchDt = inputStr.match(dtPat);
			if (matchDt==null) {
				var dtPat1 = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2,4})(\ )\d{1,2}[:]\d{2}([:]\d{2})?( [aApP][mM]?)$/;
			    	var dtPat2 = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2,4})(\ )(\d{1,2})(\:)(\d{1,2})$/;
			    	var dtPat3 = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2,4})(\ )\d{1,2}[:]\d{2}[:]\d{2}([:]\d{2})?( [aApP][mM]?)$/;
			    	var dtPat4 = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2,4})(\ )\d{1,2}[:]\d{2}[:]\d{2}[:]\d{2}$/;
   		  		var chk1 = inputStr.match(dtPat1);
    				var chk2 = inputStr.match(dtPat2);
    				var chk3 = inputStr.match(dtPat3);
    				var chk4 = inputStr.match(dtPat4);
				if ((chk1==null) && (chk2==null) && (chk3==null) && (chk4==null)) {
					var thisMsg = 'Requires Date MM/DD/YYYY';
					hiLightError(elem, false, thisMsg, elemID, isHeader);
					return false;
				}
			}
		} else {
			if (allowNull!='yes') { 
				var thisMsg = 'Null Value Not Allowed';
				hiLightError(elem, false, thisMsg, elemID, isHeader);
				return false;
			} else {
				if (elem.style.backgroundColor!='transparent') hiLightError(elem, true, '', elemID, isHeader);
				return true;
			}
		}
		if (elem.style.backgroundColor!='transparent') hiLightError(elem, true, '', elemID, isHeader);
		elem.value = inputStr;
		return true;
	}

	function isBln(elem, zeroLen, elemID, isHeader) {
	//valid adBoolean
		var inputStr = elem.value.toString().toUpperCase().replace(/^\s+|\s+$/g, '');
		if ((inputStr!='NULL') && (inputStr.length!=0)) {
			if ((inputStr!='TRUE') && (inputStr!='FALSE') && (inputStr!='ON') && (inputStr!='OFF') && (inputStr!='YES') && (inputStr!='NO') && (inputStr!='1') && (inputStr!='0')) {
				var thisMsg = 'Requires Bit (True/False, On/Off, Yes/No, 1/0)';
				hiLightError(elem, false, thisMsg, elemID, isHeader);
				return false;
			}
			if (elem.style.backgroundColor!='transparent') hiLightError(elem, true, '', elemID, isHeader);
			return true;
		} else {
			if (zeroLen!='yes') {
				var thisMsg = 'Null Value Not Allowed';
				hiLightError(elem, false, thisMsg, elemID, isHeader);
				return false;
			} else {
				if (elem.style.backgroundColor!='transparent') hiLightError(elem, true, '', elemID, isHeader);
				return true;
			}
		}
	}

	function isVChar(elem, maxSize, zeroLen, elemID, isHeader) {
	//valid adVarChar
		var inputStr = elem.value.toString().replace(/^\s+|\s+$/g, '');
		if ((elem.value.toUpperCase()!='NULL') && (inputStr.length!=0)) {
			if (inputStr.length>parseInt(maxSize)) { 
				var thisMsg = 'This field only allows ' + maxSize.toString() + ' characters';
				hiLightError(elem, false, thisMsg, elemID, isHeader);
				return false;
			}
		} else {
			if (zeroLen!='yes') { 
				var thisMsg = 'Null Value Not Allowed';
				hiLightError(elem, false, thisMsg, elemID, isHeader);
				return false;
			} else {
				if (elem.style.backgroundColor!='transparent') hiLightError(elem, true, '', elemID, isHeader);
				return true;
			}
		}
		if (elem.style.backgroundColor!='transparent') hiLightError(elem, true, '', elemID, isHeader);
		return true;
	}

	function hiLightError(elem, blnValid, msg, elemID, isHeader) {
	//Invalid data
		if (blnValid==false) {
			if (elem.parentNode.style.backgroundColor!='#800000') strError = strError + elemID.toString() + '|';
			elem.parentNode.style.backgroundColor = '#800000';
			elem.parentNode.style.opacity = 0.5;
			elem.parentNode.style.filter = 'alpha(opacity=50)';
			elem.parentNode.style.MozOpacity = '.50'
			elem.style.color = 'HighlightText';
			elem.title = msg;
		} else {
		    if ((elem.parentNode.style.backgroundColor=='#800000')||(elem.parentNode.style.backgroundColor=='rgb(128, 0, 0)')) {
			elem.style.color = '#ffffff';
			if (isHeader=='yes') {
				elem.parentNode.style.backgroundColor = '#222222';
			} else {
				elem.parentNode.style.backgroundColor = 'transparent';
			}
			elem.parentNode.style.opacity = 1;
			elem.parentNode.style.filter = 'alpha(opacity=100)';
			elem.parentNode.style.MozOpacity = '1'
			elem.title = '';
			var thisId = elemID.toString() + '|';
			strError = strError.replace(thisId,'');
		    }
		}
		if (strError.length>0) {
			document.getElementById('divInvalid').style.visibility = '';
			document.getElementById('submitbtn').disabled = true;
		} else {
			document.getElementById('divInvalid').style.visibility = 'hidden';
			document.getElementById('submitbtn').disabled = false;
		}
		return true;
	}

	function convertDate(elem) {
	//Convert Date for SQL server
		var inputStr = elem.toString().replace(/^\s+|\s+$/g, '');
		//if ((elem.value.toUpperCase()=='NULL') || (inputStr.length==0)) return true;
		var Dt1 = '';	//Month
		var Dt2 = '';	//Day
		var Dt3 = '';	//Year
		var Dt4 = '';	//Time
		var counter = 1;
		for (var i = 0; i<inputStr.length; i++) {
			if (inputStr.charAt(i)==' ') {
				Dt4 = inputStr.substring(i)
				 i = inputStr.length+1;
			} else if ((inputStr.charAt(i)=="/") ||  (inputStr.charAt(i)=="-")) {
				counter+=1;
			} else {
				if (counter==1) Dt1+=inputStr.charAt(i);
				if (counter==2) Dt2+=inputStr.charAt(i);
				if (counter==3) Dt3+=inputStr.charAt(i);
			}
		}
		if (Dt1.length==0) Dt1 = '01';
		if (Dt1.length==1) Dt1 = '0' + Dt1.toString();
		if (Dt2.length==0) Dt2 = '01';
		if (Dt2.length==1) Dt2 = '0' + Dt2.toString();
		if (Dt3.length==0) Dt3 = '1900';
		if (Dt3.length==2) Dt3 = '20' + Dt3.toString();
		if (Dt3.length==3) Dt3 = '20' + Dt3.charAt(1)+ Dt3.charAt(2);
		inputStr = Dt3.toString()+Dt1.toString()+Dt2.toString()+Dt4.toString();
		return inputStr;
	}

	function convertBit(elem) {
	//Convert Boolean to SQL server bit
		var inputStr = elem.toUpperCase().replace(/^\s+|\s+$/g, '');
		if ((inputStr!='NULL') && (inputStr.length!=0)) {
			if ((inputStr!='TRUE') && (inputStr!='ON') && (inputStr!='YES') && (inputStr!='1')) {
				return 0;
			} else {
				return 1;
			}
		} else {
			return elem;
		}
	}
