//------------------------------------------------------------
//javascript by Kuwahara
//------------------------------------------------------------

// ------------- 設定部分 ------------- //
// 制限をかける
// 使用しない場合は、LimitYear = 0, LimitMonth = 0, LimitDay = 0
// 全部に0を設定する。
// 使用する際は必ず年月日を入れる。
var LimitYear = 2099; //年 yyyy
var LimitMonth = 12; //月 mm
var LimitDay = 31;  //日 dd

var Tcolor1    = "#FFFFFF"; //カレンダー年月の背景色
var Tcolor2    = "#000000"; //カレンダー年月の文字色
var SundayColor   = "#FF0000"; //日曜日の文字色
var SaturdayColor   = "#0000FF"; //土曜日の文字色
var HolidayBackColor  = "#FECCCB"; //日曜・祝日・振り替え休日の背景色
var SaturdayBackColor  = "#A5D1FE"; //土曜日の背景色
var toDayColor    = "#D71920"; //今日の日付色
var deleteDayColor   = "#A9A9A9"; //今日以前の日付、または制限日以降の日付の色

// -----------------↓↓↓ここからはいじらないで下さい。↓↓↓----------------- //
// 日付を設定して自分を閉じる
function setStayDate(nYear, nMonth, nDay, oj1,oj1name,oj2,oj2name,oj3,oj3name) 
{
 for( i = 0; i < window.opener.document.forms[oj1].elements[oj1name].length; i++ ){
  if( eval(window.opener.document.forms[oj1].elements[oj1name].options[i].value) == nYear ){
   window.opener.document.forms[oj1].elements[oj1name].selectedIndex = i;
  }
 }
 for( i = 0; i < window.opener.document.forms[oj2].elements[oj2name].length; i++ ){
  if( eval(window.opener.document.forms[oj2].elements[oj2name].options[i].value) == nMonth ){
   window.opener.document.forms[oj2].elements[oj2name].selectedIndex = i;
  }
 }
 for( i = 0; i < window.opener.document.forms[oj3].elements[oj3name].length; i++ ){
  if( eval(window.opener.document.forms[oj3].elements[oj3name].options[i].value) == nDay ){
   window.opener.document.forms[oj3].elements[oj3name].selectedIndex = i;
  }
 }
 
 // チェックアウト日にチェックイン日翌日を設定
 if(oj1name=="ciDateY"){
  leisure_nd = new Date(nYear, nMonth-1, nDay);
  y = leisure_nd.getFullYear();
  m = leisure_nd.getMonth();
  d = leisure_nd.getDate();
  dt = addDate(y, m ,d, 1);
  window.opener.document.forms[oj1].coDateY.selectedIndex = yearIndex(dt.getFullYear());
  window.opener.document.forms[oj1].coDateM.selectedIndex = dt.getMonth();
  window.opener.document.forms[oj1].coDateD.selectedIndex = dt.getDate() -1;
 }
 window.close();

}
// ------------- カレンダー部分 ------------- //
//カレンダーを書き出す。（一か月分）
function ShowCalender(nYear, nMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name) //nYearに年度,　nMonthに月を渡してください。
{
 var strCalString;
 var dtCal = new Date;
 var strYear;
 var strMonth;
 var strDate;
 var nRemain;
 var weekCnt;
 var monDayCnt;
 var syuku;
 var furikae;
 var fullYear;
 var Limit;
 var trFlg=0;
 var weekCnt2=0;
 var strDay = new Array("日","月","火","水","木","金","土");
 var nMonthCount = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

 //年月日を取得
 getStrYear = dtCal.getYear();
 fullYear = dtCal.getFullYear();
 getStrMonth = dtCal.getMonth();
 getStrDate = dtCal.getDate();
 
 strYear = nYear; //年度
 strMonth = nMonth - 1; //月-1

 //表示のための準備
 dtCal.setYear(strYear);
 dtCal.setDate(1);
 dtCal.setMonth(strMonth);
 strTodaysMonth = dtCal.getMonth()+1;
 var nDayCount = nMonthCount[strMonth];
 if ((strMonth == 1)&&(((strYear%4 == 0)&&(strYear%100 != 0))||(strYear%400 == 0))) {
  nDayCount = 29;
 }

 //ここから表示
 strCalString = "";


 strCalString = strCalString + "<TABLE border='0' CELLSPACING='0' CELLPADDING='0'>";
 strCalString = strCalString + "<TR><TD>";

 //年月を表示

 strCalString = strCalString + "<center><TABLE border='0' CELLSPACING='0' CELLPADDING='0'>";
 strCalString = strCalString + "<TR><TD BGCOLOR='" + Tcolor1 + "' ALIGN='CENTER'><FONT COLOR='" + Tcolor2 + "' SIZE='2'><B>"+strYear+"年"+strTodaysMonth+"月</B></FONT></TD></TR>";
 strCalString = strCalString + "</TABLE></center>";


 strCalString = strCalString + "<TABLE BGCOLOR='#808080' border='0' CELLSPACING='0' CELLPADDING='0'>";
 strCalString = strCalString + "<TR><TD>";


 strCalString = strCalString + "<TABLE border='0' CELLSPACING='1' CELLPADDING='3'><TR>";
 //一行目は曜日
 for(nLoop=0; nLoop < 7; nLoop++) {

  strCalString = strCalString + "<TD BGCOLOR='#DCDCDC'>";
  if(nLoop == 0){
   strCalString = strCalString + "<FONT COLOR='" + SundayColor + "' SIZE='2'>" + strDay[nLoop] + "</FONT>";
  }else if(nLoop == 6){
   strCalString = strCalString + "<FONT COLOR='" + SaturdayColor + "' SIZE='2'>" + strDay[nLoop] + "</FONT>";
  }else{
   strCalString = strCalString + "<FONT SIZE='2'>" + strDay[nLoop] + "</FONT>";
  }

  strCalString = strCalString + "</TD>";

 }
 strCalString = strCalString + "</TR>";

 weekCnt = 0;
 monDayCnt = 0;
 furikae = 0;
 //ブランクを挿入
 for(nLoop = 0; nLoop < dtCal.getDay(); nLoop++) {
  strCalString = strCalString + "<TD BGCOLOR='#FFFFFF'><BR></TD>";
  if(weekCnt == 0){
   weekCnt = weekCnt + 1;
  }
 }
 //日付を挿入
 for(nLoop = 0; nLoop < nDayCount; nLoop++) {
  if(dtCal.getDate() > nLoop) {
   if (dtCal.getDay() == 0) {
    strCalString = strCalString + "<TR>";
    weekCnt = weekCnt + 1;
   }


   if (dtCal.getDay() != 7) {
    syuku = 0;
    //月曜日のカウント
    if(dtCal.getDay() == 1){
     monDayCnt = monDayCnt + 1;
    }
    // 第2月曜
    if (monDayCnt == 2) {
     // 1月 成人の日
     if (strTodaysMonth == 1 && dtCal.getDay() == 1) {syuku = 1;}
     // 10月 体育の日
     if (strTodaysMonth == 10 && dtCal.getDay() == 1) {syuku = 1;}
    }
    // 第3月曜
    if (monDayCnt == 3) {
     // 7月 海の日 (2003〜)
     if (strYear >= 2003 && strTodaysMonth == 7 && dtCal.getDay() == 1) {syuku = 1;}
     // 9月 敬老の日 (2003〜)
     if (strYear >= 2003 && strTodaysMonth == 9 && dtCal.getDay() == 1) {syuku = 1;}
    }
    // 7月20日 海の日 (〜2002)
    if(strYear < 2003 && strTodaysMonth == 7 && dtCal.getDate() == 20) {syuku = 1;}
    //  9月15日 敬老の日 (〜2002)
    if(strYear < 2003 && strTodaysMonth == 9 && dtCal.getDate() == 15) {syuku = 1;}
    // 天文学的に周期が変わるため
    // 春分の日 2099年まで対応
    if (strTodaysMonth == 3) {
     if (dtCal.getDate() == Math.floor(20.8431+0.242194*(strYear - 1980) - Math.floor((strYear - 1980)/4))) {syuku = 1;}
    }
    // 秋分の日 2099年まで対応
    if (strTodaysMonth == 9) {
     if (dtCal.getDate() == Math.floor(23.2488+0.242194*(strYear - 1980) - Math.floor((strYear - 1980)/4))) {syuku = 1;}
    }
    //  1月 1日 元日
    if (strTodaysMonth == 1 && dtCal.getDate() == 1) {syuku = 1;}
    //  2月11日 建国記念の日
    if (strTodaysMonth == 2 && dtCal.getDate() == 11) { syuku = 1;}
    //  4月29日 みどりの日
    if (strTodaysMonth == 4 && dtCal.getDate() == 29) { syuku = 1;}
    //  5月 3日 憲法記念日
    if (strTodaysMonth == 5 && dtCal.getDate() == 3) {syuku = 1;}
    //  5月 4日 国民の休日
    if (strTodaysMonth == 5 && dtCal.getDate() == 4) { syuku = 1; }
    //  5月 5日 こどもの日
    if (strTodaysMonth == 5 && dtCal.getDate() == 5) { syuku = 1; }
    // 11月 3日 文化の日
    if(strTodaysMonth == 11 && dtCal.getDate() == 3) { syuku = 1; }
    // 11月23日 勤労感謝の日
    if(strTodaysMonth == 11 && dtCal.getDate() == 23) { syuku = 1; }
    // 12月23日 天皇誕生日
    if(strTodaysMonth == 12 && dtCal.getDate() == 23) { syuku = 1; }

    // 振り替え休日のフラグチェック
    if(furikae == 0){
     if (dtCal.getDay() == 0) {
      strCalString = strCalString + "<TD BGCOLOR='" +HolidayBackColor+"' ALIGN='CENTER'>";
      //振り替え休日のフラグを立てる
      if(syuku == 1){
       furikae = 1;
      }
     }else if (dtCal.getDay() == 6) {
      if(syuku == 1){
       strCalString = strCalString + "<TD BGCOLOR='" +HolidayBackColor+"' ALIGN='CENTER'>";
      }else{
       strCalString = strCalString + "<TD BGCOLOR='" + SaturdayBackColor +"' ALIGN='CENTER'>";
      }
     }else{
      if(syuku == 1){
       strCalString = strCalString + "<TD BGCOLOR='" +HolidayBackColor+"' ALIGN='CENTER'>";
      }else{
       strCalString = strCalString + "<TD  BGCOLOR='#FFFFFF' ALIGN='CENTER'>";
      }
     }
    }else{
     //振り替え休日
     strCalString = strCalString + "<TD BGCOLOR='"+HolidayBackColor+"' ALIGN='CENTER'>";
     //振り替え休日のフラグ初期化
     furikae = 0;
    }

    //日付制限
    Limit = 0;
    if(LimitYear > 0){
     if(LimitMonth > 0 ){
      if(LimitDay > 0){
       var LimitDate = new Date(LimitYear, LimitMonth, LimitDay);
       var LimitToDay = new Date(strYear, strTodaysMonth, dtCal.getDate());
       if(LimitDate < LimitToDay){
        Limit = 1;
       }
      }
     }
    }

    //日付表示の作成
    if(Limit == 0){
     if(getStrYear == dtCal.getYear()){
      if(getStrMonth == dtCal.getMonth()){
       if(getStrDate == dtCal.getDate()){
        //今日
        strCalString = strCalString + '<A HREF="javaScript:setStayDate(' + strYear + ',' + strTodaysMonth + ',' + dtCal.getDate() +',\'' + oj1 + '\',\''+oj1name+'\',\''+oj2+'\',\''+oj2name+'\',\''+oj3+'\',\''+oj3name+'\')"><FONT COLOR="'+toDayColor+'" SIZE="2"><B>'+dtCal.getDate()+'</B></FONT></A></TD>';
       }else if(getStrDate > dtCal.getDate()){
        //今日以前
        strCalString = strCalString + "<FONT SIZE='2' COLOR='"+deleteDayColor+"'>"+dtCal.getDate()+"</FONT></TD>";
       }else{
        //今日以降
        strCalString = strCalString + '<A HREF="javaScript:setStayDate(' + strYear + ',' + strTodaysMonth + ',' + dtCal.getDate() +',\'' + oj1 + '\',\''+oj1name+'\',\''+oj2+'\',\''+oj2name+'\',\''+oj3+'\',\''+oj3name+'\')"><FONT SIZE="2">'+dtCal.getDate()+'</FONT></A></TD>';
       }
      } else {
       if(getStrMonth >= dtCal.getMonth()){
        strCalString = strCalString + "<FONT SIZE='2' COLOR='"+deleteDayColor+"'>"+dtCal.getDate()+"</FONT></TD>";
       }else{
        strCalString = strCalString + '<A HREF="javaScript:setStayDate(' + strYear + ',' + strTodaysMonth + ',' + dtCal.getDate() +',\'' + oj1 + '\',\''+oj1name+'\',\''+oj2+'\',\''+oj2name+'\',\''+oj3+'\',\''+oj3name+'\')"><FONT SIZE="2">'+dtCal.getDate()+'</FONT></A></TD>';
       }
      }
     }else{
      if(getStrYear >= dtCal.getYear()){
       strCalString = strCalString + "<FONT SIZE='2' COLOR='"+deleteDayColor+"'>"+dtCal.getDate()+"</FONT></TD>";
      }else{
        strCalString = strCalString + '<A HREF="javaScript:setStayDate(' + strYear + ',' + strTodaysMonth + ',' + dtCal.getDate() +',\'' + oj1 + '\',\''+oj1name+'\',\''+oj2+'\',\''+oj2name+'\',\''+oj3+'\',\''+oj3name+'\')"><FONT SIZE="2">'+dtCal.getDate()+'</FONT></A></TD>';
      }
     }
    }else{
     if(getStrYear == dtCal.getYear()){
      if(getStrMonth == dtCal.getMonth()){
       if(getStrDate == dtCal.getDate()){
        //今日
        strCalString = strCalString + "<FONT COLOR='"+toDayColor+"' SIZE='2'><B>"+dtCal.getDate()+"</B></FONT></TD>";
       }else{
        strCalString = strCalString + "<FONT SIZE='2' COLOR='"+deleteDayColor+"'>"+dtCal.getDate()+"</FONT></TD>";
       }
      } else {
       strCalString = strCalString + "<FONT SIZE='2' COLOR='"+deleteDayColor+"'>"+dtCal.getDate()+"</FONT></TD>";
      }
     }else{
      strCalString = strCalString + "<FONT SIZE='2' COLOR='"+deleteDayColor+"'>"+dtCal.getDate()+"</FONT></TD>";
     }
    }
   trFlg=1;
   }
   if (dtCal.getDay() == 7) {
    trFlg=0;
    strCalString = strCalString + "</TR>";
   }
  }
  dtCal.setDate(dtCal.getDate()+1);
  nRemain = 7-dtCal.getDay();
 }
 if(dtCal.getDay()>0 && dtCal.getDay()<7){

 //ブランクを挿入
 for(nLoop = dtCal.getDay() ; nLoop < 7 ; nLoop++) {
  strCalString = strCalString + "<TD BGCOLOR='#FFFFFF'><BR></TD>";
 }

  strCalString = strCalString + "</TR>";
 }
 strCalString = strCalString + "</TABLE>";
 strCalString = strCalString + "</TD></TR></TABLE>";

 strCalString = strCalString + "</TD></TR></TABLE>";

 return strCalString;
}

