// Use CountryJSGen.java to generate these 2 variables
var countries = ['Afghanistan','Aland Islands','Albania','Algeria','American Samoa','Andorra','Angola','Anguilla','Antarctica','Antigua and Barbuda','Argentina','Armenia','Aruba','Australia','Austria','Azerbaijan','Bahamas','Bahrain','Bangladesh','Barbados','Belarus','Belgium','Belize','Benin','Bermuda','Bhutan','Bolivia','Bosnia and Herzegovina','Botswana','Bouvet Island','Brazil','British Indian Ocean Territory','British Virgin Islands','Brunei','Bulgaria','Burkina Faso','Burundi','Cambodia','Cameroon','Canada','Cape Verde','Cayman Islands','Central African Republic','Chad','Chile','China','Christmas Island','Cocos Islands','Colombia','Comoros','Congo - Brazzaville','Congo - Kinshasa','Cook Islands','Costa Rica','Croatia','Cuba','Cyprus','Czech Republic','Denmark','Djibouti','Dominica','Dominican Republic','East Timor','Ecuador','Egypt','El Salvador','Equatorial Guinea','Eritrea','Estonia','Ethiopia','Falkland Islands','Faroe Islands','Fiji','Finland','France','French Guiana','French Polynesia','French Southern Territories','Gabon','Gambia','Georgia','Germany','Ghana','Gibraltar','Greece','Greenland','Grenada','Guadeloupe','Guam','Guatemala','Guernsey','Guinea','Guinea-Bissau','Guyana','Haiti','Heard Island and McDonald Islands','Honduras','Hong Kong','Hungary','Iceland','India','Indonesia','Iran','Iraq','Ireland','Isle of Man','Israel','Italy','Ivory Coast','Jamaica','Japan','Jersey','Jordan','Kazakhstan','Kenya','Kiribati','Kosovo','Kuwait','Kyrgyzstan','Laos','Latvia','Lebanon','Lesotho','Liberia','Libya','Liechtenstein','Lithuania','Luxembourg','Macao','Macedonia','Madagascar','Malawi','Malaysia','Maldives','Mali','Malta','Marshall Islands','Martinique','Mauritania','Mauritius','Mayotte','Mexico','Micronesia','Moldova','Monaco','Mongolia','Montenegro','Montserrat','Morocco','Mozambique','Myanmar','Namibia','Nauru','Nepal','Netherlands','Netherlands Antilles','New Caledonia','New Zealand','Nicaragua','Niger','Nigeria','Niue','Norfolk Island','North Korea','Northern Mariana Islands','Norway','Oman','Pakistan','Palau','Palestinian Territory','Panama','Papua New Guinea','Paraguay','Peru','Philippines','Pitcairn','Poland','Portugal','Puerto Rico','Qatar','Reunion','Romania','Russia','Rwanda','Saint Barthélemy','Saint Helena','Saint Kitts and Nevis','Saint Lucia','Saint Martin','Saint Pierre and Miquelon','Saint Vincent and the Grenadines','Samoa','San Marino','Sao Tome and Principe','Saudi Arabia','Senegal','Serbia','Seychelles','Sierra Leone','Singapore','Slovakia','Slovenia','Solomon Islands','Somalia','South Africa','South Georgia and the South Sandwich Islands','South Korea','Spain','Sri Lanka','Sudan','Suriname','Svalbard and Jan Mayen','Swaziland','Sweden','Switzerland','Syria','Taiwan','Tajikistan','Tanzania','Thailand','Togo','Tokelau','Tonga','Trinidad and Tobago','Tunisia','Turkey','Turkmenistan','Turks and Caicos Islands','Tuvalu','U.S. Virgin Islands','Uganda','Ukraine','United Arab Emirates','United Kingdom','United States','United States Minor Outlying Islands','Uruguay','Uzbekistan','Vanuatu','Vatican','Venezuela','Vietnam','Wallis and Futuna','Western Sahara','Yemen','Zambia','Zimbabwe'];
var states = {
'Canada':['','Alberta','British Columbia','Manitoba','New Brunswick','Newfoundland and Labrador','Northwest Territories','Nova Scotia','Nunavut','Ontario','Prince Edward Island','Quebec','Saskatchewan','Yukon'],
'India':['','Andaman and Nicobar Islands','Andhra Pradesh','Arunāchal Pradesh','Assam','Bengal','Bihār','Chandīgarh','Chhattisgarh','Daman and Diu','Delhi','Dādra and Nagar Haveli','Goa','Gujarāt','Haryāna','Himāchal Pradesh','Jharkhand','Karnātaka','Kashmir','Kerala','Laccadives','Madhya Pradesh','Mahārāshtra','Manipur','Meghālaya','Mizoram','Nāgāland','Orissa','Pondicherry','Punjab','Rājasthān','Sikkim','Tamil Nādu','Tripura','Uttar Pradesh','Uttarakhand'],
'Mexico':['','Aguascalientes','Baja California','Baja California Sur','Campeche','Chiapas','Chihuahua','Coahuila','Colima','Durango','Guanajuato','Guerrero','Hidalgo','Jalisco','Michoacán','Morelos','México','Nayarit','Nuevo León','Oaxaca','Puebla','Querétaro','Quintana Roo','San Luis Potosí','Sinaloa','Sonora','Tabasco','Tamaulipas','The Federal District','Tlaxcala','Veracruz-Llave','Yucatán','Zacatecas'],
'United States':['','AK','AL','AR','AZ','CA','CO','CT','DC','DE','FL','GA','HI','IA','ID','IL','IN','KS','KY','LA','MA','MD','ME','MI','MN','MO','MS','MT','NC','ND','NE','NH','NJ','NM','NV','NY','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VA','VT','WA','WI','WV','WY'],
'Philippines':['','Abra','Agusan del Norte','Agusan del Sur','Aklan','Albay','Angeles','Antipolo','Antique','Apayao','Aurora','Bacolod City','Bago','Baguio','Bais','Basilan','Bataan','Batanes','Batangas','Batangas','Benguet','Bohol','Bukidnon','Bulacan','Butuan','Cabanatuan','Cadiz','Cagayan','Calbayog','Caloocan','Camarines Norte','Camarines Sur','Camiguin','Canlaon','Capiz','Catanduanes','Cavite','Cavite','Cebu','Cebu City','City of Malaybalay','Cotabato','Dagupan','Danao','Dapitan','Davao','Davao','Davao Oriental','Davao del Sur','Dipolog','Dumaguete','Eastern Samar','General Santos','Gingoog','Ifugao','Ilocos Norte','Ilocos Sur','Iloilo','Iloilo','Iriga','Isabela','Kalinga','La Carlota','La Union','Laguna','Lanao del Sur','Laoag','Lapu-Lapu','Legaspi','Leyte','Lipa','Lucena','Maguindanao','Makati City','Mandaluyong','Mandaue','Manila','Marawi City','Marikina','Marinduque','Masbate','Mindoro Occidental','Misamis Occidental','Misamis Oriental','Mountain Province','Naga','Negros Occidental','Negros Oriental','North Cotabato','Northern Samar','Nueva Ecija','Nueva Vizcaya','Olongapo','Oriental Mindoro','Ormoc','Oroquieta','Ozamis','Pagadian','Palawan','Palayan','Pampanga','Pangasinan','Pasay','Pasig','Puerto Princesa','Quezon','Quezon','Quirino','Rizal','Romblon','Roxas','Samar','San Carlos, Negros Occidental','San Carlos, Pangasinan','San Jose','San Juan','San Pablo','Silay','Siquijor','Sorsogon','South Cotabato','Southern Leyte','Sultan Kudarat','Sulu','Surigao','Surigao del Norte','Surigao del Sur','Tacloban','Tagaytay','Tagbilaran','Tangub','Tarlac','Tawi-Tawi','Toledo','Trece Martires','Zambales','Zamboanga City','Zamboanga del Norte','Zamboanga del Sur'],
'United Kingdom':['','England','Northern Ireland','Scotland','Wales'],
'Turkey':['','Adana Province','Adıyaman','Afyonkarahisar','Aksaray Province','Amasya Province','Ankara Province','Antalya Province','Ardahan Province','Artvin Province','Aydın Province','Ağrı Province','Balıkesir Province','Bartın Province','Batman Province','Bayburt','Bilecik Province','Bingöl Province','Bitlis Province','Bolu Province','Burdur Province','Bursa','Denizli Province','Diyarbakır','Düzce','Edirne Province','Elazığ','Erzincan Province','Erzurum Province','Eskişehir Province','Gaziantep Province','Giresun Province','Gümüşhane','Hakkâri Province','Hatay Province','Isparta Province','Istanbul','Iğdır Province','Kahramanmaraş Province','Karabük','Karaman Province','Kars','Kastamonu Province','Kayseri Province','Kilis Province','Kocaeli Province','Konya Province','Kütahya Province','Kırklareli Province','Kırıkkale Province','Kırşehir Province','Malatya Province','Manisa Province','Mardin Province','Mersin Province','Muğla Province','Muş Province','Nevşehir','Niğde','Ordu','Osmaniye Province','Rize','Sakarya Province','Samsun Province','Siirt Province','Sinop Province','Sivas Province','Tekirdağ Province','Tokat','Trabzon Province','Tunceli Province','Uşak Province','Van Province','Yalova Province','Yozgat Province','Zonguldak','Çanakkale Province','Çankırı Province','Çorum Province','İzmir','Şanlıurfa Province','Şırnak Province'],
'China':['','Anhui','Beijing','Chongqing','Fujian','Gansu','Guangdong','Guangxi','Guizhou','Hainan Province','Hebei','Heilongjiang','Henan','Hubei','Hunan Province','Inner Mongolia','Jiangsu','Jiangxi','Jilin','Liaoning Province','Ningxia','Qinghai','Shaanxi','Shandong','Shanghai','Shanxi','Sichuan','Tianjin','Xinjiang','Xizang','Yunnan Province','Zhejiang'],
'Japan':['','Aichi','Akita','Aomori','Chiba','Ehime','Fukui','Fukuoka','Fukushima','Gifu','Gumma','Hiroshima','Hokkaidō','Hyōgo','Ibaraki','Ishikawa','Iwate','Kagawa','Kagoshima','Kanagawa','Kumamoto','Kyōto','Kōchi','Mie','Miyagi','Miyazaki','Nagano','Nagasaki','Nara','Niigata','Okayama','Okinawa','Saga','Saitama','Shiga','Shimane','Shizuoka','Tochigi','Tokushima','Tottori','Toyama','Tōkyō','Wakayama','Yamagata','Yamaguchi','Yamanashi','Ōita','Ōsaka'],
'Australia':['','Australian Capital Territory','New South Wales','Northern Territory','Queensland','South Australia','Tasmania','Victoria','Western Australia'],
'Dominican Republic':['','Azua','Baoruco','Barahona','Dajabón','Distrito Nacional','Duarte','El Seíbo','Elías Piña','Espaillat','Hato Mayor','Independencia','La Altagracia','La Romana','La Vega','María Trinidad Sánchez','Monseñor Nouel','Monte Cristi','Monte Plata','Pedernales','Peravia','Provincia de San José de Ocoa','Provincia de Santo Domingo','Puerto Plata','Salcedo','Samaná','San Cristóbal','San Juan','San Pedro de Macorís','Santiago','Santiago Rodríguez','Sánchez Ramírez','Valverde'],
'Venezuela':['','Amazonas','Anzoátegui','Apure','Aragua','Barinas','Bolívar','Carabobo','Cojedes','Delta Amacuro','Dependencias Federales','Distrito Federal','Falcón','Guárico','Isla Margarita','Lara','Miranda','Monagas','Mérida','Portuguesa','Sucre','Trujillo','Táchira','Vargas','Yaracuy','Zulia'],
'New Zealand':['','Auckland','Bay of Plenty','Canterbury','Chatham Islands','Gisborne','Hawkes Bay','Manawatu-Wanganui','Marlborough','Nelson','Northland','Otago','Southland','Taranaki','Tasman','Waikato','Wellington','West Coast'],
'Brazil':['','Acre','Alagoas','Amapá','Bahia','Ceará','Distrito Federal','Espírito Santo','Estado de Goiás','Estado do Amazonas','Maranhão','Mato Grosso','Mato Grosso do Sul','Minas Gerais','Paraná','Paraíba','Pará','Pernambuco','Piauí','Rio Grande do Norte','Rio Grande do Sul','Rondônia','Roraima','Santa Catarina','Sergipe','State of Rio de Janeiro','São Paulo','Tocantins'],
'Germany':['','Baden-Württemberg','Bavaria','Berlin','Brandenburg','Bremen','Hamburg','Hesse','Lower Saxony','Mecklenburg-Vorpommern','North Rhine-Westphalia','Rhineland-Palatinate','Saarland','Saxony','Saxony-Anhalt','Schleswig-Holstein','Thuringia'],
};

