//#
//#----------------------------------------------------------------------------
//#	validate_state_address
//#
//#	  Parameters:
//#		  stateText: a 2-letter state/province code
//#		  countryCode: 2-letter country code
//#       cleanFlag: flag to return clean state code value
//#                   instead of 0 if valid.
//#
//#	  Purpose:
//#	  	Validates a state/province entry.
//#
//#  	Return:
//#     clean state code value if valid and cleanFlag is not null
//#  		0   if valid
//#     -10 if invalid: stateText not present for US or Canada
//#     -20 if invalid: stateText doesn't match any US state code or name
//#                     (when countryCode = US)
//#     -30 if invalid: stateText doesn't match any CA province code or name
//#                     (when countryCode = CA)
//#     
//#----------------------------------------------------------------------------
function validate_state_address( stateText, countryCode, cleanFlag )
{

	// check countries
	if ( countryCode == "US" )
	{
		//# not present or empty
		if ( !stateText || stateText.length == 0 )
		{
			return( -10 );
		}

		var US_state_codes = "|AL|AK|AZ|AR|CA|CO|CT|DE|DC|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY|";
		var US_state_names = "|ALABAMA|ALASKA|ARIZONA|ARKANSAS|CALIFORNIA|COLORADO|CONNECTICUT|DELAWARE|DISTRICT OF COLUMBIA|FLORIDA|GEORGIA|HAWAII|IDAHO|ILLINOIS|INDIANA|IOWA|KANSAS|KENTUCKY|LOUISIANA|MAINE|MARYLAND|MASSACHUSETTS|MICHIGAN|MINNESOTA|MISSISSIPPI|MISSOURI|MONTANA|NEBRASKA|NEVADA|NEW HAMPSHIRE|NEW JERSEY|NEW MEXICO|NEW YORK|NORTH CAROLINA|NORTH DAKOTA|OHIO|OKLAHOMA|OREGON|PENNSYLVANIA|RHODE ISLAND|SOUTH CAROLINA|SOUTH DAKOTA|TENNESSEE|TEXAS|UTAH|VERMONT|VIRGINIA|WASHINGTON|WEST VIRGINIA|WISCONSIN|WYOMING|";
		var s = new Object();
		s["ALABAMA"] = "AL";
		s["ALASKA"] = "AK";
		s["ARIZONA"] = "AZ";
		s["ARKANSAS"] = "AR";
		s["CALIFORNIA"] = "CA";
		s["COLORADO"] = "CO";
		s["CONNECTICUT"] = "CT";
		s["DELAWARE"] = "DE";
		s["DISTRICT OF COLUMBIA"] = "DC";
		s["FLORIDA"] = "FL";
		s["GEORGIA"] = "GA";
		s["HAWAII"] = "HI";
		s["IDAHO"] = "ID";
		s["ILLINOIS"] = "IL";
		s["INDIANA"] = "IN";
		s["IOWA"] = "IA";
		s["KANSAS"] = "KS";
		s["KENTUCKY"] = "KY";
		s["LOUISIANA"] = "LA";
		s["MAINE"] = "ME";
		s["MARYLAND"] = "MD";
		s["MASSACHUSETTS"] = "MA";
		s["MICHIGAN"] = "MI";
		s["MINNESOTA"] = "MN";
		s["MISSISSIPPI"] = "MS";
		s["MISSOURI"] = "MO";
		s["MONTANA"] = "MT";
		s["NEBRASKA"] = "NE";
		s["NEVADA"] = "NV";
		s["NEW HAMPSHIRE"] = "NH";
		s["NEW JERSEY"] = "NJ";
		s["NEW MEXICO"] = "NM";
		s["NEW YORK"] = "NY";
		s["NORTH CAROLINA"] = "NC";
		s["NORTH DAKOTA"] = "ND";
		s["OHIO"] = "OH";
		s["OKLAHOMA"] = "OK";
		s["OREGON"] = "OR";
		s["PENNSYLVANIA"] = "PA";
		s["RHODE ISLAND"] = "RI";
		s["SOUTH CAROLINA"] = "SC";
		s["SOUTH DAKOTA"] = "SD";
		s["TENNESSEE"] = "TN";
		s["TEXAS"] = "TX";
		s["UTAH"] = "UT";
		s["VERMONT"] = "VT";
		s["VIRGINIA"] = "VA";
		s["WASHINGTON"] = "WA";
		s["WEST VIRGINIA"] = "WV";
		s["WISCONSIN"] = "WI";
		s["WYOMING"] = "WY";

		if ( US_state_codes.indexOf("|" + stateText.toUpperCase() + "|") > -1 )
		{
			if ( cleanFlag == null )
			{
				return(0);
			}
			else
			{
				return( stateText.toUpperCase() );
			}
		}
		else if ( US_state_names.indexOf("|" + stateText.toUpperCase() + "|") > -1 )
		{
			if ( cleanFlag == null )
			{
				return(0);
			}
			else
			{
				// return the state code
				return( s[stateText.toUpperCase()] );
			}
		}
		else 
		{
			return(-20);
		}
	}

	//check Canadian provinces
	else if ( countryCode == "CA" )
	{
		//# not present or empty
		if ( !stateText || stateText.length == 0 )
		{
			return( -10 );
		}
    	var CA_province_codes = "|AB|BC|MB|NB|NF|NT|NS|NU|ON|PE|QC|SK|YT|";
		var CA_province_names = "|ALBERTA|BRITISH COLUMBIA|MANITOBA|NEW BRUNSWICK|NEWFOUNDLAND|NORTHWEST TERRITORIES|NOVA SCOTIA|NUNAVUT TERRITORY|ONTARIO|PRINCE EDWARD ISLAND|QUEBEC|SASKATCHEWAN|YUKON|";
		var p = new Object();
		p["ALBERTA"] = "AB";
		p["BRITISH COLUMBIA"] = "BC";
		p["MANITOBA"] = "MB";
		p["NEW BRUNSWICK"] = "NB";
		p["NEWFOUNDLAND"] = "NF";
		p["NORTHWEST TERRITORIES"] = "NT";
		p["NOVA SCOTIA"] = "NS";
		p["NUNAVUT TERRITORY"] = "NU";
		p["ONTARIO"] = "ON";
		p["PRINCE EDWARD ISLAND"] = "PE";
		p["QUEBEC"] = "QC";
		p["SASKATCHEWAN"] = "SK";
		p["YUKON"] = "YT";

		if ( CA_province_codes.indexOf("|" + stateText.toUpperCase() + "|") > -1 )
		{
			if ( cleanFlag == null )
			{
				return(0);
			}
			else
			{
				return( stateText.toUpperCase() );
			}
		}
		else if ( CA_province_names.indexOf("|" + stateText.toUpperCase() + "|") > -1 )
		{
			if ( cleanFlag == null )
			{
				return(0);
			}
			else
			{
				return( p[stateText.toUpperCase()] );
			}
		}
		else 
		{
			return(-30);
		}
	}
	// Accept any region name for other countries
	else
	{
		if ( cleanFlag == null )
		{
			return(0);
		}
		else
		{
			return( stateText );
		}
	}
}