//CSSのクラス名を指定してください
var classNames = new Array('holyday','xday','birthday');

//定休日などはここで設定します。
//holyday[ここに日にちを半角で] = X; Xにはクラスの配列番号を。
var holyday = new Object();
//下記の場合だと2006/9/18はclassNamesで指定されている0番目のクラスにするという意味
holyday["2008/1/1"] = 0;
holyday["2008/1/2"] = 0;
holyday["2008/1/3"] = 0;
holyday["2008/1/4"] = 0;
holyday["2008/1/14"] = 0;
holyday["2008/2/11"] = 0;
holyday["2008/3/20"] = 0;
holyday["2008/4/29"] = 0;
holyday["2008/5/5"] = 0;
holyday["2008/7/21"] = 0;
holyday["2008/8/13"] = 0;
holyday["2008/8/14"] = 0;
holyday["2008/8/15"] = 0;
holyday["2008/8/16"] = 0;
holyday["2008/8/17"] = 0;
holyday["2008/9/15"] = 0;
holyday["2008/9/23"] = 0;
holyday["2008/10/13"] = 0;
holyday["2008/11/3"] = 0;
holyday["2008/11/24"] = 0;
holyday["2008/12/23"] = 0;
holyday["2008/12/29"] = 0;
holyday["2008/12/30"] = 0;
holyday["2008/12/31"] = 0;
holyday["2009/1/1"] = 0;
holyday["2009/1/2"] = 0;
holyday["2009/1/3"] = 0;
holyday["2009/1/12"] = 0;
holyday["2009/2/11"] = 0;
holyday["2009/3/20"] = 0;
holyday["2009/4/29"] = 0;
holyday["2009/5/4"] = 0;
holyday["2009/5/5"] = 0;
holyday["2009/5/6"] = 0;
holyday["2009/8/12"] = 0;
holyday["2009/8/13"] = 0;
holyday["2009/8/14"] = 0;
holyday["2009/9/21"] = 0;
holyday["2009/9/22"] = 0;
holyday["2009/9/23"] = 0;
holyday["2009/10/12"] = 0;
holyday["2009/11/3"] = 0;
holyday["2009/11/23"] = 0;
holyday["2009/12/23"] = 0;
holyday["2009/12/29"] = 0;
holyday["2009/12/30"] = 0;
holyday["2009/12/31"] = 0;
holyday["2010/1/1"] = 0;
holyday["2010/1/2"] = 0;
holyday["2010/1/3"] = 0;
holyday["2010/1/4"] = 0;
holyday["2010/1/11"] = 0;
holyday["2010/1/4"] = 0;
holyday["2010/2/11"] = 0;
holyday["2010/3/22"] = 0;
holyday["2010/4/29"] = 0;
holyday["2010/5/3"] = 0;
holyday["2010/5/4"] = 0;
holyday["2010/5/5"] = 0;
holyday["2010/7/19"] = 0;
holyday["2010/8/12"] = 0;
holyday["2010/8/13"] = 0;
holyday["2010/8/16"] = 0;
holyday["2010/9/20"] = 0;
holyday["2010/9/23"] = 0;
holyday["2010/10/11"] = 0;
holyday["2010/11/3"] = 0;
holyday["2010/11/23"] = 0;
holyday["2010/12/23"] = 0;
holyday["2010/12/30"] = 0;
holyday["2010/12/31"] = 0;
holyday["2011/1/3"] = 0;
holyday["2011/1/4"] = 0;
holyday["2011/1/10"] = 0;




var today = new Date();
var cal_year = today.getYear();
var cal_month = today.getMonth() + 1;
var cal_day = today.getDate();
if (cal_year < 1900) cal_year += 1900;
document.write("<div id='calendar'></div>");
var cal = document.getElementById("calendar");
var defaultBackgroundColors = new Object();
var to_year = cal_year;
var to_month = cal_month;
var to_day = cal_day;

