﻿//Copyright 2008 WWW.24WEBCLOCK.COM
// v1.2
// Javascript 1.3

//globals
var clock24_lang = new Array();
clock24_lang["en"] = ['en', '1/', '2/', '3/', '4/', '5/', '6/', '7/', '8/', '9/', '10/', '11/', '12/',
'Ням', 'Даваа', 'Мягмар', 'Лхагва', 'Пүрэв', 'Баасан', 'Бямба'];
clock24_lang["ru"] = ['ru', '\u042F\u043D\u0432', '\u0424\u0435\u0432', '\u041C\u0430\u0440', '\u0410\u043F\u0440',
'\u041C\u0430\u0439', '\u0418\u044E\u043D', '\u0418\u044E\u043B', '\u0410\u0432\u0433',
'\u0421\u0435\u043D', '\u041E\u043A\u0442', '\u041D\u043E\u044F', '\u0414\u0435\u043A',
'\u0412\u0441', '\u041F\u043D', '\u0412\u0442', '\u0421\u0440', '\u0427\u0442', '\u041F\u0442', '\u0421\u0431'];
clock24_lang["it"] = ['it', 'Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Otr', 'Nov', 'Dic',
'Do', 'Lu', 'Ma', 'Me', 'Gi', 'Ve', 'Sa'];
clock24_lang["es"] = ['es', 'Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic',
'Dom', 'Lun', 'Mar', 'Mi\u00e9', 'Jue', 'Vie', 'Sab'];
clock24_lang["de"] = ['de', 'Jan', 'Feb', 'M\u00e4r', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez',
'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'];
clock24_lang["fr"] = ['fr', 'Jan', 'F\u00e9v', 'Mar', 'Avr', 'Mai', 'Jun', 'Jul', 'Ao\u00fb', 'Sep', 'Oct', 'Nov', 'D\u00e9c',
'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'];


var clock24_dst = new Array(
/* 0  */[[0, 7, 3, 0, 7, 10, 60], []], //CIS					  //Europe
/* EU */[[0, 7, 3, 0, 7, 10, 60], ["RU", "AZ", "AM", "BY", "MD", "UA", "AT", "AL", "AD", "BE", "BG", "BA", "VA", "GB", "HU", "DE", "GR", "DK", "IE", "ES", "IT", "CY", "LV", "LT", "LI", "LU", "MT", "MK", "MC", "NL", "NO", "PL", "PT", "RO", "SM", "CS", "SK", "SI", "TR", "FI", "FR", "HR", "CZ", "CH", "SE", "EE"]],
/* US */[[2, 7, 3, 1, 7, 11, 60], ["US", "CA"]],
/* MX */[[1, 7, 4, 0, 7, 10, 60], ["MX"]],
/* CU */[[3, 7, 3, 0, 7, 10, 60], ["CU"]],
/* IR */[[4, 5, 3, 3, 6, 9, 60], ["IR"]],
/* IL */[[0, 5, 3, 1, 7, 10, 60], ["IL"]],
/* EG */[[0, 5, 4, 0, 4, 8, 60], ["EG"]],
//southern hemisphere
/* AU */[[1, 7, 10, 1, 7, 4, 60], ["AU"]],
/* NZ */[[0, 7, 9, 1, 7, 4, 60], ["NZ"]],
/* CL */[[2, 7, 10, 0, 7, 3, 60], ["CL"]],
/* BR */[[1, 7, 11, 0, 7, 2, 60], ["BR"]]
);



function clock24(p, tz, fmt, lang) {
    this.p = p;
    if (tz == 999) {
        var now = new Date();
        tz = -1 * now.getTimezoneOffset();
    }
    this.tz = tz;
    if (fmt == '') fmt = '%hh:%nn:%ss';
    this.fmt = fmt;
    this.refresh = clock24_refresh;
    this.format = clock24_format;
    this.daylight = clock24_daylight;
    this.dstdata = 0;
    this.dst1 = 0;
    this.dst2 = 0;
    this.dsttype = 0;

    if (!clock24_lang[lang]) lang = "en";
    this.lang = lang;

    this.clock24_m = new Array();
    this.clock24_m[1] = clock24_lang[lang][1]; this.clock24_m[2] = clock24_lang[lang][2];
    this.clock24_m[3] = clock24_lang[lang][3]; this.clock24_m[4] = clock24_lang[lang][4];
    this.clock24_m[5] = clock24_lang[lang][5]; this.clock24_m[6] = clock24_lang[lang][6];
    this.clock24_m[7] = clock24_lang[lang][7]; this.clock24_m[8] = clock24_lang[lang][8];
    this.clock24_m[9] = clock24_lang[lang][9]; this.clock24_m[10] = clock24_lang[lang][10];
    this.clock24_m[11] = clock24_lang[lang][11]; this.clock24_m[12] = clock24_lang[lang][12];

    this.clock24_w = new Array();
    this.clock24_w[0] = clock24_lang[lang][13]; this.clock24_w[1] = clock24_lang[lang][14];
    this.clock24_w[2] = clock24_lang[lang][15]; this.clock24_w[3] = clock24_lang[lang][16];
    this.clock24_w[4] = clock24_lang[lang][17]; this.clock24_w[5] = clock24_lang[lang][18];
    this.clock24_w[6] = clock24_lang[lang][19];

    window.setInterval("clock24_" + p + ".refresh()", 1000);
}

