function trim(str)
{
	while('' + str.charAt(str.length-1) == ' ')
		str = str.substring(0, str.length-1);
	while('' + str.charAt(0) == ' ')
		str = str.substring(1, str.length);
	return str;
}

// isIntegerInRange (STRING s, INTEGER a, INTEGER b)
function isIntegerInRange (s,a,b)
{
	if (isEmpty(s))
		if (isIntegerInRange.arguments.length == 1)
			return false;
		else
			return (isIntegerInRange.arguments[1] == true);

	// Catch non-integer strings to avoid creating a NaN below,
	// which isn't available on JavaScript 1.0 for Windows.
	if (!isInteger(s,false))
		return false;

	// Now, explicitly change the type to integer via parseInt
	// so that the comparison code below will work both on
	// JavaScript 1.2 (which typechecks in equality comparisons)
	// and JavaScript 1.1 and before (which doesn't).
	var num = parseInt (s);
	return ((num >= a) && (num <= b));
}

function isInteger (s)
{
	var i;

	if (isEmpty(s))
		if (isInteger.arguments.length == 1)
			return 0;
		else
			return (isInteger.arguments[1] == true);

	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);

		if (!isDigit(c))
			return false;
	}

	return true;
}

function isEmpty(s)
{
	return ((s == null) || (s.length == 0));
}

function isDigit (c)
{
	return ((c >= "0") && (c <= "9"));
}

function isValidEmail(str)
{
	if (str == null)
		return false;

	var s = trim(str);

	if (s.length == 0)
		return false;

	var at = s.indexOf('@');

	if (s.match(/\s/))
		return false;

	if (at < 1)
		return false;

	var lastat = s.lastIndexOf('@');

	if (lastat != at)
		return false;

	if (lastat == s.length - 1)
		return false;

	var domain = s.substring(at + 1);
	var dot = domain.lastIndexOf('.');

	if (dot < 0)
		return false;

	if (dot == domain.length - 1)
		return false;

	return true;
}
