
// Title: Timestamp picker
// Description: See the demo at url
// URL: http://us.geocities.com/tspicker/
// Script featured on: http://javascriptkit.com/script/script2/timestamp.shtml
// Version: 1.0
// Date: 12-05-2001 (mm-dd-yyyy)
// Author: Denis Gritcyuk <denis@softcomplex.com>; <tspicker@yahoo.com>
// Notes: Permission given to use this script in any kind of applications if
//    header lines are left unchanged. Feel free to contact the author
//    for feature requests and/or donations

browser = navigator.appName;
isIE = (browser == "Microsoft Internet Explorer");

function show_calendar(str_target, str_datetime,str_iframe) {
        var arr_months = ["January", "February", "March", "April", "May", "June",
                "July", "August", "September", "October", "November", "December"];
        var week_days = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
        var n_weekstart = 0; // day week starts from (normally 0 or 1)

        var dt_datetime = (str_datetime == null || str_datetime =="" ?  new Date() : str2dt(str_datetime));
        var dt_prev_month = new Date(dt_datetime);
        dt_prev_month.setMonth(dt_datetime.getMonth()-1);
        var dt_next_month = new Date(dt_datetime);
        dt_next_month.setMonth(dt_datetime.getMonth()+1);
        var dt_firstday = new Date(dt_datetime);
        dt_firstday.setDate(1);
        dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
        var dt_lastday = new Date(dt_next_month);
        dt_lastday.setDate(0);
        

        // close window differently if in an IFRAME
        var closeCode = "window.close()";
        if (isIE && doAll)
              closeCode = "window.parent.document.all." + str_iframe + ".style.display='none'";
        else if (doGEl)
              closeCode = "window.parent.document.getElementById('" + str_iframe + "').style.display='none'";

        // html generation (feel free to tune it for your particular application)
        // print calendar header
        var str_buffer = new String (
                "<html>\n"+
                "<head>\n"+
                "       <title>Calendar</title>\n"+
                "       <link rel='stylesheet' type='text/css' href='/dec01/calendar/cal.css'>\n"+
                "</head>\n"+
                "<body bgcolor=\"white\">\n"+
                "<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
                "<tr><td class=\"topHeader\">\n"+
                "<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
                "<tr>\n <td class=\"topHeader\"><a href=\"javascript:window.opener.show_calendar('"+
                str_target+"', '"+ dt2dtstr(dt_prev_month)+"', '"+ str_iframe +"');\">"+
                "<img src=\"/dec01/calendar/prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
                " alt=\"previous month\"></a></td>\n"+
                "       <td class=\"topHeader\" colspan=\"5\">"+
                 arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</td>\n"+
                "       <td class=\"topHeader\" align=\"right\"><a href=\"javascript:window.opener.show_calendar('"
                +str_target+"', '"+dt2dtstr(dt_next_month)+"', '"+ str_iframe +"');\">"+
                "<img src=\"/dec01/calendar/next.gif\" width=\"16\" height=\"16\" border=\"0\""+
                " alt=\"next month\"></a></td>\n</tr>\n"
        );

        var dt_current_day = new Date(dt_firstday);
        // print weekdays titles
        str_buffer += "<tr>\n";
        for (var n=0; n<7; n++)
                str_buffer += " <td class=\"dayHeader\" width=\"14%\">"+
                week_days[(n_weekstart+n)%7]+"</td>\n";
        // print calendar table
        str_buffer += "</tr>\n";
        while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
                dt_current_day.getMonth() == dt_firstday.getMonth()) {
                // print row heder
                str_buffer += "<tr>\n";
                for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
                                if (dt_current_day.getDate() == dt_datetime.getDate() &&
                                        dt_current_day.getMonth() == dt_datetime.getMonth())
                                        // print current date
                                        str_buffer += " <td class='currentDay' align=\"right\">";
                                else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
                                        // weekend days
                                        str_buffer += " <td class='weekendDay' align=\"right\">";
                                else
                                        // print working days of current month
                                        str_buffer += " <td class='weekdayDay' align=\"right\">";

                                spanClass = "<span class=\"thisMonth\">"
                                if (dt_current_day.getMonth() != dt_datetime.getMonth())
                                       spanClass = "<span class=\"otherMonth\">" // colors of other month

                                var openerCode = "opener"
                                if (NS5pl)
                                  openerCode = "parent"

                                //str_buffer += "<a href=\"javascript:window."+openerCode+"."+str_target+
                                //      ".value='"+dt2dtstr(dt_current_day)+"'; " + closeCode + ";\">"+ spanClass;
                                str_buffer += "<a href=\"javascript:window."+openerCode+
                                      ".location='/dec01/appoint.pl?date="+
                                      dt2dtstr(dt_current_day)+"'; " + closeCode + ";\">"+ spanClass;
                                str_buffer += dt_current_day.getDate()+"</span></a></td>\n";
                                dt_current_day.setDate(dt_current_day.getDate()+1);

                }
                // print row footer
                str_buffer += "</tr>\n";
        }
        // print calendar footer
        str_buffer +=
                "<form name=\"cal\">\n<tr><td colspan=\"7\" class=\"dayHeader\">"+
                "<a href=\"javascript:" + closeCode + "\">Cancel</a>"+
                "</td></tr>\n</form>\n" +
                "</table>\n" +
                "</tr>\n</td>\n</table>\n" +
                "</body>\n" +
                "</html>\n";

        var calc_doc;
        if (isIE && doAll) {
            vWinCal = window.frames(str_iframe);
            dF = document.all(str_iframe);
            dF.style.display = "block";
            calc_doc = vWinCal.document;
        } else if (doGEl) {
            dF = document.getElementById(str_iframe);
            dF.style.display = "block";
            vWinCal = dF;
            calc_doc = vWinCal.contentDocument;
        } else {
           var vWinCal = window.open("", "Calendar", 
                "width=200,height=250,status=no,resizable=yes,top=200,left=200");
           calc_doc = vWinCal.document;
        }
        vWinCal.opener = self;
        calc_doc.write (str_buffer);
        calc_doc.close();
}

// datetime parsing and formatting routimes. modify them if you wish other datetime format

function str2dt (str_datetime) {
//        var re_date = /^(\d+)\-(\d+)\-(\d+)\s*$/;  // XX-XX-XX
        var re_date = /^(\d+)\/(\d+)\/(\d+)\s*$/;  // XX/XX/XX
        if (!re_date.exec(str_datetime))
                return alert("Invalid Datetime format: " + RegExp.$1 + str_datetime);
//        return (new Date (RegExp.$1, RegExp.$2-1, RegExp.$3)); // YYYY,MM,DD
        return (new Date (RegExp.$3, RegExp.$1-1, RegExp.$2)); // YYYY,MM,DD
}

function dt2dtstr (dt_datetime) {
        var gM = dt_datetime.getMonth()+1;
        var gD = dt_datetime.getDate();

        if (gM < 10) 
           gM = "0" + gM;

        if (gD < 10) 
           gD = "0" + gD;

//        return (new String (dt_datetime.getFullYear()+"-"+gM+"-"+gD)); // YYYY-MM-DD
        return (new String ( gM+"/"+gD+"/"+dt_datetime.getFullYear() )); // MM/DD/YYYY
}

