1 /* automatically generated from calendar.js, do not edit ! */
2 @"var monthArray = getMonthSelect();\n"
5 @"// innerHTML IS ONLY SUPPORTED BY MSIE...\n"
6 @"function rewriteLayerWithData(obj,data) {\n"
8 @" obj.document.clear();\n"
9 @" obj.document.write(data);\n"
10 @" obj.document.close();\n"
13 @" obj.innerHTML = data;\n"
15 @" if (usesNavImages) {\n"
16 @" document.images['dateFieldFirstImg'].src = dateFieldFirst.src;\n"
17 @" document.images['dateFieldPreviousImg'].src = dateFieldPrevious.src;\n"
18 @" document.images['dateFieldTodayImg'].src = dateFieldToday.src;\n"
19 @" document.images['dateFieldNextImg'].src = dateFieldNext.src;\n"
20 @" document.images['dateFieldLastImg'].src = dateFieldLast.src;\n"
21 @" document.images['dateFieldCloseImg'].src = dateFieldClose.src;\n"
24 @"// DETERMINE BROWSER BRAND\n"
25 @"var isNav = false;\n"
26 @"var isIE = false;\n"
27 @"if (navigator.appName == \"Netscape\") {\n"
33 @"// PRE-BUILD PORTIONS OF THE CALENDAR WHEN THIS JS LIBRARY LOADS INTO THE BROWSER\n"
35 @"// CALENDAR FUNCTIONS BEGIN HERE ---------------------------------------------------\n"
36 @"// SET THE INITIAL VALUE OF THE GLOBAL DATE FIELD\n"
37 @"function setDateField(dateField) {\n"
38 @" // ASSIGN THE INCOMING FIELD OBJECT TO A GLOBAL VARIABLE\n"
39 @" calDateField = dateField; \n"
40 @" // GET THE VALUE OF THE INCOMING FIELD\n"
41 @" inDate = dateField.value;\n"
42 @" // SET calDate TO THE DATE IN THE INCOMING FIELD OR DEFAULT TO TODAY'S DATE\n"
43 @" setInitialDate();\n"
45 @"// SET THE INITIAL CALENDAR DATE TO TODAY OR TO THE EXISTING VALUE IN dateField\n"
46 @"function setInitialDate() {\n"
48 @" // CREATE A NEW DATE OBJECT (WILL GENERALLY PARSE CORRECT DATE EXCEPT WHEN \".\" IS USED AS A DELIMITER)\n"
49 @" // (THIS ROUTINE DOES *NOT* CATCH ALL DATE FORMATS, IF YOU NEED TO PARSE A CUSTOM DATE FORMAT, DO IT HERE)\n"
50 @" // ADD CUSTOM DATE PARSING HERE\n"
51 @" ypos = dateFormat.indexOf('%Y');\n"
52 @" inYear = parseInt(inDate.substr(ypos,4));\n"
53 @" mpos = dateFormat.indexOf('%m');\n"
54 @" if (ypos < mpos) mpos+=2; // because %Y stands for yyyy, add 2\n"
55 @" inMonth = inDate.substr(mpos,2);\n"
56 @" if (inMonth.charAt(0) == \"0\") \n"
57 @" inMonth = inMonth.substr(1,inMonth.length-1);\n"
58 @" inMonth = parseInt(inMonth);\n"
60 @" dpos = dateFormat.indexOf('%d');\n"
61 @" if (ypos < dpos) dpos+=2; // same as mpos\n"
62 @" inDay = inDate.substr(dpos,2);\n"
63 @" if (inDay.charAt(0) == \"0\") \n"
64 @" inDay = inDay.substr(1,inDay.length-1);\n"
65 @" inDay = parseInt(inDay);\n"
66 @" if ((inYear) && (inMonth) && (inDay)) {\n"
67 @" calDate = new Date(inYear,inMonth-1,inDay);\n"
70 @" calDate = new Date();\n"
72 @" // KEEP TRACK OF THE CURRENT DAY VALUE\n"
73 @" calDay = calDate.getDate();\n"
74 @" // SET DAY VALUE TO 1... TO AVOID JAVASCRIPT DATE CALCULATION ANOMALIES\n"
75 @" // (IF THE MONTH CHANGES TO FEB AND THE DAY IS 30, THE MONTH WOULD CHANGE TO MARCH\n"
76 @" // AND THE DAY WOULD CHANGE TO 2. SETTING THE DAY TO 1 WILL PREVENT THAT)\n"
77 @" calDate.setDate(1);\n"
79 @"// ENABLE MULTIPLE CALENDAR-USING OBJECTS BY USING VARIABLE calendarDiv;\n"
80 @"var calendarDiv = false;\n"
81 @"function toggleCalendar(dateFieldEl,calObj,calFormat) {\n"
82 @" if ((calendarDiv) && (calendarDiv.id != calObj.id)) {\n"
85 @" calendarDiv = calObj;\n"
87 @" if (isNav) condition = (calendarDiv.visibility == 'show');\n"
88 @" if (isIE) condition = (calendarDiv.style.visibility == 'visible');\n"
89 @" if (condition) {\n"
95 @" for (i = 0; i < document.forms.length; i++) {\n"
96 @" for (j = 0; j < document.forms[i].elements.length; j++) {\n"
97 @" if (document.forms[i].elements[j].name == dateFieldEl) {\n"
98 @" dateField = document.forms[i].elements[j];\n"
102 @" dateFormat = calFormat;\n"
103 @" showCalendar(dateField);\n"
106 @"// CAPTURE onMouseMove EVENT IF NETSCAPE FOR POSITIONING calendarDiv\n"
108 @" document.captureEvents( Event.MOUSEMOVE );\n"
109 @" document.onmousemove = actPos;\n"
111 @"var curScreenPosX;\n"
112 @"var curScreenPosY;\n"
113 @"function actPos(e) {\n"
115 @" curScreenPosX = e.pageX + 10;\n"
116 @" curScreenPosY = e.pageY;\n"
119 @"function showCalendar(dateField) {\n"
120 @" // SET INITIAL VALUE OF THE DATE FIELD AND CREATE TOP AND BOTTOM FRAMES\n"
121 @" setDateField(dateField);\n"
122 @" writeCalendar();\n"
124 @" calendarDiv.visibility = 'show';\n"
125 @" calendarDiv.left = curScreenPosX;\n"
126 @" calendarDiv.top = curScreenPosY;\n"
129 @" calendarDiv.style.visibility = 'visible';\n"
133 @"function hideCalendar() {\n"
135 @" calendarDiv.visibility = 'hide';\n"
138 @" calendarDiv.style.visibility = 'hidden';\n"
140 @" calendarDiv = false;\n"
142 @"// NEW: NO FRAMES ANYMORE, ONE <DIV> INSTEAD\n"
143 @"function writeCalendar() {\n"
144 @" data = buildTopCalFrame() + buildBottomCalFrame();\n"
145 @" if (isNav) rewriteLayerWithData(calendarDiv, data);\n"
146 @" if (isIE) rewriteLayerWithData(calendarDiv, data);\n"
148 @"// CREATE month/year DISPLAY\n"
149 @"function buildCalControlMonthYear() {\n"
150 @" month = calDate.getMonth();\n"
151 @" year = calDate.getFullYear();\n"
152 @" return String(monthArray[month])+\" \"+String(year);\n"
159 @" X=event.offsetX;\n"
160 @" Y=event.offsetY;\n"
161 @" document.onmousemove = MM;\n"
162 @" document.onmouseup = MU;\n"
167 @" calendarDiv.style.pixelLeft = event.clientX-X + document.body.scrollLeft;\n"
168 @" calendarDiv.style.pixelTop = event.clientY-Y + document.body.scrollTop;\n"
174 @"// document.onmousemove = null;\n"
175 @"// document.onmouseup = null;\n"
177 @"// CREATE THE TOP CALENDAR PART\n"
178 @"function buildTopCalFrame() {\n"
180 @" \"<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD BGCOLOR=black>\" +\n"
181 @" \"<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=0>\" +\n"
182 @" \"<TR><TD COLSPAN=6 ALIGN=left CLASS=topCal onMouseDown='MD()'>\" +\n"
183 @" buildCalControlMonthYear() +\n"
185 @" \"<TD ALIGN=right CLASS=topCal>\"+\n"
186 @" \"<A CLASS=navMonYear HREF='javascript:hideCalendar()'>\" +\n"
187 @" dateFieldCloseSRC+\"</A> </TD></TR>\" +\n"
189 @" \"<TD COLSPAN=7 CLASS=topCal ALIGN=center><FONT SIZE=1 FACE='Arial'>\"+\n"
190 @" \"<A CLASS=navMonYear HREF='javascript:setPreviousYear()'>\"+\n"
191 @" dateFieldFirstSRC+\"</A>\" +\n"
192 @" \" <A CLASS=navMonYear HREF='javascript:setPreviousMonth()'>\"+\n"
193 @" dateFieldPreviousSRC+\"</A>\" +\n"
194 @" \" <A CLASS=navMonYear HREF='javascript:setToday()'>\"+\n"
195 @" dateFieldTodaySRC+\"</A>\" +\n"
196 @" \" <A CLASS=navMonYear HREF='javascript:setNextMonth()'>\"+\n"
197 @" dateFieldNextSRC+\"</A>\"+\n"
198 @" \" <A CLASS=navMonYear HREF='javascript:setNextYear()'>\"+\n"
199 @" dateFieldLastSRC+\"</A>\" +\n"
200 @" \"</FONT></TD>\" +\n"
204 @"// CREATE THE BOTTOM CALENDAR PART\n"
205 @"function buildBottomCalFrame() { \n"
206 @" // START CALENDAR DOCUMENT\n"
207 @" var calDoc = calendarBegin;\n"
208 @" // GET MONTH, AND YEAR FROM GLOBAL CALENDAR DATE\n"
209 @" month = calDate.getMonth();\n"
210 @" year = calDate.getFullYear();\n"
211 @" // GET GLOBALLY-TRACKED DAY VALUE (PREVENTS JAVASCRIPT DATE ANOMALIES)\n"
214 @" // DETERMINE THE NUMBER OF DAYS IN THE CURRENT MONTH\n"
215 @" var days = getDaysInMonth();\n"
216 @" // IF GLOBAL DAY VALUE IS > THAN DAYS IN MONTH, HIGHLIGHT LAST DAY IN MONTH\n"
217 @" if (day > days) {\n"
220 @" // DETERMINE WHAT DAY OF THE WEEK THE CALENDAR STARTS ON\n"
221 @" var firstOfMonth = new Date (year, month, 1);\n"
222 @" // GET THE DAY OF THE WEEK THE FIRST DAY OF THE MONTH FALLS ON\n"
223 @" var startingPos = firstOfMonth.getDay();\n"
224 @" days += startingPos;\n"
225 @" // KEEP TRACK OF THE COLUMNS, START A NEW ROW AFTER EVERY 7 COLUMNS\n"
226 @" var columnCount = 0;\n"
227 @" // MAKE BEGINNING NON-DATE CELLS BLANK\n"
228 @" for (i = 0; i < startingPos; i++) {\n"
229 @" calDoc += blankCell;\n"
232 @" // SET VALUES FOR DAYS OF THE MONTH\n"
233 @" var currentDay = 0;\n"
234 @" var dayType = \"weekday\";\n"
235 @" // DATE CELLS CONTAIN A NUMBER\n"
236 @" for (i = startingPos; i < days; i++) {\n"
237 @" var paddingChar = \" \";\n"
238 @" // ADJUST SPACING SO THAT ALL LINKS HAVE RELATIVELY EQUAL WIDTHS\n"
239 @" if (i-startingPos+1 < 10) {\n"
240 @" padding = \" \";\n"
243 @" padding = \" \";\n"
245 @" // GET THE DAY CURRENTLY BEING WRITTEN\n"
246 @" currentDay = i-startingPos+1;\n"
247 @" // SET THE TYPE OF DAY, THE focusDay GENERALLY APPEARS AS A DIFFERENT COLOR\n"
248 @" if (currentDay == day) {\n"
249 @" dayType = \"focusDay\";\n"
252 @" dayType = \"weekDay\";\n"
254 @" // ADD THE DAY TO THE CALENDAR STRING\n"
255 @" calDoc += \"<TD align=center bgcolor='lightgrey'>\" +\n"
256 @" \"<a class='\" + dayType + \"' href='javascript:returnDate(\" + \n"
257 @" currentDay + \")'>\" + padding + currentDay + paddingChar + \"</a></TD>\";\n"
259 @" // START A NEW ROW WHEN NECESSARY\n"
260 @" if (columnCount % 7 == 0) {\n"
261 @" calDoc += \"</TR><TR>\";\n"
264 @" // MAKE REMAINING NON-DATE CELLS BLANK\n"
265 @" for (i=days; i<42; i++) {\n"
266 @" calDoc += blankCell;\n"
268 @" // START A NEW ROW WHEN NECESSARY\n"
269 @" if (columnCount % 7 == 0) {\n"
270 @" calDoc += \"</TR>\";\n"
272 @" calDoc += \"<TR>\";\n"
276 @" // FINISH THE NEW CALENDAR PAGE\n"
277 @" calDoc += calendarEnd;\n"
278 @" // RETURN THE COMPLETED CALENDAR PAGE\n"
281 @"// SET THE CALENDAR TO TODAY'S DATE AND DISPLAY THE NEW CALENDAR\n"
282 @"function setToday() {\n"
283 @" // SET GLOBAL DATE TO TODAY'S DATE\n"
284 @" calDate = new Date();\n"
285 @" // DISPLAY THE NEW CALENDAR\n"
286 @" writeCalendar();\n"
288 @"// SET THE GLOBAL DATE TO THE PREVIOUS YEAR AND REDRAW THE CALENDAR\n"
289 @"function setPreviousYear() {\n"
290 @" var year = calDate.getFullYear();\n"
291 @" if (year > 1000) {\n"
293 @" calDate.setFullYear(year);\n"
294 @" writeCalendar();\n"
297 @"// SET THE GLOBAL DATE TO THE PREVIOUS MONTH AND REDRAW THE CALENDAR\n"
298 @"function setPreviousMonth() {\n"
299 @" var year = calDate.getFullYear();\n"
300 @" var month = calDate.getMonth();\n"
302 @" // IF MONTH IS JANUARY, SET MONTH TO DECEMBER AND DECREMENT THE YEAR\n"
303 @" if (month == 0) {\n"
305 @" if (year > 1000) {\n"
307 @" calDate.setFullYear(year);\n"
313 @" calDate.setMonth(month);\n"
314 @" writeCalendar();\n"
316 @"// SET THE GLOBAL DATE TO THE NEXT MONTH AND REDRAW THE CALENDAR\n"
317 @"function setNextMonth() {\n"
318 @" var year = calDate.getFullYear();\n"
319 @" var month = calDate.getMonth();\n"
320 @" // IF MONTH IS DECEMBER, SET MONTH TO JANUARY AND INCREMENT THE YEAR\n"
321 @" if (month == 11) {\n"
324 @" calDate.setFullYear(year);\n"
329 @" calDate.setMonth(month);\n"
330 @" writeCalendar();\n"
332 @"// SET THE GLOBAL DATE TO THE NEXT YEAR AND REDRAW THE CALENDAR\n"
333 @"function setNextYear() {\n"
334 @" var year = calDate.getFullYear();\n"
336 @" calDate.setFullYear(year);\n"
337 @" writeCalendar();\n"
339 @"// GET NUMBER OF DAYS IN MONTH\n"
340 @"function getDaysInMonth() {\n"
342 @" var month = calDate.getMonth()+1;\n"
343 @" var year = calDate.getFullYear();\n"
344 @" // RETURN 31 DAYS\n"
345 @" if (month==1 || month==3 || month==5 || month==7 || month==8 ||\n"
346 @" month==10 || month==12) {\n"
349 @" // RETURN 30 DAYS\n"
350 @" else if (month==4 || month==6 || month==9 || month==11) {\n"
353 @" // RETURN 29 DAYS\n"
354 @" else if (month==2) {\n"
355 @" if (isLeapYear(year)) {\n"
358 @" // RETURN 28 DAYS\n"
365 @"// CHECK TO SEE IF YEAR IS A LEAP YEAR\n"
366 @"function isLeapYear (Year) {\n"
367 @" if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {\n"
371 @" return (false);\n"
374 @"// BUILD THE MONTH SELECT LIST\n"
375 @"function getMonthSelect() {\n"
376 @" // IF SET BY A PARAMETER (WRITTEN AT THE BEGINNING BY WOCalendar)\n"
377 @" if (externMonths) {\n"
378 @" monthArray = externMonths;\n"
381 @" monthArray = new Array('January', 'February', 'March', 'April', \n"
382 @" 'May', 'June', 'July', 'August', \n"
383 @" 'September', 'October', 'November', 'December');\n"
385 @" return monthArray;\n"
387 @"// SET DAYS OF THE WEEK DEPENDING ON LANGUAGE\n"
388 @"function createWeekdayList() {\n"
389 @" // IF SET BY A PARAMETER (WRITTEN AT THE BEGINNING BY WODateFieldScript)\n"
390 @" if (externWeekdays) {\n"
391 @" weekdayArray = externWeekdays;\n"
394 @" weekdayArray = new Array('Su','Mo','Tu','We','Th','Fr','Sa');\n"
396 @" var weekdays = \"<TR BGCOLOR='white'>\";\n"
397 @" for (i in weekdayArray) {\n"
398 @" weekdays += \"<TD class='heading' align=center>\"\n"
399 @" + weekdayArray[i] + \"</TD>\";\n"
401 @" weekdays += \"</TR>\";\n"
402 @" return weekdays;\n"
404 @"// PRE-BUILD PORTIONS OF THE CALENDAR (FOR PERFORMANCE REASONS)\n"
405 @"function buildCalParts() {\n"
406 @" // BUILD THE BLANK CELL ROWS\n"
407 @" blankCell = \"<TD align=center bgcolor='lightGrey'> </TD>\";\n"
408 @" // BUILD THE TOP PORTION OF THE CALENDAR PAGE USING CSS TO CONTROL SOME DISPLAY ELEMENTS\n"
409 @" calendarBegin = createWeekdayList() + \"<TR>\";\n"
410 @" // BUILD THE BOTTOM PORTION OF THE CALENDAR PAGE\n"
411 @" calendarEnd = \"\";\n"
412 @" // END THE TABLE AND HTML DOCUMENT\n"
414 @" \"</TABLE></TD></TR></TABLE>\";\n"
416 @"// REPLACE ALL INSTANCES OF find WITH replace\n"
417 @"// inString: the string you want to convert\n"
418 @"// find: the value to search for\n"
419 @"// replace: the value to substitute\n"
421 @"// usage: jsReplace(inString, find, replace);\n"
422 @"// example: jsReplace(\"To be or not to be\", \"be\", \"ski\");\n"
423 @"// result: \"To ski or not to ski\"\n"
425 @"function jsReplace(inString, find, replace) {\n"
426 @" var outString = \"\";\n"
427 @" if (!inString) {\n"
430 @" // REPLACE ALL INSTANCES OF find WITH replace\n"
431 @" if (inString.indexOf(find) != -1) {\n"
432 @" // SEPARATE THE STRING INTO AN ARRAY OF STRINGS USING THE VALUE IN find\n"
433 @" t = inString.split(find);\n"
434 @" // JOIN ALL ELEMENTS OF THE ARRAY, SEPARATED BY THE VALUE IN replace\n"
435 @" return (t.join(replace));\n"
438 @" return inString;\n"
441 @"// JAVASCRIPT FUNCTION -- DOES NOTHING (USED FOR THE HREF IN THE CALENDAR CALL)\n"
442 @"function doNothing() {\n"
444 @"// ENSURE THAT VALUE IS TWO DIGITS IN LENGTH\n"
445 @"function makeTwoDigit(inValue) {\n"
446 @" var numVal = parseInt(inValue, 10);\n"
447 @" // VALUE IS LESS THAN TWO DIGITS IN LENGTH\n"
448 @" if (numVal < 10) {\n"
449 @" // ADD A LEADING ZERO TO THE VALUE AND RETURN IT\n"
450 @" return(\"0\" + numVal);\n"
456 @"// SET FIELD VALUE TO THE DATE SELECTED AND CLOSE THE CALENDAR WINDOW\n"
457 @"function returnDate(inDay)\n"
459 @" // inDay = THE DAY THE USER CLICKED ON\n"
460 @" calDate.setDate(inDay);\n"
461 @" // SET THE DATE RETURNED TO THE USER\n"
462 @" var day = calDate.getDate();\n"
463 @" var month = calDate.getMonth()+1;\n"
464 @" var year = calDate.getFullYear();\n"
465 @" outDate = dateFormat;\n"
466 @" outDate = jsReplace(outDate,'%Y',String(year));\n"
467 @" outDate = jsReplace(outDate,'%m',makeTwoDigit(month));\n"
468 @" outDate = jsReplace(outDate,'%d',makeTwoDigit(day));\n"
469 @" // SET THE VALUE OF THE FIELD THAT WAS PASSED TO THE CALENDAR\n"
470 @" calDateField.value = outDate;\n"
471 @" // CLOSE THE CALENDAR WINDOW\n"
472 @" hideCalendar();\n"