var __TBEXVReasonRequired = "Required";
var __TBEXVReasonPositiveInteger = "PositiveInteger";
var __TBEXVReasonMaxLength = "MaxLength";
var __TBEXVReasonMinLength = "MinLength";
var __TBEXVReasonRequiredLength = "RequiredLength";

function __TBEXV( val, args )
{
	var control = document.getElementById( val.getAttribute( "controlhookup" ) );
	args.Value = control.value;

	//reset any existing errors.
	val.innerHTML = "";

	if ( control.value.length == 0 )
	{
		if ( val.getAttribute( "required" ) != "true" )
			return;

		args.IsValid = false;
		__TBEXVSetError( val, __TBEXVReasonRequired )
	}
	else
	{
		if ( val.getAttribute( "numeric" ) == "true" )
		{
			args.Value = control.value;
			__TBEXVNumeric( val, args );
			control.value = args.Value;
		}
		if ( args.IsValid && val.getAttribute( "length" ) == "true" )
		{
			args.Value = control.value;
			__TBEXVLength( val, args );
			control.value = args.Value;
		}
	}
	control.value = args.Value;
}

function __TBEXVNumeric( validator, args )
{
	args.IsValid = false;
	switch( validator.getAttribute( "numericType" ) )
	{
		case "PositiveInteger":
			if ( __TBEXVIsInteger( args.Value ) ) 
			{
				if ( parseInt( args.Value ) > 0 )
					args.IsValid = true;
			}
			
			if ( args.IsValid == false ) __TBEXVSetError( validator, __TBEXVReasonPositiveInteger );
			break;
	}
}

function __TBEXVLength( validator, args )
{
	if ( typeof( validator.maxLength ) != "undefined" )
	{
		if ( args.Value.length > parseInt( validator.maxLength ) )
		{
			args.IsValid = false;
			__TBEXVSetError( validator, __TBEXVReasonMaxLength );
		}
	}

	if ( args.IsValid && typeof( validator.minLength ) != "undefined" )
	{
		if ( args.Value.length < parseInt( validator.minLength ) )
		{
			args.IsValid = false;
			__TBEXVSetError( validator, __TBEXVReasonMinLength );
		}	
	}

	if ( args.IsValid && typeof( validator.requiredLength ) != "undefined" )
	{
		if ( args.value.length != parseInt( validator.requiredLength ) )
		{
			args.IsValid = false;
			__TBEXVSetError( validator, __TBEXVReasonRequiredLength );
		}
	}
}

function __TBEXVSetError( val, reason )
{
	//already an error then append the <BR> to it.
	if ( val.innerHTML && val.innerHTML.length != 0 )
		val.innerHTML += "<BR />";

	if ( reason == __TBEXVReasonRequired )
		val.innerHTML += "Is Required";

	if ( reason == __TBEXVReasonPositiveInteger )
		val.innerHTML += "Must a number greater than 0.";

	if ( reason == __TBEXVReasonMaxLength )
		val.innerHTML += "Can not enter more than " + val.maxLength + " characters.";

	if ( reason == __TBEXVReasonMinLength )
		val.innerHTML += "Must enter more than " + val.minLength + " characters.";

	if ( reason == __TBEXVReasonRequiredLength )
		val.innerHTML += "Must enter " + val.requiredLength + " characters.";
}

function __TBEXVIsInteger( value )
{
	var intValue = parseInt( value );
	
	if ( isNaN( intValue ) ) return false;

	if ( value != intValue.toString() ) return false;

	return true;
}