// Popup calendar v3 // Copyright TheDeal LLC 2006 // By Kevin Yan // Last update - 5/15/2006 document.write("
 
"); //////////////////////////// // Calendar Settings ////// //////////////////////////// // Calendar background color var calendarBackground = "#BBFFFF"; // Background color of highlighted mouse over var mouseOverColor = "#BBFF11"; // Calendar popup window width and height var calendarWindowWidth = 200; var calendarWindowHeight = 240; // Month text var monthText = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; // Selected day color var selectedDayColor = "red"; ////////////////////////// ////////////////////////// // Calendar table width var calendarWidth = calendarWindowWidth - 20; // Default document background color var documentBackground = document.bgColor; // Current target textfield ID var currentTargetID = ""; // Current mouse pointer var currentMouseX = 0; var currentMouseY = 0; // Todays date var today = new Date(); // Default month show on calendar var currentMonth = today.getMonth(); // Default year show on calendar var currentYear = today.getFullYear(); var maxYear = 3000; var minYear = 1900; // Selected date var selectedDate = new Date(); var outsideFunction = false; var dateFormat = "mm/dd/yyyy"; var RE_NUM = /^\-?\d+$/; document.onclick= mouseClickEvent; // Show calendar object on web page, with selected date link to target ID function showCalendar (id, df, time_flag) { if ( df ) dateFormat = df; else dateFormat = "yyyy-mm-dd"; currentTargetID = id; readCurrentDate(id); currentYear = selectedDate.getFullYear(); currentMonth = selectedDate.getMonth(); var calObj = document.getElementById("calendar"); calObj.style.left = currentMouseX + "px"; calObj.style.top = currentMouseY + "px"; calObj.style.zIndex = 100; calObj.style.background = calendarBackground; resizeSelectOptions(true); reprintCalendar(time_flag); } // Hide calendar object on web page function hideCalendar () { resizeSelectOptions(false); var calObj = document.getElementById("calendar"); calObj.innerHTML = " "; calObj.style.background = documentBackground; calObj.style.width = "0px"; calObj.style.height = "0px"; calObj.style.zIndex = -100; outsideFunction = false; minYear = 1900; maxYear = 3000; } // Reprint calendar, with updates of month and year function reprintCalendar (time_flag) { var calObj = document.getElementById("calendar"); calObj.style.width = calendarWindowWidth + "px"; calObj.style.height = calendarWindowHeight + "px"; calObj.innerHTML = getCalendarString(time_flag); } function resizeSelectOptions (h) { // if ( window.navigator.appName == 'Microsoft Internet Explorer') { if ( window.event ) { var totalForms = document.forms.length; for (var i=0; i" + "<<" + "<" + "
" + getMonthText(currentMonth) + " " + currentYear + "
" + ">" + ">>" + "
"; var daysOfMonth = getDaysOfMonth(); tempCalendar += "
"; tempCalendar += ""; var firstDayOfMonth = new Date(); firstDayOfMonth.setFullYear(currentYear); firstDayOfMonth.setDate(1); firstDayOfMonth.setMonth(currentMonth); var dayOfWeek = firstDayOfMonth.getDay(); var currentDOW = 0; for (var i = 0; i= 7 ) { currentDOW = 0; } } today = new Date(); var selectCurrent = false; if ( currentYear == selectedDate.getFullYear() && currentMonth == selectedDate.getMonth() ) { selectCurrent = true; } var numberOfWeek = 0; for (var i = 0; i" + d + ""; } else { tempCalendar += ""; } currentDOW ++; if ( currentDOW >= 7 ) { currentDOW = 0; tempCalendar += ""; numberOfWeek ++; } } while ( currentDOW < 6 ) { tempCalendar += ""; currentDOW ++; } numberOfWeek ++; tempCalendar += ""; if(flag == true || flag == "true"){ tempCalendar += ""; } else if ( numberOfWeek < 6 ) { tempCalendar += ""; } tempCalendar += "
SMTWTFS
" + d + "
 
Time:
       
