/******************************************************
FileName:calendar.js
Copyright (c) 2003-xxxx *********公司技術開發部
Writer:Nick
create Date:2004-10-28
Rewriter:
Rewrite Date:
Impact:
******************************************************/
var gdCtrl = new Object();
var goSelectTag = new Array();
var gcGray = "#808080";
var gcToggle = "#A8CC6A";
var gcBG = "#eeeeee";
var previousObject = null;
var gdCurDate = new Date();
var giYear = gdCurDate.getFullYear();
var giMonth = gdCurDate.getMonth()+1;
var giDay = gdCurDate.getDate();
var igiYear = gdCurDate.getFullYear();
var igiMonth = gdCurDate.getMonth()+1;
var igiDay = gdCurDate.getDate();
giMonth = giMonth + 100 + "";
giMonth = giMonth.substring(1);
giDay = giDay + 100 + "";
giDay = giDay.substring(1);
var ngidate =giYear+giMonth+giDay;
function fSetDate(iYear, iMonth, iDay)
{
var VicPopCal=document.getElementById("VicPopCal");
VicPopCal.style.visibility = "hidden";
if ((iYear == 0) && (iMonth == 0) && (iDay == 0))
{
gdCtrl.value = "";
}
else
{
iMonth = iMonth + 100 + "";
iMonth = iMonth.substring(1);
iDay = iDay + 100 + "";
iDay = iDay.substring(1);
//var sedate = iYear+iMonth+iDay;
gdCtrl.innerText = iYear+"-"+iMonth+"-"+iDay;
/*
if (parseInt(sedate) > parseInt(ngidate))
{
//alert("選擇日期不能大於今天!");
//gdCtrl.value = "";
}
else
{
if(gdCtrl.tagName == "INPUT")
{
gdCtrl.value = iYear+"/"+iMonth+"/"+iDay;
}
else
{
gdCtrl.innerText = iYear+"/"+iMonth+"/"+iDay;
}
}
*/
}
for (i in goSelectTag)
goSelectTag[i].style.visibility = "visible";
goSelectTag.length = 0;
//showdays(startDate,endDate,totalDays);
window.returnValue=gdCtrl.value;
}
function HiddenDiv()
{
var i;
var VicPopCal=document.getElementById("VicPopCal");
VicPopCal.style.visibility = "hidden";
for (i in goSelectTag)
goSelectTag[i].style.visibility = "visible";
goSelectTag.length = 0;
}
function fSetSelected(aCell)
{
var iOffset = 0;
var iYear = parseInt(tbSelYear.value);
var iMonth = parseInt(tbSelMonth.value);
aCell.bgColor = gcBG;
with (aCell.children["cellText"])
{
var iDay = parseInt(innerText);
if (color==gcGray)
iOffset = (Victor<10)?-1:1;
iMonth += iOffset;
if (iMonth<1)
{
iYear--;
iMonth = 12;
}
else if (iMonth>12)
{
iYear++;
iMonth = 1;
}
}
fSetDate(iYear, iMonth, iDay);
//
//alert("ok")
//showdays(document.requisition.startDate,document.requisition.endDate,document.requisition.totalDays);
//document.requisition.totalMen.focus();
}
function Point(iX, iY){
this.x = iX;
this.y = iY;
}
function fBuildCal(iYear, iMonth)
{
var aMonth=new Array();
for(i=1;i<7;i++)
aMonth[i]=new Array(i);
var dCalDate=new Date(iYear, iMonth-1, 1);
var iDayOfFirst=dCalDate.getDay();
var iDaysInMonth=new Date(iYear, iMonth, 0).getDate();
var iOffsetLast=new Date(iYear, iMonth-1, 0).getDate()-iDayOfFirst+1;
var iDate = 1;
var iNext = 1;
for (d = 0; d < 7; d++)
aMonth[1][d] = (d<iDayOfFirst)?-(iOffsetLast+d):iDate++;
for (w = 2; w < 7; w++)
for (d = 0; d < 7; d++)
aMonth[w][d] = (iDate<=iDaysInMonth)?iDate++:-(iNext++);
return aMonth;
}
function fDrawCal(iYear, iMonth, iCellHeight, sDateTextSize)
{
//var WeekDay = new Array("日","一","二","三","四","五","六");
var WeekDay = new Array("SUN","MON","TUE","WED","THU","FRI","SAT");
var styleTD = " bgcolor='"+gcBG+"' bordercolor='"+gcBG+"' valign='middle' align='center' height='"+iCellHeight+"' style='font:bold arial "+sDateTextSize+";";
//Coded by Liming Weng(Victor Won) email:[email protected]
with (document) {
write("<tr bgcolor='#547026' align='center'>");
for(i=0; i<7; i++){
write("<td color:#547026'><font color='#ffffff' size = 0><b>"+ WeekDay[i] + "</b></font></td>");
}
write("</tr>");
for (w = 1; w < 7; w++) {
write("<tr>");
for (d = 0; d < 7; d++) {
write("<td id=calCell "+styleTD+"cursor:hand;' onMouseOver='this.bgColor=gcToggle' onMouseOut='this.bgColor=gcBG' οnclick='fSetSelected(this)'>");
write("<font id=cellText Victor='Liming Weng'> </font>");
write("</td>")
}
write("</tr>");
}
}
}
function fUpdateCal(iYear, iMonth)
{
myMonth = fBuildCal(iYear, iMonth);
var i = 0;
for (w = 0; w < 6; w++)
for (d = 0; d < 7; d++)
with (cellText[(7*w)+d]) {
Victor = i++;
if (myMonth[w+1][d]<0) {
color = gcGray;
innerText = -myMonth[w+1][d];
}else{
color = ((d==0)||(d==6))?"red":"black";
innerText = myMonth[w+1][d];
}
}
}
function PrevYear(objYear,iMonth)
{
var privYear = 0;
privYear = parseInt(objYear.value) - 1;
if (privYear < 1900)
{
privYear = 2014;
}
objYear.value = String(privYear);
fUpdateCal(privYear, iMonth)
}
function UpYear(objYear,iMonth)
{
var privYear = 0;
privYear = parseInt(objYear.value) + 1;
if (privYear > 2014)
{
privYear = 1900;
}
objYear.value = String(privYear);
fUpdateCal(privYear, iMonth)
}
function fSetYearMon(iYear, iMon)
{
//tbSelMonth=document.getElementById("tbSelMonth");
tbSelMonth.options[iMon-1].selected = true;
//tbSelYear=document.getElementById("tbSelYear");
for (i = 0; i < tbSelYear.length; i++)
if (tbSelYear.options[i].value == iYear)
tbSelYear.options[i].selected = true;
fUpdateCal(iYear, iMon);
}
function fPrevMonth()
{
var iMon = tbSelMonth.value;
var iYear = tbSelYear.value;
if (--iMon<1) {
iMon = 12;
iYear--;
}
fSetYearMon(iYear, iMon);
}
function fNextMonth()
{
var iMon = tbSelMonth.value;
var iYear = tbSelYear.value;
if (++iMon>12) {
iMon = 1;
iYear++;
}
fSetYearMon(iYear, iMon);
}
function fToggleTags()
{
with (document.all.tags("SELECT")){
for (i=0; i<length; i++)
if ((item(i).Victor!="Won")&&fTagInBound(item(i))){
item(i).style.visibility = "hidden";
goSelectTag[goSelectTag.length] = item(i);
}
}
}
function fTagInBound(aTag)
{
var VicPopCal=document.getElementById("VicPopCal");
with (VicPopCal.style){
var l = parseInt(left);
var t = parseInt(top);
var r = l+parseInt(width);
var b = t+parseInt(height);
var ptLT = fGetXY(aTag);
return !((ptLT.x>r)||(ptLT.x+aTag.offsetWidth<l)||(ptLT.y>b)||(ptLT.y+aTag.offsetHeight<t));
}
}
function fGetXY(aTag)
{
var oTmp = aTag;
var pt = new Point(0,0);
do {
pt.x += oTmp.offsetLeft;
pt.y += oTmp.offsetTop;
oTmp = oTmp.offsetParent;
} while(oTmp.tagName!="BODY");
return pt;
}
// Main: popCtrl is the widget beyond which you want this calendar to appear;
// dateCtrl is the widget into which you want to put the selected date.
// i.e.: <input type="text" name="dc" style="text-align:center" readonly><INPUT type="button" value="V" οnclick="fPopCalendar(dc,dc);return false">
function fPopCalendar(popCtrl, dateCtrl,strDate)
{
if (popCtrl == previousObject)
{
var VicPopCal=document.getElementById("VicPopCal");
if (VicPopCal.style.visibility == "visible")
{
HiddenDiv();
return true;
}
}
previousObject = popCtrl;
gdCtrl = dateCtrl;
fInitialDate(strDate);
fSetYearMon(giYear, giMonth);
var point = fGetXY(popCtrl);
var VicPopCal=document.getElementById("VicPopCal");
with (VicPopCal.style)
{
left = point.x;
top = point.y+popCtrl.offsetHeight-60;
width = VicPopCal.offsetWidth;
width = 210; // Added by Danian Zhang/SUI
height = VicPopCal.offsetHeight;
fToggleTags(point);
visibility = 'visible';
}
}
// Added by Danian Zhang/SUI
function fInitialDate(strDate)
{
if( strDate == null || strDate.length != 10 )
return false;
var sYear = strDate.substring(0,4);
var sMonth = strDate.substring(5,7);
var sDay = strDate.substring(8,10);
if( sMonth.charAt(0) == '0' ) { sMonth = sMonth.substring(1,2); }
if( sDay.charAt(0) == '0' ) { sDay = sDay.substring(1,2); }
var nYear = parseInt(sYear );
var nMonth = parseInt(sMonth);
var nDay = parseInt(sDay );
if ( isNaN(nYear ) ) return false;
if ( isNaN(nMonth) ) return false;
if ( isNaN(nDay ) ) return false;
var arrMon = new Array(12);
arrMon[ 0] = 31; arrMon[ 1] = nYear % 4 == 0 ? 29:28;
arrMon[ 2] = 31; arrMon[ 3] = 30;
arrMon[ 4] = 31; arrMon[ 5] = 30;
arrMon[ 6] = 31; arrMon[ 7] = 31;
arrMon[ 8] = 30; arrMon[ 9] = 31;
arrMon[10] = 30; arrMon[11] = 31;
if ( nYear < 1900 || nYear > 2100 ) return false;
if ( nMonth < 1 || nMonth > 12 ) return false;
if ( nDay < 1 || nDay > arrMon[nMonth - 1] ) return false;
giYear = nYear;
giMonth = nMonth;
giDay = nDay;
return true;
}
//var gMonths = new Array("一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月");
var gMonths = new Array("01","02","03","04","05","06","07","08","09","10","11","12");
with (document) {
write("<Div id='VicPopCal' style='OVERFLOW:hidden;POSITION:absolute;VISIBILITY:hidden;border:0px ridge;z-index:1000;'>");
write("<table class='Table_G' border='0'cellpadding='0' cellspacing='1' bgcolor='#547026'>");
write("<TR><td valign='middle' align='center'>");
//前一年
write("<input type='button' name='PrevYear' value='<' class='Button' style='height:20;width:20;FONT:bold' onClick='PrevYear(tbSelYear, tbSelMonth.value)'>");
write("<SELECT name='tbSelYear' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won'>");
for(i=1900;i<2015;i++)
write("<OPTION value='"+i+"'>"+i+"</OPTION>");
//write("<OPTION value='"+i+"'>"+i+" 年</OPTION>");
write("</SELECT>");
//後一年
write("<input type='button' name='NextYear' value='>' class='Button' style='height:20;width:20;FONT:bold' onClick='UpYear(tbSelYear, tbSelMonth.value)'>");
//上月
write(" <input type='button' name='PrevMonth' value='<' class='Button' style='height:20;width:20;FONT:bold' onClick='fPrevMonth()'>");
write("<select name='tbSelMonth' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won'>");
for (i=0; i<12; i++)
write("<option value='"+(i+1)+"'>"+gMonths[i]+"</option>");
write("</SELECT>");
//下月
write("<input type='button' name='NextMonth' value='>' class='button' style='height:20;width:20;FONT:bold' οnclick='fNextMonth()'>");
write("</td>");
write("</TR><TR>");
write("<td align='center'>");
write("<DIV style='background-color:#ffffff'><table width='100%' bgcolor='#547026' border='0'cellspacing=1 cellpadding=0>");
fDrawCal(giYear, giMonth, 20, '12');
write("</table></DIV>");
write("</td>");
write("</TR><TR><TD align='center'>");
write("<TABLE width='100%' class='Table_N'><TR><TD align='center'>");
//write("<B style='cursor:hand' οnclick='fSetDate(0,0,0)' onMouseOver='this.style.color=gcToggle' onMouseOut='this.style.color=0'>清空</B>");
write("<B style='cursor:hand' οnclick='fSetDate(0,0,0)' onMouseOver='this.style.color=gcToggle' onMouseOut='this.style.color=0'>Empty</B>");
write("</td><td algin='center'>");
//write("<font color='#ff0000'><B style='cursor:hand' οnclick='fSetDate(igiYear,igiMonth,igiDay)' onMouseOver='this.style.color=gcToggle' onMouseOut='this.style.color=0'>今天: "+giYear+"-"+giMonth+"-"+giDay+"</B></font>");
write("<font color='#ff0000'><B style='cursor:hand' οnclick='fSetDate(igiYear,igiMonth,igiDay)' onMouseOver='this.style.color=gcToggle' onMouseOut='this.style.color=0'>"+giYear+"-"+giMonth+"-"+giDay+"</B></font>");
write("</td><td align='center'>")
//write("<B style='cursor:hand' οnclick='HiddenDiv()' onMouseOver='this.style.color=gcToggle' onMouseOut='this.style.color=0'>取消</B>");
write("<B style='cursor:hand' οnclick='HiddenDiv()' onMouseOver='this.style.color=gcToggle' onMouseOut='this.style.color=0'>Cancel</B>");
write("</td></tr></table>");
write("</TD></TR>");
write("</TABLE></Div>");
}
function transDate(str)
{
var newStr = "";
for(var i=0;i<str.length;i++)
{
if(str.charAt(i) != '/')
{
newStr += str.charAt(i)
}
}
return newStr;
}
使用:οnclick="javascript:fPopCalendar(BookDate1,BookDate1);return false;"