/**
 * カレンダー生成スクリプト
 * 
 * @author	fujiwara@g-1.ne.jp
 * @modification	2008-09-09
 */

// 結果を出力せず値(string)で返すオプション
var retString = true;

// 休日の設定
var holiday = [
];

// 以下編集不可
function leap(year){
  return (year % 4) ? 0 : (year % 100) ? 1 : (year % 400) ? 0 : 1;
}

function make_cal_array(year){
  var months = [31, 28 + leap(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  var result = [];
  for (var m = 0; m < 12; m++){
    result[m] = [];
    var dofw1 = (new Date(year, m, 1, 0, 0, 0)).getDay();
    for (var d = 1; d <= months[m]; d++){
    result[m][d + dofw1 - 1] = d;
    }
  }
  return result;
}


function Calendar() {
  var date = new Date();
  this.month = date.getMonth() + 1;
  this.pMonth = (this.month >= 10) ? this.month : "0"+this.month;
  this.year = date.getFullYear();
  this.html = '';
  this.makeCalendar();
}

Calendar.prototype.makeCalendar = function() {
  var month = this.month;
  var year = this.year;
  var daynames = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];
  var daynames_j = ["日", "月", "火", "水", "木", "金", "土"];
  var monthnames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
  var cal = make_cal_array(year);
  var _html = '<div class="month"><a href="javascript:prevMonth();" class="prevButton">&laquo;</a>&nbsp;&nbsp;&nbsp;&nbsp;'+monthnames[month-1]+' '+year+'&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:nextMonth();" class="nextButton">&raquo;</a></div>';
  // 曜日
  _html += '<table class="days">'+"\n"+'<tbody>'+"\n";
  for (var w = 0; w < daynames.length; w++) _html += '<td class="'+daynames[w % 7]+'">'+daynames_j[w]+'</td>';
  _html += '</tbody>'+"\n"+'</table>'+"\n";
  // 日付
  _html += '<table summary="カレンダー">'+"\n"+'<tbody>'+"\n";
  for (var d = 0; d < 35; d++){
    // 日付へのクラス名設定
    var className = ' class="'+daynames[d % 7];
    for (h= 0; h < holiday.length; h++){
      var hday = holiday[h].split('/');
      if (year == hday[0] && month == hday[1] && cal[month-1][d] == hday[2]){
        className += " holiday";
        break;
      }
    }
    className += '"';
    if (d % 7 == 0) _html += '<tr>';
    _html += '<td'+className+'>'+(cal[month-1][d] ? cal[month-1][d] : '&nbsp;')+'</td>';
    if (d % 7 == 6) _html += '</tr>'+"\n";
  }
  _html += '</tbody>'+"\n"+'</table>'+"\n";

  if (!retString) document.write(_html);
  this.html = _html;
};

Calendar.prototype.next = function() {
  this.month++;
  if (this.month > 12) { this.year++; this.month = 1; }
  this.pMonth = (this.month >= 10) ? this.month : "0"+this.month;
  this.makeCalendar();
};

Calendar.prototype.prev = function() {
  this.month--;
  if (this.month < 1) { this.year--; this.month = 12; }
  this.pMonth = (this.month >= 10) ? this.month : "0"+this.month;
  this.makeCalendar();
};


