<!-- Original:  James Thiele (jet @ eskimo.com) -->
<!-- Revised and extended: Peter Enzerink (moonphase @ enzerink.net) -->

function moonphase(caldate, moonsize) {
    
	 var moondate = new Date(caldate);
    moondate.setTime( moondate.getTime() + moondate.getTimezoneOffset() * 60000 );
    var black = "/cas/images/black.gif";
    var white = "/cas/images/white.gif";
    var height=1;
    var size = moonsize;
    var i;

    var bluemoon = new Date( 96, 1, 3, 16, 15, 0 );
    var lunarperiod = 29 * ( 24 * 3600 * 1000 ) + 12 * ( 3600 * 1000 ) + 44.05 * ( 60 * 1000 );
    var phasetime = ( moondate.getTime() - bluemoon.getTime() ) % lunarperiod;
    // days to fullmoon
    var fullmoon = Math.round( ( lunarperiod - phasetime ) / ( 24 * 3600 * 1000 ) );
	 var agemoon = phasetime  / ( 24 * 3600 * 1000 );
    var fraction = phasetime / lunarperiod;
    var percent = Math.round( 200 * fraction ) % 100;
    var left  = Math.round(fraction * 100) / 100 >= 0.5 ? black : white;
    var right = Math.round(fraction * 100) / 100 >= 0.5 ? white : black;
    
    for ( i = -(size-1); i < size; ++i ) {
        width = 2 * parseFloat( Math.sqrt( size * size - i * i ) ) / 100;
        if( percent !== 100 )
            document.write('<img src="' + left + '" width="' + ( width * ( 100 - percent ) ) + '" height="1">' );
        if( percent !== 0 )
            document.write( '<img src="' + right + '" width="' + ( width * percent ) + '" height="1">' );
        document.write('<br/>' );
    }
 
    //m = (fullmoon == 0 ? 'Full' : (Math.round(15 - agemoon) == 0 ? 'New' : '&nbsp;'));
}


function drawcalendar() {
    //  SET ARRAYS
    var day_of_week = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
    var month_of_year = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
    
    //  DECLARE AND INITIALIZE VARIABLES

    var Calendar = new Date();
    
    var year = Calendar.getYear();	    // Returns year
    var month = Calendar.getMonth();    // Returns month (0-11)
    var today = Calendar.getDate();    // Returns day (1-31)
    var weekday = Calendar.getDay();    // Returns day (0-7)
    
	 var firstday;
	 
    var DAYS_OF_WEEK = 7;    // "constant" for number of days in a week
    var DAYS_OF_MONTH = 42;    // "constant" for number of days in a month
    var cal;    // Used for printing

    year = year % 100;
    year += (year < 38) ? 2000 : 1900;
    
    var TR_start = '<TR>';
    var TR_end = '</TR>\n';
    var TD_start = '<TD class="phase" width="110">';
    var TD_end = '</TD>';
    
    document.write('<TABLE align="center" BORDER="0">' + TR_start);
    document.write('<TD COLSPAN="' + DAYS_OF_WEEK + '" class="phase"><B>');
    document.write(month_of_year[month]  + '   ' + year + '</B></td>' + TR_end);

    document.write(TR_start);
    // LOOPS FOR EACH DAY OF WEEK
    for(index=0; index < DAYS_OF_WEEK; index++)
	 				 document.write( TD_start + day_of_week[index] + TD_end);

    document.write(TR_end + TR_start);

    Calendar.setDate(1);    // Start the calendar day at '1'
	 firstday = Calendar.getDay();	 
	 
	 // Reset to first column
	 Calendar.setDate(Calendar.getDate() - firstday);
	 
    // FILL IN small moons UNTIL TODAY'S DAY
    for (index=0; index < firstday; index++) {
         document.write( TD_start + Calendar.getDate() + '<br />');
        moonphase(Calendar, 23);
        document.write(TD_end);
        Calendar.setDate(Calendar.getDate()+1);
	 }

    Calendar.setDate(1);    // Start the calendar day at '1'
    Calendar.setMonth(month);    // Start the calendar month at now

    // LOOPS FOR EACH DAY IN CALENDAR
	 index = 0;
	 while (index < DAYS_OF_MONTH - firstday) {
	 
        if( Calendar.getDate() > index ) {
        
            // RETURNS THE NEXT DAY TO PRINT
            weekday =Calendar.getDay();
            
            // START NEW ROW FOR FIRST DAY OF WEEK
            if(weekday == 0)
                document.write(TR_start);
            
            if(weekday != DAYS_OF_WEEK) {
                var day  = Calendar.getDate();
                
                document.write( TD_start + Calendar.getDate() + '<br />');
                moonphase(Calendar, 31);
                document.write(TD_end);
            }
            
            // END ROW FOR LAST DAY OF WEEK
            if(weekday == DAYS_OF_WEEK)
            document.write(TR_end);
        } else {
		     if(Calendar.getDay() == 0) {
					index = DAYS_OF_MONTH - firstday;
				} else {    
                document.write( TD_start + Calendar.getDate() + '<br />');
                moonphase(Calendar, 23);
                document.write(TD_end);
			 }
		 }
        index++;
        Calendar.setDate(Calendar.getDate()+1);
    }// end for loop
    
    document.write('</TR></TABLE>');
}
