/* Javascript name: My Date Time Picker Date created: 16-Nov-2003 23:19 Scripter: TengYong Ng Website: http://www.rainforestnet.com Copyright (c) 2003 TengYong Ng FileName: DateTimePicker.js Version: 0.8 Contact: contact@rainforestnet.com Note: Permission given to use this script in ANY kind of applications if header lines are left unchanged. */ /*Global variables*/ var winCal; var dtToday = new Date(); var Cal; var docCal; var MonthName = ["January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", "December"]; var WeekDayName = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]; var WeekDayOffset = 1; /*0-> week starts on Sunday, 1-> on monday ...*/ var exDateTime; /*Existing Date and Time*/ /*Configurable parameters*/ var cnTop = "200"; /*top coordinate of calendar window.*/ var cnLeft = "500"; var calendarWindowFeatures = "toolbar=0,status=0,menubar=0,fullscreen=no,width=250,height=245,resizable=0,top=" + cnTop + ",left=" + cnLeft; /*left coordinate of calendar window */ var WindowTitle = "DateTime Picker"; /*Date Time Picker title.*/ var WeekChar = 2; /*number of character for week day. if 2 then Mo,Tu,We. if 3 then Mon,Tue,Wed. */ var CellWidth = 25; /*Width of day cell. */ var DateSeparator = "-"; /*Date Separator, you can change it to "/" if you want. */ var TimeMode = 24; /*default TimeMode value. 12 or 24 */ var ShowLongMonth = true; /*Show long month name in Calendar header. example: "January".*/ var ShowMonthYear = true; /*Show Month and Year in Calendar header.*/ var MonthYearColor = "#cc0033"; /*Font Color of Month and Year in Calendar header.*/ var WeekHeadColor = "#0099CC"; /*Background Color in Week header.*/ var SundayColor = "background:#ff4500"; /*Background color of Sunday.*/ var SaturdayColor = "background:orange"; /*Background color of Saturday.*/ var WeekDayColor = "background:white"; /*Background color of weekdays.*/ var FontColor = "blue"; /*color of font in Calendar day cell.*/ var TodayColor = "background:#f0e68c"; /*Background color of today.*/ var SelDateColor = "background:#00008B"; /*Backgrond color of selected date in textbox.*/ var YrSelColor = "#cc0033"; /*color of font of Year selector.*/ var ThemeBg = ""; /*Background image of Calendar window. */ var InputsStyle = "Border-Width:1px; Border-Color:#cccccc; Border-Style:solid; Font-Weight: normal; Font-Size: 10px;"+ "Background-Color: #ffffff; Color: #000000; Height:20;"; /*Style for inputs */ /*end Configurable parameters end Global variable */ function NewCal(pCtrl, pFormat, pShowTime, pTimeMode) { Cal = new Calendar(dtToday); if ((pShowTime != null) && (pShowTime)) { Cal.ShowTime = true; if ((pTimeMode != null) && ((pTimeMode == '12') || (pTimeMode == '24'))) { TimeMode = pTimeMode; } } if (pCtrl != null) Cal.Ctrl = pCtrl; if (pFormat != null) Cal.Format = pFormat.toUpperCase(); exDateTime = document.getElementById(pCtrl).value; if (exDateTime != "")/*Parse Date String */ { var Sp1; /*Index of Date Separator 1 */ var Sp2; /*Index of Date Separator 2 */ var tSp1; /*Index of Time Separator 1 */ var tSp2; /*Index of Time Separator 2 */ var strMonth; var strDate; var strYear; var intMonth; var YearPattern; var strHour; var strMinute; var strSecond; /*parse month*/ Sp1 = exDateTime.indexOf(DateSeparator, 0) Sp2 = exDateTime.indexOf(DateSeparator, (parseInt(Sp1) + 1)); if ((Cal.Format.toUpperCase() == "DDMMYYYY") || (Cal.Format.toUpperCase() == "DDMMMYYYY")) { strMonth = exDateTime.substring(Sp1 + 1, Sp2); strDate = exDateTime.substring(0, Sp1); } else if ((Cal.Format.toUpperCase() == "MMDDYYYY") || (Cal.Format.toUpperCase() == "MMMDDYYYY")) { strMonth = exDateTime.substring(0, Sp1); strDate = exDateTime.substring(Sp1 + 1, Sp2); } if (isNaN(strMonth)) intMonth = Cal.GetMonthIndex(strMonth); else intMonth = parseInt(strMonth, 10) - 1; if ((parseInt(intMonth, 10) >= 0) && (parseInt(intMonth, 10) <12)) Cal.Month = intMonth; /*end parse month */ /*parse Date */ if ((parseInt(strDate, 10) <= Cal.GetMonDays()) && (parseInt(strDate, 10) >= 1)) Cal.Date = strDate; /*end parse Date */ /*parse year */ strYear = exDateTime.substring(Sp2 + 1, Sp2 + 5); YearPattern = /^\d{4}$/; if (YearPattern.test(strYear)) Cal.Year = parseInt(strYear, 10); /*end parse year */ /*parse time */ if (Cal.ShowTime == true) { tSp1 = exDateTime.indexOf(":", 0) tSp2 = exDateTime.indexOf(":", (parseInt(tSp1) + 1)); strHour = exDateTime.substring(tSp1, (tSp1) - 2); Cal.SetHour(strHour); strMinute = exDateTime.substring(tSp1 + 1, tSp2); Cal.SetMinute(strMinute); strSecond = exDateTime.substring(tSp2 + 1, tSp2 + 3); Cal.SetSecond(strSecond); } } winCal = window.open("", "DateTimePicker", calendarWindowFeatures); docCal = winCal.document; /* Doesn't work fine: winCal.onblur = function(){this.close();} */ winCal.focus(); RenderCal(); } function RenderCal() { var vCalHeader; var vCalData; var vCalTime; var i; var j; var SelectStr; var vDayCount = 0; var vFirstDay; docCal.open(); docCal.writeln("" + WindowTitle + ""); docCal.writeln(""); docCal.writeln(""); docCal.writeln(""); docCal.writeln("
"); vCalHeader = "\n"; /*Month Selector*/ vCalHeader += "\n\n"; vCalHeader += ""; /*Calendar header shows Month and Year */ if (ShowMonthYear) vCalHeader += "\n"; /*Week day header */ vCalHeader += ""; for (i = 0; i <7; i++) { vCalHeader += ""; } vCalHeader += ""; docCal.write(vCalHeader); /*Calendar detail */ CalDate = new Date(Cal.Year, Cal.Month); CalDate.setDate(1); vFirstDay = CalDate.getDay() - WeekDayOffset; vFirstDay = vFirstDay < 0 ? vFirstDay +7: vFirstDay; vCalData = ""; for (i = 0; i \n"; } } docCal.writeln(vCalData); /*Time picker */ if (Cal.ShowTime) { var showHour; showHour = Cal.getShowHour(); vCalTime = "\n\n"; docCal.write(vCalTime); } /*end time picker*/ docCal.writeln("\n
"; /*Year selector*/ vCalHeader += "\n
\n"; vCalHeader += "< " + Cal.Year + ">
" + Cal.GetMonthName(ShowLongMonth) + " " + Cal.Year + "
" + WeekDayName[i].substr(0, WeekChar) + "
"; vCalTime += ""; vCalTime += " : "; vCalTime += ""; vCalTime += " : "; vCalTime += ""; if (TimeMode == 12) { var SelectAm = (parseInt(Cal.Hours, 10) < 12)? "Selected":""; var SelectPm = (parseInt(Cal.Hours, 10) >= 12)? "Selected":""; vCalTime += ""; } vCalTime += "\n
"); docCal.writeln("
"); docCal.close(); } function GenCell(pValue, pHighLight, pStyle) /*Generate table cell with value */ { var PValue; var PCellStr; var vStyle; var vHLstr1; /*HighLight string*/ var vHlstr2; var vTimeStr; if (pValue == null) PValue = ""; else PValue = pValue; if (pStyle != null) vStyle = "style=\"" + pStyle + "\""; else vStyle = ""; if ((pHighLight != null) && (pHighLight)) { vHLstr1 = "color='red'>"; vHLstr2 = ""; } else { vHLstr1 = ">"; vHLstr2 = ""; } if (Cal.ShowTime) { vTimeStr = "winMain.document.getElementById('" + Cal.Ctrl + "').value+=' '+" + "winMain.Cal.getShowHour()" + "+':'+" + "winMain.Cal.Minutes" + "+':'+" + "winMain.Cal.Seconds"; if (TimeMode == 12) vTimeStr += "+' '+winMain.Cal.AMorPM"; } else vTimeStr = ""; PCellStr = "" + PValue + "" + vHLstr2 + ""; /*if(pHighLight) alert("Generado "+PCellStr); */ return PCellStr; } function Calendar(pDate, pCtrl) { /*Properties*/ this.Date = pDate.getDate(); /*selected date */ this.Month = pDate.getMonth(); /*selected month number*/ this.Year = pDate.getFullYear(); /*selected year in 4 digits */ this.Hours = pDate.getHours(); if (pDate.getMinutes() <10) this.Minutes = "0" + pDate.getMinutes(); else this.Minutes = pDate.getMinutes(); if (pDate.getSeconds() <10) this.Seconds = "0" + pDate.getSeconds(); else this.Seconds = pDate.getSeconds(); this.MyWindow = winCal; this.Ctrl = pCtrl; this.Format = "ddMMyyyy"; this.Separator = DateSeparator; this.ShowTime = false; if (pDate.getHours() <12) this.AMorPM = "AM"; else this.AMorPM = "PM"; } function GetMonthIndex(shortMonthName) { for (i = 0; i <12; i++) { if (MonthName[i].substring(0, 3).toUpperCase() == shortMonthName.toUpperCase()) { return i; } } } Calendar.prototype.GetMonthIndex = GetMonthIndex; function IncYear() { Cal.Year++; } Calendar.prototype.IncYear = IncYear; function DecYear() { Cal.Year--; } Calendar.prototype.DecYear = DecYear; function SwitchMth(intMth) { Cal.Month = intMth; } Calendar.prototype.SwitchMth = SwitchMth; function SetHour(intHour) { var MaxHour; var MinHour; if (TimeMode == 24) { MaxHour = 23; MinHour = 0 } else if (TimeMode == 12) { MaxHour = 12; MinHour = 1 } else alert("TimeMode can only be 12 or 24"); var HourExp = new RegExp("^\\d\\d$"); if (HourExp.test(intHour) && (parseInt(intHour, 10) <= MaxHour) && (parseInt(intHour, 10) >= MinHour)) { if ((TimeMode == 12) && (Cal.AMorPM == "PM")) { if (parseInt(intHour, 10) == 12) Cal.Hours = 12; else Cal.Hours = parseInt(intHour, 10) + 12; } else if ((TimeMode == 12) && (Cal.AMorPM == "AM")) { if (intHour == 12) intHour -= 12; Cal.Hours = parseInt(intHour, 10); } else if (TimeMode == 24) Cal.Hours = parseInt(intHour, 10); } } Calendar.prototype.SetHour = SetHour; function SetMinute(intMin) { var MinExp = new RegExp("^\\d\\d$"); if (MinExp.test(intMin) && (intMin <60)) Cal.Minutes = intMin; } Calendar.prototype.SetMinute = SetMinute; function SetSecond(intSec) { var SecExp = new RegExp("^\\d\\d$"); if (SecExp.test(intSec) && (intSec <60)) Cal.Seconds = intSec; } Calendar.prototype.SetSecond = SetSecond; function SetAmPm(pvalue) { this.AMorPM = pvalue; if (pvalue == "PM") { this.Hours = (parseInt(this.Hours, 10)) + 12; if (this.Hours == 24) this.Hours = 12; } else if (pvalue == "AM") this.Hours -= 12; } Calendar.prototype.SetAmPm = SetAmPm; function getShowHour() { var finalHour; if (TimeMode == 12) { if (parseInt(this.Hours, 10) == 0) { this.AMorPM = "AM"; finalHour = parseInt(this.Hours, 10) + 12; } else if (parseInt(this.Hours, 10) == 12) { this.AMorPM = "PM"; finalHour = 12; } else if (this.Hours > 12) { this.AMorPM = "PM"; if ((this.Hours - 12) <10) finalHour = "0" + ((parseInt(this.Hours, 10)) - 12); else finalHour = parseInt(this.Hours, 10) - 12; } else { this.AMorPM = "AM"; if (this.Hours <10) finalHour = "0" + parseInt(this.Hours, 10); else finalHour = this.Hours; } } else if (TimeMode == 24) { if (this.Hours <10) finalHour = "0" + parseInt(this.Hours, 10); else finalHour = this.Hours; } return finalHour; } Calendar.prototype.getShowHour = getShowHour; function GetMonthName(IsLong) { var Month = MonthName[this.Month]; if (IsLong) return Month; else return Month.substr(0, 3); } Calendar.prototype.GetMonthName = GetMonthName; function GetMonDays() /*Get number of days in a month */ { var DaysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if (this.IsLeapYear()) { DaysInMonth[1] = 29; } return DaysInMonth[this.Month]; } Calendar.prototype.GetMonDays = GetMonDays; function IsLeapYear() { if ((this.Year % 4) == 0) { if ((this.Year % 100 == 0) && (this.Year % 400) != 0) { return false; } else { return true; } } else { return false; } } Calendar.prototype.IsLeapYear = IsLeapYear; function FormatDate(pDate) { if (this.Format.toUpperCase() == "DDMMYYYY") return (pDate + DateSeparator + (this.Month + 1) + DateSeparator + this.Year); else if (this.Format.toUpperCase() == "DDMMMYYYY") return (pDate + DateSeparator + this.GetMonthName(false) + DateSeparator + this.Year); else if (this.Format.toUpperCase() == "MMDDYYYY") return ((this.Month + 1) + DateSeparator + pDate + DateSeparator + this.Year); else if (this.Format.toUpperCase() == "MMMDDYYYY") return (this.GetMonthName(false) + DateSeparator + pDate + DateSeparator + this.Year); } Calendar.prototype.FormatDate = FormatDate;