function getPageSize() {   
	 var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	
	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}

	return [pageWidth,pageHeight];
}

function isInteger(e) {
	var k = window.event ? e.keyCode : e.which;
	var s = String.fromCharCode(k);
	var r = /\d/;
	return r.test(s);
}

function isControlChar(e) {
	var k = window.event ? e.keyCode : e.which;
	//  0 == Firefox
	//  8 == delete
	//  9 == tab
	// 10 == \n
	// 13 == \r
	// 37 == left-arrow
	// 39 == right-arrow
	return k == 0 || k == 8 || k == 9 || k == 10 || k == 13 || k == 37 || k == 39;
}

function isCharacter(e, c) {
	var k = window.event ? e.keyCode : e.which;
	var s = String.fromCharCode(k);
	return c == s;
}

function setOption(id, bool) {
	$(id).value = (bool) ? 1 : 0;
}

function activateSubsection(subsectionId) {
	// Activate subsection choice.
	var choices = $('subsections').select('li');
	for (var i = 0; i < choices.length; ++i) {
		var choiceId = choices[i].identify();
		if (choices[i].identify() != subsectionId + '-choice') {
			choices[i].removeClassName('active');
		}
	}
	$(subsectionId + '-choice').addClassName('active');
	
	// Activate subsection.
	var subsections = $('subsections').select('.subsection');
	for (var i = 0; i < subsections.length; ++i) {
		if (subsections[i].identify() != subsectionId) {
			subsections[i].style.display = 'none';
		}
	}
	$(subsectionId).style.display = 'block';
}

function showSpecials() {
    var arrayPageSize = getPageSize();
    $('specials-overlay').setStyle({
    	width: arrayPageSize[0] + 'px',
    	height: arrayPageSize[1] + 'px'
    });
	$('specials-overlay').appear({
		duration: 0.2,
		from: 0.0,
		to: 0.8
	});
	$('specials').appear({
		duration: 0.2
	});
}

function hideSpecials() {
	$('specials').fade({
		duration: 0.2
	});
	$('specials-overlay').fade({
		duration: 0.2
	});
}

function setImage(id, url) {
	$(id).src = url;
}

function setPrice(type, displayId, qtyId, n) {
	var qty = $(qtyId).value;
	new Ajax.Updater(displayId, 'ajax/calc.php', {
		method: 'get',
		parameters: { type: type, length: n, qty: qty }
	});
}

function requiresState(country_code) {
	return (country_code == 'US' ||
			country_code == 'BR' ||
			country_code == 'CA' ||
			country_code == 'CN' ||
			country_code == 'IT' ||
			country_code == 'JP' ||
			country_code == 'ES' ||
			country_code == 'GB');
}

function requiresZip(country_code) {
	return (country_code != 'TW' &&
			country_code != 'HK' &&
			country_code != 'IE' &&
			country_code != 'AE');
}

function calcCheckout(page_id, source, shipping_price) {
	// Grab address information.
	var country = $(source + '-country').value;
	var zip = $(source + '-zip').value;
	
	// Show spinner.
    $(page_id + '-spinner').appear({
    	duration: 0.2,
		from: 0.0,
		to: 0.8
	});
		
	// Get shipping methods and costs.
	new Ajax.Request('ajax/shipping.php', {
		method: 'get',
		parameters: { country: country, zip: zip },
		onSuccess: function(transport) {
			// If the response is false, something went wrong.
			if (transport.responseText == 'false') {
				return;
			}
			
			// Process the response.
			var response = transport.responseText.evalJSON(true);
			var tax = response['tax'];
			var shipping = response['shipping'];
		
			// Update sales tax.
			if ($(page_id + '-tax')) {
				$(page_id + '-tax').value = tax;
			}
			
			// Clear shipping choices.
			var shipping_select = $(page_id + '-shipping');
			for (i = shipping_select.length; i >= 0; --i) {
				shipping_select[i] = null;
			}
			
			// Update shipping choices.
			var gotShipping = false;
			for (var prop in shipping) {
				// Grab the method and price.
				var method = prop;
				var price = parseFloat(shipping[prop]);
				
				// Remember if we got valid shipping.
				if (price > 0) {
					gotShipping = true;
				}
				
				// Format the price for a nicer option label.
				var nice_price = price.toFixed(2);
				label = method + ' ($' + nice_price + ')';
				
				// Update the options.
				if (shipping_price) {
					shipping_select[shipping_select.length] = new Option(label, price);
				} else {
					shipping_select[shipping_select.length] = new Option(label, method);
				}
			}
			
			// Signal shipping choices have changed.
			if (shipping_select.onchange) {
				shipping_select.onchange();
			}
		},
		onComplete: function(transport) {
			// Hide spinner.
			$(page_id + '-spinner').fade({ duration: 0.2 });
		}
	});
}

function showPaypal() {
    var arrayPageSize = getPageSize();
    $('paypal-overlay').setStyle({
    	width: arrayPageSize[0] + 'px',
    	height: arrayPageSize[1] + 'px'
    });
	$('paypal-overlay').appear({
		duration: 0.2,
		from: 0.0,
		to: 0.8
	});
	$('paypal').appear({
		duration: 0.2
	});
}

function hidePaypal() {
	$('paypal').fade({
		duration: 0.2
	});
	$('paypal-overlay').fade({
		duration: 0.2
	});
}

function validatePaypal() {
	var elements = $('paypal-form').getElements();
	
	// All elements must be filled in, except in some cases.
	var country_code = $('paypal-country').value;
	var complete = true;
	for (var i = 0; i < elements.length; ++i) {
		var id = elements[i].identify();
		if (id.endsWith('-addr2')) {
			continue;
		}
		if (id.endsWith('-state') && !requiresState(country_code))
		{
			continue;
		}
		if (id.endsWith('-zip') && !requiresZip(country_code))
		{
			continue;
		}
		if (!elements[i].present()) {
			complete = false;
			break;
		}
	}
	
	// If incomplete, display the fill form element. Otherwise hide.
	$('paypal-fill-form').style.visibility = (complete) ? 'hidden' : 'visible';
	return complete;
}

function calcAmazon(page_id, cid) {
	// Show spinner.
    $(page_id + '-spinner').appear({
    	duration: 0.2,
		from: 0.0,
		to: 0.8
	});
	
	// Get tax and shipping.
	new Ajax.Request('ajax/amazon-shipping.php', {
		method: 'get',
		parameters: { cid: cid },
		onSuccess: function(transport) {
			// If the response is false, something went wrong. Try to
			// fix it by reloading the page.
			if (transport.responseText == 'false') {
				$(page_id + '-ajax-error').style.visibility = 'visible';
				return;
			}
			$(page_id + '-ajax-error').style.visibility = 'hidden';
			
			// Process the response.
			var response = transport.responseText.evalJSON(true);
			var tax = response['tax'];
			var shipping = response['shipping'];
		
			// Update sales tax.
			$(page_id + '-tax').innerHTML = '$' + tax.toFixed(2);
			
			// Clear shipping choices.
			var shipping_select = $(page_id + '-shipping');
			for (i = shipping_select.length; i >= 0; --i) {
				shipping_select[i] = null;
			}
			
			// Update shipping choices.
			var gotShipping = false;
			for (var prop in shipping) {
				// Grab the method and price.
				var method = prop;
				var price = parseFloat(shipping[prop]);
				
				// Remember if we got valid shipping.
				if (price > 0) {
					gotShipping = true;
				}
				
				// Format the price for a nicer option label.
				var nice_price = price.toFixed(2);
				label = method + ' ($' + nice_price + ')';
				
				// Update the options.
				shipping_select[shipping_select.length] = new Option(label, method);
			}
			
			// Signal shipping choices have changed.
			if (shipping_select.onchange) {
				shipping_select.onchange();
			}
		},
		onComplete: function(transport) {
			// Hide spinner.
			$(page_id + '-spinner').fade({ duration: 0.2 });
		}
	});
}

