/*
javascript for www.carbontree.net

file: script_carbon_calc.js
author: Debbie Thompson
date: April 11, 2008

This script is used on the carbon calculator form.

These functions find the distance between two cities, calculates the carbon, and the offset cost.

distance calculation from http://www.airtimetable.com/Air_mile_calculator.htm

Use this website to find city lat/long to add cities at the bottom of this file.
Add the same exact city name string in the html select menu too.
(latitude -=south, +=north; longitude -=west, +=east)
http://world.maporama.com/default.aspx

*/

function init () {			/* clear form on load */
	document.carbonOffsetForm.flightMi.value = 0;
	document.carbonOffsetForm.flightKm.value = 0;
	document.carbonOffsetForm.distFlightTonsCO2.value = 0.0;
	document.carbonOffsetForm.distFlightOffsetCost.value = 0.00;

	document.carbonOffsetForm.departCity.value = "Select";
	document.carbonOffsetForm.destCity.value = "Select";
	document.carbonOffsetForm.flightResultKm.value = 0;
	document.carbonOffsetForm.cityFlightTonsCO2.value = 0.0;
	document.carbonOffsetForm.cityFlightOffsetCost.value = 0.00;

	document.carbonOffsetForm.totalTonsCO2.value = 0;
	document.carbonOffsetForm.totalOffsetCost.value = 0;
	document.carbonOffsetForm.flightMi.focus();
	
	document.carbonOffsetForm.donation.value = 0;
	
	document.payPalForm.amount.value = 0;

}

function submitForm(form) {
	var totalMetricTonCO2 = 0;
	var totalOffsetCost = 0;
	
	var distFlightCO2 = parseFloat(form.distFlightTonsCO2.value);
	var cityFlightCO2 = parseFloat(form.cityFlightTonsCO2.value);
	
	var distFlightCost = parseFloat(form.distFlightOffsetCost.value);
	var cityFlightCost = parseFloat(form.cityFlightOffsetCost.value);


	if ( (distFlightCO2 > 0) && (cityFlightCO2 > 0) ) {
		alert ("Note on Air Flights: you entered values for both distance and cities, these will be added together.");
	}


   	totalMetricTonCO2 = Math.round( (distFlightCO2 + cityFlightCO2) *100)/100; 		// add subtotals here
  	document.carbonOffsetForm.totalTonsCO2.value = totalMetricTonCO2;
  	
	totalOffsetCost = dollars(distFlightCost + cityFlightCost); 		// add subtotals here
   	document.carbonOffsetForm.totalOffsetCost.value = totalOffsetCost;
	
	document.carbonOffsetForm.donation.value = totalOffsetCost;
	
	document.payPalForm.amount.value = totalOffsetCost;
}



function donateAmount() {
	document.payPalForm.amount.value = document.carbonOffsetForm.donation.value;
}



//not used for now:
function isFieldBlank(theField) {
     if(theField.value == "")
         return true;
     else
         return false;
 }


function flightDist (form) {
	var mitokm = 1.609344;
	var foundError = false;
	var km = 0;
	var mi = 0;
	var metricTonsCO2 = 0;
	
	mi = parseInt(form.flightMi.value);
	km = parseInt(form.flightKm.value);

	// alert ("mi: " + mi + "   km: " + km);
	// add more error checking here.

	if ( isNaN(mi) || isNaN(km) ) {
		foundError = true;
	}
	
	if ( (mi > 0) && (km > 0) ) {
		foundError = true; // two values entered
	}

// calculate offsets, put the results on the form. 
// If error, then clear whole section. document.carbonOffsetForm.reset() would clear entire form, 
// but we may not want this if there are more sections.
	if (foundError) {
		alert ("Enter a VALID Distance for EITHER miles OR km.");
		document.carbonOffsetForm.flightMi.value = 0; /* clear this part of form */
		document.carbonOffsetForm.flightKm.value = 0;
		document.carbonOffsetForm.distFlightTonsCO2.value = 0;
		document.carbonOffsetForm.distFlightOffsetCost.value = 0;
		document.carbonOffsetForm.flightMi.focus();
	}
	else if (km > 0) {
		metricTonsCO2 = calcAirTravelCO2(km);
		document.carbonOffsetForm.distFlightTonsCO2.value = metricTonsCO2;
		document.carbonOffsetForm.distFlightOffsetCost.value = dollars(calcAirTravelOffsetCost(metricTonsCO2));
	}
	else if (mi > 0) {
		km = mi * mitokm;
		metricTonsCO2 = calcAirTravelCO2(km);
		document.carbonOffsetForm.distFlightTonsCO2.value = metricTonsCO2;
		document.carbonOffsetForm.distFlightOffsetCost.value = dollars(calcAirTravelOffsetCost(metricTonsCO2));
	}

}



