📄 spiffycal_v2_1.js
字号:
bYearProvided = true;
if (year == null) {
return 0;
//Default to current year
}
if (year.length != token.length){
return 0;
}
i_val += year.length;
}
else if (token=="MMM") { // Month name
month = 0;
for (var i=0; i<MONTH_NAMES.length; i++) {
var month_name = MONTH_NAMES[i];
if (val.substring(i_val,i_val+month_name.length).toLowerCase() == month_name.toLowerCase()) {
month = i+1;
if (month>12) { month -= 12; }
i_val += month_name.length;
break;
}
}
if (month == 0) { return 0; }
if ((month < 1) || (month>12)) {
return 0
}
}
else if (token=="MM" || token=="M") {
x=token.length; y=2;
month = _getInt(val,i_val,x,y);
if (month == null) { return 0; }
if ((month < 1) || (month > 12)) { return 0; }
i_val += month.length;
}
else if (token=="dd" || token=="d") {
x=token.length; y=2;
date = _getInt(val,i_val,x,y);
if (date == null) { return 0; }
if ((date < 1) || (date>31)) { return 0; }
i_val += date.length;
}
else {
if (val.substring(i_val,i_val+token.length) != token) {
return 0;
}
else {
i_val += token.length;
}
}
}
// If there are any trailing characters left in the value, it doesn't match
if (i_val != val.length) {
return 0;
}
// Is date valid for month?
if (month == 2) {
// Check for leap year
if ( ( (year%4 == 0)&&(year%100 != 0) ) || (year%400 == 0) ) { // leap year
if (date > 29){ return false; }
}
else {
if (date > 28) { return false; }
}
}
if ((month==4)||(month==6)||(month==9)||(month==11)) {
if (date > 30) { return false; }
}
//JS dates uses 0 based months.
month = month - 1;
if (bYearProvided==false) {
//Default to current
var dCurrent = new Date();
year = dCurrent.getFullYear();
}
var lYear = parseInt(year);
if (lYear<=20) {
year = 2000 + lYear;
}
else if (lYear >=21 && lYear<=99) {
year = 1900 + lYear;
}
var newdate = new Date(year,month,date,0,0,0);
return newdate;
}
this.getDateFromFormat=getDateFromFormat;
}
var calMgr = new spiffyCalManager();
//================================================================================
// Calendar Object
function ctlSpiffyCalendarBox(strVarName, strFormName, strTextBoxName, strBtnName, strDefaultValue, intBtnMode) {
var msNames = new makeArray0('1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月');
var msDays = new makeArray0(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var msDOW = new makeArray0('S','M','T','W','T','F','S');
var blnInConstructor=true;
var img_DateBtn_UP=new Image();
var img_DateBtn_OVER=new Image();
var img_DateBtn_DOWN=new Image();
var img_DateBtn_DISABLED=new Image();
var strBtnW;
var strBtnH;
var strBtnImg;
var dteToday=new Date;
var dteCur=new Date;
var dteMin=new Date;
var dteMax=new Date;
var scX=4; // default where to display calendar
var scY=4;
// Defaults
var strDefDateFmt='dd-MMM-yyyy';
var intDefBtnMode=0;
var strDefBtnImgPath=calMgr.DefBtnImgPath;
/* PROPERTIES =============================================================
*
*/
// Generic Properties
this.varName=strVarName;
this.enabled=true;
this.readonly=false;
this.focusClick=false;
this.hideButton=false;
this.visible=false;
this.displayLeft=false;
this.displayTop=false;
// Name Properties
this.formName=strFormName;
this.textBoxName=strTextBoxName;
this.btnName=strBtnName;
this.required=false;
this.x=scX;
this.y=scY;
this.imgUp=img_DateBtn_UP;
this.imgOver=img_DateBtn_OVER;
this.imgDown=img_DateBtn_DOWN;
this.imgDisabled=img_DateBtn_DISABLED;
// look
this.showWeekends=true;
this.showHolidays=true;
this.disableWeekends=false;
this.disableHolidays=false;
this.textBoxWidth=160;
this.textBoxHeight=20;
this.btnImgWidth=strBtnW;
this.btnImgHeight=strBtnH;
if ((intBtnMode==null)||(intBtnMode<0 && intBtnMode>2)) {
intBtnMode=intDefBtnMode
}
switch (intBtnMode) {
case 0 :
strBtnImg=strDefBtnImgPath+'btn_date_up.gif';
img_DateBtn_UP.src=strDefBtnImgPath+'btn_date_up.gif';
img_DateBtn_OVER.src=strDefBtnImgPath+'btn_date_over.gif';
img_DateBtn_DOWN.src=strDefBtnImgPath+'btn_date_down.gif';
img_DateBtn_DISABLED.src=strDefBtnImgPath+'btn_date_disabled.gif';
strBtnW = '18';
strBtnH = '20';
break;
case 1 :
strBtnImg=strDefBtnImgPath+'btn_date1_up.gif';
img_DateBtn_UP.src=strDefBtnImgPath+'btn_date1_up.gif';
img_DateBtn_OVER.src=strDefBtnImgPath+'btn_date1_over.gif';
img_DateBtn_DOWN.src=strDefBtnImgPath+'btn_date1_down.gif';
img_DateBtn_DISABLED.src=strDefBtnImgPath+'btn_date1_disabled.gif';
strBtnW = '22';
strBtnH = '17';
break;
case 2 :
strBtnImg=strDefBtnImgPath+'btn_date2_up.gif';
img_DateBtn_UP.src=strDefBtnImgPath+'btn_date2_up.gif';
img_DateBtn_OVER.src=strDefBtnImgPath+'btn_date2_over.gif';
img_DateBtn_DOWN.src=strDefBtnImgPath+'btn_date2_down.gif';
img_DateBtn_DISABLED.src=strDefBtnImgPath+'btn_date2_disabled.gif';
strBtnW = '34';
strBtnH = '21';
break;
}
// Date Properties
this.dateFormat=strDefDateFmt;
this.useDateRange=false;
this.minDate=new Date;
this.maxDate=new Date(dteToday.getFullYear()+1, dteToday.getMonth(), dteToday.getDate());
this.minDay = function() {
return this.minDate.getDate();
}
this.minMonth = function() {
return this.minDate.getMonth();
}
this.minYear = function() {
return this.minDate.getFullYear();
}
this.maxDay = function() {
return this.maxDate.getDate();
}
this.maxMonth = function() {
return this.maxDate.getMonth();
}
this.maxYear = function() {
return this.maxYear.getFullYear();
}
function setMinDate(intYear, intMonth, intDay) {
this.minDate = new Date(intYear, intMonth-1, intDay);
}
this.setMinDate=setMinDate;
function setMaxDate(intYear, intMonth, intDay) {
this.maxDate = new Date(intYear, intMonth-1, intDay);
}
this.setMaxDate=setMaxDate;
this.minYearChoice=dteToday.getFullYear()-10;
this.maxYearChoice=dteToday.getFullYear()+10;
this.textBox= function() {
if (!blnInConstructor) {
return eval('document.'+this.formName+'.'+this.textBoxName);
}
}
this.getSelectedDate = function () {
var strTempVal=''; var objEle;
if ((typeof this.formName !='undefined') && (typeof this.textBoxName!='undefined')) {
objEle=eval('document.'+this.formName+'.'+this.textBoxName);
if (objEle && !blnInConstructor) {
strTempVal=eval('document.'+this.formName+'.'+this.textBoxName+'.value');
}
else {
strTempVal=strDefaultValue;
}
}
else {
strTempVal=strDefaultValue;
}
return strTempVal;
}
function setSelectedDate(strWhat) {
var strTempVal=''; var objEle;
eval('document.'+this.formName+'.'+this.textBoxName).value=strWhat;
if (!calMgr.isDate(quote(strWhat),quote(this.dateFormat))) {
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBoxInvalid";
}
else {
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBox";
}
}
this.setSelectedDate=setSelectedDate;
function disable() {
this.hide();
calMgr.swapImg(this,'.imgDisabled',false);
this.enabled=false;
eval('document.'+this.formName+'.'+this.textBoxName).disabled=true;
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBoxDisabled";
if (scNN) {
eval('document.'+this.formName+'.'+this.textBoxName).onFocus= function() {this.blur();};
}
}
this.disable=disable;
function enable() {
this.enabled=true;
calMgr.swapImg(this,'.imgUp',false);
eval('document.'+this.formName+'.'+this.textBoxName).disabled=false;
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBox";
if (scNN) {
eval('document.'+this.formName+'.'+this.textBoxName).onFocus= null;
}
if (!calMgr.isDate(quote(this.getSelectedDate()),quote(this.dateFormat))) {
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBoxInvalid";
}
}
this.enable=enable;
// behavior Properties
this.JStoRunOnSelect='';
this.JStoRunOnClear='';
this.JStoRunOnCancel='';
this.hideCombos=true;
/* METHODS ===============================================================
*
*/
function makeCalendar(intWhatMonth,intWhatYear,bViewOnly) {
if (bViewOnly) {intWhatMonth-=1;}
var strOutput = '';
var intStartMonth=intWhatMonth;
var intStartYear=intWhatYear;
var intLoop;
var strTemp='';
var strDateColWidth;
var isWE = false;
dteCur.setMonth(intWhatMonth);
dteCur.setFullYear(intWhatYear);
dteCur.setDate(dteToday.getDate());
dteCur.setHours(0);dteCur.setMinutes(0);dteCur.setSeconds(0);dteCur.setMilliseconds(0);
if (!(bViewOnly)) {
strTemp='<form name="spiffyCal">';
}
// special case for form not to be inside table in Netscape 6
if (scNN6) {
strOutput += strTemp +'<table width="185" border="3" class="cal-Table" cellspacing="0" cellpadding="0"><tr>';
}
else {
strOutput += '<table width="185" border="3" class="cal-Table" cellspacing="0" cellpadding="0">'+strTemp+'<tr>';
}
if (!(bViewOnly)) {
strOutput += '<td class="cal-HeadCell" align="center" width="100%"><a href="javascript:'+this.varName+'.clearDay();"><img name="calbtn1" src="'+strDefBtnImgPath+'btn_del_small.gif" border="0" width="12" height="10"></a> <a href="javascript:'+this.varName+'.scrollMonth(-1);" class="cal-DayLink"><</a> <SELECT class="cal-ComboBox" NAME="cboMonth" onChange="'+this.varName+'.changeMonth();">';
for (intLoop=0; intLoop<12; intLoop++) {
if (intLoop == intWhatMonth) strOutput += '<OPTION VALUE="' + intLoop + '" SELECTED>' + msNames[intLoop] + '<\/OPTION>';
else strOutput += '<OPTION VALUE="' + intLoop + '">' + msNames[intLoop] + '<\/OPTION>';
}
strOutput += '<\/SELECT><SELECT class="cal-ComboBox" NAME="cboYear" onChange="'+this.varName+'.changeYear();">';
for (intLoop=this.minYearChoice; intLoop<this.maxYearChoice; intLoop++) {
if (intLoop == intWhatYear) strOutput += '<OPTION VALUE="' + intLoop + '" SELECTED>' + intLoop + '<\/OPTION>';
else strOutput += '<OPTION VALUE="' + intLoop + '">' + intLoop + '<\/OPTION>';
}
strOutput += '<\/SELECT> <a href="javascript:'+this.varName+'.scrollMonth(1);" class="cal-DayLink">></a> <a href="javascript:'+this.varName+'.hide();"><img name="calbtn2" src="'+strDefBtnImgPath+'btn_close_small.gif" border="0" width="12" height="10"></a><\/td><\/tr><tr><td width="100%" align="center">';
}
else {
strOutput += '<td class="cal-HeadCell" align="center" width="100%">'+msNames[intWhatMonth]+'-'+intWhatYear+'<\/td><\/tr><tr><td width="100%" align="center">';
}
firstDay = new Date(intWhatYear,intWhatMonth,1);
startDay = firstDay.getDay();
if (((intWhatYear % 4 == 0) && (intWhatYear % 100 != 0)) || (intWhatYear % 400 == 0))
msDays[1] = 29;
else
msDays[1] = 28;
strOutput += '<table width="185" cellspacing="1" cellpadding="2" border="0"><tr>';
// Header ROW showing days of week here
for (intLoop=0; intLoop<7; intLoop++) {
if (intLoop==0 || intLoop==6) {
strDateColWidth="15%"
}
else
{
strDateColWidth="14%"
}
strOutput += '<td class="cal-HeadCell" width="' + strDateColWidth + '" align="center" valign="middle">'+ msDOW[intLoop] +'<\/td>';
}
strOutput += '<\/tr><tr>';
var intColumn = 0;
var intLastMonth = intWhatMonth - 1;
var intLastYear = intWhatYear;
if (intLastMonth == -1) { intLastMonth = 11; intLastYear=intLastYear-1;}
// Show last month's days in first row
for (intLoop=0; intLoop<startDay; intLoop++, intColumn++) {
strOutput += this.getDayLink(true,(msDays[intLastMonth]-startDay+intLoop+1),intLastMonth,intLastYear,bViewOnly,isWE);
}
// Show this month's days
for (intLoop=1; intLoop<=msDays[intWhatMonth]; intLoop++, intColumn++) {
if ((intColumn % 6)==0) {isWE=true } else {isWE=false}
strOutput += this.getDayLink(false,intLoop,intWhatMonth,intWhatYear,bViewOnly,isWE);
if (intColumn == 6) {
strOutput += '<\/tr><tr>';
intColumn = -1;
}
}
var intNextMonth = intWhatMonth+1;
var intNextYear = intWhatYear;
if (intNextMonth==12) { intNextMonth=0; intNextYear=intNextYear+1;}
// Show next month's days in last row
if (intColumn > 0) {
for (intLoop=1; intColumn<7; intLoop++, intColumn++) {
strOutput += this.getDayLink(true,intLoop,intNextMonth,intNextYear,bViewOnly);
}
strOutput += '<\/tr><\/table><\/td><\/tr>';
}
else {
strOutput = strOutput.substr(0,strOutput.length-4); // remove the <tr> from the end if there's no last row
strOutput += '<\/table><\/td><\/tr>';
}
if (scNN6) {
strOutput += '<\/table><\/form>';
}
else {
strOutput += '<\/form><\/table>';
}
dteCur.setDate(1);
dteCur.setHours(0);dteCur.setMinutes(0);dteCur.setSeconds(0);dteCur.setMilliseconds(0);
dteCur.setMonth(intStartMonth);
dteCur.setFullYear(intStartYear);
return strOutput;
}
this.makeCalendar=makeCalendar;
// writeControl -------------------------------------
//
function writeControl() {
var strHold='';
var strTemp='';
var strTempMinDate='';
var strTempMaxDate='';
// specify whether you can type in the date box and validate them as well
// or whether you must use the calendar only to select a date
if (this.readonly) {
strTemp=' onFocus="this.blur();" readonly ';
}
if (this.focusClick) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -