window.onload=function(){
  getCalendar('','');
}

var ary27syuku = new Array(
 "亢" // 0
,"氐" // 1
,"房" // 2
,"心" // 3
,"尾" // 4
,"箕" // 5
,"斗" // 6
,"女" // 7
,"虚" // 8
,"危" // 9
,"室" // 10
,"壁" // 11
,"奎" // 12
,"婁" // 13
,"胃" // 14
,"昴" // 15
,"畢" // 16
,"觜" // 17
,"参" // 18
,"井" // 19
,"鬼" // 20
,"柳" // 21
,"星" // 22
,"張" // 23
,"翼" // 24
,"軫" // 25
,"角" // 26
)

var ary12shi = new Array(
 "子"
,"丑"
,"寅"
,"卯"
,"辰"
,"巳"
,"午"
,"未"
,"申"
,"酉"
,"戌"
,"亥"
)

/*
 * 今月のカレンダーを取得します。
 */
function getCalendar(pYear, pMonth){
  var zOut = "";
  var wkMonth;

  if(pYear.length > 0 && pMonth.length > 0){
    wkMonth   = new Date(pYear, pMonth, 1);
  }else{
    wkMonth   = new Date();
  }

  var thisYear  = wkMonth.getFullYear();
  var thisMon   = eval(wkMonth.getMonth());
  var thisMonth = new Date(thisYear, thisMon);

  var theVTime = new Date(thisMonth);
  var prevMonth ="";
  var nextMonth ="";
  if(thisMonth.getMonth() > 0){
    prevMonth = new Date(thisMonth.getFullYear(), thisMonth.getMonth()-1,1);

  }else{
    prevMonth = new Date(thisMonth.getFullYear()-1, 11,1);
  }
  if(thisMonth.getMonth()+1 < 13){
    nextMonth = new Date(thisMonth.getFullYear(), thisMonth.getMonth()+1,1);
  }else{
    nextMonth = new Date(thisMonth.getFullYear()+1, 1,1);
  }
  var theYY = thisMonth.getFullYear();
  var theMM = thisMonth.getMonth() + 1;
  var theDofW = thisMonth.getDay();

  var viewMonth="";
  switch(thisMon+1){
    case 1:  viewMonth="1月"; break;
    case 2:  viewMonth="2月"; break;
    case 3:  viewMonth="3月"; break;
    case 4:  viewMonth="4月"; break;
    case 5:  viewMonth="5月"; break;
    case 6:  viewMonth="6月"; break;
    case 7:  viewMonth="7月"; break;
    case 8:  viewMonth="8月"; break;
    case 9:  viewMonth="9月"; break;
    case 10: viewMonth="10月"; break;
    case 11: viewMonth="11月"; break;
    case 12: viewMonth="12月"; break;
  }

  zOut += '<table id="calender_table" class="calendar" border="0" cellpadding="0" cellspacing="1">\n';
  zOut += '<tr><th colspan="7" class="calendar_month">';
  zOut += '<a href="#" onClick="getCalendar(\'' + prevMonth.getFullYear() + '\', \'' + prevMonth.getMonth() + '\');return false">&lt;&lt;</a>　 ';
  zOut += theYY + ' 年 ' + viewMonth
  zOut += '　 <a href="#" onClick="getCalendar(\'' + nextMonth.getFullYear() + '\', \'' + nextMonth.getMonth() + '\');return false">&gt;&gt;</a></th></tr>\n';
  zOut += '<tr>';
  zOut += '<th class="style2">日</th>';
  zOut += '<th>月</th>';
  zOut += '<th>火</th>';
  zOut += '<th>水</th>';
  zOut += '<th>木</th>';
  zOut += '<th>金</th>';
  zOut += '<th class="style3">土</th>';
  zOut += '</tr>\n';

  zOut += '<tr>';
  for (i=1; i<theDofW+1; i++) {
     zOut += '<td class="calendar_open">&nbsp;</td>';
  }

  var cnt = 0;
  var start27syuku = 0;
  var flg=false;
  theVTime = new Date(prevMonth);
  for (i=1; theVTime<thisMonth; i++) {
    var tm = new Date(theYY, theMM-2, i, 0, 0);
    var jd = tm.getJD();
    var tm1 = Math.floor(tm.getJD());
    var d = new kyureki(jd);
    if(d.day==1){
      thisMonthF=true;
      start27syuku = start28Syuku(d.month);
      flg = true;
    }
    theVTime.setDate(i+1);
    if(flg==true){
      cnt++;
    }
  }

  theVTime = new Date(thisMonth);
  theVTime.setDate(1);

  for (i=1; theVTime<nextMonth; i++) {

    varStyle = "calendar_open";
    // ユリウス日を計算
    
    var tm = new Date(theYY, theMM-1, i, 0, 0);
    var jd = tm.getJD();
    var tm1 = Math.floor(tm.getJD());
    var d = new kyureki(jd);

    if(theVTime.getMonth()+1 != theMM){
      theVTime.setDate(i+1);
      continue;
    }

    var rokuyo = d.rokuyo;

    if(d.day==1){
      start27syuku = start28Syuku(d.month);
      cnt=0;
    }
    var ind = cnt + start27syuku;
    var syuku  = ary27syuku[ind%27];
    var ut = parseInt(tm/86400/1000);
    var shi  = ary12shi[(ut+6)%12];
    cnt++;
    //var syuku  = TransDateTo28Syuku(format(jd + tz + .5, 4));

    str = i + "<br>"
        + "<span class='you'>" + rokuyo+"</span><br>"
        + "<span class='syuku'>" + syuku +"宿</span><br>"
        + "<span class='shi'>" + shi +"</span>";

    if (theVTime.getDay()==0){
        zOut += '<td class="' + varStyle + '" onClick="explanation(\''+rokuyo+'\', \''+syuku+'\', \''+shi+'\');">' + str + '</td>';
    }else if (theVTime.getDay()<6){
        zOut += '<td class="' + varStyle + '" onClick="explanation(\''+rokuyo+'\', \''+syuku+'\', \''+shi+'\');">' + str + '</td>';
    }else if(theVTime.setDate(i+1)<nextMonth) {
        zOut += '<td class="' + varStyle + '" onClick="explanation(\''+rokuyo+'\', \''+syuku+'\', \''+shi+'\');">' + str + '</td></tr>\n<tr>';
    } else {                       
        zOut += '<td class="' + varStyle + '" onClick="explanation(\''+rokuyo+'\', \''+syuku+'\', \''+shi+'\');">' + str + '</td>';
    }

    theVTime.setDate(i+1);
  }

  if(nextMonth.getDay()>0){
    for(j=theVTime.getDay();j<=6;j++) { zOut += '<td class="calendar_open">&nbsp;</td>'; }
  }
  zOut += '</tr>\n</table>\n';

  document.getElementById("calendar_box").innerHTML = zOut;
}

