/*
Form Validation
Includes the following functions:
- ValidateField
- ValidateNumberField
- ValidateSSNField
- ValidatePhoneField
- ValidateZipField
- ValidateEmailField
- IsNumber
- StripToNumber
- ReplaceString
- ValidateDateField
*/

var ReturnedErrors, crlf, cr, lf;
var AppValid,CoAppValid;

cr = 10;
lf = 13;
crlf = "AB";
crlf = cr + lf;
ReturnedErrors = '';

function ValidateField( FieldValue, FieldDescription, Required, Inline )
{
	var ReturnValue;
	
	if( FieldValue.value.length <= 0 && Required == true )
	{
		ReturnedErrors = ReturnedErrors + '\nPlease complete the ' + FieldDescription + ' field.';
	}
	if( FieldValue.value.length <= 0 && Inline == true && ReturnedErrors != '' )
	{
		alert( ReturnedErrors );
		ReturnedErrors = '';
	}
	return( ReturnValue );
}

function ValidateNumberField( FieldValue, FieldDescription, Required, Inline, LowValue, HighValue )
{
	var NumberReturned, ReturnValue;
	
	ReturnValue = true;
	if( FieldValue.value.length <= 0 && Required == true )
	{
		ReturnedErrors = ReturnedErrors + '\nPlease complete the ' + FieldDescription + ' field.';
		ReturnValue = false;
	}
	else if( FieldValue.value.length > 0 )
	{
		if( IsNumber( FieldValue.value ) == false )
		{
			ReturnedErrors = ReturnedErrors + '\nPlease enter a number in the ' + FieldDescription + ' field .';
			ReturnValue = false;
		}
		else if( parseFloat( FieldValue.value ) < LowValue || parseFloat( FieldValue.value ) > HighValue )
		{
			ReturnedErrors = ReturnedErrors + '\nThe ' + FieldDescription + ' field must contain a number from ' + LowValue + ' to ' + HighValue + '.';
			ReturnValue = false;
		}
	}
	if( Inline == true && ReturnedErrors != '' )
	{
		alert( ReturnedErrors );
		ReturnedErrors = '';
	}
	return( ReturnValue );
}

function ValidateSSNField( FieldValue, FieldDescription, Required, Inline )
{
	var NumberReturned, ReturnValue;
	
	ReturnValue = true;
	if( FieldValue.value.length <= 0 && Required == true )
	{
		ReturnedErrors = ReturnedErrors + '\nPlease complete the ' + FieldDescription + ' field.';
		ReturnValue = false;
	}
	else if( FieldValue.value.length > 0 )
	{
		NumberReturned = StripToNumber( FieldValue.value );
		if( NumberReturned.length != 9 )
		{
			ReturnedErrors = ReturnedErrors + '\nPlease enter a valid Social Security number in the ' + FieldDescription + ' field (in the ###-##-#### format).';
			ReturnValue = false;
		}
		else
		{
			FieldValue.value = NumberReturned.substring( 0, 3 ) + '-' + NumberReturned.substring( 3, 5 ) + '-' + NumberReturned.substring( 5, 9 );
		}
	}
	if( Inline == true && ReturnedErrors != '' )
	{
		alert( ReturnedErrors );
		ReturnedErrors = '';
	}
	return( ReturnValue );
}

function ValidatePhoneField( FieldValue, FieldDescription, Required, Inline )
{
	var NumberReturned, ReturnValue;
	
	ReturnValue = true;
	if( FieldValue.value.length <= 0 && Required == true )
	{
		ReturnedErrors = ReturnedErrors + '\nPlease complete the ' + FieldDescription + ' field.';
		ReturnValue = false;
	}
	else if( FieldValue.value.length > 0 )
	{
		NumberReturned = StripToNumber( FieldValue.value );
		if( NumberReturned.length != 10 )
		{
			ReturnedErrors = ReturnedErrors + '\nPlease enter a valid phone number in the ' + FieldDescription + ' field (remember to include your area code).';
			ReturnValue = false;
		}
		else
		{
			FieldValue.value = '(' + NumberReturned.substring( 0, 3 ) + ') ' + NumberReturned.substring( 3, 6 ) + '-' + NumberReturned.substring( 6, 10 );
		}
	}
	if( Inline == true && ReturnedErrors != '' )
	{
		alert( ReturnedErrors );
		ReturnedErrors = '';
	}
	return( ReturnValue );
}



