// Script to Validate a phone number (making sure it is in (###)###-#### format)
// supports ##########, ######-####, ###-#######, (###)#######, ###-###-####,
// (###)###-####, (###)-###-####  (with any spacing) inputs
// and converts to (###)###-#### output.  Error alert and field focus otherwise.
// Recommended to be used onBlur.
//
// Attempted by David Cresswell
// some intern
//
// 1/5/2002
// Updated 6/13/2002 - no longer needs supplementary caller function.
// 7/9/2002 - now accepts periods anywhere dashes would also be accepted

function isDigit(character)
{
	if (character == '0' ||
		character == '1' ||
		character == '2' ||
		character == '3' ||
		character == '4' ||
		character == '5' ||
		character == '6' ||
		character == '7' ||
		character == '8' ||
		character == '9')												
		return true;
	else
		return false;
}	

function errorMessage(badString)
{
	alert("Invalid phone format - \"" + badString + "\".  Please enter in the format (###)###-####.");
}
	
function checkPhone(object)
{
	if (object.value == "")
	{
		return true;
	}

	var newPhone = "";
	for (i=0;i<object.value.length;i++)
	{
		if (object.value.substring(i, i+1) != ' ')
		{
			newPhone = newPhone + object.value.substring(i, i+1);
		}
	}

	// ##########
	if (newPhone.length == 10)
	{
		for(i=0;i<10;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		newPhone = '(' + newPhone.substring(0,3) + ')' + newPhone.substring(3,6) + '-' + newPhone.substring(6,10);
		object.value = newPhone;
		return true;		
	}

	// ###-#######
	else if (newPhone.length == 11 && (newPhone.substring(3,4) == '-' || newPhone.substring(3,4) == '.'))
	{
		for(i=0;i<3;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		if (newPhone.substring(3,4) != '-' && newPhone.substring(3,4) != '.')       
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=4;i<11;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		newPhone = '(' + newPhone.substring(0,3) + ')' + newPhone.substring(4,7) + '-' + newPhone.substring(7,11);
		object.value = newPhone;
		return true;		
	}
	
	// ######-####
	else if (newPhone.length == 11 && (newPhone.substring(6,7) == '-' || newPhone.substring(6,7) == '.'))
	{
		for(i=0;i<6;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		if (newPhone.substring(6,7) != '-' && newPhone.substring(6,7) != '.')       
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=7;i<11;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		newPhone = '(' + newPhone.substring(0,3) + ')' + newPhone.substring(3,6) + '-' + newPhone.substring(7,11);
		object.value = newPhone;
		return true;		
	}
	
	// (###)#######
	else if (newPhone.length == 12 && newPhone.substring(0,1) == '(')
	{
		if (newPhone.substring(0,1) != '(')
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=1;i<4;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		if (newPhone.substring(4,5) != ')')
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=5;i<12;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		newPhone = newPhone.substring(0,8) + '-' + newPhone.substring(8,12);
		object.value = newPhone;
		return true;		
	}

	// ###-###-####
	else if (newPhone.length == 12 && isDigit(newPhone.substring(0,1)))
	{
		for(i=0;i<3;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		if (newPhone.substring(3,4) != '-' && newPhone.substring(3,4) != '.')
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=4;i<7;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		if (newPhone.substring(7,8) != '-' && newPhone.substring(7,8) != '.')
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=8;i<12;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}	
		newPhone = '(' + newPhone.substring(0,3) + ')' + newPhone.substring(4,7) + '-' +  newPhone.substring(8,12);
		object.value = newPhone;
		return true;		
	}	
	// (###)###-####
	else if (newPhone.length == 13)
	{
		if (newPhone.substring(0,1) != '(')
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=1;i<4;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
			object.focus();
				return false;
			}
		}
		if (newPhone.substring(4,5) != ')')
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=5;i<8;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		if (newPhone.substring(8,9) != '-' && newPhone.substring(8,9) != '.')
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=9;i<13;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		newPhone = newPhone.substring(0,8) + '-' + newPhone.substring(9,13);
		object.value = newPhone;
		return true;
	}
	
	// (###)-###-####
	else if (newPhone.length == 14)
	{
		if (newPhone.substring(0,1) != '(')
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=1;i<4;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		if (newPhone.substring(4,5) != ')')
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		if (newPhone.substring(5,6) != '-' && newPhone.substring(5,6) != '.')
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=6;i<9;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}
		if (newPhone.substring(9,10) != '-' && newPhone.substring(9,10) != '.')
		{
			errorMessage(object.value);
			object.focus();
			return false;
		}
		for(i=10;i<14;i++)
		{
			if (!(isDigit(newPhone.substring(i, i+1))))
			{
				errorMessage(object.value);
				object.focus();
				return false;
			}
		}		
		newPhone = newPhone.substring(0,5) + newPhone.substring(6,9) + '-' + newPhone.substring(10,14);
		object.value = newPhone;
		return true;
	}
	errorMessage(object.value);
	object.focus();
	return false;
}	
