#!/usr/bin/python

# Visitor Information - Process Countries

# By Brian Prentice
# August 2000

import sys, urllib, string

def SortFunc(A, B):
	if (Counts[A] < Counts[B]):
		return 1
	elif (Counts[A] == Counts[B]):
		if (A < B):
			return -1
		elif (A == B):
			return 0
		else:
			return 1
	else:
		return -1

CountryCodes = {
	'AC': 'Ascension Island',
	'AD': 'Andorra',
	'AE': 'United Arab Emirates',
	'AF': 'Afghanistan',
	'AG': 'Antigua and Barbuda',
	'AI': 'Anguilla',
	'AL': 'Albania',
	'AM': 'Armenia',
	'AN': 'Netherlands Antilles',
	'AO': 'Angola',
	'AQ': 'Antarctica',
	'AR': 'Argentina',
	'AS': 'American Samoa',
	'AT': 'Austria',
	'AU': 'Australia',
	'AW': 'Aruba',
	'AX': 'Aland Islands',
	'AZ': 'Azerbaijan',
	'BA': 'Bosnia and Herzegovina',
	'BB': 'Barbados',
	'BD': 'Bangladesh',
	'BE': 'Belgium',
	'BF': 'Burkina Faso',
	'BG': 'Bulgaria',
	'BH': 'Bahrain',
	'BI': 'Burundi',
	'BJ': 'Benin',
	'BM': 'Bermuda',
	'BN': 'Brunei Darussalam',
	'BO': 'Bolivia',
	'BR': 'Brazil',
	'BS': 'Bahamas',
	'BT': 'Bhutan',
	'BV': 'Bouvet Island',
	'BW': 'Botswana',
	'BY': 'Belarus',
	'BZ': 'Belize',
	'CA': 'Canada',
	'CC': 'Cocos (Keeling) Islands',
	'CD': 'Congo Democratic Republic',
	'CF': 'Central African Republic',
	'CG': 'Congo',
	'CH': 'Switzerland',
	'CI': 'Cote D\'Ivoire (Ivory Coast)',
	'CK': 'Cook Islands',
	'CL': 'Chile',
	'CM': 'Cameroon',
	'CN': 'China',
	'CO': 'Colombia',
	'CR': 'Costa Rica',
	'CS': 'Czechoslovakia (former)',
	'CU': 'Cuba',
	'CV': 'Cape Verde',
	'CX': 'Christmas Island',
	'CY': 'Cyprus',
	'CZ': 'Czech Republic',
	'DE': 'Germany',
	'DJ': 'Djibouti',
	'DK': 'Denmark',
	'DM': 'Dominica',
	'DO': 'Dominican Republic',
	'DZ': 'Algeria',
	'EC': 'Ecuador',
	'EE': 'Estonia',
	'EG': 'Egypt',
	'EH': 'Western Sahara',
	'ER': 'Eritrea',
	'ES': 'Spain',
	'ET': 'Ethiopia',
	'EU': 'European Union',
	'FI': 'Finland',
	'FJ': 'Fiji',
	'FK': 'Falkland Islands (Malvinas)',
	'FM': 'Micronesia',
	'FO': 'Faroe Islands',
	'FR': 'France',
	'FX': 'France, Metropolitan',
	'GA': 'Gabon',
	'GB': 'Great Britain (UK)',
	'GD': 'Grenada',
	'GE': 'Georgia',
	'GF': 'French Guiana',
	'GG': 'Guernsey',
	'GH': 'Ghana',
	'GI': 'Gibraltar',
	'GL': 'Greenland',
	'GM': 'Gambia',
	'GN': 'Guinea',
	'GP': 'Guadeloupe',
	'GQ': 'Equatorial Guinea',
	'GR': 'Greece',
	'GS': 'S. Georgia and S. Sandwich Isls.',
	'GT': 'Guatemala',
	'GU': 'Guam',
	'GW': 'Guinea-Bissau',
	'GY': 'Guyana',
	'HK': 'Hong Kong',
	'HM': 'Heard and McDonald Islands',
	'HN': 'Honduras',
	'HR': 'Croatia (Hrvatska)',
	'HT': 'Haiti',
	'HU': 'Hungary',
	'ID': 'Indonesia',
	'IE': 'Ireland',
	'IL': 'Israel',
	'IM': 'Isle of Man',
	'IN': 'India',
	'IO': 'British Indian Ocean Territory',
	'IQ': 'Iraq',
	'IR': 'Iran',
	'IS': 'Iceland',
	'IT': 'Italy',
	'JE': 'Jersey',
	'JM': 'Jamaica',
	'JO': 'Jordan',
	'JP': 'Japan',
	'KE': 'Kenya',
	'KG': 'Kyrgyzstan',
	'KH': 'Cambodia',
	'KI': 'Kiribati',
	'KM': 'Comoros',
	'KN': 'Saint Kitts and Nevis',
	'KP': 'Korea (North)',
	'KR': 'Korea (South)',
	'KW': 'Kuwait',
	'KY': 'Cayman Islands',
	'KZ': 'Kazakhstan',
	'LA': 'Laos',
	'LB': 'Lebanon',
	'LC': 'Saint Lucia',
	'LI': 'Liechtenstein',
	'LK': 'Sri Lanka',
	'LR': 'Liberia',
	'LS': 'Lesotho',
	'LT': 'Lithuania',
	'LU': 'Luxembourg',
	'LV': 'Latvia',
	'LY': 'Libya',
	'MA': 'Morocco',
	'MC': 'Monaco',
	'MD': 'Moldova',
	'ME': 'Montenegro',
	'MF': 'Saint Martin',
	'MG': 'Madagascar',
	'MH': 'Marshall Islands',
	'MK': 'Macedonia',
	'ML': 'Mali',
	'MM': 'Myanmar',
	'MN': 'Mongolia',
	'MO': 'Macau',
	'MP': 'Northern Mariana Islands',
	'MQ': 'Martinique',
	'MR': 'Mauritania',
	'MS': 'Montserrat',
	'MT': 'Malta',
	'MU': 'Mauritius',
	'MV': 'Maldives',
	'MW': 'Malawi',
	'MX': 'Mexico',
	'MY': 'Malaysia',
	'MZ': 'Mozambique',
	'NA': 'Namibia',
	'NC': 'New Caledonia',
	'NE': 'Niger',
	'NF': 'Norfolk Island',
	'NG': 'Nigeria',
	'NI': 'Nicaragua',
	'NL': 'Netherlands',
	'NO': 'Norway',
	'NP': 'Nepal',
	'NR': 'Nauru',
	'NT': 'Neutral Zone',
	'NU': 'Niue',
	'NZ': 'New Zealand (Aotearoa)',
	'OM': 'Oman',
	'PA': 'Panama',
	'PE': 'Peru',
	'PF': 'French Polynesia',
	'PG': 'Papua New Guinea',
	'PH': 'Philippines',
	'PK': 'Pakistan',
	'PL': 'Poland',
	'PM': 'St. Pierre and Miquelon',
	'PN': 'Pitcairn',
	'PR': 'Puerto Rico',
	'PS': 'Palestinian Territory',
	'PT': 'Portugal',
	'PW': 'Palau',
	'PY': 'Paraguay',
	'QA': 'Qatar',
	'RE': 'Reunion',
	'RS': 'Serbia',
	'RO': 'Romania',
	'RU': 'Russian Federation',
	'RW': 'Rwanda',
	'SA': 'Saudi Arabia',
	'SB': 'Solomon Islands',
	'SC': 'Seychelles',
	'SD': 'Sudan',
	'SE': 'Sweden',
	'SG': 'Singapore',
	'SH': 'St. Helena',
	'SI': 'Slovenia',
	'SJ': 'Svalbard and Jan Mayen Islands',
	'SK': 'Slovak Republic',
	'SL': 'Sierra Leone',
	'SM': 'San Marino',
	'SN': 'Senegal',
	'SO': 'Somalia',
	'SR': 'Suriname',
	'ST': 'Sao Tome and Principe',
	'SU': 'USSR (former)',
	'SV': 'El Salvador',
	'SY': 'Syria',
	'SZ': 'Swaziland',
	'TC': 'Turks and Caicos Islands',
	'TD': 'Chad',
	'TF': 'French Southern Territories',
	'TG': 'Togo',
	'TH': 'Thailand',
	'TJ': 'Tajikistan',
	'TK': 'Tokelau',
	'TM': 'Turkmenistan',
	'TN': 'Tunisia',
	'TO': 'Tonga',
	'TP': 'East Timor',
	'TR': 'Turkey',
	'TT': 'Trinidad and Tobago',
	'TV': 'Tuvalu',
	'TW': 'Taiwan',
	'TZ': 'Tanzania',
	'UA': 'Ukraine',
	'UG': 'Uganda',
	'UK': 'United Kingdom',
	'UM': 'US Minor Outlying Islands',
	'US': 'United States',
	'UY': 'Uruguay',
	'UZ': 'Uzbekistan',
	'VA': 'Vatican City State (Holy See)',
	'VC': 'Saint Vincent and the Grenadines',
	'VE': 'Venezuela',
	'VG': 'Virgin Islands (British)',
	'VI': 'Virgin Islands (U.S.)',
	'VN': 'Viet Nam',
	'VU': 'Vanuatu',
	'WF': 'Wallis and Futuna Islands',
	'WS': 'Samoa',
	'XK': 'Kosovo',
	'YE': 'Yemen',
	'YT': 'Mayotte',
	'YU': 'Yugoslavia',
	'ZA': 'South Africa',
	'ZM': 'Zambia',
	'ZR': 'Zaire',
	'ZW': 'Zimbabwe'}

