//
// カレンダー自動生成スクリプト
// Calendar.js Ver. 2.3.0, 2008/04/07 最終更新
// by michi[at]ep.sci.hokudai.ac.jp
// http://www.ep.sci.hokudai.ac.jp/~michi/
//
function Calendar(Y, M){
  // ユーザー情報を格納するオブジェクトを作成
  var U = new Object();

  /* ユーザ設定項目 */
  // 空欄の文字
  U.Empty = "-";

  // 曜日の表示形式
   U.Week = new Array( "日", "月", "火", "水", "木", "金", "土" );
  //U.Week = new Array( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" );

  // 月の表示形式
  U.Month = new Array(12);
  
    U.Month[0]  = "1月";
    U.Month[1]  = "2月";
    U.Month[2]  = "3月";
    U.Month[3]  = "4月";
    U.Month[4]  = "5月";
    U.Month[5]  = "6月";
    U.Month[6]  = "7月";
    U.Month[7]  = "8月";
    U.Month[8]  = "9月";
    U.Month[9]  = "10月";
    U.Month[10] = "11月";
    U.Month[11] = "12月";
  /*
  U.Month[0]  = "January";
  U.Month[1]  = "February";
  U.Month[2]  = "March";
  U.Month[3]  = "April";
  U.Month[4]  = "May";
  U.Month[5]  = "June";
  U.Month[6]  = "July";
  U.Month[7]  = "August";
  U.Month[8]  = "September";
  U.Month[9]  = "October";
  U.Month[10] = "November";
  U.Month[11] = "December";
  */
  /* ユーザ設定項目終了 */

  /* ローカル関数をセット */
  // Math.floor() のエイリアス
  function M_F(num){ return Math.floor(num); }

  // 春分日・秋分日簡易算出関数
  function CalcEquinox(year, type){
    // 変数をセット
    var i = 0, j = year - 1980;

    switch(type){
      case 0: // 春分
      if(1851 <= year && year <= 1899){
	i = 19.8277;
      } else if(1900 <= year && year <= 1979){
	i = 20.8357;
      } else if(1980 <= year && year <= 2099){
	i = 20.8431;
      } else if(2100 <= year && year <= 2150){
	i = 21.8510;
      }
      break;

      case 1: // 秋分
      if(1851 <= year && year <= 1979){
	i = 22.2588;
      } else if(1980 <= year && year <= 2150){
	i = 23.2488;
      }
      break;
    }
    return M_F(i + 0.242194 * j - M_F(j / 4));
  }

  // 祝日判定関数
  function CheckHolyday(obj){
    var Y = obj.Y, D = obj.D, N = obj.N, W = obj.W;
    switch(obj.M){
    case 0:
      // 1月 1日：元旦
      if(D == 1){ return true; }


    }
    return false;
  }

  // 曜日用 css 設定関数
  function SetCSS(week){
    switch(week){
      case 0:  return "sun";
      default: return "nor";
    }
    return false;
  }

  // 現在の日時を取得
  var N = new Object();
  N.T = new Date();
  N.Y = N.T.getFullYear();
  N.M = N.T.getMonth();
  N.D = N.T.getDate();
  if(N.Y < 2000){ N.Y += 1900; }

  // 出力する月の情報を格納するオブジェクトをセット
  var T = new Object();
  if(Y == M_F(Y) && 1900 <= Y && Y <= 2100 &&
     M == M_F(M) && 1 <= M && M <= 12){
    T.T = new Date(Y, (M - 1));
    T.Y = Y;
  } else{
    T.T = N.T;
    T.Y = N.Y;
  }
  T.T.setDate(1);
  T.M = T.T.getMonth();
  T.D = 1;
  T.W = T.T.getDay();
  if(T.Y != N.Y || T.M != N.M){ N.D = ""; }
  T.N = 0;

  var holiday = false, result = "", css;
  var day_list = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  if(T.Y % 4 == 0 && T.Y % 100 != 0 || T.Y % 400 == 0){ day_list[1]++; }

  // テーブルのヘッダを作成
  result += '<TABLE border="0" cellpadding="0" cellSpacing="1" class="T_main"><TR><TD colspan="7" class="month">';
  result += T.Y + "年 "  + U.Month[T.M];
  result += '</TD></TR><TR>';

  // 曜日を作成
  for(var i = 0; i <= 6; i++){
    result += '<TD class="week ' + SetCSS(i) + '">' + U.Week[i] + '</TD>';
  }
  result += '</TR><TR>';

  // 日付を作成
  for(var i = 0; i < T.W; i++){
    result += '<TD class="emp">' + U.Empty + '</TD>';
  }
  for(T.D; T.D <= day_list[T.M]; T.D++){
    if(T.W == 1){
      T.N++;
    } else if(T.W > 6){
      result += '</TR><TR>';
      T.W = 0;
    }

    // 色の決定
    if(CheckHolyday(T)){
      css = "sun";
      if(T.W == 0){ holiday = true; }
    } else if(holiday){
      css     = "sun";
      holiday = false;
    } else{
      css = SetCSS(T.W);
    }
	
	//店舗ごとの特別休暇について START

	if(T.Y == 2011 && T.M == 11 && T.D == 31){ //2010年12月31日休み（月は -1)
		css = "sun";
	}
	if(T.Y == 2012 && T.M == 0 && T.D == 1){ //2011年1月1日休み（月は -1)
		css = "sun";
	}
	if(T.Y == 2012 && T.M == 0 && T.D == 2){ //2011年1月2日休み（月は -1)
		css = "sun";
	}
	if(T.Y == 2012 && T.M == 0 && T.D == 3){ //2010年1月3日休み（月は -1)
		css = "sun";
	}
	//店舗ごとの特別休暇について END
    result += '<td class="' + css;


    if(T.D == N.D){ result += '" id="Today'; }
    result += '">' + T.D + '</td>';

    if(holiday && T.W != 0 && T.Y <= 2006){
      holiday = false;
    }
    T.W++;
  }

  //
  // テーブルのフッタを作成
  //
  for(T.W; T.W <= 6; T.W++){
    result += '<td class="emp">' + U.Empty + '</td>';
  }

  // 結果を出力
  return result + '</tr></table>';
}