function ValidateZipField( FieldValue, FieldDescription, Required, Inline )
{
	var FieldLength, ReturnValue;
	
	
	if( FieldValue.value.length <= 0 && Required == true )
	{
		ReturnedErrors = ReturnedErrors + '\nPlease complete the ' + FieldDescription + ' field.';
		ReturnValue = false;
	}
	else if( FieldValue.value.length > 0 && FieldValue.value.length != 5 )
	{
		ReturnedErrors = ReturnedErrors + '\nPlease enter a valid zip code in the ' + FieldDescription + ' field (must be five (5) numbers).';
	}
	else if( FieldValue.value.length == 5 )
	{
		for( FieldLength = 0; FieldLength < FieldValue.value.length; FieldLength++ )
		{
			if( FieldValue.value.substring( FieldLength, FieldLength + 1 ) < '0' ||
				FieldValue.value.substring( FieldLength, FieldLength + 1 ) > '9' )
			{
				ReturnedErrors = ReturnedErrors + '\nAn invalid character was used in the ' + FieldDescription + ' field.';
				ReturnValue = false;
				break;
			}
		}
		
	}
	if( Inline == true && ReturnedErrors != '' )
	{
		alert( ReturnedErrors );
		ReturnedErrors = '';
	}
	return( ReturnValue );
}

function ValidateEmailField( FieldValue, FieldDescription, Required, Inline )
{
	var p, ReturnValue;
	
	ReturnValue = true;
	if( FieldValue.value.length <= 0 && Required == true )
	{
		ReturnedErrors = ReturnedErrors + '\nPlease enter a valid email address in the ' + FieldDescription + ' field.';
		ReturnValue = false;
	}
	else if( FieldValue.value.length > 0 )
	{
		p=FieldValue.value.indexOf('@');
		if (p<1 || p==(FieldValue.value.length-1)) 
			ReturnedErrors = ReturnedErrors + '\nPlease enter a valid email address in the ' + FieldDescription + ' field.';
			ReturnValue = false;
	}
	if( Inline == true && ReturnedErrors != '' )
	{
		alert( ReturnedErrors );
		ReturnedErrors = '';
	}
	return( ReturnValue );
}

function IsNumber( FieldValue )
{
	var FieldLength, ReturnValue, DecimalPlaceCount, CurrencyMarker;
	
	ReturnValue = true;
	DecimalPlaceCount = 0;
	
	for( FieldLength = 0; FieldLength < FieldValue.length; FieldLength++ )
	{
		if( FieldValue.substring( FieldLength, FieldLength + 1 ) < '0' ||
			FieldValue.substring( FieldLength, FieldLength + 1 ) > '9' )
		{
			if( FieldValue.substring( FieldLength, FieldLength + 1 ) == '.' )
			{
				if( DecimalPlaceCount >= 1 )
				{
					ReturnedErrors = ReturnedErrors + '\nOnly one decimal place is allowed!';
					ReturnValue = false;
					break;
				}
				else
				{
					DecimalPlaceCount = DecimalPlaceCount + 1;
				}
			}
			else if( ( FieldValue.substring( FieldLength, FieldLength + 1 ) == '$' ||
					FieldValue.substring( FieldLength, FieldLength + 1 ) == '-' ) &&
					FieldLength != 0)
			{
				ReturnedErrors = ReturnedErrors + '\nPlease use a dollar sign ($) as the first character.';
				ReturnValue = false;
				break;
			}
			else if( ( FieldValue.substring( FieldLength, FieldLength + 1 ) == '$' ||
					FieldValue.substring( FieldLength, FieldLength + 1 ) == '-' ) &&
					FieldLength == 0)
			{
			}
			else
			{
				ReturnedErrors = ReturnedErrors + '\nAn invalid character was used.';
				ReturnValue = false;
				break;
			}
		}
	}
	return( ReturnValue );
}


