//copyright notre-planete.info (http://www.notre-planete.info) 2003-2011 tous droits réservés.

var origin,dest,from,to,now,fromOn,toOn,dkms,dmiles,unit;
origin = "none";
dest = "none";
now = 0;
fromOn = 0;
toOn = 0;
unit = 0;
function haversine (lat1,lon1,lat2,lon2) {
var lt1,ln1,lt2,ln2;
var a,c,d;
R = 6371.03;
with (Math) {
	degtorad = 2*PI/360;
lt1 = lat1*degtorad;
ln1 = lon1*degtorad;
lt2 = lat2*degtorad;
ln2 = lon2*degtorad;
dlat = lt2-lt1;
dlon = ln2-ln1;
	a = pow((sin(dlat/2)),2) + cos(lt1) * cos(lt2) * pow((sin(dlon/2)),2);
	c = 2*atan2(sqrt(a),sqrt(1-a));
	d = R*c;
}
return d;
}
function Point(name,coordN,coordE){
this.name = name;
this.coordN = coordN;
this.coordE = coordE;
}
function Coord(deg,min,sec){
this.deg = deg;
this.min = min;
this.sec = sec;
}
function generatePoint(str){
var name,degN,minN,secN,degE,minE,secE,lat,lon,splitString;

splitString = str.split(":");
name = splitString[0];
degN = splitString[1];
minN = splitString[2];
secN = splitString[3];
lat = splitString[4];
degE = splitString[5];
minE = splitString[6];
secE = splitString[7];
lon = splitString[8];
if (lat == "S") {
	degN = "-" + degN;
	minN = "-" + minN;
	secN = "-" + secN;
}
if (lon == "W") {
	degE = "-" + degE;
	minE = "-" + minE;
	secE = "-" + secE;
}
coordN = new Coord(degN,minN,secN);
coordE = new Coord(degE,minE,secE);
point = new Point(name,coordN,coordE);
return point;
}
function getPoint(str){
if (now == 0){
	from = generatePoint(str)
	document.forms['distance'].from.value = from.name;
	fromOn = 1;
}
else if (now == 1) {
	to = generatePoint(str);
	document.forms['distance'].to.value = to.name;
	toOn = 1;
}
document.forms['distance'].distance.value = '';
}
function showDistance(){
var lat1,lon1,lat2,lon2,distance;
if (fromOn == 0){alert('Vous devez entrer un point d\'origine !')}
else if (toOn == 0){alert('Vous devez entrer un point de destination !')}
else { 
	lat1 = parseFloat(from.coordN.deg) + parseFloat(from.coordN.min)/60 + parseFloat(from.coordN.sec)/3600;
	lon1 = parseFloat(from.coordE.deg) + parseFloat(from.coordE.min)/60 + parseFloat(from.coordE.sec)/3600;
	lat2 = parseFloat(to.coordN.deg) + parseFloat(to.coordN.min)/60 + parseFloat(to.coordN.sec)/3600;
	lon2 = parseFloat(to.coordE.deg) + parseFloat(to.coordE.min)/60 + parseFloat(to.coordE.sec)/3600;
	distance = haversine(lat1,lon1,lat2,lon2);
	distance = parseInt(distance);
	if (isNaN(distance)){alert('les coordonnées renseignées ne correspondent pas à un format valide')}
	else {
	document.forms['distance'].distance.value = distance + " km";
	unit = 0
	}
}
}
function changeUnit(){
var dist;
if (document.forms['distance'].distance.value != ''){
if (unit == 0){
	ratio = 6367/3956;
	dist = document.forms['distance'].distance.value;
	dkms = dist;
	dist = parseFloat(dist);
	dist = parseInt(dist / ratio);
	dmiles = dist + " m";
	document.forms['distance'].distance.value = dmiles;
	unit = 2;
}
else if (unit == 1){
	document.forms['distance'].distance.value = dmiles;
	unit = 2;
}
else if (unit == 2){
document.forms['distance'].distance.value = dkms;
	unit = 1;
}
}
}
function resetForm(){
document.forms['distance'].reset();
fromOn = 0;
toOn = 0;
unit = 0;
}
cities = new Array(
	"Abidjan:04:13:00:N:04:01:00:W",
	"Addis Ababa:09:02:0:N:38:45:00:E",
	"Adelaide:34:56:00:S:138:35:00:E",
	"Aden:12:48:00:N:45:00:00:E",
	"Alger:36:45:56:N:03:01:54:E",
	"Amman:31:57:00:N:35:57:00:E",
	"Amsterdam:52:21:00:N:04:52:00:E",
	"Anadyr:64:50:00:N:177:50:00:E",
	"Anchorage:61:10:43:N:149:11:11:W",
	"Ankara:39:57:00:N:32:53:00:E",
	"Antananarivo:18:55:00:S:47:31:00:E",
	"Asuncion:25:14:00:S:57:31:00:W",
	"Athènes:37:58:00:N:23:43:00:E",
	"Atlanta:33:45:46:N:84:25:21:W",
	"Austin:30:18:21:N:97:45:02:W",
	"Azores:38:46:12:N:27:06:00:W",
	"Bagdad:33:20:00:N:44:26:00:E",
	"Bangalore:13:48:00:N:77:18:00:E",
	"Bangkok:13:44:00:N:100:30:00:E",
	"Barcelone:41:24:00:N:02:09:00:E",
	"Beijing:39:55:00:N:116:26:00:E",
	"Beyrouth:33:54:00:N:35:28:00:E",
	"Belgrade:44:48:00:N:20:28:00:E",
	"Berlin:52:27:00:N:13:18:00:E",
	"Bermuda:32:22:01:N:64:40:59:W",
	"Bern:46:57:00:N:07:26:00:E",
	"Bogota:04:36:00:N:74:05:00:W",
	"Boston:42:20:10:N:71:01:04:W",
	"Brasilia:15:47:00:S:47:55:00:W",
	"Brest:48:24:00:N:04:29:00:W",
	"Brisbane:02:28:00:S:153:02:00:E",
	"Bruxelles:50:48:00:N:04:21:00:E",
	"Bucarest:44:26:00:N:26:06:00:E",
	"Budapest:47:30:00:N:19:05:00:E",
	"Buenos Aires:34:35:00:S:58:29:00:W",
	"Le Caire:29:52:00:N:31:20:00:E",
	"Calcutta:22:32:00:N:88:20:00:E",
	"Canberra:35:21:00:S:149:10:00:E",
	"Cape Town:33:56:00:S:18:29:00:E",
	"Caracas:10:30:00:N:66:56:00:W",
	"Casablanca:33:35:00:N:07:39:00:W",
	"Chicago:41:50:13:N:87:41:06:W",
	"Copenhague:55:41:00:N:12:35:00:W",
	"Dakar:14:45:00:N:17:30:00:W",
	"Dallas:32:47:39:N:96:45:55:W",
	"Damascus:33:31:00:N:36:18:00:E",
	"Dar es Salaam:06:50:00:S:39:18:00:E",
	"Darwin:12:28:00:S:130:51:00:E",
	"Denver:39:46:05:N:104:52:22:W",
	"Detroit:42:22:59:N:83:06:08:W",
	"Dhaka:23:51:00:N:90:24:00:E",
	"Dublin:53:22:0:N:06:21:00W",
	"Edmonton:53:30:00:N:113:30:00:W",
	"Fort-de-France:14:36:00:N:61:05:00:W",
	"Frankfurt:50:01:59:N:08:34:01:E",
	"Genève:46:14:00:N:06:04:00:E",
	"Genoa:44:24:47:N:08:51:00:E",
	"Greenwich:51:28:00:N:00:00:00:E",
	"Guatemala:14:37:00:N:90:31:00:W",
	"Hanoi:21:01:00:N:105:42:00:E",
	"Harare:17:50:00:S:31:30:00:E",
	"Havana:23:08:00:N:82:21:00:W",
	"Helsinki:60:10:00:N:24:57:00:E",
	"Ho Chi Minh:10:47:00:N:106:42:00:E",
	"Hong Kong:22:18:00:N:114:10:00:E",
	"Honolulu:21:18:00:N:157:51:00:W",
	"Houston:29:46:07:N:95:23:12:W",
	"Indianapolis:39:46:35:N:86:08:46:W",
	"Islamabad:33:37:00:N:73:06:00:E",
	"Istanbul:41:02:00:N:28:57:00:E",
	"Jakarta:06:08:00:S:106:45:00:E",
	"Jerusalem:31:47:00:N:35:13:00:E",
	"Johannesburg:26:11:00:S:28:03:00:E",
	"Kaboul:34:34:01:N:69:13:01:E",
	"Kathmandu:27:42:00:N:82:12:00:E",
	"Khartoum:15:37:00:N:32:33:00:E",
	"Kiev:50:30:00:N:30:28:00:E",
	"Kigali:02:18:00:S:29:57:00:E",
	"Kingston:18:00:00:N:76:45:00:W",
	"Kinshasa:04:23:00:S:15:27:00:E",
	"Kuala Lumpur:03:07:00:N:101:42:00:E",
	"Koweït:29:04:00:N:47:59:00:E",
	"La Paz:16:30:00:S:68:09:00:W",
	"Las Palmas:27:55:59:N:15:22:58:W",
	"Lagos:06:27:00:N:03:24:00:E",
	"Lima:12:05:00:S:77:03:00:W",
	"Lisbonne:38:42:00:N:09:05:00:W",
	"Londres:51:30:00:N:0:05:00:W",
	"Los Angeles:34:05:20:N:118:24:40:W",
	"Lyon:45:45:77:N:04:50:64:E",
	"Madrid:40:25:00:N:3:41:00:W",
	"Male:04:00:00:N:73:00:00:W",
	"Managua:12:10:00:N:86:15:00:W",
	"Manila:14:37:00:N:121:00:00:E",
	"Maujuro:06:58:00:N:173:42:00:E",
	"Melbourne:37:52:00:S:145:08:00:E",
	"Mexico:19:24:00:N:99:12:00:W",
	"Miami:25:46:32:N:80:12:39:W",
	"Milan:45:27:00:N:09:17:00:E",
	"Minneapolis:44:57:43:N:93:16:01:W",
	"Minsk:53:54:00:N:27:34:00:E",
	"Montevideo:34:51:00:S:56:13:00:W",
	"Montreal:45:30:00:N:73:34:48:W",
	"Moscou:55:46:00:N:37:40:00:E",
	"Muscat:23:31:00:N:58:42:00:E",
	"Nairobi:01:16:00:S:36:48:00:E",
	"Naples:40:53:00:N:14:18:00:E",
	"Nassau:25:05:00:N:77:21:00:W",
	"New Orleans:30:03:57:N:89:55:53:W",
	"New Delhi:28:54:00:N:77:13:00:E",
	"New York:40:40:11:N:73:56:38:W",
	"Nice:43:42:00:N:07:21:00:E",
	"Oslo:59:56:00:N:10:44:00:E",
	"Ottawa:45:25:12:N:75:40:12:W",
	"Panama:09:04:01:N:79:22:59:W",
	"Paris:48:51:16:N:02:20:55:E",
	"Perth:31:57:00:S:115:41:00:E",
	"Phoenix:33:32:33:N:112:04:17:W",
	"Phnom Penh:11:33:00:N:104:51:00:E",
	"Port Moresby:09:27:00:S:147:13:00:E",
	"Prague:50:05:00:N:14:25:00:E",
	"Pyongyang:39:02:00:N:125:41:00:E",
	"Reykjavik:64:08:00:N:21:56:00:E",
	"Rio de Janeiro:22:55:00:S:43:12:00:W",
	"Riyadh:24:39:00:N:46:42:00:E",
	"Rome:41:48:00:N:12:36:00:E",
	"Saint John's:47:04:58:N:52:42:36:W",
	"Sanaa:15:20:00:N:44:21:00:E",
	"San Francisco:37:47:36:N:122:33:17:W",
	"San José:09:57:00:N:84:05:00:W",
	"San Juan:18:29:00:N:66:07:00:W",
	"San Salvador:13:42:00:N:89:13:00:W",
	"Santo Domingo:18:29:00:N:69:54:00:W",
	"Santiago:33:27:00:S:70:42:00:W",
	"Sao Paulo:23:33:00:S:46:38:00:W",
	"Seattle:47:37:18:N:122:21:01:W",
	"Seoul:37:34:00:N:126:58:00:E",
	"Shanghai:31:12:00:N:121:26:00:E",
	"Singapore:01:18:00:N:103:50:00:E",
	"Sofia:42:42:00:N:23:20:00:E",
	"Stockholm:59:21:00:N:18:04:00:E",
	"Suva:18:10:00:S:178:25:00:E",
	"Sydney:33:52:00:S:151:12:00:E",
	"Taipei:25:02:00:N:121:31:00:E",
	"Tallinn:59:25:00:N:24:45:00:E",
	"Tashkent:41:19:00:N:69:15:00:E",
	"Tegucigalpa:14:04:00:N:87:13:00:W",
	"Tehran:35:41:00:N:51:25:00:E",
	"Timbuktu:16:46:00:N:03:01:00:W",
	"Tokyo:35:41:00:N:139:46:00:E",
	"Toronto:43:40:12:N:79:22:12:W",
	"Tripoli:32:50:00:N:13:13:00:E",
	"Tunis:36:51:00:N:10:13:01:E",
	"Ulaanbaatar:59:10:00:N:107:21:00:E",
	"Vancouver:49:15:00:N:123:04:48:W",
	"Venice:45:25:00:N:12:18:00:E",
	"Vienna:48:15:00:N:16:22:00:E",
	"Vladivostok:43:07:00:N:131:55:00:E",
	"Warsaw:52:13:00:N:21:02:00:E",
	"Washington:38:54:18:N:77:00:08:W",
	"Wellington:41:17:00:S:174:46:00:E",
	"Zagreb:45:48:00:N:15:58:00:E",
	"Zürich:47:23:00:N:08:33:00:E");
