/*
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("");
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;