/**
 * Validate SignIn Name
 */
function validateSignIn(signInName) {

	var containsValidChars = true;
	var testChar;
	
	for (var i = 0; i < signInName.length; i++) {
		testChar = signInName.substring(i,(i+1));
		if (validSiteChars.indexOf(testChar,0) == -1) {
			containsValidChars = false;
		}
	}
	
	if (!containsValidChars) {
		return f_INVALID_CHARACTER;
	}
	
	return f_OK;
}

/**
 * Validate Password
 */
function validatePassword(password) {

	var containsValidChars = true;
	var testChar;
	
	for (var i = 0; i < password.length; i++) {
		testChar = password.substring(i,(i+1));
		if (validSiteChars.indexOf(testChar,0) == -1) {
			containsValidChars = false;
		}
	}
	
	if (!containsValidChars) {
		return f_INVALID_CHARACTER;
	}
	
	return f_OK;
}

/**
 * Validate E-mail address.
 */
function validateEmail(email) {

	var containsValidChars = true;
	var testChar;
	
	for (var i = 0; i < email.length; i++) {
		testChar = email.substring(i,(i+1));
		if (validEmail.indexOf(testChar,0) == -1) {
		
			containsValidChars = false;
		}
	}
	
	if (!containsValidChars) {
		return f_INVALID_CHARACTER;
	}
	
	return f_OK;
}

/**
 * Validate a name.
 */
function validateName(name) {

	var containsValidChars = true;
	var testChar;
	
	for (var i = 0; i < name.length; i++) {
		testChar = name.substring(i,(i+1));
		if (validNameChars.indexOf(testChar,0) == -1) {
			containsValidChars = false;
		}
	}
	
	if (!containsValidChars) {
		return f_INVALID_CHARACTER;
	}
	
	return f_OK;
}

/**
 * Validate an address line.
 */
function validateAddress(address) {

	var containsValidChars = true;
	var testChar;
	
	for (var i = 0; i < address.length; i++) {
		testChar = address.substring(i,(i+1));
		if (validAddressChars.indexOf(testChar,0) == -1) {
			containsValidChars = false;
		}
	}
	
	if (!containsValidChars) {
		return f_INVALID_CHARACTER;
	}
	
	return f_OK;
}

/**
 * Validate the State (US Only currently)
 */
function validateState(state) {

	var containsValidChars = true;
	var testChar;
	
	for (var i = 0; i < state.length; i++) {
		testChar = state.substring(i,(i+1));
		if (validStateChars.indexOf(testChar,0) == -1) {
			containsValidChars = false;
		}
	}
	
	if (!containsValidChars) {
		return f_INVALID_CHARACTER;
	}
	
	if (state.length != 2) {
		return f_INVALID_STATE;
	}
	
	return f_OK;
}

/**
 * Format the Postal Code.
 */
function formatState(state) {

	var formattedState = state.toUpperCase();
	return formattedState;
}

/**
 * Validate the Postal Code (US Only currently)
 */
function validatePostalCode(postalCode) {

	var containsValidChars = true;
	var testChar;
	
	for (var i = 0; i < postalCode.length; i++) {
		testChar = postalCode.substring(i,(i+1));
		if ( isNaN(testChar) ) {
			if (validPostalCodeChars.indexOf(testChar,0) == -1) {
				containsValidChars = false;
			}
		}		
	}
	
	if (!containsValidChars) {
		return f_INVALID_CHARACTER;
	}
	
	var rawPostalCode = getNumericValue(postalCode);
	if (rawPostalCode.length == 5 
	    || rawPostalCode.length == 9) {
		return f_OK;
	}

	return f_INVALID_POSTAL_CODE;  
}

/**
 * Format the Postal Code.
 */
function formatPostalCode(postalCode) {

	var rawPostalCode = getNumericValue(postalCode);
	var zip = rawPostalCode.substring(0,5);
	var four = '';

	if (rawPostalCode.length > 5) {
		four = '-'+rawPostalCode.substring(5,rawPostalCode.length);
	}
	
	var formattedPostalCode = zip+four;
	return formattedPostalCode;
}

/**
 * Validate a Phone Number (Primary, Alt, Fax, Alt)
 * This Function only VALIDATES:
 * 1) That 10 digits were passed in.
 * 2) That a valid character was entered. '(', ')', '-', '\'
 */
function validatePhoneNumber(phone) {
	
	var containsValidChars = true;
	var testChar;
	
	for (var i = 0; i < phone.length; i++) {
		testChar = phone.substring(i,(i+1));
		if ( isNaN(testChar) ) {
			if (validPhoneChars.indexOf(testChar,0) == -1) {
				containsValidChars = false;
			}
		}		
	}
	
	if (!containsValidChars) {
		return f_INVALID_CHARACTER;
	}
	
	var rawPhone = getNumericValue(phone);
	if (rawPhone.length != 10) {
		return f_INVALID_PHONE;
	}
	
	return f_OK;
	
}


/**
 * Format the Phone Number
 */
function formatPhoneNumber(phone) {

	var rawPhone = getNumericValue(phone);
	var areaCode = rawPhone.substring(0,3);
	var prefix = rawPhone.substring(3,6);
	var suffix = rawPhone.substring(6,10);
	
	var formattedPhone = areaCode+'\\'+prefix+'-'+suffix;
	return formattedPhone;
}
 

/**
 * Validate phone extension.
 */
function validateExtension(extension) {

	var containsValidChars = true;
	var testChar;
	
	for (var i = 0; i < extension.length; i++) {
		testChar = extension.substring(i,(i+1));
		if (validExtensionChars.indexOf(testChar,0) == -1) {
			containsValidChars = false;
		}
	}
	
	if (!containsValidChars) {
		return f_INVALID_CHARACTER;
	}
	
	return f_OK;
}



function emailCheck(emailStr) {
	
	var emailPat=/(.+)@(.+)/;
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);
	if (matchArray==null) {
		alert("Email address seems incorrect (check @ and .'s)");
		return false;
	}
	
	var user=matchArray[1]
	var domain=matchArray[2]

	if (user.match(userPat)==null) {
        alert("The email username doesn't seem to be valid.");
        return false;
	}

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				alert("Email Destination IP address is invalid!");
				return false;
			}
		}
	//return true;
	}

	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		alert("The email domain name doesn't seem to be valid.");
		return false;
	}

	var atomPat=new RegExp(atom,"g");
	var domArr=domain.match(atomPat);
	var len=domArr.length;
	if (domArr[domArr.length-1].length<2 
	    || domArr[domArr.length-1].length>3) {
		alert("The email address must end in a three-letter domain, or two letter country.");
		return false;
	}

	if (len<2) {
		var errStr="This email address is missing a hostname!";
		alert(errStr);
		return false;
	}

	return true;
}