function validateAmazon() {
	var elements = $('amazon-form').getElements();
	
	// All elements must be filled in.
	var complete = true;
	for (var i = 0; i < elements.length; ++i) {
		var id = elements[i].identify();
		if (!elements[i].present()) {
			complete = false;
			break;
		}
	}
	
	// If incomplete, display the fill form element. Otherwise hide.
	$('fill-form').style.visibility = (complete) ? 'hidden' : 'visible';
	return complete;
}

function flipState(id, country_code) {
	if (country_code == 'US') {
		$(id).innerHTML = 'State:';
		$(id).style.visibility = 'visible';
	} else if (country_code == 'AU') {
		$(id).innerHTML = 'Territory:';
		$(id).style.visibility = 'visible';
	} else if (country_code == 'BR') {
		$(id).innerHTML = 'State:';
		$(id).style.visibility = 'visible';
	} else if (country_code == 'CA') {
		$(id).innerHTML = 'Province:';
		$(id).style.visibility = 'visible';
	} else if (country_code == 'CN') {
		$(id).innerHTML = 'Territory:';
		$(id).style.visibility = 'visible';
	} else if (country_code == 'IT') {
		$(id).innerHTML = 'Province:';
		$(id).style.visibility = 'visible';
	} else if (country_code == 'JP') {
		$(id).innerHTML = 'Prefecture:';
		$(id).style.visibility = 'visible';
	} else if (country_code == 'ES') {
		$(id).innerHTML = 'Province:';
		$(id).style.visibility = 'visible';
	} else if (country_code == 'GB') {
		$(id).innerHTML = 'County:';
		$(id).style.visibility = 'visible';
	} else {
		$(id).style.visibility = 'hidden';
	}
}

function flipZip(label_id, input_id, country_code) {
	if (country_code == 'US' ||
		country_code == 'PH')
	{
		$(label_id).innerHTML = 'ZIP:';
		$(label_id).style.visibility = 'visible';
		$(input_id).style.visibility = 'visible';
	} else if (requiresZip(country_code)) {
		$(label_id).innerHTML = 'Postal Code:';
		$(label_id).style.visibility = 'visible';
		$(input_id).style.visibility = 'visible';
	} else {
		$(label_id).innerHTML = '';
		$(label_id).style.visibility = 'hidden';
		$(input_id).value = '';
		$(input_id).style.visibility = 'hidden';
	}
}

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

idx = 0;
var state_br_names = []; var state_br_codes = [];
state_br_names[idx]	= 'Acre';
state_br_codes[idx++]	 = 'Acre';
state_br_names[idx]	= 'Alagoas';
state_br_codes[idx++]	 = 'Alagoas';
state_br_names[idx]	= 'Amapa';
state_br_codes[idx++]	 = 'Amapa';
state_br_names[idx]	= 'Amazonas';
state_br_codes[idx++]	 = 'Amazonas';
state_br_names[idx]	= 'Bahia';
state_br_codes[idx++]	 = 'Bahia';
state_br_names[idx]	= 'Ceara';
state_br_codes[idx++]	 = 'Ceara';
state_br_names[idx]	= 'Distrito Federal';
state_br_codes[idx++]	 = 'Distrito Federal';
state_br_names[idx]	= 'Espirito Santo';
state_br_codes[idx++]	 = 'Espirito Santo';
state_br_names[idx]	= 'Goias';
state_br_codes[idx++]	 = 'Goias';
state_br_names[idx]	= 'Maranhao';
state_br_codes[idx++]	 = 'Maranhao';
state_br_names[idx]	= 'Mato Grosso';
state_br_codes[idx++]	 = 'Mato Grosso';
state_br_names[idx]	= 'Mato Grosso do Sul';
state_br_codes[idx++]	 = 'Mato Grosso do Sul';
state_br_names[idx]	= 'Minas Gerais';
state_br_codes[idx++]	 = 'Minas Gerais';
state_br_names[idx]	= 'Para';
state_br_codes[idx++]	 = 'Para';
state_br_names[idx]	= 'Paraiba';
state_br_codes[idx++]	 = 'Paraiba';
state_br_names[idx]	= 'Parana';
state_br_codes[idx++]	 = 'Parana';
state_br_names[idx]	= 'Pernambuco';
state_br_codes[idx++]	 = 'Pernambuco';
state_br_names[idx]	= 'Piaui';
state_br_codes[idx++]	 = 'Piaui';
state_br_names[idx]	= 'Rio de Janeiro';
state_br_codes[idx++]	 = 'Rio de Janeiro';
state_br_names[idx]	= 'Rio Grande do Norte';
state_br_codes[idx++]	 = 'Rio Grande do Norte';
state_br_names[idx]	= 'Rio Grande do Sul';
state_br_codes[idx++]	 = 'Rio Grande do Sul';
state_br_names[idx]	= 'Rondonia';
state_br_codes[idx++]	 = 'Rondonia';
state_br_names[idx]	= 'Roraima';
state_br_codes[idx++]	 = 'Roraima';
state_br_names[idx]	= 'Santa Catarina';
state_br_codes[idx++]	 = 'Santa Catarina';
state_br_names[idx]	= 'Sao Paulo';
state_br_codes[idx++]	 = 'Sao Paulo';
state_br_names[idx]	= 'Sergipe';
state_br_codes[idx++]	 = 'Sergipe';
state_br_names[idx]	= 'Tocantins';
state_br_codes[idx++]	 = 'Tocantins';

idx = 0;
var province_ca_names = []; var province_ca_codes = [];
province_ca_names[idx]	= 'Alberta';
province_ca_codes[idx++]	= 'AB';
province_ca_names[idx]	= 'British Columbia';
province_ca_codes[idx++]	= 'BC';
province_ca_names[idx]	= 'Manitoba';
province_ca_codes[idx++]	= 'MB';
province_ca_names[idx]	= 'New Brunswick';
province_ca_codes[idx++]	= 'NB';
province_ca_names[idx]	= 'Newfoundland and Labrador';
province_ca_codes[idx++]	= 'NL';
province_ca_names[idx]	= 'Northwest Territories';
province_ca_codes[idx++]	= 'NT';
province_ca_names[idx]	= 'Nova Scotia';
province_ca_codes[idx++]	= 'NS';
province_ca_names[idx]	= 'Nunavut';
province_ca_codes[idx++]	= 'NU';
province_ca_names[idx]	= 'Ontario';
province_ca_codes[idx++]	= 'ON';
province_ca_names[idx]	= 'Prince Edward Island';
province_ca_codes[idx++]	= 'PE';
province_ca_names[idx]	= 'Quebec';
province_ca_codes[idx++]	= 'QC';
province_ca_names[idx]	= 'Saskatchewan';
province_ca_codes[idx++]	= 'SK';
province_ca_names[idx]	= 'Yukon';
province_ca_codes[idx++]	= 'YT';

