// Copyright Reliable Networks 2006
// Unauthorised reproduction by any means whatsoever is prohibited

function getFieldValue( oField ) {
	if( oField == null ) { return null; }
	var sType = oField.type;
	if( sType == null ) {
		if( oField.length == null ) {
			return null;
		}
		var sValues = "";
		for( var i = 0; i < oField.length; i++ ) {
			if( oField[i].checked ) {
				if( sValues != "" ) {
					sValues += ";";
				}
				sValues += oField[i].value;
			}
		}
		return sValues;
	} else if( sType == "select-one" ) {
		if( oField.options.length == 0 ) {
			return null;
		} else {
			var selectedIndex = oField.selectedIndex;
			if( selectedIndex < 0 ) { selectedIndex = 0; }
			var sValue = oField.options[selectedIndex].value;
			var sText = oField.options[selectedIndex].text;
			if( sValue == "" ) {
				return sText;
			} else {
				return sValue;
			}
		}
	} else if( sType == "checkbox" || sType == "radio" ) {
		if( oField.checked ) {
			return oField.value;
		}
	} else {
		var sValue = oField.value;
		sValue = sValue.replace( new RegExp( "^\\s+", "i" ), "" ).replace( new RegExp( "\\s+$", "i" ), "" );
		return sValue;
	}
	return null;
}

function isCriteriaValid( mValue, aCriteria ) {
	var bValid = true;
	if( aCriteria != null ) {
		var sValue = "" + mValue;
		for( i = aCriteria.length - 2; bValid && i >= 0; i -= 2 ) {
			if( aCriteria[i] == "length" ) {
				bValid = ( sValue.length == aCriteria[i+1] );
			} else if( aCriteria[i] == "min_length" ) {
				bValid = ( sValue.length >= aCriteria[i+1] );
			} else if( aCriteria[i] == "max_length" ) {
				bValid = ( sValue.length <= aCriteria[i+1] );
			} else if( aCriteria[i] == "min_value" ) {
				bValid = ( mValue >= aCriteria[i+1] );
			} else if( aCriteria[i] == "max_value" ) {
				bValid = ( mValue <= aCriteria[i+1] );
			}
		}
	}
	return bValid;
}

function isCurrencyValid( oField, sMessage, aCriteria ) {
	var sValue = getFieldValue( oField );
	if( sValue == null ) { return true; }
	sValue = sValue.replace( /,/g, "" );
	var oRegExp = /^\$?\d+$|^\$?\d+\.\d{2}$/i;
	var bValid = oRegExp.test( sValue );
	if( bValid ) {
		var nValue = parseFloat( sValue.replace( /\$/g, "" ) );
		bValid = !isNaN( nValue ) && isCriteriaValid( nValue, aCriteria );
	}
	if( !bValid ) { showErrorMsg( sMessage, oField ); }
	return bValid;
}

function isDateValid( oForm, sName, sMessage, aCriteria ) {
	return true;
}

function isEmailValid( oField, sMessage, aCriteria ) {
	var sValue = getFieldValue( oField );
	if( sValue == null || sValue == "" ) { return true; }
	var oRegExp = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	var bValid = ( oRegExp.test( sValue ) && isCriteriaValid( sValue, aCriteria ) );
	if( !bValid ) { showErrorMsg( sMessage, oField ); }
	return bValid;
}

function isEmpty( oField, sMessage ) {
	if( oField != null ) {
		var sValue = getFieldValue( oField );
		if( sValue == null || sValue == "" ) {
			showErrorMsg( sMessage, oField );
			return true;
		}
	}
	return false;
}

function isFloatValid( oField, sMessage, aCriteria ) {
	var sValue = getFieldValue( oField );
	if( sValue == null ) { return true; }
	sValue = sValue.replace( /,/g, "" );
	var oRegExp = /^-?\d+$|^-?\d+\.\d+$/i;
	var bValid = oRegExp.test( sValue );
	if( bValid ) {
		var nValue = parseFloat( sValue );
		bValid = !isNaN( nValue ) && isCriteriaValid( nValue, aCriteria );
	}
	if( !bValid ) { showErrorMsg( sMessage, oField ); }
	return bValid;
}

function isIntegerValid( oField, sMessage, aCriteria ) {
	var sValue = getFieldValue( oField );
	if( sValue == null ) { return true; }
	sValue = sValue.replace( /,/g, "" );
	var oRegExp = /^-?\d+$/i;
	var bValid = oRegExp.test( sValue );
	if( bValid ) {
		var nValue = parseInt( sValue );
		bValid = !isNaN( nValue ) && isCriteriaValid( nValue, aCriteria );
	}
	if( !bValid ) { showErrorMsg( sMessage, oField ); }
	return bValid;
}

function isTextValid( oField, sMessage, aCriteria ) {
	var sValue = getFieldValue( oField );
	if( sValue == null ) { return true; }
	var bValid = isCriteriaValid( sValue, aCriteria );
	if( !bValid ) { showErrorMsg( sMessage, oField ); }
	return bValid;
}

function isTimeValid( oField, sMessage, aCriteria ) {
}

function setFieldValue( oField, sNewValue ) {
	if( oField == null ) { return true; }
	sNewValue = "" + sNewValue;
	var bReturn = false;
	var sType = oField.type;
	if( sType == null ) {
		if( oField.length == null ) {
			return true;
		}
		var aNewValues = sNewValue.split( "," );
		for( var i = 0; i < oField.length; i++ ) {
			oField[i].checked = false;
			for( var j = 0; j < aNewValues.length; j++ ) {
				if( oField[i].value == aNewValues[j] ) {
					oField[i].checked = true;
					bReturn = true;
				}
			}
		}
	} else if( sType == "select-one" ) {
		var nSelectIndex = -1;
		for( var i = 0; i < oField.options.length && nSelectIndex < 0; i++ ) {
			if( oField.options[i].text == sNewValue || oField.options[i].value == sNewValue ) {
				nSelectIndex = i;
				bReturn = true;
			}
		}
		oField.selectedIndex = nSelectIndex;
	} else if( sType == "checkbox" || sType == "radio" ) {
		oField.checked = false;
		if( oField.value == sNewValue ) {
			oField.checked = true;
			bReturn = true;
		}
	} else {
		oField.value = sNewValue;
		bReturn = true;
	}
	return bReturn;
}

function showErrorMsg( sMessage, oField ) {
	if( sMessage != null ) { alert( sMessage ); };
	if( oField != null && oField.focus != null ) { oField.focus(); }
	if( oField != null && oField.select != null ) { oField.select(); }
}
