function St(countryId, stateDescr, stateCode) {
	this.countryId = countryId;
	this.stateDescr = stateDescr;
	this.stateCode = stateCode;
}

var ST_US = 1;
var ST_CANADA = 2;

var USSt = new Array();
var CanadaSt = new Array();

USSt[USSt.length] = new St(ST_US, "Select...", "?");
USSt[USSt.length] = new St(ST_US, "Alabama", "AL");
USSt[USSt.length] = new St(ST_US, "Alaska", "AK");
USSt[USSt.length] = new St(ST_US, "American Samoa", "AS");
USSt[USSt.length] = new St(ST_US, "Arizona", "AZ");
USSt[USSt.length] = new St(ST_US, "Arkansas", "AR");
USSt[USSt.length] = new St(ST_US, "California", "CA");
USSt[USSt.length] = new St(ST_US, "Colorado", "CO");
USSt[USSt.length] = new St(ST_US, "Connecticut", "CT");
USSt[USSt.length] = new St(ST_US, "Delaware", "DE");
USSt[USSt.length] = new St(ST_US, "District of Columbia", "DC");
USSt[USSt.length] = new St(ST_US, "Federated States of Micronesia", "FM");
USSt[USSt.length] = new St(ST_US, "Florida", "FL");
USSt[USSt.length] = new St(ST_US, "Georgia", "GA");
USSt[USSt.length] = new St(ST_US, "Guam", "GU");
USSt[USSt.length] = new St(ST_US, "Hawaii", "HI");
USSt[USSt.length] = new St(ST_US, "Idaho", "ID");
USSt[USSt.length] = new St(ST_US, "Illinois", "IL");
USSt[USSt.length] = new St(ST_US, "Indiana", "IN");
USSt[USSt.length] = new St(ST_US, "Iowa", "IA");
USSt[USSt.length] = new St(ST_US, "Kansas", "KS");
USSt[USSt.length] = new St(ST_US, "Kentucky", "KY");
USSt[USSt.length] = new St(ST_US, "Louisiana", "LA");
USSt[USSt.length] = new St(ST_US, "Maine", "ME");
USSt[USSt.length] = new St(ST_US, "Marshall Islands", "MH");
USSt[USSt.length] = new St(ST_US, "Maryland", "MD");
USSt[USSt.length] = new St(ST_US, "Massachusetts", "MA");
USSt[USSt.length] = new St(ST_US, "Michigan", "MI");
USSt[USSt.length] = new St(ST_US, "Minnesota", "MN");
USSt[USSt.length] = new St(ST_US, "Mississippi", "MS");
USSt[USSt.length] = new St(ST_US, "Missouri", "MO");
USSt[USSt.length] = new St(ST_US, "Montana", "MT");
USSt[USSt.length] = new St(ST_US, "Nebraska", "NE");
USSt[USSt.length] = new St(ST_US, "Nevada", "NV");
USSt[USSt.length] = new St(ST_US, "New Hampshire", "NH");
USSt[USSt.length] = new St(ST_US, "New Jersey", "NJ");
USSt[USSt.length] = new St(ST_US, "New Mexico", "NM");
USSt[USSt.length] = new St(ST_US, "New York", "NY");
USSt[USSt.length] = new St(ST_US, "North Carolina", "NC");
USSt[USSt.length] = new St(ST_US, "North Dakota", "ND");
USSt[USSt.length] = new St(ST_US, "Northern Mariana Islands", "MP");
USSt[USSt.length] = new St(ST_US, "Ohio", "OH");
USSt[USSt.length] = new St(ST_US, "Oklahoma", "OK");
USSt[USSt.length] = new St(ST_US, "Oregon", "OR");
USSt[USSt.length] = new St(ST_US, "Palau", "PW");
USSt[USSt.length] = new St(ST_US, "Pennsylvania", "PA");
USSt[USSt.length] = new St(ST_US, "Puerto Rico", "PR");
USSt[USSt.length] = new St(ST_US, "Rhode Island", "RI");
USSt[USSt.length] = new St(ST_US, "South Carolina", "SC");
USSt[USSt.length] = new St(ST_US, "South Dakota", "SD");
USSt[USSt.length] = new St(ST_US, "Tennessee", "TN");
USSt[USSt.length] = new St(ST_US, "Texas", "TX");
USSt[USSt.length] = new St(ST_US, "Utah", "UT");
USSt[USSt.length] = new St(ST_US, "Vermont", "VT");
USSt[USSt.length] = new St(ST_US, "Virgin Islands", "VI");
USSt[USSt.length] = new St(ST_US, "Virginia", "VA");
USSt[USSt.length] = new St(ST_US, "Washington", "WA");
USSt[USSt.length] = new St(ST_US, "West Virginia", "WV");
USSt[USSt.length] = new St(ST_US, "Wisconsin", "WI");
USSt[USSt.length] = new St(ST_US, "Wyoming", "WY");

CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Select...", "?");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Alberta", "AB");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "British Columbia", "BC");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Manitoba", "MB");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "New Brunswick", "NB");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Newfoundland and Labrador", "NL");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Northwest Territories", "NT");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Nova Scotia", "NS");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Nunavut", "NU");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Ontario", "ON");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Prince Edward Island", "PE");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Quebec", "QC");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Saskatchewan", "SK");
CanadaSt[CanadaSt.length] = new St(ST_CANADA, "Yukon", "YT");

function country_onclick() {
	if (document.getElementById("sign_up_form").country[0].checked) {
		fillStateList(USSt);
	} else {
		fillStateList(CanadaSt);
	}
}

function fillStateList(arrCountry) {
	var state = document.getElementById("sign_up_form").state;
	for (var n = state.length - 1; n > -1; n--) {
		state.remove(n);
	}
	for (var n = 0; n < arrCountry.length; n++) {
		var oOpt = document.createElement("option");
		oOpt.value = arrCountry[n].stateCode;
		oOpt.text = arrCountry[n].stateDescr;
		try {
			state.add(oOpt, null);
		} catch (e) {
			state.add(oOpt);
		}
	}
}

function submit_onclick() {
	var frm = document.getElementById("sign_up_form");
	if (frm.type.value == "e-news") {
		return checkMatch(frm.e_mail, frm.e_mail.value, /.+@.+/, "e-mail address", true);
	} else {
		var sPhone = (frm.phone_number.value == null)? "": frm.phone_number.value.replace(/[\+\- \(\)]/g, "");
		if (!checkTextField(frm.first_name, "first name") ||
				!checkTextField(frm.last_name, "last name") ||
				!checkTextField(frm.address1, "address") ||
				!checkTextField(frm.city, "city") ||
				!checkMatch(frm.state, frm.state.value, /^[A-Z]{2}$/, "state", true) ||
				!checkMatch(frm.zip, frm.zip.value, /^[0-9]{5}(\-[0-9]{4})?$/, "zip (format '99999' or '99999-9999')", true) ||
				!checkMatch(frm.phone_number, sPhone, /^[0-9]{7,}$/, "phone number (at least 7 digits)", false) ||
				!checkMatch(frm.e_mail, frm.e_mail.value, /.+@.+/, "e-mail address", true)) {
			return false;
		}
	}
	var state = frm.state.value;
	var bStateOk = frm.country[0].checked &&
			((state == "WI") || (state == "MN") || (state == "MI") || (state == "IL") || (state == "IA"));
	var warning = document.getElementById("warning");
	if (!bStateOk && (warning.style.display == "none")) {
		warning.style.display = "block";
		frm.state.focus();
		return false;
	} else {
		return true;
	}
}

function checkTextField(field, label) {
	if (field.value == "") {
		alert("Please provide " + label + ".");
		field.focus();
		return false;
	}
	return true;
}

function checkMatch(field, val, regExp, label, mandatory) {
	if ((mandatory && ((val == null) || (val == ""))) ||
			((val != null) && (val != "") && (val.match(regExp) == null))) {
		alert("Please provide " + label + ".");
		field.focus();
		return false;
	}
	return true;
}

function forward_onclick() {
	var frm = document.getElementById("forward_form");
	if (!checkMatch(frm.e_mail, frm.e_mail.value, /.+@.+/, "e-mail address", true)) {
		return false;
	}
	if (frm.message.value.length > 512) {
		alert("Message is longer than 512 characters. Please shorten!");
		frm.message.focus();
		return false;
	}
	return true;
}