idx = 0;
var territory_cn_names = []; var territory_cn_codes = [];
territory_cn_names[idx]	= 'Anhui';
territory_cn_codes[idx++]	= 'Anhui';
territory_cn_names[idx]	= 'Beijing';
territory_cn_codes[idx++]	= 'Beijing';
territory_cn_names[idx]	= 'Chongqing';
territory_cn_codes[idx++]	= 'Chongqing';
territory_cn_names[idx]	= 'Fujian';
territory_cn_codes[idx++]	= 'Fujian';
territory_cn_names[idx]	= 'Gansu';
territory_cn_codes[idx++]	= 'Gansu';
territory_cn_names[idx]	= 'Guangdong';
territory_cn_codes[idx++]	= 'Guangdong';
territory_cn_names[idx]	= 'Guangxi';
territory_cn_codes[idx++]	= 'Guangxi';
territory_cn_names[idx]	= 'Guizhou';
territory_cn_codes[idx++]	= 'Guizhou';
territory_cn_names[idx]	= 'Hainan';
territory_cn_codes[idx++]	= 'Hainan';
territory_cn_names[idx]	= 'Hebei';
territory_cn_codes[idx++]	= 'Hebei';
territory_cn_names[idx]	= 'Heilongjiang';
territory_cn_codes[idx++]	= 'Heilongjiang';
territory_cn_names[idx]	= 'Henan';
territory_cn_codes[idx++]	= 'Henan';
territory_cn_names[idx]	= 'Hong Kong';
territory_cn_codes[idx++]	= 'Hong Kong';
territory_cn_names[idx]	= 'Hubei';
territory_cn_codes[idx++]	= 'Hubei';
territory_cn_names[idx]	= 'Hunan';
territory_cn_codes[idx++]	= 'Hunan';
territory_cn_names[idx]	= 'Inner Mongolia';
territory_cn_codes[idx++]	= 'Inner Mongolia';
territory_cn_names[idx]	= 'Jiangsu';
territory_cn_codes[idx++]	= 'Jiangsu';
territory_cn_names[idx]	= 'Jiangxi';
territory_cn_codes[idx++]	= 'Jiangxi';
territory_cn_names[idx]	= 'Jilin';
territory_cn_codes[idx++]	= 'Jilin';
territory_cn_names[idx]	= 'Liaoning';
territory_cn_codes[idx++]	= 'Liaoning';
territory_cn_names[idx]	= 'Macau';
territory_cn_codes[idx++]	= 'Macau';
territory_cn_names[idx]	= 'Ningxia';
territory_cn_codes[idx++]	= 'Ningxia';
territory_cn_names[idx]	= 'Qinghai';
territory_cn_codes[idx++]	= 'Qinghai';
territory_cn_names[idx]	= 'Shaanxi';
territory_cn_codes[idx++]	= 'Shaanxi';
territory_cn_names[idx]	= 'Shandong';
territory_cn_codes[idx++]	= 'Shandong';
territory_cn_names[idx]	= 'Shanghai';
territory_cn_codes[idx++]	= 'Shanghai';
territory_cn_names[idx]	= 'Shanxi';
territory_cn_codes[idx++]	= 'Shanxi';
territory_cn_names[idx]	= 'Sichuan';
territory_cn_codes[idx++]	= 'Sichuan';
territory_cn_names[idx]	= 'Tianjin';
territory_cn_codes[idx++]	= 'Tianjin';
territory_cn_names[idx]	= 'Tibet';
territory_cn_codes[idx++]	= 'Tibet';
territory_cn_names[idx]	= 'Xinjiang';
territory_cn_codes[idx++]	= 'Xinjiang';
territory_cn_names[idx]	= 'Yunnan';
territory_cn_codes[idx++]	= 'Yunnan';
territory_cn_names[idx]	= 'Zhejiang';
territory_cn_codes[idx++]	= 'Zhejiang';

