home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 October / Chip_2002-10_cd1.bin / internet / svetpda.cz / svetpda / svetpda.nsf / date-picker.js < prev    next >
Text File  |  2002-08-23  |  15KB  |  445 lines

  1. var DateMin = new Date('11/01/2001');
  2. var DateMax = new Date();
  3. var weekend = [5,6];
  4. var weekendColor = "#d9e5e7";
  5. var fontface = "Verdana";
  6. var fontsize = 2;
  7. var vDayMin, vDayMax
  8. var gNow = new Date();
  9. var ggWinCal;
  10. isNav = (navigator.appName.indexOf("Netscape") != -1) ? true : false;
  11. isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;
  12. Calendar.Months = ["Leden", "├Ünor", "B┼Öezen", "Duben", "Kv─¢ten", "─îerven", "─îervenec", "Srpen", "Z├í┼Ö├¡", "┼ÿ├¡jen", "Listopad", "Prosinec"];
  13. Calendar.Days = ["Po","├Üt","St","─ît","P├í","So","Ne"];
  14. // Non-Leap year Month days..
  15. Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  16. // Leap year Month days..
  17. Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  18. function Calendar(p_item, p_WinCal, p_month, p_year, p_format) {
  19.     if ((p_month == null) && (p_year == null))    return;
  20.     this.gWinCal = p_WinCal == null ? ggWinCal : p_WinCal;
  21.     
  22.     if (p_month == null) {
  23.         this.gMonthName = this.gMonth = null;
  24.         this.gYearly = true;
  25.     } else {
  26.         this.gMonthName = Calendar.get_month(p_month);
  27.         this.gMonth = new Number(p_month);
  28.         this.gYearly = false;
  29.     }
  30.     this.gYear = p_year;
  31.     this.gFormat = p_format;
  32.     this.gBGColor = "white";
  33.     this.gFGColor = "black";
  34.     this.gTextColor = "black";
  35.     this.gHeaderColor = "black";
  36.     this.gReturnItem = p_item;
  37. }
  38. Calendar.get_month = Calendar_get_month;
  39. Calendar.get_daysofmonth = Calendar_get_daysofmonth;
  40. Calendar.calc_month_year = Calendar_calc_month_year;
  41. Calendar.print = Calendar_print;
  42. function Calendar_get_month(monthNo) {
  43.     return Calendar.Months[monthNo];
  44. }
  45. function Calendar_get_daysofmonth(monthNo, p_year) {
  46.     if ((p_year % 4) == 0) {
  47.         if ((p_year % 100) == 0 && (p_year % 400) != 0)
  48.             return Calendar.DOMonth[monthNo];
  49.         return Calendar.lDOMonth[monthNo];
  50.     } else
  51.         return Calendar.DOMonth[monthNo];
  52. }
  53. function Calendar_calc_month_year(p_Month, p_Year, incr) {
  54.     var ret_arr = new Array();
  55.     
  56.     if (incr == -1) {
  57.         // B A C K W A R D
  58.         if (p_Month == 0) {
  59.             ret_arr[0] = 11;
  60.             ret_arr[1] = parseInt(p_Year) - 1;
  61.         }
  62.         else {
  63.             ret_arr[0] = parseInt(p_Month) - 1;
  64.             ret_arr[1] = parseInt(p_Year);
  65.         }
  66.     } else if (incr == 1) {
  67.         // F O R W A R D
  68.         if (p_Month == 11) {
  69.             ret_arr[0] = 0;
  70.             ret_arr[1] = parseInt(p_Year) + 1;
  71.         }
  72.         else {
  73.             ret_arr[0] = parseInt(p_Month) + 1;
  74.             ret_arr[1] = parseInt(p_Year);
  75.         }
  76.     }
  77.     
  78.     return ret_arr;
  79. }
  80. function Calendar_print() {
  81.     ggWinCal.print();
  82. }
  83. function Calendar_calc_month_year(p_Month, p_Year, incr) {
  84.     var ret_arr = new Array();
  85.     
  86.     if (incr == -1) {
  87.         // B A C K W A R D
  88.         if (p_Month == 0) {
  89.             ret_arr[0] = 11;
  90.             ret_arr[1] = parseInt(p_Year) - 1;
  91.         }
  92.         else {
  93.             ret_arr[0] = parseInt(p_Month) - 1;
  94.             ret_arr[1] = parseInt(p_Year);
  95.         }
  96.     } else if (incr == 1) {
  97.         // F O R W A R D
  98.         if (p_Month == 11) {
  99.             ret_arr[0] = 0;
  100.             ret_arr[1] = parseInt(p_Year) + 1;
  101.         }
  102.         else {
  103.             ret_arr[0] = parseInt(p_Month) + 1;
  104.             ret_arr[1] = parseInt(p_Year);
  105.         }
  106.     }
  107.     
  108.     return ret_arr;
  109. }
  110. // This is for compatibility with Navigator 3, we have to create and discard one object before the prototype object exists.
  111. new Calendar();
  112. Calendar.prototype.getMonthlyCalendarCode = function() {
  113.     var vCode = "";
  114.     var vHeader_Code = "";
  115.     var vData_Code = "";
  116.     
  117.     // Begin Table Drawing code here..
  118.     vCode = "<TABLE WIDTH=190 BORDER=1 BGCOLOR=\"" + this.gBGColor + "\">";
  119.     
  120.     vHeader_Code = this.cal_header();
  121.     vData_Code = this.cal_data();
  122.     vCode += vHeader_Code + vData_Code;
  123.     
  124.     vCode = vCode + "</TABLE>";
  125.     
  126.     return vCode;
  127. }
  128. Calendar.prototype.show = function() {
  129.     var vCode = "";
  130.     
  131.     this.gWinCal.document.open();
  132.     // Setup the page...
  133.     this.wwrite("<html>");
  134.     this.wwrite("<head><title>Kalend├í┼Ö</title>");
  135.     this.wwrite("</head>");
  136.     this.wwrite("<body " + 
  137.         "link=\"" + this.gLinkColor + "\" " + 
  138.         "vlink=\"" + this.gLinkColor + "\" " +
  139.         "alink=\"" + this.gLinkColor + "\" " +
  140.         "text=\"" + this.gTextColor + "\">");
  141.     this.wwriteA("<FONT FACE='" + fontface + "' SIZE=2><B>");
  142.     this.wwriteA(this.gMonthName + " " + this.gYear);
  143.     this.wwriteA("</B><BR>");
  144.     // Show navigation buttons
  145.     var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);
  146.     var prevMM = prevMMYYYY[0];
  147.     var prevYYYY = prevMMYYYY[1];
  148.     var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);
  149.     var nextMM = nextMMYYYY[0];
  150.     var nextYYYY = nextMMYYYY[1];
  151.     
  152.     this.wwrite("<TABLE WIDTH='190' BORDER=1 CELLSPACING=0 CELLPADDING=0 BGCOLOR='#d9e5e7'><TR><TD ALIGN=center>");
  153.     this.wwrite("<A HREF=\"" +
  154.         "javascript:window.opener.Build(" + 
  155.         "'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)-1) + "', '" + this.gFormat + "'" +
  156.         ");" +
  157.         "\"><FONT SIZE='2' FACE='Verdana'><<</FONT><\/A></TD><TD ALIGN=center>");
  158.     this.wwrite("<A HREF=\"" +
  159.         "javascript:window.opener.Build(" + 
  160.         "'" + this.gReturnItem + "', '" + prevMM + "', '" + prevYYYY + "', '" + this.gFormat + "'" +
  161.         ");" +
  162.         "\"><FONT SIZE='2' FACE='Verdana'><</FONT><\/A></TD><TD ALIGN=center>");
  163.     this.wwrite("<FONT SIZE='2' FACE='Verdana'>Vyber</FONT></TD><TD ALIGN=center>");
  164.     this.wwrite("<A HREF=\"" +
  165.         "javascript:window.opener.Build(" + 
  166.         "'" + this.gReturnItem + "', '" + nextMM + "', '" + nextYYYY + "', '" + this.gFormat + "'" +
  167.         ");" +
  168.         "\"><FONT SIZE='2' FACE='Verdana'>></FONT><\/A></TD><TD ALIGN=center>");
  169.     this.wwrite("<A HREF=\"" +
  170.         "javascript:window.opener.Build(" + 
  171.         "'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)+1) + "', '" + this.gFormat + "'" +
  172.         ");" +
  173.         "\"><FONT SIZE='2' FACE='Verdana'>>></FONT><\/A></TD></TR></TABLE><BR>");
  174.     // Get the complete calendar code for the month..
  175.     vCode = this.getMonthlyCalendarCode();
  176.     this.wwrite(vCode);
  177.     this.wwrite("</font></body></html>");
  178.     this.gWinCal.document.close();
  179. }
  180. Calendar.prototype.showY = function() {
  181.     var vCode = "";
  182.     var i;
  183.     var vr, vc, vx, vy;        // Row, Column, X-coord, Y-coord
  184.     var vxf = 285;            // X-Factor
  185.     var vyf = 200;            // Y-Factor
  186.     var vxm = 10;            // X-margin
  187.     var vym;                // Y-margin
  188.     if (isIE)    vym = 75;
  189.     else if (isNav)    vym = 25;
  190.     
  191.     this.gWinCal.document.open();
  192.     this.wwrite("<html>");
  193.     this.wwrite("<head><title>Kalend├í┼Ö</title>");
  194.     this.wwrite("<style type='text/css'>\n<!--");
  195.     for (i=0; i<12; i++) {
  196.         vc = i % 3;
  197.         if (i>=0 && i<= 2)    vr = 0;
  198.         if (i>=3 && i<= 5)    vr = 1;
  199.         if (i>=6 && i<= 8)    vr = 2;
  200.         if (i>=9 && i<= 11)    vr = 3;
  201.         
  202.         vx = parseInt(vxf * vc) + vxm;
  203.         vy = parseInt(vyf * vr) + vym;
  204.         this.wwrite(".lclass" + i + " {position:absolute;top:" + vy + ";left:" + vx + ";}");
  205.     }
  206.     this.wwrite("-->\n</style>");
  207.     this.wwrite("</head>");
  208.     this.wwrite("<body " + 
  209.         "link=\"" + this.gLinkColor + "\" " + 
  210.         "vlink=\"" + this.gLinkColor + "\" " +
  211.         "alink=\"" + this.gLinkColor + "\" " +
  212.         "text=\"" + this.gTextColor + "\">");
  213.     this.wwrite("<FONT FACE='" + fontface + "' SIZE=2><B>");
  214.     this.wwrite("Rok : " + this.gYear);
  215.     this.wwrite("</B><BR>");
  216.     // Show navigation buttons
  217.     var prevYYYY = parseInt(this.gYear) - 1;
  218.     var nextYYYY = parseInt(this.gYear) + 1;
  219.     
  220.     this.wwrite("<TABLE WIDTH='100%' BORDER=1 CELLSPACING=0 CELLPADDING=0 BGCOLOR='#e0e0e0'><TR><TD ALIGN=center>");
  221.     this.wwrite("<A HREF=\"" +
  222.         "javascript:window.opener.Build(" + 
  223.         "'" + this.gReturnItem + "', null, '" + prevYYYY + "', '" + this.gFormat + "'" +
  224.         ");" +
  225.         "\" alt='Prev Year'><<<\/A></TD><TD ALIGN=center>");
  226.     this.wwrite("<A HREF=\"javascript:window.print();\">Tisknout</A></TD><TD ALIGN=center>");
  227.     this.wwrite("<A HREF=\"" +
  228.         "javascript:window.opener.Build(" + 
  229.         "'" + this.gReturnItem + "', null, '" + nextYYYY + "', '" + this.gFormat + "'" +
  230.         ");" +
  231.         "\">>><\/A></TD></TR></TABLE><BR>");
  232.     // Get the complete calendar code for each month..
  233.     var j;
  234.     for (i=11; i>=0; i--) {
  235.         if (isIE)
  236.             this.wwrite("<DIV ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");
  237.         else if (isNav)
  238.             this.wwrite("<LAYER ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");
  239.         this.gMonth = i;
  240.         this.gMonthName = Calendar.get_month(this.gMonth);
  241.         vCode = this.getMonthlyCalendarCode();
  242.         this.wwrite(this.gMonthName + "/" + this.gYear + "<BR>");
  243.         this.wwrite(vCode);
  244.         if (isIE)
  245.             this.wwrite("</DIV>");
  246.         else if (isNav)
  247.             this.wwrite("</LAYER>");
  248.     }
  249.     this.wwrite("</font><BR></body></html>");
  250.     this.gWinCal.document.close();
  251. }
  252. Calendar.prototype.wwrite = function(wtext) {
  253.     this.gWinCal.document.writeln(wtext);
  254. }
  255. Calendar.prototype.wwriteA = function(wtext) {
  256.     this.gWinCal.document.write(wtext);
  257. }
  258. Calendar.prototype.cal_header = function() {
  259.     var vCode = "";
  260.     for (var i=0;i<7;i++) {
  261.         vCode += "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>" + Calendar.Days[i] + "</B></FONT></TD>";
  262.     }
  263.     return "<TR>" + vCode + "</TR>";
  264. }
  265. Calendar.prototype.cal_data = function() {
  266.     var vDate = new Date();
  267.     vDate.setDate(1);
  268.     vDate.setMonth(this.gMonth);
  269.     vDate.setFullYear(this.gYear);
  270.     vDayMin=DateMin>vDate?DateMin.getDate():0;
  271.     vDayMax=vDate>DateMax?0:32;
  272.     var tmp=vDate.getDay();
  273.     var vFirstDay=tmp==0?6:--tmp;
  274.     var vDay=1;
  275.     var vLastDay=Calendar.get_daysofmonth(this.gMonth, this.gYear);
  276.     vDate.setDate(vLastDay);
  277.     var vOnLastDay=0;
  278.     var vCode = "";
  279.     if (vDayMax != 0) vDayMax=vDate>DateMax?DateMax.getDate():32;
  280.     if (vDayMin != 0) vDayMin=vDate<=DateMin?32:vDayMin;
  281.     /*
  282.     Get day for the 1st of the requested month/year..
  283.     Place as many blank cells before the 1st day of the month as necessary. 
  284.     */
  285.     vCode = vCode + "<TR>";
  286.     for (i=0; i<vFirstDay; i++) {
  287.         vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(i) + "><FONT SIZE='2' FACE='" + fontface + "'> </FONT></TD>";
  288.     }
  289.     // Write rest of the 1st week
  290.     for (j=vFirstDay; j<7; j++) {
  291.         vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT SIZE='2' FACE='" + fontface + "'>";
  292.         if ((vDay>=vDayMin)&&(vDay<=vDayMax)) {
  293.              vCode = vCode + "<A HREF='#' " + 
  294.                 "onClick=\"self.opener.location=\'/svetpda/svetpda.nsf/homepage?readform&count=30&startkey=" + this.format_data(vDay) + "\';window.close();\">" + 
  295.                 this.format_day(vDay) + 
  296.             "</A>"} else {
  297.              vCode = vCode + this.format_day(vDay)
  298.         };
  299.         vCode = vCode + "</FONT></TD>";
  300.         vDay=vDay + 1;
  301.     }
  302.     vCode = vCode + "</TR>";
  303.     // Write the rest of the weeks
  304.     for (k=2; k<7; k++) {
  305.         vCode = vCode + "<TR>";
  306.         for (j=0; j<7; j++) {
  307.             vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT SIZE='2' FACE='" + fontface + "'>";
  308.         if ((vDay>=vDayMin)&&(vDay<=vDayMax)) {
  309.             vCode = vCode + "<A HREF='#' " + 
  310.                 "onClick=\"self.opener.location=\'/svetpda/svetpda.nsf/homepage?readform&count=30&startkey=" + this.format_data(vDay) + "\';window.close();\">" + 
  311.                 this.format_day(vDay) + 
  312.                 "</A>"
  313.         } else {
  314.             vCode = vCode + this.format_day(vDay)
  315.         }
  316.             vCode = vCode + "</FONT></TD>";
  317.             vDay=vDay + 1;
  318.             if (vDay > vLastDay) {
  319.                 vOnLastDay = 1;
  320.                 break;
  321.             }
  322.         }
  323.         if (j == 6)
  324.             vCode = vCode + "</TR>";
  325.         if (vOnLastDay == 1)
  326.             break;
  327.     }
  328.     
  329.     // Fill up the rest of last week with proper blanks, so that we get proper square blocks
  330.     for (m=1; m<(7-j); m++) {
  331.         if (this.gYearly)
  332.             vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) + 
  333.             "><FONT SIZE='2' FACE='" + fontface + "' COLOR='gray'> </FONT></TD>";
  334.         else
  335.             vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) + 
  336.             "><FONT SIZE='2' FACE='" + fontface + "' COLOR='gray'>" + m + "</FONT></TD>";
  337.     }
  338.     
  339.     return vCode;
  340. }
  341. Calendar.prototype.format_day = function(vday) {
  342.     var vNowDay = gNow.getDate();
  343.     var vNowMonth = gNow.getMonth();
  344.     var vNowYear = gNow.getFullYear();
  345.     if ((vday < vDayMin) || (vday > vDayMax))
  346.         return ("<FONT COLOR=\"gray\">" + vday + "</FONT>");
  347.     if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
  348.         return ("<FONT COLOR=\"#ff6600\"><B>" + vday + "</B></FONT>");
  349.     else
  350.         return (vday);
  351. }
  352. Calendar.prototype.write_weekend_string = function(vday) {
  353.     var i;
  354.     // Return special formatting for the weekend day.
  355.     for (i=0; i<weekend.length; i++) {
  356.         if (vday == weekend[i])
  357.             return (" BGCOLOR=\"" + weekendColor + "\"");
  358.     }
  359.     
  360.     return "";
  361. }
  362. Calendar.prototype.format_data = function(p_day) {
  363.     var vData;
  364.     var vMonth = 1 + this.gMonth;
  365.     vMonth = (vMonth.toString().length < 2) ? "0" + vMonth : vMonth;
  366.     var vMon = Calendar.get_month(this.gMonth).substr(0,3).toUpperCase();
  367.     var vFMon = Calendar.get_month(this.gMonth).toUpperCase();
  368.     var vY4 = new String(this.gYear);
  369.     var vY2 = new String(this.gYear.substr(2,2));
  370.     var vDD = (p_day.toString().length < 2) ? "0" + p_day : p_day;
  371.     switch (this.gFormat) {
  372.         case "YYYYMMDD" :
  373.             vData = vY4 + vMonth + vDD;
  374.             break;
  375.         case "DD.MM.YY" :
  376.             vData = vDD + "." + vMonth + "." + vY2;
  377.             break;
  378.         case "DD.MM.YYYY" :
  379.             vData = vDD + "." + vMonth + "." + vY4;
  380.             break;
  381.         case "DD.MON.YYYY" :
  382.             vData = vDD + "." + vMon + "." + vY4;
  383.             break;
  384.         case "DD.MONTH.YYYY" :
  385.             vData = vDD + "." + vFMon + "." + vY4;
  386.             break;
  387.         default :
  388.             vData = vDD + "." + vMonth + "." + vY4;
  389.     }
  390.     return vData;
  391. }
  392. function Build(p_item, p_month, p_year, p_format) {
  393.     var p_WinCal = ggWinCal;
  394.     gCal = new Calendar(p_item, p_WinCal, p_month, p_year, p_format);
  395.     // Customize your Calendar here..
  396.     gCal.gBGColor="white";
  397.     gCal.gLinkColor="black";
  398.     gCal.gTextColor="black";
  399.     gCal.gHeaderColor="#004e5f";
  400.     // Choose appropriate show function
  401.     if (gCal.gYearly)    gCal.showY();
  402.     else    gCal.show();
  403. }
  404. function show_calendar() {
  405.     /* 
  406.         p_month : 0-11 for Jan-Dec; 12 for All Months.
  407.         p_year    : 4-digit year
  408.         p_format: Date format (mm/dd/yyyy, dd/mm/yy, ...)
  409.         p_item    : Return Item.
  410.     */
  411.     p_item = arguments[0];
  412.     if (arguments[1] == null)
  413.         p_month = new String(gNow.getMonth());
  414.     else
  415.         p_month = arguments[1];
  416.     if (arguments[2] == "" || arguments[2] == null)
  417.         p_year = new String(gNow.getFullYear().toString());
  418.     else
  419.         p_year = arguments[2];
  420.     if (arguments[3] == null)
  421.         p_format = "DD.MM.YYYY";
  422.     else
  423.         p_format = arguments[3];
  424.     vWinCal = window.open("", "Calendar", 
  425.         "width=210,height=240,status=no,resizable=no,top=200,left=200");
  426.     vWinCal.opener = self;
  427.     ggWinCal = vWinCal;
  428.     Build(p_item, p_month, p_year, p_format);
  429.     window.location = "/svetpda/svetpda.nsf/"
  430. }
  431. /*
  432. Yearly Calendar Code Starts here
  433. */
  434. function show_yearly_calendar(p_item, p_year, p_format) {
  435.     // Load the defaults..
  436.     if (p_year == null || p_year == "")
  437.         p_year = new String(gNow.getFullYear().toString());
  438.     if (p_format == null || p_format == "")
  439.         p_format = "DD.MM.YYYY";
  440.     var vWinCal = window.open("", "Calendar", "scrollbars=yes");
  441.     vWinCal.opener = self;
  442.     ggWinCal = vWinCal;
  443.     Build(p_item, null, p_year, p_format);
  444. }
  445.