// Custom page Java scrips
// © 2007 Nikolai Varankine
// $Id: calendar.js,v $

/**
 * Builds a table with calendar for current month
 */
function calendar( months, weekdays )
{
    var today = new Date(), day = new Date();
    var wd, month = today.getMonth();
    var wds = weekdays.split( "," ); //new Array("m","t","w","t","f","s","s");
    var mns = months.split( "," ); //new Array("j","f",...);
	var year = today.getYear(); if( year < 1900 ) year += 1900;

    document.write( "<center><table class=\"calendar\" >" );
    document.write( "<caption>" + mns[month] + " " + year + "</caption>" );

    // make header
    document.write( "<thead><tr>" );
    for( wd = 1; wd <= 7; wd++ )
        document.write( "<th>" + wds[wd-1] + "</th>" );
    document.writeln( "</tr></thead>" );

    // shift first calendar day to Monday
	var weekstart = 1;
    day.setDate( weekstart );
	var weekday = day.getDay(); if( weekday == 0 ) weekday = 7;
    day.setTime( day.getTime() - ( weekday - weekstart )*24*60*60*1000 );

    // produce table
    document.write( "<tbody>" );
    while( true ) 
    {
        document.write( "<tr>" );
        for( wd = 1; wd <= 7; wd++ )
        {
            var cls = "day";
            if( day.getMonth() != month ) cls = "refday";
            else if( day.getTime() == today.getTime() ) cls = "today";
            document.write( "<td class=\"" + cls + "\" >" + day.getDate() + "</td>" );
            day.setTime( day.getTime() + 1*24*60*60*1000 );
        }
        document.write( "</tr>" );
        if( day.getMonth() > month || day.getMonth() == 0 && month == 11 ) break;
    }
    document.write( "</tbody></table></center>" );
}

/**
 * Adjusts displayed time while keeping hours adequate
 */
function tick( a_clock )
{
	// get displayed time, initially set up by local server
	var hm = a_clock.innerText.split( ":" );
	var h = new Number( hm[0] );
	var m = new Number( hm[1] );
	// compute gentle adjustment to clock minutes of running client :)
	var offsetHours = new Number( 0 );
	var offsetMinutes = new Number( ( new Date() ).getMinutes() - m );
	if( offsetMinutes > 45 ) --offsetHours;
	else if( offsetMinutes < -45 ) ++offsetHours;
	if( Math.abs( offsetMinutes ) >= 15 && Math.abs( offsetMinutes ) <= 45 ) offsetMinutes = 0; // uncertain offset
	// apply adjustment
	m += offsetMinutes;
	h += offsetHours + 24;
	m %= 60;
	h %= 24;
	// update field in 24 hour system
	hm[0] = "0" + h.toString(); hm[0] = hm[0].substr( hm[0].length - 2, 2 );
	hm[1] = "0" + m.toString(); hm[1] = hm[1].substr( hm[1].length - 2, 2 );
	a_clock.innerText = hm[0] + ":" + hm[1];
}