function format(num, keta) {
	var d = Math.pow(10, keta);
	return Math.floor(num * d + .5) / d;
}

// 27宿のスターツ
function start28Syuku(month){
  /*
    中国旧暦9月1日	氐
    中国旧暦10月1日	心
    中国旧暦11月1日	斗
    中国旧暦12月1日	虚
    中国旧暦正月1日	室
    中国旧暦2月1日	奎
    中国旧暦3月1日	胃
    中国旧暦4月1日	畢
    中国旧暦5月1日	参
    中国旧暦6月1日	鬼
    中国旧暦7月1日	張
    中国旧暦8月1日	角
  */
  switch(month){
    case 9:  return 1;
    case 10: return 3;
    case 11: return 6;
    case 12: return 8;
    case 1:  return 10;
    case 2:  return 12;
    case 3:  return 14;
    case 4:  return 16;
    case 5:  return 18;
    case 6:  return 20;
    case 7:  return 23;
    case 8:  return 26;
  }
}

// 28宿に変換
function TransDateTo28Syuku(jd){
  
  // 宿曜  ＝  （ユリウス日 + 11）MOD 27
  syuku = Math.ceil((jd+11)%27);
  var ret="";

  switch(syuku){
    case  1: ret = "亢"; break;
    case  2: ret = "氐"; break;
    case  3: ret = "房"; break;
    case  4: ret = "心"; break;
    case  5: ret = "尾"; break;
    case  6: ret = "箕"; break;
    case  7: ret = "斗"; break;
    case  8: ret = "女"; break;
    case  9: ret = "虚"; break;
    case 10: ret = "危"; break;
    case 11: ret = "室"; break;
    case 12: ret = "壁"; break;
    case 13: ret = "奎"; break;
    case 14: ret = "婁"; break;
    case 15: ret = "胃"; break;
    case 16: ret = "昴"; break;
    case 17: ret = "畢"; break;
    case 18: ret = "觜"; break;
    case 19: ret = "参"; break;
    case 20: ret = "井"; break;
    case 21: ret = "鬼"; break;
    case 22: ret = "柳"; break;
    case 23: ret = "星"; break;
    case 24: ret = "張"; break;
    case 25: ret = "翼"; break;
    case 26: ret = "軫"; break;
    case 27: ret = "角"; break;
  }
  
  return ret;
}

function explanation(you, syuku, shi){
  document.getElementById("you1").innerHTML = you+"　"+explanation6you(you);
  document.getElementById("syuku1").innerHTML = explanation28syuku(syuku);
  document.getElementById("junishi1").innerHTML = explanation12shi(shi);
}