function flightCity (form) {
	var departCityIndex = 0;
	var destCityIndex = 0;
	var departCityLat = "";
	var departCityLong = "";
	var destCityLat = "";
	var destCityLong = "";
	var km = 0;
	var metricTonsCO2 = 0;
	var rndTrip;


// select menu value is the cityLatLongs array index to the city name
// This is created by makeSelectmenu()
	departCityIndex = parseInt(form.departCity.value);
	destCityIndex = parseInt(form.destCity.value);


// these are strings like "62.12 E", see global array at the file end
	departCityLat = cityLatLongs[departCityIndex+1];
	departCityLong = cityLatLongs[departCityIndex+2];

	destCityLat = cityLatLongs[destCityIndex+1];
	destCityLong = cityLatLongs[destCityIndex+2];

// calculate offsets only if both cities are selected, re-calculate each time a city is changed, put the results on the form
	if ( (departCityLat != undefined) && (destCityLat != undefined) ) {
		km = calcKm(departCityLat, departCityLong, destCityLat, destCityLong); // these km are already round trip

		if ( document.carbonOffsetForm.roundTrip[1].checked ) km = km / 2;   //  Half distance for one way
		
		document.carbonOffsetForm.flightResultKm.value = (formatNumber(km, 1));
		
		metricTonsCO2 = calcAirTravelCO2(km);
		
		document.carbonOffsetForm.cityFlightTonsCO2.value = metricTonsCO2;
		document.carbonOffsetForm.cityFlightOffsetCost.value = dollars(calcAirTravelOffsetCost(metricTonsCO2));
		
		}
}



function calcAirTravelCO2(km)	{
	var co2 = 0;

// the km were already doubled to get round trip
// calculate the metric tons depending on the haul factor - this gives kg. then /1000 to convert to metric tons.

	if (km <= 500) {
		co2 = (km * 0.15) / 1000;  // short haul
	}
	else if (km <= 1600) {
		co2 = (km * 0.12) / 1000;  // medium haul
	}
	else {
		co2 = (km * 0.11) / 1000;  // long haul
	}

	co2 = Math.round(co2*100)/100; // round it off
	
	return (co2);
}



function calcAirTravelOffsetCost(co2)	{
	var offsetCost = 0;
	var dollarsPerTon = 18;
	
	offsetCost = co2 * dollarsPerTon;
	
	return (offsetCost);
}



function calcKm(lat1h, long1h, lat2h, long2h) {
	var degtorad = 0.01745329;
	var radtodeg = 57.29577951;

	var lat1 = parseFloat(lat1h);
	var lat2 = parseFloat(lat2h);
	var long1 = parseFloat(long1h);
	var long2 = parseFloat(long2h);


  if ((lat1h.lastIndexOf("S"))!=-1 || (lat1h.lastIndexOf("s"))!=-1)
    lat1 = (lat1 * (-1));
  if ((lat1h.lastIndexOf("W"))!=-1 || (lat1h.lastIndexOf("w"))!=-1)
    lat1 = (lat1 * (-1));

  if((lat2h.lastIndexOf("S"))!=-1 || (lat2h.lastIndexOf("s"))!=-1)
    lat2 = (lat2 * (-1));
  if((lat2h.lastIndexOf("W")!=-1) || (lat2h.lastIndexOf("w"))!=-1)
    lat2 = (lat2 * (-1));

  if((long1h.lastIndexOf("S")!=-1) || (long1h.lastIndexOf("s"))!=-1)
    long1 = (long1 * (-1));
  if((long1h.lastIndexOf("W")!=-1) || (long1h.lastIndexOf("w"))!=-1)
    long1 = (long1 * (-1));

  if((long2h.lastIndexOf("S")!=-1) || (long2h.lastIndexOf("s"))!=-1)
    long2 = (long2 * (-1));
  if((long2h.lastIndexOf("W")!=-1) || (long2h.lastIndexOf("w"))!=-1)
    long2 = (long2 * (-1));

  var dlong = (long1 - long2);

  var dvalue = (Math.sin(lat1 * degtorad) * Math.sin(lat2 * degtorad))
   + (Math.cos(lat1 * degtorad) * Math.cos(lat2 * degtorad)
   * Math.cos(dlong * degtorad));

  var dd = Math.acos(dvalue) * radtodeg;

// These are round trip distances

  var miles = 2 * (dd * 69.16); // miles not really used
  miles = (miles * 100)/100;  
  var km = 2 * (dd * 111.302);
  km =  (km * 100)/100;
 
  return (km);

}



function makeSelectMenu () {
// Use the global array to generate the departure and destination select menus in the html.
// Remember that the city is every 3rd array element.
// Use i as the value in the select menu - this will be equal to the array index of the city - very handy.
// example:
// <select> -- this is already in html
// <option selected value="Select">Select</option>
// <option value="1">Wichita, Kan.</option>
// </select>  -- this is already in html

	document.write ("<option selected value=\"Select\">Select</option>");
	
	for (i=0; (i<cityLatLongs.length); i=i+3) {			
		document.write ("<option value=\"" + i + "\">" + cityLatLongs[i] + "</option>");
	}
}


function dollars(n) {
   n=eval(n);
   n=Math.round(n*100)/100;
// conditional below adds a 0 if the result is 45.7 or adds 2 zeros if the result is 45
   return 	(n == Math.round(n)) ? n += ".00" : 
			(n*10 == Math.round(n*10)) ? n +="0" : 
			n;
}


