/*
dateBox.js 2002-01-09
Author(s): Serge Ryabcuck, z555.com, Copyright 2002
z555.com grants you a royalty free license to use or modify this
software provided that this copyright notice appears on all copies.
This software is provided "AS IS," without a warranty of any kind.
*/
/* ToDo
- Masks like dd/mm/yyyy, mm/dd/yyyy, etc.
- Redraw of the object after change of object style properties.
- Rewrite some object methods for conforming with initial idea
and remoe direct HTML objects calls for properties duplicates
*/
window.dbIE = document.all ? true : false; // IE 4+
window.dbDOM = (document.getElementById && ! document.all) ? true : false; // NS6, Mozilla, other DOM2 compartible browsers
function dateBox(name, month, day, year) {
this.name = name;
this.day = day;
this.month = month;
this.year = year;
this.id;
this.version = "2.0.1 [Date Box; 20020109] ";
this.type = "dateBox";
this.startYear = 1998;
this.endYear = 2008;
this.height = 16;
this.shortMonthWidth = 47;
this.longMonthWidth = 87;
this.dayWidth = 38;
this.yearWidth = 54;
this.fontFamily = 'Arial, Verdana, Helvetica, Espy, Sans-Serif';
this.fontSize = '8pt';
this.dateBoxStyle = 'long';
this.shortMonth = [ 'Jan', 'Feb', 'Mar',
'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec'
];
this.longMonth = [ 'January', 'February', 'March',
'April', 'May', 'June',
'July', 'August', 'September',
'Octovber', 'Novvember', 'December'
];
// Other Properties;
this.HTMLcontainer;
this.objForm;
this.objMonth;
this.objDay;
this.objYear;
// Methods
this.getName = getName;
this.setDay = setDay;
this.getDay = getDay;
this.setMonth = setMonth;
this.getMonth = getMonth;
this.setYear = setYear;
this.getYear = getYear;
this.getID = getID;
this.setStartYear = setStartYear;
this.getStartYear = getStartYear;
this.setEndYear = setEndYear;
this.getEndYear = getEndYear;
this.getDateBoxStyle = getDateBoxStyle;
this.setHeight = setHeight;
this.getHeight = getHeight;
this.setShortMonth = setShortMonth;
this.getShortMonth = getShortMonth;
this.setLongMonth = setLongMonth;
this.getLongMonth = getLongMonth;
this.getMonthWidth = getMonthWidth;
this.setDayWidth = setDayWidth;
this.getDayWidth = getDayWidth;
this.setYearWidth = setYearWidth;
this.getYearWidth = getYearWidth;
this.getMonthName = getMonthName;
this.setFontFamily = setFontFamily;
this.getFontFamily = getFontFamily;
this.setFontSize = setFontSize;
this.getFontSize = getFontSize;
this.setObjPointers = setObjPointers;
this.makeDateHTML = makeDateHTML;
this.printHTML = printHTML;
this.monthDays = monthDays;
this.limitList = limitList
this.getObjForm = getObjForm;
this.getObjDay = getObjDay;
this.getObjMonth = getObjMonth;
this.getObjYear = getObjYear;
this.getObjSelectedDate = getObjSelectedDate;
this.setRawDate = setRawDate;
this.setObjDate = setObjDate;
//Events
this.onSelectDate = onSelectDate;
var curDate = new Date();
if (!month) { this.month = curDate.getMonth()+1 };
if (!day) { this.day = curDate.getDate() };
if (!year) {
if (window.dbDOM) {
this.year = curDate.getYear()+1900;
} else {
this.year = curDate.getYear();
}
};
if (!window.dateBoxes) window.dateBoxes = new Array();
this.id=window.dateBoxes.length;
window.dateBoxes[window.dateBoxes.length] = this;
}
/////////////////////////////////////////////////////////////
// dateBox.getName()
function getName() {
return this.name;
}
/////////////////////////////////////////////////////////////
// dateBox.setDay()
function setDay(day) {
this.day=day;
}
/////////////////////////////////////////////////////////////
// dateBox.getDay()
function getDay() {
return this.day;
}
/////////////////////////////////////////////////////////////
// dateBox.setMonth()
function setMonth(month) {
this.month = month;
}
/////////////////////////////////////////////////////////////
// dateBox.getMonth()
function getMonth() {
return this.month;
}
/////////////////////////////////////////////////////////////
// dateBox.setYear()
function setYear(year) {
this.year=year;
}
/////////////////////////////////////////////////////////////
// dateBox.getYear()
function getYear() {
return this.year;
}
/////////////////////////////////////////////////////////////
// dateBox.getID()
function getID() {
return this.id;
}
/////////////////////////////////////////////////////////////
// dateBox.setStartYear()
function setStartYear(year) {
this.startYear = year;
}
/////////////////////////////////////////////////////////////
// dateBox.getStartYear()
function getStartYear() {
return this.startYear;
}
/////////////////////////////////////////////////////////////
// dateBox.setEndYear()
function setEndYear(year) {
this.endYear = year;
}
/////////////////////////////////////////////////////////////
// dateBox.getEndYear()
function getEndYear() {
return this.endYear;
}
/////////////////////////////////////////////////////////////
// dateBox.getDateBoxStyle()
function getDateBoxStyle() {
return this.dateBoxStyle;
}
/////////////////////////////////////////////////////////////
// dateBox.setShortMonth()
function setShortMonth(monthArray) {
this.shortMonth=monthArray;
}
/////////////////////////////////////////////////////////////
// dateBox.getShortMonth()
function getShortMonth(monthIndex) {
return this.shortMonth[monthIndex-1];
}
/////////////////////////////////////////////////////////////
// dateBox.setLongMonth()
function setLongMonth(monthArray) {
this.longMonth=monthArray;
}
/////////////////////////////////////////////////////////////
// dateBox.getLongMonth()
function getLongMonth(monthIndex) {
return this.longMonth[monthIndex-1];
}
/////////////////////////////////////////////////////////////
// dateBox.getMonthName()
function getMonthName(monthIndex) {
if (this.getDateBoxStyle() == 'short') {
return this.getShortMonth(monthIndex);
} else {
return this.getLongMonth(monthIndex);
}
}
/////////////////////////////////////////////////////////////
// dateBox.setHeight()
function setHeight(height) {
this.height = height;
}
/////////////////////////////////////////////////////////////
// dateBox.getHeight()
function getHeight() {
return this.height;
}
/////////////////////////////////////////////////////////////
// dateBox.setShortMonthWidth()
function setShortMonthWidth(width) {
this.shortMonthWidth = width;
}
/////////////////////////////////////////////////////////////
// dateBox.setLongMonthWidth()
function setLongMonthWidth(width) {
this.longMonthWidth = width;
}
/////////////////////////////////////////////////////////////
// dateBox.getMonthWidth()
function getMonthWidth() {
if (this.getDateBoxStyle() == 'short') {
return this.shortMonthWidth;
} else {
return this.longMonthWidth;
}
}
/////////////////////////////////////////////////////////////
// dateBox.setDayWidth()
function setDayWidth(width) {
this.dayWidth = width;
}
/////////////////////////////////////////////////////////////
// dateBox.getDayWidth()
function getDayWidth() {
return this.dayWidth;
}
/////////////////////////////////////////////////////////////
// dateBox.setYearWidth()
function setYearWidth(width) {
this.yearWidth = width;
}
/////////////////////////////////////////////////////////////
// dateBox.getYearWidth()
function getYearWidth() {
return this.yearWidth;
}
/////////////////////////////////////////////////////////////
// dateBox.setFontFamily()
function setFontFamily(family) {
this.fontFamily=family;
}
/////////////////////////////////////////////////////////////
// dateBox.getFontFamily()
function getFontFamily() {
return this.fontFamily;
}
/////////////////////////////////////////////////////////////
// dateBox.setFontSize()
function setFontSize(size) {
this.fontSize=size;
}
/////////////////////////////////////////////////////////////
// dateBox.getFontSize()
function getFontSize() {
return this.fontSize;
}
/////////////////////////////////////////////////////////////
// dateBox.getObjForm()
function getObjForm() {
return this.objForm;
}
/////////////////////////////////////////////////////////////
// dateBox.getObjDay()
function getObjDay() {
return this.objDay;
}
/////////////////////////////////////////////////////////////
// dateBox.getObjMonth()
function getObjMonth() {
return this.objMonth;
}
/////////////////////////////////////////////////////////////
// dateBox.getObjYear()
function getObjYear() {
return this.objYear;
}
/////////////////////////////////////////////////////////////
// dateBox.makeDateHTML()
function makeDateHTML() {
var dateStr = "";
// Build Month
dateStr += '";
// Build Day
dateStr += '";
// Build Year
dateStr += '";
this.HTMLcontainer=dateStr;
}
/////////////////////////////////////////////////////////////
// dateBox.printHTML()
function printHTML() {
document.write(this.HTMLcontainer);
this.setObjPointers(document.forms[document.forms.length-1]);
this.limitList(this.monthDays(this.getMonth(),this.getYear()));
}
/////////////////////////////////////////////////////////////
// dateBox.setObjPointers()
function setObjPointers(form) {
this.objForm = form;
this.objDay = eval("form."+this.getName()+"Day");
this.objMonth = eval("form."+this.getName()+"Month");
this.objYear = eval("form."+this.getName()+"Year");
}
// How many days in the month?
/////////////////////////////////////////////////////////////
// dateBox.monthDays()
function monthDays(month,year) {
var day = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
month--;
if ((year % 4 == 0) && (month==1)) {
if (year % 100 == 0) {
if (year % 400 == 0) {
return 29;
} else {
return 28;
}
} else {
return 29;
}
} else {
return day[month];
}
}
// Event processor
/////////////////////////////////////////////////////////////
// dateBox.onSelectDate()
function onSelectDate() {
if (window.dbIE || window.dbDOM) {
var objDay=this.getObjDay();
var objYear=this.getObjYear();
var objMonth=this.getObjMonth();
yearVal=objYear.options[objYear.selectedIndex].text;
monthVal=objMonth.options[objMonth.selectedIndex].value;
this.limitList(this.monthDays(monthVal,yearVal));
this.setDay(objDay.selectedIndex+1);
this.setMonth(objMonth.selectedIndex+1);
this.setYear(objYear.selectedIndex+this.startYear);
}
}
//Rebuilds dropdown list of day options according to the month
/////////////////////////////////////////////////////////////
// dateBox.limitList()
function limitList(length) {
list=this.getObjDay();
if (length<(list.selectedIndex+1)) {
list.selectedIndex=length-1;
}
if (window.dbIE || window.dbDOM) {
if (list.options.lengthlength) {
for (var i=list.options.length; i>=length; i--) {
list.remove(i);
}
}
}
}
// Convert form fields to Date object
/////////////////////////////////////////////////////////////
// dateBox.getObjSelectedDate()
function getObjSelectedDate() {
if (window.dbIE || window.dbDOM) {
var objDay=this.getObjDay();
var objYear=this.getObjYear();
var objMonth=this.getObjMonth();
var day=objDay.options[objDay.selectedIndex].text;
var month=objMonth.options[objMonth.selectedIndex].value-1;
var year=objYear.options[objYear.selectedIndex].text;
var dateObj = new Date(year, month, day);
return dateObj;
}
}
// Set specified Date
/////////////////////////////////////////////////////////////
// dateBox.setRawDate()
function setRawDate(month,day,year) {
if (window.dbIE || window.dbDOM) {
var objDay=this.getObjDay();
var objYear=this.getObjYear();
var objMonth=this.getObjMonth();
this.limitList(this.monthDays(month,year));
objDay.selectedIndex=day-1;
objMonth.selectedIndex=month-1;
objYear.selectedIndex=year-this.startYear;
}
}
/////////////////////////////////////////////////////////////
// dateBox.setObjDate()
function setObjDate(date){
if (window.dbIE || window.dbDOM) {
var month = date.getMonth()+1;
var day = date.getDate();
if (window.dbDOM) {
var year = date.getYear()+1900;
} else {
var year = date.getYear();
}
this.setRawDate(month,day,year);
}
}