// PURPOSE:
//		This function validates a domestic Phone number.
// WHAT IT DOES:
//		verifies the field is populated and numeric
//		alerts the user to the error, sets focus and returns
// PARAMETERS:
//		field is the HTML field
// RETURNS:
//		true || false
function checkPhone( field )
{
	// the valid format is "(xxx) xxx-xxxx"
	//   to make things easier for the user, I'm going to edit like this
	//	read it like standard syntax format:
	//  [(]xxx[)][space]xxx[-]xxxx
	// 
	//  that means the shortest valid formatted value is: xxxxxxxxxx
	//  the longest valid formatted value is: (xxx) xxx-xxxx

	var oldValue = field.value

	if (field.value.length == 0)
	{
		return true
	}

	if ( isNumber(field.value) )
	{
		// Must be precisely 10 digits if it's numeric
		if (field.value.length != 10)
		{
			setError(field, oldValue)
			return false
		}
		
		field.value = "(" + field.value.substring(0,3) + ") "
				 + field.value.substring(3,6) + "-"
				 + field.value.substring(6,10)

		return true
	}
	else
	{
		// here we go...
		var newValue = "("
		var leftParen = false
		var rightParen = false
		var digitCnt = 0

		for (var i=0; i < field.value.length; i++)
		{
			if (field.value.substring(i,i+1) == "(" )
			{
				if ( leftParen || (i != 0) )
				{
					setError(field, oldValue)
					return false
				}
				else
				{
					leftParen = true
				}
			}
			else if (field.value.substring(i, i+1) == ")" )
			{
				if ( rightParen || (i != 4)  || (! leftParen) )
				{
					setError(field, oldValue)
					return false
				}
				else
				{
					rightParen = true
				}
			}
			else if ( (field.value.substring(i, i+1) == "-")
			          || (field.value.substring(i, i+1) == " ") )
			{
				// okay - I'll strip out the white space and dashes
			}
			else
			{
				//okay - make sure it's numeric 
				if ( ! (isNumber(field.value.substring(i, i+1))) )
				{
					setError(field, oldValue)
					return false
				}

				digitCnt++

				if (digitCnt > 14)
				{
					setError(field, oldValue)
					return false
				}
				else if (digitCnt == 7)
				{
					newValue += "-"
				}

				newValue += field.value.substring(i, i+1)

				if (digitCnt == 3)
				{
					newValue += ") "
				}
			}
		}

		if (digitCnt < 10)
		{
			setError(field, oldValue)
			return false
		}

		field.value = newValue

		return true
	}
}

// PURPOSE:
//		This function validates a domestic Phone number with an optional 4 digit extension.
// WHAT IT DOES:
//		verifies the field is populated and numeric
//		alerts the user to the error, sets focus and returns
// PARAMETERS:
//		field is the HTML field
// RETURNS:
//		true || false
function checkPhoneExt( field )
{
	// the valid format is "(xxx) xxx-xxxx xxxx"
	//   to make things easier for the user, I'm going to edit like this
	//	read it like standard syntax format:
	//  [(]]xxx[)][space]xxx[-]xxxx[ ][x][x][x][x]
	// 
	//  that means the shortest valid formatted value is: xxxxxxxxxx
	//  the longest valid formatted value is: (xxx) xxx-xxxx xxxx

	var oldValue = field.value

	if (field.value.length == 0)
	{
		return true
	}

	if (isNumber(field.value) )
	{
		// Must be between 10 and 14 digits if it's numeric
		if (field.value.length < 10 || field.value.length > 14)
		{
			setErrorExt(field, oldValue)
			return false
		}
		
		field.value = "(" + field.value.substring(0,3) + ") "
				 + field.value.substring(3,6) + "-"
				 + field.value.substring(6,10) + " "
				 + field.value.substring(10, field.value.length)

		return true
	}
	else
	{
		// here we go...
		var newValue = "("
		var leftParen = false
		var rightParen = false
		var digitCnt = 0

		for (var i=0; i < field.value.length; i++)
		{
			if (field.value.substring(i,i+1) == "(" )
			{
				if ( leftParen || (i != 0) )
				{
					setErrorExt(field, oldValue)
					return false
				}
				else
				{
					leftParen = true
				}
			}
			else if (field.value.substring(i, i+1) == ")" )
			{
				if ( rightParen || (i != 4)  || (! leftParen) )
				{
					setErrorExt(field, oldValue)
					return false
				}
				else
				{
					rightParen = true
				}
			}
			else if ( (field.value.substring(i, i+1) == "-")
			          || (field.value.substring(i, i+1) == " ") )
			{
				// okay - I'll strip out the white space and dashes
			}
			else
			{
				//okay - make sure it's numeric 
				if ( ! (isNumber(field.value.substring(i, i+1))) )
				{
					setErrorExt(field, oldValue)
					return false
				}

				digitCnt++

				if (digitCnt > 14)
				{
					setErrorExt(field, oldValue)
					return false
				}
				else if (digitCnt == 7)
				{
					newValue += "-"
				}

				newValue += field.value.substring(i, i+1)

				if (digitCnt == 3)
				{
					newValue += ") "
				}
				else if (digitCnt == 10)
				{
					newValue += " "
				}
			}
		}

		if (digitCnt < 10)
		{
			setErrorExt(field, oldValue)
			return false
		}

		field.value = newValue

		return true
	}
}

function setError( field, oldValue)
{
	field.value = oldValue
	field.focus()
	alert("Phone Numbers must be entered in one of the following formats\n \t(999) 999-9999 \n or by entering the numbers only")
	return false
}

function setErrorExt( field, oldValue)
{
	field.value = oldValue
	field.focus()
	alert("Phone Numbers must be entered in one of the following formats\n \t(999) 999-9999 9999\n or by entering the numbers only")
	return false
}
