/* <%--

//
//	File: 		validate/local.js
//	Purpose:	Provide state and zipcode JavaScript validation
//						operations
//  Usage:    This file contains functions for validating text fields
//            that contain state and zipcode using JavaScript.
//            See the file header.js for details on the validation
//						process.

// ------ PUBLIC FUNCTION INDEX
// VAL_IsValidState( str )
// VAL_IsValidZip( str )

--%> */

// ------ GLOBAL PREFERENCES

//-------------------------------------------------------------------
//

// Arrays of 54 States in the U.S.

stateAbreviationsArray = new Array (
	"AE", "AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FL", "FL", "GA",
	"GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD",
	"MA", "MI", "MN", "MS", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM",
	"NY", "NC", "ND", "OH", "OK", "OR", "PA", "PR", "RI", "SC", "SD",
	"TN", "TX", "UT", "VT", "VA", "VI", "WA", "WV", "WI", "WY");

stateNamesArray = new Array (
	"ARMED FORCES", "ALABAMA", "ALASKA", "ARIZONA", "ARKANSAS", "CALIFORNIA",
	"COLORADO", "CONNECTICUT", "DELAWARE", "DISTRICT OF COLUMBIA", "FLA",
	"FLORIDA", "GEORGIA", "GUAM", "HAWAII", "IDAHO", "ILLINOIS",
	"INDIANA", "IOWA", "KANSAS", "KENTUCKY", "LOUISIANA", "MAINE",
	"MARYLAND", "MASSACHUSETTS", "MICHIGAN", "MINNESOTA", "MISS", "MISSISSIPPI",
	"MISSOURI", "MONTANA", "NEBRASKA", "NEVEDA", "NEW HAMPSHIRE",
	"NEW JERSEY", "NEW MEXICO", "NEW YORK", "NORTH CAROLINA", "NORTH DAKOTA",
	"OHIO", "OKLAHOMA", "OREGON", "PENNSYLVANIA", "PUERTO RICO", "RHODE	ISLAND",
	"SOUTH CAROLINA", "SOUTH DAKOTA", "TENNESSEE", "TEXAS",	"UTAH", "VERMONT",
	"VIRGINIA", "VIRGIN ISLANDS", "WASHINGTON", "WEST VIRGINIA", "WISCONSIN", "WYOMING");

// Returns true and changes the value to the 2 character state abreviation in upper
// case if the value of the field passed in is a valid state in the U.S.
// State must be one of the 54 state names or state abreviations in the U.S.

function VAL_IsValidState(
	field  //state field of form to  validate
	)
{
	var state = VAL_StripWhitespace(field.value).toUpperCase();
	if (!VAL_IsBlank( state ))
	{
		if (state.length == 2)
			return VAL_LookupState (field, stateAbreviationsArray);
		else
			return VAL_LookupState (field, stateNamesArray);
	}

	return true;
}

canadianProvinceAbreviationsArray = new Array(
						"AB","BC",
						"MB","NB",
						"NL","NT",
						"NS","NU",
						"ON","PE",
						"QC","SK",
						"YT");
						
canadianProvinceArray = new Array (																		
				"ALBERTA","BRITISH COLUMBIA",
				"MANITOBA","NEW BRUNSWICK",
				"NEWFOUNDLAND AND LABRADOR","NORTHWEST TERRITORIES",
				"NOVA SCOTIA","NUNAVUT",
				"ONTARIO","PRINCE EDWARD ISLAND",
				"QUEBEC","SASKATCHEWAN",
				"YUKON");

canadianProvinceAliasArray = new Array (																		
				"","",
				"","",
				"NF","",
				"","",
				"","",
				"PQ","",
				"");

function VAL_IsValidCanadianProvince(provinceField)
{
	var province = provinceField.value.toUpperCase();
	var retVal = true;
	if(!VAL_IsBlank( province ))
	{
		if (province.length == 2) {
			retVal = VAL_LookupCanadianProvince (provinceField, canadianProvinceAbreviationsArray);
		} else {
			retVal = VAL_LookupCanadianProvince (provinceField, canadianProvinceArray);	
		}
		if (!retVal) {
			retVal = VAL_LookupCanadianProvince (provinceField, canadianProvinceAliasArray);	
		}
	}
	return retVal;
}

function VAL_LookupArraySetField (field, inArrayToFind, inArrayToGet, setFlag)
{
	var value = VAL_StripWhitespace(field.value).toUpperCase();
	for (var i = 0; i < inArrayToFind.length; i++)
	{
		if (value == inArrayToFind [i])
		{
			if ( setFlag ) {
				//field.value = inArrayToGet [i];
				FV_FormValueSet( field, inArrayToGet [i] );
			}
			return true;
		}
	}
	return false;
}

function VAL_LookupCanadianProvince (field, inArray)
{
	return VAL_LookupArraySetField ( field, inArray, canadianProvinceAbreviationsArray, true);
}

function VAL_LookupState (field, inArray)
{
	return VAL_LookupArraySetField ( field, inArray, stateAbreviationsArray, true);
}


function VAL_IsValidCanadianPostalCodeLetter( letters )
{
	var retVal = true;
	letter = letters.toUpperCase();
	if( (!(VAL_IsLetter(letter))) || letter == 'D' || letter == 'F' || letter == 'I' || letter == 'O' ||  letter == 'Q')
	{
		retVal = false;
	}
	return retVal;
}


