var reEmpty  = /^\s+$/;
var reEmail  = /^.+\@.+\..+$/;
var reNumber = /^\d+$/;

function trim(str)
{
	var strRet  = "";
	var nLength = str.length;
	var nFirst  = 0;
	var nLast   = nLength - 1;
	
	while( (nFirst < nLength) && (str.charAt(nFirst) <= ' ') )
	{
		nFirst++;
	}
	
	while( (nLast > nFirst) && (str.charAt(nLast) <= ' ') )
	{
		nLast--;
	}
	
	if(nFirst <= nLast)
	{
		strRet = str.substring(nFirst, nLast + 1);
	}
	
	return strRet;
}

function isEmpty(str)
{
	var bRet = true;
	
	if(str != null)
	{
		if(str.length != 0)
		{
			bRet = reEmpty.test(str);
		}
	}
	
	return bRet;
}

function isEmail(str)
{
	var bRet = true;
	
	if(str != null)
	{
		if(str.length != 0)
		{
			bRet = reEmail.test(str);
		}
	}
	
	return bRet;
}

function eraseChars(strSource, strErase, bWhitespace)
{
	var strRet  = "";
	var nIndex  = 0;
	var nLength = strSource.length;
	var ch;
	
	while(nIndex < nLength)
	{
		ch = strSource.charAt(nIndex);
		
		if( (strErase.indexOf(ch) == -1) &&
		    !(bWhitespace && (ch <= ' ') )
		  )
		{
			strRet += ch;
		}
		
		nIndex++
	}
	
	return strRet;
}

function isNumber(str)
{
	var bRet = false;
	
	if(!isEmpty(str))
	{
		bRet = reNumber.test(trim(str));
	}
	
	return bRet;
}

function isZIPCode(str)
{
	var bRet = false;
	
	if(!isEmpty(str))
	{
		bRet = isNumber(str) && (str.length == 5 || str.length == 9);
	}
	
	return bRet;
}

function isUSPhoneNumber(str)
{
	var bRet = false;
	var strTest;
	
	if(!isEmpty(str))
	{
		strTest = eraseChars(str, "-().", true);

		bRet = isNumber(strTest) && (strTest.length == 10);
	}
	
	return bRet;
}

