

function MakeArray(n) { this.length = n; }
function left(str, len) { return str.substring(0, len); }
function right(str, len) { return str.substring(str.length - len, str.length); }

function daysOfMonth(year, month) {
  var sw = "121010110101".charAt(month);
  if (sw == '1') return 31;
  if (sw == '0') return 30;
  if (year % 400 == 0) return 29;
  if (year % 100 == 0) return 28;
  if (year %   4 == 0) return 29;
  return 28;
}

function days_total(year, month) {
  var total, i;
  var tyear = year - 1;
  
  total = ((tyear*365)+(Math.floor(tyear/4))-(Math.floor(tyear/100))+(Math.floor(tyear/400)));
  for (i = 0; i < month; i++) {
    total += daysOfMonth(year, i);
  }
  return total;
}

function isSpecialday(year, month, date) {
  var tmonth = month + 1;
  var str="0101 0211 0320 0429 0503 0504 0505 0923 1103 1123 1223";
  var str2="0115 1010";
  var str3="0720 0915";
  if (str.indexOf(right("0" + tmonth , 2) + right("0" + date , 2)) >= 0) {
    return true;
  }
  if ((year < 2000) && (str2.indexOf(right("0" + tmonth , 2) + right("0" + date , 2)) >= 0)) {
	return true;
  }
  if ((year < 2003) && (str3.indexOf(right("0" + tmonth , 2) + right("0" + date , 2)) >= 0)) {
	return true;
  }
  return false;
}

function isHoliday(day)  { return day == 0 || day == 6; }
function isSunday(day)   { return day == 0; }
function isSaturday(day) { return day == 6; }
function isMonday(day)   { return day == 1; }

function getDay2(year, month) {
  var total1 = days_total(1752, 10 - 1);
  var total2 = days_total(year, month);
  return ((total2 - total1) % 7);
}

function make_anchor(year, month, date, diary_url, target) {
document.write("<A href=\""+diary_url+year+right("0"+(month+1), 2));
  if (date < 11) { document.write("_1"); }
  else if (date < 21) { document.write("_2"); }
  else { document.write("_3"); }
  document.write(".html#"+year+right("0"+(month+1), 2)+right("0"+date, 2)+"\">");
}

function calendar(year, month, diary_url, target) {
  var i;
  var date  = 1;
  var day = getDay2(year, month);
  var days  = daysOfMonth(year, month);
  var last_year = year - 1;
  var next_year = year + 1;
  var this_url = location.pathname;
  var mondays = 0;

  document.writeln("<DIV style='float: left; width: 160px; height:15px;'>");
  document.writeln("<DIV style='text-align: left; background: #0d60a4; letter-spacing: 0.15em; color:#ffffff; font-weight: bold; padding: 0.3em 0.4em;font-size: 10px;'>");
  if (month < 1) {
    document.write("<A href=\""+this_url+"?"+last_year+"12\"></A> ");
  }
  else {
    document.write("<A href=\""+this_url+"?"+year+right("0"+month, 2)+"\"></A> ");
  }
  document.write(year+"/"+(month+1)+"/"+"SCHEDULE");
  if (month > 10) {
    document.write(" <A href=\""+this_url+"?"+next_year+"01\"></A>");
  }
  else {
    document.write(" <A href=\""+this_url+"?"+year+right("0"+(month+2), 2)+"\"></A>");
  }
  document.writeln("</DIV>");
  document.writeln("<DIV align='center'><TABLE border='0' cellspacing='0' cellpadding='3'>");
  document.writeln("<TR><TH class='sun' width='15%'>sun</TH>");
  document.writeln("<TH width='14%'>mon</TH>");
  document.writeln("<TH width='14%'>tue</TH>");
  document.writeln("<TH width='14%'>wed</TH>");
  document.writeln("<TH width='14%'>thu</TH>");
  document.writeln("<TH width='14%'>fri</TH>");
  document.writeln("<TH class='sat' width='15%'>sat</TH></TR><TR>");

  for (i = 0; i < 7 * 6; i++) {
    if (i % 7 == day) {
      if (isSunday(day)) {
        document.write("<TD class='sun'>");
        make_anchor(year, month, date, diary_url, target);
        document.write("<span class='sun'>"+(date++)+"</span>");
      }
      else if (isSaturday(day)) {
        document.write("<TD class='sat'>");
        make_anchor(year, month, date, diary_url, target);
        if (isSpecialday(year, month, date)) {
          document.write("<span class='holiday'>"+(date++)+"</span>");
        }
        else {
          document.write("<span class='sat'>"+(date++)+"</span>");
        }
      }
      else if (isMonday(day)) {
        mondays++;
        document.write("<TD>");
        make_anchor(year, month, date, diary_url, target);
        if (isSpecialday(year, month, date) || isSpecialday(year, month, date - 1)) {
          document.write("<SPAN class='holiday'>"+(date++)+"</span>");
        }
        else if ((year >= 2000) && (mondays == 2) && ((month == 0) || (month == 9))) {
          document.write("<SPAN class='holiday'>"+(date++)+"</span>");
        }
        else if ((year >= 2003) && (mondays == 3) && ((month == 6) || (month == 8))) {
          document.write("<SPAN class='holiday'>"+(date++)+"</span>");
        }
        else {
          document.write(date++);
        }
      }
      else {
        document.write("<TD>");
        make_anchor(year, month, date, diary_url, target);
        if (isSpecialday(year, month, date)) {
          document.write("<SPAN class='holiday'>"+(date++)+"</SPAN>");
        }
        else {
          document.write(date++);
        }
      }
      document.write("</A></TD>");
      if (date > days) {
         document.writeln("</TR>");
         break;
      }
      day = (day + 1) % 7;
      if (day == 0) document.writeln("</TR><TR>");
    }
    else document.write("<TD></TD>");
  }
  document.write("</TABLE></DIV></DIV>");
}

function MakeCalendar(diary_url, target) {
  var d = new Date();
  var year_and_month;
  var year_disp = d.getYear();
  var month_disp = d.getMonth();
  var cal_bg = new MakeArray();
  if (year_disp < 100) { year_disp += 1900; }
  if (year_disp < 1900) { year_disp += 1900; }
  var query_string = location.search;
  if ((query_string) && (query_string.length == 7)) {
	  year_and_month = right(query_string, 6);
	  year_disp = eval(left(year_and_month, 4));
	  month_disp = eval(right(year_and_month, 2)) - 1;
  }
  if (((year_disp == 1752) && (month_disp < 9)) || (year_disp < 1752)) {
    document.writeln("<P>1752年9月以前は対応していません。</P>");
    document.writeln("<A href='" + location.pathname + "'>［今月に戻る］</A>");
  }
  else {
    calendar(year_disp, month_disp, diary_url, target);
  }
}