//A9A9A9
//Must not start with W, Z
//Under no circumstances are any of the letters supposed to be D, F, I, O, or Q
				 
function VAL_IsValidCanadianPostalCode( postalCode )
{
	
	postalCode = VAL_StripWhitespace(postalCode);
	retVal = true;
	if (!VAL_IsBlank( postalCode ))
	{
		var code = postalCode.toString().toUpperCase();
		var stripChar = "-";
		code = VAL_StripCharsInBag (code, stripChar);
		if(code.length != 6)
			retVal = false;
		else{
			//check first char
			if(code.charAt(0) == 'W' || code.charAt(0) == 'Z' || !VAL_IsValidCanadianPostalCodeLetter(code.charAt(0)))
				retVal = false;
			
			//check second
			if(!VAL_IsDigit(code.charAt(1)))
				retVal = false;
		
			//check third
			if(!VAL_IsValidCanadianPostalCodeLetter(code.charAt(2)))
				retVal = false;
			
			//check fourth
			if(!VAL_IsDigit(code.charAt(3)))
				retVal = false;
			
			//check fifth
			if(!VAL_IsValidCanadianPostalCodeLetter(code.charAt(4)))
				retVal = false;
			
			//check sixth
			if(!VAL_IsDigit(code.charAt(5)))
				retVal = false;
		}
	}
	return retVal;
	
}

//assumes that there is a valid postal code and province

function VAL_IsValidCanadianPostalCodeForProvince( postalCode, province )
{
	var retVal = true;
	//we assume we have a valid postal code so it should not be blank
	postalCode = VAL_StripWhitespace(postalCode).toUpperCase();
	province = province.toUpperCase();
	
	var first = postalCode.charAt(0);
	if(first == "A"){
		retVal = province == "NL";}
	else{ if (first == "B"){
		retVal = province == "NS";}
	else{ if (first == "C"){
		retVal = province == "PE";}
	else{ if (first == "E"){
		retVal = province == "NB";}
	else{ if (first == "G" || first == "H" || first == "J"){
		retVal = province == "QC";}
	else{ if (first == "K" || first == "L" || first == "M"  || first == "N"  || first == "P"){
		retVal = province == "ON";}
	else{ if (first == "R"){
		retVal = province == "MB";}
	else{ if (first == "S"){
		retVal = province == "SK";}
	else{ if (first == "T"){
		retVal = province == "AB";}
	else{ if (first == "V"){
		retVal = province == "BC";}
	else{ if (first == "X"){
		retVal = ( (province == "NT") || (province == "NU"));}
	else{ if (first == "Y"){
		retVal = province == "YT";}	
	}}}}}}}}}}}
	
	return retVal;
}


// Returns true if the string passed in is a valid zipcode.
// Zipcode must be of the form nnnnn or nnnnn-nnnn or nnnnnnnnn

function VAL_IsValidZip(
	zipcode //zipcode value of the form
	)
{
	var zip = VAL_StripWhitespace(zipcode.toString());
	var stripChar = "-";

	if (!VAL_IsBlank( zip ))
	{
		if ((zip.length != 5) && (zip.length != 9) && (zip.length != 10))
			return false;

		if (zip.length == 10)
		{
			if (zip.indexOf (stripChar) != 5)
				return false;
			else
				zip = VAL_StripCharsInBag (zip, stripChar);
		}

		for (var i = 0; i < zip.length; i++)
		{
			// Check that current character is number.
			var c = zip.charAt(i);
			if (!VAL_IsDigit(c))
				return false;
		}
	}
	return true;
}

function isValidStateForCountry(countryValue, stateField)
{
	var retVal = true;
	countryValue = countryValue.toUpperCase();
		if(countryValue == "US" || countryValue == "")
		{
			retVal = VAL_IsValidState(stateField);
		}
		
		if(countryValue == "CA")
		{
			retVal = VAL_IsValidCanadianProvince(stateField);
		}
	return retVal;
}

function isValidStateForCountryField(countryField, stateField)
{
	
	return isValidStateForCountry(FV_FormValueGet(countryField), stateField);
}

function isValidZipForCountry(countryValue, zipField)
{
	var retVal = true;
	countryValue = countryValue.toUpperCase();
	if(countryValue == "US" || countryValue == "")
	{
		retVal = VAL_IsValidZip(FV_FormValueGet(zipField));
	}

	if(countryValue == "CA")
	{
		retVal = VAL_IsValidCanadianPostalCode(FV_FormValueGet(zipField));
	}
	return retVal;
}

function isValidZipForCountryField(countryField, zipField)
{
	return isValidZipForCountry(FV_FormValueGet(countryField), zipField);
}

function isValidPhoneNumberWithAreaCode(phoneField)
{
	retVal = false;
	var phoneNumber = FV_FormValueGet(phoneField);
	phoneNumber = VAL_StripNonAlphaNumeric(phoneNumber);
	if(phoneNumber.length == 10 || (phoneNumber.length == 11 && phoneNumber.charAt(0) == "1"))
		retVal = true;
	return retVal;
}

