calendar.js
上传用户:mingda
上传日期:2017-06-20
资源大小:27691k
文件大小:11k
源码类别:

OA系统

开发平台:

Java

  1. var gdCtrl = new Object();
  2. var goSelectTag = new Array();
  3. var gcGray = "#808080";
  4. var gcToggle = "#5555aa";
  5. var gcBG = "#FFFFFF";
  6. var gcFront = "#000000";
  7. var previousObject = null;
  8. var ddArguments=window.dialogArguments;
  9. var minyear = dialogArguments[1];
  10. var maxyear = dialogArguments[2];
  11. var currentvalue = dialogArguments[0];
  12. var gdCurDate = new Date();
  13. if(isNaN(parseInt(minyear,10)))
  14. {
  15.   minyear=gdCurDate.getFullYear()-5;
  16. }
  17. else if(parseInt(minyear,10)<150)
  18. {
  19.   eval("minyear=gdCurDate.getFullYear()+("+minyear+")");
  20. }
  21. if(isNaN(parseInt(maxyear,10)))
  22. {
  23.     maxyear=gdCurDate.getFullYear()+5;
  24. }
  25. else if(parseInt(maxyear,10)<150)
  26. {
  27.   eval("maxyear=gdCurDate.getFullYear()+("+maxyear+")");
  28. }
  29. if(currentvalue!="")
  30.   gdCurDate = new Date(currentvalue.substr(0,4),parseInt(currentvalue.substr(5,2),10)-1,currentvalue.substr(8,2));
  31. if(isNaN(gdCurDate)||currentvalue=="")
  32. {
  33.     gdCurDate = new Date();
  34. }
  35. var giYear = gdCurDate.getFullYear();
  36. var giMonth = gdCurDate.getMonth()+1;
  37. var giDay = gdCurDate.getDate();
  38. var gCalMode = "";
  39. var gCalDefDate = "";
  40. var CAL_MODE_NOBLANK = "2";
  41. function fSetDate(iYear, iMonth, iDay)
  42. {
  43.     //VicPopCal.style.visibility = "hidden";
  44.     if ((iYear == 0) && (iMonth == 0) && (iDay == 0))
  45.     {
  46.         gdCtrl.value = "";
  47.     }
  48.     else
  49.     {
  50.         iMonth = iMonth + 100 + "";
  51.         iMonth = iMonth.substring(1);
  52.         iDay   = iDay + 100 + "";
  53.         iDay   = iDay.substring(1);
  54.         gdCtrl.value = iYear+"-"+iMonth+"-"+iDay;
  55.     }
  56.     for (i in goSelectTag)
  57.     {
  58.         goSelectTag[i].style.visibility = "visible";
  59.     }
  60.     goSelectTag.length = 0;
  61.     window.returnValue=gdCtrl.value;
  62.     window.close();
  63. }
  64. function HiddenDiv()
  65. {
  66.     var i;
  67.     VicPopCal.style.visibility = "hidden";
  68.     for (i in goSelectTag)
  69.     {
  70.         goSelectTag[i].style.visibility = "visible";
  71.     }
  72.     goSelectTag.length = 0;
  73. }
  74. function fSetSelected(aCell)
  75. {
  76.     var iOffset = 0;
  77.     var iYear = parseInt(tbSelYear.value,10);
  78.     var iMonth = parseInt(tbSelMonth.value,10);
  79.     aCell.bgColor = gcBG;
  80.     with (aCell.children["cellText"])
  81.     {
  82.         var iDay = parseInt(innerText,10);
  83.         if (color==gcGray)
  84.         {
  85.             iOffset = (Victor<10)?-1:1;
  86.         }
  87.         /*** below temp patch by maxiang ***/
  88.         if( color == gcGray )
  89.         {
  90.             iOffset = (iDay < 15 )?1:-1;
  91.         }
  92.         /*** above temp patch by maxiang ***/
  93.         iMonth += iOffset;
  94.         if (iMonth<1)
  95.         {
  96.             iYear--;
  97.             iMonth = 12;
  98.         }
  99.         else if (iMonth>12)
  100.         {
  101.             iYear++;
  102.             iMonth = 1;
  103.         }
  104.     }
  105.     fSetDate(iYear, iMonth, iDay);
  106. }
  107. function Point(iX, iY)
  108. {
  109.     this.x = iX;
  110.     this.y = iY;
  111. }
  112. function fBuildCal(iYear, iMonth)
  113. {
  114.     var aMonth=new Array();
  115.     for(i=1;i<7;i++)
  116.     {
  117.         aMonth[i]=new Array(i);
  118.     }
  119.     var dCalDate=new Date(iYear, iMonth-1, 1);
  120.     var iDayOfFirst=dCalDate.getDay();
  121.     var iDaysInMonth=new Date(iYear, iMonth, 0).getDate();
  122.     var iOffsetLast=new Date(iYear, iMonth-1, 0).getDate()-iDayOfFirst+1;
  123.     var iDate = 1;
  124.     var iNext = 1;
  125.     for (d = 0; d < 7; d++)
  126.     {
  127.         aMonth[1][d] = (d<iDayOfFirst)?-(iOffsetLast+d):iDate++;
  128.     }
  129.     for (w = 2; w < 7; w++)
  130.     {
  131.         for (d = 0; d < 7; d++)
  132.         {
  133.             aMonth[w][d] = (iDate<=iDaysInMonth)?iDate++:-(iNext++);
  134.         }
  135.     }
  136.     return aMonth;
  137. }
  138. function fDrawCal(iYear, iMonth, iCellHeight, sDateTextSize)
  139. {
  140.     var WeekDay = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
  141.     var styleTD = " bgcolor='"+gcBG+"' bordercolor='"+gcBG+"' valign='middle' align='center' height='"+iCellHeight+"' style='font-size:12px; ";
  142.     with (document)
  143.     {
  144.         write("<tr>");
  145.         write("<td height='2' colspan='7'></td>");
  146.         write("</tr>");
  147.         write("<tr>");
  148.         for(i=0; i<7; i++)
  149.         {
  150.             write("<td "+styleTD+" color:#000000'>" + WeekDay[i] + "</td>");
  151.         }
  152.         write("</tr>");
  153.         write("<tr>");
  154.         write("<td height='1' bgcolor='#333333' colspan='7'></td>");
  155.         write("</tr>");
  156.         for (w = 1; w < 7; w++)
  157.         {
  158.             write("<tr>");
  159.             for (d = 0; d < 7; d++)
  160.             {
  161.                 write("<td id=calCell "+styleTD+"cursor:hand;' onMouseOver='this.bgColor=gcToggle' onMouseOut='this.bgColor=gcBG' onclick='fSetSelected(this)'>");
  162.                 write("<font id=cellText ><b> </b></font>");
  163.                 write("</td>")
  164.             }
  165.             write("</tr>");
  166.         }
  167.     }
  168. }
  169. function fUpdateCal(iYear, iMonth)
  170. {
  171.     myMonth = fBuildCal(iYear, iMonth);
  172.     var i = 0;
  173.     for (w = 0; w < 6; w++)
  174.     {
  175.         for (d = 0; d < 7; d++)
  176.         {
  177.             with (cellText[(7*w)+d])
  178.             {
  179.                 Victor = i++;
  180.                 if (myMonth[w+1][d]<0)
  181.                 {
  182.                     color = gcGray;
  183.                     innerText = -myMonth[w+1][d];
  184.                 }
  185.                 else
  186.                 {
  187.                     // Modified by maxiang for we need
  188.                     // Saturday displayed in blue font color.
  189.                     //color = ((d==0)||(d==6))?"red":"black";
  190.                     if( d == 0 )
  191.                     {
  192.                         color = "red";
  193.                     }
  194.                     else if( d == 6 )
  195.                     {
  196.                         color = "blue";
  197.                     }
  198.                     else
  199.                     {
  200.                         color = "black";
  201.                     }
  202.                     // End of above maxiang
  203.                     innerText = myMonth[w+1][d];
  204.                 }
  205.             }
  206.         }
  207.     }
  208. }
  209. function fSetYearMon(iYear, iMon)
  210. {
  211.     tbSelMonth.options[iMon-1].selected = true;
  212.     for (i = 0; i < tbSelYear.length; i++)
  213.     {
  214.         if (tbSelYear.options[i].value == iYear)
  215.             tbSelYear.options[i].selected = true;
  216.     }
  217.     fUpdateCal(iYear, iMon);
  218. }
  219. function fPrevMonth()
  220. {
  221.     var iMon = tbSelMonth.value;
  222.     var iYear = tbSelYear.value;
  223.     if (--iMon<1)
  224.     {
  225.         iMon = 12;
  226.         iYear--;
  227.     }
  228.     fSetYearMon(iYear, iMon);
  229. }
  230. function fNextMonth()
  231. {
  232.     var iMon = tbSelMonth.value;
  233.     var iYear = tbSelYear.value;
  234.     if (++iMon>12)
  235.     {
  236.         iMon = 1;
  237.         iYear++;
  238.     }
  239.     fSetYearMon(iYear, iMon);
  240. }
  241. function fToggleTags()
  242. {
  243.     with (document.all.tags("SELECT"))
  244.     {
  245.         for (i=0; i<length; i++)
  246.         {
  247.             if ((item(i).Victor!="Won")&&fTagInBound(item(i)))
  248.             {
  249.                 item(i).style.visibility = "hidden";
  250.                 goSelectTag[goSelectTag.length] = item(i);
  251.             }
  252.         }
  253.     }
  254. }
  255. function fTagInBound(aTag)
  256. {
  257.     with (VicPopCal.style)
  258.     {
  259.         var l = parseInt(left,10);
  260.         var t = parseInt(top,10);
  261.         var r = l+parseInt(width,10);
  262.         var b = t+parseInt(height,10);
  263.         var ptLT = fGetXY(aTag);
  264.         return !((ptLT.x>r)||(ptLT.x+aTag.offsetWidth<l)||(ptLT.y>b)||(ptLT.y+aTag.offsetHeight<t));
  265.     }
  266. }
  267. function fGetXY(aTag)
  268. {
  269.     var oTmp = aTag;
  270.     var pt = new Point(0,0);
  271.     do
  272.     {
  273.         pt.x += oTmp.offsetLeft;
  274.         pt.y += oTmp.offsetTop;
  275.         oTmp = oTmp.offsetParent;
  276.     }
  277.     while(oTmp.tagName!="BODY");
  278.     return pt;
  279. }
  280. // Main: popCtrl is the widget beyond which you want this calendar to appear;
  281. //       dateCtrl is the widget into which you want to put the selected date.
  282. // i.e.: <input type="text" name="dc" style="text-align:center" readonly><INPUT type="button" value="V" onclick="fPopCalendar(dc,dc);return false">
  283. function fPopCalendar(popCtrl, dateCtrl, mode, defDate)
  284. {
  285.     gCalMode = mode;
  286.     gCalDefDate = defDate;
  287.     if (popCtrl == previousObject)
  288.     {
  289.         if (VicPopCal.style.visibility == "visible")
  290.         {
  291.             //HiddenDiv();
  292.             return true;
  293.         }
  294.     }
  295.     previousObject = popCtrl;
  296.     gdCtrl = dateCtrl;
  297.     fSetYearMon(giYear, giMonth);
  298.     var point = fGetXY(popCtrl);
  299.     if( gCalMode == CAL_MODE_NOBLANK )
  300.     {
  301.         document.all.CAL_B_BLANK.style.visibility = "hidden";
  302.     }
  303.     else
  304.     {
  305.         document.all.CAL_B_BLANK.style.visibility = "visible";
  306.     }
  307.     with (VicPopCal.style)
  308.     {
  309.         left = point.x;
  310.         top  = point.y+popCtrl.offsetHeight;
  311.         width = VicPopCal.offsetWidth;
  312.         height = VicPopCal.offsetHeight;
  313.         fToggleTags(point);
  314.         visibility = 'visible';
  315.     }
  316. }
  317. var gMonths = new Array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");
  318. with (document)
  319. {
  320.     write("<Div id='VicPopCal' style='OVERFLOW:hidden;POSITION:absolute;VISIBILITY:hidden;border:2px ridge;width:100%;height:100%;top:0;left:0;z-index:100;overflow:hidden'>");
  321.     write("<table border='0' bgcolor='#FFFFFF' cellspacing='0' cellpadding='0'>");
  322.     write("<TR>");
  323.     write("<td valign='middle' align='center'>");
  324.     write("<table border='0' bgcolor='#000099' cellspacing='0' cellpadding='0' height='28'><tr><td width='40' align='center'><input type='button' name='PrevMonth' value='←' style='height:20;width:20;FONT:bold' onClick='fPrevMonth()'></td>");
  325.     write("<td width='200' align='center'><SELECT name='tbSelYear' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won' class='input'>");
  326.     for(i=minyear;i<=maxyear;i++)
  327.     {
  328.         write("<OPTION value='"+i+"'>"+i+"年</OPTION>");
  329.     }
  330.     write("</SELECT>&nbsp;");
  331.     write("<select name='tbSelMonth' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won' class='input'>");
  332.     for (i=0; i<12; i++)
  333.     {
  334.         write("<option value='"+(i+1)+"'>"+gMonths[i]+"</option>");
  335.     }
  336.     write("</SELECT>");
  337.     write("</td><td width='40' align='center'><input type='button' name='PrevMonth' value='→' style='height:20;width:20;FONT:bold' onclick='fNextMonth()'></td></tr></table>");
  338.     write("</td>");
  339.     write("</TR><TR>");
  340.     write("<td align='center'>");
  341.     write("<table width='100%' border='0' cellspacing='0' cellpadding='0'>");
  342.     fDrawCal(giYear, giMonth, 8, '12');
  343.     write("</table>");
  344.     write("</td>");
  345.     write("</TR><TR><TD align='center'>");
  346.     write("<TABLE width='100%'><TR><TD align='center'>");
  347.     write("<B ID="CAL_B_BLANK" style='color:"+gcFront+"; visibility:visible; cursor:hand; font-size:12px' onclick='fSetDate(0,0,0)' onMouseOver='this.style.color=gcToggle' onMouseOut='this.style.color=gcFront'>清空</B>");
  348.     write("</td><td algin='center'>");
  349.     write("<B style='color:"+gcFront+";cursor:hand; font-size:12px' onclick='fSetDate(giYear,giMonth,giDay)' onMouseOver='this.style.color=gcToggle' onMouseOut='this.style.color=gcFront'>选择: <font color='#FF0000'>"+giYear+"年"+giMonth+"月"+giDay+"日</font></B>");
  350.     write("</td></tr></table>");
  351.     write("</TD></TR>");
  352.     write("</TABLE></Div>");
  353. }
  354. function readCookie(name)
  355. {
  356.     var cookieValue = "";
  357.     var search = name + "n";
  358.     if(document.cookie.length > 0)
  359.     {
  360.         offset = document.cookie.indexOf(search);
  361.         if (offset != -1)
  362.         {
  363.             offset += search.length;
  364.             end = document.cookie.indexOf("n", offset);
  365.             if (end == -1) end = document.cookie.length;
  366.             cookieValue = unescape(document.cookie.substring(offset, end))
  367.         }
  368.     }
  369.     return cookieValue;
  370. }