/*
 *
 * ◆ worldclock.js
 *
 *    CREATED:  2001-10-23
 *    MODIFIED: 2002-07-20
 *    BY Yuki SHIMAZU
 *
 * ◇参考資料
 * http://www.ueda.info.waseda.ac.jp/‾gaku/js/how034.html
 * http://isweb13.infoseek.co.jp/computer/nilab/dl.html
 * http://www.apple.co.jp/hotnews/swatch/index.html
 * http://www.swatch.com/internettime/
 * http://www.ne.jp/asahi/taka/hello/summer.html
 * http://www.inside.ne.jp/js/
 *
 */


// まず今が何年か調べる
var today = new Date();
var year = today.getYear();
if (year < 1900) { year += 1900; }

// ローカル時間とグリニッジ標準時の差を分で表示
var tz_offset = today.getTimezoneOffset();

// 米英のサマータイムの期間を格納
var pos_startUS	= GetDstStartUS(year);
var pos_endUS	= GetDstEndUS(year);
var pos_startUK	= GetDstStartUK(year);
var pos_endUK	= GetDstEndUK(year);

// 各都市の時差を格納
var tz_ldn = 0 * 60;	// GMT +-0
var tz_tyo = 9 * 60;	// GMT  +9
var tz_lax = -8 * 60;	// GMT  -8
var tz_nyc = -5 * 60;	// GMT  -5



//
// ◆各都市の表示欄の色づけ
//
cities = Array(4);
cities[0] = "ldn";
cities[1] = "tyo";
cities[2] = "lax";
cities[3] = "nyc";



// ◆メインルーチン
function update_watch() {
	// いまの時刻を取得（たぶん1000ミリ秒単位）
	var now  = new Date();
	var n_t  = now.getTime();

	document.worldclock.ldn.value = printtime(n_t,tz_ldn);
	document.worldclock.tyo.value = printtime(n_t,tz_tyo);
	document.worldclock.nyc.value = printtime(n_t,tz_nyc);

	setTimeout('update_watch()', 999);		// 1000msec = 1sec（秒）
}


// ◆米国版 DST 開始設定（４月第１日曜日2:00AM から 10月最終日曜日1:00AM まで）
// 引数arg_yearで指定された年のサマータイム開始時刻を return で返す
function GetDstStartUS(arg_year) {
	var dst_start = new Date(arg_year, 3, 1, 2, 0, 0);	// 第2引数の3→4月　第3引数の1→1日　第4引数の2→2:00AM
	for (var i = 1; i <= 7; i++) {
		dst_start.setDate(i);
		if (0 == dst_start.getDay()) {	// 0は日曜日を意味する
			break;
		}
	}
	return dst_start.getTime();
}

// ◆米国版 DST 終了設定（４月第１日曜日2:00AM から 10月最終日曜日1:00AM まで）
// 引数arg_yearで指定された年のサマータイム終了時刻を return で返す
function GetDstEndUS(arg_year) {
	var dst_end = new Date(arg_year, 9, 31, 1, 0, 0);	// 第2引数の9→10月　第3引数の31→31日　第4引数の1→1:00AM
	for (var i = 31; i > 24; i--) {
		dst_end.setDate(i);
		if (0 == dst_end.getDay()) {	// 0は日曜日を意味する
			break;
		}
	}
	return dst_end.getTime();
}


// ◆英国版 DST 開始設定（３月最終土曜日2:00AM から 10月最終土曜日2:00AM まで）
// 引数arg_yearで指定された年のサマータイム開始時刻を return で返す
function GetDstStartUK(arg_yearUK) {
	var dst_startUK = new Date(arg_yearUK, 2, 31, 2, 0, 0);		// 第2引数の2→3月　第3引数の31→31日　第4引数の2→2:00AM
	for (var i = 31; i > 24; i--) {
		dst_startUK.setDate(i);
		if (6 == dst_startUK.getDay()) {	// 6は土曜日を意味する
			break;
		}
	}
	return dst_startUK.getTime();
}

// ◆英国版 DST 終了設定（３月最終土曜日2:00AM から 10月最終土曜日2:00AM まで）
// 引数arg_yearで指定された年のサマータイム終了時刻を return で返す
function GetDstEndUK(arg_yearUK) {
	var dst_endUK = new Date(arg_yearUK, 9, 31, 2, 0, 0);		// 第2引数の9→10月　第3引数の31→31日　第4引数の2→2:00AM
	for (var i = 31; i > 24; i--) {
		dst_endUK.setDate(i);
		if (6 == dst_endUK.getDay()) {	// 6は土曜日を意味する
			break;
		}
	}
	return dst_endUK.getTime();
}


// ◆表示・サマータイム処理
function printtime(now_time, timezone) {
	var hour, min, sec;

	var pos_t = now_time + (tz_offset + timezone) * 60 * 1000;

	// サマータイム処理
	if (timezone == tz_ldn) {
		// ロンドン編
		if ((pos_startUK <= pos_t) && (pos_endUK > pos_t)) {
			pos_t += 60 * 60 * 1000;
		}
	} else if ( timezone == tz_lax || timezone == tz_nyc ) {
		// LA & NY 編
		if ((pos_startUS <= pos_t) && (pos_endUS > pos_t)) {
			pos_t += 60 * 60 * 1000;
		}
	}

	var t = new Date();
	t.setTime(pos_t);
	hour = t.getHours();
	min  = t.getMinutes();
	sec  = t.getSeconds();

	// 「XX時00分00秒」で、かつ、XX が「4,5,6,16,18,20」のうちいずれかであるときにページをリロード
	// この処理により時間ごとの背景色が自動的に変わる
	if ( (hour == 4 || hour == 5 || hour == 6 || hour == 16 || hour == 18 || hour == 20) && min == 0 && sec == 0 ) {
		window.location.reload();
	}

	if (hour < 10) {
		hour = "0" + hour;
	}
	if (min < 10) {
		min = "0" + min;
	}
	if (sec < 10) {
		sec = "0" + sec;
	}

	return hour + ":" + min + ":" + sec; 
//	return hour + ":" + min; 
}



// ◆インターネットタイムの処理
function internettime() {
	var c = new Date();
	var gmt = c.toGMTString();
	var d = gmt.indexOf(":")

	var h = eval( gmt.slice(d-2,d) );
	var m = eval( gmt.slice(d+1,d+3) );
	var s = eval( gmt.slice(d+4,d+6) );

	// LONDON と BIEL（SWATCH本社所在地／PARISとtime zoneが同じ）の 時差は１時間（3600秒）
	var beat = (h * 3600 + m * 60 + s + 3600) / 86.4;

	if (beat >= 1000) beat = beat - 1000;
	beat = Math.floor(beat);

	var zero = "";
	if (beat < 100) zero = "0";
	if (beat < 10) zero = "00";

	return "@" + zero + beat;
}