//
// DHTML 出力用関数
//
function SetCalendar(form){
  // 変数をセット
  var Y  = form.Y.value - 0;
  var M  = form.M.value - 0;
  var ID = "CL";

  // カレンダーを出力
  if(document.getElementById || window.opera){
    document.getElementById(ID).innerHTML = Calendar(Y, M);
  } else if(document.layers){
    document.layers[ID].document.open();
    document.layers[ID].document.write(Calendar(Y, M));
    document.layers[ID].document.close();
  } else if(document.all){
    document.all(ID).innerHTML = Calendar(Y, M);
  }
}


// HTML ソース (メイン関数)
/*
<SCRIPT type="text/javascript" src="js/calendar.js"></SCRIPT>

<SCRIPT type="text/JavaScript">
<!--
	document.write(Calendar()); 
//-->
</SCRIPT>

*/

// HTML ソース (DHTML 出力関数)
/*
<FORM action="#" method="post" name="setcalendar">
	<INPUT name="Y" size="6" maxlength="4" value="2007"> 年
	<INPUT name="M" size="4" maxlength="2" value="1"> 月を
<INPUT type="button" value="表 示" onClick="SetCalendar(this.form)">
</FORM>
*/



// CSS ソース
/*
<STYLE type="text/css">
<!--
table.T_main{
	width:160px;
	background-color: #DDDDDD;
}

table.T_main TD{
	font-size:12px;
	text-align: center;
	background-color: #FFFFFF;
	padding: 3px;
}
table.T_main td.month{
	color: #333333;
	background-color: #EEEEEE;
	text-align: center;
	font-size: 12px;
}

table.T_main td.week{
	color: #333333;
	background-color: #F2E9D8;
	text-align: center;
	font-size: 12px;
}
table.T_main td.sun{
	color: #FFFFFF;
	background-color: #FF3333;
}
table.T_main td.sat{
	color: #FFFFFF;
	background-color: #FF3333;
}
table.T_main td.nor{ color: #000000;}
table.T_main td.emp{ color: #AAAAAA;}
#Today{ background-color: #3399CC;}
-->
</STYLE>
*/
