var weekdays = new Array();
weekdays[0] = "Sunday";
weekdays[1] = "Monday";
weekdays[2] = "Tuesday";
weekdays[3] = "Wednesday";
weekdays[4] = "Thursday";
weekdays[5] = "Friday";
weekdays[6] = "Saturday";

var months = new Array();
months[0] = "January";
months[1] = "February";
months[2] = "March";
months[3] = "April";
months[4] = "May";
months[5] = "June";
months[6] = "July";
months[7] = "August";
months[8] = "September";
months[9] = "October";
months[10] = "November";
months[11] = "December";

var europe = new Array();
europe[0] = "Coordinated Universal Time;UTC;0;";
europe[1] = "Tirana, Albania;AL;1;seu1";
europe[2] = "Andorra la Vella, Andorra;AD;1;seu1";
europe[3] = "Salzburg, Austria, EU;AT;1;seu1";
europe[4] = "Vienna, Austria, EU;AT;1;seu1";
europe[5] = "Minsk, Belarus;BY;2;seu1";
europe[6] = "Brussels, Belgium, EU;BE;1;seu1";
europe[7] = "Sarajevo, Bosnia and Herzegovina;BA;1;seu1";
europe[8] = "Sofia, Bulgaria;BG;2;seu2";
europe[9] = "Zagreb, Croatia;HR;1;seu1";
europe[10] = "Nicosia, Cyprus, EU;CY;2;seu2";
europe[11] = "Prague, Czech Republic, EU;CZ;1;seu1";
europe[12] = "Copenhagen, Denmark, EU;DK;1;seu1";
europe[13] = "Tallinn, Estonia, EU;EE;2;seu2";
europe[14] = "Torshavn, Faroe Islands;FO;0;seu3";
europe[15] = "Helsinki, Finland, EU;FI;2;seu2";
europe[16] = "Bordeaux, France, EU;FR;1;seu1";
europe[17] = "Lyon, France, EU;FR;1;seu1";
europe[18] = "Marseille, France, EU;FR;1;seu1";
europe[19] = "Nice, France, EU;FR;1;seu1";
europe[20] = "Paris, France, EU;FR;1;seu1";
europe[21] = "Strasbourg, France, EU;FR;1;seu1";
europe[22] = "Toulouse, France, EU;FR;1;seu1";
europe[23] = "Ajaccio, Corsica, France, EU;FR;1;seu1";
europe[24] = "Berlin, Germany, EU;DE;1;seu1";
europe[25] = "Frankfurt, Germany, EU;DE;1;seu1";
europe[26] = "Hamburg, Germany, EU;DE;1;seu1";
europe[27] = "Munich, Germany, EU;DE;1;seu1";
europe[28] = "Gibraltar, Gibraltar;GI;1;seu1";
europe[29] = "Athens, Greece, EU;GR;2;seu2";
europe[30] = "Saint Peter Port, Guernsey;GG;0;seu3";
europe[31] = "Budapest, Hungary, EU;HU;1;seu1";
europe[32] = "Reykjavik, Iceland;IS;0;";
europe[33] = "Dublin, Ireland, EU;IE;0;seu3";
europe[34] = "Douglas, Isle of Man;IM;0;seu3";
europe[35] = "Milan, Italy, EU;IT;1;seu1";
europe[36] = "Naples, Italy, EU;IT;1;seu1";
europe[37] = "Rome, Italy, EU;IT;1;seu1";
europe[38] = "Venice, Italy, EU;IT;1;seu1";
europe[39] = "Palermo, Sicily, Italy, EU;IT;1;seu1";
europe[40] = "Jan Mayen, Jan Mayen;SJ;1;seu1";
europe[41] = "Saint Helier, Jersey;JE;0;seu3";
europe[42] = "Riga, Latvia, EU;LV;2;seu2";
europe[43] = "Vaduz, Liechtenstein;LI;1;seu1";
europe[44] = "Vilnius, Lithuania, EU;LT;2;seu2";
europe[45] = "Luxembourg, Luxembourg, EU;LU;1;seu1";
europe[46] = "Skopje, Macedonia;MK;1;seu1";
europe[47] = "Valletta, Malta, EU;MT;1;seu1";
europe[48] = "Chisinau, Moldova;MD;2;seu2";
europe[49] = "Monaco, Monaco;MC;1;seu1";
europe[50] = "Podgorica, Montenegro;CS;1;seu1";
europe[51] = "Amsterdam, Netherlands, EU;NL;1;seu1";
europe[52] = "Rotterdam, Netherlands, EU;NL;1;seu1";
europe[53] = "Oslo, Norway;NO;1;seu1";
europe[54] = "Warsaw, Poland, EU;PL;1;seu1";
europe[55] = "Lisbon, Portugal, EU;PT;0;seu3";
europe[56] = "Porto, Portugal, EU;PT;0;seu3";
europe[57] = "Ponta Delgada, Azores, Portugal, EU;PT;-1;seu4";
europe[58] = "Funchal, Madeira, Portugal, EU;PT;0;seu3";
europe[59] = "Bucharest, Romania;RO;2;seu2";
europe[60] = "Irkutsk, Russia;RU;8;seu1";
europe[61] = "Kaliningrad, Russia;RU;2;seu1";
europe[62] = "Kamchatka, Russia;RU;12;seu1";
europe[63] = "Kazan, Russia;RU;3;seu1";
europe[64] = "Krasnoyarsk, Russia;RU;7;seu1";
europe[65] = "Magadan, Russia;RU;11;seu1";
europe[66] = "Moscow, Russia;RU;3;seu1";
europe[67] = "Novosibirsk, Russia;RU;6;seu1";
europe[68] = "Omsk, Russia;RU;6;seu1";
europe[69] = "Saint Petersburg, Russia;RU;3;seu1";
europe[70] = "Samara, Russia;RU;4;seu1";
europe[71] = "Vladivostok, Russia;RU;10;seu1";
europe[72] = "Volgograd, Russia;RU;3;seu1";
europe[73] = "Yakutsk, Russia;RU;9;seu1";
europe[74] = "Yekaterinburg, Russia;RU;5;seu1";
europe[75] = "San Marino, San Marino;SM;1;seu1";
europe[76] = "Belgrade, Serbia;CS;1;seu1";
europe[77] = "Bratislava, Slovakia, EU;SK;1;seu1";
europe[78] = "Ljubljana, Slovenia, EU;SI;1;seu1";
europe[79] = "Barcelona, Spain, EU;ES;1;seu1";
europe[80] = "Madrid, Spain, EU;ES;1;seu1";
europe[81] = "Sevilla, Spain, EU;ES;1;seu1";
europe[82] = "Valencia, Spain, EU;ES;1;seu1";
europe[83] = "Las Palmas, Canary Islands, Spain, EU;ES;0;seu3";
europe[84] = "Palma, Majorca, Spain, EU;ES;1;seu1";
europe[85] = "Longyearbyen, Svalbard;SJ;1;seu1";
europe[86] = "Stockholm, Sweden, EU;SE;1;seu1";
europe[87] = "Bern, Switzerland;CH;1;seu1";
europe[88] = "Geneva, Switzerland;CH;1;seu1";
europe[89] = "Zurich, Switzerland;CH;1;seu1";
europe[90] = "Kiev, Ukraine;UA;2;seu2";
europe[91] = "London, England, United Kingdom, EU;UK;0;seu3";
europe[92] = "Belfast, Northern Ireland, United Kingdom, EU;UK;0;seu3";
europe[93] = "Edinburgh, Scotland, United Kingdom, EU;UK;0;seu3";
europe[94] = "Cardiff, Wales, United Kingdom, EU;UK;0;seu3";
europe[95] = "Vatican City, Vatican City;VA;1;seu1";