idx = 0;
var province_it_names = []; var province_it_codes = [];
province_it_names[idx]	= 'Agrigento';
province_it_codes[idx++]	= 'Agrigento';
province_it_names[idx]	= 'Alessandria';
province_it_codes[idx++]	= 'Alessandria';
province_it_names[idx]	= 'Ancona';
province_it_codes[idx++]	= 'Ancona';
province_it_names[idx]	= 'Aosta';
province_it_codes[idx++]	= 'Aosta';
province_it_names[idx]	= 'L\'Aquila';
province_it_codes[idx++]	= 'L\'Aquila';
province_it_names[idx]	= 'Arezzo';
province_it_codes[idx++]	= 'Arezzo';
province_it_names[idx]	= 'Ascoli Piceno';
province_it_codes[idx++]	= 'Ascoli Piceno';
province_it_names[idx]	= 'Asti';
province_it_codes[idx++]	= 'Asti';
province_it_names[idx]	= 'Avellino';
province_it_codes[idx++]	= 'Avellino';
province_it_names[idx]	= 'Bari';
province_it_codes[idx++]	= 'Bari';
province_it_names[idx]	= 'Belluno';
province_it_codes[idx++]	= 'Belluno';
province_it_names[idx]	= 'Benevento';
province_it_codes[idx++]	= 'Benevento';
province_it_names[idx]	= 'Bergamo';
province_it_codes[idx++]	= 'Bergamo';
province_it_names[idx]	= 'Biella';
province_it_codes[idx++]	= 'Biella';
province_it_names[idx]	= 'Bologna';
province_it_codes[idx++]	= 'Bologna';
province_it_names[idx]	= 'Bolzano';
province_it_codes[idx++]	= 'Bolzano';
province_it_names[idx]	= 'Brescia';
province_it_codes[idx++]	= 'Brescia';
province_it_names[idx]	= 'Brindisi';
province_it_codes[idx++]	= 'Brindisi';
province_it_names[idx]	= 'Cagliari';
province_it_codes[idx++]	= 'Cagliari';
province_it_names[idx]	= 'Caltanissetta';
province_it_codes[idx++]	= 'Caltanissetta';
province_it_names[idx]	= 'Campobasso';
province_it_codes[idx++]	= 'Campobasso';
province_it_names[idx]	= 'Carbonia-Iglesias';
province_it_codes[idx++]	= 'Carbonia-Iglesias';
province_it_names[idx]	= 'Caserta';
province_it_codes[idx++]	= 'Caserta';
province_it_names[idx]	= 'Catania';
province_it_codes[idx++]	= 'Catania';
province_it_names[idx]	= 'Catanzaro';
province_it_codes[idx++]	= 'Catanzaro';
province_it_names[idx]	= 'Chieti';
province_it_codes[idx++]	= 'Chieti';
province_it_names[idx]	= 'Como';
province_it_codes[idx++]	= 'Como';
province_it_names[idx]	= 'Cosenza';
province_it_codes[idx++]	= 'Cosenza';
province_it_names[idx]	= 'Cremona';
province_it_codes[idx++]	= 'Cremona';
province_it_names[idx]	= 'Crotone';
province_it_codes[idx++]	= 'Crotone';
province_it_names[idx]	= 'Cuneo';
province_it_codes[idx++]	= 'Cuneo';
province_it_names[idx]	= 'Enna';
province_it_codes[idx++]	= 'Enna';
province_it_names[idx]	= 'Ferrara';
province_it_codes[idx++]	= 'Ferrara';
province_it_names[idx]	= 'Firenze';
province_it_codes[idx++]	= 'Firenze';
province_it_names[idx]	= 'Foggia';
province_it_codes[idx++]	= 'Foggia';
province_it_names[idx]	= 'Forli';
province_it_codes[idx++]	= 'Forli';
province_it_names[idx]	= 'Frosinone';
province_it_codes[idx++]	= 'Frosinone';
province_it_names[idx]	= 'Genova';
province_it_codes[idx++]	= 'Genova';
province_it_names[idx]	= 'Gorizia';
province_it_codes[idx++]	= 'Gorizia';
province_it_names[idx]	= 'Grosseto';
province_it_codes[idx++]	= 'Grosseto';
province_it_names[idx]	= 'Imperia';
province_it_codes[idx++]	= 'Imperia';
province_it_names[idx]	= 'Isernia';
province_it_codes[idx++]	= 'Isernia';
province_it_names[idx]	= 'Latina';
province_it_codes[idx++]	= 'Latina';
province_it_names[idx]	= 'Lecce';
province_it_codes[idx++]	= 'Lecce';
province_it_names[idx]	= 'Lecco';
province_it_codes[idx++]	= 'Lecco';
province_it_names[idx]	= 'Livorno';
province_it_codes[idx++]	= 'Livorno';
province_it_names[idx]	= 'Lodi';
province_it_codes[idx++]	= 'Lodi';
province_it_names[idx]	= 'Lucca';
province_it_codes[idx++]	= 'Lucca';
province_it_names[idx]	= 'Macerata';
province_it_codes[idx++]	= 'Macerata';
province_it_names[idx]	= 'Mantova';
province_it_codes[idx++]	= 'Mantova';
province_it_names[idx]	= 'Massa Carrara';
province_it_codes[idx++]	= 'Massa Carrara';
province_it_names[idx]	= 'Matera';
province_it_codes[idx++]	= 'Matera';
province_it_names[idx]	= 'Medio Campidano';
province_it_codes[idx++]	= 'Medio Campidano';
province_it_names[idx]	= 'Messina';
province_it_codes[idx++]	= 'Messina';
province_it_names[idx]	= 'Milano';
province_it_codes[idx++]	= 'Milano';
province_it_names[idx]	= 'Modena';
province_it_codes[idx++]	= 'Modena';
province_it_names[idx]	= 'Napoli';
province_it_codes[idx++]	= 'Napoli';
province_it_names[idx]	= 'Novara';
province_it_codes[idx++]	= 'Novara';
province_it_names[idx]	= 'Nuoro';
province_it_codes[idx++]	= 'Nuoro';
province_it_names[idx]	= 'Ogliastra';
province_it_codes[idx++]	= 'Ogliastra';
province_it_names[idx]	= 'Olbia-Tempio';
province_it_codes[idx++]	= 'Olbia-Tempio';
province_it_names[idx]	= 'Oristano';
province_it_codes[idx++]	= 'Oristano';
province_it_names[idx]	= 'Padova';
province_it_codes[idx++]	= 'Padova';
province_it_names[idx]	= 'Palermo';
province_it_codes[idx++]	= 'Palermo';
province_it_names[idx]	= 'Parma';
province_it_codes[idx++]	= 'Parma';
province_it_names[idx]	= 'Pavia';
province_it_codes[idx++]	= 'Pavia';
province_it_names[idx]	= 'Perugia';
province_it_codes[idx++]	= 'Perugia';
province_it_names[idx]	= 'Pesaro';
province_it_codes[idx++]	= 'Pesaro';
province_it_names[idx]	= 'Pescara';
province_it_codes[idx++]	= 'Pescara';
province_it_names[idx]	= 'Piacenza';
province_it_codes[idx++]	= 'Piacenza';
province_it_names[idx]	= 'Pisa';
province_it_codes[idx++]	= 'Pisa';
province_it_names[idx]	= 'Pistoia';
province_it_codes[idx++]	= 'Pistoia';
province_it_names[idx]	= 'Pordenone';
province_it_codes[idx++]	= 'Pordenone';
province_it_names[idx]	= 'Potenza';
province_it_codes[idx++]	= 'Potenza';
province_it_names[idx]	= 'Prato';
province_it_codes[idx++]	= 'Prato';
province_it_names[idx]	= 'Ragusa';
province_it_codes[idx++]	= 'Ragusa';
province_it_names[idx]	= 'Ravenna';
province_it_codes[idx++]	= 'Ravenna';
province_it_names[idx]	= 'Reggio Calabria';
province_it_codes[idx++]	= 'Reggio Calabria';
province_it_names[idx]	= 'Reggio Emilia';
province_it_codes[idx++]	= 'Reggio Emilia';
province_it_names[idx]	= 'Rieti';
province_it_codes[idx++]	= 'Rieti';
province_it_names[idx]	= 'Rimini';
province_it_codes[idx++]	= 'Rimini';
province_it_names[idx]	= 'Roma';
province_it_codes[idx++]	= 'Roma';
province_it_names[idx]	= 'Rovigo';
province_it_codes[idx++]	= 'Rovigo';
province_it_names[idx]	= 'Salerno';
province_it_codes[idx++]	= 'Salerno';
province_it_names[idx]	= 'Sassari';
province_it_codes[idx++]	= 'Sassari';
province_it_names[idx]	= 'Savona';
province_it_codes[idx++]	= 'Savona';
province_it_names[idx]	= 'Siena';
province_it_codes[idx++]	= 'Siena';
province_it_names[idx]	= 'Siracusa';
province_it_codes[idx++]	= 'Siracusa';
province_it_names[idx]	= 'Sondrio';
province_it_codes[idx++]	= 'Sondrio';
province_it_names[idx]	= 'La Spezia';
province_it_codes[idx++]	= 'La Spezia';
province_it_names[idx]	= 'Taranto';
province_it_codes[idx++]	= 'Taranto';
province_it_names[idx]	= 'Teramo';
province_it_codes[idx++]	= 'Teramo';
province_it_names[idx]	= 'Terni';
province_it_codes[idx++]	= 'Terni';
province_it_names[idx]	= 'Torino';
province_it_codes[idx++]	= 'Torino';
province_it_names[idx]	= 'Trapani';
province_it_codes[idx++]	= 'Trapani';
province_it_names[idx]	= 'Trento';
province_it_codes[idx++]	= 'Trento';
province_it_names[idx]	= 'Treviso';
province_it_codes[idx++]	= 'Treviso';
province_it_names[idx]	= 'Trieste';
province_it_codes[idx++]	= 'Trieste';
province_it_names[idx]	= 'Udine';
province_it_codes[idx++]	= 'Udine';
province_it_names[idx]	= 'Varese';
province_it_codes[idx++]	= 'Varese';
province_it_names[idx]	= 'Venezia';
province_it_codes[idx++]	= 'Venezia';
province_it_names[idx]	= 'Verbania-Cusio-Ossola';
province_it_codes[idx++]	= 'Verbania-Cusio-Ossola';
province_it_names[idx]	= 'Vercelli';
province_it_codes[idx++]	= 'Vercelli';
province_it_names[idx]	= 'Verona';
province_it_codes[idx++]	= 'Verona';
province_it_names[idx]	= 'Vibo Valentia';
province_it_codes[idx++]	= 'Vibo Valentia';
province_it_names[idx]	= 'Vicenza';
province_it_codes[idx++]	= 'Vicenza';
province_it_names[idx]	= 'Viterbo';
province_it_codes[idx++]	= 'Viterbo';