function formatNumber(Number, Decimals) {

 Number = "" + Number;
 Decimals = "" + Decimals;
 var OriginalNumber = Number;
 var Sign = 1;
 var Pad = "";
 var Count = 0;

 if(parseFloat(Number)) {
  Number = parseFloat(Number);
 }
 else {
  Number = 0;
 }

 if((parseInt(Decimals,10)) || (parseInt(Decimals,10) == 0)) {
  Decimals = parseInt(Decimals,10);
 }
 else {
  Decimals = 2;
 }

 if(Number < 0) {
  Sign = -1;
  Number *= Sign;
 }

 if(Decimals < 0)
  Decimals *= -1;

 Number = "" + Math.floor(Number * Math.pow(10,Decimals + 1) + 5);

 if((Number.substring(1,2) == '.') || (Number=='NaN'))
  return(OriginalNumber);

 if(Number.length < Decimals +1)
 {
  for(Count = Number.length; Count <= Decimals; Count++)
  Pad += "0"
 }

 Number = Pad + Number;

 if(Decimals == 0) {
  Number = Number.substring(0, Number.length -1)
 }
 else {
  Number = Number.substring(0,Number.length - Decimals -1) +  "." +
          Number.substring(Number.length - Decimals -1, Number.length -1);
 }

 if(Sign == -1)
  Number = "-" + Number;

return(Number)
}


// --------- only city lat-long global array below -----

