/*
Name:					phoneValidator.js
Author:				Michael L. Parmley (mparmley@isipi.com)
Version:			1.0
Date Created:	20061001
Revised by:		Michael L. Parmley
Date Revised:	20061001
Purpose:			The purpose of this function is to validate telephone numbers as thoroughly as possible.
*/
function validate_phone(formattedObj, hiddenObj) {
	var phone = formattedObj;
	var valid_phone = true;
	var anyNonDigit = /\D/g;
	var number = phone.value.replace(anyNonDigit, "");
	var errorMsg = number + ' is not a valid NANP (North American Numbering Plan) phone number:\n';
	var errors = false;
	var phone_length = number.length;
	if (phone.value == '') {
		valid_phone = false;
	}
	if (valid_phone) {
		anyNonDigit = /\D/g;
		var newString = number.replace(anyNonDigit, "");
		var phone_length = newString.length;
		var firstDig = newString.substring(0,1);
		if (phone_length == 11 && firstDig == '1'){
			newString = newString.substring(1);
			phone_length = 10;
		}
		if (phone_length != 10) {
			valid_phone = false;
			errorMsg += 'A telephone number must be exactly 10 digits including the area code.\n';
			errors = true;
		}
		if (valid_phone) {
			var npa = newString.substring(0,3);
			var nxx = newString.substring(3,6);
			var last4 = newString.substring(6);
			firstDig = newString.substring(0,1);
			var dig2 = newString.substring(1,2);
			var dig3 = newString.substring(2,3);
			var fphone = '(' + npa + ') ' + nxx + ' - ' + last4;
			if (firstDig == '0') {
				valid_phone = false;
				errorMsg += 'NANP area code or npa cannot start with 0 or 1.\n';
				errors = true;
			}
			if (firstDig == '1') {
				valid_phone = false;
				errorMsg += 'NANP area code or npa cannot start with 0 or 1.\n';
				errors = true;
			}
			if (dig2 == '1' && dig3 == '1') {
				valid_phone = false;
				errorMsg += 'NANP area code or npa N11 is reserved.\n';
				errors = true;
			}
			if (dig2 == '9') {
				valid_phone = false;
				errorMsg += 'NANP area code or npa N9N is reserved for future expansion.\n';
				errors = true;
			}
			if (firstDig == '3' && dig2 == '7') {
				valid_phone = false;
				errorMsg += 'NANP area code or npa 37N is reserved for INC.\n';
				errors = true;
			}
			if (firstDig == '9' && dig2 == '6') {
				valid_phone = false;
				errorMsg += 'NANP area code or npa 96N is reserved for INC.\n';
				errors = true;
			}
			if (npa == '555') {
				valid_phone = false;
				errorMsg += 'NANP area code or npa 555 is reserved for directory assistance.\n';
				errors = true;
			}
			if (npa == '950') {
				valid_phone = false;
				errorMsg += 'NANP area code or npa npa 950 is reserved for carrier access.\n';
				errors = true;
			}
			if (npa == '880' || npa == '881' || npa == '882' || npa == '883' || npa == '884' || npa == '885' || npa == '886' || npa == '887' || npa == '889') {
				valid_phone = false;
				errorMsg += 'NANP area code or npa 880-887 and 889 is reserved for future toll-free.\n';
				errors = true;
			}
			if (nxx.substring(0,1) == '0') {
				valid_phone = false;
				errorMsg += 'NANP nxx or exchange cannot start with 0.\n';
				errors = true;
			}
			if (nxx == '555') {
				valid_phone = false;
				errorMsg += 'NANP nxx or exchange 555 is reserved for directory assistance.\n';
				errors = true;
			}
		}
		if (valid_phone){
			phone.value = fphone;
			if (typeof hiddenObj != 'undefined') {
				hiddenObj.value = newString;
			}
			return true;
		}else{
			phone.value = '';
			if (typeof hiddenObj != 'undefined') {
				hiddenObj.value = '';
			}
		}
		if (errors){
			alert(errorMsg);
			phone.focus();
			return false;
		}
	}
}
function digitsOnly(mixedVal) {
	anyNonDigit = /\D/g;
	var digits = mixedVal.replace(anyNonDigit, "");
	return digits;
}