idx = 0;
var province_es_names = []; var province_es_codes = [];
province_es_names[idx]	= 'Alava';
province_es_codes[idx++]	= 'Alava';
province_es_names[idx]	= 'Albacete';
province_es_codes[idx++]	= 'Albacete';
province_es_names[idx]	= 'Alicante';
province_es_codes[idx++]	= 'Alicante';
province_es_names[idx]	= 'Almeria';
province_es_codes[idx++]	= 'Almer’a';
province_es_names[idx]	= 'Asturias';
province_es_codes[idx++]	= 'Asturias';
province_es_names[idx]	= 'Avila';
province_es_codes[idx++]	= 'çvila';
province_es_names[idx]	= 'Badajoz';
province_es_codes[idx++]	= 'Badajoz';
province_es_names[idx]	= 'Barcelona';
province_es_codes[idx++]	= 'Barcelona';
province_es_names[idx]	= 'Burgos';
province_es_codes[idx++]	= 'Burgos';
province_es_names[idx]	= 'Caceres';
province_es_codes[idx++]	= 'C‡ceres';
province_es_names[idx]	= 'Cadiz';
province_es_codes[idx++]	= 'C‡diz';
province_es_names[idx]	= 'Cantabria';
province_es_codes[idx++]	= 'Cantabria';
province_es_names[idx]	= 'Castellon';
province_es_codes[idx++]	= 'Castell—n';
province_es_names[idx]	= 'Ceuta';
province_es_codes[idx++]	= 'Ceuta';
province_es_names[idx]	= 'Ciudad Real';
province_es_codes[idx++]	= 'Ciudad Real';
province_es_names[idx]	= 'Cordoba';
province_es_codes[idx++]	= 'C—rdoba';
province_es_names[idx]	= 'Cuenca';
province_es_codes[idx++]	= 'Cuenca';
province_es_names[idx]	= 'Guadalajara';
province_es_codes[idx++]	= 'Guadalajara';
province_es_names[idx]	= 'Gerona';
province_es_codes[idx++]	= 'Girona';
province_es_names[idx]	= 'Granada';
province_es_codes[idx++]	= 'Granada';
province_es_names[idx]	= 'Guipuzcoa';
province_es_codes[idx++]	= 'Guipśzcoa';
province_es_names[idx]	= 'Huelva';
province_es_codes[idx++]	= 'Huelva';
province_es_names[idx]	= 'Huesca';
province_es_codes[idx++]	= 'Huesca';
province_es_names[idx]	= 'Islas Baleares';
province_es_codes[idx++]	= 'Islas Baleares';
province_es_names[idx]	= 'Jaen';
province_es_codes[idx++]	= 'JaŽn';
province_es_names[idx]	= 'La Coruna';
province_es_codes[idx++]	= 'La Coru–a';
province_es_names[idx]	= 'Las Palmas';
province_es_codes[idx++]	= 'Las Palmas';
province_es_names[idx]	= 'La Rioja';
province_es_codes[idx++]	= 'La Rioja';
province_es_names[idx]	= 'Leon';
province_es_codes[idx++]	= 'Le—n';
province_es_names[idx]	= 'Lerida';
province_es_codes[idx++]	= 'LŽrida';
province_es_names[idx]	= 'Lugo';
province_es_codes[idx++]	= 'Lugo';
province_es_names[idx]	= 'Madrid';
province_es_codes[idx++]	= 'Madrid';
province_es_names[idx]	= 'Malaga';
province_es_codes[idx++]	= 'M‡laga';
province_es_names[idx]	= 'Melilla';
province_es_codes[idx++]	= 'Melilla';
province_es_names[idx]	= 'Murcia';
province_es_codes[idx++]	= 'Murcia';
province_es_names[idx]	= 'Navarra';
province_es_codes[idx++]	= 'Navarra';
province_es_names[idx]	= 'Orense';
province_es_codes[idx++]	= 'Orense';
province_es_names[idx]	= 'Palencia';
province_es_codes[idx++]	= 'Palencia';
province_es_names[idx]	= 'Pontevedra';
province_es_codes[idx++]	= 'Pontevedra';
province_es_names[idx]	= 'Salamanca';
province_es_codes[idx++]	= 'Salamanca';
province_es_names[idx]	= 'Santa Cruz de Tenerife';
province_es_codes[idx++]	= 'Santa Cruz de Tenerife';
province_es_names[idx]	= 'Segovia';
province_es_codes[idx++]	= 'Segovia';
province_es_names[idx]	= 'Sevilla';
province_es_codes[idx++]	= 'Sevilla';
province_es_names[idx]	= 'Soria';
province_es_codes[idx++]	= 'Soria';
province_es_names[idx]	= 'Tarragona';
province_es_codes[idx++]	= 'Tarragona';
province_es_names[idx]	= 'Teruel';
province_es_codes[idx++]	= 'Teruel';
province_es_names[idx]	= 'Toledo';
province_es_codes[idx++]	= 'Toledo';
province_es_names[idx]	= 'Valencia';
province_es_codes[idx++]	= 'Valencia';
province_es_names[idx]	= 'Valladolid';
province_es_codes[idx++]	= 'Valladolid';
province_es_names[idx]	= 'Vizcaya';
province_es_codes[idx++]	= 'Vizcaya';
province_es_names[idx]	= 'Zamora';
province_es_codes[idx++]	= 'Zamora';
province_es_names[idx]	= 'Zaragoza';
province_es_codes[idx++]	= 'Zaragoza';

