/****************************************************************************
**	file:		zipPhoneEmail.js
**	date:		03082001
**
**	author:		Rob Barlow
**  Modified by:Kal Hadi (created function for valid phone number..)
**
**	description
**	===========
**	Provides validation routines for zip codes and phone numbers.
**
****************************************************************************
**	REVISION HISTORY
****************************************************************************
**
**	date		author			description
**	-----------	---------------	--------------------------------------------
**
**
****************************************************************************/

/*
checkZipCode(szZip)
szZip should be a zip code or 5 or 9 characters (no "-"). Returns true
if a good zip code (all numbers), false otherwise.
*/
function checkZipCode(szZip)
{
	var VALID_CHARS = "0123456789";

	if ((szZip.length != 5) && (szZip.length != 9))
		return false;

	// make sure only valid characters (numerals) are used
	for (var i = 0; i < szZip.length; i++)
		if (VALID_CHARS.indexOf(szZip.charAt(i)) == -1)
			return false;

	return true;
}

/*
checkDomesticPhone(szPhone)
szPhone should be a valid US/CA phone with or without area code (so
7 or 10 characters (no -, (, ), etc.). Returns true if a good phone
(all numbers), false otherwise.
*/
function checkAreaCode(szCode)
{
	var VALID_CHARS = "0123456789";

	if ((szCode.length != 3))
		return false;

	// make sure only valid characters (numerals) are used
	for (var i = 0; i < szCode.length; i++)
		if (VALID_CHARS.indexOf(szCode.charAt(i)) == -1)
			return false;

	return true;
}

function checkPhoneOne(szPhoneOne)
{
	var VALID_CHARS = "0123456789";

	if ((szPhoneOne.length != 3))
		return false;

	// make sure only valid characters (numerals) are used
	for (var i = 0; i < szPhoneOne.length; i++)
		if (VALID_CHARS.indexOf(szPhoneOne.charAt(i)) == -1)
			return false;

	return true;
}

function checkPhoneTwo(szPhoneTwo)
{
	var VALID_CHARS = "0123456789";

	if ((szPhoneTwo.length != 4))
		return false;

	// make sure only valid characters (numerals) are used
	for (var i = 0; i < szPhoneTwo.length; i++)
		if (VALID_CHARS.indexOf(szPhoneTwo.charAt(i)) == -1)
			return false;

	return true;
}
/*

checkEmail(szEmail)
Checks that an email address is valid (to an extent)
*/
function checkEmail(szEmail)
{
	var ILLEGAL_CHARS = " <>()[]\\,:;/\"";
	var nLen    = szEmail.length,
		nAtPos  = szEmail.indexOf("@"),
		nAtLast = szEmail.lastIndexOf("@"),
		nPrPos  = szEmail.indexOf("."),
		nLastPr = szEmail.lastIndexOf("."),
		nDblPos = szEmail.indexOf("..");

	// check the "@" position and that only one
	if ((nAtPos == -1) || (nAtPos == 0) || (nAtPos == (nLen - 1)) || (nAtPos > 63))
		return false;
	if (nAtLast != nAtPos)
		return false;
	if ((szEmail.charAt(nAtPos - 1) == ".") || (szEmail.charAt(nAtPos + 1) == "."))
		return false;

	// check position of period(s), i.e. .us, .com (.ARPA?)
	if ((nLastPr != nLen - 3) && (nLastPr != nLen - 4))
		return false;

	// check that all characters are legal
	// NOTE: THERE ARE ACTUALLY SOME COMPLEX PARSING
	// RULES FOR QUOTED STRINGS AND ESCAPES FOR SMTP, BUT
	// THEY ARE NOT IMPLEMENTED HERE.
	for (var i = 0; i < szEmail.length; i++)
		if (ILLEGAL_CHARS.indexOf(szEmail.charAt(i))!= -1)
			return false;

	return true;
}