function openCoords(status){
now = status;
window.open('coordon.htm','coords','toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=320,height=270')
}
function setValue(){
now=0;
var objet = document.distance.depuis.selectedIndex;
var index = document.distance.depuis.options[objet].value;
getPoint(cities[index]);
}
function setValue2(){
now=1;
var objet = document.distance.vers.selectedIndex;
var index = document.distance.vers.options[objet].value;
getPoint(cities[index]);
}
function writeCities(){
var cityarray,cityname,lng,firstletter,prevletter;
lng = cities.length;
document.writeln('<select name=depuis size=20 onclick="setValue()">');
prevlastletter = 'Z';
for (i = 0 ; i < lng ; i++){
	cityarray = cities[i].split(':',1);
	cityname = cityarray[0];
	firstletter = cityname.slice(0,1);
	if (firstletter != prevletter){
	prevletter = firstletter;
	document.writeln('<option> - - - - - - - ' + firstletter + ' - - - - - - -</option>');
	}
	document.write ('<option value=' + i + '>'+ cityname+'</option>');
}
document.write ('</select>');
}
function writeCities2(){
var cityarray,cityname,lng,firstletter,prevletter;
lng = cities.length;
document.writeln('<select name=vers size=20 onclick="setValue2()">');
prevlastletter = 'Z';
for (i = 0 ; i < lng ; i++){
	cityarray = cities[i].split(':',1);
	cityname = cityarray[0];
	firstletter = cityname.slice(0,1);
	if (firstletter != prevletter){
	prevletter = firstletter;
	document.writeln('<option> - - - - - - - ' + firstletter + ' - - - - - - -</option>');
	}
	document.write ('<option value=' + i + '>'+ cityname+'</option>');
}
document.write ('</select>');
}