idx = 0;
var prefecture_names = []; var prefecture_codes = [];
prefecture_names[idx] = 'Aichi';
prefecture_codes[idx++] = 'Aichi';
prefecture_names[idx] = 'Akita';
prefecture_codes[idx++] = 'Akita';
prefecture_names[idx] = 'Aomori';
prefecture_codes[idx++] = 'Aomori';
prefecture_names[idx] = 'Chiba';
prefecture_codes[idx++] = 'Chiba';
prefecture_names[idx] = 'Ehime';
prefecture_codes[idx++] = 'Ehime';
prefecture_names[idx] = 'Fukui';
prefecture_codes[idx++] = 'Fukui';
prefecture_names[idx] = 'Fukuoka';
prefecture_codes[idx++] = 'Fukuoka';
prefecture_names[idx] = 'Fukushima';
prefecture_codes[idx++] = 'Fukushima';
prefecture_names[idx] = 'Gifu';
prefecture_codes[idx++] = 'Gifu';
prefecture_names[idx] = 'Gunma';
prefecture_codes[idx++] = 'Gunma';
prefecture_names[idx] = 'Hiroshima';
prefecture_codes[idx++] = 'Hiroshima';
prefecture_names[idx] = 'Hokkaido';
prefecture_codes[idx++] = 'Hokkaido';
prefecture_names[idx] = 'Hyogo';
prefecture_codes[idx++] = 'Hyogo';
prefecture_names[idx] = 'Ibaraki';
prefecture_codes[idx++] = 'Ibaraki';
prefecture_names[idx] = 'Ishikawa';
prefecture_codes[idx++] = 'Ishikawa';
prefecture_names[idx] = 'Iwate';
prefecture_codes[idx++] = 'Iwate';
prefecture_names[idx] = 'Kagawa';
prefecture_codes[idx++] = 'Kagawa';
prefecture_names[idx] = 'Kagoshima';
prefecture_codes[idx++] = 'Kagoshima';
prefecture_names[idx] = 'Kanagawa';
prefecture_codes[idx++] = 'Kanagawa';
prefecture_names[idx] = 'Kochi';
prefecture_codes[idx++] = 'Kochi';
prefecture_names[idx] = 'Kumamoto';
prefecture_codes[idx++] = 'Kumamoto';
prefecture_names[idx] = 'Kyoto';
prefecture_codes[idx++] = 'Kyoto';
prefecture_names[idx] = 'Mie';
prefecture_codes[idx++] = 'Mie';
prefecture_names[idx] = 'Miyagi';
prefecture_codes[idx++] = 'Miyagi';
prefecture_names[idx] = 'Miyazaki';
prefecture_codes[idx++] = 'Miyazaki';
prefecture_names[idx] = 'Nagano';
prefecture_codes[idx++] = 'Nagano';
prefecture_names[idx] = 'Nagasaki';
prefecture_codes[idx++] = 'Nagasaki';
prefecture_names[idx] = 'Nara';
prefecture_codes[idx++] = 'Nara';
prefecture_names[idx] = 'Niigata';
prefecture_codes[idx++] = 'Niigata';
prefecture_names[idx] = 'Oita';
prefecture_codes[idx++] = 'Oita';
prefecture_names[idx] = 'Okayama';
prefecture_codes[idx++] = 'Okayama';
prefecture_names[idx] = 'Okinawa';
prefecture_codes[idx++] = 'Okinawa';
prefecture_names[idx] = 'Osaka';
prefecture_codes[idx++] = 'Osaka';
prefecture_names[idx] = 'Saga';
prefecture_codes[idx++] = 'Saga';
prefecture_names[idx] = 'Saitama';
prefecture_codes[idx++] = 'Saitama';
prefecture_names[idx] = 'Shiga';
prefecture_codes[idx++] = 'Shiga';
prefecture_names[idx] = 'Shimane';
prefecture_codes[idx++] = 'Shimane';
prefecture_names[idx] = 'Shizuoka';
prefecture_codes[idx++] = 'Shizuoka';
prefecture_names[idx] = 'Tochigi';
prefecture_codes[idx++] = 'Tochigi';
prefecture_names[idx] = 'Tokushima';
prefecture_codes[idx++] = 'Tokushima';
prefecture_names[idx] = 'Tokyo';
prefecture_codes[idx++] = 'Tokyo';
prefecture_names[idx] = 'Tottori';
prefecture_codes[idx++] = 'Tottori';
prefecture_names[idx] = 'Toyama';
prefecture_codes[idx++] = 'Toyama';
prefecture_names[idx] = 'Wakayama';
prefecture_codes[idx++] = 'Wakayama';
prefecture_names[idx] = 'Yamagata';
prefecture_codes[idx++] = 'Yamagata';
prefecture_names[idx] = 'Yamaguchi';
prefecture_codes[idx++] = 'Yamaguchi';
prefecture_names[idx] = 'Yamanashi';
prefecture_codes[idx++] = 'Yamanashi';