var cityValue = "europe-0";

function onChangeCity(value)
{
  cityValue = value;

  updateTimeDate();
}

function updateTimeDate()
{
  fields = cityValue.split("-");
  continent = fields[0];
  city = fields[1];

  if ((continent == "europe") && ((city > 0) && (city <= 95)))
  {
    record = europe[city];
  }
  else
  {
    record = "Coordinated Universal Time;UTC;0;";
  }

  fields = record.split(";");
  offset = fields[2];

  localDate = new Date();

  localMillis = localDate.getTime();
  localOffsetMillis = localDate.getTimezoneOffset() * 60000;
  utcMillis = localMillis + localOffsetMillis;
  cityMillis = utcMillis + (offset * 3600000);

  cityDate = new Date(cityMillis);

  if (fields[3] != "")
  {
    if (summerTime(fields[3], cityDate))
    {
      offset++;
      cityMillis = utcMillis + (offset * 3600000);

      cityDate = new Date(cityMillis);
    }
  }

  h = cityDate.getHours();
  m = cityDate.getMinutes();
  s = cityDate.getSeconds();

  timeString = formatTime(h, m, s, document.timedate.hourformat[0].checked);
  document.timedate.time.value = timeString;

  year = cityDate.getFullYear();
  month = months[cityDate.getMonth()];
  day = cityDate.getDate();
  weekday = weekdays[cityDate.getDay()];

  document.timedate.date.value = weekday + ", " + month + " " + day + ", " + year;

  setTimeout("updateTimeDate()", 1000);
}

function summerTime(dst, cityDate)
{
  result = false;

  if (dst.match("seu"))
  {
    result = summerTimeEurope(dst, cityDate);
  }

  return (result);
}

function summerTimeEurope(dst, cityDate)
{
  date1 = new Date();
  date1.setFullYear(cityDate.getFullYear(), 2, 31);

  date2 = new Date();
  date2.setFullYear(cityDate.getFullYear(), 9, 31);

  if (dst == "seu1")
  {
    date1.setHours(2, 0, 0, 0);
    date2.setHours(2, 0, 0, 0);
  }
  else
  if (dst == "seu2")
  {
    date1.setHours(3, 0, 0, 0);
    date2.setHours(3, 0, 0, 0);
  }
  else
  if (dst == "seu3")
  {
    date1.setHours(1, 0, 0, 0);
    date2.setHours(1, 0, 0, 0);
  }
  else
  if (dst == "seu4")
  {
    date1.setHours(0, 0, 0, 0);
    date2.setHours(0, 0, 0, 0);
  }

  while (date1.getDay() != 0)
  {
    date1.setDate(date1.getDate() - 1);
  }

  while (date2.getDay() != 0)
  {
    date2.setDate(date2.getDate() - 1);
  }

  return ((cityDate >= date1) && (cityDate < date2));
}

function formatTime(h, m, s, format12hours)
{
  hourFormat = "";

  if (format12hours)
  {
    if (h >= 12)
    {
      hourFormat = " PM";

      if (h > 12)
      {
        h -= 12;
      }
    }
    else
    {
      if (h == 0)
      {
        h = "12";
      }

      hourFormat = " AM";
    }
  }

  if (m < 10)
  {
    m = "0" + m;
  }

  if (s < 10)
  {
    s = "0" + s;
  }

  if (h < 10)
  {
    h = "0" + h;
  }

  return (h + ":" + m + ":" + s + hourFormat);
}
