function today(y, m) {
  len = document.all.day.length;
  for (i = 0; i < len; i++) {
    d = document.all.day[i].innerText;
    if (isRedDay(y, m, d)) {
      document.all.day[i].style.color = "#FF0000";
      s = document.all.day[i].innerHTML;
      s = s.replace("\">", "\" style=\"color:#FF0000\">");
      document.all.day[i].innerHTML = s;
    }
    date = new Date();
    if (date.getYear() == y
    && date.getMonth() == m - 1
    && date.getDate() == d) {
      document.all.day[i].style.fontWeight = "bold";
    }
  }
}

function isRedDay(y, m, d) {
  if (d.match(/\-/)) {
    return false;
  }
  m = m - 1;
  date = new Date(y, m, d);
  w = date.getDay();
  if (w == 0) {
    return true;
  }
  if (w == 1) {
    if (isHoliday(y, m, d - 1, 2)) {
      return true;
    }
  }
  if (isHoliday(y, m, d, w)) {
    return true;
  }
  if (isHoliday(y, m, d - 1, w - 1)) {
    if (isHoliday(y, m, d - (-1))) {
      return true;
    }
  }
  return false;
}

function isHoliday(y, m, d, w) {
  if (w == 1) {
    if (isHappyMon(m, d)) {
      return true;
    }
  }
  if (m == 0 && d == 1) {
    return true;
  }
  if (m == 1 && d == 11) {
    return true;
  }
  if (m == 2 && isSpring(y, d)) {
    return true;
  }
  if (m == 3 && d == 29) {
    return true;
  }
  if (m == 4) {
    if (d == 3 || d == 4 || d == 5) {
      return true;
    }
  }
  if (m == 8) {
    if (isAutumn(y, d)) {
      return true;
    }
  }
  if (m == 10) {
    if (d == 3 || d == 23) {
      return true;
    }
  }
  if (m == 11 && d == 23) {
    return true;
  }
  return false;
}

function isHappyMon(m, d) {
  if (m == 0 || m == 9) {
    if (d > 7 && d <= 14) {
      return true;
    }
  }
  if (m == 6 || m == 8) {
    if (d > 14 && d <= 21) {
      return true;
    }
  }
  return false;
}

function isSpring(y, d) {
  ms = 953535600000 + (y - 2000) * 525948;
  sdate = new Date(ms);
  if (d == sdate.getDate()) {
    return true;
  }
  return false;
}

function isAutumn(y, d) {
  ms = 969642000000 + (y - 2000) * 525948;
  adate = new Date(ms);
  if (d == adate.getDate()) {
    return true;
  }
  return false;
}