function explanation6you(you){

  var ret = "";
  if(you=="先勝"){
    ret = "午前中が吉、午後二時より六時までは凶。";
  }else if(you=="友引"){
    ret = "朝夕が大吉、正午のみ凶、。葬式は忌むべし。";
  }else if(you=="先負"){
    ret = "午後より吉、午前中は凶。諸事静かなる事に吉。";
  }else if(you=="仏滅"){
    ret = "凶日。この日に病めば長引く。本光寺参詣、仏事のみ吉。";
  }else if(you=="大安"){
    ret = "吉日。婚礼、旅行、移転、開店など万事に吉。";
  }else if(you=="赤口"){
    ret = "凶日。正午のみ吉。";
  }
  return ret;
}
function explanation28syuku(syuku){

  var ret = "";
  if(syuku=="角"){ ret = "角(かく)宿　結婚・移転・衣類裁断・着初め・井戸掘り・柱立ては吉。仏事埋葬は忌む。";
  }else if(syuku=="亢"){ ret = "亢(こう)宿　結納・衣類仕立て・貯金・投資は大吉。普請・造作・移転は凶。";
  }else if(syuku=="氐"){ ret = "氐(てい)宿　結婚・普請・造作・開店・移転・別居は大吉。衣類裁断・着初めは大凶。";
  }else if(syuku=="房"){ ret = "房(ぼう)宿　大吉日。棟上・造作・結婚・酒造り・土地購入・衣類裁断・着初めは吉。別居・旅行は大吉。";
  }else if(syuku=="心"){ ret = "心(しん)宿　本光寺参詣ご利益多し。祭祀・旅行帰宅・出張帰宅は大吉。造作・縁組は大凶。埋葬は忌む。";
  }else if(syuku=="尾"){ ret = "尾(び)宿　服薬・結婚・造作・開店は吉。衣類裁断・着初めは凶。";
  }else if(syuku=="箕"){ ret = "箕(き)宿　衣類裁断・着初めは大吉。埋葬は忌む。";
  }else if(syuku=="斗"){ ret = "斗(と)宿　吉日。井戸掘り・倉庫建築・衣類裁断・造作は吉。";
  }else if(syuku=="牛"){ ret = "牛(ぎゅう)宿　本光寺では配当に加えません。";
  }else if(syuku=="女"){ ret = "女(じょ)宿　大悪日。衣類裁断・着初め・移転・造作・新規事業は凶。埋葬は忌む。";
  }else if(syuku=="虚"){ ret = "虚(きょ)宿　大悪日。造作は凶。埋葬は忌む。";
  }else if(syuku=="危"){ ret = "危(き)宿　悪日。結婚・祝い事・衣類裁断・着初め・造作・移転は凶。";
  }else if(syuku=="室"){ ret = "室(しつ)宿　大吉日。祝い事・結婚・造作・起工式・地鎮式・柱立て・井戸掘り・移転・開店・服薬は大吉。衣類裁断は大凶。埋葬は忌む。";
  }else if(syuku=="壁"){ ret = "壁(へき)宿　大吉日。衣類裁断・着初め・造作・結婚・祝い事・土地購入・普請は大吉。埋葬は福禄倍増する。";
  }else if(syuku=="奎"){ ret = "奎(けい)宿　衣類裁断は大吉。開店・新築引越・相談・旅行出発は大凶。埋葬は忌む。";
  }else if(syuku=="婁"){ ret = "婁(ろう)宿　大吉日。衣類裁断・着初め・新築引越・造作・結婚・祝い事は大吉。";
  }else if(syuku=="胃"){ ret = "胃(い)宿　大悪日。訴訟・新築は大凶。埋葬は忌む。";
  }else if(syuku=="昴"){ ret = "昴(ぼう)宿　大吉日。本光寺参詣ご利益多し。祭祀は大吉。";
  }else if(syuku=="畢"){ ret = "畢(ひつ)宿　大吉日。本光寺参詣ご利益多し。祭祀・造作・祝い事・移転・売買・結婚は大吉。";
  }else if(syuku=="觜"){ ret = "觜(し)宿　大悪日。万事大凶。";
  }else if(syuku=="参"){ ret = "参(じん)宿　倉庫建築は大吉。結婚・旅行・造作・開店は吉。衣類裁断は凶。埋葬は忌む。";
  }else if(syuku=="井"){ ret = "井(せい)宿　吉日。衣類裁断は凶。埋葬は忌む。";
  }else if(syuku=="鬼"){ ret = "鬼(き)宿　大悪日。万事大凶。本光寺参詣ご利益多し。祭祀は吉。";
  }else if(syuku=="柳"){ ret = "柳(りゅう)宿　悪日。衣類裁断・着初めは凶。埋葬は忌む。";
  }else if(syuku=="星"){ ret = "星(せい)宿　大悪日。結婚・服薬は凶。埋葬は忌む。";
  }else if(syuku=="張"){ ret = "張(ちょう)宿　大吉日。結婚・衣類裁断・着初めは大吉。";
  }else if(syuku=="翼"){ ret = "翼(よく)宿　大悪日。万事大凶。";
  }else if(syuku=="軫"){ ret = "軫(しん)宿　吉日。土地購入・井戸掘り・棟上は大吉。衣類裁断・着初めは凶。埋葬は子孫繁栄する。";
  }

  return ret;
}
function explanation12shi(shi){
  var ret = "";
  
  if(shi=="戌"){ ret = "安産参詣ご利益多し。";
  }else if(shi=="子"){ ret = "子宝参詣ご利益多し。";
  }else{ //ret = "安産参詣ご利益多し。大吉。";
    ret = "";
  }
  
  return ret;
}


