	function FormatField(iFmt,o,sfld) {
		var sTemp
		var bSetObject = false

		if (!oLibPage.bIsMacIE) {
			if (FormatField.arguments.length == 1) {
				sTemp = window.event.srcElement.value;
				o = window.event.srcElement
				bSetObject = true
			}
		}

		if (!bSetObject) {
			if ((FormatField.arguments.length == 2) || (typeof(FormatField.arguments[1]) == 'OBJECT')) {
				//sTemp = window.event.srcElement.value;
				//o = window.event.srcElement

				if ((typeof(FormatField.arguments[1])).toUpperCase() != 'OBJECT') {
					//legacy calls, o is actually the field value.
					sTemp = o
				} else {
					sTemp = o.value
					bSetObject = true
				}

			} else {
				if (typeof(FormatField.arguments[1]) != 'OBJECT') {
					sTemp = o
				} else {
					sTemp = sfld
				}
			}
		}

		switch(1 * iFmt) {
			case fmtAMOUNT:			//currency
			case fmtAMOUNT_NEGATIVE:
			case fmtAMOUNT_THREE_DECIMAL:
			case fmtAMOUNT_NEGATIVE_THREE_DECIMAL:
			case fmtAMOUNT_NOCURRENCY:
			case fmtAMOUNT_NEGATIVE_NOCURRENCY:
			case fmtAMOUNT_ALLOW_ZERO:
			case fmtAMOUNT_NEGATIVE_FORMAT_ZERO:
				sTemp = oLibPage.TrimSpaces(sTemp)
				sTemp = oLibPage.FormatAmount(sTemp,iFmt)
				break
			case fmtDATEMDY:			//MDY dates
				sTemp = oLibPage.TrimSpaces(sTemp)
				sTemp = oLibPage.FormatDate(sTemp)
				break
			case fmtMMYYYY:			//MMYYYY dates
			case fmtMMDD:
			case fmtDATE_FUZZY:
			case fmtCLASS_OF:
			case fmtYYYY:
				sTemp = oLibPage.TrimSpaces(sTemp)
				sTemp = oLibPage.FormatDate(sTemp,(1 * iFmt))
				break
			case fmtNUMBER:
			case fmtNUMBER_NEGATIVE:
			case fmtNUMBER_DECIMAL:
			case fmtNUMBER_4DECIMAL:
			case fmtNUMBER_FORMATTED:
			case fmtRATE:
			case fmtGPA:
			case fmtANNUAL_RATE:
			case fmtNUMBER_ALLOW_ZERO:
			case fmtNUMBER_THREE_DECIMAL_CUT_ZEROS:
				sTemp = oLibPage.TrimSpaces(sTemp)
				sTemp = oLibPage.FormatNumber(sTemp,iFmt)
				break

			case fmtTIME:
				sTemp = oLibPage.TrimSpaces(sTemp)
				sTemp = oLibPage.FormatTime(sTemp)
				break

			case fmtSORT_CODE:
			case fmtTRANSIT_ROUTING:
			case fmtBSB:
			case fmtINSTITUTION_ID:
			case fmtBANK_NUMBER:
				sTemp = oLibPage.TrimSpaces(sTemp)
				sTemp = oLibPage.FormatSortCode(sTemp,iFmt)
				break

			case fmtPHONE:
				sTemp = oLibPage.TrimSpaces(sTemp)
				sTemp = oLibPage.FormatPhone(sTemp)
				break

			case fmtPERCENT_NONNEGATIVE:
			case fmtPERCENT:
				sTemp = oLibPage.rawnum(sTemp)
				if (ValidNumber(sTemp,oLibPage.NS_ALLOWDECIMAL | oLibPage.NS_ALLOWNEGATIVE)) {
					if ((1 * iFmt) == fmtPERCENT) {
						var bIsNegative = (sTemp <0)
						sTemp = Math.abs(sTemp)
						sTemp = oLibPage.fixed(sTemp,3)
						if (bIsNegative) {sTemp = '(' + sTemp + ')'}
					} else {
						sTemp=(sTemp>100?'0':sTemp)
						sTemp=(sTemp<0?'0':sTemp)
						sTemp = oLibPage.fixed(sTemp,3)
						sTemp = LocalizeDecimalSep(sTemp)
					}
				}
				break
			case fmtAlphaUpper:
				sTemp = sTemp.toUpperCase()
				break
				
		}
		
		if (typeof(CustomFormatField) != 'undefined'){
			sTemp = CustomFormatField(iFmt, sTemp)
		}
		
		if (bSetObject) {
			o.value = sTemp
		}
		return sTemp
	}

	function ErrorObject() {
		this.Message = ''
	}

	function ValidateField(iFmt,vTestValue,bRequired,oError) {
		//to use this function use must
		//	var oError = new Object() before the call

		var vValue = oLibPage.TrimSpaces(vTestValue)

		if (bRequired && vValue.length == 0) {
			oError.Message = oLibPage.gsRequiredFieldMissing
			return false
		}

		if (vValue.length == 0) { return true }

		switch(1 * iFmt) {
			case fmtNUMBER_ALLOW_ZERO:					
				if (!ValidNumber(vValue,0)) {
					oError.Message = oLibPage.gsInvalidNumber
					return false
				}
				break		
			case fmtAMOUNT:
			case fmtAMOUNT_THREE_DECIMAL:
			case fmtAMOUNT_NOCURRENCY:
			case fmtAMOUNT_ALLOW_ZERO:
				if (!ValidAmount(vValue,0)) {
					oError.Message = oLibPage.gsInvalidAmount
					return false
				}
				break

			case fmtAMOUNT_NEGATIVE:
			case fmtAMOUNT_NEGATIVE_THREE_DECIMAL:
			case fmtAMOUNT_NEGATIVE_NOCURRENCY:
			case fmtAMOUNT_NEGATIVE_FORMAT_ZERO:
				if (!ValidAmount(vValue,oLibPage.NS_ALLOWNEGATIVE)) {
					oError.Message = oLibPage.gsInvalidAmount
					return false
				}
				break

			case fmtDATEMDY:
			case fmtMMYYYY:
			case fmtMMDD:
			case fmtDATE_FUZZY:
				if (!ValidDate(vValue, 1 * iFmt)) {
					if ((1 * iFmt) == fmtDATE_FUZZY) {
						oError.Message = oLibPage.gsInvalidFuzzyDate
					} else {
						oError.Message = oLibPage.gsInvalidDate
					}
					return false
				}
				break;

			case fmtYYYY:
			case fmtNUMBER:
				if (!ValidNumber(vValue,0)) {
					oError.Message = oLibPage.gsInvalidNumber
					return false
				}
				break

			case fmtNUMBER_NEGATIVE:
				if (!ValidNumber(vValue,oLibPage.NS_ALLOWNEGATIVE)) {
					oError.Message = oLibPage.gsInvalidAmount
					return false
				}
				break

			case fmtNUMBER_DECIMAL:
			case fmtNUMBER_4DECIMAL:
			case fmtRATE:
			case fmtPERCENT_NONNEGATIVE:
			case fmtANNUAL_RATE:
			case fmtNUMBER_THREE_DECIMAL_CUT_ZEROS:
				if (!ValidNumber(vValue,oLibPage.NS_ALLOWDECIMAL)) {
					oError.Message = oLibPage.gsInvalidNumber
					return false
				}
				break

			case fmtTIME:
				if (!ValidTime(vValue)) {
					oError.Message = oLibPage.gsInvalidTime
					return false
				}
				break

			case fmtFILENAME:
				if (!ValidFileName(vValue)) {
					oError.Message = oLibPage.gsInvalidFileName
					return false
				}
				break
		}
		return true
	}



	function FormatSortCode(sTemp, iFmt) {

		var s
		if (sTemp.length == 0) {return sTemp}

		switch (iFmt) {
			case fmtSORT_CODE:
				s = sTemp.replace(/-/g, '')
				if (!isNaN(s)) {
					if (s.length == 6) {
						sTemp = s.substr(0,2) + '-' + s.substr(2,2) + '-' + s.substr(4,2)
					}
				}
				break
			case fmtTRANSIT_ROUTING:
			case fmtINSTITUTION_ID:
				if (!isNaN(sTemp)) {
					s = '00000000' + sTemp
					sTemp = s.substr(s.length - 8)
				}
				break
			case fmtBSB:
			case fmtBANK_NUMBER:
				s = sTemp.replace(/-/g, '')
				if (!isNaN(s)) {
					if (s.length == 6) {
						sTemp = s.substr(0,3) + '-' + s.substr(3,3)
					}
				}
				break
		}
		return sTemp
	}

	function ValidSortCode(sTemp, iFmt, nMaxLen) {
		var s
		switch (iFmt) {
			case fmtSORT_CODE:
				s = sTemp.replace(/-/g, '')
				if (isNaN(s) || (sTemp.length != 8)) {
					return false
				} else {
					if ((sTemp.substr(2,1) != '-') || (sTemp.substr(5,1) != '-')) {
						return false
					}
				}
				break
			case fmtTRANSIT_ROUTING:
			case fmtINSTITUTION_ID:
				if (isNaN(sTemp) || (sTemp.length != 8)) {
					return false
				}
				break
			case fmtBSB:
			case fmtBANK_NUMBER:
				s = sTemp.replace(/-/g, '')
				if (isNaN(s) || (sTemp.length != 7)) {
					return false
				} else {
					if (sTemp.substr(((iFmt==fmtBSB)?3:2),1) != '-') {
						return false
					}
				}
				break
		}
		return true
	}