idx = 0;
var county_names = []; var county_codes = [];
county_names[idx] = 'Avon';
county_codes[idx++] = 'Avon';
county_names[idx] = 'Bedfordshire';
county_codes[idx++] = 'Bedfordshire';
county_names[idx] = 'Berkshire';
county_codes[idx++] = 'Berkshire';
county_names[idx] = 'Bristol';
county_codes[idx++] = 'Bristol';
county_names[idx] = 'Buckinghamshire';
county_codes[idx++] = 'Buckinghamshire';
county_names[idx] = 'Cambridgeshire';
county_codes[idx++] = 'Cambridgeshire';
county_names[idx] = 'Cheshire';
county_codes[idx++] = 'Cheshire';
county_names[idx] = 'Cleveland';
county_codes[idx++] = 'Cleveland';
county_names[idx] = 'Cornwall';
county_codes[idx++] = 'Cornwall';
county_names[idx] = 'Cumbria';
county_codes[idx++] = 'Cumbria';
county_names[idx] = 'Derbyshire';
county_codes[idx++] = 'Derbyshire';
county_names[idx] = 'Devon';
county_codes[idx++] = 'Devon';
county_names[idx] = 'Dorset';
county_codes[idx++] = 'Dorset';
county_names[idx] = 'Durham';
county_codes[idx++] = 'Durham';
county_names[idx] = 'East Riding of Yorkshire';
county_codes[idx++] = 'East Riding of Yorkshire';
county_names[idx] = 'East Sussex';
county_codes[idx++] = 'East Sussex';
county_names[idx] = 'Essex';
county_codes[idx++] = 'Essex';
county_names[idx] = 'Gloucestershire';
county_codes[idx++] = 'Gloucestershire';
county_names[idx] = 'Greater Manchester';
county_codes[idx++] = 'Greater Manchester';
county_names[idx] = 'Hampshire';
county_codes[idx++] = 'Hampshire';
county_names[idx] = 'Herefordshire';
county_codes[idx++] = 'Herefordshire';
county_names[idx] = 'Hertfordshire';
county_codes[idx++] = 'Hertfordshire';
county_names[idx] = 'Humberside';
county_codes[idx++] = 'Humberside';
county_names[idx] = 'Isle of Wight';
county_codes[idx++] = 'Isle of Wight';
county_names[idx] = 'Isles of Scilly';
county_codes[idx++] = 'Isles of Scilly';
county_names[idx] = 'Kent';
county_codes[idx++] = 'Kent';
county_names[idx] = 'Lancashire';
county_codes[idx++] = 'Lancashire';
county_names[idx] = 'Leicestershire';
county_codes[idx++] = 'Leicestershire';
county_names[idx] = 'Lincolnshire';
county_codes[idx++] = 'Lincolnshire';
county_names[idx] = 'London';
county_codes[idx++] = 'London';
county_names[idx] = 'Merseyside';
county_codes[idx++] = 'Merseyside';
county_names[idx] = 'Middlesex';
county_codes[idx++] = 'Middlesex';
county_names[idx] = 'Norfolk';
county_codes[idx++] = 'Norfolk';
county_names[idx] = 'North Yorkshire';
county_codes[idx++] = 'North Yorkshire';
county_names[idx] = 'Northamptonshire';
county_codes[idx++] = 'Northamptonshire';
county_names[idx] = 'Northumberland';
county_codes[idx++] = 'Northumberland';
county_names[idx] = 'Nottinghamshire';
county_codes[idx++] = 'Nottinghamshire';
county_names[idx] = 'Oxfordshire';
county_codes[idx++] = 'Oxfordshire';
county_names[idx] = 'Rutland';
county_codes[idx++] = 'Rutland';
county_names[idx] = 'Shropshire';
county_codes[idx++] = 'Shropshire';
county_names[idx] = 'Somerset';
county_codes[idx++] = 'Somerset';
county_names[idx] = 'South Yorkshire';
county_codes[idx++] = 'South Yorkshire';
county_names[idx] = 'Staffordshire';
county_codes[idx++] = 'Staffordshire';
county_names[idx] = 'Suffolk';
county_codes[idx++] = 'Suffolk';
county_names[idx] = 'Surrey';
county_codes[idx++] = 'Surrey';
county_names[idx] = 'Tyne and Wear';
county_codes[idx++] = 'Tyne and Wear';
county_names[idx] = 'Warwickshire';
county_codes[idx++] = 'Warwickshire';
county_names[idx] = 'West Midlands';
county_codes[idx++] = 'West Midlands';
county_names[idx] = 'West Sussex';
county_codes[idx++] = 'West Sussex';
county_names[idx] = 'West Yorkshire';
county_codes[idx++] = 'West Yorkshire';
county_names[idx] = 'Wiltshire';
county_codes[idx++] = 'Wiltshire';
county_names[idx] = 'Worcestershire';
county_codes[idx++] = 'Worcestershire';
county_names[idx] = 'Antrim';
county_codes[idx++] = 'Antrim';
county_names[idx] = 'Armagh';
county_codes[idx++] = 'Armagh';
county_names[idx] = 'Down';
county_codes[idx++] = 'Down';
county_names[idx] = 'Fermanagh';
county_codes[idx++] = 'Fermanagh';
county_names[idx] = 'Londonderry';
county_codes[idx++] = 'Londonderry';
county_names[idx] = 'Tyrone';
county_codes[idx++] = 'Tyrone';
county_names[idx] = 'Aberdeen City';
county_codes[idx++] = 'Aberdeen City';
county_names[idx] = 'Aberdeenshire';
county_codes[idx++] = 'Aberdeenshire';
county_names[idx] = 'Angus';
county_codes[idx++] = 'Angus';
county_names[idx] = 'Argyll and Bute';
county_codes[idx++] = 'Argyll and Bute';
county_names[idx] = 'Borders';
county_codes[idx++] = 'Borders';
county_names[idx] = 'Clackmannan';
county_codes[idx++] = 'Clackmannan';
county_names[idx] = 'Dumfries and Galloway';
county_codes[idx++] = 'Dumfries and Galloway';
county_names[idx] = 'East Ayrshire';
county_codes[idx++] = 'East Ayrshire';
county_names[idx] = 'East Dunbartonshire';
county_codes[idx++] = 'East Dunbartonshire';
county_names[idx] = 'East Lothian';
county_codes[idx++] = 'East Lothian';
county_names[idx] = 'East Renfrewshire';
county_codes[idx++] = 'East Renfrewshire';
county_names[idx] = 'Edinburgh City';
county_codes[idx++] = 'Edinburgh City';
county_names[idx] = 'Falkirk';
county_codes[idx++] = 'Falkirk';
county_names[idx] = 'Fife';
county_codes[idx++] = 'Fife';
county_names[idx] = 'Glasgow (City of)';
county_codes[idx++] = 'Glasgow (City of)';
county_names[idx] = 'Highland';
county_codes[idx++] = 'Highland';
county_names[idx] = 'Inverclyde';
county_codes[idx++] = 'Inverclyde';
county_names[idx] = 'Midlothian';
county_codes[idx++] = 'Midlothian';
county_names[idx] = 'Moray';
county_codes[idx++] = 'Moray';
county_names[idx] = 'North Ayrshire';
county_codes[idx++] = 'North Ayrshire';
county_names[idx] = 'North Lanarkshire';
county_codes[idx++] = 'North Lanarkshire';
county_names[idx] = 'Orkney';
county_codes[idx++] = 'Orkney';
county_names[idx] = 'Perthshire and Kinross';
county_codes[idx++] = 'Perthshire and Kinross';
county_names[idx] = 'Renfrewshire';
county_codes[idx++] = 'Renfrewshire';
county_names[idx] = 'Roxburghshire';
county_codes[idx++] = 'Roxburghshire';
county_names[idx] = 'Shetland';
county_codes[idx++] = 'Shetland';
county_names[idx] = 'South Ayrshire';
county_codes[idx++] = 'South Ayrshire';
county_names[idx] = 'South Lanarkshire';
county_codes[idx++] = 'South Lanarkshire';
county_names[idx] = 'Stirling';
county_codes[idx++] = 'Stirling';
county_names[idx] = 'West Dunbartonshire';
county_codes[idx++] = 'West Dunbartonshire';
county_names[idx] = 'West Lothian';
county_codes[idx++] = 'West Lothian';
county_names[idx] = 'Western Isles';
county_codes[idx++] = 'Western Isles';
county_names[idx] = 'Blaenau Gwent';
county_codes[idx++] = 'Blaenau Gwent';
county_names[idx] = 'Bridgend';
county_codes[idx++] = 'Bridgend';
county_names[idx] = 'Caerphilly';
county_codes[idx++] = 'Caerphilly';
county_names[idx] = 'Cardiff';
county_codes[idx++] = 'Cardiff';
county_names[idx] = 'Carmarthenshire';
county_codes[idx++] = 'Carmarthenshire';
county_names[idx] = 'Ceredigion';
county_codes[idx++] = 'Ceredigion';
county_names[idx] = 'Conwy';
county_codes[idx++] = 'Conwy';
county_names[idx] = 'Denbighshire';
county_codes[idx++] = 'Denbighshire';
county_names[idx] = 'Flintshire';
county_codes[idx++] = 'Flintshire';
county_names[idx] = 'Gwynedd';
county_codes[idx++] = 'Gwynedd';
county_names[idx] = 'Isle of Anglesey';
county_codes[idx++] = 'Isle of Anglesey';
county_names[idx] = 'Merthyr Tydfil';
county_codes[idx++] = 'Merthyr Tydfil';
county_names[idx] = 'Monmouthshire';
county_codes[idx++] = 'Monmouthshire';
county_names[idx] = 'Neath Port Talbot';
county_codes[idx++] = 'Neath Port Talbot';
county_names[idx] = 'Newport';
county_codes[idx++] = 'Newport';
county_names[idx] = 'Pembrokeshire';
county_codes[idx++] = 'Pembrokeshire';
county_names[idx] = 'Powys';
county_codes[idx++] = 'Powys';
county_names[idx] = 'Rhondda Cynon Taff';
county_codes[idx++] = 'Rhondda Cynon Taff';
county_names[idx] = 'Swansea';
county_codes[idx++] = 'Swansea';
county_names[idx] = 'Torfaen';
county_codes[idx++] = 'Torfaen';
county_names[idx] = 'The Vale of Glamorgan';
county_codes[idx++] = 'The Vale of Glamorgan';
county_names[idx] = 'Wrexham';
county_codes[idx++] = 'Wrexham';
county_names[idx] = 'Channel Islands';
county_codes[idx++] = 'Channel Islands';
county_names[idx] = 'Isle of Man';
county_codes[idx++] = 'Isle of Man';