cityLatLongs = [
// This text comes from an excel file, just highlight and paste the text in the rows/columns here
// then add the bracket at the end:
// This array is city, latitude, longitude, city, latitude, longitude, ...
"Herat,		Afghanistan",	"34.20 N",	"62.12 E",
"Kabul,		Afghanistan",	"34.31 N",	"69.12 E",
"Algiers,		Algeria",	"36.50 N",	"3.0 E",
"Luzamba,		Angola",	"4.59 S",	"23.26 E",
"Namibe,		Angola",	"15.10 S",	"12.09 E",
"Buenos Aires,		Argentina",	"34.35 S",	"58.22 W",
"C&oacute;rdoba,		Argentina",	"31.28 S",	"64.10 W",
"Ushuaia,		Argentina",	"54.81 S",	"68.33 W",
"Adelaide,		Australia",	"34.55 S",	"138.36 E",
"Alice Springs, 		Australia",	"23.42 S",	"133.53 E",
"Brisbane,		Australia",	"27.29 S",	"153.8 E",
"Cairns,		Australia",	"16.91 S",	"145.77 E",
"Canberra,		Australia",	"35.17 S",	"149.08 E",
"Darwin,		Australia",	"12.28 S",	"130.50 E",
"Hobart,		Australia",	"42.52 S",	"147.19 E",
"Melbourne,		Australia",	"37.47 S",	"144.58 E",
"Perth,		Australia",	"31.57 S",	"115.52 E",
"Sydney,		Australia",	"34.0 S",	"151.0 E",
"Townsville,		Australia",	"19.13 S",	"146.48 E",
"Vienna,		Austria",	"48.14 N",	"16.20 E",
"Baku,		Azerbaijan",	"40.22 N",	"49.53 E",
"Brussels,		Belgium",	"50.52 N",	"4.22 E",
"Thimbu,		Bhutan",	"27.32 N",	"89.43 E",
"La Paz,		Bolivia",	"16.27 S",	"68.22 W",
"Bel&eacute;m,		Brazil",	"52.22 N",	"4.53 E",
"Brasilia,		Brazil",	"15.47 S",	"47.55 W",
"Cuiaba,		Brazil",	"7.15 S",	"58.25 W",
"Manaus,		Brazil",	"3.06 S",	"60.00 W",
"Porto Velho,		Brazil",	"8.45 S",	"63.54 W",
"Recife,		Brazil",	"8.06 S",	"34.53 W",
"Rio de Janeiro,		Brazil",	"22.57 S",	"43.12 W",
"Salvador,		Brazil",	"12.56 S",	"38.27 W",
"Santarem,		Brazil",	"2.26 S",	"54.41 W",
"S&atilde;o Paulo,		Brazil",	"23.31 S",	"46.31 W",
"Valparaiso,		Brazil",	"21.16 S",	"50.54 W",
"Sofia,		Bulgaria",	"42.40 N",	"23.20 E",
"Ouagadougou,		Burkina",	"12.22 N",	"1.31 W",
"Yaounde,		Cameroon",	"3.52 N",	"11.31 E",
"Edmonton,	AB,	Canada",	"53.34 N",	"113.28 W",
"Nelson,	BC,	Canada",	"49.30 N",	"117.17 W",
"Vancouver,	BC,	Canada",	"49.16 N",	"123.06 W",
"Victoria,	BC,	Canada",	"48.25 N",	"123.21 W",
"Churchill,	MB,	Canada",	"58.45 N",	"94.00 W",
"Winnipeg,	MB,	Canada",	"49.54 N",	"97.7 W",
"St. John,	NB,	Canada",	"45.18 N",	"66.10 W",
"Whitehorse,	NT,	Canada",	"60.43 N",	"135.03 W",
"Kingston,	ON,	Canada",	"44.15 N",	"76.30 W",
"London,	ON,	Canada",	"43.2 N",	"81.34 W",
"Nakina,	ON,	Canada",	"59.12 N",	"132.48 W",
"Ottawa,	ON,	Canada",	"45.24 N",	"75.43 W",
"Toronto,	ON,	Canada",	"43.40 N",	"79.24 W",
"Montreal,	QC,	Canada",	"45.30 N",	"73.35 W",
"Quebec,	QC,	Canada",	"46.49 N",	"71.11 W",
"Moose Jaw	SK,	Canada",	"50.37 N",	"105.31 W",
"Saskatoon,	SK,	Canada",	"52.10 N",	"101.32 W",
"Calgary,	AB,	Canada",	"51.03 N",	"114.05 W",
"Ndjamena,		Chad",	"12.10 N",	"14.59 E",
"Antofagasta,		Chile",	"23.40 S",	"70.23 W",
"Easter Island,		Chile",	"27.05 S",	"109.20 W",
"Iquique,		Chile",	"20.13 S",	"70.7 W",
"Santiago,		Chile",	"33.48 S",	"70.65 W",
"Beijing,		China",	"39.55 N",	"116.25 E",
"Canton,		China",	"23.7 N",	"113.15 E",
"Chongqing,		China",	"29.46 N",	"106.34 E",
"Harbin,		China",	"45.45 N",	"126.41 E",
"Hong Kong,		China",	"22.20 N",	"114.11 E",
"Kunming,		China",	"25.04 N",	"102.41 E",
"Nanjing		China",	"32.3 N",	"118.53 E",
"Shanghai,		China",	"31.10 N",	"121.28 E",
"Urumqi,		China",	"43.43 N",	"87.38 E",
"Wuhan,		China",	"30.35 N",	"108.54 E",
"Xian,		China",	"34.16 N",	"108.54 E",
"Bogot&aacute;,		Colombia",	"4.32 N",	"74.15 W",
"Kinshasa,		Congo",	"4.18 S",	"15.17 E",
"Guantanamo,		Cuba",	"20.09 N",	"75.14 W",
"Havana,		Cuba",	"23.8 N",	"82.23 W",
"Prague,		Czech Republic",	"50.05 N",	"14.26 E",
"Brno,		Czech Republic",	"49.13 N",	"16.40 E",
"Copenhagen,		Denmark",	"55.40 N",	"12.34 E",
"Djibouti,		Djibouti",	"11.30 N",	"43.3 E",
"Guayaquil,		Ecuador",	"2.10 S",	"79.56 W",
"Quito,		Ecuador",	"0.33 S",	"78.44 W",
"Aswan,		Egypt",	"24.05 N",	"32.56 E",
"Cairo,		Egypt",	"30.2 N",	"31.21 E",
"Birmingham,		England",	"52.25 N",	"1.55 W",
"Bristol,		England",	"51.28 N",	"2.35 W",
"Leeds,		England",	"53.45 N",	"1.30 W",
"Liverpool,		England",	"53.25 N",	"3.0 W",
"London,		England",	"51.32 N",	"0.07 W",
"Manchester,		England",	"53.30 N",	"2.15 W",
"Newcastle-on-Tyne,		England",	"54.58 N",	"1.37 W",
"Plymouth,		England",	"50.25 N",	"4.5 W",
"Asmara,		Eritrea",	"15.20 N",	"38.58 E",
"Addis Ababa,		Ethiopia",	"9.3 N",	"38.42 E",
"Nadi,		Fiji",	"17.47 S",	"177.29 E",
"Helsinki,		Finland",	"60.10 N",	"25.0 E",
"Bordeaux,		France",	"44.50 N",	"0.31 W",
"Lyons,		France",	"45.45 N",	"4.50 E",
"Marseilles,		France",	"43.20 N",	"5.20 E",
"Nice,		France",	"43.42 N",	"7.15 E",
"Paris,		France",	"48.48 N",	"2.20 E",
"Cayenne,		French Guiana",	"4.49 N",	"52.18 W",
"Berlin,		Germany",	"52.30 N",	"13.25 E",
"Bremen,		Germany",	"53.5 N",	"8.49 E",
"Frankfurt,		Germany",	"50.7 N",	"8.41 E",
"Hamburg,		Germany",	"53.33 N",	"10.2 E",
"Munich,		Germany",	"48.8 N",	"11.35 E",
"Athens,		Greece",	"37.58 N",	"23.43 E",
"Thule,		Greenland",	"76.35 N",	"68.30 W",
"Guatemala City,		Guatemala",	"14.37 N",	"90.31 W",
"Georgetown,		Guyana",	"6.45 N",	"58.15 W",
"Port Au Prince		Haiti",	"18.32 N",	"72.20 W",
"Budapest,		Hungary",	"47.30 N",	"19.5 E",
"Reykjavík,		Iceland",	"64.4 N",	"21.58 W",
"Bangalore,		India",	"12.58 N",	"77.35 E",
"Bombay,		India",	"19.0 N",	"72.48 E",
"Calcutta,		India",	"22.34 N",	"88.24 E",
"Delhi,		India",	"28.54 N",	"77.13 E",
"Hyderabad,		India",	"17.22 N",	"78.28 E",
"Kandala,		India",	"23.03 N",	"70.11 E",
"Nagpur,		India",	"21.10 N",	"79.12 E",
"New Delhi,		India",	"28.35 N",	"77.12 E",
"Jakarta,		Indonesia",	"6.16 S",	"106.48 E",
"Malang,		Indonesia",	"7.59 S",	"112.45 E",
"Padang,		Indonesia",	"6.12 S",	"120.27 E",
"Palu,		Indonesia",	"8.16 S",	"121.44 E",
"Sorong,		Indonesia",	"0.50 S",	"131.17 E",
"Mashad,		Iran",	"36.16 N",	"59.34 E",
"Shiraz,		Iran",	"29.38 N",	"52.34 E",
"Tabriz,		Iran",	"38.05 N",	"46.18 E",
"Tehran,		Iran",	"35.40 N",	"51.26 E",
"Bagdad,		Iraq",	"33.14 N",	"44.22 E",
"Cork,		Ireland",	"51.54 N",	"8.28 W",
"Dublin,		Ireland",	"53.20 N",	"6.15 W",
"Jerusalem,		Israel",	"31.47 N",	"35.13 E",
"Milan,		Italy",	"45.27 N",	"9.10 E",
"Naples,		Italy",	"40.50 N",	"14.15 E",
"Rome,		Italy",	"41.54 N",	"12.27 E",
"Venice,		Italy",	"45.26 N",	"12.20 E",
"Kingston,		Jamaica",	"17.59 N",	"76.49 W",
"Kagoshima,		Japan",	"31.37 N",	"130.32 E",
"Nagasaki,		Japan",	"32.48 N",	"129.57 E",
"Nagoya,		Japan",	"35.7 N",	"136.56 E",
"Osaka,		Japan",	"34.32 N",	"135.30 E",
"Sapporo,		Japan",	"43.05 N",	"141.21 E",
"Tokyo,		Japan",	"35.40 N",	"139.45 E",
"Nairobi,		Kenya",	"1.25 S",	"36.55 E",
"Seoul,		Korea",	"37.30 N",	"127.00 E",
"Kuwait,		Kuwait",	"29.20 N",	"48.00 E",
"Riga,		Latvia",	"56.40 N",	"106.10 E",
"Maseru,		Lesotho",	"29.19 S",	"27.29 E",
"Monrovia,		Liberia",	"6.18 N",	"10.47 W",
"Benghazi,		Libya",	"32.07 N",	"20.04 E",
"Sebha,		Libya",	"27.02 N",	"14.26 E",
"Tripoli,		Libya",	"32.57 N",	"13.12 E",
"Antananarivo,		Madagascar",	"18.50 S",	"47.33 E",
"Tulear,		Madagascar",	"23.20 S",	"43.41 E",
"Kota Bharu,		Malaysia",	"2.33 N",	"102.10 E",
"Kota Kinabalu,		Malaysia",	"2.33 N",	"102.10 E",
"Kuala Lumpur,		Malaysia",	"3.8 N",	"101.42 E",
"Penang,		Malaysia",	"5.30 N",	"100.28 E",
"Bamako,		Mali",	"12.39 N",	"8.00 W",
"Tombouctou,		Mali",	"16.49 N",	"2.59 W",
"Chihuahua,		Mexico",	"28.40 N",	"106.06 W",
"Guadalajara,		Mexico",	"20.40 N",	"103.20 W",
"Mazatl&aacute;n,		Mexico",	"23.12 N",	"106.25 W",
"Mexico City,		Mexico",	"19.26 N",	"99.7 W",
"Tijuana,		Mexico",	"32.32 N",	"117.01 W",
"Veracruz,		Mexico",	"19.10 N",	"96.10 W",
"Ulaanbaatar,		Mongolia",	"47.54 N",	"106.52 E",
"Sidi Ifni,		Morocco",	"29.24 N",	"10.12 W",
"Beira,		Mozambique",	"19.49 S",	"134.52 E",
"Maputo,		Mozambique",	"25.58 S",	"32.35 E",
"Mandalay,		Myanmar",	"21.57 N",	"96.04 E",
"Rangoon,		Myanmar",	"16.50 N",	"96.0 E",
"Tsumeb,		Namibia",	"19.13 S",	"17.42 E",
"Winhoek,		Namibia",	"22.34 S",	"17.06 E",
"Kathmandu,		Nepal",	"27.42 N",	"85.19 E",
"Amsterdam,		Netherlands",	"52.22 N",	"4.53 E",
"Auckland,		New Zealand",	"36.53 S",	"174.45 E",
"Wellington,		New Zealand",	"41.17 S",	"174.47 E",
"Managua,		Nicaragua",	"12.06 N",	"86.18 W",
"Lagos,		Nigeria",	"6.27 N",	"3.24 E",
"Belfast,		Northern Ireland",	"54.37 N",	"5.56 W",
"Hammerfest,		Norway",	"70.38 N",	"23.38 E",
"Oslo,		Norway",	"59.57 N",	"10.42 E",
"Vardoe,		Norway",	"60.16 N",	"20.20 E",
"Salalah,		Oman",	"17.00 N",	"54.04 E",
"Islamabad,		Pakistan",	"33.40 N",	"73.08 E",
"Karachi,		Pakistan",	"24.51 N",	"67.02 E",
"Panama City,		Panama",	"8.58 N",	"79.32 W",
"Port Moresby,		Papua New Guinea",	"9.25 S",	"147.8 E",
"Asunci&oacute;n,		Paraguay",	"25.15 S",	"57.40 W",
"Arequipa,		Peru",	"16.25 S",	"71.32 W",
"Iquitos,		Peru",	"3.51 S",	"73.13 W",
"Lima,		Peru",	"12.0 S",	"77.2 W",
"Manila,		Philippines",	"14.35 N",	"120.59 E",
"Gdansk,		Poland",	"54.23 N",	"18.40 E",
"Warsaw,		Poland",	"52.14 N",	"21.0 E",
"Lisbon,		Portugal",	"38.44 N",	"9.9 W",
"San Juan,		Puerto Rico",	"18.30 N",	"66.10 W",
"Baneasa Buchare,		Romania",	"44.26 N",	"26.06 E",
"Bucharest,		Romania",	"44.25 N",	"26.7 E",
"Otopeni Buchare,		Romania",	"44.26 N",	"26.06 E",
"Anadyr,		Russia",	"64.50 N",	"177.50 E",
"Arkhangelsk,		Russia",	"64.32 N",	"40.40 E",
"Chita,		Russia",	"52.03 N",	"113.35 E",
"Irkutsk,		Russia",	"52.30 N",	"104.20 E",
"Krasnodar,		Russia",	"45.02 N",	"39.00 E",
"Magdagachi,		Russia",	"53.27 N",	"125.44 E",
"Moscow,		Russia",	"55.45 N",	"37.36 E",
"Perm,		Russia",	"58.01 N",	"56.10 E",
"Saratov,		Russia",	"51.30 N",	"45.55 E",
"St. Petersburg,		Russia",	"59.56 N",	"30.18 E",
"Vladivostok,		Russia",	"43.10 N",	"132.0 E",
"Vorkuta,		Russia",	"67.27 N",	"64.00 E",
"Yakutsk,		Russia",	"62.10 N",	"129.50 E",
"Apia,		Samoa",	"13.48 S",	"171.45 W",
"Samoa,		Samoa",	"14.20 S",	"170.00 W",
"Mecca,		Saudi Arabia",	"21.29 N",	"39.45 E",
"Riyadh,		Saudi Arabia",	"24.39 N",	"46.46 E",
"Aberdeen,		Scotland",	"57.9 N",	"2.9 W",
"Edinburgh,		Scotland",	"55.55 N",	"3.10 W",
"Glasgow,		Scotland",	"55.50 N",	"4.15 W",
"Dakar,		Senegal",	"14.40 N",	"17.28 W",
"Freetown,		Sierra Leon",	"36.05 N",	"80.15 W",
"Singapore,		Singapore",	"1.14 N",	"103.55 E",
"Honiara,		Solomon Island",	"9.28 S",	"159.57 E",
"Mogadishu,		Somalia",	"2.02 N",	"45.21 E",
"Cape Town,		South Africa",	"33.55 S",	"18.22 E",
"Durban,		South Africa",	"29.53 S",	"30.53 E",
"Johannesburg,		South Africa",	"26.12 S",	"28.4 E",
"Barcelona,		Spain",	"41.23 N",	"2.9 E",
"Madrid,		Spain",	"40.26 N",	"3.42 W",
"Colombo,		Sri Lanka",	"6.55 N",	"79.52 E",
"Khartoum,		Sudan",	"15.36 N",	"32.32 E",
"Paramaribo,		Suriname",	"5.45 N",	"55.15 W",
"Stockholm,		Sweden",	"59.17 N",	"18.3 E",
"Berne,		Switzerland",	"46.57 N",	"7.26 E",
"Z&uuml;rich,		Switzerland",	"47.21 N",	"8.31 E",
"Damascus,		Syria",	"33.3 N",	"36.18 E",
"Taipei,		Taiwan",	"25.05 N",	"121.32 E",
"Lindi,		Tanzania",	"10.00 S",	"39.41 E",
"Mwanza,		Tanzania",	"7.51 S",	"26.43 E",
"Seronera,		Tanzania",	"22.28 S",	"26.44 E",
"Zanzibar,		Tanzania",	"6.10 S",	"39.20 E",
"Bangkok,		Thailand",	"13.45 N",	"100.30 E",
"Lome,		Togo",	"6.08 N",	"1.13 E",
"Tunis,		Tunisia",	"36.48 N",	"10.11 E",
"Ankara,		Turkey",	"39.55 N",	"32.55 E",
"Istanbul,		Turkey",	"41.01 N",	"28.58 E",
"Trabzon,		Turkey",	"41.00 N",	"39.43 E",
"Kampala,		Uganda",	"0.19 N",	"35.25 E",
"Kiev Borispol,		Ukraine",	"50.25 N",	"133.43 E",
"Odessa,		Ukraine",	"46.27 N",	"30.48 E",
"Montevideo,		Uruguay",	"34.53 S",	"56.10 W",
"Anchorage,	AK,	USA",	"61.13 N",	"149.54 W",
"Juneau,	AK,	USA",	"58.18 N",	"134.24 W",
"Nome,	AK,	USA",	"64.25 N",	"165.30 W",
"Sitka,	AK,	USA",	"57.10 N",	"135.15 W",
"Birmingham,	AL,	USA",	"33.30 N",	"86.50 W",
"Mobile,	AL,	USA",	"30.42 N",	"88.3 W",
"Montgomery,	AL,	USA",	"32.21 N",	"86.18 W",
"Flagstaff,	AR,	USA",	"35.13 N",	"111.41 W",
"Hot Springs,	AR,	USA",	"34.31 N",	"93.3 W",
"Phoenix,	AZ,	USA",	"33.29 N",	"112.4 W",
"El Centro,	CA,	USA",	"32.38 N",	"115.33 W",
"Fresno,	CA,	USA",	"36.44 N",	"119.48 W",
"Long Beach,	CA,	USA",	"33.46 N",	"118.11 W",
"Los Angeles,	CA,	USA",	"34.03 N",	"118.14 W",
"Oakland,	CA,	USA",	"37.48 N",	"122.16 W",
"Sacramento,	CA,	USA",	"38.35 N",	"121.30 W",
"San Diego,	CA,	USA",	"32.42 N",	"117.10 W",
"San Francisco,	CA,	USA",	"37.47 N",	"122.26 W",
"San Jos&eacute;,	CA,	USA",	"37.20 N",	"121.53 W",
"Denver,	CO,	USA",	"39.44 N",	"104.59 W",
"Grand Junction,	CO,	USA",	"39.5 N",	"108.33 W",
"New Haven,	CT,	USA",	"41.19 N",	"72.55 W",
"Washington,	DC	USA",	"38.53 N",	"77.02 W",
"Jacksonville,	FL,	USA",	"30.22 N",	"81.40 W",
"Key West	FL,	USA",	"24.33 N",	"81.48 W",
"Miami,	FL,	USA",	"25.46 N",	"80.12 W",
"Tampa,	FL,	USA",	"27.57 N",	"82.27 W",
"Atlanta,	GA,	USA",	"33.45 N",	"84.23 W",
"Savannah,	GA,	USA",	"32.5 N",	"81.5 W",
"Honolulu,	HI,	USA",	"21.18 N",	"157.50 W",
"Des Moines,	IA,	USA",	"41.35 N",	"93.37 W",
"Dubuque,	IA,	USA",	"42.31 N",	"90.40 W",
"Boise,	ID,	USA",	"43.36 N",	"116.13 W",
"Idaho Falls,	ID,	USA",	"43.40 N",	"112.1 W",
"Lewiston,	ID,	USA",	"46.24 N",	"117.2 W",
"Chicago,	IL,	USA",	"41.49 N",	"87.37 W",
"Springfield,	IL,	USA",	"39.48 N",	"89.38 W",
"Indianapolis,	IN,	USA",	"39.46 N",	"86.10 W",
"Wichita,	KS	USA",	"37.43 N",	"97.17 W",
"Louisville,	KY,	USA",	"38.15 N",	"85.46 W",
"New Orleans,	LA,	USA",	"29.57 N",	"90.4 W",
"Shreveport,	LA,	USA",	"32.28 N",	"93.42 W",
"Boston,	MA,	USA",	"42.21 N",	"71.5 W",
"Springfield,	MA,	USA",	"42.6 N",	"72.34 W",
"Baltimore,	MD,	USA",	"39.2 N",	"76.38 W",
"Bangor,	ME,	USA",	"44.48 N",	"68.47 W",
"Eastport,	ME,	USA",	"44.54 N",	"67.0 W",
"Portland,	ME,	USA",	"43.40 N",	"70.15 W",
"Grand Rapids,	MI,	USA",	"42.58 N",	"85.40 W",
"Detroit,	MN,	USA",	"42.22 N",	"83.1 W",
"Duluth,	MN,	USA",	"46.49 N",	"92.5 W",
"Minneapolis,	MN,	USA",	"44.59 N",	"91.14 W",
"Kansas City,	MO,	USA",	"39.6 N",	"94.35 W",
"Springfield,	MO,	USA",	"37.13 N",	"93.17 W",
"St. Louis,	MO,	USA",	"38.35 N",	"90.12 W",
"Jackson,	MS,	USA",	"32.20 N",	"90.12 W",
"Havre,	MT,	USA",	"48.33 N",	"109.43 W",
"Helena,	MT,	USA",	"46.35 N",	"112.2 W",
"Charlotte,	NC,	USA",	"35.14 N",	"80.50 W",
"Raleigh,	NC,	USA",	"35.46 N",	"78.39 W",
"Wilmington,	NC,	USA",	"34.14 N",	"77.57 W",
"Winston-Salem,	NC,	USA",	"36.05 N",	"80.15 W",
"Bismarck,	ND,	USA",	"46.48 N",	"100.47 W",
"Fargo,	ND,	USA",	"46.52 N",	"96.48 W",
"Lincoln,	NE,	USA",	"40.50 N",	"96.40 W",
"Omaha,	NE,	USA",	"41.15 N",	"95.56 W",
"Manchester,	NH,	USA",	"43.0 N",	"71.30 W",
"Newark,	NJ,	USA",	"40.44 N",	"74.10 W",
"Albuquerque,	NM,	USA",	"35.05 N",	"106.39 W",
"Carlsbad,	NM,	USA",	"32.26 N",	"104.15 W",
"Santa Fe,	NM,	USA",	"35.41 N",	"105.57 W",
"Las Vegas,	NV,	USA",	"36.10 N",	"115.12 W",
"Reno,	NV,	USA",	"39.30 N",	"119.49 W",
"Albany,	NY,	USA",	"42.40 N",	"73.45 W",
"Buffalo,	NY,	USA",	"42.55 N",	"78.50 W",
"New York,	NY,	USA",	"40.47 N",	"73.58 W",
"Syracuse,	NY,	USA",	"43.2 N",	"76.8 W",
"Cincinnati,	OH,	USA",	"39.8 N",	"84.30 W",
"Cleveland,	OH,	USA",	"41.28 N",	"81.37 W",
"Columbus,	OH,	USA",	"40.0 N",	"83.1 W",
"Toledo,	OH,	USA",	"41.39 N",	"83.33 W",
"Oklahoma City,	OK,	USA",	"35.26 N",	"97.28 W",
"Tulsa,	OK,	USA",	"36.09 N",	"95.59 W",
"Baker,	OR,	USA",	"44.47 N",	"117.50 W",
"Eugene,	OR,	USA",	"44.3 N",	"123.5 W",
"Klamath Falls,	OR,	USA",	"42.10 N",	"121.44 W",
"Portland,	OR,	USA",	"45.31 N",	"122.41 W",
"Philadelphia,	PA,	USA",	"39.57 N",	"75.10 W",
"Pittsburgh,	PA,	USA",	"40.27 N",	"79.57 W",
"Providence,	RI,	USA",	"41.50 N",	"71.24 W",
"Charleston,	SC,	USA",	"32.47 N",	"79.56 W",
"Columbia,	SC,	USA",	"34.0 N",	"81.2 W",
"Pierre,	SD,	USA",	"44.22 N",	"100.21 W",
"Sioux Falls,	SD,	USA",	"43.33 N",	"96.44 W",
"Knoxville,	TN,	USA",	"35.57 N",	"83.56 W",
"Memphis,	TN,	USA",	"35.9 N",	"90.3 W",
"Nashville,	TN,	USA",	"36.10 N",	"86.47 W",
"Amarillo,	TX,	USA",	"35.11 N",	"101.50 W",
"Austin,	TX,	USA",	"30.15 N",	"97.42 W",
"Dallas,	TX,	USA",	"32.46 N",	"96.46 W",
"El Paso,	TX,	USA",	"31.46 N",	"106.29 W",
"Fort Worth,	TX,	USA",	"32.43 N",	"97.19 W",
"Houston,	TX,	USA",	"29.45 N",	"95.21 W",
"San Antonio,	TX,	USA",	"29.23 N",	"98.33 W",
"Richfield,	UT,	USA",	"38.46 N",	"112.5 W",
"Salt Lake City	UT,	USA",	"40.46 N",	"111.54 W",
"Richmond,	VA,	USA",	"37.33 N",	"77.29 W",
"Roanoke,	VA,	USA",	"37.17 N",	"79.57 W",
"Virginia Beach,	VA,	USA",	"36.51 N",	"75.58 W",
"Montpelier,	VT,	USA",	"44.15 N",	"72.32 W",
"Seattle,	WA,	USA",	"47.5 N",	"122.4 W",
"Spokane,	WA,	USA",	"47.40 N",	"117.26 W",
"Milwaukee,	WI,	USA",	"43.2 N",	"87.55 W",
"Charleston,	WV,	USA",	"38.21 N",	"81.38 W",
"Cheyenne,	WY,	USA",	"41.9 N",	"104.52 W",
"Tashkent,		Uzbekistan",	"41.16 N",	"69.13 E",
"Caracas,		Venezuela",	"10.28 N",	"67.2 W",
"Merida,		Venezuela",	"8.24 N",	"71.08 W",
"Hanoi,		Vietnam",	"21.04 N",	"105.5 E",
"Ho Chi Minh,		Vietnam",	"10.46 N",	"106.43 E",
"Sanaa,		Yemen",	"15.24 N",	"44.14 E",
"Belgrade,		Yugoslavia",	"44.52 N",	"20.32 E",
"Kisangani,		Zaire",	"0.33 N",	"25.14 E",
"Lubumbashi,		Zaire",	"11.41 S",	"27.29 E",
"Lusaka,		Zambia",	"14.41 S",	"28.28 E",
"Mbala,		Zambia",	"1.04 N",	"34.12 E",
"Harare,		Zimbabwe",	"17.50 S",	"31.30 E"
];
