calendar.js 21 KB

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