function adjustPostalCode(label, len)
{
	if (document.getElementById)
		document.getElementById('postal_code_label').innerHTML = label;
	var postalCode = getFormElement('postal_code');
	postalCode.maxLength = len;
	postalCode.size = len;
}

function countrySelected()
{
	var countryIdx = getFormElement('country').selectedIndex;
	if (countryIdx == 0)
	{
		selectCanada();
	}
	else if (countryIdx == 1)
	{
		selectUSA();
	}
	else if (countryIdx == 2)
	{
		selectOther();
	}
}

function selectCanada()
{
	adjustPostalCode('Postal Code', 7);

	if (document.getElementById)
		document.getElementById('province_label').innerHTML = 'Province';
	var province = getFormElement('province');
	province.options.length = 0;
	addOption(province, 'AB', 'Alberta');
	addOption(province, 'BC', 'British Columbia');
	addOption(province, 'MB', 'Manitoba');
	addOption(province, 'NB', 'New Brunswick');
	addOption(province, 'NF', 'Newfoundland and Labrador');
	addOption(province, 'NT', 'Northwest Territories');
	addOption(province, 'NS', 'Nova Scotia');
	addOption(province, 'NU', 'Nunavut');
	addOption(province, 'ON', 'Ontario');
	addOption(province, 'PE', 'Prince Edward Island');
	addOption(province, 'QC', 'Quebec');
	addOption(province, 'SK', 'Saskatchewan');
	addOption(province, 'YK', 'Yukon');
	province.selectedIndex = 1;
	province.disabled = false;

	hideAndClear('country_other');

	_selectCanada();
}

function selectUSA()
{
	adjustPostalCode('Zip Code', 10);

	if (document.getElementById)
		document.getElementById('province_label').innerHTML = 'State';
	var province = getFormElement('province');
	province.options.length = 0;
	addOption(province, 'AL', 'Alabama');
	addOption(province, 'AK', 'Alaska');
	addOption(province, 'AZ', 'Arizona');
	addOption(province, 'AR', 'Arkansas');
	addOption(province, 'CA', 'California');
	addOption(province, 'CO', 'Colorado');
	addOption(province, 'CT', 'Connecticut');
	addOption(province, 'DE', 'Delaware');
	addOption(province, 'DC', 'District of Columbia');
	addOption(province, 'FL', 'Florida');
	addOption(province, 'GA', 'Georgia');
	addOption(province, 'HI', 'Hawaii');
	addOption(province, 'ID', 'Idaho');
	addOption(province, 'IL', 'Illinois');
	addOption(province, 'IN', 'Indiana');
	addOption(province, 'IA', 'Iowa');
	addOption(province, 'KS', 'Kansas');
	addOption(province, 'KY', 'Kentucky');
	addOption(province, 'LA', 'Louisiana');
	addOption(province, 'ME', 'Maine');
	addOption(province, 'MD', 'Maryland');
	addOption(province, 'MA', 'Massachusetts');
	addOption(province, 'MI', 'Michigan');
	addOption(province, 'MN', 'Minnesota');
	addOption(province, 'MS', 'Mississippi');
	addOption(province, 'MO', 'Missouri');
	addOption(province, 'MT', 'Montana');
	addOption(province, 'NE', 'Nebraska');
	addOption(province, 'NV', 'Nevada');
	addOption(province, 'NH', 'New Hampshire');
	addOption(province, 'NJ', 'New Jersey');
	addOption(province, 'NM', 'New Mexico');
	addOption(province, 'NY', 'New York');
	addOption(province, 'NC', 'North Carolina');
	addOption(province, 'ND', 'North Dakota');
	addOption(province, 'OH', 'Ohio');
	addOption(province, 'OK', 'Oklahoma');
	addOption(province, 'OR', 'Oregon');
	addOption(province, 'PA', 'Pennsylvania');
	addOption(province, 'PR', 'Puerto Rico');
	addOption(province, 'RI', 'Rhode Island');
	addOption(province, 'SC', 'South Carolina');
	addOption(province, 'SD', 'South Dakota');
	addOption(province, 'TN', 'Tennessee');
	addOption(province, 'TX', 'Texas');
	addOption(province, 'UT', 'Utah');
	addOption(province, 'VT', 'Vermont');
	addOption(province, 'VA', 'Virginia');
	addOption(province, 'WA', 'Washington');
	addOption(province, 'WV', 'West Virginia');
	addOption(province, 'WI', 'Wisconsin');
	addOption(province, 'WY', 'Wyoming');
	province.selectedIndex = 48;
	province.disabled = false;

	hideAndClear('country_other');

	_selectUSA();
}

function selectOther()
{
	adjustPostalCode('Postal Code', 12);

	if (document.getElementById)
		document.getElementById('province_label').innerHTML = 'Province';
	province = getFormElement('province');
	province.options.length = 0;
	province.selectedIndex = 0;
	province.disabled = true;

	show('country_other');

	_selectOther();
}

function fixupAddress()
{
	trim('street1');
	trim('street2');
	trim('city');
	trim('country_other');
	fixupPostalCode();
}

function fixupPostalCode()
{
	removeBlanks('postal_code');
	var country = getFormElement('country');
	if (country != null && country.value == "Canada")
		fixupCanadianPostalCode();
}

function fixupCanadianPostalCode()
{
	var pc = getFormElement('postal_code');
	pc.value = pc.value.toUpperCase();
}

function validAddress()
{
	return validAddress(false);
}

function validAddress(onSite)
{
	if (!onSite)
	{
		if (warnIfBlank('street1', 'Street 1'))
			return false;
	}
	if (warnIfBlank('city', 'City'))
		return false;
	if (!validPostalCode())
		return false;
	var country = getFormElement('country');
	if (country != null && country.value == "other")
	{
		if (warnIfBlank('country_other', 'Country'))
			return false;
	}
	return true;
}

function validPostalCode()
{
	var country = getFormElement('country');
	if (country == null)
		return true;
	else if (country.value == "Canada")
		return validCanadianPostalCode();
	else if (country.value == "USA")
		return validAmericanPostalCode();
	else
		return true;
}

function validCanadianPostalCode()
{
	var pc = getFormElement('postal_code');
	var str = pc.value;
	if (isBlank(str))
		return true;
	if (str.length != 6
	    || !isAlpha(str.charAt(0)) || !isDigit(str.charAt(1))
	    || !isAlpha(str.charAt(2)) || !isDigit(str.charAt(3))
	    || !isAlpha(str.charAt(4)) || !isDigit(str.charAt(5)))
	{
		pc.select();
		pc.focus();
		alert('postal code must have format A#A #A#');
		return false;
	}
	return true;
}

function validAmericanPostalCode()
{
	var pc = getFormElement('postal_code');
	var str = pc.value;
	if (isBlank(str))
		return true;
	if (str.length == 5)
	{
		if (isDigit(str.charAt(0)) && isDigit(str.charAt(1))
		    && isDigit(str.charAt(2)) && isDigit(str.charAt(3))
		    && isDigit(str.charAt(4)))
		return true;
	}
	else if (str.length == 10)
	{
		if (isDigit(str.charAt(0)) && isDigit(str.charAt(1))
		    && isDigit(str.charAt(2)) && isDigit(str.charAt(3))
		    && isDigit(str.charAt(4)) && (str.charAt(5) == '-')
		    && isDigit(str.charAt(6)) && isDigit(str.charAt(7))
		    && isDigit(str.charAt(8)) && isDigit(str.charAt(9)))
		return true;
	}
	pc.select();
	pc.focus();
	alert('zip code must have format ##### or #####-####');
	return false;
}