sys.stdin = urllib.urlopen(string.replace(sys.argv[1], '\\', ''))
ls = sys.stdin.readlines()

print 'Content-type: text/html\n'
print '<HTML>'
print '<HEAD><TITLE>Visitor Information</TITLE></HEAD>'
print '<BODY><CENTER>'
print '<H2>Visitor Information</H2>'
print '<TABLE BORDER>'

Counts = {}
for l in ls[1:]:
	if (l[-4] == '.'):
		Country = l[-3:-1]
		Country = string.upper(Country)
		if (CountryCodes.has_key(Country) == 1):
			Country = CountryCodes[Country]
			if (Counts.has_key(Country)):
				Counts[Country] = Counts[Country] + 1
			else:
				Counts[Country] = 1

print '<TR><TH>Country</TH><TH>Visits</TH></TR>'
NoCountries = 0

Countries = Counts.keys()
Countries.sort(SortFunc)
for Country in Countries:
	print '<TR><TD>' + Country + '</TD><TD ALIGN=RIGHT>' + str(Counts[Country]) + '</TD></TR>'
	NoCountries = NoCountries + 1

if (NoCountries == 1):
	s = 'y'
else:
	s = 'ies'
print '<TR><TD COLSPAN=2 ALIGN=CENTER>Visits from ' + str(NoCountries) \
																+ ' countr' + s + '</TD></TR>'
print '</TABLE></CENTER></BODY></HTML>'