"; tempCalendar += "
Close
"; return tempCalendar; } // Change current year of calendar object function modifyYear (y, flag) { var nyear = currentYear + y; if ( nyear >= minYear && nyear <= maxYear ) { currentYear += y; reprintCalendar(flag); return 0; } else { alert("Date out of range"); } } // Go to next month on calendar function addMonth (flag) { if ( currentMonth >= 11 ) { if ( currentYear == maxYear ) { alert("Date out of range"); } else { currentMonth = 0; currentYear +=1; } } else { currentMonth += 1; } reprintCalendar(flag); } // Go back one month on calendar function subMonth (flag) { if ( currentMonth <= 0 ) { if ( currentYear == minYear ) { alert("Date out of range"); } else { currentMonth = 11; currentYear -=1; } } else { currentMonth -= 1; } reprintCalendar(flag); } // Get month in word (text) format function getMonthText (m) { return monthText[m]; } // Get days of month function getDaysOfMonth () { var daysOfMonth = [31,28,31,30,31,30,31,31,30,31,30,31]; if ( currentYear % 4 == 0 ) { daysOfMonth[1] = 29; } return daysOfMonth[currentMonth]; } // Select the current date and send result to target ID function selectDate (d) { var printMonth = currentMonth + 1; var printDay = d; if(document.TimeForm != null) { var time = document.TimeForm.TimeField.value; } else { time = null; } if ( printMonth < 10 ) printMonth = "0" + printMonth; if ( printDay < 10 ) printDay = "0" + printDay; var shortYear = currentYear % 100; if ( shortYear < 10 ) shortYear = "0" + shortYear; if ( outsideFunction ) outsideCalWrite(currentYear, printMonth, printDay); else { var dateString = currentYear + "-" + printMonth + "-" + printDay; if ( dateFormat == "mm-dd-yyyy" || dateFormat == "mm-dd-yyyy hh:mm:ss") dateString = printMonth + "-" + printDay + "-" + currentYear; else if ( dateFormat == "mm/dd/yy" || dateFormat == "mm/dd/yy hh:mm:ss") dateString = printMonth + "/" + printDay + "/" + shortYear; else if ( dateFormat == "mm/dd/yyyy" || dateFormat == "mm/dd/yyyy hh:mm:ss") dateString = printMonth + "/" + printDay + "/" + currentYear; dateString = time?(cal_prs_time(time)?dateString + ' ' + cal_prs_time(time):''):dateString; document.getElementById(currentTargetID).value = dateString; } hideCalendar(); } // Get current mouse position function getMousePosition (event) { if (window.event) { currentMouseX = window.event.x + document.body.scrollLeft; currentMouseY = window.event.y + document.body.scrollTop; } else { currentMouseX = event.pageX; currentMouseY = event.pageY; } } // Handle mouse click events function mouseClickEvent (event) { var currentX = 0; var currentY = 0; if (window.event) { currentX = window.event.x + document.body.scrollLeft; currentY = window.event.y + document.body.scrollTop; } else { currentX = event.pageX; currentY = event.pageY; } if ( (currentX < currentMouseX) || (currentX > currentMouseX + calendarWindowWidth) || (currentY < currentMouseY) || (currentY > currentMouseY + calendarWindowHeight) ) { hideCalendar(); } } // Read current date function readCurrentDate (id) { if ( outsideFunction ) { selectedDate = outsideCalRead(); } else { var textDate = document.getElementById(id).value; textDate = textDate.replace(/\-/g,"/"); var tempDate = new Date(textDate); if ( tempDate.getFullYear() > 0 ) { selectedDate = tempDate; } else { selectedDate = new Date(); } } } // Change mouse over colors function mouseOver (id) { var o = document.getElementById(id); o.style.background = mouseOverColor; o.style.cursor = "pointer"; } // Change mouse out colors function mouseOut (id) { var o = document.getElementById(id); o.style.background = calendarBackground; o.style.cursor = "normal"; } // time generating function function cal_gen_time (dt_datetime) { return ( (dt_datetime.getHours() < 10 ? '0' : '') + dt_datetime.getHours() + ":" + (dt_datetime.getMinutes() < 10 ? '0' : '') + (dt_datetime.getMinutes()) + ":" + (dt_datetime.getSeconds() < 10 ? '0' : '') + (dt_datetime.getSeconds()) ); } // time parsing function function cal_prs_time (str_time) { var hr_prsed; var min_prsed; var sec_prsed; var arr_time = String(str_time ? str_time : '').split(':'); if (!arr_time[0]) hr_prsed = 0; else if (RE_NUM.exec(arr_time[0])) if (arr_time[0] < 24) hr_prsed = arr_time[0]; else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed range is 00-23."); else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed values are unsigned integers."); if (!arr_time[1]) min_prsed = 0; else if (RE_NUM.exec(arr_time[1])) if (arr_time[1] < 60) min_prsed = arr_time[1]; else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed range is 00-59."); else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed values are unsigned integers."); if (!arr_time[2]) sec_prsed = 0; else if (RE_NUM.exec(arr_time[2])) if (arr_time[2] < 60) sec_prsed = arr_time[2]; else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed range is 00-59."); else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed values are unsigned integers."); return hr_prsed + ':' + min_prsed + ':' + sec_prsed; } function cal_error (str_message) { alert (str_message); return null; } //validate the time range(must have the time field). The format should be the same as select date function. //And it will only check the from time and to time with a specific for name. function check_time_range(form_name) { var from_time = document.forms[form_name].fromTimeString.value; var to_time = document.forms[form_name].toTimeString.value; //check empty var reg_text = /^\s+$/; if(from_time == null || to_time == null || to_time.match(reg_text) != null || from_time.match(reg_text) != null ){ window.alert('From/To Time field cannot be empty!'); return false; } var from_time_array = String(from_time ? from_time : '').split(' '); var to_time_array = String(to_time ? to_time : '').split(' '); //check the length if(from_time_array.length != 2 || to_time_array.length != 2) { window.alert('Must specify both date and time!'); return false; } var date_from = get_date_from_time_array(from_time_array); var date_to = get_date_from_time_array(to_time_array); if(date_from > date_to) { window.alert('The To Time field cannot be smaller than From Time field!'); return false; } return true; } //will need the special code to handle the different format not listed here function get_date_from_time_array(time_array) { var date_array; if ( dateFormat == "mm-dd-yyyy" || dateFormat == "mm-dd-yyyy hh:mm:ss") date_array = time_array[0].split('-'); else if ( dateFormat == "mm/dd/yy" || dateFormat == "mm/dd/yy hh:mm:ss") { date_array = time_array[0].split('/'); var year_reg = /^[0-2][0-9]$/; if(date_array[2].match(year_reg) == null) date_array[2] = "19" + date_array[2]; else date_array[2] = "20" + date_array[2]; } else if ( dateFormat == "mm/dd/yyyy" || dateFormat == "mm/dd/yyyy hh:mm:ss") date_array = time_array[0].split('/'); var hms_array = time_array[1].split(':'); return new Date(date_array[2], date_array[0], date_array[1], hms_array[0], hms_array[1], hms_array[2], 0); }