function clock24_refresh() {
    var now = new Date();
    now = new Date(now.getTime() + this.tz * 60000);
    if (this.dst1 && this.dsttype) {
        if (now.getTime() > this.dst1 || now.getTime() < this.dst2)
            now = new Date(now.getTime() + this.dstdata * 60000);
    } else if (this.dst1) {
        if (now.getTime() > this.dst1 && now.getTime() < this.dst2)
            now = new Date(now.getTime() + this.dstdata * 60000);
    }

    document.getElementById('clock24_' + this.p).innerHTML = this.format(now, this.fmt);
}

function clock24_format(now, clock24_f) {
    var d = now.getUTCDate(); var dd = d; if (d < 10) dd = '0' + d + '/';
    var m = now.getUTCMonth() + 1; var mm = m; if (m < 10) mm = '0' + m;
    var yyyy = now.getUTCFullYear(); var yy = yyyy - 2000; if (yy < 10) yy = '0' + yy;

    var h = now.getUTCHours(); var hh = h; if (h < 10) hh = '0' + h;
    var H = h % 12; if (H == 0) H = 12; var HH = H; if (H < 10) HH = '0' + H;
    var n = now.getUTCMinutes(); var nn = n; if (nn < 10) nn = '0' + n;
    var s = now.getUTCSeconds(); var ss = s; if (ss < 10) ss = '0' + s;

    var w = now.getUTCDay(); W = this.clock24_w[w];
    var M = this.clock24_m[m];

    var p = 'am'; if (h >= 12) p = 'pm'; var P = 'AM'; if (h >= 12) P = 'PM';

    var s = new String(clock24_f);
    s = s.replace(new RegExp("%dd"), dd);
    s = s.replace(new RegExp("%d"), d);
    s = s.replace(new RegExp("%mm"), mm);
    s = s.replace(new RegExp("%m"), m);
    s = s.replace(new RegExp("%yyyy"), yyyy);
    s = s.replace(new RegExp("%yy"), yy);
    s = s.replace(new RegExp("%hh"), hh);
    s = s.replace(new RegExp("%h"), h);
    s = s.replace(new RegExp("%nn"), nn);
    s = s.replace(new RegExp("%n"), n);
    s = s.replace(new RegExp("%ss"), ss);
    s = s.replace(new RegExp("%s"), s);
    s = s.replace(new RegExp("%HH"), HH);
    s = s.replace(new RegExp("%H"), H);

    s = s.replace(new RegExp("%W"), W);
    s = s.replace(new RegExp("%M"), M);

    s = s.replace(new RegExp("%p"), p);
    s = s.replace(new RegExp("%P"), P);

    return s.toString();
}

function clock24_daylight(c) {
    c = clock24_find_dst(c);
    if (!c) {
        this.dst1 = 0; this.dst2 = 0;
        return;
    }
    dd = clock24_dst[c][0];
    d = clock24_byweekday(dd[0], dd[1], dd[2] - 1);
    d.setUTCHours(2, 0, 0, 0);
    this.dst1 = d.getTime();
    d = clock24_byweekday(dd[3], dd[4], dd[5] - 1);
    d.setUTCHours(3, 0, 0, 0);
    this.dst2 = d.getTime();
    if (this.dst1 > this.dst2) this.dsttype = 1;
    this.dstdata = dd[6];
}

function clock24_byweekday(pos, w, mon) {
    // pos: 0-last weekday, 1-first weekday, 2-second...
    // w=[1..7],7-sun
    // mon=[0..11]
    var now = new Date();
    now.setUTCMonth(mon, 1);
    w1 = 1 + Math.abs(w - now.getUTCDay());
    now.setUTCDate(w1); //first needed weekday in month
    wn = 0;
    if (pos) wn = (pos - 1) * 7 + w1;
    else {
        for (i = 2; i <= 6; i++) {
            td = new Date(now.getTime() + 7 * i * 86400 * 1000);
            if (td.getUTCMonth() > mon) {
                wn = w1 + 7 * (i - 1);
                break;
            }
        }
    }
    now.setUTCDate(wn);
    return now;
}

function clock24_find_dst(c) {
    if (!c) return;
    for (var i = 0; i < clock24_dst.length; i++) {
        for (var j = 0; j < clock24_dst[i][1].length; j++) {
            if (clock24_dst[i][1][j] == c) return i;
        }
    }
}

