改進了的日期控件


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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章