var VALID = 0;
var EMPTY_STRING = 1;
var EXTRA_CHARACTERS = 2;
var INVALID_FORMAT = 3;
var TOO_SMALL = 4;
var TOO_LARGE = 5;
var INVALID_DATE = 6;

function ValidateTicker(strIn)
{
	if (strIn == "")
		return EMPTY_STRING;
	if (strIn.search(/^[A-Za-z_\.=]{1,10}$/) != 0)
		return INVALID_FORMAT;
	return VALID;
}

function ValidateInt(strIn, minimumValue, maximumValue)
{
	if (strIn == "")
		return EMPTY_STRING;
	var intVal = parseInt(strIn);
	if (isNaN(intVal))
		return INVALID_FORMAT;
	if (intVal.toString() != strIn)
		return EXTRA_CHARACTERS;
	if (intVal < minimumValue)
		return TOO_SMALL;
	if (intVal > maximumValue)
		return TOO_LARGE;

	return VALID;
}

function ValidateFloat(strIn, minimumValue, maximumValue)
{
	if (strIn == "")
		return EMPTY_STRING;

	var floatVal = parseFloat(strIn);
	if (isNaN(floatVal))
		return INVALID_FORMAT;
	if (strIn - floatVal != 0)
		return EXTRA_CHARACTERS;
	if (floatVal < minimumValue)
		return TOO_SMALL;
	if (floatVal > maximumValue)
		return TOO_LARGE;

	return VALID;
}

function ValidateNameChars(strIn)
{
	// allowed characters: a-z, A-Z, 0-9, space, ~!@#$%^*()-_=+'":;.,/?
	var regexName = /^[\w~ !@#\$%\^\*\(\)\-_=\+'":;\,\.\?\/]*$/;
	return regexName.test(strIn);
}

function ValidateDate(strIn, minimumDate, maximumDate)
{
	if (strIn == "")
		return EMPTY_STRING;
	var theDate = GetDateFromEntry(strIn);
	if ((typeof theDate) != "object")
		return theDate;
	if (theDate < minimumDate)
		return TOO_SMALL;
	if (theDate > maximumDate)
		return TOO_LARGE;

	return VALID;
}

function GetDateFromEntry(strIn)
{
	var DateArray = strIn.match(/^(\d{1,2})\/(\d{1,2})\/(\d{2}$|\d{4}$)/);
	if (DateArray == null)
		return INVALID_FORMAT;
	var theYear;
	theYear = GetFullYearFromEntry(DateArray[3]);
	var theDate = new Date(theYear, DateArray[1] - 1, DateArray[2]);
	if ((theDate.getFullYear() != theYear) ||
	 (theDate.getMonth() != DateArray[1] - 1) ||
	 (theDate.getDate() != DateArray[2]))
		return INVALID_DATE;

	return theDate;
}

function GetFullYearFromEntry(intIn)
{
	var intYear = parseInt(intIn);
	if (isNaN(intYear))
		return;
	var Y2K_Cutoff_Year = 20;	// 1920..2019
	if (intYear < Y2K_Cutoff_Year)
		theYear = intYear + 2000;
	else if (intYear < 100)
		theYear = intYear + 1900;
	else
		theYear = intYear;
	return theYear;
}

function FocusAndReturnFalse(formElement)
{
	formElement.focus();
	formElement.select();
	return false;
}