function CountrySelect(countryFieldId, stateFieldId) {
	
	this.countryChanged = function() {
		var country = $(countryFieldId);
		var selectedState = $(stateFieldId).value
		if(states[country.value]) {
			Element.replace($(stateFieldId), "<select id='" + stateFieldId + "' name='" + stateFieldId + "'></select>");
			//$(stateFieldId).setStyle("width: " + this.width + "px; overflow: hidden;");
			this.addOptions($(stateFieldId), states[country.value], selectedState);
		} else {
			// no list of provinces/states is available, show free-form field.
			Element.replace($(stateFieldId), "<input id='" + stateFieldId + "' name='" + stateFieldId + "' value='" + selectedState + "'/>")
		}
	};
	
	this.addOptions = function(select, entries, selectedEntry) {
		var selectedIndex = 0;
		for (i = 0; i < entries.length; i++) {
			var entry = entries[i];
			if (entry == selectedEntry) {
				selectedIndex = i;
			}
			var option = "<option value='" + entry + "'>" + entry + "</option>";
			select.insert(option);
		}
		select.selectedIndex = selectedIndex;
	};
	
	// constructor
	this.defaultCountry = 'United States';
	this.countryFieldId = countryFieldId;
	this.stateFieldId = stateFieldId;
	
	var input = $(countryFieldId);
	this.width = input.getWidth();
	var selectedCountry = input.value;
	if (selectedCountry == '')
		selectedCountry = 'United States';
	Element.replace(input, "<select id='" + countryFieldId + "' name='" + countryFieldId + "' width='30px'></select>");
	input = $(countryFieldId);
	input.setStyle("width: " + this.width + "px; overflow: hidden;");
	
	this.addOptions(input, countries, selectedCountry);
	input.observe('change', this.countryChanged.bindAsEventListener(this));
	// fire change manually since we just changed it
	this.countryChanged();
}

function init() {
	new CountrySelect("mailingCountry", "mailingState");
	new CountrySelect("billingCountry", "billingState");
}

Event.observe(window, 'load', init);