﻿/*****************************************************************************
                                 個人偏好設定
*****************************************************************************/



/*****************************************************************************
                                 日期資料
*****************************************************************************/
 

var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var nStr1 = new Array('日','一','二','三','四','五','六');
var monthName = new Array("一","二","三","四","五","六","七","八","九","十","十一","十二");

//活動 *表示放假日
var sFtv = new Array(
"1003 中秋節",
"1010 國慶日",
"1024 運動會",
"1110 981室長大會(清劭館七樓會議廳)",
"0101 Happy New Year"

);

///////////////////////////////////////////////////////////////////////////////

function initialize() {

					var gNum,i,j;
			        var t='';
			        t ='<table>';
					for(i=0;i<6;i++)
					{
					   
					   t +='<tr align=center>';
					   for(j=0;j<7;j++)
					   {
						gNum = i*7+j;
			                 
						t +='<td id="GD' + gNum +'" onMouseOver="mOvr(' + gNum +')" onMouseOut="mOut()">';
						t +='	<font id="SD' + gNum +'" style="font-size:8pt;" face="Arial Black"';
			                 
							if(j == 0 || j == 6)
							   t+=' color=red';
							else
							   t+='color=000000';
			                 
						t +='   TITLE="">';
						t +='</font></td>';
			              
					   }			              
					   t +='</tr>';
					   
					}
					t +='</table>';
			        document.all["asd"].innerHTML = t;
			        
			        
			        dStyle = detail.style;
			        drawCld(tY,tM);
			        
}

///////////////////////////////////////////////////////////////////////////////

var cld;

function drawCld(SY,SM) {
   var i,sD,s,size;
   cld = new calendar(SY,SM);

   YMBG.innerHTML = SY ;
   GZ.innerHTML = monthName[tM] + '月';
 
   for(i=0;i<42;i++) {

      sObj=eval('SD'+ i);
    
      sObj.className = '';

      sD = i - cld.firstWeek;

      if(sD>-1 && sD<cld.length) { //日期內
         sObj.innerHTML = sD+1;
         if(cld[sD].isToday) sObj.className = 'todayColor'; //今日顏色

         sObj.style.color = cld[sD].color; //國定假日顏色

    }
  }
}

//////////////////////////////////////////////////////////////////////////////

var width = "130";
var offsetx = 2;
var offsety = 8;

var x = 0;
var y = 0;
var snow = 0;

var dStyle;
document.onmousemove = mEvn;

//顯示詳細日期資料
function mOvr(v) {
   var s,festival,spcday;
   var sObj=eval('SD'+ v);
   var d=sObj.innerHTML-1;

    //sYear,sMonth,sDay,week,

   if(sObj.innerHTML!='') {
      sObj.style.cursor = 's-resize';

      if(cld[d].solarFestival == '')
         festival = '';
      else
         festival = '<table class="detail_festival_style">'+
                    '   <tr>'+
                    '      <TD class="detail_festival_font_style">'+
                              cld[d].solarFestival +
                    '      </TD>'+
                    '   </tr>'+
                    '</table>';

         s= '<table class="detail_FD_style">'+
            '   <tr>'+
            '      <TD>' +
            '         <table class="detail_date_style">'+
            '            <tr>'+
            '               <TD class="detail_date_font_style">'+
                               cld[d].sYear+' 年 '+cld[d].sMonth+' 月 '+cld[d].sDay+' 日<br>星期'+cld[d].week +
            '               </TD>'+
            '            </tr>'+
            '         </table>'+
                      festival +
            '      </TD>'+
            '   </tr>'+
           '</table>';

   document.all["detail"].innerHTML = s;

   if (snow == 0) {
      dStyle.left = x+offsetx-(width/2);
      dStyle.top = y+offsety;
      dStyle.visibility = "visible";
      snow = 1;
    }
 }
}

//取得位置
function mEvn() {
   x=event.x;
   y=event.y;
   if (snow){
      dStyle.left = x+offsetx-(width/2);
      dStyle.top = y+offsety;
   }
}

//清除詳細日期資料
function mOut() {
   snow = 0;
   dStyle.visibility = "hidden";
}

/*****************************************************************************
                                    日期計算
*****************************************************************************/

var Today = new Date();
var tY = Today.getFullYear();
var tM = Today.getMonth();
var tD = Today.getDate();

//==============================傳回國曆 y年某m+1月的天數
function solarDays(y,m) {
   if(m==1)
      return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28);
   else
      return(solarMonth[m]);
}

//============================== 月曆屬性
function calElement(sYear,sMonth,sDay,week) {

   this.isToday    = false;
   
   //國曆
   this.sYear      = sYear;   //西元年4位數字
   this.sMonth     = sMonth;  //西元月數字
   this.sDay       = sDay;    //西元日數字
   this.week       = week;    //星期, 1個中文
   
   this.solarFestival = ''; //國曆節日
   
}

//============================== 傳回月曆物件 (y年,m+1月)
/*
功能說明: 傳回整個月的日期資料物件

使用方式: OBJ = new calendar(年,零起算月);

OBJ.length      傳回當月最大日
OBJ.firstWeek   傳回當月一日星期

由 OBJ[日期].屬性名稱 即可取得各項值

OBJ[日期].isToday  傳回是否為今日 true 或 false

其他 OBJ[日期] 屬性參見 calElement() 中的註解
*/
function calendar(y,m) {

   var sDObj;
   
   sDObj = new Date(y,m,1,0,0,0,0);    //當月一日日期

   this.length    = solarDays(y,m);    //國曆當月天數
   this.firstWeek = sDObj.getDay();    //國曆當月1日星期幾


   for(var i=0;i<this.length;i++) {
      //sYear,sMonth,sDay,week,
      this[i] = new calElement(y, m+1, i+1, nStr1[(i+this.firstWeek)%7]);
   }
 

   //活動
   for(i in sFtv)
      if(sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/))
         if(Number(RegExp.$1)==(m+1)) {
            if(Number(RegExp.$2)<=this.length){
               this[Number(RegExp.$2)-1].solarFestival += RegExp.$4 + ' ';
               if(RegExp.$3=='*') this[Number(RegExp.$2)-1].color = 'yellow';
         }
      }

   //今日
   if(y==tY && m==tM) this[tD-1].isToday = true;
}