idx = 0;
var territory_names = []; var territory_codes = [];
territory_names[idx] = 'Austrialian Capital Territory';
territory_codes[idx++] = 'Austrialian Capital Territory';
territory_names[idx] = 'New South Wales';
territory_codes[idx++] = 'New South Wales';
territory_names[idx] = 'Nothern Territory';
territory_codes[idx++] = 'Nothern Territory';
territory_names[idx] = 'Queensland';
territory_codes[idx++] = 'Queensland';
territory_names[idx] = 'South Australia';
territory_codes[idx++] = 'South Australia';
territory_names[idx] = 'Tasmania';
territory_codes[idx++] = 'Tasmania';
territory_names[idx] = 'Victoria';
territory_codes[idx++] = 'Victoria';
territory_names[idx] = 'Western Australia';
territory_codes[idx++] = 'Western Australia';

function flipStates(id, country_code) {
	var e = $(id);
	
	// Clear existing options.
	for (i = e.length; i >= 0; --i) {
		e[i] = null;
	}
	
	// States?
	if (country_code == 'US') {
		for (i = 0; i < state_names.length; ++i) {
			e[e.length] = new Option(state_names[i], state_codes[i]);
		}
		$(id).style.visibility = 'visible';
	}
	
	// States (Brazil)?
	else if (country_code == 'BR') {
		for (i = 0; i < state_br_names.length; ++i) {
			e[e.length] = new Option(state_br_names[i], state_br_codes[i]);
		}
		$(id).style.visibility = 'visible';
	}
	
	// Provinces (Canada)?
	else if (country_code == 'CA') {
		for (i = 0; i < province_ca_names.length; ++i) {
			e[e.length] = new Option(province_ca_names[i], province_ca_codes[i]);
		}
		$(id).style.visibility = 'visible';
	}
	
	// Provinces (China)?
	else if (country_code == 'CN') {
		for (i = 0; i < territory_cn_names.length; ++i) {
			e[e.length] = new Option(territory_cn_names[i], territory_cn_codes[i]);
		}
		$(id).style.visibility = 'visible';
	}
	
	// Provinces (Italy)?
	else if (country_code == 'IT') {
		for (i = 0; i < province_it_names.length; ++i) {
			e[e.length] = new Option(province_it_names[i], province_it_codes[i]);
		}
		$(id).style.visibility = 'visible';
	}
	
	// Provinces (Spain)?
	else if (country_code == 'ES') {
		for (i = 0; i < province_es_names.length; ++i) {
			e[e.length] = new Option(province_es_names[i], province_es_codes[i]);
		}
		$(id).style.visibility = 'visible';
	}
	
	// Prefectures?
	else if (country_code == 'JP') {
		for (i = 0; i < prefecture_names.length; ++i) {
			e[e.length] = new Option(prefecture_names[i], prefecture_codes[i]);
		}
		$(id).style.visibility = 'visible';
	}
	
	// Counties?
	else if (country_code == 'GB') {
		for (i = 0; i < county_names.length; ++i) {
			e[e.length] = new Option(county_names[i], county_codes[i]);
		}
		$(id).style.visibility = 'visible';
	}
	
	// Territories?
	else if (country_code == 'AU') {
		for (i = 0; i < territory_names.length; ++i) {
			e[e.length] = new Option(territory_names[i], territory_codes[i]);
		}
		$(id).style.visibility = 'visible';
	}
	
	// Other?
	else {
		e[e.length] = new Option('', '');
		$(id).style.visibility = 'hidden';
	}
}

function copyBilling() {
	var copy = $('copy-billing').checked;

	// If true, copy billing information to shipping and disable the
	// fields.
	if (copy) {
		// Remember the previous shipping zip so we only signal change
		// if it has actually changed.
		var old_shipping_zip = $('shipping-zip').value;
	
		$('shipping-first').value = $('billing-first').value;
		$('shipping-last').value = $('billing-last').value;
		$('shipping-addr1').value = $('billing-addr1').value;
		$('shipping-addr2').value = $('billing-addr2').value;
		$('shipping-city').value = $('billing-city').value;
		$('shipping-country').value = $('billing-country').value;
		flipStates('shipping-state', $('shipping-country').value);
		$('shipping-state').value = $('billing-state').value;
		$('shipping-zip').value = $('billing-zip').value;
		$('shipping-phone').value = $('billing-phone').value;
		
		// If the shipping zip has changed, signal.
		if ($('shipping-zip').value != old_shipping_zip &&
			$('shipping-zip').onchange)
		{
			$('shipping-zip').onchange();
		}
		
		$('shipping-first').disable();
		$('shipping-last').disable();
		$('shipping-addr1').disable();
		$('shipping-addr2').disable();
		$('shipping-city').disable();
		$('shipping-country').disable();
		$('shipping-state').disable();
		$('shipping-zip').disable();
		$('shipping-phone').disable();
	}
	
	// Otherwise enable the fields.
	else {
		$('shipping-first').enable();
		$('shipping-last').enable();
		$('shipping-addr1').enable();
		$('shipping-addr2').enable();
		$('shipping-city').enable();
		$('shipping-country').enable();
		$('shipping-state').enable();
		$('shipping-zip').enable();
		$('shipping-phone').enable();
	}
}

function validateCheckout() {
	var elements = $('checkout-form').getElements();
	
	// All elements must be filled in, except in some cases.
	var ship_country = $('shipping-country').value;
	var bill_country = $('billing-country').value;
	var complete = true;
	for (var i = 0; i < elements.length; ++i) {
		var id = elements[i].identify();
		if (id.endsWith('-addr2') || id == 'copy-billing') {
			continue;
		}
		if (id == 'shipping-state' && !requiresState(ship_country)) {
			continue;
		}
		if (id == 'billing-state' && !requiresState(bill_country)) {
			continue;
		}
		if (id == 'shipping-zip' && !requiresZip(ship_country)) {
			continue;
		}
		if (id == 'billing-zip' && !requiresZip(bill_country)) {
			continue;
		}
		if (!elements[i].present()) {
			complete = false;
			break;
		}
	}
	
	// The credit card number must be 15-16 digits and the card security
	// code 3-4 digits.
	if ($('card-number').value.length < 15 ||
		$('card-number').value.length > 16 ||
		$('card-csc').value.length < 3 ||
		$('card-csc').value.length > 4)
	{
		complete = false;
	}
	
	// If incomplete, display the fill form text. Otherwise hide.
	$('fill-form').style.visibility = (complete) ? 'hidden' : 'visible';
	return complete;
}

