function calprint()
{
    var h = '';
    var time = '';
    var html = '<table border="0">';

    for (var week = 1; week < 7; week++)
    {
        for (var d = 1; d < 8; d++)
        {
            var day = getCalVal('dataDayWeek' + week + 'Day' + d);
            if (day)
            {
                if (calconf['events'][day])
                {
                    h = '<tr><td colspan="2" style="background-color:#c1c1c1;color:#535353;font-weight:bold;padding: 4px 0px 4px 10px;">[month] [day]</td></tr>';
                    h = h.replace('[month]', calconf['selected_month']);
                    h = h.replace('[day]', day);                    
                    html = html + h

                    var html_1 = '';
                    var html_2 = '';
                    
                    var cnt = new Array();
                        cnt['allday']  = 0;
                        cnt['regular'] = 0;
                    
                    var separator = new Array();
                        separator['between'] = '<hr class="eventDetailsSeparator" />';
                        separator['end']     = '<br/><br/>';
                    

                    // tally allday and regular events...
                    for (var eventE = 0; eventE < calconf['events'][day].length; eventE++)
                    {
                        if (calconf['events'][day][eventE]['flg_display'])
                        {
                            if (calconf['events'][day][eventE]['flg_allday'])
                            {
                                cnt['allday']  = cnt['allday'] + 1;
                            }
                            else
                            {
                                cnt['regular'] = cnt['regular'] + 1;
                            }
                        }
                    }

                    cnt['total'] = cnt['allday'] + cnt['regular'];

                    var sep = '';
                    var cnt_allday  = 0;
                    var cnt_regular = 0;

                    for (var eventE = 0; eventE < calconf['events'][day].length; eventE++)
                    {
                        if (calconf['events'][day][eventE]['flg_display'])
                        {
                            var event = calconf['events'][day][eventE];
                            
                            if (calconf['events'][day][eventE]['flg_allday'])
                            {
                                if (cnt['regular'] > 0)
                                {
                                    sep = separator['between'];
                                }
                                else
                                {
                                    sep = (cnt_allday < (cnt['allday'] - 1)) ? separator['between'] : separator['end'];
                                }
                                
                                time = 'All Day';
                            }
                            else
                            {
                                sep = (cnt_regular < (cnt['regular'] - 1)) ? separator['between'] : separator['end'];

                                var s_time = '<span class="eventDetailsStartTime">' + 
                                            event['start']['hour_12'] + 
                                            ((event['start']['min']  != '00')                 ? ':' + event['start']['min']  : '') + 
                                            ((event['start']['ampm'] != event['end']['ampm']) ?       event['start']['ampm'] : '') + 
                                            '</span>';
                    
                                var sep = (event['end']['hour_12']) ? '&nbsp;-&nbsp;' : '';
                                
                                var e_time = '<span class="eventDetailsEndTime">' +
                                            ((event['end']['hour_12'])     ?       event['end']['hour_12'] : '') +
                                            ((event['end']['min'] != '00') ? ':' + event['end']['min']     : '') + 
                                             event['end']['ampm'] +
                                            '</span>';
                    
                                time = s_time + sep + e_time;

                                cnt_regular = cnt_regular + 1;
                            }
                            
                            //time = (event['color']) ? '<span style="color:' + event['color'] + '">' + time + '</span>' :  time;

                            h = '<tr><td nowrap="nowrap" style="padding: 4px 6px 4px 10px;"><b>[time]</b></td><td><hr class="eventDetailsSeparator"/></td></tr>';
                            h = h.replace('[time]', time);
                            html = html + h

                            var title = (event['color']) ? '<span style="color:' + event['color'] + '">' + event['title'] + '</span>' :  event['title'];

                            h =     '<table>'
                            h = h + '<tr>'
                            h = h + '<td valign="top" style="padding-right:15px;"><img class="[iconclass]" src="[icon]" border="0"/></td>'
                            h = h + '<td valign="top"><b>[title]</b><br/><b>[location]</b><br/>[desc]</td>'
                            h = h + '</tr>'
                            h = h + '</table>'

                            if (event['icon'])
                            {
                                h = h.replace('[iconclass]', 'eventIcon');
                                h = h.replace('[icon]', event['icon']);
                            }
                            else
                            {
                                h = h.replace('[iconclass]', 'eventIconBlank');
                                h = h.replace('[icon]', 'http://timessquarenyc.org/images/blank.gif');
                            }

                            h = h.replace('[title]', title);

                            if (event['location'])
                            {
                                h = h.replace('[location]', 'Location: ' + event['location'] + '<br/>');
                            }
                            else
                            {
                                h = h.replace('[location]', '')
                            }
                            
                            if (event['desc'])
                            {
                                h = h.replace('[desc]', event['desc']);
                            }
                            else
                            {
                                h = h.replace('[desc]', '');
                            }

                            h = '<tr><td>&nbsp;</td><td style="padding-bottom:10px;">' + h + '</td></tr>';
                            html = html + h;
                        }
                    }
    
                } // if the day has events
            } // if (day)
        } // for each day d
    } // for each week

    html = html + '</table>'

    // build the outer table...

    h =     '<table border="0" cellspacing="1">'
    h = h + '<tr>'
    h = h + '<td valign="top" style="text-align:right;padding-right:12px;border-right: 1px solid #c1c1c1;">'
    h = h + '<img src="http://timessquarenyc.org/test/cal2/images/logo_163x82.gif" border="0"/>'

    h = h + '<br/>';
    h = h + '<br/>';
    h = h + '<span class="textCalendarTitle">[month] [year]</span>'
    h = h + '<br/>';
    h = h + '<font class="subHeading">Events Calendar</font>'
    h = h + '<br/>';
    h = h + '<br/>';
    h = h + '<img src="http://timessquarenyc.org/test/cal2/images/print.gif" border="0" style="cursor:pointer;" onClick="javascript:window.print();" />'

    h = h + '</td>'
    h = h + '<td valign="top" style="text-align:left;padding-left:8px;">[table]</td>'
    h = h + '</tr>'
    h = h + '</table>'

    h = h.replace('[month]', calconf['selected_month']);
    h = h.replace('[year]',  calconf['selected_year']);
    h = h.replace('[table]', html);
    
    html = h;

    // surrounding html document

    h =     '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'
    h = h + '<html>'
    h = h + '<head>'
    h = h + '<title>Times Square Alliance - About Us - Events - Calendar</title>'
    h = h + '<base href="http://timessquarenyc.org/about_us/">'
    h = h + '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">'
    h = h + '<meta NAME=Keywords CONTENT="information, events, schedule, calendar">'
    h = h + '<meta NAME=Classification CONTENT="TSA:About Us:Events:Calendar">'
    h = h + '<meta NAME=Description CONTENT="">'
    h = h + '<link rel="stylesheet" href="../stylesheets/main.css" type="text/css">'
    h = h + '<!-- the stuff in here collides with our javascript calendar environment'
    h = h + '<script language="javascript" src="../js/clib.js"></script>'
    h = h + '<script language="javascript" src="../js/cchk.js" defer></script>'
    h = h + '-->'
    h = h + '<link rel=stylesheet type="text/css" href="http://timessquarenyc.org/test/cal2/css/layout.css" />'
    h = h + '<link rel=stylesheet type="text/css" href="http://timessquarenyc.org/test/cal2/css/colors.css" />'
    h = h + '<link rel=stylesheet type="text/css" href="http://timessquarenyc.org/test/cal2/css/text.css" />'
    h = h + '<link rel=stylesheet type="text/css" href="http://timessquarenyc.org/test/cal2/css/images.css" />'
    h = h + '<style>'
    h = h + "\n"
    h = h + 'body { margin: 0px; padding: 10px; background-color: #fff; } '
    h = h + "\n"
    h = h + 'td { font-family: Arial, Helvetica; font-size: 13pt; } '
    h = h + "\n"
    h = h + 'td a { font-size: 13pt; } '
    h = h + "\n"
    h = h + 'eventDetailsStartTime { font-size: 13pt; } '
    h = h + "\n"
    h = h + '</style>'
    h = h + '</head>'
    h = h + '<body>[body]</body>'
    h = h + '</html>'

    h = h.replace('[body]', html)
    html = h;

    var window_settings = 'height=400,width=700,scrollbars=yes,resizable=yes,menubar=no,toolbar=no,status=no'
    var w = window.open('about:blank', 'printWindowPop', window_settings);
        w.document.write(html);
        w.document.close();
        w.print();

    return false;

} //calprint()