<!--

/*
Copyright © Tikit Limited 2004. All rights reserved.

Client-side JavaScript functions for checking the format of :
		digits
		characters
		text (with length checking)
		integer (with range checking)
		float (with range checking)
		date
		datetime
		partial date

	21/09/2001		MC		First version.
	22/09/2001		MC		Allow commas in integers and floats.
	22/09/2001		MC		Change isText() to return true for any non-zero length string (Previously , had to be a 'word').
	14/11/2002		MC		Added isPartialDate() function.
*/

function isDigit(v)
{
	re = new RegExp ("^[0-9]$");
	
	return re.test(String(v));
}

function isAlpha(v)
{
	re = new RegExp ("^[a-zA-Z]$");
	
	return re.test(String(v));
}

function isText(v)
{
	return String(v) != "";
}

function isInteger(v)
{
	re = new RegExp ("^[+-]?[0-9]+$");
	
	v = v.replace(/,/g, '');
	return re.test(String(v));
}

function isFloat(v)
{
	re = new RegExp ("^[+-]?([0-9]+|[0-9]*[.][0-9]+)$");
	
	v = v.replace(/,/g, '');
	return re.test(String(v));
}

function isDate(v)
{
	var a, i;
	re = new RegExp ("^([0-3]?[0-9])[\\\\/.-]([0-1]?[0-9])[\\\\/.-]([1-2][0-9][0-9][0-9])$");
	
	a = re.exec(String(v));
	if (a == null)
		return false;
	i = parseInt(a[1], 10);				//Check day
	if (i < 1 || i > 31)
		return false;
	i = parseInt(a[2], 10);				//Check month
	if (i < 1 || i > 12)
		return false;
	i = parseInt(a[3], 10);				//Check year
	if (i < 1600 || i > 2500)
		return false;
	return true;
}

function isPartialDate(v)
{
	var a, i;
	reMMYYYY = new RegExp ("^([0-1]?[0-9])[\\\\/.-]([1-2][0-9][0-9][0-9])$");
	reYYYY = new RegExp ("^([1-2][0-9][0-9][0-9])$");
	
	if (!isDate(v))
	{
		a = reMMYYYY.exec(String(v));
		if (a != null)
		{
			i = parseInt(a[1], 10);			//Check month
			if (i < 1 || i > 12)
				return false;
			i = parseInt(a[2], 10);			//Check year
			if (i < 1600 || i > 2500)
				return false;
		}
		else
		{
			a = reYYYY.exec(String(v));
			if (a == null)
				return false;
			i = parseInt(a[1], 10);			//Check year
			if (i < 1600 || i > 2500)
				return false;
		}
	}
	return true;
}

function isDateTime(v)
{
	var a, i;
	re = new RegExp ("^([0-3]?[0-9])[\\\\/.-]([0-1]?[0-9])[\\\\/.-][1-2][0-9][0-9][0-9][ ,]+[0-2]?[0-9]:[0-5]?[0-9](:[0-5]?[0-9])?$");
	
	a = re.exec(String(v));
	if (a == null)
		return false;
	i = parseInt(a[1], 10);				//Check day
	if (i < 1 || i > 31)
		return false;
	i = parseInt(a[2], 10);				//Check month
	if (i < 1 || i > 12)
		return false;
	i = parseInt(a[3], 10);				//Check year
	if (i < 1600 || i > 2500)
		return false;
	return true;
}

function isTextInRange(v, minLength, maxLength)
{
	var s;
	
	if (!isText(v))
		return false;
	if (minLength != null)
	{
		s = String(v);
		if (s.length < parseInt(minLength))
			return false;
	}
	if (maxLength != null)
	{
		s = String(v);
		if (s.length > parseInt(maxLength))
			return false;
	}
	return true;
}

function isIntegerInRange(v, minValue, maxValue)
{
	var i;
	
	v = v.replace(/,/g, '');
	if (!isInteger(v))
		return false;
	if (minValue != null)
	{
		i = parseInt(v);
		if (isNaN(i) || i < parseInt(minValue))
			return false;
	}
	if (maxValue != null)
	{
		i = parseInt(i);
		if (i == NaN || i > parseInt(maxValue))
			return false;
	}
	return true;
}

function isFloatInRange(v, minValue, maxValue)
{
	var i;

	v = v.replace(/,/g, '');
	if (!isFloat(v))
		return false;
	if (minValue != null)
	{
		i = parseFloat(v);
		if (isNaN(i) || i < parseFloat(minValue))
			return false;
	}
	if (maxValue != null)
	{
		i = parseFloat(i);
		if (i == NaN || i > parseFloat(maxValue))
			return false;
	}
	return true;
}

//-->

