//JS DatePicker @0-E2AD047E var DateMasks = new Array(26); DateMasks["d"] = 0; DateMasks["dd"] = 2; DateMasks["m"] = 0; DateMasks["mm"] = 2; DateMasks["mmm"] = 3; DateMasks["mmmm"] = 0; DateMasks["M"] = 0; DateMasks["MM"] = 2; DateMasks["MMM"] = 3; DateMasks["MMMM"] = 0; DateMasks["yy"] = 2; DateMasks["yyyy"] = 4; DateMasks["h"] = 0; DateMasks["hh"] = 2; DateMasks["H"] = 0; DateMasks["HH"] = 2; DateMasks["n"] = 0; DateMasks["nn"] = 2; DateMasks["s"] = 0; DateMasks["ss"] = 2; DateMasks["tt"] = String(getLocaleInfo("AMDesignator")).length; DateMasks["am/pm"] = 2; DateMasks["AM/PM"] = 2; DateMasks["A/P"] = 1; DateMasks["a/p"] = 1; DateMasks["w"] = 0; DateMasks["q"] = 0; DateMasks["S"] = 0; function geckoGetRv() { if (navigator.product != 'Gecko') { return -1; } var rvValue = 0; var ua = navigator.userAgent.toLowerCase(); var rvStart = ua.indexOf('rv:'); var rvEnd = ua.indexOf(')', rvStart); var rv = ua.substring(rvStart+3, rvEnd); var rvParts = rv.split('.'); var exp = 1; for (var i = 0; i < rvParts.length; i++) { var val = parseInt(rvParts[i]); rvValue += val / exp; exp *= 100; } return rvValue; } function getDayOfYear(year, month, day) { var firstDay = new Date(year, 0, 1); var date = new Date(year, month, day); return (date-firstDay)/(1000*60*60*24); } function get12Hour(hoursNumber) { if (hoursNumber == 0) hoursNumber = 12; else if (hoursNumber > 12) hoursNumber = hoursNumber - 12; return hoursNumber; } function addZero(value, resultLength) { var countZero = resultLength - String(value).length; var result = String(value); for (var i=0; i= 0 && HoursNumber < 12) return AnteMeridiem; else return PostMeridiem; } function formatDate(dateToFormat, parsedFormat) { var resultArray = new Array(parsedFormat.length); for (var i=0; i 0) { DatePart = String(dateToParse).substr(DatePosition, TokenLength); DatePosition = DatePosition + TokenLength; }else { if (MaskPosition < MaskLength) { Delimiter = parsedMask[MaskPosition + 1]; BeginDelimiter = dateToParse.indexOf(Delimiter, DatePosition); if (BeginDelimiter == -1) { //alert("ParseDate function: The number doesn't match the mask."); return null; }else { DatePart = String(dateToParse).substr(DatePosition, BeginDelimiter - DatePosition); DatePosition = BeginDelimiter; } }else DatePart = String(dateToParse).substr(DatePosition); } switch (MaskPart) { case "d": case "dd": resultDateArray[DAY_POS] = Math.floor(DatePart); resultDateArray[IS_DATE_POS] = true; break; case "m": case "mm": case "M": case "MM": resultDateArray[MONTH_POS] = Math.floor(DatePart); resultDateArray[IS_DATE_POS] = true; break; case "mmm": case "mmmm": case "MMM": case "MMMM": MonthNumber = 0; MonthName = String(DatePart).toUpperCase(); if (MaskPart == "mmm") MonthNamesArray = listShortMonths; else MonthNamesArray = listMonths; while (MonthNumber < 11 && String(MonthNamesArray[MonthNumber]).toUpperCase() != MonthName) { MonthNumber = MonthNumber + 1; } if (MonthNumber == 11) { if (String(MonthNamesArray[11]).toUpperCase() != MonthName) { //alert("ParseDate function: The number doesn't match the mask."); return null; } } resultDateArray[MONTH_POS] = MonthNumber + 1; resultDateArray[IS_DATE_POS] = true; break; case "yy": var last2Digits = Math.floor(DatePart); var centuryDigits = (last2Digits>=50)?1900:2000; resultDateArray[YEAR_POS] = centuryDigits + last2Digits; resultDateArray[IS_DATE_POS] = true; break; case "yyyy": resultDateArray[YEAR_POS] = Math.floor(DatePart); resultDateArray[IS_DATE_POS] = true; break; case "h": case "hh": if (Math.floor(DatePart) == 12) resultDateArray[HOUR_POS] = 0; else resultDateArray[HOUR_POS] = Math.floor(DatePart); resultDateArray[IS_TIME_POS] = true; break; case "H": case "HH": resultDateArray[HOUR_POS] = Math.floor(DatePart); resultDateArray[IS_TIME_POS] = true; break; case "n": case "nn": resultDateArray[MINUTE_POS] = Math.floor(DatePart); resultDateArray[IS_TIME_POS] = true; break; case "s": case "ss": resultDateArray[SECOND_POS] = Math.floor(DatePart); resultDateArray[IS_TIME_POS] = true; break; case "tt": case "am/pm": case "a/p": case "AM/PM": case "A/P": DatePart = DatePart==getLocaleInfo("AMDesignator")?"a":"p"; if (String(DatePart).toLowerCase().charAt(0) == "p") resultDateArray[HOUR_POS] = resultDateArray[HOUR_POS] + 12; else if (String(DatePart).toLowerCase().charAt(0) == "a") resultDateArray[HOUR_POS] = resultDateArray[HOUR_POS]; resultDateArray[IS_TIME_POS] = true; break; case "w": case "q": case "S": //Do Nothing break; } }else DatePosition = DatePosition + parsedMask[MaskPosition].length; MaskPosition = MaskPosition + 1 } if (resultDateArray[IS_DATE_POS] && resultDateArray[IS_TIME_POS]) { resultDate = new Date(resultDateArray[YEAR_POS], resultDateArray[MONTH_POS] - 1, resultDateArray[DAY_POS], resultDateArray[HOUR_POS], resultDateArray[MINUTE_POS], resultDateArray[SECOND_POS]); }else if (resultDateArray[IS_DATE_POS]) { resultDate = new Date(resultDateArray[YEAR_POS], resultDateArray[MONTH_POS] - 1, resultDateArray[DAY_POS]); }else if (resultDateArray[IS_DATE_POS]) { resultDate = new Date(0, 0, 0, resultDateArray[HOUR_POS], resultDateArray[MINUTE_POS], resultDateArray[SECOND_POS]); } } return resultDate; } function checkDateRange(date) { var minDate = new Date(1753, 0, 1); var maxDate = new Date(9999, 11, 31); if (date < minDate) return minDate; if (date > maxDate) return maxDate; return date; } // Date formatting functions end --------------------------------------------------- var DatePickerObject = new Object(); var datepickerControl = null; var datepickerDocumentTop = null; var datepickerDocumentBottom = null; var datepickerSource = ""; var blankCellWeekend = ""; var blankCell = ""; var DatePickerBegin = ""; var DatePickerEnd = ""; var disableEvents = false; var disableUnload = false; var datePickerOpened = false; // Determine browser brand var isNav = false; var isIE = false; // Assume it's either Netscape or MSIE if (navigator.appName == "Netscape") { isNav = true; } else { isIE = true; } // Get currently selected language selectedLanguage = navigator.language; // DatePicker functions begin here --------------------------------------------------- // Set the initial value of the global date field function setDateField(dateField) { // Assign the incoming field object to a global variable datepickerControl = eval(dateField); // Set DatePickerObject.selectedDate to the date in the incoming field or default to today's date setInitialDate(datepickerControl.value); datepickerDocumentTop = buildTop(); datepickerDocumentBottom = buildBottom(); } // Set the initial DatePicker date to today or to the existing value in dateField function setInitialDate(inDate) { // Create a new date object var date = parseDate(inDate, parseDateFormat(DatePickerObject.format)); if (date) date = checkDateRange(date); // If the incoming date is invalid, use the current date if (isNaN(date) || !date) { // Simply create a new date object which defaults to the current date date = new Date(); } DatePickerObject.selectedDate = new Date(date.getFullYear(), date.getMonth(), date.getDate()); // KEEP TRACK OF THE CURRENT DAY VALUE DatePickerObject.selectedDay = date.getDate(); // Set day value to 1... to avoid javascript date calculation anomalies // (if the month changes to feb and the day is 30, the month would change to march // and the day would change to 2. setting the day to 1 will prevent that) date.setDate(1); DatePickerObject.currentMonth = date.getMonth(); DatePickerObject.currentYear = date.getFullYear(); } // Popup a window with the DatePicker in it function showDatePicker(object_name, form_name, form_control) { disableEvents = false; DatePickerObject = eval(object_name); if (typeof(DatePickerObject)!="object" || !DatePickerObject) return; DatePickerObject.control = String("document."+form_name+"."+form_control); DatePickerObject.themePath = DatePickerObject.style; DatePickerObject.basePath = getBasePath(); DatePickerObject.selectedDate = new Date(); DatePickerObject.selectedDay = 1; DatePickerObject.currentMonth = DatePickerObject.selectedDate.getMonth(); DatePickerObject.currentYear = DatePickerObject.selectedDate.getFullYear(); if (DatePickerObject.themePath.lastIndexOf("/")!=-1) DatePickerObject.themePath = DatePickerObject.themePath.substr(0,DatePickerObject.themePath.lastIndexOf("/")+1); else if (DatePickerObject.themePath.lastIndexOf("\\")!=-1) DatePickerObject.themePath = DatePickerObject.themePath.substr(0,DatePickerObject.themePath.lastIndexOf("\\")+1); // Pre-build portions of the DatePicker when this js library loads into the browser !!!!!! buildDatePickerParts(); // Set initial value of the date field and create top and bottom part setDateField(DatePickerObject.control); // Use the javascript-generated documents (datepickerDocumentTop, datepickerDocumentBottom) datepickerSource = datepickerDocumentBottom; // Display the DatePicker in a new popup window try{ top.newWinDatePickerObject.focus(); try{ if(eval(DatePickerObject.control+".value")) writeDatePicker(); } catch(e) {} }catch(e){ top.newWinDatePickerObject = null; } if (!datePickerOpened || typeof(top.newWinDatePickerObject) != "object" || (typeof(top.newWinDatePickerObject) == "object" && top.newWinDatePickerObject == null)) { var datepickerURL = DatePickerObject.relativePathPart?DatePickerObject.relativePathPart+"DatePicker.html":"DatePicker.html"; var w_left = Math.ceil(screen.width/2-120); var w_top = Math.ceil(screen.height/2-110); top.newWinDatePickerObject = window.open(datepickerURL+"?random="+Math.random(), "DatePickerWindow", "dependent=yes,left="+w_left+",top="+w_top+",width=300,height=270,screenX=200,screenY=300,titlebar=yes, center: yes, help: no, resizable: yes, status: no"); datePickerOpened = true; } } // Retrieves a path for the tag to get paths correctly function getBasePath() { var l = String(location.href); var q = l.indexOf("?"); l = l.substr(0, (q != -1 ? q : l.length)); var index1 = l.lastIndexOf("\\"); var index2 = l.lastIndexOf("/"); var index = index1>index2?index1:index2; return l.substr(0, index + 1) + DatePickerObject.relativePathPart; } // Create the top DatePicker part function buildTop() { // Create the top part of the DatePicker var imgPrevYear = DatePickerObject.themePath+"PrevYear.gif"; var imgPrevMonth = DatePickerObject.themePath+"PrevMonth.gif"; var imgNextMonth = DatePickerObject.themePath+"NextMonth.gif"; var imgNextYear = DatePickerObject.themePath+"NextYear.gif"; if (DatePickerObject.themeVersion=="3.0") { imgPrevYear = DatePickerObject.themePath+"Images/Back.gif"; imgPrevMonth = DatePickerObject.themePath+"Images/Prev.gif"; imgNextMonth = DatePickerObject.themePath+"Images/Next.gif"; imgNextYear = DatePickerObject.themePath+"Images/Forward.gif"; } var datepickerDocument = (DatePickerObject.themeVersion=="3.0"?"":""); if (DatePickerObject.themeVersion!="3.0") datepickerDocument += "
"; datepickerDocument += ""; if (DatePickerObject.themeVersion!="3.0") datepickerDocument += ""; else datepickerDocument += "    "; datepickerDocument += " "; if (DatePickerObject.themeVersion!="3.0") datepickerDocument += ""; else datepickerDocument += "    "; datepickerDocument += ""; if (DatePickerObject.themeVersion!="3.0") datepickerDocument += "
"; //prompt("",datepickerDocument) return datepickerDocument; } // Create the bottom DatePicker part function buildBottom() { // Start DatePicker document var datepickerDocument = (isNav?"" + "" + "" + // Stylesheet defines appearance of DatePicker "" + " Date Picker " + "" + "":"") + DatePickerBegin.replace(/{datepickerDocumentTop}/, datepickerDocumentTop); // Get month, and year from global DatePicker date var month = DatePickerObject.currentMonth; var year = DatePickerObject.currentYear; var date = new Date(); // Get globally-tracked day value (prevents javascript date anomalies) var selectedDay = DatePickerObject.selectedDay; var i = 0; // Determine the number of days in the current month var days = getDaysInMonth(); // If global day value is > than days in month, highlight last day in month if (selectedDay > days) selectedDay = days; // Determine what day of the week the DatePicker starts on var firstOfMonth = new Date (year, month, 1); // Get the day of the week the first day of the month falls on var startingPos = firstOfMonth.getDay() - firstWeekDayIndex; if (startingPos<0) startingPos += 7; days += startingPos; // Keep track of the columns, start a new row after every 7 columns var columnCount = 0; // Make beginning non-date cells blank for (i = 0; i < startingPos; i++) { if ((columnCount + firstWeekDayIndex) % 7 == 0 || (columnCount + firstWeekDayIndex) % 7 == 6) datepickerDocument += blankCellWeekend else datepickerDocument += blankCell; columnCount++; } // Set values for days of the month var currentDay = 0; var dayType = "weekday"; var dayBackground = ""; // Date cells contain a number for (i = startingPos; i < days; i++) { var paddingChar = " "; dayBackground = ""; var padding = ""; // Adjust spacing so that all links have relatively equal widths if (i-startingPos+1 < 10) padding = "  "; else padding = " "; // Get the day currently being written currentDay = i-startingPos+1; // Set the type of day, the selected day generally appears as a different color var currentDate = DatePickerObject.selectedDate; if (currentDay == selectedDay && month==currentDate.getMonth() && year==currentDate.getFullYear()) { dayType = "CalendarSelectedDay"; dayBackground = "CalendarSelectedDay"; } else if (currentDay == date.getDate() && month==date.getMonth() && year==date.getFullYear()) { dayType = "CalendarToday"; dayBackground = "CalendarToday"; } else { dayType = "CalendarDay"; } // Add the day to the DatePicker string depending on workday or not. if ((columnCount + firstWeekDayIndex) % 7 == 0 || (columnCount + firstWeekDayIndex) % 7 == 6) { datepickerDocument += "" + padding + "" + currentDay + "" + paddingChar + ""; } else { datepickerDocument += "" + padding + "" + currentDay + "" + paddingChar + ""; } columnCount++; // Start a new row when necessary if (columnCount % 7 == 0) datepickerDocument += ""; } // Make remaining non-date cells blank for (i=days; i<(startingPos<0?42+startingPos:42); i++) { if ((columnCount + firstWeekDayIndex) % 7 == 0 || (columnCount + firstWeekDayIndex) % 7 == 6) datepickerDocument += blankCellWeekend; else datepickerDocument += blankCell; columnCount++; // Start a new row when necessary if (columnCount % 7 == 0) { datepickerDocument += ""; if (i<(startingPos<0?41+startingPos:41)) datepickerDocument += ""; } } // Finish the new DatePicker page datepickerDocument += DatePickerEnd + (isNav?"" + "":""); // Return the completed DatePicker page return datepickerDocument; } // Write the monthly DatePicker to the bottom DatePicker part function writeDatePicker() { // Set top.newWinDatePickerObject when DatePicker window is refreshed if (!datePickerOpened || typeof(top.newWinDatePickerObject) != "object" || (typeof(top.newWinDatePickerObject) == "object" && top.newWinDatePickerObject == null)) { var datepickerURL = DatePickerObject.relativePathPart?DatePickerObject.relativePathPart+"DatePicker.html":"DatePicker.html"; var w_left = Math.ceil(screen.width/2-120); var w_top = Math.ceil(screen.height/2-110); top.newWinDatePickerObject = window.open(datepickerURL+"?random="+Math.random(), "DatePickerWindow", "dependent=yes,left="+w_left+",top="+w_top+",width=300,height=270,screenX=200,screenY=300,titlebar=yes, center: yes, help: no, resizable: yes, status: no"); } // Create the new DatePicker for the selected month & year datepickerDocumentTop = buildTop(); datepickerDocumentBottom = buildBottom(); // Write the new DatePicker to the bottom part disableUnload = true; top.newWinDatePickerObject.document.open(); top.newWinDatePickerObject.document.write(datepickerDocumentBottom); top.newWinDatePickerObject.document.close(); disableUnload = false; } // Set the DatePicker to today's date and display the new DatePicker function setToday() { // Set global date to today's date var date = new Date(); // Set day month and year to today's date DatePickerObject.currentMonth = date.getMonth(); DatePickerObject.currentYear = date.getFullYear(); returnDate(date.getDate()); } // Set the global date to the previous year and redraw the DatePicker function setPreviousYear() { var year = DatePickerObject.currentYear - 1; var date = new Date(); date.setFullYear(year); date = checkDateRange(date); year = date.getFullYear(); DatePickerObject.currentYear = year; writeDatePicker(); } // Set the global date to the previous month and redraw the DatePicker function setPreviousMonth() { var year = DatePickerObject.currentYear; var month = DatePickerObject.currentMonth; // If month is january, set month to december and decrement the year if (month == 0) { month = 11; if (year > 1000) { year--; var date = new Date(); date.setFullYear(year); date = checkDateRange(date); year = date.getFullYear(); DatePickerObject.currentYear = year; } }else { month--; } DatePickerObject.currentMonth = month; writeDatePicker(); } // Set the global date to the next month and redraw the DatePicker function setNextMonth() { var year = DatePickerObject.currentYear; var month = DatePickerObject.currentMonth; // If month is december, set month to january and increment the year if (month == 11) { month = 0; year++; var date = new Date(); date.setFullYear(year); date = checkDateRange(date); year = date.getFullYear(); DatePickerObject.currentYear = year; } else { month++; } DatePickerObject.currentMonth = month; writeDatePicker(); } // Set the global date to the next year and redraw the DatePicker function setNextYear() { var year = DatePickerObject.currentYear + 1; var date = new Date(); date.setFullYear(year); date = checkDateRange(date); year = date.getFullYear(); DatePickerObject.currentYear = year; writeDatePicker(); } // Get number of days in month function getDaysInMonth() { var days; var month = DatePickerObject.currentMonth+1; var year = DatePickerObject.currentYear; // Return 31 days if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) { days=31; } // Return 30 days else if (month==4 || month==6 || month==9 || month==11) { days=30; } // Return 29 days else if (month==2) { if (isLeapYear(year)) { days=29; } // Return 28 days else { days=28; } } return (days); } // Check to see if year is a leap year function isLeapYear (Year) { if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) return true; else return false; } // Set days of the week depending on language function createWeekdayList() { firstWeekDayIndex = 0; newWeekdayArray = new Array(7); newWeekdayList = new Array(7); for (var i=0; i" + newWeekdayArray[i] + ""; columnCount++; } weekdays += ""; // Return table row of weekday abbreviations to display above the DatePicker return weekdays; } // Pre-build portions of the DatePicker (for performance reasons) function buildDatePickerParts() { // Generate weekday headers for the DatePicker weekdays = createWeekdayList(); // Build the blank cell rows blankCell = "   "; blankCellWeekend = "   "; // Build the top portion of the DatePicker page using css to control some display elements DatePickerBegin = (isNav?"":"" + "" + "" + // Stylesheet defines appearance of DatePicker "" + " Date Picker " + "" + "") + "
"; // Navigator needs a table container to display the table outlines properly if (DatePickerObject.themeVersion=="3.0") DatePickerBegin += "
"; else DatePickerBegin += "
{datepickerDocumentTop}
"; // Build weekday headings if (DatePickerObject.themeVersion=="3.0") { DatePickerBegin += ""; DatePickerBegin += weekdays + ""; }else DatePickerBegin += "
" + weekdays + ""; // Build the bottom portion of the DatePicker page DatePickerEnd = ""; if (DatePickerObject.themeVersion=="3.0") { var translation_language = "en"; var imgToday = DatePickerObject.themePath+"Images/"+translation_language+"/ButtonToday.gif"; DatePickerEnd += ""; } // Navigator needs a table container to display the borders properly DatePickerEnd += "
"; // End the table and html document if (DatePickerObject.themeVersion!="3.0") DatePickerEnd += "
" + (isNav?"
":"") + "" + (isNav?"":"") + "" + (isNav?"":"")+ "
" + "" + "
" + (isNav?"":"")+ "" + ""; } // Set field value to the date selected and close the DatePicker window function returnDate(inDay) { disableEvents = true; // inDay = the day the user clicked on var date = new Date(DatePickerObject.currentYear, DatePickerObject.currentMonth, 1); date.setDate(inDay); if (date) date = checkDateRange(date); // Set the date returned to the user var dateFormat = DatePickerObject.format; var outDate = formatDate(date, parseDateFormat(dateFormat)); // Set the value of the field that was passed to the DatePicker datepickerControl.value = String(outDate).replace(/\s*$/, ""); // Give focus back to the date field if (datepickerControl.type!="hidden") datepickerControl.focus(); // Close the DatePicker window top.newWinDatePickerObject.close() top.newWinDatePickerObject = null; } function UnLoad() { if (disableUnload) return; disableEvents = true; datePickerOpened = false; } //End JS DatePicker