function StripToNumber( FieldValue )
{
	var FieldLength, ReturnValue;
	
	ReturnValue = '';
	
	for( FieldLength = 0; FieldLength < FieldValue.length; FieldLength++ )
	{
		if( ( FieldValue.substring( FieldLength, FieldLength + 1 ) >= '0' &&
			FieldValue.substring( FieldLength, FieldLength + 1 ) <= '9' ) ||
			FieldValue.substring( FieldLength, FieldLength + 1 ) == '.' )
		{
			ReturnValue = ReturnValue + FieldValue.substring( FieldLength, FieldLength + 1 );
		}
	}
	return( ReturnValue );
}

function ReplaceString( StringToSearch, ReplaceChar, ReplaceWithChar )
{
	var FieldLength, ReturnValue;
	
	ReturnValue=''
	for( FieldLength = 0; FieldLength < StringToSearch.length; FieldLength++ )
	{
		if( StringToSearch.substring( FieldLength, FieldLength + 1 ) == ReplaceChar )
		{
			ReturnValue = ReturnValue + ReplaceWithChar;
		}
		else
		{
			ReturnValue = ReturnValue + StringToSearch.substring( FieldLength, FieldLength + 1 );
		}
	}
	return( ReturnValue );
}

function ValidateDateField( FieldValue, FieldDescription, Required, Inline, AllowMonthYear )
{
	var ReturnValue, ReturnedString, DateParts, NewDate;

	ReturnedErrors = '';
	if( FieldValue.value.length <= 0 && Required == true )
	{
		ReturnedErrors = ReturnedErrors + '\nPlease complete the ' + FieldDescription + ' field.';
	}
	else if( FieldValue.value.length > 0 )
	{
		if( isNaN( new Date( FieldValue.value ) ) == true )
		{
			if( AllowMonthYear == true )
			{
				DateParts = FieldValue.value.split( '/' );
				if( DateParts.length == 2 )
				{
					DateParts[0] = parseInt( DateParts[0] );
					DateParts[1] = parseInt( DateParts[1] );
					if( isNaN( new Date( DateParts[0] + '/1/' + DateParts[1] ) ) == true )
					{
						ReturnedErrors = ReturnedErrors + '\nThe ' + FieldDescription + ' field must be in the MM/DD/YYYY format.';
					}
					else
					{
						NewDate = new Date( DateParts[0] + '/1/' + DateParts[1] );
						if( NewDate.getFullYear() <= 1930 )
						{
							NewDate.setYear( NewDate.getFullYear() + 100 )
						}
						FieldValue.value = ( NewDate.getMonth() + 1 ) + '/' + NewDate.getDate() + '/' + NewDate.getFullYear();
					}
				}
				else
				{
					ReturnedErrors = ReturnedErrors + '\nThe ' + FieldDescription + ' field must be in the MM/DD/YYYY format.';
				}
			}
			else
			{
				ReturnedErrors = ReturnedErrors + '\nThe ' + FieldDescription + ' field must be in the MM/DD/YYYY format.';
			}
		}
		else
		{
			NewDate = new Date( FieldValue.value );
			if( NewDate.getFullYear() <= 1930 )
			{
				NewDate.setYear( NewDate.getFullYear() + 100 )
			}
			FieldValue.value = (NewDate.getMonth()+1) + '/' + NewDate.getDate() + '/' + NewDate.getFullYear();
		}
	}
	if( Inline == true && ReturnedErrors != '' )
	{
		alert( ReturnedErrors );
		ReturnedErrors = '';
	}
	return( ReturnValue );
}

function ValidateSelection( FieldValue, FieldDescription, Required, Inline )
{
	var ReturnValue;
	//alert("ValidateSelection called for " + FieldDescription + ". FieldValue=" + FieldValue + "; EmptyValue=" + EmptyValue + "; Required=" + Required + ".");
	if( FieldValue == 0 && Required == true )
	{
		ReturnedErrors = ReturnedErrors + '\nPlease make a selection from the ' + FieldDescription + ' menu.';
	}
	if( FieldValue == 0 && Inline == true && ReturnedErrors != '' )
	{
		alert( ReturnedErrors );
		ReturnedErrors = '';
	}
	return( ReturnValue );
}
