calendar_param.js
上传用户:shjujing
上传日期:2022-07-28
资源大小:11244k
文件大小:22k
源码类别:

Email客户端

开发平台:

Visual C++

  1. // Modified Date: 11/30/1999
  2. // Modified By:   Robert W. Husted
  3. // Notes:  Added frameset support (changed reference for "newWin" to "top.newWin")
  4. //         Also changed Spanish "March" from "Marcha" to "Marzo"
  5. //         Fixed JavaScript Date Anomaly affecting days > 28
  6. //
  7. // Modified by Crystal Decisions
  8. // Removed large amounts of comments to shrink file size.
  9. // Removed multi language support as language set by user as accept-language and navigator.language don't necessarily match
  10. // Removed formatting code as only format wanted is for Crystal Reports Date/DateTime parameters
  11. // Moved resource strings to top of file for translation
  12. // Added A.whatever:visited styles so that followed links appear as if they weren't followed
  13. // BEGIN USER-EDITABLE SECTION -----------------------------------------------------
  14. // CALENDAR COLORS
  15. topBackground    = "black";         // BG COLOR OF THE TOP FRAME
  16. bottomBackground = "white";         // BG COLOR OF THE BOTTOM FRAME
  17. tableBGColor     = "black";         // BG COLOR OF THE BOTTOM FRAME'S TABLE
  18. cellColor        = "lightgrey";     // TABLE CELL BG COLOR OF THE DATE CELLS IN THE BOTTOM FRAME
  19. headingCellColor = "white";         // TABLE CELL BG COLOR OF THE WEEKDAY ABBREVIATIONS
  20. headingTextColor = "black";         // TEXT COLOR OF THE WEEKDAY ABBREVIATIONS
  21. dateColor        = "blue";          // TEXT COLOR OF THE LISTED DATES (1-28+)
  22. focusColor       = "#ff0000";       // TEXT COLOR OF THE SELECTED DATE (OR CURRENT DATE)
  23. hoverColor       = "darkred";       // TEXT COLOR OF A LINK WHEN YOU HOVER OVER IT
  24. fontStyle        = "12pt arial, helvetica";           // TEXT STYLE FOR DATES
  25. headingFontStyle = "bold 12pt arial, helvetica";      // TEXT STYLE FOR WEEKDAY ABBREVIATIONS
  26. // FORMATTING PREFERENCES
  27. bottomBorder  = false;        // TRUE/FALSE (WHETHER TO DISPLAY BOTTOM CALENDAR BORDER)
  28. tableBorder   = 0;            // SIZE OF CALENDAR TABLE BORDER (BOTTOM FRAME) 0=none
  29. var DateTimeFormat = true; //"DateTime" if true, else a "Date"
  30. // END USER-EDITABLE SECTION -------------------------------------------------------
  31. // DETERMINE BROWSER BRAND
  32. var isNav = false;
  33. var isIE  = false;
  34. // ASSUME IT'S EITHER NETSCAPE OR MSIE
  35. if (navigator.appName == "Netscape") {
  36.     isNav = true;
  37. }
  38. else {
  39.     isIE = true;
  40. }
  41. // global variable for top frame and bottom frame
  42. var calDocTop;
  43. var calDocBottom;
  44. // PRE-BUILD PORTIONS OF THE CALENDAR WHEN THIS JS LIBRARY LOADS INTO THE BROWSER
  45. buildCalParts();
  46. // CALENDAR FUNCTIONS BEGIN HERE ---------------------------------------------------
  47. // SET THE INITIAL VALUE OF THE GLOBAL DATE FIELD
  48. function setDateField(formName, dateField, hiddenField) {
  49.     // ASSIGN THE INCOMING FIELD OBJECT TO A GLOBAL VARIABLE
  50.     thisform = document.forms[formName];
  51.     calDateField = thisform[dateField];
  52.     calHiddenField = thisform[hiddenField];
  53.     // GET THE VALUE OF THE INCOMING FIELD
  54.     inDate = thisform[hiddenField].value;
  55.     // SET calDate TO THE DATE IN THE INCOMING FIELD OR DEFAULT TO TODAY'S DATE
  56.     setInitialDate();
  57.     // THE CALENDAR FRAMESET DOCUMENTS ARE CREATED BY JAVASCRIPT FUNCTIONS
  58.     calDocTop    = buildTopCalFrame();
  59.     calDocBottom = buildBottomCalFrame();
  60. }
  61. // SET THE INITIAL CALENDAR DATE TO TODAY OR TO THE EXISTING VALUE IN dateField
  62. function setInitialDate() {
  63.     calDate = ParseDate(inDate, DateTimeFormat);
  64.     
  65.     // IF THE INCOMING DATE IS INVALID, USE THE CURRENT DATE
  66.     if (isNaN(calDate)) {
  67.         // ADD CUSTOM DATE PARSING HERE
  68.         // IF IT FAILS, SIMPLY CREATE A NEW DATE OBJECT WHICH DEFAULTS TO THE CURRENT DATE
  69.         calDate = new Date();
  70.     }
  71.     // KEEP TRACK OF THE CURRENT DAY VALUE
  72.     calDay  = calDate.getDate();
  73.     // SET DAY VALUE TO 1... TO AVOID JAVASCRIPT DATE CALCULATION ANOMALIES
  74.     // (IF THE MONTH CHANGES TO FEB AND THE DAY IS 30, THE MONTH WOULD CHANGE TO MARCH
  75.     //  AND THE DAY WOULD CHANGE TO 2.  SETTING THE DAY TO 1 WILL PREVENT THAT)
  76.     calDate.setDate(1);
  77. }
  78. // CREATE THE TOP CALENDAR FRAME
  79. function buildTopCalFrame() {
  80.     // CREATE THE TOP FRAME OF THE CALENDAR
  81.     var calDoc =
  82.         "<HTML>" +
  83.         "<HEAD>" +
  84.         "</HEAD>" +
  85.         "<BODY BGCOLOR='" + topBackground + "'>" +
  86.         "<FORM NAME='calControl' onSubmit='return false;'>" +
  87.         "<CENTER>" +
  88.         "<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=0 WIDTH=100%>" +
  89.         "<TR><TD COLSPAN=7>" +
  90.         "<CENTER>" +
  91.         getMonthSelect() +
  92.         "<INPUT NAME='year' VALUE='" + calDate.getFullYear() + "'TYPE=TEXT SIZE=4 MAXLENGTH=4 onKeyDown='parent.opener.keydownfn(event, "setYear", "");' onChange='parent.opener.setYear()'>" +
  93.         "</CENTER>" +
  94.         "</TD>" +
  95.         "</TR>" +
  96.         "<TR>" +
  97.         "<TD COLSPAN=7>" +
  98.         "<CENTER>" +
  99.         "<INPUT " +
  100.         "TYPE=BUTTON NAME='previousYear' VALUE='<<'    onClick='parent.opener.setPreviousYear()'><INPUT " +
  101.         "TYPE=BUTTON NAME='previousMonth' VALUE=' < '   onClick='parent.opener.setPreviousMonth()'><INPUT " +
  102.         "TYPE=BUTTON NAME='today' VALUE='" + L_Today + "' onClick='parent.opener.setToday()'><INPUT " +
  103.         "TYPE=BUTTON NAME='nextMonth' VALUE=' > '   onClick='parent.opener.setNextMonth()'><INPUT " +
  104.         "TYPE=BUTTON NAME='nextYear' VALUE='>>'    onClick='parent.opener.setNextYear()'>" +
  105.         "</CENTER>" +
  106.         "</TD>" +
  107.         "</TR>" +
  108.         "</TABLE>" +
  109.         "</CENTER>" +
  110.         "</FORM>" +
  111.         "</BODY>" +
  112.         "</HTML>";
  113.     return calDoc;
  114. }
  115. // CREATE THE BOTTOM CALENDAR FRAME
  116. // (THE MONTHLY CALENDAR)
  117. function buildBottomCalFrame() {
  118.     // START CALENDAR DOCUMENT
  119.     var calDoc = calendarBegin;
  120.     // GET MONTH, AND YEAR FROM GLOBAL CALENDAR DATE
  121.     month   = calDate.getMonth();
  122.     year    = calDate.getFullYear();
  123.     // GET GLOBALLY-TRACKED DAY VALUE (PREVENTS JAVASCRIPT DATE ANOMALIES)
  124.     day     = calDay;
  125.     var i   = 0;
  126.     // DETERMINE THE NUMBER OF DAYS IN THE CURRENT MONTH
  127.     var days = getDaysInMonth();
  128.     // IF GLOBAL DAY VALUE IS > THAN DAYS IN MONTH, HIGHLIGHT LAST DAY IN MONTH
  129.     if (day > days) {
  130.         day = days;
  131.     }
  132.     // DETERMINE WHAT DAY OF THE WEEK THE CALENDAR STARTS ON
  133.     var firstOfMonth = new Date (year, month, 1);
  134.     // GET THE DAY OF THE WEEK THE FIRST DAY OF THE MONTH FALLS ON
  135.     var startingPos  = firstOfMonth.getDay();
  136.     days += startingPos;
  137.     // KEEP TRACK OF THE COLUMNS, START A NEW ROW AFTER EVERY 7 COLUMNS
  138.     var columnCount = 0;
  139.     // MAKE BEGINNING NON-DATE CELLS BLANK
  140.     for (i = 0; i < startingPos; i++) {
  141.         calDoc += blankCell;
  142. columnCount++;
  143.     }
  144.     // SET VALUES FOR DAYS OF THE MONTH
  145.     var currentDay = 0;
  146.     var dayType    = "weekday";
  147.     // DATE CELLS CONTAIN A NUMBER
  148.     for (i = startingPos; i < days; i++) {
  149. var paddingChar = "&nbsp;";
  150.         // ADJUST SPACING SO THAT ALL LINKS HAVE RELATIVELY EQUAL WIDTHS
  151.         if (i-startingPos+1 < 10) {
  152.             padding = "&nbsp;&nbsp;";
  153.         }
  154.         else {
  155.             padding = "&nbsp;";
  156.         }
  157.         // GET THE DAY CURRENTLY BEING WRITTEN
  158.         currentDay = i-startingPos+1;
  159.         // SET THE TYPE OF DAY, THE focusDay GENERALLY APPEARS AS A DIFFERENT COLOR
  160.         if (currentDay == day) {
  161.             dayType = "focusDay";
  162.         }
  163.         else {
  164.             dayType = "weekDay";
  165.         }
  166.         // ADD THE DAY TO THE CALENDAR STRING
  167.         calDoc += "<TD align=center bgcolor='" + cellColor + "'>" +
  168.                   "<a class='" + dayType + "' href='javascript:parent.opener.returnDate(" +
  169.                   currentDay + ")'>" + padding + currentDay + paddingChar + "</a></TD>";
  170.         columnCount++;
  171.         // START A NEW ROW WHEN NECESSARY
  172.         if (columnCount % 7 == 0) {
  173.             calDoc += "</TR><TR>";
  174.         }
  175.     }
  176.     // MAKE REMAINING NON-DATE CELLS BLANK
  177.     for (i=days; i<42; i++)  {
  178.         calDoc += blankCell;
  179. columnCount++;
  180.         // START A NEW ROW WHEN NECESSARY
  181.         if (columnCount % 7 == 0) {
  182.             calDoc += "</TR>";
  183.             if (i<41) {
  184.                 calDoc += "<TR>";
  185.             }
  186.         }
  187.     }
  188.     // FINISH THE NEW CALENDAR PAGE
  189.     calDoc += calendarEnd;
  190.     // RETURN THE COMPLETED CALENDAR PAGE
  191.     return calDoc;
  192. }
  193. // WRITE THE MONTHLY CALENDAR TO THE BOTTOM CALENDAR FRAME
  194. function writeCalendar() {
  195. // CREATE THE NEW CALENDAR FOR THE SELECTED MONTH & YEAR
  196.     calDocBottom = buildBottomCalFrame();
  197. if (document.getElementById) { // ns6 & ie
  198. top.newWin.frames['bottomCalFrame'].document.getElementById('bottomDiv').innerHTML = calDocBottom;
  199. } else {
  200. // WRITE THE NEW CALENDAR TO THE BOTTOM FRAME
  201. top.newWin.frames['bottomCalFrame'].document.open();
  202. top.newWin.frames['bottomCalFrame'].document.write(calDocBottom);
  203. top.newWin.frames['bottomCalFrame'].document.close();
  204. }
  205. }
  206. // SET THE CALENDAR TO TODAY'S DATE AND DISPLAY THE NEW CALENDAR
  207. function setToday() {
  208.     // SET GLOBAL DATE TO TODAY'S DATE
  209.     calDate = new Date();
  210.     // SET DAY MONTH AND YEAR TO TODAY'S DATE
  211.     var month = calDate.getMonth();
  212.     var year  = calDate.getFullYear();
  213.     // SET MONTH IN DROP-DOWN LIST
  214.     top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month;
  215.     // SET YEAR VALUE
  216.     top.newWin.frames['topCalFrame'].document.calControl.year.value = year;
  217. // SET THE DAY VALUE
  218. calDay = calDate.getDate();
  219. // DISPLAY THE NEW CALENDAR
  220.     writeCalendar();
  221. }
  222. // SET THE GLOBAL DATE TO THE NEWLY ENTERED YEAR AND REDRAW THE CALENDAR
  223. function setYear() {
  224.     // GET THE NEW YEAR VALUE
  225.     var year  = top.newWin.frames['topCalFrame'].document.calControl.year.value;
  226.     // IF IT'S A FOUR-DIGIT YEAR THEN CHANGE THE CALENDAR
  227.     if (isFourDigitYear(year)) {
  228.         calDate.setFullYear(year);
  229.         writeCalendar();
  230.         top.newWin.frames['topCalFrame'].document.calControl.year.blur();
  231.     }
  232.     else {
  233.         // HIGHLIGHT THE YEAR IF THE YEAR IS NOT FOUR DIGITS IN LENGTH
  234.         top.newWin.frames['topCalFrame'].document.calControl.year.focus();
  235.         top.newWin.frames['topCalFrame'].document.calControl.year.select();
  236.     }
  237. }
  238. // SET THE GLOBAL DATE TO THE SELECTED MONTH AND REDRAW THE CALENDAR
  239. function setCurrentMonth() {
  240.     // GET THE NEWLY SELECTED MONTH AND CHANGE THE CALENDAR ACCORDINGLY
  241.     var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex;
  242.     calDate.setMonth(month);
  243.     writeCalendar();
  244. }
  245. // SET THE GLOBAL DATE TO THE PREVIOUS YEAR AND REDRAW THE CALENDAR
  246. function setPreviousYear() {
  247.     var year  = top.newWin.frames['topCalFrame'].document.calControl.year.value;
  248.     if (isFourDigitYear(year) && year > 1000) {
  249.         year--;
  250.         calDate.setFullYear(year);
  251.         top.newWin.frames['topCalFrame'].document.calControl.year.value = year;
  252.         writeCalendar();
  253.     }
  254. }
  255. // SET THE GLOBAL DATE TO THE PREVIOUS MONTH AND REDRAW THE CALENDAR
  256. function setPreviousMonth() {
  257.     var year  = top.newWin.frames['topCalFrame'].document.calControl.year.value;
  258.     if (isFourDigitYear(year)) {
  259.         var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex;
  260.         // IF MONTH IS JANUARY, SET MONTH TO DECEMBER AND DECREMENT THE YEAR
  261.         if (month == 0) {
  262.             month = 11;
  263.             if (year > 1000) {
  264.                 year--;
  265.                 calDate.setFullYear(year);
  266.                 top.newWin.frames['topCalFrame'].document.calControl.year.value = year;
  267.             }
  268.         }
  269.         else {
  270.             month--;
  271.         }
  272.         calDate.setMonth(month);
  273.         top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month;
  274.         writeCalendar();
  275.     }
  276. }
  277. // SET THE GLOBAL DATE TO THE NEXT MONTH AND REDRAW THE CALENDAR
  278. function setNextMonth() {
  279.     var year = top.newWin.frames['topCalFrame'].document.calControl.year.value;
  280.     if (isFourDigitYear(year)) {
  281.         var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex;
  282.         // IF MONTH IS DECEMBER, SET MONTH TO JANUARY AND INCREMENT THE YEAR
  283.         if (month == 11) {
  284.             month = 0;
  285.             year++;
  286.             calDate.setFullYear(year);
  287.             top.newWin.frames['topCalFrame'].document.calControl.year.value = year;
  288.         }
  289.         else {
  290.             month++;
  291.         }
  292.         calDate.setMonth(month);
  293.         top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month;
  294.         writeCalendar();
  295.     }
  296. }
  297. // SET THE GLOBAL DATE TO THE NEXT YEAR AND REDRAW THE CALENDAR
  298. function setNextYear() {
  299.     var year  = top.newWin.frames['topCalFrame'].document.calControl.year.value;
  300.     if (isFourDigitYear(year)) {
  301.         year++;
  302.         calDate.setFullYear(year);
  303.         top.newWin.frames['topCalFrame'].document.calControl.year.value = year;
  304.         writeCalendar();
  305.     }
  306. }
  307. // GET NUMBER OF DAYS IN MONTH
  308. function getDaysInMonth()  {
  309.     var days;
  310.     var month = calDate.getMonth()+1;
  311.     var year  = calDate.getFullYear();
  312.     // RETURN 31 DAYS
  313.     if (month==1 || month==3 || month==5 || month==7 || month==8 ||
  314.         month==10 || month==12)  {
  315.         days=31;
  316.     }
  317.     // RETURN 30 DAYS
  318.     else if (month==4 || month==6 || month==9 || month==11) {
  319.         days=30;
  320.     }
  321.     // RETURN 29 DAYS
  322.     else if (month==2)  {
  323.         if (isLeapYear(year)) {
  324.             days=29;
  325.         }
  326.         // RETURN 28 DAYS
  327.         else {
  328.             days=28;
  329.         }
  330.     }
  331.     return (days);
  332. }
  333. // CHECK TO SEE IF YEAR IS A LEAP YEAR
  334. function isLeapYear (Year) {
  335.     if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
  336.         return (true);
  337.     }
  338.     else {
  339.         return (false);
  340.     }
  341. }
  342. // ENSURE THAT THE YEAR IS FOUR DIGITS IN LENGTH
  343. function isFourDigitYear(year) {
  344.     if (year == null || year.match(/^[0-9]{4}$/) == null){
  345.         top.newWin.frames['topCalFrame'].document.calControl.year.value = calDate.getFullYear();
  346.         top.newWin.frames['topCalFrame'].document.calControl.year.select();
  347.         top.newWin.frames['topCalFrame'].document.calControl.year.focus();
  348.     }
  349.     else {
  350.         return true;
  351.     }
  352. }
  353. // BUILD THE MONTH SELECT LIST
  354. function getMonthSelect() {
  355.     monthArray = new Array(L_January, L_February, L_March, L_April, L_May, L_June,
  356.                            L_July, L_August, L_September, L_October, L_November, L_December);
  357.     // DETERMINE MONTH TO SET AS DEFAULT
  358.     var activeMonth = calDate.getMonth();
  359.     // START HTML SELECT LIST ELEMENT
  360.     monthSelect = "<SELECT NAME='month' onChange='parent.opener.setCurrentMonth()'>";
  361.     // LOOP THROUGH MONTH ARRAY
  362.     for (i in monthArray) {
  363.         // SHOW THE CORRECT MONTH IN THE SELECT LIST
  364.         if (i == activeMonth) {
  365.             monthSelect += "<OPTION SELECTED>" + monthArray[i] + "n";
  366.         }
  367.         else {
  368.             monthSelect += "<OPTION>" + monthArray[i] + "n";
  369.         }
  370.     }
  371.     monthSelect += "</SELECT>";
  372.     // RETURN A STRING VALUE WHICH CONTAINS A SELECT LIST OF ALL 12 MONTHS
  373.     return monthSelect;
  374. }
  375. // SET DAYS OF THE WEEK DEPENDING ON LANGUAGE
  376. function createWeekdayList() {
  377.  weekdayArray = new Array(L_Su,L_Mo,L_Tu,L_We,L_Th,L_Fr,L_Sa);
  378.     // START HTML TO HOLD WEEKDAY NAMES IN TABLE FORMAT
  379.     var weekdays = "<TR BGCOLOR='" + headingCellColor + "'>";
  380.     // LOOP THROUGH WEEKDAY ARRAY
  381.     for (i in weekdayArray) {
  382.         weekdays += "<TD class='heading' align=center>" + weekdayArray[i] + "</TD>";
  383.     }
  384.     weekdays += "</TR>";
  385.     // RETURN TABLE ROW OF WEEKDAY ABBREVIATIONS TO DISPLAY ABOVE THE CALENDAR
  386.     return weekdays;
  387. }
  388. // PRE-BUILD PORTIONS OF THE CALENDAR (FOR PERFORMANCE REASONS)
  389. function buildCalParts() {
  390.     // GENERATE WEEKDAY HEADERS FOR THE CALENDAR
  391.     weekdays = createWeekdayList();
  392.     // BUILD THE BLANK CELL ROWS
  393.     blankCell = "<TD align=center bgcolor='" + cellColor + "'>&nbsp;&nbsp;&nbsp;</TD>";
  394.     // BUILD THE TOP PORTION OF THE CALENDAR PAGE USING CSS TO CONTROL SOME DISPLAY ELEMENTS
  395.     calendarBegin =
  396.         "<HTML>" +
  397.         "<HEAD>" +
  398.         // STYLESHEET DEFINES APPEARANCE OF CALENDAR
  399.         "<STYLE type='text/css'>" +
  400.         "<!--" +
  401.         "TD.heading { text-decoration: none; color:" + headingTextColor + "; font: " + headingFontStyle + "; }" +
  402.         "A.focusDay:link { color: " + focusColor + "; text-decoration: none; font: " + fontStyle + "; }" +
  403.         "A.focusDay:hover { color: " + focusColor + "; text-decoration: none; font: " + fontStyle + "; }" +
  404.         "A.focusDay:visited { color: " + focusColor + "; text-decoration: none; font: " + fontStyle + "; }" +
  405.         "A.weekday:link { color: " + dateColor + "; text-decoration: none; font: " + fontStyle + "; }" +
  406.         "A.weekday:hover { color: " + hoverColor + "; font: " + fontStyle + "; }" +
  407.         "A.weekday:visited { color: " + dateColor + "; text-decoration: none; font: " + fontStyle + "; }" +
  408.         "-->" +
  409.         "</STYLE>" +
  410.         "</HEAD>" +
  411.         "<BODY BGCOLOR='" + bottomBackground + "' onload='javascript:self.focus()'>";
  412.     if (document.getElementById) { // ns6 & ie
  413.         calendarBegin +=
  414.             "<DIV ID='bottomDiv'>";
  415.     }
  416.     calendarBegin +=
  417.         "<CENTER>";
  418.         // NAVIGATOR NEEDS A TABLE CONTAINER TO DISPLAY THE TABLE OUTLINES PROPERLY
  419.         if (isNav) {
  420.             calendarBegin +=
  421.                 "<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=" + tableBorder + " ALIGN=CENTER BGCOLOR='" + tableBGColor + "'><TR><TD>";
  422.         }
  423.         // BUILD WEEKDAY HEADINGS
  424.         calendarBegin +=
  425.             "<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=" + tableBorder + " ALIGN=CENTER BGCOLOR='" + tableBGColor + "'>" +
  426.             weekdays +
  427.             "<TR>";
  428.     // BUILD THE BOTTOM PORTION OF THE CALENDAR PAGE
  429.     calendarEnd = "";
  430.         // WHETHER OR NOT TO DISPLAY A THICK LINE BELOW THE CALENDAR
  431.         if (bottomBorder) {
  432.             calendarEnd += "<TR></TR>";
  433.         }
  434.         // NAVIGATOR NEEDS A TABLE CONTAINER TO DISPLAY THE BORDERS PROPERLY
  435.         if (isNav) {
  436.             calendarEnd += "</TD></TR></TABLE>";
  437.         }
  438.         // END THE TABLE AND HTML DOCUMENT
  439.         calendarEnd +=
  440.             "</TABLE>" +
  441.             "</CENTER>";
  442. if (document.getElementById) { // ns6 & ie
  443.             calendarEnd +=
  444.             "</DIV>";
  445. }
  446. calendarEnd +=
  447.             "</BODY>" +
  448.             "</HTML>";
  449. }
  450. // REPLACE ALL INSTANCES OF find WITH replace
  451. // inString: the string you want to convert
  452. // find:     the value to search for
  453. // replace:  the value to substitute
  454. //
  455. // usage:    jsReplace(inString, find, replace);
  456. // example:  jsReplace("To be or not to be", "be", "ski");
  457. //           result: "To ski or not to ski"
  458. //
  459. function jsReplace(inString, find, replace) {
  460.     var outString = "";
  461.     if (!inString) {
  462.         return "";
  463.     }
  464.     // REPLACE ALL INSTANCES OF find WITH replace
  465.     if (inString.indexOf(find) != -1) {
  466.         // SEPARATE THE STRING INTO AN ARRAY OF STRINGS USING THE VALUE IN find
  467.         t = inString.split(find);
  468.         // JOIN ALL ELEMENTS OF THE ARRAY, SEPARATED BY THE VALUE IN replace
  469.         return (t.join(replace));
  470.     }
  471.     else {
  472.         return inString;
  473.     }
  474. }
  475. // JAVASCRIPT FUNCTION -- DOES NOTHING (USED FOR THE HREF IN THE CALENDAR CALL)
  476. function doNothing() {
  477. }
  478. // ENSURE THAT VALUE IS TWO DIGITS IN LENGTH
  479. function makeTwoDigit(inValue) {
  480.     var numVal = parseInt(inValue, 10);
  481.     // VALUE IS LESS THAN TWO DIGITS IN LENGTH
  482.     if (numVal < 10) {
  483.         // ADD A LEADING ZERO TO THE VALUE AND RETURN IT
  484.         return("0" + numVal);
  485.     }
  486.     else {
  487.         return numVal;
  488.     }
  489. }
  490. // SET FIELD VALUE TO THE DATE SELECTED AND CLOSE THE CALENDAR WINDOW
  491. function returnDate(inDay)
  492. {
  493.     // inDay = THE DAY THE USER CLICKED ON
  494.     calDate.setDate(inDay);
  495.     // SET THE DATE RETURNED TO THE USER
  496.     var day           = calDate.getDate();
  497.     var month         = calDate.getMonth()+1;
  498.     var year          = calDate.getFullYear();
  499.     
  500.     // SET THE VALUE OF THE FIELD THAT WAS PASSED TO THE CALENDAR
  501.     var dt = new Date(year, month - 1, day, 0, 0, 0);
  502.     calDateField.value = GLDT(dt,true, false);
  503.     calHiddenField.value = "Date(";
  504.     calHiddenField.value += year;
  505.     calHiddenField.value += ",";
  506.     calHiddenField.value += month;
  507.     calHiddenField.value += ",";
  508.     calHiddenField.value += day;
  509.     calHiddenField.value += ")";
  510.     // GIVE FOCUS BACK TO THE DATE FIELD
  511.     calDateField.focus();
  512.     // CLOSE THE CALENDAR WINDOW
  513.     top.newWin.close()
  514. }
  515. var gHour = "0";
  516. var gMin  = "0";
  517. var gSec  = "0";
  518. var regDateTimePrompt  = /^(D|d)(A|a)(T|t)(E|e)(T|t)(I|i)(M|m)(E|e) *( *d{4} *, *(0?[1-9]|1[0-2]) *, *((0?[1-9]|[1-2]d)|3(0|1)) *, *([0-1]?d|2[0-3]) *, *[0-5]?d *, *[0-5]?d *)$/
  519. function ParseDateTimePrompt(inDate)
  520. {
  521.     if ( regDateTimePrompt.test ( inDate ) )
  522.     {
  523.         var sDate = inDate.substr ( inDate.indexOf("(")+1 );    //move past "DateTime ("
  524.         sDate = sDate.substr ( 0, sDate.lastIndexOf(")") );     //remove trailing ")"
  525.         var dateArray = sDate.split (',');
  526.         var _date = new Date ( dateArray[0], Number(dateArray[1]) - 1, dateArray[2] );
  527.         gHour = dateArray[3]; gMin = dateArray[4]; gSec = dateArray[5];
  528.         return _date;
  529.     }
  530.     return new Date ();
  531. }
  532. var regDatePrompt = /^(D|d)(A|a)(T|t)(E|e) *( *d{4} *, *(0?[1-9]|1[0-2]) *, *((0?[1-9]|[1-2]d)|3(0|1)) *)$/
  533. function ParseDatePrompt(inDate)
  534. {
  535.     if ( regDatePrompt.test ( inDate ) )
  536.     {
  537.         var sDate = inDate.substr ( inDate.indexOf("(")+1 );    //move past "Date ("
  538.         sDate = sDate.substr ( 0, sDate.lastIndexOf(")") );     //remove trailing ")"
  539.         var dateArray = sDate.split (',');
  540.         return new Date ( dateArray[0], Number(dateArray[1]) - 1, dateArray[2] );
  541.     }
  542.     return new Date();
  543. }
  544. function ParseDate(inDate, bDateTimeFormat)
  545. {
  546.     var result;
  547.     
  548.     if (bDateTimeFormat == true) {
  549.         result = ParseDateTimePrompt(inDate);
  550.     } else {
  551.         result = ParseDatePrompt(inDate);
  552.     }
  553.     
  554.     return result;
  555. }