function writeCal(year,month,day,nav){
  var calendars = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
  var weeks = new Array("日","月","火","水","木","金","土");
  var cal_flag = 0;
  var kaeri = new Array();
  kaeri = chkMonth(year,month);
  year = kaeri[0];
  month = kaeri[1];

  if(year % 100 == 0 || year % 4 != 0){
    if(year % 400 != 0){
      cal_flag = 0;
    }
    else{
      cal_flag = 1;
    }
  }
  else if(year % 4 == 0){
    cal_flag = 1;
  }
  else{
    cal_flag = 0;
  }
  calendars[2] += cal_flag;

  var cal_start_day = getWeek(year,month,1);
  var cal_tags = "<table border='0' cellspacing='0' cellpadding='0' class='calendar'>";
  cal_tags += "<tr><th colspan='7'>";
  if(nav){
     cal_tags += "<span onClick='nextCal();'>翌月&gt;&gt;</span>";
     cal_tags += "<span onClick='currentCal();'>&nbsp;今月&nbsp;</span>";
     cal_tags += "<span onClick='prevCal();'>&lt;&lt;前月</span>";
  }
  cal_tags += year + "年" + month + "月</th></tr>";

  cal_tags += "<tr class='headline'>";
  for(var i=0;i<weeks.length;i++){
    cal_tags += "<td>" + weeks[i] + "</td>";
  }
  cal_tags += "</tr><tr>";
  for(var i=0;i < cal_start_day;i++){
    cal_tags += "<td>&nbsp;</td>";
  }
  //main
  for(var cal_day_cnt = 1;cal_day_cnt <= calendars[month];cal_day_cnt++){
    var cal_day_match = year + "/" + month + "/" + cal_day_cnt;
    var dayClass = "";
    
    if(holyday[cal_day_match] != undefined){
      if((cal_day_cnt == day) && (month == to_month) && (year == to_year)){
        dayClass = ' class="'+classNames[holyday[cal_day_match]]+'t"';
      }else{
        dayClass = ' class="'+classNames[holyday[cal_day_match]]+'"';
      }
    }
    else if((cal_day_cnt == day) && (month == to_month) && (year == to_year)){
      if(cal_start_day == 0){
        dayClass = ' class="Todayh"';
      }else if(cal_start_day == 6){
        dayClass = ' class="Todayh"';
      }else{
        dayClass = ' class="Today"';
      }
    }
    else if(cal_start_day == 0){
      dayClass = ' class="Sun"';
    }
    else if(cal_start_day == 6){
      dayClass = ' class="Sat"';
    }

    cal_tags += "<td"+dayClass+">" + cal_day_cnt + "</td>";
    if(cal_start_day == 6){
      cal_tags += "</tr>";
      if(cal_day_cnt < calendars[month]){
        cal_tags += "<tr>";
      }
      cal_start_day = 0;
    }
    else{
      cal_start_day++;
    }
  }

  while(cal_start_day <= 6 && cal_start_day != 0){
    cal_tags += "<td>&nbsp;</td>";
    if(cal_start_day == 6){
      cal_tags += "</tr>";
    }
    cal_start_day++;
  }
  cal_tags += "</table>";

  return cal_tags;
}

function currentCal(){
  cal_year = to_year;
  cal_month = to_month;
  cal_day = to_day;
  write();
}
function prevCal(){
  cal_month -= 1;
  if(cal_month < 1){
    cal_month = 12;
    cal_year -= 1;
  }
  write();
}
function nextCal(){
  cal_month += 1;
  if(cal_month > 12){
    cal_month = 1;
    cal_year += 1;
  }
  write();
}
function getWeek(year,month,day){
  if (month == 1 || month == 2) {
    year--;
    month += 12;
  }
  var week = Math.floor(year + Math.floor(year/4) - Math.floor(year/100) + Math.floor(year/400) + Math.floor((13 * month + 8) / 5) + day) % 7;
  return week;
}

function chkMonth(year,month){
  if(month > 12){
    month = 1;
    year += 1;
  }else if(month < 1){
    month = 12;
    year -= 1;
  }
  return [year, month];
}


function write(){
   cal.innerHTML = writeCal(cal_year,cal_month,cal_day,1);
   cal.innerHTML += writeCal(cal_year,cal_month+1,cal_day,0);
}

write();