//次の月を表示
function nextShowMnoth(nYear, nMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name) 
{
 strMonthString = "";
 strMonthString = "<FONT SIZE='2'><a href='cal.html?year=" + getNxetYaer(nYear,nMonth+1) +"&mon=" + getNxetMonth(getNxetMonth(nMonth)) + "&oj1=" + oj1 + "&oj1name=" +oj1name +"&oj2=" + oj2 + "&oj2name=" +oj2name +"&oj3=" + oj3 + "&oj3name=" +oj3name+"'>次の月を表示 &gt;&gt;</a></FONT>";

 return strMonthString;
}

//前の月を表示
function lastShowMnoth(nYear, nMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name) 
{
 strMonthString = "";
 strMonthString = "<FONT SIZE='2'><a href='cal.html?year=" + getLastYaer(nYear, nMonth) +"&mon=" + getLastMonth(nYear, nMonth) + "&oj1=" + oj1 + "&oj1name=" +oj1name +"&oj2=" + oj2 + "&oj2name=" +oj2name +"&oj3=" + oj3 + "&oj3name=" +oj3name+"'>&lt;&lt; 前の月を表示</a></FONT>";
 return strMonthString;
}

//カレンダーの表示
function ShowTwoCalender(nYear, nMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name) 
{
 var strCalString;
 var dtCal = new Date;
 //年月日を取得
 Year = dtCal.getYear();
 Month = dtCal.getMonth()+1;

 strCalString = "";
 //年月日を取得
 strYear = nYear;
 strMonth = nMonth;
 strNextMonth = getNxetMonth(nMonth);
 strNextYaer = getNxetYaer(nYear, nMonth);

 strThreeMonth = getNxetMonth(strNextMonth);
 strThreeYaer = getNxetYaer(strNextYaer,strThreeMonth);

 strCalString = strCalString + "<TABLE BORDER='0' width='345'><TR><TD ALIGN='CENTER'>";
 strCalString = strCalString + "<TABLE BORDER='0' width='345'><TR><TD>";

 //前の月表示
 if(Year != nYear){
  strCalString = strCalString + lastShowMnoth(nYear, nMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name);
 }else{
  if(Month != nMonth){
   strCalString = strCalString + lastShowMnoth(nYear, nMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name);
  }else{
   strCalString = strCalString + "<br>";
  }
 }
 strCalString = strCalString + "</TD><TD VALIGN='TOP' ALIGN='RIGHT'>";

 //次の月表示
 if(getNxetYaer(nYear,nMonth+1) == LimitYear){
  if(getNxetMonth(getNxetMonth(nMonth)) < LimitMonth){
   strCalString = strCalString + nextShowMnoth(nYear, nMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name);
  }else if(getNxetMonth(getNxetMonth(nMonth)) == LimitMonth){
   strCalString = strCalString + nextShowMnoth(nYear, nMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name);
  }else{
   strCalString = strCalString + "<BR>";
  }
 }else if(getNxetYaer(nYear,nMonth+1) < LimitYear){
  strCalString = strCalString + nextShowMnoth(nYear, nMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name);
 }else{
  if(LimitYear == 0){
   strCalString = strCalString + nextShowMnoth(nYear, nMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name);
  }else{
   strCalString = strCalString + "<br>";
  }
 }
 strCalString = strCalString + "</TD></TR></TABLE>";
 strCalString = strCalString + "</TD></TR></TABLE>";

 strCalString = strCalString + "<TABLE BORDER='0' CELLSPACING='1' CELLPADDING='0'><TR><TD VALIGN='TOP' BGCOLOR='#808080'>";
 strCalString = strCalString + "<TABLE BORDER='0' CELLSPACING='1' CELLPADDING='15'><TR><TD VALIGN='TOP' BGCOLOR='#FFFFFF'>";
 strCalString = strCalString + "<TABLE BORDER='0'><TR><TD VALIGN='TOP'>";
 strCalString = strCalString + ShowCalender(strYear, strMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name);
 strCalString = strCalString + "</TD><TD VALIGN='TOP'>";
 strCalString = strCalString + ShowCalender(strNextYaer, strNextMonth, oj1,oj1name,oj2,oj2name,oj3,oj3name);
 strCalString = strCalString + "</TD></TR></TABLE>";
 strCalString = strCalString + "</TD></TR></TABLE>";
 strCalString = strCalString + "</TD></TR></TABLE>";

 return strCalString;

}
//来月の取得
function getNxetMonth(nMonth) 
{
 n_mon = nMonth + 1;
 if( n_mon >= 13 ){
     n_mon = 1;
 }
 return n_mon;
}
//来年の取得
function getNxetYaer(nYear, nMonth) 
{
 n_mon = nMonth + 1;
 if( n_mon >= 13 ){
     n_year = nYear + 1;
 }else{
     n_year = nYear;
 }
 return n_year;
}
//先月の取得
function getLastMonth(nYear, nMonth) 
{
 l_mon = nMonth - 1 ;
 if( l_mon == 0 ){
     l_mon = 12;
     l_year = nYear -1 ;
 }else{
     l_year = nYear;
 }
 return l_mon;
}
//去年の取得
function getLastYaer(nYear, nMonth) 
{
 l_mon = nMonth - 1 ;
 if( l_mon == 0 ){
     l_mon = 12;
     l_year = nYear -1 ;
 }else{
     l_year = nYear;
 }
 return l_year;
}
function makeCalender(oj1, oj2, oj3)
{
 var getStrYear = "";
 var getStrMonth = "";
 var url = "";
 getStrYear = window.document.forms[oj1.form.name].elements[oj1.name].options[window.document.forms[oj1.form.name].elements[oj1.name].selectedIndex].value;
 getStrMonth = window.document.forms[oj2.form.name].elements[oj2.name].options[window.document.forms[oj2.form.name].elements[oj2.name].selectedIndex].value;
 url = ""
// url += "http://tech.mytrip.net/share/ext/html/cal.html?year=" + getStrYear + "&mon=" + getStrMonth;
// url += "http://travel.rakuten.co.jp/share/ext/html/cal.html?year=" + getStrYear + "&mon=" + getStrMonth;
 url += "cal.html?year=" + getStrYear + "&mon=" + getStrMonth;
 url += "&oj1="+oj1.form.name;
 url += "&oj1name="+oj1.name;
 url += "&oj2="+oj2.form.name;
 url += "&oj2name="+oj2.name;
 url += "&oj3="+oj3.form.name;
 url += "&oj3name="+oj3.name;

 window.open(url,"cal","width=400,height=280");
}
function yearIndex(yearIdx)
{
//    if (yearIdx == 2010) { ry = 0;}
//    else if (yearIdx == 2011) { ry = 1;}
//    else if (yearIdx == 2012) { ry = 2;}
    var ry;
    var date = new Date();
    ry = yearIdx - date.getFullYear();

    return(ry);
}
function addDate(year, month, date, n)
{
    var leisure_number = n * 1000 * 60 * 60 * 24;
 var targetDate = new Date(year, month, date);
 var DateInMS = targetDate.getTime();
 DateInMS += leisure_number;
 targetDate.setTime(DateInMS);
 var theYear = targetDate.getFullYear();
 var theMonth = targetDate.getMonth();
 var theDate = targetDate.getDate();
    rdt  = new Date(theYear, theMonth, theDate);
    return(rdt);
}



