Event.observe(window, 'load', init);

function init() {
  disp();
}


function disp() {
    //-- GMTの取得
    var now = new Date();
    var local = now.getTime();
    var tz_offset = now.getTimezoneOffset() * 60000;
    var gmt = local + tz_offset;
    
    //-- Tokyoの時間の取得
    var tyo = gmt  + (+9 * 60 * 60000);
    var tyo_now = new Date(tyo);
    //-- Los Angelesの時間(太平洋標準時)の取得
    var lax = gmt  + (-8 * 60 * 60000);
    var lax_now = new Date(lax);
    if(isSummerTime_inUS(lax_now)) {
        lax += 60 * 60 * 1000;
    }
    //-- Kentucky(lexington)の時間(東部標準時)の取得
    var lex = gmt  + (-5 * 60 * 60000);
    var lex_now = new Date(lex);
    if(isSummerTime_inUS(lex_now)) {
        lex += 60 * 60 * 1000;
    }
    //-- Newmarketの時間(イギリス)の取得
    var lon = gmt  + (+0 * 60 * 60000);
    var lon_now = new Date(lon);
    if(isSummerTime_inUK(lon_now)) {
        lon += 60 * 60 * 1000;
    }
    //-- Deauvilleの時間(フランス)の取得
    var dol = gmt  + (+1 * 60 * 60000);
    var dol_now = new Date(dol);
    if(isSummerTime_inCET(dol_now)) {
        dol += 60 * 60 * 1000;
    }
    
    tyo_now = new Date(tyo);
    lax_now = new Date(lax);
    lex_now = new Date(lex);
    lon_now = new Date(lon);
    dol_now = new Date(dol);
    
    write_datetime('tyo', tyo_now);
    write_datetime('lax', lax_now);
    write_datetime('lex', lex_now);
    write_datetime('lon', lon_now);
    write_datetime('dol', dol_now);

    setTimeout('disp()', 500);
}

function write_datetime(id, date) {
    var mname = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
    var mon = date.getMonth();
    var day = date.getDate();
    var hh  = date.getHours();
    var mm  = date.getMinutes();
    
    $(id + '_1').innerHTML = ('0' + day).slice(-2) + '/' + mname[mon];
    $(id + '_2').innerHTML = ('0' + hh).slice(-2) + ':' + ('0' + mm).slice(-2);
}

// United State of Ameriaの夏時間チェック
function isSummerTime_inUS(date) {
    var summerTimeStart = new Date();
    var aaa = date.getFullYear();
    // 3月第2日曜日午前2時(現地標準時間) 夏時間で午前3時に1時間進める
    summerTimeStart.setFullYear(date.getFullYear());
    summerTimeStart.setMonth(2);
    summerTimeStart.setDate(1);
    summerTimeStart.setDate(1 + 7 * ((summerTimeStart.getDay() == 0) ? 1 : 2) - summerTimeStart.getDay());
    summerTimeStart.setHours(2);
    var summerTimeEnd = new Date();
    // 11月第1日曜日午前1時(現地標準時間) 夏時間終わりで午前2時を午前1時に1時間戻す
    summerTimeEnd.setFullYear(date.getFullYear());
    summerTimeEnd.setMonth(10);
    summerTimeEnd.setDate(1);
    summerTimeEnd.setDate(1 + 7 * ((summerTimeEnd.getDay() == 0) ? 0 : 1) - summerTimeEnd.getDay());
    summerTimeEnd.setHours(1);
    return (summerTimeStart < date && date < summerTimeEnd);
}

// United Kingdamの夏時間チェック
function isSummerTime_inUK(date) {
    var summerTimeStart = new Date();
    var aaa = date.getFullYear();
    // 3月最終日曜日午前1時(GMT) 夏時間で午前2時に1時間進める
    summerTimeStart.setFullYear(date.getFullYear());
    summerTimeStart.setMonth(2);
    summerTimeStart.setDate(31);
    summerTimeStart.setDate(31 - summerTimeStart.getDay());
    summerTimeStart.setHours(1);
    var summerTimeEnd = new Date();
    // 10月最終日曜日午前1時(GMT) 夏時間終わりで午前2時を午前1時に1時間戻す
    summerTimeEnd.setFullYear(date.getFullYear());
    summerTimeEnd.setMonth(9);
    summerTimeEnd.setDate(31);
    summerTimeStart.setDate(31 - summerTimeStart.getDay());
    summerTimeEnd.setHours(1);
    return (summerTimeStart < date && date < summerTimeEnd);
}

// 中央ヨーロッパの夏時間チェック
function isSummerTime_inCET(date) {
    var summerTimeStart = new Date();
    var aaa = date.getFullYear();
    // 3月最終日曜日午前2時(現地標準時間) 夏時間で午前3時に1時間進める
    summerTimeStart.setFullYear(date.getFullYear());
    summerTimeStart.setMonth(2);
    summerTimeStart.setDate(31);
    summerTimeStart.setDate(31 - summerTimeStart.getDay());
    summerTimeStart.setHours(2);
    var summerTimeEnd = new Date();
    // 10月最終日曜日午前2時(現地標準時間) 夏時間終わりで午前3時を午前2時に1時間戻す
    summerTimeEnd.setFullYear(date.getFullYear());
    summerTimeEnd.setMonth(9);
    summerTimeEnd.setDate(31);
    summerTimeStart.setDate(31 - summerTimeStart.getDay());
    summerTimeEnd.setHours(2);
    return (summerTimeStart < date && date < summerTimeEnd);
}

