// 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 += "| S | M | T | W | T | F | S |
";
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 ";
currentDOW ++;
if ( currentDOW >= 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 += "| " + d + " | ";
}
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 += "
";
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);
}