var cblock = 'desc';
var cmonth = 0;
var bdays = [ 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa', 'Di' ];
var bmonths = [ 'jan', 'fév', 'mar', 'avr', 'mai', 'juin',
		'jui', 'août', 'sept', 'oct', 'nov', 'déc' ];
var bfulls = [ 'Janvier', 'Février', 'Mars', 'Avril', 'Mai',
	       'Juin', 'Juillet', 'Août', 'Septembre',
	       'Octobre', 'Novembre', 'Décembre' ];
var btaken = { };
var btables = [ ];
var btitles = [ ];

/** Shortcuts **/
function bid(id) { return document.getElementById(id); }
function btags(id, t) { return bid(id).getElementsByTagName(t); }
function bcss(id, c) { bid(id).className = c; }
function bclear(e) {
    while (e.childNodes.length)
	e.removeChild(e.firstChild);
}
function bdom(t, h, c) {
    var e = document.createElement(t);
    if (c) e.className = c;
    if (h) e.innerHTML = h;
    return e;
}

/** Popup **/
function bpop(e) {
    var bw = window.open(e.href, "resa","menubar=no, status=no, scrollbars=yes, menubar=no, width=640, height=480");
    if (bw.window.focus) bw.window.focus();
    return false;
}

/** Tabs **/
function btab(e, b) {
    e.blur();
    bcss(cblock + 'block', 'blockoff');
    bcss(cblock + 'tab', '');
    cblock = b;
    bcss(cblock + 'block', 'blockon');
    bcss(cblock + 'tab', 'tabon');
    return false;
}

/** Previous/next **/
function bmove(e, i) {
    e.blur();
    cmonth += i;
    bdisp();
    return false;
}

/** Private **/
function bint(e) {
    var ds, bs = [ ];
    var es = e.innerHTML.replace(/\<br\ *\/?\>/ig, '').split(' / ');
    ds = es[0].split('-');
    bs[0] = new Date(ds[0], ds[1] - 1, ds[2] || 1);
    ds = es[1].split('-');
    bs[1] = new Date(ds[0], ds[1] - 1, ds[2] || 1);
    return bs;
}
function bbuild() {
    var i, bs, ys, ms, ye, me;
    if (bid('descblock')) {
	var lis = btags('descblock', 'li');
	for (i = 0; i < lis.length; i += 2)
	    lis[i].className = 'odd';
    }
    if (bid('bblocks')) {
	lis = btags('bblocks', 'div');
	for (i = 0; i < lis.length; i++)
	    if (lis[i].className == 'block')
		lis[i].className = 'blockoff';
    }
    if (bid('caltaken') &&
	bid('calmonths')) {
	lis = btags('caltaken', 'li');
	for (i = 0; i < lis.length; i++) {
	    bs = bint(lis[i]);
	    bbook(bs);
	}
	// if (bid('calmonths').childNodes.length)
	// bs = bint(bid('calmonths').firstChild);
	// else 
	bs = bint(bid('calmonths'));
	ys = bs[0].getFullYear();
	ms = bs[0].getMonth();
	ye = bs[1].getFullYear();
	me = bs[1].getMonth();
	do {
	    btables.push(btable(ms, ys));
	    btitles.push(bfulls[ms] + ' ' + ys);
	    ms++;
	    if (ms == 12) {
		ms = 0;
		ys++;
	    }
	} while (ys * 100 + ms <= ye * 100 + me);
	bdisp();
    }
    // Keep Oxatis stuff on
    return PGFOnLoad();
}
function btable(m, y) {
    var i, r, c;
    var e = new Date(y, m, 1);
    var f = new Date();
    var s = '';
    var n = (e.getDay() + 6) % 7; // 0: monday
    var t = bdom('table');
    var h = bdom('thead');
    var b = bdom('tbody');
    r = bdom('tr');
    for (i = 0; i < 7; i++)
        r.appendChild(bdom('th', bdays[i]))
	    h.appendChild(r);
    t.appendChild(h);
    r = bdom('tr');
    i = 0;
    while (i < n) {
        r.appendChild(bdom('td', '', 'out'));
	i++;
    }
    while (e.getMonth() == m) {
	if (e < f) c = 'out';
	else c = btaken[bymd(e)]? 'ko': 'ok';
	r.appendChild(bdom('td', e.getDate(), c));
	i = (i + 1) % 7;
	if (!i) {
	    b.appendChild(r);
	    r = bdom('tr');
	}
        e.setTime(e.getTime() + 86400000);
    }
    while (i % 7) {
        r.appendChild(bdom('td', '', 'out'));
	i++;
    }
    b.appendChild(r);
    t.appendChild(b);
    return t;
}
function bbook(bs) {
    var e = bs[0];
    while (e <= bs[1]) {
        btaken[bymd(e)] = true;
	e.setTime(e.getTime() + 86400000);
    }
}
function bdisp() {
    bclear(bid('calmonthleft'));
    bclear(bid('calmonthright'));
    bid('caltitleleft').innerHTML = btitles[cmonth];
    bid('calmonthleft').appendChild(btables[cmonth]);
    if (btitles[cmonth + 1]) {
        bid('caltitleright').innerHTML = btitles[cmonth + 1];
	bid('calmonthright').appendChild(btables[cmonth + 1]);
        bid('caltitleright').style.display = 'block';
    } else {
        bid('caltitleright').style.display = 'none';
    }
    bid('calprev').style.display = cmonth? 'block': 'none';
    bid('calnext').style.display = (cmonth < btitles.length - 1)? 'block': 'none';
}
function bymd(t) {
    var e = new Date(t.getTime() + 43200000);
    return e.getYear() + '-' + (e.getMonth() + 1) + '-' + e.getDate();
}

window.onload = bbuild;

