// 休日表示カレンダー色設定スクリプト

// 通常型 FC2用改
function setWeekendAndHoliday(y,m) {
  var elements = document.getElementsByTagName("table");
  // 配列順序0のみを決め打ちで処理するのを止めて、summary内容をチェックして処理する方法に変更。
  for (j = 0; j < elements.length; j++) {
    var element = elements[j].getAttribute("summary");
    var year = element.split("/")[0];
    var month = element.split("/")[1];
    if (!(year == y && month == m)){
      continue;
    }
    var spans = elements[j].getElementsByTagName("td");
    var day;
    for (i = 0; i < spans.length; i++) {
      if (spans[i].getAttribute("class") == "day" ||
        spans[i].getAttribute("className") == "day") {
        if(spans[i].innerHTML.indexOf("href") != -1){
          day = spans[i].getElementsByTagName("a")[0].innerHTML;
        } else {
          day = spans[i].innerHTML;
        }
        var dc = new dayChecker();                      // dayChecker()を実行
        if (dc.isHoliday(year, month, day)) {
          if (dc.isToday(year, month, day)) {
            spans[i].setAttribute('class', 'tholiday');
            spans[i].setAttribute('className', 'tholiday');
          } else {
            spans[i].setAttribute('class', 'holiday');
            spans[i].setAttribute('className', 'holiday');
          }
        } else if(dc.isSaturday(year, month, day)) {
          if (dc.isToday(year, month, day)) {
            spans[i].setAttribute('class', 'tsaturday');
            spans[i].setAttribute('className', 'tsaturday');
          } else {
            spans[i].setAttribute('class', 'saturday');
            spans[i].setAttribute('className', 'saturday');
          }
        }
        if(dc.isToday(year, month, day)) {
          spans[i].setAttribute('class', 'today');
          spans[i].setAttribute('className', 'today');
        }
      }
    }
  }
}

// 横並び用 MT用改
function setLCWeekendAndHoliday(year,month) {
  var element = document.getElementById('line_calendar');
  var spans = element.getElementsByTagName('span');
  var day;
  for (i = 0; i < spans.length; i++) {
    if ((spans[i].getAttribute('class') == 'day' || spans[i].getAttribute('className') == 'day')) {
      if(spans[i].innerHTML.indexOf("href") != -1){
        day = spans[i].getElementsByTagName("a")[0].innerHTML;
      } else {
        day = spans[i].innerHTML;
      }
      var dc = new dayChecker();                      // dayChecker()を実行
      if (dc.isHoliday(year, month, day)) {
        if (dc.isToday(year, month, day)) {
          spans[i].setAttribute('class', 'tholiday');
          spans[i].setAttribute('className', 'tholiday');
        } else {
          spans[i].setAttribute('class', 'holiday');
          spans[i].setAttribute('className', 'holiday');
        }
      } else if(dc.isSaturday(year, month, day)) {
        if (dc.isToday(year, month, day)) {
          spans[i].setAttribute('class', 'tsaturday');
          spans[i].setAttribute('className', 'tsaturday');
        } else {
          spans[i].setAttribute('class', 'saturday');
          spans[i].setAttribute('className', 'saturday');
        }
      } else if (dc.isToday(year, month, day)) {
        spans[i].setAttribute('class', 'today');
        spans[i].setAttribute('className', 'today');
      }
    }
  }
}

// Copyright (c) 2004-2006 koikikukan All Rights Reserved.
// http://www.koikikukan.com/
// License is granted if and only if this entire
// copyright notice is included. By Yujiro ARAKI.

// Ver1.00 2006.03.15 initial version.
// Ver1.01 2006.04.11 fix bug.
// Ver1.02 2006.04.15 fix bug.
// Ver1.03 2006.04.16 fix bug.
// Ver1.04 2006.05.09 Object oriented programming.
// Ver1.05 2006.08.03 fix bug.

function dayChecker() {
    data = new Date();
    this._currentYear = data.getYear();
    this._currentYear = (this._currentYear < 2000) ? this._currentYear + 1900 : this._currentYear;
    this._currentMonth = data.getMonth() + 1;
    this._currentDay = data.getDate();
}

dayChecker.prototype.isToday = function(year, month, day) {
    if (year == this._currentYear &&
        parseInt(month,10) == this._currentMonth &&
        day == this._currentDay) {
        return true;
    }
    return false;
};

dayChecker.prototype.isSaturday = function(year, month, day) {
    var week = new Date(year, month - 1, day).getDay();
    if (week == 6) {
        return true;
    }
    return false;
};

dayChecker.prototype.isHoliday = function(year, month, day) {
    var week = new Date(year, month - 1, day).getDay();
    if (week == 0) {
        return true;
    }
    switch(parseInt(month,10)) {
    case 1:
        if (day == 1) {
            return true;
        }
        if (day == 2 && this.isSunday(year, month, 1)) {
            return true;
        }
        if (day == (this.getFirstMonday(year, month) + 7)) {
            return true;
        }
        break;
    case 2:
        if (day == 11) {
            return true;
        }
        if (day == 12 && this.isSunday(year, month, 11)) {
            return true;
        }
        break;
    case 3:
        if(year > 1979 && year < 2100) {
            if (day == parseInt(20.8431 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4))) {
                return true;
            }
        }
        break;
    case 4:
        if (day == 29) {
            return true;
        }
        if (day == 30 && this.isSunday(year, month, 29)) {
            return true;
        }
        break;
    case 5:
        if (day == 3 || day == 4 || day == 5) {
            return true;
        }
        if (day == 6 && (this.isSunday(year, month, 3) ||
                         this.isSunday(year, month, 4) ||
                         this.isSunday(year, month, 5))) {
            return true;
        }
        break;
    case 7:
        if (day == (this.getFirstMonday(year, month) + 14)) {
            return true;
        }
        break;
    case 9:
        if (day == (this.getFirstMonday(year, month) + 14)) {
            return true;
        }
        if(year > 1979 && year < 2100) {
            if (day == parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4))) {
                return true;
            }
        }
        break;
    case 10:
        if (day == (this.getFirstMonday(year, month) + 7)) {
            return true;
        }
        break;
    case 11:
        if (day == 3 || day == 23) {
            return true;
        }
        if (day == 4 && this.isSunday(year, month, 3)) {
            return true;
        }
        if (day == 24 && this.isSunday(year, month, 23)) {
            return true;
        }
        break;
    case 12:
        if (day == 23) {
            return true;
        }
        if (day == 24 && this.isSunday(year, month, 23)) {
            return true;
        }
        break;
    }
    return false;
};

dayChecker.prototype.isSunday = function(year, month, day) {
    var week = new Date(year, month - 1, day).getDay();
    if (week == 0) {
        return true;
    }
    return false;
};

dayChecker.prototype.getFirstMonday = function(year, month) {
    var monday;
    for(monday = 1; monday < 8; monday++) {
        if(new Date(year, month - 1, monday).getDay() == 1) {
            break;
        }
    }
    return monday;
};

