  var loctime = new Date();
  var gmtOffset = loctime.getTimezoneOffset();
	if (!(navigator.appName.charAt(0) == "M" && navigator.appVersion.charAt(0)==3))  {
		if (gmtOffset < 0) {gmtOffset = Math.abs(gmtOffset)}
		else {gmtOffset = gmtOffset - (Math.abs(gmtOffset) *2)};
	}

  var gmt = new Date();
  gmt.setTime(loctime.getTime() + (gmtOffset*60000));

  var TableLength = 0;
	dstZones = new Array ();
	qReport = new Array ();
	TableTimes = new Array();
	currentQuery = null;

	var timerID = null;
	var timerRunning = false;

	cities = new Array (
		"9%0", "Japan",
		"0%3", "UK",
		"-5%2", "USA",
		"1%3", "Spain"
	)

  function checkDST () {
  	var uYear = loctime.getYear();
  	var leap = ((uYear % 4 == 0 && uYear % 100 != 0) || uYear % 400 == 0 )? true : false;
  	var MonthDays = new Array (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334);
  	var TodayNum = MonthDays [loctime.getMonth()] + loctime.getDate();	
  	if (leap && TodayNum > 59) {TodayNum += 1};   
    //FirstSun8Feb, FirstSun15Mar, LastSunMar, FirstSunApr, LastSunSep, FirstSunOct, FirstSun15Oct,LastSunOct, 
  	ChangeDays = new Array (43, 78, 85, 92, 274, 281, 295, 302); 
  	var NumChangeDays = ChangeDays.length;
  	if (leap) { for (var idx = 0; idx <= 6; idx++) {ChangeDays [idx] += 1} };
  	DSTdays = new Array ();
  	LastJan1 = new Date("Jan 1, " + uYear);
  	DayJan1 = LastJan1.getDay ();	
  
  	for (var idx2 = 0; idx2 < NumChangeDays; idx2++) {
  		DSTdays [idx2] = ( TodayNum >= ChangeDays [idx2] - DayJan1 ) ? true : false; 
  	}
  	dstZones[0] = null;
  	dstZones[1] = null;
  	dstZones[2] =  ( DSTdays[3] && !DSTdays[7] ) ? true : false;//usa/canada
  	dstZones[3] =  ( DSTdays[2] && !DSTdays[7] ) ? true : false;//uk/europe
  	dstZones[4] =  ( DSTdays[7] || !DSTdays[2] ) ? true : false;//aus	
  	dstZones[5] =  ( DSTdays[5] || !DSTdays[2] ) ? true : false;//aus-tasmania
  	dstZones[6] =  ( DSTdays[5] || !DSTdays[1] ) ? true : false;//nz
  	dstZones[7] =  ( DSTdays[2] && !DSTdays[4] ) ? true : false;//russia
	}
  function GMTnow (GMT) {
  	var time = new Date();
  	hrs = time.getHours();
  	mins = time.getMinutes();
  	secs = time.getSeconds();
  	GMT = (hrs*60 + mins) - gmtOffset;
  	GMT = Into24hrs(GMT);
  	return GMT;
	}

  function Into24hrs (time) {
  	if ( time > 1440)
  		{ time -= 1440}
  	else
  		{ if ( time <0) { time = 1440 + time } };
  	return time;
	}

	function qHandler(ZoneData) {

  	qReport[0] = ""; qReport[1] = ""; qReport[2] = ""; qReport[3] = "";	
  
  	var qGMTparse = parseFloat(ZoneData);
  	var qGMToffset_hrs = parseInt(qGMTparse, 10) ; 
  	var qGMToffset_min= parseInt ( Math.round((qGMTparse-qGMToffset_hrs) * 100), 10);
  	var qDSTperiod = ZoneData.charAt (ZoneData.length - 1);
  	var qGMTperiod = 1440/60;
  	if ( (qGMToffset_hrs > 12) || (qGMToffset_hrs <-11) ) {qReport[0] = "BAD DATA"; return};
  	if (qDSTperiod > dstZones.length) {qReport[3] = "BAD DATA"};
  
  	var relGMT = (qGMToffset_hrs * 60) + qGMToffset_min; 
  	if (qDSTperiod>1 && dstZones [qDSTperiod]) {relGMT += 60; qReport[3] = "Yes (+1 hour)"} else {qReport[3] = "No"};
  	if (qDSTperiod == 0) {qReport[3] = "n/a"};
  	if (qDSTperiod == 1) {qReport[3] = "uncertain"};
  
  	var qPlaceTotMins = GMTnow (qPlaceTotMins);
  	qPlaceTotMins += relGMT; 
  	qPlaceTotMins = Into24hrs (qPlaceTotMins);
  	qReport[0] = qPlaceTotMins;
//  	qReport[2] = formatOffset (relGMT);
  	var relLoc = relGMT - gmtOffset;
//  	qReport[1] = formatOffset (relLoc);
	}

  function getTimePlus(basetime,hours) {
    var ampm = 'am';
    var tmp = new Date();
    tmp.setTime(basetime.getTime() + (hours*3600000));
    var m1 = tmp.getMinutes();
    var h1 = tmp.getHours();
    if (h1 > 12) {
      h1 -= 12;
      ampm = 'pm';
    }
    if (h1 < 10) {h1 = '0' + h1}
    if (m1 < 10) {m1 = '0' + m1}
    return '' + h1 + ':' + m1 + ampm;
  }
  function formatTime (time) {
    var ampm = 'am';
  	var fHours = Math.floor (time/60) ;
  	var fMins = time - (fHours * 60);
    if (fHours > 12) {
      fHours -= 12;
      ampm = 'pm';
    }
    if (fHours < 10) {fHours = '0' + fHours}
    if (fMins < 10) {fMins = '0' + fMins}
    var fTime = '' + fHours + ':' + fMins + ampm;

  	return fTime;
	};

  function writeClocks () {
  	var GMT = GMTnow (GMT);
//  	var fTime = formatTime ( Into24hrs (GMT + gmtOffset) );
//  	document.forms[0].elements[0].value = "  "+ fTime; 
//  	var fTime = formatTime ( Into24hrs (GMT) ); 
//  	document.forms[0].elements[1].value = "  "+ fTime; 
  	var TableClock = null;
  	for (var idx = 0; idx < TableLength; idx++) {
  		TableClock = null;
  		TableClock += (GMT+TableTimes[idx]);
  		document.dynTimes.elements[idx].value = "" + formatTime ( Into24hrs ( TableClock ) );
 		}
  	if (currentQuery != null) {qReply (currentQuery)};	
	}

  function showclocks () {
  	writeClocks();
  	timerID = setTimeout("showclocks()",5000);
  	timerRunning = true;
	}
  checkDST();